From cd81372fc6dad55572e226ec924e8e3906c8247b Mon Sep 17 00:00:00 2001 From: aamir-csol Date: Thu, 9 Oct 2025 11:21:07 +0300 Subject: [PATCH 01/39] family screen add fixes & remove & switch & widgets --- .../medical_file/medical_file_view_model.dart | 7 +-- .../medical_file/medical_file_page.dart | 4 +- lib/presentation/my_family/my_family.dart | 24 ++++++--- .../my_family/widget/family_cards.dart | 53 ++++++++++--------- lib/services/dialog_service.dart | 22 +++++--- 5 files changed, 63 insertions(+), 47 deletions(-) diff --git a/lib/features/medical_file/medical_file_view_model.dart b/lib/features/medical_file/medical_file_view_model.dart index db2d7fe..e4dc854 100644 --- a/lib/features/medical_file/medical_file_view_model.dart +++ b/lib/features/medical_file/medical_file_view_model.dart @@ -59,6 +59,7 @@ class MedicalFileViewModel extends ChangeNotifier { _selectedFamilyFileTabIndex = value; notifyListeners(); } + } static final DialogService _dialogService = getIt.get(); @@ -89,7 +90,6 @@ class MedicalFileViewModel extends ChangeNotifier { void onFamilyFileTabChange(int index) { setSelectedFamilyFileTabIndex = index; - notifyListeners(); } setIsPatientVaccineListLoading(bool isLoading) { @@ -439,9 +439,6 @@ class MedicalFileViewModel extends ChangeNotifier { ); } - - - Future addFamilyFile({required OTPTypeEnum otpTypeEnum}) async { LoaderBottomSheet.showLoader(); AuthenticationViewModel authVM = getIt.get(); @@ -597,7 +594,7 @@ class MedicalFileViewModel extends ChangeNotifier { getFamilyFiles(status: 0); getAllPendingRecordsByResponseId(); LoaderBottomSheet.hideLoader(); - onFamilyFileTabChange(0); + // onFamilyFileTabChange(0); } }, ); diff --git a/lib/presentation/medical_file/medical_file_page.dart b/lib/presentation/medical_file/medical_file_page.dart index 1eff927..19d4335 100644 --- a/lib/presentation/medical_file/medical_file_page.dart +++ b/lib/presentation/medical_file/medical_file_page.dart @@ -114,8 +114,8 @@ class _MedicalFilePageState extends State { ).onPress(() { DialogService dialogService = getIt.get(); dialogService.showFamilyBottomSheetWithoutH( - label: "Who do you want to book for?".needTranslation, - message: "This clinic or doctor is only available for the below eligible profiles.".needTranslation, + label: "Family Members".needTranslation, + message: "Choose a profile to swithc family file.".needTranslation, onSwitchPress: (FamilyFileResponseModelLists profile) { medicalFileViewModel.switchFamilyFiles(responseID: profile.responseId, patientID: profile.patientId, phoneNumber: profile.mobileNumber); }, diff --git a/lib/presentation/my_family/my_family.dart b/lib/presentation/my_family/my_family.dart index f9c4799..9b8014a 100644 --- a/lib/presentation/my_family/my_family.dart +++ b/lib/presentation/my_family/my_family.dart @@ -46,7 +46,11 @@ class _FamilyMedicalScreenState extends State { void initState() { super.initState(); medicalVM = context.read(); + WidgetsBinding.instance.addPostFrameCallback((_) { + medicalVM?.onFamilyFileTabChange(0); + }); } + @override Widget build(BuildContext context) { @@ -84,13 +88,17 @@ class _FamilyMedicalScreenState extends State { children: [ appState.isChildLoggedIn ? SizedBox() - : CustomTabBar( - activeBackgroundColor: AppColors.secondaryLightRedColor, - activeTextColor: AppColors.primaryRedColor, - tabs: [CustomTabBarModel(null, LocaleKeys.family.tr()), CustomTabBarModel(null, LocaleKeys.request.tr())], - onTabChange: (index) { - medicalVM!.onFamilyFileTabChange(index); - }, + : Selector( + selector: (_, model) => model.getSelectedFamilyFileTabIndex, + builder: (context, selectedIndex, child) => CustomTabBar( + activeBackgroundColor: AppColors.secondaryLightRedColor, + activeTextColor: AppColors.primaryRedColor, + // selectedIndex: selectedIndex, + tabs: [CustomTabBarModel(null, LocaleKeys.family.tr()), CustomTabBarModel(null, LocaleKeys.request.tr())], + onTabChange: (index) { + medicalVM!.onFamilyFileTabChange(index); + }, + ), ), appState.isChildLoggedIn ? SizedBox() : SizedBox(height: 25.h), Selector(selector: (_, model) => model.getSelectedFamilyFileTabIndex, builder: (context, selectedIndex, child) => getFamilyTabs(index: selectedIndex)), @@ -118,7 +126,7 @@ class _FamilyMedicalScreenState extends State { case 1: return FamilyCards( profiles: medicalVM!.pendingFamilyFiles, - isRequestDesign: true, + isRequestDesign: medicalVM!.getSelectedFamilyFileTabIndex == 1, onSelect: (FamilyFileResponseModelLists profile) { medicalVM!.acceptRejectFileFromFamilyMembers(id: profile.id, status: 3); }, diff --git a/lib/presentation/my_family/widget/family_cards.dart b/lib/presentation/my_family/widget/family_cards.dart index 9b1fb4b..50aec1c 100644 --- a/lib/presentation/my_family/widget/family_cards.dart +++ b/lib/presentation/my_family/widget/family_cards.dart @@ -14,6 +14,7 @@ import 'package:hmg_patient_app_new/services/dialog_service.dart'; import 'package:hmg_patient_app_new/services/navigation_service.dart'; import 'package:hmg_patient_app_new/theme/colors.dart'; import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart'; +import 'package:hmg_patient_app_new/widgets/chip/app_custom_chip_widget.dart'; import 'package:hmg_patient_app_new/widgets/chip/custom_chip_widget.dart'; class FamilyCards extends StatefulWidget { @@ -88,9 +89,9 @@ class _FamilyCardsState extends State { crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start, children: [ - CustomChipWidget( - height: 30.h, - chipType: ChipTypeEnum.alert, + AppCustomChipWidget( + // height: 30.h, + // chipType: ChipTypeEnum.alert, backgroundColor: profile.status == FamilyFileEnum.pending.toInt ? AppColors.alertLightColor.withValues(alpha: 0.20) : profile.status == FamilyFileEnum.rejected.toInt @@ -98,10 +99,10 @@ class _FamilyCardsState extends State { : profile.status == FamilyFileEnum.active.toInt ? AppColors.lightGreenColor : AppColors.lightGrayBGColor, - chipText: profile.statusDescription ?? "N/A", - iconAsset: null, - isShowBorder: false, - borderRadius: 8.h, + labelText: profile.statusDescription ?? "N/A", + // iconAsset: null, + // isShowBorder: false, + // borderRadius: 8.h, textColor: profile.status == FamilyFileEnum.pending.toInt ? AppColors.alertLightColor : profile.status == FamilyFileEnum.rejected.toInt @@ -116,14 +117,14 @@ class _FamilyCardsState extends State { .toText12(isBold: false, isCenter: false, maxLine: 1, fontWeight: FontWeight.w500, color: AppColors.greyTextColor), ]), SizedBox(height: 8.h), - CustomChipWidget( - height: 30.h, - chipType: ChipTypeEnum.alert, + AppCustomChipWidget( + // height: 30.h, + // chipType: ChipTypeEnum.alert, backgroundColor: AppColors.lightGrayBGColor, - chipText: "Medical File: ${profile.responseId ?? "N/A"}", - iconAsset: null, - isShowBorder: false, - borderRadius: 8.h, + labelText: "Medical File: ${profile.responseId ?? "N/A"}", + // iconAsset: null, + // isShowBorder: false, + // borderRadius: 8.h, textColor: AppColors.textColor), ], ), @@ -172,22 +173,22 @@ class _FamilyCardsState extends State { SizedBox(height: 8.h), (profile.patientName ?? "Unknown").toText14(isBold: false, isCenter: true, maxlines: 1, weight: FontWeight.w600), SizedBox(height: 8.h), - CustomChipWidget( - chipType: ChipTypeEnum.alert, + AppCustomChipWidget( + // chipType: ChipTypeEnum.alert, backgroundColor: AppColors.lightGrayBGColor, - chipText: "Relation:${profile.relationship ?? "N/A"}", - iconAsset: AppAssets.heart, - isShowBorder: false, - borderRadius: 8.h, + labelText: "Relation:${profile.relationship ?? "N/A"}", + icon: AppAssets.heart, + // isShowBorder: false, + // borderRadius: 8.h, textColor: AppColors.textColor), widget.isShowDetails ? SizedBox(height: 4.h) : SizedBox(), widget.isShowDetails - ? CustomChipWidget( - chipType: ChipTypeEnum.alert, + ? AppCustomChipWidget( + // chipType: ChipTypeEnum.alert, backgroundColor: AppColors.lightGrayBGColor, - chipText: "Age:${profile.age ?? "N/A"} Years", - isShowBorder: false, - borderRadius: 8.h, + labelText: "Age:${profile.age ?? "N/A"} Years", + // isShowBorder: false, + // borderRadius: 8.h, textColor: AppColors.textColor, ) : SizedBox(), @@ -208,6 +209,7 @@ class _FamilyCardsState extends State { textColor: isActive || !canSwitch ? AppColors.greyTextColor : AppColors.primaryRedColor, fontSize: 13.h, icon: isActive ? AppAssets.activeCheck : AppAssets.switch_user, + iconSize: 18.h, iconColor: isActive || !canSwitch ? (isActive ? null : AppColors.greyTextColor) : AppColors.primaryRedColor, padding: EdgeInsets.symmetric(vertical: 0, horizontal: 0), ).paddingOnly(top: 0, bottom: 0), @@ -318,6 +320,7 @@ class _FamilyCardsState extends State { backgroundColor: AppColors.lightGreenButtonColor, borderColor: AppColors.lightGreenButtonColor, textColor: AppColors.textGreenColor, + borderWidth: 0, icon: null, ), ), diff --git a/lib/services/dialog_service.dart b/lib/services/dialog_service.dart index 915f795..6c232f5 100644 --- a/lib/services/dialog_service.dart +++ b/lib/services/dialog_service.dart @@ -112,13 +112,21 @@ class DialogServiceImp implements DialogService { if (context == null) return; showCommonBottomSheetWithoutHeight(context, title: label ?? "", - child: FamilyCards( - profiles: profiles, - onSelect: (FamilyFileResponseModelLists profile) { - onSwitchPress(profile); - }, - onRemove: (FamilyFileResponseModelLists profile) {}, - isShowDetails: false, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.start, + children: [ + (message).toText16(isBold: false, color: AppColors.textColor), + SizedBox(height: 24.h), + FamilyCards( + profiles: profiles, + onSelect: (FamilyFileResponseModelLists profile) { + onSwitchPress(profile); + }, + onRemove: (FamilyFileResponseModelLists profile) {}, + isShowDetails: false, + ), + ], ), callBackFunc: () {}); } -- 2.30.2 From 987fe73128664902b3bc503c5a87743de8ac42cc Mon Sep 17 00:00:00 2001 From: aamir-csol Date: Sun, 19 Oct 2025 10:20:47 +0300 Subject: [PATCH 02/39] family screen add fixes & remove & switch & widgets --- lib/core/utils/size_utils.dart | 1 + lib/core/utils/utils.dart | 2 +- lib/presentation/authentication/login.dart | 17 ++++------- .../authentication/quick_login.dart | 30 +++++++++---------- lib/presentation/authentication/register.dart | 7 ++--- .../authentication/register_step2.dart | 20 ++++++------- .../medical_file/medical_file_page.dart | 16 ++++------ .../my_family/widget/family_cards.dart | 8 ++--- 8 files changed, 43 insertions(+), 58 deletions(-) diff --git a/lib/core/utils/size_utils.dart b/lib/core/utils/size_utils.dart index 0be751e..f2ba0e8 100644 --- a/lib/core/utils/size_utils.dart +++ b/lib/core/utils/size_utils.dart @@ -129,6 +129,7 @@ class SizeUtils { } log("longerSide: $longerSide"); + log("shorterSide: $shorterSide"); log("isTablet: $isTablet"); } } diff --git a/lib/core/utils/utils.dart b/lib/core/utils/utils.dart index a88d9c2..54d3131 100644 --- a/lib/core/utils/utils.dart +++ b/lib/core/utils/utils.dart @@ -315,7 +315,7 @@ class Utils { crossAxisAlignment: CrossAxisAlignment.center, children: [ SizedBox(height: isSmallWidget ? 0.h : 48.h), - Lottie.asset(AppAnimations.noData, repeat: false, reverse: false, frameRate: FrameRate(60), width: width.h, height: height.h, fit: BoxFit.fill), + Lottie.asset(AppAnimations.noData, repeat: false, reverse: false, frameRate: FrameRate(60), width: width, height: height, fit: BoxFit.cover), SizedBox(height: 16.h), (noDataText ?? LocaleKeys.noDataAvailable.tr()) .toText16(weight: FontWeight.w500, color: AppColors.greyTextColor, isCenter: true) diff --git a/lib/presentation/authentication/login.dart b/lib/presentation/authentication/login.dart index 7e5f4a1..a97cbb9 100644 --- a/lib/presentation/authentication/login.dart +++ b/lib/presentation/authentication/login.dart @@ -87,10 +87,10 @@ class LoginScreenState extends State { isAllowLeadingIcon: true, padding: EdgeInsets.symmetric(vertical: 8.h, horizontal: 10.h), leadingIcon: AppAssets.student_card, - errorMessage: "Please enter a valid national ID or file number", + errorMessage: "Please enter a valid national ID or file number".needTranslation, hasError: false, ), - SizedBox(height: 16.h), // Adjusted to sizer unit (approx 16px) + SizedBox(height: 16.h), CustomButton( height: 50.h, text: LocaleKeys.login.tr(), @@ -109,17 +109,12 @@ class LoginScreenState extends State { } }, ), - SizedBox(height: 10.h), // Adjusted to sizer unit (approx 14px) + SizedBox(height: 10.h), Center( child: RichText( textAlign: TextAlign.center, text: TextSpan( - style: context.dynamicTextStyle( - color: Colors.black, - fontSize: 14.f, // Adjusted to sizer unit - height: 26 / 16, // This height is a ratio, may need re-evaluation - fontWeight: FontWeight.w500, - ), + style: context.dynamicTextStyle(color: Colors.black, fontSize: 14.f, height: 26 / 16, fontWeight: FontWeight.w500), children: [ TextSpan(text: LocaleKeys.dontHaveAccount.tr(), style: context.dynamicTextStyle()), TextSpan(text: " "), @@ -139,9 +134,9 @@ class LoginScreenState extends State { ), ], ), - ).withVerticalPadding(2), // Adjusted to sizer unit + ).withVerticalPadding(2.h), ), - SizedBox(height: 20.h), // Adjusted to sizer unit (approx 14px) + SizedBox(height: 20.h), ], ), ), diff --git a/lib/presentation/authentication/quick_login.dart b/lib/presentation/authentication/quick_login.dart index f10d84f..9a12e13 100644 --- a/lib/presentation/authentication/quick_login.dart +++ b/lib/presentation/authentication/quick_login.dart @@ -25,14 +25,14 @@ class QuickLoginState extends State { Widget build(BuildContext context) { NavigationService navigationService = getIt.get(); return Container( - decoration: const BoxDecoration( + decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.only( - topLeft: Radius.circular(24), - topRight: Radius.circular(24), + topLeft: Radius.circular(24.r), + topRight: Radius.circular(24.r), ), ), - padding: const EdgeInsets.all(24), + padding: EdgeInsets.all(24.w), child: Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.center, @@ -50,7 +50,7 @@ class QuickLoginState extends State { child: Utils.buildSvgWithAssets(icon: AppAssets.cross_circle)), ], ), - Utils.showLottie(context: context, assetPath: AppAnimations.checkmark, width: 120, height: 120, repeat: true), + Utils.showLottie(context: context, assetPath: AppAnimations.checkmark, width: 120.w, height: 120.h, repeat: true), LocaleKeys.allSet.tr().toText16(textAlign: TextAlign.center, weight: FontWeight.w500) // Text( // ' TranslationBase.of(context).allSet', @@ -67,7 +67,7 @@ class QuickLoginState extends State { mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: [ - Image.asset(AppAssets.lockIcon, height: 100), + Image.asset(AppAssets.lockIcon, height: 100.h), SizedBox(height: 10.h), LocaleKeys.enableQuickLogin.tr().toText26(isBold: true), // Text( @@ -89,7 +89,7 @@ class QuickLoginState extends State { // height: 1.5, // ), //), - const SizedBox(height: 24), + SizedBox(height: 24.h), // Buttons Row( mainAxisAlignment: MainAxisAlignment.end, @@ -115,15 +115,13 @@ class QuickLoginState extends State { children: [ Expanded( child: CustomButton( - text: LocaleKeys.notNow.tr(), - onPressed: () { - Navigator.pop(context, "true"); - }, - backgroundColor: Color(0xffFEE9EA), - borderColor: Color(0xffFEE9EA), - textColor: Colors.red, - // icon: "assets/images/svg/apple-finder.svg", - )), + text: LocaleKeys.notNow.tr(), + onPressed: () { + Navigator.pop(context, "true"); + }, + backgroundColor: Color(0xffFEE9EA), + borderColor: Color(0xffFEE9EA), + textColor: Colors.red)), ], ), ], diff --git a/lib/presentation/authentication/register.dart b/lib/presentation/authentication/register.dart index 9551ba1..f04f7dd 100644 --- a/lib/presentation/authentication/register.dart +++ b/lib/presentation/authentication/register.dart @@ -78,8 +78,7 @@ class _RegisterNew extends State { mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: [ - Utils.showLottie( - context: context, assetPath: 'assets/animations/lottie/register.json', width: 200.h, height: 200.h, fit: BoxFit.cover, repeat: true), + Utils.showLottie(context: context, assetPath: 'assets/animations/lottie/register.json', width: 200.w, height: 200.h, fit: BoxFit.cover, repeat: true), SizedBox(height: 16.h), LocaleKeys.prepareToElevate.tr().toText32(isBold: true), SizedBox(height: 24.h), @@ -113,7 +112,7 @@ class _RegisterNew extends State { Divider(height: 1), TextInputWidget( labelText: LocaleKeys.dob.tr(), - hintText: "11 July, 1994", + hintText: "11 July, 1994".needTranslation, controller: authVm.dobController, focusNode: _dobFocusNode, isEnable: true, @@ -240,7 +239,7 @@ class _RegisterNew extends State { ), ), ), - SizedBox(height: 30), + SizedBox(height: 30.h), ], ), ), diff --git a/lib/presentation/authentication/register_step2.dart b/lib/presentation/authentication/register_step2.dart index 3466497..71cef96 100644 --- a/lib/presentation/authentication/register_step2.dart +++ b/lib/presentation/authentication/register_step2.dart @@ -69,7 +69,7 @@ class _RegisterNew extends State { height: double.infinity, child: SingleChildScrollView( reverse: false, - padding: EdgeInsets.only(left: 24.h, right: 24.h, top: 0.h), + padding: EdgeInsets.only(left: 24.w, right: 24.w, top: 0.h), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ @@ -98,7 +98,7 @@ class _RegisterNew extends State { leadingIcon: AppAssets.user_circle, labelColor: AppColors.textColor, ).paddingSymmetrical(0.h, 16.h), - Divider(height: 1, color: AppColors.greyColor), + Divider(height: 1.h, color: AppColors.greyColor), TextInputWidget( labelText: LocaleKeys.nationalIdNumber.tr(), hintText: authVM!.isUserFromUAE() ? appState.getUserRegistrationPayload.patientIdentificationId.toString() : (appState.getNHICUserData.idNumber ?? ""), @@ -130,7 +130,7 @@ class _RegisterNew extends State { hasSelectionCustomIcon: true, isAllowRadius: false, labelColor: AppColors.textColor, - padding: const EdgeInsets.only(top: 8, bottom: 8, left: 0, right: 0), + padding: EdgeInsets.only(top: 8.h, bottom: 8.h, left: 0, right: 0), selectionCustomIcon: AppAssets.arrow_down, leadingIcon: AppAssets.user_full, ).withVerticalPadding(8); @@ -167,7 +167,7 @@ class _RegisterNew extends State { hasSelectionCustomIcon: true, isAllowRadius: false, labelColor: AppColors.textColor, - padding: const EdgeInsets.only(top: 8, bottom: 8, left: 0, right: 0), + padding: EdgeInsets.only(top: 8.h, bottom: 8.h, left: 0, right: 0), selectionCustomIcon: AppAssets.arrow_down, leadingIcon: AppAssets.smart_phone, ).withVerticalPadding(8); @@ -188,7 +188,7 @@ class _RegisterNew extends State { leadingIcon: AppAssets.smart_phone, onChange: (value) {}) .paddingSymmetrical(0.h, 16.h), - Divider(height: 1, color: AppColors.greyColor), + Divider(height: 1.h, color: AppColors.greyColor), authVM!.isUserFromUAE() ? Selector? countriesList, NationalityCountries? selectedCountry, bool isArabic})>( selector: (context, authViewModel) { @@ -217,10 +217,10 @@ class _RegisterNew extends State { hasSelectionCustomIcon: true, labelColor: AppColors.textColor, isAllowRadius: false, - padding: const EdgeInsets.only(top: 8, bottom: 8, left: 0, right: 0), + padding: EdgeInsets.only(top: 8.h, bottom: 8.h, left: 0, right: 0), selectionCustomIcon: AppAssets.arrow_down, leadingIcon: AppAssets.globe, - ).withVerticalPadding(8); + ).withVerticalPadding(8.h); }, ) : TextInputWidget( @@ -256,7 +256,7 @@ class _RegisterNew extends State { leadingIcon: AppAssets.call) .paddingSymmetrical(0.h, 16.h), Divider( - height: 1, + height: 1.h, color: AppColors.greyColor, ), TextInputWidget( @@ -292,9 +292,7 @@ class _RegisterNew extends State { iconColor: AppColors.primaryRedColor, ), ), - SizedBox( - width: 16, - ), + SizedBox(width: 16.w), Expanded( child: CustomButton( backgroundColor: AppColors.primaryRedColor, diff --git a/lib/presentation/medical_file/medical_file_page.dart b/lib/presentation/medical_file/medical_file_page.dart index cea3cf1..a435f83 100644 --- a/lib/presentation/medical_file/medical_file_page.dart +++ b/lib/presentation/medical_file/medical_file_page.dart @@ -235,8 +235,7 @@ class _MedicalFilePageState extends State { iconColor: insuranceVM.isInsuranceExpired ? AppColors.primaryRedColor : AppColors.successColor, textColor: insuranceVM.isInsuranceExpired ? AppColors.primaryRedColor : AppColors.successColor, iconSize: 12.w, - backgroundColor: - insuranceVM.isInsuranceExpired ? AppColors.primaryRedColor.withOpacity(0.1) : AppColors.successColor.withOpacity(0.1), + backgroundColor: insuranceVM.isInsuranceExpired ? AppColors.primaryRedColor.withOpacity(0.1) : AppColors.successColor.withOpacity(0.1), labelPadding: EdgeInsetsDirectional.only(start: 4.w, end: 8.w), ); }), @@ -517,11 +516,7 @@ class _MedicalFilePageState extends State { Transform.flip( flipX: appState.isArabic(), child: Utils.buildSvgWithAssets( - icon: AppAssets.forward_arrow_icon_small, - width: 15.w, - height: 15.h, - fit: BoxFit.contain, - iconColor: AppColors.textColor)), + icon: AppAssets.forward_arrow_icon_small, width: 15.w, height: 15.h, fit: BoxFit.contain, iconColor: AppColors.textColor)), ], ).onPress(() { prescriptionVM.setPrescriptionsDetailsLoading(); @@ -597,8 +592,8 @@ class _MedicalFilePageState extends State { context, noDataText: "You don't have any prescriptions yet.".needTranslation, isSmallWidget: true, - width: 62.w, - height: 62.h, + width: 30.w, + height: 30.h, ), ).paddingSymmetrical(24.w, 0.h); }), @@ -811,8 +806,7 @@ class _MedicalFilePageState extends State { insuranceViewModel.setIsInsuranceUpdateDetailsLoading(true); insuranceViewModel.getPatientInsuranceDetailsForUpdate( appState.getAuthenticatedUser()!.patientId.toString(), appState.getAuthenticatedUser()!.patientIdentificationNo.toString()); - showCommonBottomSheetWithoutHeight(context, - child: PatientInsuranceCardUpdateCard(), callBackFunc: () {}, title: "", isCloseButtonVisible: false, isFullScreen: false); + showCommonBottomSheetWithoutHeight(context, child: PatientInsuranceCardUpdateCard(), callBackFunc: () {}, title: "", isCloseButtonVisible: false, isFullScreen: false); }, backgroundColor: AppColors.bgGreenColor.withOpacity(0.20), borderColor: AppColors.bgGreenColor.withOpacity(0.0), diff --git a/lib/presentation/my_family/widget/family_cards.dart b/lib/presentation/my_family/widget/family_cards.dart index 50aec1c..dfa7d0d 100644 --- a/lib/presentation/my_family/widget/family_cards.dart +++ b/lib/presentation/my_family/widget/family_cards.dart @@ -141,10 +141,10 @@ class _FamilyCardsState extends State { physics: NeverScrollableScrollPhysics(), itemCount: widget.profiles.length, gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( - crossAxisCount: 2, + crossAxisCount: isTablet ? 3 : 2, crossAxisSpacing: 10.h, mainAxisSpacing: 10.h, - childAspectRatio: widget.isShowDetails ? 0.56.h : 0.65.h, + childAspectRatio: widget.isShowDetails ? 0.56 : 0.65, ), padding: EdgeInsets.only(bottom: 20.h), itemBuilder: (context, index) { @@ -153,8 +153,8 @@ class _FamilyCardsState extends State { final isParentUser = appState.getAuthenticatedUser()?.isParentUser ?? false; final canSwitch = isParentUser || (!isParentUser && profile.responseId == appState.getSuperUserID); return Container( - padding: EdgeInsets.symmetric(vertical: 15.h, horizontal: 15.h), - decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24), + padding: EdgeInsets.symmetric(vertical: 15.h, horizontal: 15.w), + decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24.r), child: Opacity( opacity: isActive || profile.status == FamilyFileEnum.pending.toInt || !canSwitch ? 0.4 : 1.0, // Fade all content if active child: Stack( -- 2.30.2 From e113c4c1ee61846de83bf0395131336c5581e03b Mon Sep 17 00:00:00 2001 From: aamir-csol Date: Thu, 30 Oct 2025 14:23:46 +0300 Subject: [PATCH 03/39] updates & fixes & RRT Flow --- ios/Runner/AppDelegate.swift | 3 + lib/core/api_consts.dart | 2 +- lib/core/dependencies.dart | 6 +- .../authentication/authentication_repo.dart | 6 +- .../authentication_view_model.dart | 13 +- .../emergency_services_view_model.dart | 26 +- .../medical_file/medical_file_view_model.dart | 8 +- .../RRT/rrt_request_type_select.dart | 171 ++++++++++-- .../call_ambulance/call_ambulance_page.dart | 243 ++++++---------- .../requesting_services_page.dart | 17 +- .../call_ambulance/tracking_screen.dart | 261 ++++++++---------- .../emergency_services_page.dart | 154 ++++------- lib/presentation/my_family/my_family.dart | 2 +- lib/widgets/appbar/collapsing_list_view.dart | 1 + lib/widgets/common_bottom_sheet.dart | 81 +++--- .../ExpandableBottomSheet.dart | 2 +- lib/widgets/radio/custom_radio_button.dart | 26 +- 17 files changed, 507 insertions(+), 515 deletions(-) diff --git a/ios/Runner/AppDelegate.swift b/ios/Runner/AppDelegate.swift index 69204f3..3d76a5f 100644 --- a/ios/Runner/AppDelegate.swift +++ b/ios/Runner/AppDelegate.swift @@ -2,6 +2,8 @@ import Flutter import UIKit import FirebaseCore import FirebaseMessaging +import GoogleMaps + @main @objc class AppDelegate: FlutterAppDelegate { @@ -10,6 +12,7 @@ import FirebaseMessaging didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? ) -> Bool { FirebaseApp.configure() + GMSServices.provideAPIKey("AIzaSyDiXnCO00li4V7Ioa2YZ_M4ECxRsu_P9tA") GeneratedPluginRegistrant.register(with: self) return super.application(application, didFinishLaunchingWithOptions: launchOptions) } diff --git a/lib/core/api_consts.dart b/lib/core/api_consts.dart index ed2bba1..304b633 100644 --- a/lib/core/api_consts.dart +++ b/lib/core/api_consts.dart @@ -729,7 +729,7 @@ var GET_PRESCRIPTION_INSTRUCTIONS_PDF = 'Services/ChatBot_Service.svc/REST/Chatb class ApiConsts { static const maxSmallScreen = 660; - static AppEnvironmentTypeEnum appEnvironmentType = AppEnvironmentTypeEnum.prod; + static AppEnvironmentTypeEnum appEnvironmentType = AppEnvironmentTypeEnum.uat; // static String baseUrl = 'https://uat.hmgwebservices.com/'; // HIS API URL UAT diff --git a/lib/core/dependencies.dart b/lib/core/dependencies.dart index a82a9ad..7c8083d 100644 --- a/lib/core/dependencies.dart +++ b/lib/core/dependencies.dart @@ -158,7 +158,8 @@ class AppDependencies { ); getIt.registerLazySingleton( - () => BookAppointmentsViewModel(bookAppointmentsRepo: getIt(), errorHandlerService: getIt(), navigationService: getIt(), myAppointmentsViewModel: getIt(), locationUtils: getIt(), dialogService: getIt()), + () => BookAppointmentsViewModel( + bookAppointmentsRepo: getIt(), errorHandlerService: getIt(), navigationService: getIt(), myAppointmentsViewModel: getIt(), locationUtils: getIt(), dialogService: getIt()), ); getIt.registerLazySingleton( @@ -185,8 +186,7 @@ class AppDependencies { ); getIt.registerLazySingleton( - () => - AppointmentViaRegionViewmodel( + () => AppointmentViaRegionViewmodel( navigationService: getIt(), appState: getIt(), ), diff --git a/lib/features/authentication/authentication_repo.dart b/lib/features/authentication/authentication_repo.dart index d566996..6266afb 100644 --- a/lib/features/authentication/authentication_repo.dart +++ b/lib/features/authentication/authentication_repo.dart @@ -101,10 +101,7 @@ class AuthenticationRepoImp implements AuthenticationRepo { } @override - Future>> checkPatientAuthentication({ - required dynamic checkPatientAuthenticationReq, - String? languageID, - }) async { + Future>> checkPatientAuthentication({required dynamic checkPatientAuthenticationReq, String? languageID}) async { int isOutKsa = (checkPatientAuthenticationReq.zipCode == '966' || checkPatientAuthenticationReq.zipCode == '+966') ? 0 : 1; checkPatientAuthenticationReq.patientOutSA = isOutKsa; try { @@ -149,7 +146,6 @@ class AuthenticationRepoImp implements AuthenticationRepo { sendActivationCodeReq.isDentalAllowedBackend = false; final payload = sendActivationCodeReq.toJson(); if (isFormFamilyFile) { - payload.remove("MobileNo"); payload.remove("NationalID"); payload.remove("SMSSignature"); diff --git a/lib/features/authentication/authentication_view_model.dart b/lib/features/authentication/authentication_view_model.dart index 8be2b8e..6af1132 100644 --- a/lib/features/authentication/authentication_view_model.dart +++ b/lib/features/authentication/authentication_view_model.dart @@ -851,16 +851,13 @@ class AuthenticationViewModel extends ChangeNotifier { request['isRegister'] = true; _appState.setAppAuthToken = response['LogInTokenID']; if (isPatientOutsideSA(request: response)) { - print("=======OUT SA======="); sendActivationCode( - otpTypeEnum: OTPTypeEnumExtension.fromInt(request["OTP_SendType"]), - nationalIdOrFileNumber: request["PatientIdentificationID"].toString(), - phoneNumber: request["PatientMobileNumber"].toString(), - payload: request, - isForRegister: true, - ); + otpTypeEnum: OTPTypeEnumExtension.fromInt(request["OTP_SendType"]), + nationalIdOrFileNumber: request["PatientIdentificationID"].toString(), + phoneNumber: request["PatientMobileNumber"].toString(), + payload: request, + isForRegister: true); } else { - print("=======IN SA======="); chekUserNHICData(request: request); } } diff --git a/lib/features/emergency_services/emergency_services_view_model.dart b/lib/features/emergency_services/emergency_services_view_model.dart index 77e5823..5d02ca3 100644 --- a/lib/features/emergency_services/emergency_services_view_model.dart +++ b/lib/features/emergency_services/emergency_services_view_model.dart @@ -25,6 +25,7 @@ class EmergencyServicesViewModel extends ChangeNotifier { final LocationUtils? locationUtils; final AppState appState; bool isERListLoading = false; + bool isTermsAccepted = false; List nearestERList = []; List nearestERFilteredList = []; @@ -47,11 +48,14 @@ class EmergencyServicesViewModel extends ChangeNotifier { required this.appState, }); - get isGMSAvailable - { + get isGMSAvailable { return appState.isGMSAvailable; } + void onTermAccepted() { + isTermsAccepted = !isTermsAccepted; + notifyListeners(); + } Future getRRTProcedures({Function(dynamic)? onSuccess, Function(String)? onError}) async { RRTProceduresList.clear(); @@ -89,6 +93,10 @@ class EmergencyServicesViewModel extends ChangeNotifier { }); } + void moveToNextStep() { + navServices.push(CustomPageRoute(page: CallAmbulancePage(isFromRRT: true))); + } + void filterErList(String query) { print("the query is $query"); if (query.isEmpty) { @@ -149,8 +157,7 @@ class EmergencyServicesViewModel extends ChangeNotifier { } GMSMapServices.CameraPosition getGMSLocation() { - return GMSMapServices.CameraPosition( - target: GMSMapServices.LatLng(appState.userLat, appState.userLong), zoom: 18); + return GMSMapServices.CameraPosition(target: GMSMapServices.LatLng(appState.userLat, appState.userLong), zoom: 18); } handleGMSMapCameraMoved(GMSMapServices.CameraPosition value) { @@ -158,9 +165,7 @@ class EmergencyServicesViewModel extends ChangeNotifier { } HMSCameraServices.CameraPosition getHMSLocation() { - return HMSCameraServices.CameraPosition( - target: HMSCameraServices.LatLng(appState.userLat, appState.userLong),zoom: 18); - + return HMSCameraServices.CameraPosition(target: HMSCameraServices.LatLng(appState.userLat, appState.userLong), zoom: 18); } handleHMSMapCameraMoved(HMSCameraServices.CameraPosition value) { @@ -173,11 +178,8 @@ class EmergencyServicesViewModel extends ChangeNotifier { onSuccess: (position) { updateBottomSheetState(BottomSheetType.FIXED); navServices.push( - CustomPageRoute( - page: CallAmbulancePage(), direction: AxisDirection.down - ), + CustomPageRoute(page: CallAmbulancePage(), direction: AxisDirection.down), ); - }); } @@ -187,8 +189,6 @@ class EmergencyServicesViewModel extends ChangeNotifier { } void setIsGMSAvailable(bool value) { - notifyListeners(); - } } diff --git a/lib/features/medical_file/medical_file_view_model.dart b/lib/features/medical_file/medical_file_view_model.dart index f0263f9..3e67a0e 100644 --- a/lib/features/medical_file/medical_file_view_model.dart +++ b/lib/features/medical_file/medical_file_view_model.dart @@ -59,7 +59,6 @@ class MedicalFileViewModel extends ChangeNotifier { _selectedFamilyFileTabIndex = value; notifyListeners(); } - } static final DialogService _dialogService = getIt.get(); @@ -486,6 +485,13 @@ class MedicalFileViewModel extends ChangeNotifier { }); } + Future clearAuthValues() async { + authVM.nationalIdController.clear(); + authVM.phoneNumberController.clear(); + authVM.emailController.clear(); + authVM.dobController.clear(); + } + Future handleFamilyFileRequestOTPVerification() async { LoaderBottomSheet.showLoader(); if (!_appState.getIsChildLoggedIn) { diff --git a/lib/presentation/emergency_services/RRT/rrt_request_type_select.dart b/lib/presentation/emergency_services/RRT/rrt_request_type_select.dart index 0e23d49..fd93f8e 100644 --- a/lib/presentation/emergency_services/RRT/rrt_request_type_select.dart +++ b/lib/presentation/emergency_services/RRT/rrt_request_type_select.dart @@ -1,9 +1,18 @@ +import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; +import 'package:hmg_patient_app_new/core/app_assets.dart'; import 'package:hmg_patient_app_new/core/app_export.dart'; +import 'package:hmg_patient_app_new/core/dependencies.dart'; +import 'package:hmg_patient_app_new/core/utils/utils.dart'; +import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; import 'package:hmg_patient_app_new/features/emergency_services/emergency_services_view_model.dart'; +import 'package:hmg_patient_app_new/generated/locale_keys.g.dart'; +import 'package:hmg_patient_app_new/presentation/emergency_services/call_ambulance/call_ambulance_page.dart'; +import 'package:hmg_patient_app_new/services/navigation_service.dart'; import 'package:hmg_patient_app_new/theme/colors.dart'; +import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart'; import 'package:hmg_patient_app_new/widgets/radio/custom_radio_button.dart'; import 'package:provider/provider.dart'; @@ -13,32 +22,160 @@ class RrtRequestTypeSelect extends StatelessWidget { @override Widget build(BuildContext context) { // return Consumer(builder: (context, emergencyServicesVM, child) { + // NavigationService navService = getIt(); + // EmergencyServicesViewModel erServiceVm = Provider.of(context); return Column( children: [ + Padding( + padding: EdgeInsets.only(left: 24, right: 24, bottom: 24), + child: Container( + decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 20.r), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + CustomRadioOption(value: "", groupValue: "", onChanged: (value) {}, text: "Home Visit Emergency".needTranslation).paddingSymmetrical(16, 24), + Divider(height: 1, color: Color(0xFFD2D2D2).withValues(alpha: 0.3)).paddingSymmetrical(16, 0), + CustomRadioOption(value: "", groupValue: "", onChanged: (value) {}, text: "COVID-19 (24 Hour) Home Visit".needTranslation).paddingSymmetrical(16, 24), + Divider(height: 1, color: Color(0xFFD2D2D2).withValues(alpha: 0.3)).paddingSymmetrical(16, 0), + CustomRadioOption(value: "", groupValue: "", onChanged: (value) {}, text: "COVID-19 (6 Hour) Home Visit".needTranslation).paddingSymmetrical(16, 24), + ], + ), + ), + ), + Padding( + padding: EdgeInsets.only(left: 24, right: 24, bottom: 24), + child: GestureDetector( + onTap: context.read().onTermAccepted, + child: Row( + children: [ + Selector( + selector: (_, vm) => vm.isTermsAccepted, + shouldRebuild: (previous, next) => previous != next, + builder: (context, isTermsAccepted, child) { + return AnimatedContainer( + duration: const Duration(milliseconds: 200), + height: 24.h, + width: 24.h, + decoration: BoxDecoration( + color: isTermsAccepted ? AppColors.primaryRedColor : Colors.transparent, + borderRadius: BorderRadius.circular(6), + border: Border.all(color: isTermsAccepted ? AppColors.primaryRedBorderColor : AppColors.greyColor, width: 2.h), + ), + child: isTermsAccepted ? Icon(Icons.check, size: 16.f, color: Colors.white) : null, + ); + }, + ), + SizedBox(width: 12.h), + Row( + children: [ + Text( + LocaleKeys.iAcceptThe.tr(), + style: context.dynamicTextStyle(fontSize: 14.f, fontWeight: FontWeight.w500, color: Color(0xFF2E3039)), + ), + GestureDetector( + onTap: () { + // Navigate to terms and conditions page + Navigator.of(context).pushNamed('/terms'); + }, + child: Text( + LocaleKeys.termsConditoins.tr(), + style: context.dynamicTextStyle( + fontSize: 14.f, fontWeight: FontWeight.w500, color: AppColors.primaryRedColor, decoration: TextDecoration.underline, decorationColor: AppColors.primaryRedBorderColor), + ), + ), + ], + ), + ], + ), + ), + ), Container( - padding: EdgeInsets.all(16.h), - height: 200.h, decoration: RoundedRectangleBorder().toSmoothCornerDecoration( color: AppColors.whiteColor, borderRadius: 24.h, + hasShadow: true, ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Row( - children: [ - CustomRadioOption( - value: "", - groupValue: "", - onChanged: (value) {}, - text: "Home Visit Emergency", - ) - ], - ), - ], + child: SizedBox( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + // if (widget.patientAppointmentHistoryResponseModel.nextAction == 15 || widget.patientAppointmentHistoryResponseModel.nextAction == 20) + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + "Total amount to pay".needTranslation.toText18(isBold: true), + Utils.getPaymentAmountWithSymbol("1000".toString().toText16(isBold: true), AppColors.blackColor, 13, isSaudiCurrency: true), + ], + ), + SizedBox(height: 4.h), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Expanded(child: "Amount will be paid at the hospital".toText12(fontWeight: FontWeight.w500, color: AppColors.greyTextColor)), + "VAT 15%(${150})".needTranslation.toText14(isBold: true, color: AppColors.greyTextColor, letterSpacing: -2), + ], + ), + SizedBox(height: 18.h), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + SizedBox( + width: 150.h, + child: Utils.getPaymentMethods(), + ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Utils.getPaymentAmountWithSymbol("1,150".toString().toText24(isBold: true), AppColors.blackColor, 17, isSaudiCurrency: true), + ], + ), + ], + ) + ], + ).paddingOnly(left: 16.h, top: 24.h, right: 16.h, bottom: 0.h), + // AppointmentType.isArrived(widget.patientAppointmentHistoryResponseModel) + CustomButton( + text: LocaleKeys.next.tr(), + onPressed: () { + // navService.pop(); + context.read().moveToNextStep(); + }, + backgroundColor: AppColors.primaryRedColor, + borderColor: AppColors.primaryRedColor, + textColor: AppColors.whiteColor, + fontSize: 16, + fontWeight: FontWeight.w500, + borderRadius: 12, + padding: EdgeInsets.fromLTRB(10, 0, 10, 0), + height: 50.h, + iconColor: AppColors.whiteColor, + iconSize: 18.h, + ).paddingSymmetrical(16.h, 24.h) + // : CustomButton( + // text: AppointmentType.getNextActionText(widget.patientAppointmentHistoryResponseModel.nextAction), + // onPressed: () { + // myAppointmentsViewModel.setIsAppointmentDataToBeLoaded(true); + // handleAppointmentNextAction(widget.patientAppointmentHistoryResponseModel.nextAction); + // }, + // backgroundColor: AppointmentType.getNextActionButtonColor(widget.patientAppointmentHistoryResponseModel.nextAction), + // borderColor: AppointmentType.getNextActionButtonColor(widget.patientAppointmentHistoryResponseModel.nextAction).withOpacity(0.01), + // textColor: widget.patientAppointmentHistoryResponseModel.nextAction == 15 ? AppColors.textColor : AppColors.whiteColor, + // fontSize: 16, + // fontWeight: FontWeight.w500, + // borderRadius: 12, + // padding: EdgeInsets.fromLTRB(10, 0, 10, 0), + // height: 50.h, + // icon: AppointmentType.getNextActionIcon(widget.patientAppointmentHistoryResponseModel.nextAction), + // iconColor: AppColors.whiteColor, + // iconSize: 18.h, + // ).paddingSymmetrical(16.h, 24.h), + ], + ), ), ), - SizedBox(height: 32.h), ], ); // }); diff --git a/lib/presentation/emergency_services/call_ambulance/call_ambulance_page.dart b/lib/presentation/emergency_services/call_ambulance/call_ambulance_page.dart index eb36f92..63cb4e6 100644 --- a/lib/presentation/emergency_services/call_ambulance/call_ambulance_page.dart +++ b/lib/presentation/emergency_services/call_ambulance/call_ambulance_page.dart @@ -2,6 +2,7 @@ import 'dart:io'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; +import 'package:google_places_flutter/model/prediction.dart'; import 'package:hmg_patient_app_new/core/app_assets.dart'; import 'package:hmg_patient_app_new/core/app_export.dart'; import 'package:hmg_patient_app_new/core/utils/utils.dart'; @@ -26,40 +27,38 @@ import 'package:provider/provider.dart'; import '../../../widgets/common_bottom_sheet.dart'; import 'widgets/AddressItem.dart'; -class CallAmbulancePage extends StatelessWidget { +class CallAmbulancePage extends StatefulWidget { + bool? isFromRRT; + + CallAmbulancePage({super.key, this.isFromRRT = false}); + + @override + State createState() => _CallAmbulancePageState(); +} + +class _CallAmbulancePageState extends State { + TextEditingController addressController = TextEditingController(); + @override Widget build(BuildContext context) { return Scaffold( bottomSheet: ExpandableBottomSheet( - bottomSheetType: - context.watch().bottomSheetType, + bottomSheetType: context.watch().bottomSheetType, children: { - BottomSheetType.EXPANDED: ExpanedBottomSheet(context), - BottomSheetType.FIXED: FixedBottomSheet(context), + BottomSheetType.EXPANDED: expandedBottomSheet(context), + BottomSheetType.FIXED: fixedBottomSheet(context), }, ), body: Stack( children: [ - if (context.read().isGMSAvailable || - Platform.isIOS) - GMSMap( - currentLocation: - context.read().getGMSLocation(), - onCameraMoved: (value) => context - .read() - .handleGMSMapCameraMoved(value)) + if (context.read().isGMSAvailable || Platform.isIOS) + GMSMap(currentLocation: context.read().getGMSLocation(), onCameraMoved: (value) => context.read().handleGMSMapCameraMoved(value)) else - HMSMap( - currentLocation: - context.read().getHMSLocation(), - onCameraMoved: (value) => context - .read() - .handleHMSMapCameraMoved(value)), + HMSMap(currentLocation: context.read().getHMSLocation(), onCameraMoved: (value) => context.read().handleHMSMapCameraMoved(value)), Align( alignment: AlignmentDirectional.topStart, - child: Utils.buildSvgWithAssets( - icon: AppAssets.closeBottomNav, width: 32.h, height: 32.h), - ).paddingOnly(top: 51.h, left: 24.h).onPress((){ + child: Utils.buildSvgWithAssets(icon: AppAssets.closeBottomNav, width: 32.h, height: 32.h), + ).paddingOnly(top: 51.h, left: 24.h).onPress(() { Navigator.pop(context); }) ], @@ -67,13 +66,12 @@ class CallAmbulancePage extends StatelessWidget { ); } - Widget FixedBottomSheet(BuildContext context) { + Widget fixedBottomSheet(BuildContext context) { return GestureDetector( - onVerticalDragUpdate: (details){ + onVerticalDragUpdate: (details) { print("the delta is ${details.delta.dy}"); - if(details.delta.dy<0){ - + if (details.delta.dy < 0) { context.read().updateBottomSheetState(BottomSheetType.EXPANDED); } }, @@ -84,15 +82,11 @@ class CallAmbulancePage extends StatelessWidget { Row( mainAxisAlignment: MainAxisAlignment.end, children: [ - Padding( - - padding: EdgeInsetsDirectional.only(end:24.h, bottom: 24.h), + Padding( + padding: EdgeInsetsDirectional.only(end: 24.h, bottom: 24.h), child: DecoratedBox( - decoration: RoundedRectangleBorder().toSmoothCornerDecoration( - color: AppColors.whiteColor, borderRadius: 12.h), - child: Utils.buildSvgWithAssets( - icon: AppAssets.locate_me, width: 24.h, height: 24.h) - .paddingAll(12.h), + decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 12.h), + child: Utils.buildSvgWithAssets(icon: AppAssets.locate_me, width: 24.h, height: 24.h).paddingAll(12.h), ), ), ], @@ -110,15 +104,15 @@ class CallAmbulancePage extends StatelessWidget { // ), // ), // ), - // .paddingOnly(right: 24.h, bottom: 24.h), + // .paddingOnly(right: 24.h, bottom: 24.h), Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.min, spacing: 24.h, children: [ TextInputWidget( - labelText: "Enter Pickup Location Manually".needTranslation, - hintText: "Enter Pickup Location".needTranslation, + labelText: widget.isFromRRT! ? "Type Address".needTranslation : "Enter Pickup Location Manually".needTranslation, + hintText: widget.isFromRRT! ? "Enter street or area name".needTranslation : "Enter Pickup Location".needTranslation, leadingIcon: AppAssets.location_pickup, isAllowLeadingIcon: true, isEnable: false, @@ -126,50 +120,27 @@ class CallAmbulancePage extends StatelessWidget { autoFocus: false, isBorderAllowed: false, keyboardType: TextInputType.text, - padding: EdgeInsets.symmetric( - vertical: ResponsiveExtension(10).h, - horizontal: ResponsiveExtension(15).h, - ), - ).onPress(() { - context - .read() - .updateBottomSheetState(BottomSheetType.EXPANDED); - }).paddingOnly(right: 24.h, left: 24.h), + controller: addressController, + padding: EdgeInsets.symmetric(vertical: ResponsiveExtension(8).h, horizontal: ResponsiveExtension(12).h), + ).paddingOnly(right: 24.h, left: 24.h), SizedBox( height: 200.h, child: DecoratedBox( decoration: RoundedRectangleBorder().toSmoothCornerDecoration( color: AppColors.scaffoldBgColor, - customBorder: BorderRadius.only( - topLeft: Radius.circular(24.h), - topRight: Radius.circular(24.h), - ), + customBorder: BorderRadius.only(topLeft: Radius.circular(24.h), topRight: Radius.circular(24.h)), ), child: Column( crossAxisAlignment: CrossAxisAlignment.start, - spacing: 24.h, + spacing: 4, children: [ - Column( - spacing: 4.h, - children: [ - "Select Pickup Location".needTranslation.toText21( - weight: FontWeight.w600, - color: AppColors.textColor, - ), - " Please select the location of pickup" - .needTranslation - .toText12( - fontWeight: FontWeight.w500, - color: AppColors.greyTextColor, - ) - ], - ), + "Select Pickup Location".needTranslation.toText21(weight: FontWeight.w600, color: AppColors.textColor), + " Please select the location of pickup".needTranslation.toText12(fontWeight: FontWeight.w500, color: AppColors.greyTextColor), + SizedBox(height: 20.h), CustomButton( text: "Select Location".needTranslation, onPressed: () { - context - .read() - .updateBottomSheetState(BottomSheetType.EXPANDED); + context.read().updateBottomSheetState(BottomSheetType.EXPANDED); }) ], ).paddingOnly(top: 24.h, bottom: 32.h, left: 24.h, right: 24.h), @@ -182,23 +153,20 @@ class CallAmbulancePage extends StatelessWidget { ); } - Widget ExpanedBottomSheet(BuildContext context) { + Widget expandedBottomSheet(BuildContext context) { return GestureDetector( - onVerticalDragUpdate: (details){ - if(details.delta.dy>0){ - context.read().updateBottomSheetState(BottomSheetType.FIXED); - } - }, + onVerticalDragUpdate: (details) { + if (details.delta.dy > 0) { + context.read().updateBottomSheetState(BottomSheetType.FIXED); + } + }, child: Column( mainAxisSize: MainAxisSize.min, children: [ DecoratedBox( decoration: RoundedRectangleBorder().toSmoothCornerDecoration( color: AppColors.scaffoldBgColor, - customBorder: BorderRadius.only( - topLeft: Radius.circular(24.h), - topRight: Radius.circular(24.h), - ), + customBorder: BorderRadius.only(topLeft: Radius.circular(24.h), topRight: Radius.circular(24.h)), ), child: Column( children: [ @@ -207,17 +175,12 @@ class CallAmbulancePage extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, spacing: 16.h, children: [ - "Select Pickup Location".needTranslation.toText21( - weight: FontWeight.w600, - color: AppColors.textColor, - ), + "Select Pickup Location".needTranslation.toText21(weight: FontWeight.w600, color: AppColors.textColor), locationsSections(context), - hospitalAndPickUpSection(context), - + widget.isFromRRT! ? SizedBox() : hospitalAndPickUpSection(context), ], - ).paddingOnly(top: 24.h, bottom: 32.h,left: 24.h, right: 24.h), + ).paddingOnly(top: 24.h, bottom: 32.h, left: 24.h, right: 24.h), ), - bottomPriceContent(context) ], ), @@ -249,8 +212,7 @@ class CallAmbulancePage extends StatelessWidget { shrinkWrap: true, itemCount: 3, itemBuilder: (__, index) { - if (index == - 2) // todo means the end of the list so handle as per the viewmodel + if (index == 2) // todo means the end of the list so handle as per the viewmodel { return CustomButton( height: 40.h, @@ -264,11 +226,8 @@ class CallAmbulancePage extends StatelessWidget { } else { return AddressItem( isSelected: index == 0, - address: - "Flat No 301, Building No 12, Palm Spring Apartment, Sector 45, Gurugram, Haryana 122003", - title: index == 0 - ? "Home".needTranslation - : "Work".needTranslation, + address: "Flat No 301, Building No 12, Palm Spring Apartment, Sector 45, Gurugram, Haryana 122003", + title: index == 0 ? "Home".needTranslation : "Work".needTranslation, onTap: () {}, ); } @@ -293,11 +252,9 @@ class CallAmbulancePage extends StatelessWidget { subTitle: "hospital".needTranslation, leadingIcon: AppAssets.hospital, ), - Utils.buildSvgWithAssets(icon: AppAssets.down_cheveron, - width: 24.h, height: 24.h) - .paddingAll(16.h) + Utils.buildSvgWithAssets(icon: AppAssets.down_cheveron, width: 24.h, height: 24.h).paddingAll(16.h) ], - ).onPress((){ + ).onPress(() { showHospitalBottomSheet(context); }), SizedBox(height: 16.h), @@ -307,7 +264,6 @@ class CallAmbulancePage extends StatelessWidget { thickness: 1, ), SizedBox(height: 16.h), - Row( children: [ hospitalAndPickUpItemContent( @@ -317,8 +273,8 @@ class CallAmbulancePage extends StatelessWidget { ), CustomSwitch( value: context.watch().isGMSAvailable, - onChanged: (value){ - context.read().setIsGMSAvailable( value); + onChanged: (value) { + context.read().setIsGMSAvailable(value); }, ) ], @@ -378,68 +334,49 @@ class CallAmbulancePage extends StatelessWidget { mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.end, children: [ - DecoratedBox( - decoration: RoundedRectangleBorder().toSmoothCornerDecoration( - color: AppColors.scaffoldBgColor, - customBorder: BorderRadius.only( - topLeft: Radius.circular(24.h), - topRight: Radius.circular(24.h), - ), - hasShadow: true - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - spacing: 12.h, + DecoratedBox( + decoration: RoundedRectangleBorder() + .toSmoothCornerDecoration(color: AppColors.scaffoldBgColor, customBorder: BorderRadius.only(topLeft: Radius.circular(24.h), topRight: Radius.circular(24.h)), hasShadow: true), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + spacing: 12.h, + children: [ + Row( children: [ - Row( - children: [ - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - spacing: 4.h, + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + spacing: 4.h, + children: [ + "Total amount to pay".needTranslation.toText18(weight: FontWeight.w600, color: AppColors.textColor), + Row( children: [ - "Total amount to pay".needTranslation.toText18( - weight: FontWeight.w600, - color: AppColors.textColor, - ), - Row( - children: [ - Utils.buildSvgWithAssets(icon: AppAssets.warning, - height: 18.h, width: 18.h), - SizedBox(width: 4.h,), - "Amount will be paid at the hospital" - .needTranslation - .toText12( - fontWeight: FontWeight.w500, - color: AppColors.greyTextColor, - ), - ], - ) + Utils.buildSvgWithAssets(icon: AppAssets.warning, height: 18.h, width: 18.h), + SizedBox(width: 4.h), + "Amount will be paid at the hospital".needTranslation.toText12(fontWeight: FontWeight.w500, color: AppColors.greyTextColor), ], - ), - ), - "\$250".toText24( - fontWeight: FontWeight.w600, - color: AppColors.textColor, - ) - ], + ) + ], + ), ), - CustomButton( - text: "Submit Request".needTranslation, - onPressed: () { - Navigator.push(context, CustomPageRoute(page: RequestingServicesPage())); - }) + Utils.getPaymentAmountWithSymbol("250".toString().toText24(isBold: true), AppColors.blackColor, 17, isSaudiCurrency: true), ], - ).paddingOnly(top: 24.h, bottom: 12.h, left: 24.h, right: 24.h), - ), + ), + CustomButton( + text: "Submit Request".needTranslation, + onPressed: () { + Navigator.push(context, CustomPageRoute(page: RequestingServicesPage())); + }) + ], + ).paddingOnly(top: 24.h, bottom: 24.h, left: 24.h, right: 24.h), + ), ], ); } - showHospitalBottomSheet(BuildContext context){ + showHospitalBottomSheet(BuildContext context) { showCommonBottomSheetWithoutHeight( - title: - LocaleKeys.selectHospital.tr(), + title: LocaleKeys.selectHospital.tr(), context, child: HospitalBottomSheetBody(), isFullScreen: false, diff --git a/lib/presentation/emergency_services/call_ambulance/requesting_services_page.dart b/lib/presentation/emergency_services/call_ambulance/requesting_services_page.dart index 7f79be0..10c139c 100644 --- a/lib/presentation/emergency_services/call_ambulance/requesting_services_page.dart +++ b/lib/presentation/emergency_services/call_ambulance/requesting_services_page.dart @@ -7,11 +7,12 @@ import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; import 'package:hmg_patient_app_new/presentation/emergency_services/call_ambulance/tracking_screen.dart'; import 'package:hmg_patient_app_new/theme/colors.dart'; -import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart' - show CustomPageRoute; +import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart' show CustomPageRoute; import 'package:lottie/lottie.dart'; class RequestingServicesPage extends StatefulWidget { + RequestingServicesPage({super.key}); + @override State createState() => _RequestingServicesPageState(); } @@ -20,8 +21,7 @@ class _RequestingServicesPageState extends State { @override void initState() { Timer(Duration(seconds: 3), () { - Navigator.pushReplacement( - context, CustomPageRoute(page: TrackingScreen())); + Navigator.pushReplacement(context, CustomPageRoute(page: TrackingScreen())); }); super.initState(); } @@ -32,14 +32,7 @@ class _RequestingServicesPageState extends State { color: AppColors.scaffoldBgColor, child: Stack( children: [ - Lottie.asset(AppAnimations.loadingAnimation, - width: 80.h, - height: 80.h, - repeat: true, - reverse: false, - frameRate: FrameRate(60), - fit: BoxFit.fill) - .center, + Lottie.asset(AppAnimations.loadingAnimation, width: 80.h, height: 80.h, repeat: true, reverse: false, frameRate: FrameRate(60), fit: BoxFit.fill).center, Positioned( bottom: 1, child: "Submitting your request. \nPlease wait for a moment" diff --git a/lib/presentation/emergency_services/call_ambulance/tracking_screen.dart b/lib/presentation/emergency_services/call_ambulance/tracking_screen.dart index a48ca10..483da07 100644 --- a/lib/presentation/emergency_services/call_ambulance/tracking_screen.dart +++ b/lib/presentation/emergency_services/call_ambulance/tracking_screen.dart @@ -20,38 +20,37 @@ import 'package:lottie/lottie.dart'; import 'package:provider/provider.dart'; class TrackingScreen extends StatelessWidget { - final OrderTrackingState state = OrderTrackingState.ended; + final OrderTrackingState state = OrderTrackingState.waitingForCall; + @override Widget build(BuildContext context) { - return Scaffold( - bottomNavigationBar: Visibility( - visible: state == OrderTrackingState.ended, - child: SafeArea( - child: CustomButton( - height: 56.h, - backgroundColor: AppColors.bgGreenColor, - borderColor: Colors.transparent, - text: "Close".needTranslation, - textColor: AppColors.whiteColor, - onPressed: () {}, - ).paddingOnly(left:16.h,right:16.h), - ), + return CollapsingListView( + title: "Tracking Details".needTranslation, + bottomChild: Visibility( + visible: state == OrderTrackingState.ended, + child: CustomButton( + height: 50.h, + backgroundColor: AppColors.bgGreenColor, + borderColor: Colors.transparent, + text: "Close".needTranslation, + textColor: AppColors.whiteColor, + onPressed: () {}, + ).paddingOnly(left: 16.h, right: 16.h, bottom: 16.h), ), - body: CollapsingListView( - title: "Tracking Details".needTranslation, - child: SingleChildScrollView( - child: Column( - children: [ - animationSection(), - Column( - spacing: 16.h, - children: [OrderStatus(context), OrderTrackingId(), ContactSection()], - ).paddingAll(16.h), - ], - ))), + child: SingleChildScrollView( + child: Column( + children: [ + animationSection(), + Column( + spacing: 16.h, + children: [OrderStatus(context), OrderTrackingId(), ContactSection()], + ).paddingAll(16.h), + ], + )), ); } - animationSection(){ + + animationSection() { switch (state) { case OrderTrackingState.waitingForCall: case OrderTrackingState.dispactched: @@ -59,18 +58,14 @@ class TrackingScreen extends StatelessWidget { return Lottie.asset(AppAnimations.ambulance, repeat: true, reverse: false, width: 260.h, height: 200.h); case OrderTrackingState.ended: default: - return Lottie.asset(AppAnimations.checkmark, repeat: true, width: 260.h, height: 200.h); + return Lottie.asset(AppAnimations.checkmark, repeat: true, width: 260.h, height: 200.h); } } OrderStatus(BuildContext context) { return Container( padding: EdgeInsets.all(16.h), - decoration: RoundedRectangleBorder().toSmoothCornerDecoration( - color: AppColors.whiteColor, - borderRadius: 20.h, - hasShadow: false, - ), + decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 20.h, hasShadow: false), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ @@ -95,7 +90,7 @@ class TrackingScreen extends StatelessWidget { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - SizedBox(height: 16,), + SizedBox(height: 16.h), CustomButton( text: "Cancel Request".needTranslation, onPressed: () async {}, @@ -119,7 +114,7 @@ class TrackingScreen extends StatelessWidget { backgroundColor: AppColors.lightRedButtonColor, borderColor: Colors.transparent, text: "Share Your Live Locatin on Whatsapp".needTranslation, - fontSize: 12.fSize, + fontSize: 12.f, textColor: AppColors.primaryRedColor, iconColor: AppColors.primaryRedColor, onPressed: () {}, @@ -131,11 +126,7 @@ class TrackingScreen extends StatelessWidget { return Column( crossAxisAlignment: CrossAxisAlignment.start, spacing: 12.h, - children: [ - dividerSection, - doctorSection(), - mapSection(context) - ], + children: [dividerSection, doctorSection(), mapSection(context)], ); case OrderTrackingState.ended: default: @@ -170,17 +161,14 @@ class TrackingScreen extends StatelessWidget { return Row( spacing: 16.h, children: [ - Utils.buildImgWithNetwork(url: "", iconColor: Colors.transparent) - .circle(52.h), + Utils.buildImgWithNetwork(url: "", iconColor: Colors.transparent).circle(52.h), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - "Dr. John Doe".toText16( - color: AppColors.textColor, weight: FontWeight.w600), + "Dr. John Doe".toText16(color: AppColors.textColor, weight: FontWeight.w600), SizedBox(height: 4.h), - "MBBS, MD - General Medicine".toText12( - color: AppColors.greyTextColor, fontWeight: FontWeight.w500), + "MBBS, MD - General Medicine".toText12(color: AppColors.greyTextColor, fontWeight: FontWeight.w500), ], ), ), @@ -204,96 +192,83 @@ class TrackingScreen extends StatelessWidget { Widget mapForRequestedCoordinate(BuildContext context) { // return SizedBox.shrink(); - if (context.read().isGMSAvailable || - Platform.isIOS) - return GMSMap( - myLocationEnabled: false, - currentLocation: - context.read().getGMSLocation(), - onCameraMoved: (value) => context - .read() - .handleGMSMapCameraMoved(value)); - else + if (context.read().isGMSAvailable || Platform.isIOS) { + return GMSMap( + myLocationEnabled: false, + currentLocation: context.read().getGMSLocation(), + onCameraMoved: (value) => context.read().handleGMSMapCameraMoved(value)); + } else { return HMSMap( myLocationEnabled: false, - currentLocation: - context.read().getHMSLocation(), - onCameraMoved: (value) => context - .read() - .handleHMSMapCameraMoved(value)); + currentLocation: context.read().getHMSLocation(), + onCameraMoved: (value) => context.read().handleHMSMapCameraMoved(value)); + } } informationRegardingTrackingSection() { return Column( crossAxisAlignment: CrossAxisAlignment.start, - children: [ - currentStatus(), - SizedBox(height: 4.h), - "You will receive a call from HMG for confirmation ".toText12( - color: AppColors.greyTextColor, fontWeight: FontWeight.w500) - ], + children: [currentStatus(), SizedBox(height: 4.h), "You will receive a call from HMG for confirmation ".toText12(color: AppColors.greyTextColor, fontWeight: FontWeight.w500)], ); } currentStatus() { - switch (state) { - case OrderTrackingState.waitingForCall: - case OrderTrackingState.dispactched: - return RichText( - text: TextSpan(children: [ - TextSpan( - text: "Please wait for the call".needTranslation, - style: TextStyle( - fontSize: 21.fSize, - fontWeight: FontWeight.w600, - color: AppColors.textColor, - ), - ), - TextSpan( - text: "...".needTranslation, - style: TextStyle( - fontSize: 21.fSize, - fontWeight: FontWeight.w600, - color: AppColors.errorColor, - ), - ), - ]), - ); - case OrderTrackingState.returning: - return RichText( - text: TextSpan(children: [ - TextSpan( - text: "15:30".needTranslation, - style: TextStyle( - fontSize: 21.fSize, - fontWeight: FontWeight.w600, - color: AppColors.textColor, - ), - ), - TextSpan( - text: " mins ".needTranslation, - style: TextStyle( - fontSize: 21.fSize, - fontWeight: FontWeight.w600, - color: AppColors.errorColor, - ), - ), - TextSpan( - text: "to hospital".needTranslation, - style: TextStyle( - fontSize: 21.fSize, - fontWeight: FontWeight.w600, - color: AppColors.textColor, - ), - ), - ]), - ); - case OrderTrackingState.ended: - default: - return "Arrived" - .needTranslation - .toText21(color: AppColors.textColor, weight: FontWeight.w600); - } + switch (state) { + case OrderTrackingState.waitingForCall: + case OrderTrackingState.dispactched: + return RichText( + text: TextSpan(children: [ + TextSpan( + text: "Please wait for the call".needTranslation, + style: TextStyle( + fontSize: 21.f, + fontWeight: FontWeight.w600, + color: AppColors.textColor, + ), + ), + TextSpan( + text: "...".needTranslation, + style: TextStyle( + fontSize: 21.f, + fontWeight: FontWeight.w600, + color: AppColors.errorColor, + ), + ), + ]), + ); + case OrderTrackingState.returning: + return RichText( + text: TextSpan(children: [ + TextSpan( + text: "15:30".needTranslation, + style: TextStyle( + fontSize: 21.f, + fontWeight: FontWeight.w600, + color: AppColors.textColor, + ), + ), + TextSpan( + text: " mins ".needTranslation, + style: TextStyle( + fontSize: 21.f, + fontWeight: FontWeight.w600, + color: AppColors.errorColor, + ), + ), + TextSpan( + text: "to hospital".needTranslation, + style: TextStyle( + fontSize: 21.f, + fontWeight: FontWeight.w600, + color: AppColors.textColor, + ), + ), + ]), + ); + case OrderTrackingState.ended: + default: + return "Arrived".needTranslation.toText21(color: AppColors.textColor, weight: FontWeight.w600); + } } OrderTrackingId() { @@ -308,19 +283,15 @@ class TrackingScreen extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, spacing: 8.h, children: [ - "Req ID:1234567890" - .toText16(color: AppColors.textColor, weight: FontWeight.w600), + "Req ID:1234567890".toText16(color: AppColors.textColor, weight: FontWeight.w600), Row( spacing: 8.h, children: [ - Chip("location name".needTranslation, AppAssets.location_pickup, - AppColors.blackBgColor), - Chip("hotel name ".needTranslation, AppAssets.hospital, - AppColors.blackBgColor), + Chip("location name".needTranslation, AppAssets.location_pickup, AppColors.blackBgColor), + Chip("hotel name ".needTranslation, AppAssets.hospital, AppColors.blackBgColor), ], ), - Chip("hotel name ".needTranslation, AppAssets.hospital, - AppColors.blackBgColor), + Chip("hotel name ".needTranslation, AppAssets.hospital, AppColors.blackBgColor), ], ), ); @@ -350,11 +321,8 @@ class TrackingScreen extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, spacing: 4.h, children: [ - "Contact Rapid Response Team (RRT)".needTranslation.toText14( - color: AppColors.textColor, weight: FontWeight.w600), - "1223456789".needTranslation.toText12( - color: AppColors.primaryRedColor, - fontWeight: FontWeight.w500), + "Contact Rapid Response Team (RRT)".needTranslation.toText14(color: AppColors.textColor, weight: FontWeight.w600), + "1223456789".needTranslation.toText12(color: AppColors.primaryRedColor, fontWeight: FontWeight.w500), SizedBox(height: 8.h), ], ), @@ -390,27 +358,22 @@ class TrackingScreen extends StatelessWidget { getTitle(OrderTrackingState state) { switch (state) { case OrderTrackingState.waitingForCall: - return "Confirmation Call".needTranslation - .toText16(color: AppColors.textColor, weight: FontWeight.w600); + return "Confirmation Call".needTranslation.toText16(color: AppColors.textColor, weight: FontWeight.w600); case OrderTrackingState.dispactched: - return "Pickup Up from Home".needTranslation - .toText16(color: AppColors.textColor, weight: FontWeight.w600); + return "Pickup Up from Home".needTranslation.toText16(color: AppColors.textColor, weight: FontWeight.w600); case OrderTrackingState.returning: - return " On The Way To Hospital".needTranslation - .toText16(color: AppColors.textColor, weight: FontWeight.w600); + return " On The Way To Hospital".needTranslation.toText16(color: AppColors.textColor, weight: FontWeight.w600); case OrderTrackingState.ended: default: - return "Arrived at Hospital".needTranslation - .toText16(color: AppColors.textColor, weight: FontWeight.w600); + return "Arrived at Hospital".needTranslation.toText16(color: AppColors.textColor, weight: FontWeight.w600); } } mapSection(BuildContext context) { - return SizedBox( + return SizedBox( height: 170.h, width: double.infinity, - child: ClipRRect( - borderRadius: BorderRadius.circular(20.h),child: mapForRequestedCoordinate(context)), + child: ClipRRect(borderRadius: BorderRadius.circular(20.h), child: mapForRequestedCoordinate(context)), ); } } diff --git a/lib/presentation/emergency_services/emergency_services_page.dart b/lib/presentation/emergency_services/emergency_services_page.dart index ddea6fd..cf7c4dc 100644 --- a/lib/presentation/emergency_services/emergency_services_page.dart +++ b/lib/presentation/emergency_services/emergency_services_page.dart @@ -67,8 +67,7 @@ class EmergencyServicesPage extends StatelessWidget { showCommonBottomSheetWithoutHeight( context, child: Container( - decoration: - RoundedRectangleBorder().toSmoothCornerDecoration( + decoration: RoundedRectangleBorder().toSmoothCornerDecoration( color: AppColors.primaryRedColor, borderRadius: 24.h, ), @@ -92,22 +91,11 @@ class EmergencyServicesPage extends StatelessWidget { }), ], ), - Lottie.asset(AppAnimations.ambulance_alert, - repeat: false, - reverse: false, - frameRate: FrameRate(60), - width: 120.h, - height: 120.h, - fit: BoxFit.contain), + Lottie.asset(AppAnimations.ambulance_alert, repeat: false, reverse: false, frameRate: FrameRate(60), width: 120.h, height: 120.h, fit: BoxFit.contain), SizedBox(height: 8.h), - "Confirmation".needTranslation.toText28( - color: AppColors.whiteColor, isBold: true), + "Confirmation".needTranslation.toText28(color: AppColors.whiteColor, isBold: true), SizedBox(height: 8.h), - "Are you sure you want to call an ambulance?" - .needTranslation - .toText14( - color: AppColors.whiteColor, - weight: FontWeight.w500), + "Are you sure you want to call an ambulance?".needTranslation.toText14(color: AppColors.whiteColor, weight: FontWeight.w500), SizedBox(height: 24.h), CustomButton( text: LocaleKeys.confirm.tr(context: context), @@ -115,15 +103,11 @@ class EmergencyServicesPage extends StatelessWidget { // Navigator.of(context).pop(); showCommonBottomSheetWithoutHeight( - title: - "Transport Options".needTranslation, + title: "Transport Options".needTranslation, context, - child: AmbulanceOptionSelectionBottomSheet( - onTap: () { + child: AmbulanceOptionSelectionBottomSheet(onTap: () { Navigator.of(context).pop(); - context - .read() - .navigateTOAmbulancePage(); + context.read().navigateTOAmbulancePage(); }), isFullScreen: false, isCloseButtonVisible: true, @@ -182,11 +166,7 @@ class EmergencyServicesPage extends StatelessWidget { SizedBox(height: 16.h), Container( padding: EdgeInsets.all(16.h), - decoration: RoundedRectangleBorder().toSmoothCornerDecoration( - color: AppColors.whiteColor, - borderRadius: 20.h, - hasShadow: false, - ), + decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 20.h, hasShadow: false), child: Row( children: [ Utils.buildSvgWithAssets(icon: AppAssets.rrt_icon, width: 40.h, height: 40.h), @@ -195,8 +175,8 @@ class EmergencyServicesPage extends StatelessWidget { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - "Rapid Response Team (RRT)".toText16(isBold: true, color: AppColors.blackColor), - "Comprehensive medical service for all sorts of urgent and stable cases".toText12(color: AppColors.greyTextColor, fontWeight: FontWeight.w500), + "Rapid Response Team (RRT)".needTranslation.toText16(isBold: true, color: AppColors.blackColor), + "Comprehensive medical service for all sorts of urgent and stable cases".needTranslation.toText12(color: AppColors.greyTextColor, fontWeight: FontWeight.w500), ], ), ), @@ -204,71 +184,57 @@ class EmergencyServicesPage extends StatelessWidget { Utils.buildSvgWithAssets(icon: AppAssets.forward_chevron_icon, width: 13.h, height: 13.h), ], ).onPress(() { - showCommonBottomSheetWithoutHeight( - context, - child: Container( - decoration: RoundedRectangleBorder().toSmoothCornerDecoration( - color: AppColors.primaryRedColor, - borderRadius: 24.h, - ), - child: Padding( - padding: EdgeInsets.all(24.h), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - "".toText14(), - Utils.buildSvgWithAssets( - icon: AppAssets.cancel_circle_icon, - iconColor: AppColors.whiteColor, - width: 24.h, - height: 24.h, - fit: BoxFit.contain, - ).onPress(() { + locationUtils!.getLocation( + isShowConfirmDialog: true, + onSuccess: (position) { + showCommonBottomSheetWithoutHeight( + context, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Lottie.asset(AppAnimations.ambulance_alert, repeat: false, reverse: false, frameRate: FrameRate(60), width: 100.h, height: 100.h, fit: BoxFit.contain), + SizedBox(height: 8.h), + "Confirmation".needTranslation.toText28( + color: AppColors.whiteColor, + isBold: true, + ), + SizedBox(height: 8.h), + "Are you sure you want to call Rapid Response Team (RRT)?".needTranslation.toText16(color: AppColors.whiteColor, weight: FontWeight.w500), + SizedBox(height: 24.h), + CustomButton( + text: LocaleKeys.confirm.tr(context: context), + onPressed: () async { Navigator.of(context).pop(); - }), - ], - ), - Lottie.asset(AppAnimations.ambulance_alert, repeat: false, reverse: false, frameRate: FrameRate(60), width: 120.h, height: 120.h, fit: BoxFit.contain), - SizedBox(height: 8.h), - "Confirmation".needTranslation.toText28(color: AppColors.whiteColor, isBold: true), - SizedBox(height: 8.h), - "Are you sure you want to call Rapid Response Team (RRT)?".needTranslation.toText14(color: AppColors.whiteColor, weight: FontWeight.w500), - SizedBox(height: 24.h), - CustomButton( - text: LocaleKeys.confirm.tr(context: context), - onPressed: () async { - Navigator.of(context).pop(); - showCommonBottomSheetWithoutHeight( - title: "Rapid Response Team (RRT)".needTranslation, - context, - child: RrtRequestTypeSelect(), - isFullScreen: false, - isCloseButtonVisible: true, - hasBottomPadding: false, - backgroundColor: AppColors.bottomSheetBgColor, - callBackFunc: () {}, - ); - }, - backgroundColor: AppColors.whiteColor, - borderColor: AppColors.whiteColor, - textColor: AppColors.primaryRedColor, - icon: AppAssets.checkmark_icon, - iconColor: AppColors.primaryRedColor, - ), - SizedBox(height: 8.h), - ], - ), - ), - ), - isFullScreen: false, - isCloseButtonVisible: false, - hasBottomPadding: false, - backgroundColor: AppColors.primaryRedColor, - callBackFunc: () {}, - ); + showCommonBottomSheetWithoutHeight( + title: "Rapid Response Team (RRT)".needTranslation, + context, + child: RrtRequestTypeSelect(), + isFullScreen: false, + isCloseButtonVisible: true, + hasBottomPadding: false, + isDisablePadding: true, + backgroundColor: AppColors.bottomSheetBgColor, + callBackFunc: () {}, + ); + }, + backgroundColor: AppColors.whiteColor, + borderColor: AppColors.whiteColor, + textColor: AppColors.primaryRedColor, + icon: AppAssets.checkmark_icon, + iconColor: AppColors.primaryRedColor, + ), + SizedBox(height: 20.h), + ], + ), + isFullScreen: false, + isCloseButtonVisible: true, + hasBottomPadding: false, + backgroundColor: AppColors.primaryRedColor, + iconColor: Colors.white, + customCloseIcon: AppAssets.cancel_circle_icon, + callBackFunc: () {}, + ); + }); }), ), ], diff --git a/lib/presentation/my_family/my_family.dart b/lib/presentation/my_family/my_family.dart index 194d5e0..781624a 100644 --- a/lib/presentation/my_family/my_family.dart +++ b/lib/presentation/my_family/my_family.dart @@ -50,7 +50,6 @@ class _FamilyMedicalScreenState extends State { medicalVM?.onFamilyFileTabChange(0); }); } - @override Widget build(BuildContext context) { @@ -69,6 +68,7 @@ class _FamilyMedicalScreenState extends State { text: "Add a new family member".needTranslation, onPressed: () { DialogService dialogService = getIt.get(); + medicalVM!.clearAuthValues(); dialogService.showAddFamilyFileSheet( label: "Add Family Member".needTranslation, message: "Please fill the below field to add a new family member to your profile".needTranslation, diff --git a/lib/widgets/appbar/collapsing_list_view.dart b/lib/widgets/appbar/collapsing_list_view.dart index 1574a0a..fc70d03 100644 --- a/lib/widgets/appbar/collapsing_list_view.dart +++ b/lib/widgets/appbar/collapsing_list_view.dart @@ -54,6 +54,7 @@ class CollapsingListView extends StatelessWidget { SliverAppBar( automaticallyImplyLeading: false, pinned: true, + expandedHeight: 100.h, stretch: true, systemOverlayStyle: SystemUiOverlayStyle(statusBarBrightness: Brightness.light), diff --git a/lib/widgets/common_bottom_sheet.dart b/lib/widgets/common_bottom_sheet.dart index 4d0dcf1..7d7bef7 100644 --- a/lib/widgets/common_bottom_sheet.dart +++ b/lib/widgets/common_bottom_sheet.dart @@ -105,17 +105,20 @@ class ButtonSheetContent extends StatelessWidget { } void showCommonBottomSheetWithoutHeight( - BuildContext context, { - required Widget child, - required VoidCallback callBackFunc, - String title = "", - bool isCloseButtonVisible = true, - bool isFullScreen = true, - bool isDismissible = true, - Widget? titleWidget, - bool useSafeArea = false, + BuildContext context, { + required Widget child, + required VoidCallback callBackFunc, + String title = "", + bool isCloseButtonVisible = true, + bool isFullScreen = true, + bool isDismissible = true, + Widget? titleWidget, + bool useSafeArea = false, bool hasBottomPadding = true, Color backgroundColor = AppColors.bottomSheetBgColor, + Color iconColor = const Color(0xff2B353E), + String? customCloseIcon, + bool isDisablePadding = false, }) { showModalBottomSheet( sheetAnimationStyle: AnimationStyle( @@ -145,40 +148,32 @@ void showCommonBottomSheetWithoutHeight( physics: ClampingScrollPhysics(), child: isCloseButtonVisible ? Container( - padding: EdgeInsets.only( - left: 24, - top: 24, - right: 24, - bottom: 12, - ), - decoration: RoundedRectangleBorder().toSmoothCornerDecoration( - color: AppColors.bottomSheetBgColor, - borderRadius: 24.h, - ), - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - titleWidget ?? - Expanded( - child: title.toText20(weight: FontWeight.w600), - ), - Utils.buildSvgWithAssets( - icon: AppAssets.close_bottom_sheet_icon, - iconColor: Color(0xff2B353E), - ).onPress(() { - Navigator.of(context).pop(); - }), - ], - ), - SizedBox(height: 16.h), - child, - ], - ), - ) + padding: isDisablePadding ? null : EdgeInsets.only(left: 24, top: 24, right: 24, bottom: 12), + decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: backgroundColor, borderRadius: 24.h), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + titleWidget ?? + Expanded( + child: title.toText20(weight: FontWeight.w600), + ), + Utils.buildSvgWithAssets( + icon: customCloseIcon ?? AppAssets.close_bottom_sheet_icon, + iconColor: iconColor, + ).onPress(() { + Navigator.of(context).pop(); + }), + ], + ).paddingOnly(left: isDisablePadding ? 24 : 0, right: isDisablePadding ? 24 : 0, bottom: isDisablePadding ? 12 : 0, top: isDisablePadding ? 24 : 0), + SizedBox(height: 16.h), + child, + ], + ), + ) : child, ), ), diff --git a/lib/widgets/expandable_bottom_sheet/ExpandableBottomSheet.dart b/lib/widgets/expandable_bottom_sheet/ExpandableBottomSheet.dart index 73a4a47..b18bd58 100644 --- a/lib/widgets/expandable_bottom_sheet/ExpandableBottomSheet.dart +++ b/lib/widgets/expandable_bottom_sheet/ExpandableBottomSheet.dart @@ -10,7 +10,7 @@ class ExpandableBottomSheet extends StatelessWidget { @override Widget build(BuildContext context) { - print("the currently selected item is ${bottomSheetType}"); + print("the currently selected item is $bottomSheetType"); return AnimatedCrossFade( duration: const Duration(milliseconds: 600), firstChild:children[BottomSheetType.FIXED] ?? SizedBox.shrink(), diff --git a/lib/widgets/radio/custom_radio_button.dart b/lib/widgets/radio/custom_radio_button.dart index 080fcb3..a530102 100644 --- a/lib/widgets/radio/custom_radio_button.dart +++ b/lib/widgets/radio/custom_radio_button.dart @@ -11,14 +11,13 @@ class CustomRadioOption extends StatelessWidget { // final Widget child; // The content of your radio option (e.g., Text, Image) - const CustomRadioOption({ - super.key, - required this.value, - required this.groupValue, - required this.onChanged, - // required this.child, - required this.text, - }); + const CustomRadioOption( + {super.key, + required this.value, + required this.groupValue, + required this.onChanged, + // required this.child, + required this.text}); @override Widget build(BuildContext context) { @@ -31,13 +30,12 @@ class CustomRadioOption extends StatelessWidget { child: Row( children: [ Container( - width: 20.h, - height: 20.h, + width: 18.h, + height: 18.h, decoration: BoxDecoration( - shape: BoxShape.circle, - color: isSelected ? AppColors.primaryRedColor : AppColors.whiteColor, - border: Border.all(color: isSelected ? AppColors.primaryRedColor : AppColors.bottomNAVBorder, width: 2.h), - ), + shape: BoxShape.circle, + color: isSelected ? AppColors.primaryRedColor : AppColors.whiteColor, + border: Border.all(color: isSelected ? AppColors.primaryRedColor : AppColors.bottomNAVBorder, width: 2.h)), ), SizedBox(width: 8.h), text.toText16(weight: FontWeight.w500), // The provided content -- 2.30.2 From c43f96c619ff15efcb5f5ee5e20e0221b074f1ff Mon Sep 17 00:00:00 2001 From: Sultan khan Date: Tue, 18 Nov 2025 11:44:25 +0300 Subject: [PATCH 04/39] e-referral work in progress --- lib/core/api_consts.dart | 6 +- .../models/create_e_referral_model.dart | 150 +++++ .../e_referral/e_referral_page_home.dart | 113 ++-- lib/presentation/e_referral/new_referral.dart | 540 +++++++++++++----- .../widgets/pickup_location.dart | 194 ++++--- .../radiology/radiology_orders_page.dart | 1 + 6 files changed, 703 insertions(+), 301 deletions(-) create mode 100644 lib/features/hmg_services/models/create_e_referral_model.dart diff --git a/lib/core/api_consts.dart b/lib/core/api_consts.dart index b21d329..943ecf3 100644 --- a/lib/core/api_consts.dart +++ b/lib/core/api_consts.dart @@ -14,8 +14,8 @@ var PACKAGES_ORDERS = '/api/orders'; var PACKAGES_ORDER_HISTORY = '/api/orders/items'; var PACKAGES_TAMARA_OPT = '/api/orders/paymentoptions/tamara'; // var BASE_URL = 'http://10.50.100.198:2018/'; -var BASE_URL = 'https://uat.hmgwebservices.com/'; -// var BASE_URL = 'https://hmgwebservices.com/'; +// var BASE_URL = 'https://uat.hmgwebservices.com/'; +var BASE_URL = 'https://hmgwebservices.com/'; // var BASE_URL = 'http://10.201.204.103/'; // var BASE_URL = 'https://orash.cloudsolutions.com.sa/'; // var BASE_URL = 'https://vidauat.cloudsolutions.com.sa/'; @@ -719,7 +719,7 @@ var GET_PRESCRIPTION_INSTRUCTIONS_PDF = 'Services/ChatBot_Service.svc/REST/Chatb class ApiConsts { static const maxSmallScreen = 660; - static AppEnvironmentTypeEnum appEnvironmentType = AppEnvironmentTypeEnum.uat; + static AppEnvironmentTypeEnum appEnvironmentType = AppEnvironmentTypeEnum.prod; // static String baseUrl = 'https://uat.hmgwebservices.com/'; // HIS API URL UAT diff --git a/lib/features/hmg_services/models/create_e_referral_model.dart b/lib/features/hmg_services/models/create_e_referral_model.dart new file mode 100644 index 0000000..0672fe6 --- /dev/null +++ b/lib/features/hmg_services/models/create_e_referral_model.dart @@ -0,0 +1,150 @@ +class CreateEReferralRequestModel { + bool? isInsuredPatient; + String? cityCode; + String? cityName; + String? requesterName; + String? requesterContactNo; + int? requesterRelationship; + String? otherRelationship; + String? fullName; + int? identificationNo; + String? patientMobileNumber; + int? preferredBranchCode; + String? preferredBranchName; + List? medicalReportAttachment; + dynamic insuranceCardAttachment; + double? versionID; + int? channel; + int? languageID; + String? iPAdress; + String? generalid; + int? patientOutSA; + String? sessionID; + bool? isDentalAllowedBackend; + int? deviceTypeID; + int? patientID; + String? tokenID; + int? patientTypeID; + int? patientType; + + CreateEReferralRequestModel( + {this.isInsuredPatient, + this.cityCode, + this.cityName, + this.requesterName, + this.requesterContactNo, + this.requesterRelationship, + this.otherRelationship, + this.fullName, + this.identificationNo, + this.patientMobileNumber, + this.preferredBranchCode, + this.preferredBranchName, + this.medicalReportAttachment, + this.insuranceCardAttachment, + this.versionID, + this.channel, + this.languageID, + this.iPAdress, + this.generalid, + this.patientOutSA, + this.sessionID, + this.isDentalAllowedBackend, + this.deviceTypeID, + this.patientID, + this.tokenID, + this.patientTypeID, + this.patientType}); + + CreateEReferralRequestModel.fromJson(Map json) { + isInsuredPatient = json['IsInsuredPatient']; + cityCode = json['CityCode']; + cityName = json['CityName']; + requesterName = json['RequesterName']; + requesterContactNo = json['RequesterContactNo']; + requesterRelationship = json['RequesterRelationship']; + otherRelationship = json['OtherRelationship']; + fullName = json['FullName']; + identificationNo = json['IdentificationNo']; + patientMobileNumber = json['PatientMobileNumber']; + preferredBranchCode = json['PreferredBranchCode']; + preferredBranchName = json['PreferredBranchName']; + if (json['MedicalReportAttachment'] != null) { + medicalReportAttachment = []; + json['MedicalReportAttachment'].forEach((v) { + medicalReportAttachment!.add(EReferralAttachment.fromJson(v)); + }); + } + insuranceCardAttachment = json['InsuranceCardAttachment'] != null ? EReferralAttachment.fromJson(json['InsuranceCardAttachment']) : null; + versionID = json['VersionID']; + channel = json['Channel']; + languageID = json['LanguageID']; + iPAdress = json['IPAdress']; + generalid = json['generalid']; + patientOutSA = json['PatientOutSA']; + sessionID = json['SessionID']; + isDentalAllowedBackend = json['isDentalAllowedBackend']; + deviceTypeID = json['DeviceTypeID']; + patientID = json['PatientID']; + tokenID = json['TokenID']; + patientTypeID = json['PatientTypeID']; + patientType = json['PatientType']; + } + + Map toJson() { + final Map data = new Map(); + data['IsInsuredPatient'] = this.isInsuredPatient; + data['CityCode'] = this.cityCode; + data['CityName'] = this.cityName; + data['RequesterName'] = this.requesterName; + data['RequesterContactNo'] = this.requesterContactNo; + data['RequesterRelationship'] = this.requesterRelationship; + data['OtherRelationship'] = this.otherRelationship; + data['FullName'] = this.fullName; + data['IdentificationNo'] = this.identificationNo; + data['PatientMobileNumber'] = this.patientMobileNumber; + data['PreferredBranchCode'] = this.preferredBranchCode; + data['PreferredBranchName'] = this.preferredBranchName; + if (this.medicalReportAttachment != null) { + data['MedicalReportAttachment'] = this.medicalReportAttachment!.map((v) => v.toJson()).toList(); + } + if (this.insuranceCardAttachment == null) { + data['InsuranceCardAttachment'] = {}; + } else + data['InsuranceCardAttachment'] = this.insuranceCardAttachment.toJson(); + + data['VersionID'] = this.versionID; + data['Channel'] = this.channel; + data['LanguageID'] = this.languageID; + data['IPAdress'] = this.iPAdress; + data['generalid'] = this.generalid; + data['PatientOutSA'] = this.patientOutSA; + data['SessionID'] = this.sessionID; + data['isDentalAllowedBackend'] = this.isDentalAllowedBackend; + data['DeviceTypeID'] = this.deviceTypeID; + data['PatientID'] = this.patientID; + data['TokenID'] = this.tokenID; + data['PatientTypeID'] = this.patientTypeID; + data['PatientType'] = this.patientType; + return data; + } +} + +class EReferralAttachment { + String? fileName; + String? base64String; + + EReferralAttachment({this.fileName, this.base64String}); + + EReferralAttachment.fromJson(Map json) { + fileName = json['FileName']; + base64String = json['Base64String']; + } + + Map toJson() { + final Map data = new Map(); + data['FileName'] = this.fileName; + data['Base64String'] = this.base64String; + return data; + } +} diff --git a/lib/presentation/e_referral/e_referral_page_home.dart b/lib/presentation/e_referral/e_referral_page_home.dart index bacca47..3eb1255 100644 --- a/lib/presentation/e_referral/e_referral_page_home.dart +++ b/lib/presentation/e_referral/e_referral_page_home.dart @@ -1,15 +1,19 @@ import 'dart:ui'; - +import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; +import 'package:hmg_patient_app_new/core/app_assets.dart'; import 'package:hmg_patient_app_new/core/app_export.dart'; import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; +import 'package:hmg_patient_app_new/features/contact_us/contact_us_view_model.dart'; import 'package:hmg_patient_app_new/features/prescriptions/prescriptions_view_model.dart'; +import 'package:hmg_patient_app_new/generated/locale_keys.g.dart'; import 'package:hmg_patient_app_new/presentation/e_referral/new_referral.dart'; import 'package:hmg_patient_app_new/theme/colors.dart'; import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart'; import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart'; +import 'package:hmg_patient_app_new/widgets/custom_tab_bar.dart'; import 'package:provider/provider.dart'; class EReferralPage extends StatefulWidget { @@ -19,10 +23,7 @@ class EReferralPage extends StatefulWidget { _EReferralPageState createState() => _EReferralPageState(); } -class _EReferralPageState extends State - { - - +class _EReferralPageState extends State { @override void initState() { super.initState(); @@ -32,66 +33,52 @@ class _EReferralPageState extends State void dispose() { super.dispose(); } + bool isNewReferral = true; + VoidCallback? onNextStep; @override Widget build(BuildContext context) { - return Scaffold( - backgroundColor: AppColors.bgScaffoldColor, - body: CollapsingListView( - title:"E Referral".needTranslation, - child: SingleChildScrollView( - child: Consumer(builder: (context, model, child) { - return Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - SizedBox(height: 16.h), - Row( - children: [ - CustomButton( - text: "New Referral".needTranslation, - onPressed: () { - isNewReferral =true; - setState(() { - - }); - }, - backgroundColor: model.isSortByClinic ? AppColors.bgRedLightColor : AppColors.whiteColor, - borderColor: model.isSortByClinic ? AppColors.primaryRedColor : AppColors.textColor.withOpacity(0.2), - textColor: model.isSortByClinic ? AppColors.primaryRedColor : AppColors.blackColor, - fontSize: 12, - fontWeight: FontWeight.w500, - borderRadius: 10, - padding: EdgeInsets.fromLTRB(10, 0, 10, 0), - height: 40.h, - ), - SizedBox(width: 8.h), - CustomButton( - text: "Search Referral".needTranslation, - onPressed: () { - isNewReferral =false; - }, - backgroundColor: model.isSortByClinic ? AppColors.whiteColor : AppColors.bgRedLightColor, - borderColor: model.isSortByClinic ? AppColors.textColor.withOpacity(0.2) : AppColors.primaryRedColor, - textColor: model.isSortByClinic ? AppColors.blackColor : AppColors.primaryRedColor, - fontSize: 12, - fontWeight: FontWeight.w500, - borderRadius: 10, - padding: EdgeInsets.fromLTRB(10, 0, 10, 0), - height: 40.h, - ), - ], - ).paddingSymmetrical(24.h, 0.h), - SizedBox(height: 20.h), - isNewReferral ? NewEReferral() : SizedBox(), - ], - ); - }), - ), - ), - ); - - - - + return Scaffold( + backgroundColor: AppColors.bgScaffoldColor, + body: CollapsingListView( + title: "E Referral".needTranslation, + child: Consumer(builder: (context, contactUsVM, child) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SizedBox(height: 16.h), + contactUsVM.isHMGLocationsListLoading + ? SizedBox.shrink() + : CustomTabBar( + activeTextColor: AppColors.primaryRedColor, + activeBackgroundColor: AppColors.primaryRedColor.withValues(alpha: .1), + tabs: [ + CustomTabBarModel(null, "New Referral".needTranslation), + CustomTabBarModel(null, "Search Referral".needTranslation), + ], + onTabChange: (index) {}, + ).paddingSymmetrical(24.h, 0.h), + SizedBox(height: 24.h), + NewReferralPage(onNextStep: (nextStep) { + WidgetsBinding.instance.addPostFrameCallback((_) { + setState(() { + onNextStep = nextStep; + }); + }); + }) + ], + ); + }), + ), + bottomNavigationBar: Padding( + padding: EdgeInsets.all(16.h), + child: CustomButton( + text: LocaleKeys.next.tr(), + onPressed:onNextStep ?? () {}, + backgroundColor: AppColors.primaryRedColor, + borderColor: AppColors.primaryRedColor, + textColor: AppColors.whiteColor, + )), + ); } } diff --git a/lib/presentation/e_referral/new_referral.dart b/lib/presentation/e_referral/new_referral.dart index 4ed9b8e..73c4f5c 100644 --- a/lib/presentation/e_referral/new_referral.dart +++ b/lib/presentation/e_referral/new_referral.dart @@ -1,172 +1,432 @@ +// dart +// File: lib/presentation/e_referral/new_referral_page.dart + +import 'dart:io'; + +import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; +import 'package:hmg_patient_app_new/core/app_assets.dart'; +import 'package:hmg_patient_app_new/core/app_export.dart'; +import 'package:hmg_patient_app_new/core/app_state.dart'; +import 'package:hmg_patient_app_new/core/common_models/nationality_country_model.dart'; +import 'package:hmg_patient_app_new/core/dependencies.dart'; import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; +import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; +import 'package:hmg_patient_app_new/features/authentication/authentication_view_model.dart'; +import 'package:hmg_patient_app_new/features/hmg_services/models/create_e_referral_model.dart'; +import 'package:hmg_patient_app_new/generated/locale_keys.g.dart'; import 'package:hmg_patient_app_new/theme/colors.dart'; +import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart'; +import 'package:hmg_patient_app_new/widgets/dropdown/dropdown_widget.dart'; +import 'package:hmg_patient_app_new/widgets/image_picker.dart'; +import 'package:hmg_patient_app_new/widgets/input_widget.dart'; +import 'package:provider/provider.dart'; -class NewEReferral extends StatefulWidget { - NewEReferral(); +class NewReferralPage extends StatefulWidget { + final Function(VoidCallback) onNextStep; + const NewReferralPage({super.key, required this.onNextStep}); @override - _NewEReferralState createState() => _NewEReferralState(); + State createState() => NewReferralPageState(); } -class _NewEReferralState extends State with TickerProviderStateMixin { - late PageController _controller; - int _currentIndex = 0; - int pageSelected = 2; - - // CreateEReferralRequestModel createEReferralRequestModel = new CreateEReferralRequestModel(); +class NewReferralPageState extends State { + final PageController _pageController = PageController(); + int pageIndex = 0; + int _tabIndex = 0; + bool isPatientInsured =false; + final TextEditingController _nameController = TextEditingController(); + final TextEditingController _phoneController = TextEditingController(); + String _country = 'Saudi Arabia'; + String? _relationship; + List medicalReportImages = []; + List insuredPatientImages = []; + void nextPressed() { + if (pageIndex < 2) { + _pageController.nextPage(duration: const Duration(milliseconds: 300), curve: Curves.easeInOut); + } else { + // submit logic + } + } @override - void initState() { + initState() { super.initState(); - _controller = new PageController(); + widget.onNextStep((){ + nextPressed(); + }); + } - @override - void dispose() { - super.dispose(); + Widget _progressStep({required String title, required bool active, bool showDivider = true}) { + final Color activeColor = active ? AppColors.primaryRedColor : Colors.grey.shade400; + return Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + + children: [ + CircleAvatar( + radius: 13, + backgroundColor: active ? activeColor : Colors.grey.shade300, + child: Icon(Icons.check, size: 14, color: Colors.white), + ), + if (showDivider) + Padding( + padding: const EdgeInsets.symmetric(horizontal: 8.0), + child: Divider(thickness: 1), + ), + + ], + ), + const SizedBox(height: 6), + Text(title, style: const TextStyle(fontSize: 11, fontWeight: FontWeight.w600)), + const SizedBox(height: 6), + Container( + padding: const EdgeInsets.symmetric(horizontal: 6, vertical: 4), + decoration: BoxDecoration( + color: active ? activeColor.withOpacity(0.15) : Colors.grey.shade100, + borderRadius: BorderRadius.circular(6), + ), + child: Text(active ? 'Active' : 'Inactive', + style: TextStyle(fontSize: 9, color: active ? activeColor : Colors.grey)), + ), + ], + ), + ); + } + + Widget _requesterForm() { + return Padding( + padding: const EdgeInsets.symmetric(horizontal: 24.0), + child: ListView( + physics: const BouncingScrollPhysics(), + children: [ + const SizedBox(height: 12), + const Text('Referral requester information', + style: TextStyle(fontWeight: FontWeight.w700, fontSize: 16)).paddingSymmetrical(4.h, 0.h), + const SizedBox(height: 12), + TextInputWidget( + controller: _nameController, + padding: const EdgeInsets.symmetric(horizontal: 16.0), + hintText: 'Enter Referral Requester Name*', labelText: 'Requester Name', + ).paddingSymmetrical(0.h, 4.h), + + Selector? countriesList, NationalityCountries? selectedCountry, bool isArabic})>( + selector: (context, authViewModel) { + final appState = getIt.get(); + return ( + countriesList: authViewModel.countriesList, + selectedCountry: authViewModel.pickedCountryByUAEUser, + isArabic: appState.isArabic(), + ); + }, + shouldRebuild: (previous, next) => previous.countriesList != next.countriesList || previous.selectedCountry != next.selectedCountry || previous.isArabic != next.isArabic, + builder: (context, data, child) { + final authVM = context.read(); + return DropdownWidget( + labelText: LocaleKeys.country.tr(), + hintText:_country, + isEnable: true, + dropdownItems: (data.countriesList ?? []).map((e) => data.isArabic ? e.nameN ?? "" : e.name ?? "").toList(), + selectedValue: data.selectedCountry != null + ? data.isArabic + ? data.selectedCountry!.nameN ?? "" + : data.selectedCountry!.name ?? "" + : "", + onChange: authVM.onUAEUserCountrySelection, + hasSelectionCustomIcon: true, + labelColor: AppColors.textColor, + padding: const EdgeInsets.symmetric(vertical: 12, horizontal: 16), + selectionCustomIcon: AppAssets.arrow_down, + leadingIcon: AppAssets.globe, + ).withVerticalPadding(8); + }, + ).paddingSymmetrical(0.h, 4.h), + + TextInputWidget( + labelText: LocaleKeys.mobileNumber.tr(), + hintText: LocaleKeys.mobileNumber.tr(), + controller: null, + isEnable: true, + prefix: null, + isAllowLeadingIcon: true, + labelColor: AppColors.textColor, padding: const EdgeInsets.symmetric(horizontal: 16.0), + isReadOnly: true, + leadingIcon: AppAssets.call).paddingSymmetrical(0.h, 4.h), + + Selector? countriesList, NationalityCountries? selectedCountry, bool isArabic})>( + selector: (context, authViewModel) { + final appState = getIt.get(); + return ( + countriesList: authViewModel.countriesList, + selectedCountry: authViewModel.pickedCountryByUAEUser, + isArabic: appState.isArabic(), + ); + }, + shouldRebuild: (previous, next) => previous.countriesList != next.countriesList || previous.selectedCountry != next.selectedCountry || previous.isArabic != next.isArabic, + builder: (context, data, child) { + final authVM = context.read(); + return DropdownWidget( + labelText: "Relationship", + hintText: "Relationship*".needTranslation, + isEnable: true, + dropdownItems: (data.countriesList ?? []).map((e) => data.isArabic ? e.nameN ?? "" : e.name ?? "").toList(), + selectedValue: data.selectedCountry != null + ? data.isArabic + ? data.selectedCountry!.nameN ?? "" + : data.selectedCountry!.name ?? "" + : "", + onChange: authVM.onUAEUserCountrySelection, + hasSelectionCustomIcon: true, + labelColor: AppColors.textColor, + padding: const EdgeInsets.symmetric(vertical: 12, horizontal: 16), + selectionCustomIcon: AppAssets.arrow_down, + leadingIcon: AppAssets.globe, + ).withVerticalPadding(8); + }, + ).paddingSymmetrical(0.h, 4.h), + + const SizedBox(height: 120), + ], + ), + ); } - changePageViewIndex(pageIndex) { - _controller.jumpToPage(pageIndex); + Widget _patientInformation(){ + return Padding( + padding: const EdgeInsets.symmetric(horizontal: 16.0), + child: ListView( + physics: const BouncingScrollPhysics(), + children: [ + const SizedBox(height: 12), + 'Patient information'.toText16(weight: FontWeight.bold).paddingSymmetrical(4.h, 0.h), + const SizedBox(height: 12), + TextInputWidget( + controller: _nameController, + padding: const EdgeInsets.symmetric(horizontal: 16.0), + hintText: 'Enter Identification Number*', labelText: 'Identification Number ', + ).paddingSymmetrical(0.h, 4.h), + + TextInputWidget( + controller: _nameController, + padding: const EdgeInsets.symmetric(horizontal: 16.0), + hintText: 'Patient Name*', labelText: 'Name', + ).paddingSymmetrical(0.h, 4.h), + + Selector? countriesList, NationalityCountries? selectedCountry, bool isArabic})>( + selector: (context, authViewModel) { + final appState = getIt.get(); + return ( + countriesList: authViewModel.countriesList, + selectedCountry: authViewModel.pickedCountryByUAEUser, + isArabic: appState.isArabic(), + ); + }, + shouldRebuild: (previous, next) => previous.countriesList != next.countriesList || previous.selectedCountry != next.selectedCountry || previous.isArabic != next.isArabic, + builder: (context, data, child) { + final authVM = context.read(); + return DropdownWidget( + labelText: LocaleKeys.country.tr(), + hintText:_country, + isEnable: true, + dropdownItems: (data.countriesList ?? []).map((e) => data.isArabic ? e.nameN ?? "" : e.name ?? "").toList(), + selectedValue: data.selectedCountry != null + ? data.isArabic + ? data.selectedCountry!.nameN ?? "" + : data.selectedCountry!.name ?? "" + : "", + onChange: authVM.onUAEUserCountrySelection, + hasSelectionCustomIcon: true, + labelColor: AppColors.textColor, + padding: const EdgeInsets.symmetric(vertical: 12, horizontal: 16), + selectionCustomIcon: AppAssets.arrow_down, + leadingIcon: AppAssets.globe, + ).withVerticalPadding(8); + }, + ).paddingSymmetrical(0.h, 4.h), + + + 'Where the patient located'.needTranslation.toText16(weight: FontWeight.bold).paddingSymmetrical(4.h, 0.h), + + Selector? countriesList, NationalityCountries? selectedCountry, bool isArabic})>( + selector: (context, authViewModel) { + final appState = getIt.get(); + return ( + countriesList: authViewModel.countriesList, + selectedCountry: authViewModel.pickedCountryByUAEUser, + isArabic: appState.isArabic(), + ); + }, + shouldRebuild: (previous, next) => previous.countriesList != next.countriesList || previous.selectedCountry != next.selectedCountry || previous.isArabic != next.isArabic, + builder: (context, data, child) { + final authVM = context.read(); + return DropdownWidget( + labelText: LocaleKeys.country.tr(), + hintText:_country, + isEnable: true, + dropdownItems: (data.countriesList ?? []).map((e) => data.isArabic ? e.nameN ?? "" : e.name ?? "").toList(), + selectedValue: data.selectedCountry != null + ? data.isArabic + ? data.selectedCountry!.nameN ?? "" + : data.selectedCountry!.name ?? "" + : "", + onChange: authVM.onUAEUserCountrySelection, + hasSelectionCustomIcon: true, + labelColor: AppColors.textColor, + padding: const EdgeInsets.symmetric(vertical: 12, horizontal: 16), + selectionCustomIcon: AppAssets.arrow_down, + leadingIcon: AppAssets.globe, + ).withVerticalPadding(8); + }, + ).paddingSymmetrical(0.h, 4.h), + + ])); } - @override - Widget build(BuildContext context) { - return Scaffold( - body: Container( - height: double.infinity, + Widget _otherDetails() { + return Padding( + padding: const EdgeInsets.symmetric(horizontal: 16.0), + child: ListView( + physics: const BouncingScrollPhysics(), + children: [ + const SizedBox(height: 12), + 'Other Details'.toText16(weight: FontWeight.bold).paddingSymmetrical(4.h, 0.h), + const SizedBox(height: 12), + + InkWell(child: TextInputWidget( + controller: _nameController, + padding: const EdgeInsets.symmetric(horizontal: 16.0), + hintText: 'Medical Report', labelText: 'Select Attachment', + suffix: Icon(Icons.attachment), + isReadOnly: true, + + ), + onTap: (){ + ImageOptions.showImageOptionsNew( + context, + true, + (String image, File file) { + setState(() { + EReferralAttachment eReferralAttachment = new EReferralAttachment(fileName: 'image ${medicalReportImages.length + 1}.png', base64String: image); + medicalReportImages.add(eReferralAttachment); + }); + }, + ); + }, + ).paddingSymmetrical(0.h, 4.h), + + Selector? countriesList, NationalityCountries? selectedCountry, bool isArabic})>( + selector: (context, authViewModel) { + final appState = getIt.get(); + return ( + countriesList: authViewModel.countriesList, + selectedCountry: authViewModel.pickedCountryByUAEUser, + isArabic: appState.isArabic(), + ); + }, + shouldRebuild: (previous, next) => previous.countriesList != next.countriesList || previous.selectedCountry != next.selectedCountry || previous.isArabic != next.isArabic, + builder: (context, data, child) { + final authVM = context.read(); + return DropdownWidget( + labelText: LocaleKeys.branch.tr(), + hintText:_country, + isEnable: true, + dropdownItems: (data.countriesList ?? []).map((e) => data.isArabic ? e.nameN ?? "" : e.name ?? "").toList(), + selectedValue: data.selectedCountry != null + ? data.isArabic + ? data.selectedCountry!.nameN ?? "" + : data.selectedCountry!.name ?? "" + : "", + onChange: authVM.onUAEUserCountrySelection, + hasSelectionCustomIcon: true, + labelColor: AppColors.textColor, + padding: const EdgeInsets.symmetric(vertical: 12, horizontal: 16), + selectionCustomIcon: AppAssets.arrow_down, + leadingIcon: AppAssets.hospital, + ).withVerticalPadding(8); + }, + ).paddingSymmetrical(0.h, 4.h), + Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Row( + children: [ + Checkbox( + value: isPatientInsured, + activeColor: AppColors.primaryRedColor, + onChanged: (bool? newValue) { + setState(() { + isPatientInsured = newValue!; + }); + }), + Padding( + padding: const EdgeInsets.all(5.0), + child: Text( + "Patient is Insured".needTranslation, + style: TextStyle(fontSize: 14, fontWeight: FontWeight.w600), + ), + ), + ], + ), + ], + ).paddingSymmetrical(0.h, 4.h), + + isPatientInsured? InkWell(child: TextInputWidget( + controller: _nameController, + padding: const EdgeInsets.symmetric(horizontal: 16.0), + hintText: 'Insurance Document', labelText: 'Select Attachment', + suffix: Icon(Icons.attachment), + isReadOnly: true, + + )) : SizedBox(), + ])); + } + @override + Widget build(BuildContext context) { + final bool step0Active = pageIndex == 0; + final bool step1Active = pageIndex == 1; + final bool step2Active = pageIndex == 2; + + return SizedBox( + height: MediaQuery + .of(context) + .size + .height, // constrain height child: Column( children: [ - Container( - width: double.infinity, - padding: EdgeInsets.only(left: 12,right: 12,top: 12), + const SizedBox(height: 8), + Padding( + padding: const EdgeInsets.symmetric(horizontal: 24.0), child: Row( + mainAxisAlignment: MainAxisAlignment.center, children: [ - Expanded( - child: showProgress( - title: "Requester Info".needTranslation, - status: _currentIndex == 0 - ? "InProgress".needTranslation - : _currentIndex > 0 - ? "Completed".needTranslation - : "Locked".needTranslation, - color: _currentIndex == 0 ? AppColors.infoColor : AppColors.successColor, - ), - ), - Expanded( - child: showProgress( - title:"Patient Info".needTranslation, - status: _currentIndex == 1 - ? "InProgress".needTranslation - : _currentIndex > 1 - ? "Completed".needTranslation - : "Locked".needTranslation, - color: _currentIndex == 1 - ? AppColors.infoColor - : _currentIndex > 1 - ? AppColors.successColor - : AppColors.greyColor, - ), - ), - showProgress( - title: "Other Info".needTranslation, - status: _currentIndex == 2 ? "InProgress".needTranslation :"Locked".needTranslation, - color: _currentIndex == 2 - ? AppColors.infoColor - : _currentIndex > 3 - ? AppColors.successColor - : AppColors.greyColor, - isNeedBorder: false, - ), + _progressStep(title: 'Requester Info', active: step0Active), + _progressStep(title: 'Patient Information', active: step1Active), + _progressStep( + title: 'Other details', active: step2Active, showDivider: false), + ], ), ), Expanded( child: PageView( - physics: NeverScrollableScrollPhysics(), - controller: _controller, - onPageChanged: (index) { - setState(() { - _currentIndex = index; - }); - }, - scrollDirection: Axis.horizontal, - children: [ - // NewEReferralStepOnePage( - // changePageViewIndex: changePageViewIndex, - // createEReferralRequestModel: createEReferralRequestModel, - // ), - // NewEReferralStepTowPage( - // changePageViewIndex: changePageViewIndex, - // createEReferralRequestModel: createEReferralRequestModel, - // ), - // NewEReferralStepThreePage( - // changePageViewIndex: changePageViewIndex, - // createEReferralRequestModel: createEReferralRequestModel, - // ), + controller: _pageController, + physics: const NeverScrollableScrollPhysics(), + onPageChanged: (i) => setState(() => pageIndex = i), + children: [ + _requesterForm(), + _patientInformation(), + // const Center(child: Text('Patient Info - step 2 (placeholder)')), + _otherDetails(), ], ), ), - ], - ), - ), - ); - } - Widget showProgress({required String title, required String status, required Color color, bool isNeedBorder = true}) { - return Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Row( - children: [ - Container( - width: 26, - height: 26, - // decoration: containerRadius(color, 200), - child: Icon( - Icons.done, - color: Colors.white, - size: 16, - ), - ), - if (isNeedBorder) - Expanded( - child: Padding( - padding: const EdgeInsets.all(8.0), - child:Divider(), - )), - ], - ), - // mHeight(8), - Text( - title, - style: TextStyle( - fontSize: 11, - fontWeight: FontWeight.w600, - letterSpacing: -0.44, - ), - ), - // mHeight(2), - Container( - padding: EdgeInsets.all(5), - // decoration: containerRadius(color.withOpacity(0.2), 4), - child: Text( - status, - style: TextStyle( - fontSize: 8, - fontWeight: FontWeight.w600, - letterSpacing: -0.32, - color: color, - ), - ), - ), + ], - ) - ], - ); + ), + ); + } } -} diff --git a/lib/presentation/emergency_services/call_ambulance/widgets/pickup_location.dart b/lib/presentation/emergency_services/call_ambulance/widgets/pickup_location.dart index 5d073d4..2363644 100644 --- a/lib/presentation/emergency_services/call_ambulance/widgets/pickup_location.dart +++ b/lib/presentation/emergency_services/call_ambulance/widgets/pickup_location.dart @@ -39,54 +39,56 @@ class PickupLocation extends StatelessWidget { return Column( spacing: 12.h, children: [ - RadioGroup( - groupValue: value, - onChanged: (value) { - context - .read() - .updateCallingPlace(value); - }, - child: Row( - mainAxisAlignment: MainAxisAlignment.start, - spacing: 24.h, - children: [ - Row( - children: [ - Radio( - value: AmbulanceCallingPlace.TO_HOSPITAL, - groupValue: value, - activeColor: AppColors.primaryRedColor, - - fillColor: MaterialStateProperty.all(AppColors.primaryRedColor), - ), - "To Hospital" - .needTranslation - .toText12(color: AppColors.textColor) - ], - ).onPress((){ - context - .read() - .updateCallingPlace(AmbulanceCallingPlace.TO_HOSPITAL); - }), - Row( - children: [ - Radio( - value: AmbulanceCallingPlace.FROM_HOSPITAL, - activeColor: AppColors.primaryRedColor, - - fillColor: MaterialStateProperty.all(AppColors.primaryRedColor), - ), - "From Hospital" - .needTranslation - .toText12(color: AppColors.textColor) - ], - ).onPress((){ - context - .read() - .updateCallingPlace(AmbulanceCallingPlace.FROM_HOSPITAL); - }), - ], - ), + // Use a plain Row with Radios and provide required groupValue and onChanged + Row( + mainAxisAlignment: MainAxisAlignment.start, + spacing: 24.h, + children: [ + Row( + children: [ + Radio( + value: AmbulanceCallingPlace.TO_HOSPITAL, + groupValue: value, + onChanged: (AmbulanceCallingPlace? v) { + if (v != null) { + context.read().updateCallingPlace(v); + } + }, + activeColor: AppColors.primaryRedColor, + fillColor: MaterialStateProperty.all(AppColors.primaryRedColor), + ), + "To Hospital" + .needTranslation + .toText12(color: AppColors.textColor) + ], + ).onPress(() { + context + .read() + .updateCallingPlace(AmbulanceCallingPlace.TO_HOSPITAL); + }), + Row( + children: [ + Radio( + value: AmbulanceCallingPlace.FROM_HOSPITAL, + groupValue: value, + onChanged: (AmbulanceCallingPlace? v) { + if (v != null) { + context.read().updateCallingPlace(v); + } + }, + activeColor: AppColors.primaryRedColor, + fillColor: MaterialStateProperty.all(AppColors.primaryRedColor), + ), + "From Hospital" + .needTranslation + .toText12(color: AppColors.textColor) + ], + ).onPress(() { + context + .read() + .updateCallingPlace(AmbulanceCallingPlace.FROM_HOSPITAL); + }), + ], ), Visibility( visible: value == AmbulanceCallingPlace.TO_HOSPITAL, @@ -100,53 +102,55 @@ class PickupLocation extends StatelessWidget { "Select Way" .needTranslation .toText14(color: AppColors.textColor, weight: FontWeight.w600), - RadioGroup( - groupValue: directionValue, - onChanged: (value) { - context - .read() - .updateDirection(value); - }, - child: Row( - mainAxisAlignment: MainAxisAlignment.start, - spacing: 24.h, - children: [ - Row( - children: [ - Radio( - value: AmbulanceDirection.ONE_WAY, - activeColor: AppColors.primaryRedColor, - - fillColor: MaterialStateProperty.all(AppColors.primaryRedColor), - ), - "One Way" - .needTranslation - .toText12(color: AppColors.textColor) - ], - ).onPress((){ - context - .read() - .updateDirection(AmbulanceDirection.ONE_WAY); - }), - Row( - children: [ - Radio( - value: AmbulanceDirection.TWO_WAY, - // activeColor: AppColors.primaryRedColor, - - fillColor: MaterialStateProperty.all(AppColors.primaryRedColor), - ), - "Two Way" - .needTranslation - .toText12(color: AppColors.textColor) - ], - ).onPress((){ - context - .read() - .updateDirection(AmbulanceDirection.TWO_WAY); - }), - ], - ), + // Use a Row and assign groupValue/onChanged to each Radio + Row( + mainAxisAlignment: MainAxisAlignment.start, + spacing: 24.h, + children: [ + Row( + children: [ + Radio( + value: AmbulanceDirection.ONE_WAY, + groupValue: directionValue, + onChanged: (AmbulanceDirection? v) { + if (v != null) { + context.read().updateDirection(v); + } + }, + activeColor: AppColors.primaryRedColor, + fillColor: MaterialStateProperty.all(AppColors.primaryRedColor), + ), + "One Way" + .needTranslation + .toText12(color: AppColors.textColor) + ], + ).onPress(() { + context + .read() + .updateDirection(AmbulanceDirection.ONE_WAY); + }), + Row( + children: [ + Radio( + value: AmbulanceDirection.TWO_WAY, + groupValue: directionValue, + onChanged: (AmbulanceDirection? v) { + if (v != null) { + context.read().updateDirection(v); + } + }, + fillColor: MaterialStateProperty.all(AppColors.primaryRedColor), + ), + "Two Way" + .needTranslation + .toText12(color: AppColors.textColor) + ], + ).onPress(() { + context + .read() + .updateDirection(AmbulanceDirection.TWO_WAY); + }), + ], ), ], ); diff --git a/lib/presentation/radiology/radiology_orders_page.dart b/lib/presentation/radiology/radiology_orders_page.dart index 1d7dfe2..1c3cad4 100644 --- a/lib/presentation/radiology/radiology_orders_page.dart +++ b/lib/presentation/radiology/radiology_orders_page.dart @@ -10,6 +10,7 @@ import 'package:hmg_patient_app_new/core/utils/size_utils.dart'; import 'package:hmg_patient_app_new/core/utils/utils.dart'; import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; +import 'package:hmg_patient_app_new/features/lab/lab_view_model.dart'; import 'package:hmg_patient_app_new/generated/locale_keys.g.dart'; import 'package:hmg_patient_app_new/presentation/lab/lab_result_item_view.dart'; import 'package:hmg_patient_app_new/presentation/radiology/search_radiology.dart'; -- 2.30.2 From d8a9d8443a732213643808c7c258dbb8a85589ec Mon Sep 17 00:00:00 2001 From: Sultan khan Date: Sun, 23 Nov 2025 11:56:53 +0300 Subject: [PATCH 05/39] e-referral work done search-referral in progress. --- lib/core/api_consts.dart | 24 +- lib/core/utils/validation_utils.dart | 14 +- .../hmg_services/hmg_services_repo.dart | 238 ++++++++++ .../hmg_services/hmg_services_view_model.dart | 189 ++++++++ ...check_activation_e_referral_req_model.dart | 57 +++ .../req_models/create_e_referral_model.dart | 155 +++++++ .../create_e_referral_req_model.dart} | 0 ...d_activation_code_ereferral_req_model.dart | 56 +++ .../get_all_cities_resp_model.dart | 21 + .../relationship_type_resp_mode.dart | 25 + .../ui_models/e_referral_form_model.dart | 42 ++ .../e_referral/e-referral_validator.dart | 91 ++++ .../e_referral/e_referral_form_manager.dart | 206 +++++++++ .../e_referral/e_referral_page_home.dart | 55 ++- .../e_referral/new_e_referral.dart | 183 ++++++++ lib/presentation/e_referral/new_referral.dart | 432 ------------------ .../e_referral/search_e_referral.dart | 98 ++++ .../e_referral/widget/e-referral_otp.dart | 105 +++++ .../widget/e_referral_other_details.dart | 308 +++++++++++++ .../widget/e_referral_patient_info.dart | 289 ++++++++++++ .../widget/e_referral_requester_form.dart | 228 +++++++++ .../e_referral/widget/e_referral_stepper.dart | 72 +++ .../widget/search_e_referral_form.dart | 184 ++++++++ lib/widgets/attachment_options.dart | 2 +- lib/widgets/dropdown/dropdown_widget.dart | 30 +- 25 files changed, 2635 insertions(+), 469 deletions(-) create mode 100644 lib/features/hmg_services/models/req_models/check_activation_e_referral_req_model.dart create mode 100644 lib/features/hmg_services/models/req_models/create_e_referral_model.dart rename lib/features/hmg_services/models/{create_e_referral_model.dart => req_models/create_e_referral_req_model.dart} (100%) create mode 100644 lib/features/hmg_services/models/req_models/send_activation_code_ereferral_req_model.dart create mode 100644 lib/features/hmg_services/models/resq_models/get_all_cities_resp_model.dart create mode 100644 lib/features/hmg_services/models/resq_models/relationship_type_resp_mode.dart create mode 100644 lib/features/hmg_services/models/ui_models/e_referral_form_model.dart create mode 100644 lib/presentation/e_referral/e-referral_validator.dart create mode 100644 lib/presentation/e_referral/e_referral_form_manager.dart create mode 100644 lib/presentation/e_referral/new_e_referral.dart delete mode 100644 lib/presentation/e_referral/new_referral.dart create mode 100644 lib/presentation/e_referral/search_e_referral.dart create mode 100644 lib/presentation/e_referral/widget/e-referral_otp.dart create mode 100644 lib/presentation/e_referral/widget/e_referral_other_details.dart create mode 100644 lib/presentation/e_referral/widget/e_referral_patient_info.dart create mode 100644 lib/presentation/e_referral/widget/e_referral_requester_form.dart create mode 100644 lib/presentation/e_referral/widget/e_referral_stepper.dart create mode 100644 lib/presentation/e_referral/widget/search_e_referral_form.dart diff --git a/lib/core/api_consts.dart b/lib/core/api_consts.dart index a9e95ae..4cedda1 100644 --- a/lib/core/api_consts.dart +++ b/lib/core/api_consts.dart @@ -178,8 +178,12 @@ var DELETE_CHILD_REQUEST = 'Services/Community.svc/REST/DeleteBaby'; var GET_TABLE_REQUEST = 'Services/Community.svc/REST/CreateVaccinationTable'; ///BloodDenote +/// +/// use get all cities from the e-referral, already calling this api there don't use multiple same api calls var GET_CITIES_REQUEST = 'Services/Lists.svc/REST/GetAllCities'; - +/// +/// +/// ///BloodDetails var GET_BLOOD_REQUEST = 'services/PatientVarification.svc/REST/BloodDonation_GetBloodGroupDetails'; @@ -440,12 +444,7 @@ var H2O_UPDATE_USER_DETAIL = "Services/H2ORemainder.svc/REST/H2O_UpdateUserDetai var H2O_UNDO_USER_ACTIVITY = "Services/H2ORemainder.svc/REST/H2o_UndoUserActivity"; //E_Referral Services -var GET_ALL_RELATIONSHIP_TYPES = "Services/Patients.svc/REST/GetAllRelationshipTypes"; -var SEND_ACTIVATION_CODE_FOR_E_REFERRAL = 'Services/Authentication.svc/REST/SendActivationCodeForEReferral'; -var CHECK_ACTIVATION_CODE_FOR_E_REFERRAL = 'Services/Authentication.svc/REST/CheckActivationCodeForEReferral'; -var GET_ALL_CITIES = 'services/Lists.svc/rest/GetAllCities'; -var CREATE_E_REFERRAL = "Services/Patients.svc/REST/CreateEReferral"; -var GET_E_REFERRALS = "Services/Patients.svc/REST/GetEReferrals"; + // Encillary Orders @@ -849,6 +848,17 @@ class ApiConsts { var GET_ALL_CMC_ORDERS_RC = 'api/cmc/list'; var UPDATE_CMC_ORDER_RC = 'api/cmc/update'; + + //E-REFERRAL SERVICES + + static final getAllRelationshipTypes = "Services/Patients.svc/REST/GetAllRelationshipTypes"; + static final sendActivationCodeForEReferral = 'Services/Authentication.svc/REST/SendActivationCodeForEReferral'; + static final checkActivationCodeForEReferral = 'Services/Authentication.svc/REST/CheckActivationCodeForEReferral'; + static final getAllCities = 'services/Lists.svc/rest/GetAllCities'; + static final createEReferral = "Services/Patients.svc/REST/CreateEReferral"; + static final getEReferrals = "Services/Patients.svc/REST/GetEReferrals"; + + // ************ static values for Api **************** static final double appVersionID = 20.0; static final int appChannelId = 3; diff --git a/lib/core/utils/validation_utils.dart b/lib/core/utils/validation_utils.dart index 7e38300..abba447 100644 --- a/lib/core/utils/validation_utils.dart +++ b/lib/core/utils/validation_utils.dart @@ -101,8 +101,7 @@ class ValidationUtils { return regex.hasMatch(id); } - static bool validateUaeRegistration( - {String? name, GenderTypeEnum? gender, NationalityCountries? country, MaritalStatusTypeEnum? maritalStatus, required Function() onOkPress}) { + static bool validateUaeRegistration({String? name, GenderTypeEnum? gender, NationalityCountries? country, MaritalStatusTypeEnum? maritalStatus, required Function() onOkPress}) { if (name == null || name.isEmpty) { _dialogService.showExceptionBottomSheet(message: LocaleKeys.pleaseEnterAValidName.tr(), onOkPressed: onOkPress); return false; @@ -141,8 +140,7 @@ class ValidationUtils { return true; } - static bool isValidatedIdAndPhoneWithCountryValidation( - {String? nationalId, String? phoneNumber, required Function() onOkPress, CountryEnum? selectedCountry}) { + static bool isValidatedIdAndPhoneWithCountryValidation({String? nationalId, String? phoneNumber, required Function() onOkPress, CountryEnum? selectedCountry}) { bool isCorrectID = true; if (nationalId == null || nationalId.isEmpty) { _dialogService.showExceptionBottomSheet(message: LocaleKeys.pleaseEnterAnationalID.tr(), onOkPressed: onOkPress); @@ -171,4 +169,10 @@ class ValidationUtils { } return isCorrectID; } -} + + static bool isNullOrEmpty(String? value) { + return value == null || value + .trim() + .isEmpty; + } +} \ No newline at end of file diff --git a/lib/features/hmg_services/hmg_services_repo.dart b/lib/features/hmg_services/hmg_services_repo.dart index 39a6142..1115f18 100644 --- a/lib/features/hmg_services/hmg_services_repo.dart +++ b/lib/features/hmg_services/hmg_services_repo.dart @@ -5,10 +5,17 @@ import 'package:hmg_patient_app_new/core/api/api_client.dart'; import 'package:hmg_patient_app_new/core/api_consts.dart'; import 'package:hmg_patient_app_new/core/common_models/generic_api_model.dart'; import 'package:hmg_patient_app_new/core/exceptions/api_failure.dart'; +import 'package:hmg_patient_app_new/features/hmg_services/models/req_models/check_activation_e_referral_req_model.dart'; import 'package:hmg_patient_app_new/features/hmg_services/models/req_models/order_update_req_model.dart'; +import 'package:hmg_patient_app_new/features/hmg_services/models/resq_models/get_all_cities_resp_model.dart'; import 'package:hmg_patient_app_new/features/hmg_services/models/resq_models/get_cmc_all_orders_resp_model.dart'; import 'package:hmg_patient_app_new/features/hmg_services/models/resq_models/get_cmc_services_resp_model.dart'; import 'package:hmg_patient_app_new/services/logger_service.dart'; +import 'package:provider/provider.dart'; + +import 'models/req_models/create_e_referral_model.dart'; +import 'models/req_models/send_activation_code_ereferral_req_model.dart'; +import 'models/resq_models/relationship_type_resp_mode.dart'; abstract class HmgServicesRepo { Future>>> getAllCmcOrders(); @@ -16,6 +23,17 @@ abstract class HmgServicesRepo { Future>> updateCmcPresOrder(OrderUpdateRequestModel requestModel); Future>>> getAllCmcServices({required int patientID}); + + Future>>> getRelationshipTypes(); + + Future>>> getAllCities(); + + Future>> sendEReferralActivationCode(SendActivationCodeForEReferralRequestModel requestModel); + + Future>> checkEReferralActivationCode(CheckActivationCodeForEReferralRequestModel requestModel); + + Future>> createEReferral(CreateEReferralRequestModel requestModel); + } class HmgServicesRepoImp implements HmgServicesRepo { @@ -175,4 +193,224 @@ class HmgServicesRepoImp implements HmgServicesRepo { return Left(UnknownFailure(e.toString())); } } + + + /*e-referral functions*/ + + + @override + Future>>> getRelationshipTypes() async { + Map requestBody = {}; + + try { + GenericApiModel>? apiResponse; + Failure? failure; + + await apiClient.post( + ApiConsts.getAllRelationshipTypes, + body: requestBody, + onFailure: (error, statusCode, {messageStatus, failureType}) { + failure = failureType; + loggerService.logError("EReferral Services API Failed: $error, Status: $statusCode"); + }, + onSuccess: (response, statusCode, {messageStatus, errorMessage}) { + try { + List relationshipList = []; + + if (response['List_EReferralResult'] != null && response['List_EReferralResult'] is List) { + final servicesList = response['List_EReferralResult'] as List; + + for (var serviceJson in servicesList) { + if (serviceJson is Map) { + relationshipList.add(GetAllRelationshipTypeResponseModel.fromJson(serviceJson)); + } + } + } + + apiResponse = GenericApiModel>( + messageStatus: messageStatus, + statusCode: statusCode, + errorMessage: errorMessage, + data: relationshipList, + ); + } catch (e) { + loggerService.logError("Error parsing E-Referral services: ${e.toString()}"); + failure = DataParsingFailure(e.toString()); + } + }, + ); + + if (failure != null) return Left(failure!); + if (apiResponse == null) return Left(ServerFailure("Unknown error")); + return Right(apiResponse!); + } catch (e) { + log("Unknown error in getAllCmcServices: ${e.toString()}"); + return Left(UnknownFailure(e.toString())); + } + } + + @override + Future>>> getAllCities() async { + Map requestBody = {}; + + try { + GenericApiModel>? apiResponse; + Failure? failure; + + await apiClient.post( + ApiConsts.getAllCities, + body: requestBody, + onFailure: (error, statusCode, {messageStatus, failureType}) { + failure = failureType; + loggerService.logError("EReferral Services API Failed: $error, Status: $statusCode"); + }, + onSuccess: (response, statusCode, {messageStatus, errorMessage}) { + try { + List citiesList = []; + + if (response['ListCities'] != null && response['ListCities'] is List) { + final servicesList = response['ListCities'] as List; + + for (var serviceJson in servicesList) { + if (serviceJson is Map) { + citiesList.add(GetAllCitiesResponseModel.fromJson(serviceJson)); + } + } + } + + apiResponse = GenericApiModel>( + messageStatus: messageStatus, + statusCode: statusCode, + errorMessage: errorMessage, + data: citiesList, + ); + } catch (e) { + loggerService.logError("Error parsing E-Referral services: ${e.toString()}"); + failure = DataParsingFailure(e.toString()); + } + }, + ); + + if (failure != null) return Left(failure!); + if (apiResponse == null) return Left(ServerFailure("Unknown error")); + return Right(apiResponse!); + } catch (e) { + log("Unknown error in getAllCmcServices: ${e.toString()}"); + return Left(UnknownFailure(e.toString())); + } + } + + + @override + Future>> sendEReferralActivationCode(SendActivationCodeForEReferralRequestModel requestModel) async { + GenericApiModel? apiResponse; + try { + + Failure? failure; + await apiClient.post( + ApiConsts.sendActivationCodeForEReferral, + body: requestModel.toJson(), + onFailure: (error, statusCode, {messageStatus, failureType}) { + failure = failureType; + loggerService.logError("EReferral Services API Failed: $error, Status: $statusCode"); + }, + onSuccess: (response, statusCode, {messageStatus, errorMessage}) { + try { + + + + apiResponse = GenericApiModel( + messageStatus: messageStatus, + statusCode: statusCode, + errorMessage: errorMessage, + data: response['LogInTokenID'] as String, + ); + } catch (e) { + loggerService.logError("Error parsing E-Referral services: ${e.toString()}"); + failure = DataParsingFailure(e.toString()); + } + }, + ); + + if (failure != null) return Left(failure!); + if (apiResponse == null) return Left(ServerFailure("Unknown error")); + return Right(apiResponse!); + } catch (e) { + log("Unknown error in getAllCmcServices: ${e.toString()}"); + return Left(UnknownFailure(e.toString())); + } + } + + @override + Future>> createEReferral(CreateEReferralRequestModel requestModel) async { + GenericApiModel? apiResponse; + try { + Failure? failure; + await apiClient.post( + ApiConsts.createEReferral, + body: requestModel.toJson(), + onFailure: (error, statusCode, {messageStatus, failureType}) { + failure = failureType; + loggerService.logError("EReferral Services API Failed: $error, Status: $statusCode"); + }, + onSuccess: (response, statusCode, {messageStatus, errorMessage}) { + try { + apiResponse = GenericApiModel( + messageStatus: messageStatus, + statusCode: statusCode, + errorMessage: errorMessage, + data: response['ReferralNumber'].toString(), + ); + } catch (e) { + loggerService.logError("Error parsing E-Referral services: ${e.toString()}"); + failure = DataParsingFailure(e.toString()); + } + }, + ); + + if (failure != null) return Left(failure!); + if (apiResponse == null) return Left(ServerFailure("Unknown error")); + return Right(apiResponse!); + } catch (e) { + log("Unknown error in getAllCmcServices: ${e.toString()}"); + return Left(UnknownFailure(e.toString())); + } + } + + + @override + Future>> checkEReferralActivationCode(CheckActivationCodeForEReferralRequestModel requestModel) async { + GenericApiModel? apiResponse; + try { + Failure? failure; + await apiClient.post( + ApiConsts.checkActivationCodeForEReferral, + body: requestModel.toJson(), + onFailure: (error, statusCode, {messageStatus, failureType}) { + failure = failureType; + loggerService.logError("EReferral Services API Failed: $error, Status: $statusCode"); + }, + onSuccess: (response, statusCode, {messageStatus, errorMessage}) { + try { + apiResponse = GenericApiModel( + messageStatus: messageStatus, + statusCode: statusCode, + errorMessage: errorMessage, + data: response['IsAuthenticated'].toString(), + ); + } catch (e) { + loggerService.logError("Error parsing E-Referral services: ${e.toString()}"); + failure = DataParsingFailure(e.toString()); + } + }, + ); + + if (failure != null) return Left(failure!); + if (apiResponse == null) return Left(ServerFailure("Unknown error")); + return Right(apiResponse!); + } catch (e) { + log("Unknown error in getAllCmcServices: ${e.toString()}"); + return Left(UnknownFailure(e.toString())); + } + } } diff --git a/lib/features/hmg_services/hmg_services_view_model.dart b/lib/features/hmg_services/hmg_services_view_model.dart index 84e3bb4..5dd5482 100644 --- a/lib/features/hmg_services/hmg_services_view_model.dart +++ b/lib/features/hmg_services/hmg_services_view_model.dart @@ -1,10 +1,17 @@ import 'package:flutter/material.dart'; +import 'package:hmg_patient_app_new/core/common_models/generic_api_model.dart'; import 'package:hmg_patient_app_new/features/hmg_services/hmg_services_repo.dart'; +import 'package:hmg_patient_app_new/features/hmg_services/models/req_models/create_e_referral_model.dart'; import 'package:hmg_patient_app_new/features/hmg_services/models/req_models/order_update_req_model.dart'; +import 'package:hmg_patient_app_new/features/hmg_services/models/req_models/send_activation_code_ereferral_req_model.dart'; +import 'package:hmg_patient_app_new/features/hmg_services/models/resq_models/get_all_cities_resp_model.dart'; import 'package:hmg_patient_app_new/features/hmg_services/models/resq_models/get_cmc_all_orders_resp_model.dart'; import 'package:hmg_patient_app_new/features/hmg_services/models/resq_models/get_cmc_services_resp_model.dart'; import 'package:hmg_patient_app_new/services/error_handler_service.dart'; +import 'models/req_models/check_activation_e_referral_req_model.dart'; +import 'models/resq_models/relationship_type_resp_mode.dart'; + class HmgServicesViewModel extends ChangeNotifier { final HmgServicesRepo hmgServicesRepo; final ErrorHandlerService errorHandlerService; @@ -18,6 +25,10 @@ class HmgServicesViewModel extends ChangeNotifier { List cmcOrdersList = []; List cmcServicesList = []; + + List relationTypes =[]; + List getAllCitiesList =[]; + Future getOrdersList() async { cmcOrdersList.clear(); isCmcOrdersLoading = true; @@ -134,4 +145,182 @@ class HmgServicesViewModel extends ChangeNotifier { return success; } + + /*e-referral functions*/ + + Future getRelationshipType({ + Function(dynamic)? onSuccess, + Function(String)? onError, + }) async { + notifyListeners(); + final result = await hmgServicesRepo.getRelationshipTypes(); + + result.fold( + (failure) async { + + notifyListeners(); + await errorHandlerService.handleError(failure: failure); + if (onError != null) { + onError(failure.toString()); + } + }, + (apiResponse) { + + if (apiResponse.messageStatus == 1) { + relationTypes = apiResponse.data ?? []; + notifyListeners(); + if (onSuccess != null) { + onSuccess(apiResponse); + } + } else { + notifyListeners(); + if (onError != null) { + onError(apiResponse.errorMessage ?? 'Unknown error'); + } + } + }, + ); + } + + + Future getAllCities({ + Function(dynamic)? onSuccess, + Function(String)? onError, + }) async { + notifyListeners(); + final result = await hmgServicesRepo.getAllCities(); + + result.fold( + (failure) async { + + notifyListeners(); + await errorHandlerService.handleError(failure: failure); + if (onError != null) { + onError(failure.toString()); + } + }, + (apiResponse) { + + if (apiResponse.messageStatus == 1) { + getAllCitiesList = apiResponse.data ?? []; + notifyListeners(); + if (onSuccess != null) { + onSuccess(apiResponse); + } + } else { + notifyListeners(); + if (onError != null) { + onError(apiResponse.errorMessage ?? 'Unknown error'); + } + } + }, + ); + } + + Future eReferralSendActivationCode({ + required SendActivationCodeForEReferralRequestModel requestModel, + Function(GenericApiModel)? onSuccess, + Function(String)? onError, + }) async { + + notifyListeners(); + + final result = await hmgServicesRepo.sendEReferralActivationCode(requestModel); + + result.fold( + (failure) async { + notifyListeners(); + await errorHandlerService.handleError(failure: failure); + if (onError != null) { + onError(failure.toString()); + } + }, + (apiResponse) { + if (apiResponse.messageStatus == 1) { + + notifyListeners(); + if (onSuccess != null) { + onSuccess(apiResponse); + } + } else { + notifyListeners(); + if (onError != null) { + onError(apiResponse.errorMessage ?? 'Unknown error'); + } + } + }, + ); + } + + Future checkEReferralActivationCode({ + required CheckActivationCodeForEReferralRequestModel requestModel, + Function(GenericApiModel)? onSuccess, + Function(String)? onError, + }) async { + + notifyListeners(); + + final result = await hmgServicesRepo.checkEReferralActivationCode(requestModel); + + result.fold( + (failure) async { + notifyListeners(); + await errorHandlerService.handleError(failure: failure); + if (onError != null) { + onError(failure.toString()); + } + }, + (apiResponse) { + if (apiResponse.messageStatus == 1) { + + notifyListeners(); + if (onSuccess != null) { + onSuccess(apiResponse); + } + } else { + notifyListeners(); + if (onError != null) { + onError(apiResponse.errorMessage ?? 'Unknown error'); + } + } + }, + ); + } + + + Future createEReferral({ + required CreateEReferralRequestModel requestModel, + Function(GenericApiModel)? onSuccess, + Function(String)? onError, + }) async { + + notifyListeners(); + + final result = await hmgServicesRepo.createEReferral(requestModel); + + result.fold( + (failure) async { + notifyListeners(); + await errorHandlerService.handleError(failure: failure); + if (onError != null) { + onError(failure.toString()); + } + }, + (apiResponse) { + if (apiResponse.messageStatus == 1) { + + notifyListeners(); + if (onSuccess != null) { + onSuccess(apiResponse); + } + } else { + notifyListeners(); + if (onError != null) { + onError(apiResponse.errorMessage ?? 'Unknown error'); + } + } + }, + ); + } + } diff --git a/lib/features/hmg_services/models/req_models/check_activation_e_referral_req_model.dart b/lib/features/hmg_services/models/req_models/check_activation_e_referral_req_model.dart new file mode 100644 index 0000000..a356616 --- /dev/null +++ b/lib/features/hmg_services/models/req_models/check_activation_e_referral_req_model.dart @@ -0,0 +1,57 @@ +class CheckActivationCodeForEReferralRequestModel { + String? logInTokenID; + String? activationCode; + double? versionID; + int? channel; + int? languageID; + String? iPAdress; + String? generalid; + int? patientOutSA; + dynamic sessionID; + bool? isDentalAllowedBackend; + int? deviceTypeID; + + CheckActivationCodeForEReferralRequestModel( + {this.logInTokenID, + this.activationCode, + this.versionID, + this.channel, + this.languageID, + this.iPAdress, + this.generalid, + this.patientOutSA, + this.sessionID, + this.isDentalAllowedBackend, + this.deviceTypeID}); + + CheckActivationCodeForEReferralRequestModel.fromJson( + Map json) { + logInTokenID = json['LogInTokenID']; + activationCode = json['activationCode']; + versionID = json['VersionID']; + channel = json['Channel']; + languageID = json['LanguageID']; + iPAdress = json['IPAdress']; + generalid = json['generalid']; + patientOutSA = json['PatientOutSA']; + sessionID = json['SessionID']; + isDentalAllowedBackend = json['isDentalAllowedBackend']; + deviceTypeID = json['DeviceTypeID']; + } + + Map toJson() { + final Map data = new Map(); + data['LogInTokenID'] = this.logInTokenID; + data['activationCode'] = this.activationCode; + data['VersionID'] = this.versionID; + data['Channel'] = this.channel; + data['LanguageID'] = this.languageID; + data['IPAdress'] = this.iPAdress; + data['generalid'] = this.generalid; + data['PatientOutSA'] = this.patientOutSA; + data['SessionID'] = this.sessionID; + data['isDentalAllowedBackend'] = this.isDentalAllowedBackend; + data['DeviceTypeID'] = this.deviceTypeID; + return data; + } +} diff --git a/lib/features/hmg_services/models/req_models/create_e_referral_model.dart b/lib/features/hmg_services/models/req_models/create_e_referral_model.dart new file mode 100644 index 0000000..1b351fd --- /dev/null +++ b/lib/features/hmg_services/models/req_models/create_e_referral_model.dart @@ -0,0 +1,155 @@ +class CreateEReferralRequestModel { + bool? isInsuredPatient; + String? cityCode; + String? cityName; + String? requesterName; + String? requesterContactNo; + int? requesterRelationship; + String? otherRelationship; + String? fullName; + int? identificationNo; + String? patientMobileNumber; + int? preferredBranchCode; + String? preferredBranchName; + List? medicalReportAttachment; + dynamic insuranceCardAttachment; + double? versionID; + int? channel; + int? languageID; + String? iPAdress; + String? generalid; + int? patientOutSA; + String? sessionID; + bool? isDentalAllowedBackend; + int? deviceTypeID; + int? patientID; + String? tokenID; + int? patientTypeID; + int? patientType; + + CreateEReferralRequestModel( + {this.isInsuredPatient, + this.cityCode, + this.cityName, + this.requesterName, + this.requesterContactNo, + this.requesterRelationship, + this.otherRelationship, + this.fullName, + this.identificationNo, + this.patientMobileNumber, + this.preferredBranchCode, + this.preferredBranchName, + this.medicalReportAttachment, + this.insuranceCardAttachment, + this.versionID, + this.channel, + this.languageID, + this.iPAdress, + this.generalid, + this.patientOutSA, + this.sessionID, + this.isDentalAllowedBackend, + this.deviceTypeID, + this.patientID, + this.tokenID, + this.patientTypeID, + this.patientType}); + + CreateEReferralRequestModel.fromJson(Map json) { + isInsuredPatient = json['IsInsuredPatient']; + cityCode = json['CityCode']; + cityName = json['CityName']; + requesterName = json['RequesterName']; + requesterContactNo = json['RequesterContactNo']; + requesterRelationship = json['RequesterRelationship']; + otherRelationship = json['OtherRelationship']; + fullName = json['FullName']; + identificationNo = json['IdentificationNo']; + patientMobileNumber = json['PatientMobileNumber']; + preferredBranchCode = json['PreferredBranchCode']; + preferredBranchName = json['PreferredBranchName']; + if (json['MedicalReportAttachment'] != null) { + medicalReportAttachment = []; + json['MedicalReportAttachment'].forEach((v) { + medicalReportAttachment!.add(EReferralAttachment.fromJson(v)); + }); + } + insuranceCardAttachment = json['InsuranceCardAttachment'] != null ? EReferralAttachment.fromJson(json['InsuranceCardAttachment']) : null; + versionID = json['VersionID']; + channel = json['Channel']; + languageID = json['LanguageID']; + iPAdress = json['IPAdress']; + generalid = json['generalid']; + patientOutSA = json['PatientOutSA']; + sessionID = json['SessionID']; + isDentalAllowedBackend = json['isDentalAllowedBackend']; + deviceTypeID = json['DeviceTypeID']; + patientID = json['PatientID']; + tokenID = json['TokenID']; + patientTypeID = json['PatientTypeID']; + patientType = json['PatientType']; + } + + Map toJson() { + final Map data = new Map(); + data['IsInsuredPatient'] = this.isInsuredPatient; + data['CityCode'] = this.cityCode; + data['CityName'] = this.cityName; + data['RequesterName'] = this.requesterName; + data['RequesterContactNo'] = this.requesterContactNo; + data['RequesterRelationship'] = this.requesterRelationship; + data['OtherRelationship'] = this.otherRelationship; + data['FullName'] = this.fullName; + data['IdentificationNo'] = this.identificationNo; + data['PatientMobileNumber'] = this.patientMobileNumber; + data['PreferredBranchCode'] = this.preferredBranchCode; + data['PreferredBranchName'] = this.preferredBranchName; + if (this.medicalReportAttachment != null) { + // FIXED: Use map() to convert each item to JSON, then convert to list + data['MedicalReportAttachment'] = this.medicalReportAttachment!.map((v) => v.toJson()).toList(); + } + if (this.insuranceCardAttachment == null) { + data['InsuranceCardAttachment'] = {}; + } else if (this.insuranceCardAttachment is EReferralAttachment) { + // FIXED: Check if it's an EReferralAttachment before calling toJson() + data['InsuranceCardAttachment'] = (this.insuranceCardAttachment as EReferralAttachment).toJson(); + } else { + // If it's something else, assign directly + data['InsuranceCardAttachment'] = this.insuranceCardAttachment; + } + data['VersionID'] = this.versionID; + data['Channel'] = this.channel; + data['LanguageID'] = this.languageID; + data['IPAdress'] = this.iPAdress; + data['generalid'] = this.generalid; + data['PatientOutSA'] = this.patientOutSA; + data['SessionID'] = this.sessionID; + data['isDentalAllowedBackend'] = this.isDentalAllowedBackend; + data['DeviceTypeID'] = this.deviceTypeID; + data['PatientID'] = this.patientID; + data['TokenID'] = this.tokenID; + data['PatientTypeID'] = this.patientTypeID; + data['PatientType'] = this.patientType; + return data; + } +} + +class EReferralAttachment { + String? fileName; + String? base64String; + + EReferralAttachment({this.fileName, this.base64String}); + + EReferralAttachment.fromJson(Map json) { + fileName = json['FileName']; + base64String = json['Base64String']; + } + + Map toJson() { + final Map data = new Map(); + data['FileName'] = this.fileName; + data['Base64String'] = this.base64String; + return data; + } +} \ No newline at end of file diff --git a/lib/features/hmg_services/models/create_e_referral_model.dart b/lib/features/hmg_services/models/req_models/create_e_referral_req_model.dart similarity index 100% rename from lib/features/hmg_services/models/create_e_referral_model.dart rename to lib/features/hmg_services/models/req_models/create_e_referral_req_model.dart diff --git a/lib/features/hmg_services/models/req_models/send_activation_code_ereferral_req_model.dart b/lib/features/hmg_services/models/req_models/send_activation_code_ereferral_req_model.dart new file mode 100644 index 0000000..0380de8 --- /dev/null +++ b/lib/features/hmg_services/models/req_models/send_activation_code_ereferral_req_model.dart @@ -0,0 +1,56 @@ +class SendActivationCodeForEReferralRequestModel { + int? patientMobileNumber; + String? zipCode; + double? versionID; + int? channel; + int? languageID; + String? iPAdress; + String? generalid; + int? patientOutSA; + dynamic sessionID; + bool? isDentalAllowedBackend; + int? deviceTypeID; + + SendActivationCodeForEReferralRequestModel( + {this.patientMobileNumber, + this.zipCode, + this.versionID, + this.channel, + this.languageID, + this.iPAdress, + this.generalid, + this.patientOutSA, + this.sessionID, + this.isDentalAllowedBackend, + this.deviceTypeID}); + + SendActivationCodeForEReferralRequestModel.fromJson(Map json) { + patientMobileNumber = json['PatientMobileNumber']; + zipCode = json['ZipCode']; + versionID = json['VersionID']; + channel = json['Channel']; + languageID = json['LanguageID']; + iPAdress = json['IPAdress']; + generalid = json['generalid']; + patientOutSA = json['PatientOutSA']; + sessionID = json['SessionID']; + isDentalAllowedBackend = json['isDentalAllowedBackend']; + deviceTypeID = json['DeviceTypeID']; + } + + Map toJson() { + final Map data = new Map(); + data['PatientMobileNumber'] = this.patientMobileNumber; + data['ZipCode'] = this.zipCode; + data['VersionID'] = this.versionID; + data['Channel'] = this.channel; + data['LanguageID'] = this.languageID; + data['IPAdress'] = this.iPAdress; + data['generalid'] = this.generalid; + data['PatientOutSA'] = this.patientOutSA; + data['SessionID'] = this.sessionID; + data['isDentalAllowedBackend'] = this.isDentalAllowedBackend; + data['DeviceTypeID'] = this.deviceTypeID; + return data; + } +} diff --git a/lib/features/hmg_services/models/resq_models/get_all_cities_resp_model.dart b/lib/features/hmg_services/models/resq_models/get_all_cities_resp_model.dart new file mode 100644 index 0000000..efc3d58 --- /dev/null +++ b/lib/features/hmg_services/models/resq_models/get_all_cities_resp_model.dart @@ -0,0 +1,21 @@ +class GetAllCitiesResponseModel { + int? iD; + String? description; + String? descriptionN; + + GetAllCitiesResponseModel({this.iD, this.description, this.descriptionN}); + + GetAllCitiesResponseModel.fromJson(Map json) { + iD = json['ID']; + description = json['Description']; + descriptionN = json['DescriptionN']; + } + + Map toJson() { + final Map data = new Map(); + data['ID'] = this.iD; + data['Description'] = this.description; + data['DescriptionN'] = this.descriptionN; + return data; + } +} diff --git a/lib/features/hmg_services/models/resq_models/relationship_type_resp_mode.dart b/lib/features/hmg_services/models/resq_models/relationship_type_resp_mode.dart new file mode 100644 index 0000000..237017d --- /dev/null +++ b/lib/features/hmg_services/models/resq_models/relationship_type_resp_mode.dart @@ -0,0 +1,25 @@ +class GetAllRelationshipTypeResponseModel { + int? iD; + String? text; + String? textAr; + String? textEn; + + GetAllRelationshipTypeResponseModel( + {this.iD, this.text, this.textAr, this.textEn}); + + GetAllRelationshipTypeResponseModel.fromJson(Map json) { + iD = json['ID']; + text = json['Text']; + textAr = json['Text_Ar']; + textEn = json['Text_En']; + } + + Map toJson() { + final Map data = new Map(); + data['ID'] = this.iD; + data['Text'] = this.text; + data['Text_Ar'] = this.textAr; + data['Text_En'] = this.textEn; + return data; + } +} diff --git a/lib/features/hmg_services/models/ui_models/e_referral_form_model.dart b/lib/features/hmg_services/models/ui_models/e_referral_form_model.dart new file mode 100644 index 0000000..fded059 --- /dev/null +++ b/lib/features/hmg_services/models/ui_models/e_referral_form_model.dart @@ -0,0 +1,42 @@ +// models/referral_models.dart +import 'package:hmg_patient_app_new/core/common_models/nationality_country_model.dart'; +import 'package:hmg_patient_app_new/core/enums.dart'; +import 'package:hmg_patient_app_new/features/hmg_services/models/req_models/create_e_referral_model.dart'; +import 'package:hmg_patient_app_new/features/hmg_services/models/resq_models/get_all_cities_resp_model.dart'; +import 'package:hmg_patient_app_new/features/hmg_services/models/resq_models/relationship_type_resp_mode.dart'; +import 'package:hmg_patient_app_new/features/my_appointments/models/resp_models/hospital_model.dart'; + +class ReferralFormData { + String requesterName = ''; + String requesterPhone = ''; + CountryEnum countryEnum = CountryEnum.saudiArabia; + GetAllRelationshipTypeResponseModel? relationship; + String otherRelationshipName = ''; + + String patientIdentification = ''; + String patientName = ''; + String patientPhone = ''; + GetAllCitiesResponseModel? patientCity; + + List medicalReportImages = []; + HospitalsModel? branch; + bool isPatientInsured = false; + List insuredPatientImages = []; +} + +class FormValidationErrors { + String? requesterName; + String? requesterPhone; + String? relationship; + String? otherRelationshipName; + + String? patientIdentification; + String? patientName; + String? patientCity; + String? patientPhone; + + + String? medicalReport; + String? branch; + String? insuredDocument; +} \ No newline at end of file diff --git a/lib/presentation/e_referral/e-referral_validator.dart b/lib/presentation/e_referral/e-referral_validator.dart new file mode 100644 index 0000000..78efb49 --- /dev/null +++ b/lib/presentation/e_referral/e-referral_validator.dart @@ -0,0 +1,91 @@ +// utils/referral_validator.dart +import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; +import 'package:hmg_patient_app_new/features/hmg_services/models/ui_models/e_referral_form_model.dart'; + +class ReferralValidator { + static FormValidationErrors validateStep1(ReferralFormData formData) { + final errors = FormValidationErrors(); + + if (formData.requesterName.trim().isEmpty) { + errors.requesterName = 'Referral requester name is required'; + } + + if (formData.requesterPhone.trim().isEmpty) { + errors.requesterPhone = 'Phone number is required'; + } else if (formData.countryEnum.countryCode == '966' && + !_isValidSaudiPhone(formData.requesterPhone)) { + errors.requesterPhone = 'Please enter a valid Saudi phone number (5xxxxxxxx)'; + } + + if (formData.relationship == null) { + errors.relationship = 'Please select a relationship'; + } + + if (formData.relationship != null && + formData.relationship?.iD == 5 && + formData.otherRelationshipName.trim().isEmpty) { + errors.otherRelationshipName = 'Other relationship name is required'; + } + + return errors; + } + + static FormValidationErrors validateStep2(ReferralFormData formData) { + final errors = FormValidationErrors(); + + if (formData.patientIdentification.trim().isEmpty) { + errors.patientIdentification = 'Identification number is required'; + } + + if (formData.patientName.trim().isEmpty) { + errors.patientName = 'Patient name is required'; + } + + if (formData.patientPhone == null) { + errors.patientPhone = 'Please Enter patient phone number'; + } + + if (formData.patientCity == null) { + errors.patientCity = 'Please select patient city'; + } + + return errors; + } + + static FormValidationErrors validateStep3(ReferralFormData formData) { + final errors = FormValidationErrors(); + + if (formData.medicalReportImages.isEmpty) { + errors.medicalReport = 'At least one medical report is required'; + } + + if (formData.branch == null) { + errors.branch = 'Please select a branch'; + } + + if (formData.isPatientInsured && formData.insuredPatientImages.isEmpty) { + errors.insuredDocument = 'Insurance document is required for insured patients'; + } + + return errors; + } + + static bool _isValidSaudiPhone(String phone) { + final regex = RegExp(r'^5\d{8}$'); + return regex.hasMatch(phone); + } + + static bool hasErrors(FormValidationErrors errors) { + return errors.requesterName != null || + errors.requesterPhone != null || + errors.relationship != null || + errors.otherRelationshipName != null || + errors.patientIdentification != null || + errors.patientName != null || + errors.patientPhone != null || + errors.patientCity != null || + errors.medicalReport != null || + errors.branch != null || + errors.insuredDocument != null; + } +} \ No newline at end of file diff --git a/lib/presentation/e_referral/e_referral_form_manager.dart b/lib/presentation/e_referral/e_referral_form_manager.dart new file mode 100644 index 0000000..a69a2fe --- /dev/null +++ b/lib/presentation/e_referral/e_referral_form_manager.dart @@ -0,0 +1,206 @@ +// managers/referral_form_manager.dart +import 'package:flutter/material.dart'; +import 'package:hmg_patient_app_new/core/common_models/nationality_country_model.dart'; +import 'package:hmg_patient_app_new/core/enums.dart'; +import 'package:hmg_patient_app_new/features/hmg_services/models/req_models/create_e_referral_model.dart'; +import 'package:hmg_patient_app_new/features/hmg_services/models/resq_models/get_all_cities_resp_model.dart'; +import 'package:hmg_patient_app_new/features/hmg_services/models/resq_models/relationship_type_resp_mode.dart'; +import 'package:hmg_patient_app_new/features/hmg_services/models/ui_models/e_referral_form_model.dart'; +import 'package:hmg_patient_app_new/features/my_appointments/models/resp_models/hospital_model.dart'; + + +class ReferralFormManager extends ChangeNotifier { + final ReferralFormData _formData = ReferralFormData(); + final FormValidationErrors _errors = FormValidationErrors(); + + ReferralFormData get formData => _formData; + FormValidationErrors get errors => _errors; + + // Field-specific update methods that don't notify listeners immediately + void updateRequesterName(String value) { + _formData.requesterName = value; + _clearError('requesterName'); + } + + void updateRequesterPhone(String value) { + _formData.requesterPhone = value; + _clearError('requesterPhone'); + } + + void updateCountryEnum(CountryEnum value) { + _formData.countryEnum = value; + } + + void updateRelationship(GetAllRelationshipTypeResponseModel? value) { + _formData.relationship = value; + _clearError('relationship'); + } + + void updateOtherRelationshipName(String value) { + _formData.otherRelationshipName = value; + _clearError('otherRelationshipName'); + } + + void updatePatientIdentification(String value) { + _formData.patientIdentification = value; + _clearError('patientIdentification'); + } + + void updatePatientName(String value) { + _formData.patientName = value; + _clearError('patientName'); + } + + void updatePatientPhone(String? value) { + _formData.patientPhone = value!; + _clearError('patientPhone'); + } + + void updatePatientCity(GetAllCitiesResponseModel? value) { + _formData.patientCity = value; + _clearError('patientCity'); + } + + void updateBranch(HospitalsModel? value) { + _formData.branch = value; + _clearError('branch'); + } + + void updateIsPatientInsured(bool value) { + _formData.isPatientInsured = value; + if (!value) { + _formData.insuredPatientImages.clear(); + } + _clearError('insuredDocument'); + } + + void addMedicalReport(EReferralAttachment attachment) { + _formData.medicalReportImages.add(attachment); + _clearError('medicalReport'); + } + + void removeMedicalReport(int index) { + if (index >= 0 && index < _formData.medicalReportImages.length) { + _formData.medicalReportImages.removeAt(index); + } + } + + void addInsuranceDocument(EReferralAttachment attachment) { + _formData.insuredPatientImages.add(attachment); + _clearError('insuredDocument'); + } + + void removeInsuranceDocument(int index) { + if (index >= 0 && index < _formData.insuredPatientImages.length) { + _formData.insuredPatientImages.removeAt(index); + } + } + + // Error management + void setErrors(FormValidationErrors newErrors) { + _errors.requesterName = newErrors.requesterName; + _errors.requesterPhone = newErrors.requesterPhone; + _errors.relationship = newErrors.relationship; + _errors.otherRelationshipName = newErrors.otherRelationshipName; + _errors.patientIdentification = newErrors.patientIdentification; + _errors.patientName = newErrors.patientName; + _errors.patientPhone = newErrors.patientPhone; + _errors.patientCity = newErrors.patientCity; + _errors.medicalReport = newErrors.medicalReport; + _errors.branch = newErrors.branch; + _errors.insuredDocument = newErrors.insuredDocument; + notifyListeners(); // Only notify when errors change + } + + void clearAllErrors() { + _errors.requesterName = null; + _errors.requesterPhone = null; + _errors.relationship = null; + _errors.otherRelationshipName = null; + _errors.patientIdentification = null; + _errors.patientName = null; + _errors.patientPhone = null; + _errors.patientCity = null; + _errors.medicalReport = null; + _errors.branch = null; + _errors.insuredDocument = null; + notifyListeners(); + } + + void _clearError(String field) { + bool shouldNotify = false; + + switch (field) { + case 'requesterName': + if (_errors.requesterName != null) { + _errors.requesterName = null; + shouldNotify = true; + } + break; + case 'requesterPhone': + if (_errors.requesterPhone != null) { + _errors.requesterPhone = null; + shouldNotify = true; + } + break; + case 'relationship': + if (_errors.relationship != null) { + _errors.relationship = null; + shouldNotify = true; + } + break; + case 'otherRelationshipName': + if (_errors.otherRelationshipName != null) { + _errors.otherRelationshipName = null; + shouldNotify = true; + } + break; + case 'patientIdentification': + if (_errors.patientIdentification != null) { + _errors.patientIdentification = null; + shouldNotify = true; + } + break; + case 'patientName': + if (_errors.patientName != null) { + _errors.patientName = null; + shouldNotify = true; + } + break; + case 'patientPhone': + if (_errors.patientPhone != null) { + _errors.patientPhone = null; + shouldNotify = true; + } + break; + case 'patientCity': + if (_errors.patientCity != null) { + _errors.patientCity = null; + shouldNotify = true; + } + break; + case 'medicalReport': + if (_errors.medicalReport != null) { + _errors.medicalReport = null; + shouldNotify = true; + } + break; + case 'branch': + if (_errors.branch != null) { + _errors.branch = null; + shouldNotify = true; + } + break; + case 'insuredDocument': + if (_errors.insuredDocument != null) { + _errors.insuredDocument = null; + shouldNotify = true; + } + break; + } + + if (shouldNotify) { + notifyListeners(); + } + } +} \ No newline at end of file diff --git a/lib/presentation/e_referral/e_referral_page_home.dart b/lib/presentation/e_referral/e_referral_page_home.dart index 3eb1255..d41defb 100644 --- a/lib/presentation/e_referral/e_referral_page_home.dart +++ b/lib/presentation/e_referral/e_referral_page_home.dart @@ -1,15 +1,13 @@ import 'dart:ui'; import 'package:easy_localization/easy_localization.dart'; -import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; -import 'package:hmg_patient_app_new/core/app_assets.dart'; import 'package:hmg_patient_app_new/core/app_export.dart'; import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; import 'package:hmg_patient_app_new/features/contact_us/contact_us_view_model.dart'; -import 'package:hmg_patient_app_new/features/prescriptions/prescriptions_view_model.dart'; import 'package:hmg_patient_app_new/generated/locale_keys.g.dart'; -import 'package:hmg_patient_app_new/presentation/e_referral/new_referral.dart'; +import 'package:hmg_patient_app_new/presentation/e_referral/new_e_referral.dart'; +import 'package:hmg_patient_app_new/presentation/e_referral/search_e_referral.dart'; import 'package:hmg_patient_app_new/theme/colors.dart'; import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart'; import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart'; @@ -35,7 +33,9 @@ class _EReferralPageState extends State { } bool isNewReferral = true; - VoidCallback? onNextStep; + VoidCallback? onNextStep; + int _currentPageIndex = 0; + int activeTabIndex = 0; @override Widget build(BuildContext context) { return Scaffold( @@ -47,34 +47,53 @@ class _EReferralPageState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ SizedBox(height: 16.h), - contactUsVM.isHMGLocationsListLoading - ? SizedBox.shrink() - : CustomTabBar( + CustomTabBar( activeTextColor: AppColors.primaryRedColor, activeBackgroundColor: AppColors.primaryRedColor.withValues(alpha: .1), tabs: [ CustomTabBarModel(null, "New Referral".needTranslation), CustomTabBarModel(null, "Search Referral".needTranslation), ], - onTabChange: (index) {}, + onTabChange: (index) { + activeTabIndex =index; + setState(() { + + }); + }, ).paddingSymmetrical(24.h, 0.h), SizedBox(height: 24.h), - NewReferralPage(onNextStep: (nextStep) { - WidgetsBinding.instance.addPostFrameCallback((_) { + activeTabIndex ==0 ? NewReferralPage( + onNextStep: (nextStep) { + WidgetsBinding.instance.addPostFrameCallback((_) { + setState(() { + onNextStep = nextStep; + }); + }); + }, + onStepChanged: (int value) { setState(() { - onNextStep = nextStep; - }); - }); - }) + _currentPageIndex = value; + }); + }, + ) : + SearchEReferralPage( + onNextStep: (onNextStep) { + WidgetsBinding.instance.addPostFrameCallback((_) { + setState(() { + onNextStep = onNextStep; + }); + }); + }, + ) ], ); }), ), bottomNavigationBar: Padding( - padding: EdgeInsets.all(16.h), + padding: EdgeInsets.all(20.h), child: CustomButton( - text: LocaleKeys.next.tr(), - onPressed:onNextStep ?? () {}, + text:activeTabIndex == 0 ? _currentPageIndex >= 2 ? LocaleKeys.submit.tr() : LocaleKeys.next.tr() : LocaleKeys.search.tr(), + onPressed: onNextStep ?? () {}, backgroundColor: AppColors.primaryRedColor, borderColor: AppColors.primaryRedColor, textColor: AppColors.whiteColor, diff --git a/lib/presentation/e_referral/new_e_referral.dart b/lib/presentation/e_referral/new_e_referral.dart new file mode 100644 index 0000000..ca96153 --- /dev/null +++ b/lib/presentation/e_referral/new_e_referral.dart @@ -0,0 +1,183 @@ + +import 'package:flutter/material.dart'; +import 'package:hmg_patient_app_new/features/authentication/authentication_view_model.dart'; +import 'package:hmg_patient_app_new/features/habib_wallet/habib_wallet_view_model.dart'; +import 'package:hmg_patient_app_new/features/hmg_services/hmg_services_view_model.dart'; +import 'package:hmg_patient_app_new/features/hmg_services/models/req_models/create_e_referral_model.dart'; +import 'package:hmg_patient_app_new/features/hmg_services/models/ui_models/e_referral_form_model.dart'; +import 'package:hmg_patient_app_new/presentation/e_referral/widget/e-referral_otp.dart'; +import 'package:hmg_patient_app_new/presentation/e_referral/widget/e_referral_other_details.dart'; +import 'package:hmg_patient_app_new/presentation/e_referral/widget/e_referral_patient_info.dart'; +import 'package:hmg_patient_app_new/presentation/e_referral/widget/e_referral_requester_form.dart'; +import 'package:hmg_patient_app_new/presentation/e_referral/widget/e_referral_stepper.dart'; +import 'package:provider/provider.dart'; +import 'e-referral_validator.dart'; +import 'e_referral_form_manager.dart'; + +class NewReferralPage extends StatefulWidget { + final Function(VoidCallback) onNextStep; + final Function(int) onStepChanged; + + const NewReferralPage({ + super.key, + required this.onNextStep, + required this.onStepChanged, + }); + + @override + State createState() => _NewReferralPageState(); +} + +class _NewReferralPageState extends State { + final PageController _pageController = PageController(); + final ReferralFormManager _formManager = ReferralFormManager(); // Use manager + int _currentStep = 0; + + final List _steps = [ + 'Requester Info', + 'Patient Information', + 'Other details' + ]; + + @override + void initState() { + super.initState(); + _loadData(); + widget.onNextStep(_handleNextStep); + } + + void _handleNextStep() { + switch (_currentStep) { + case 0: + if (_validateCurrentStep()) { + OTPService.openOTPScreen( + context: context, + phoneNumber: _formManager.formData.requesterPhone ?? '', + countryEnum: _formManager.formData.countryEnum, + onSuccess: _proceedToNextStep, + ); + } + break; + case 1: + if (_validateCurrentStep()) { + _proceedToNextStep(); + } + break; + case 2: + if (_validateCurrentStep()) { + _submitReferral(); + } + break; + } + } + + bool _validateCurrentStep() { + FormValidationErrors stepErrors; + + switch (_currentStep) { + case 0: + stepErrors = ReferralValidator.validateStep1(_formManager.formData); + break; + case 1: + stepErrors = ReferralValidator.validateStep2(_formManager.formData); + break; + case 2: + stepErrors = ReferralValidator.validateStep3(_formManager.formData); + break; + default: + stepErrors = FormValidationErrors(); + } + + // Update errors through manager + _formManager.setErrors(stepErrors); + + return !ReferralValidator.hasErrors(stepErrors); + } + + void _proceedToNextStep() { + _pageController.nextPage( + duration: const Duration(milliseconds: 300), + curve: Curves.easeInOut, + ); + setState(() { + _currentStep++; + }); + widget.onStepChanged(_currentStep); + } + + void _submitReferral() { + + CreateEReferralRequestModel createReferrralRequestModel = + CreateEReferralRequestModel( + isInsuredPatient: _formManager.formData.isPatientInsured, + cityCode: _formManager.formData.patientCity!.iD!.toString(), + cityName: _formManager.formData.patientCity!.description, + requesterName: _formManager.formData.requesterName, + requesterContactNo: _formManager.formData.requesterPhone, + requesterRelationship: _formManager.formData.relationship?.iD, + otherRelationship: _formManager.formData.relationship!.iD.toString(), + fullName: _formManager.formData.patientName, + identificationNo: int.tryParse(_formManager.formData!.patientIdentification ?? '0'), + patientMobileNumber: _formManager.formData.patientPhone, + preferredBranchCode: _formManager.formData.branch!.iD, + medicalReportAttachment: _formManager.formData.medicalReportImages, + insuranceCardAttachment: _formManager.formData.insuredPatientImages, + preferredBranchName: _formManager.formData.branch!.desciption + ); + + final hmgServicesVM = context.read(); + hmgServicesVM.createEReferral( + requestModel: createReferrralRequestModel, + onSuccess: (response) { + print("E-Referral submitted successfully"); + }, + onError: (errorMessage) { + // Handle error (e.g., show error message) + print(errorMessage); + }, + ); + + } + + void _loadData() { + final authVM = context.read(); + final habibWalletVM = context.read(); + final hmgServicesVM = context.read(); + + hmgServicesVM.getRelationshipType(); + authVM.loadCountriesData(); + hmgServicesVM.getAllCities(); + habibWalletVM.getProjectsList(); + } + + @override + Widget build(BuildContext context) { + return ChangeNotifierProvider.value( + value: _formManager, + child: SizedBox( + height: MediaQuery.of(context).size.height, + child: Column( + children: [ + const SizedBox(height: 8), + ProgressStepperWidget( + currentStep: _currentStep, + steps: _steps, + ), + Expanded( + child: PageView( + controller: _pageController, + physics: const NeverScrollableScrollPhysics(), + onPageChanged: (index) => setState(() => _currentStep = index), + children: [ + RequesterFormStep(), + PatientInformationStep(), + OtherDetailsStep(), + ], + ), + ), + ], + ), + ), + ); + } +} \ No newline at end of file diff --git a/lib/presentation/e_referral/new_referral.dart b/lib/presentation/e_referral/new_referral.dart deleted file mode 100644 index 73c4f5c..0000000 --- a/lib/presentation/e_referral/new_referral.dart +++ /dev/null @@ -1,432 +0,0 @@ -// dart -// File: lib/presentation/e_referral/new_referral_page.dart - -import 'dart:io'; - -import 'package:easy_localization/easy_localization.dart'; -import 'package:flutter/material.dart'; -import 'package:hmg_patient_app_new/core/app_assets.dart'; -import 'package:hmg_patient_app_new/core/app_export.dart'; -import 'package:hmg_patient_app_new/core/app_state.dart'; -import 'package:hmg_patient_app_new/core/common_models/nationality_country_model.dart'; -import 'package:hmg_patient_app_new/core/dependencies.dart'; -import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; -import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; -import 'package:hmg_patient_app_new/features/authentication/authentication_view_model.dart'; -import 'package:hmg_patient_app_new/features/hmg_services/models/create_e_referral_model.dart'; -import 'package:hmg_patient_app_new/generated/locale_keys.g.dart'; -import 'package:hmg_patient_app_new/theme/colors.dart'; -import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart'; -import 'package:hmg_patient_app_new/widgets/dropdown/dropdown_widget.dart'; -import 'package:hmg_patient_app_new/widgets/image_picker.dart'; -import 'package:hmg_patient_app_new/widgets/input_widget.dart'; -import 'package:provider/provider.dart'; - -class NewReferralPage extends StatefulWidget { - final Function(VoidCallback) onNextStep; - const NewReferralPage({super.key, required this.onNextStep}); - - @override - State createState() => NewReferralPageState(); -} - -class NewReferralPageState extends State { - final PageController _pageController = PageController(); - int pageIndex = 0; - int _tabIndex = 0; - bool isPatientInsured =false; - final TextEditingController _nameController = TextEditingController(); - final TextEditingController _phoneController = TextEditingController(); - String _country = 'Saudi Arabia'; - String? _relationship; - List medicalReportImages = []; - List insuredPatientImages = []; - void nextPressed() { - if (pageIndex < 2) { - _pageController.nextPage(duration: const Duration(milliseconds: 300), curve: Curves.easeInOut); - } else { - // submit logic - } - } - - @override - initState() { - super.initState(); - widget.onNextStep((){ - nextPressed(); - }); - - } - - Widget _progressStep({required String title, required bool active, bool showDivider = true}) { - final Color activeColor = active ? AppColors.primaryRedColor : Colors.grey.shade400; - return Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Row( - - children: [ - CircleAvatar( - radius: 13, - backgroundColor: active ? activeColor : Colors.grey.shade300, - child: Icon(Icons.check, size: 14, color: Colors.white), - ), - if (showDivider) - Padding( - padding: const EdgeInsets.symmetric(horizontal: 8.0), - child: Divider(thickness: 1), - ), - - ], - ), - const SizedBox(height: 6), - Text(title, style: const TextStyle(fontSize: 11, fontWeight: FontWeight.w600)), - const SizedBox(height: 6), - Container( - padding: const EdgeInsets.symmetric(horizontal: 6, vertical: 4), - decoration: BoxDecoration( - color: active ? activeColor.withOpacity(0.15) : Colors.grey.shade100, - borderRadius: BorderRadius.circular(6), - ), - child: Text(active ? 'Active' : 'Inactive', - style: TextStyle(fontSize: 9, color: active ? activeColor : Colors.grey)), - ), - ], - ), - ); - } - - Widget _requesterForm() { - return Padding( - padding: const EdgeInsets.symmetric(horizontal: 24.0), - child: ListView( - physics: const BouncingScrollPhysics(), - children: [ - const SizedBox(height: 12), - const Text('Referral requester information', - style: TextStyle(fontWeight: FontWeight.w700, fontSize: 16)).paddingSymmetrical(4.h, 0.h), - const SizedBox(height: 12), - TextInputWidget( - controller: _nameController, - padding: const EdgeInsets.symmetric(horizontal: 16.0), - hintText: 'Enter Referral Requester Name*', labelText: 'Requester Name', - ).paddingSymmetrical(0.h, 4.h), - - Selector? countriesList, NationalityCountries? selectedCountry, bool isArabic})>( - selector: (context, authViewModel) { - final appState = getIt.get(); - return ( - countriesList: authViewModel.countriesList, - selectedCountry: authViewModel.pickedCountryByUAEUser, - isArabic: appState.isArabic(), - ); - }, - shouldRebuild: (previous, next) => previous.countriesList != next.countriesList || previous.selectedCountry != next.selectedCountry || previous.isArabic != next.isArabic, - builder: (context, data, child) { - final authVM = context.read(); - return DropdownWidget( - labelText: LocaleKeys.country.tr(), - hintText:_country, - isEnable: true, - dropdownItems: (data.countriesList ?? []).map((e) => data.isArabic ? e.nameN ?? "" : e.name ?? "").toList(), - selectedValue: data.selectedCountry != null - ? data.isArabic - ? data.selectedCountry!.nameN ?? "" - : data.selectedCountry!.name ?? "" - : "", - onChange: authVM.onUAEUserCountrySelection, - hasSelectionCustomIcon: true, - labelColor: AppColors.textColor, - padding: const EdgeInsets.symmetric(vertical: 12, horizontal: 16), - selectionCustomIcon: AppAssets.arrow_down, - leadingIcon: AppAssets.globe, - ).withVerticalPadding(8); - }, - ).paddingSymmetrical(0.h, 4.h), - - TextInputWidget( - labelText: LocaleKeys.mobileNumber.tr(), - hintText: LocaleKeys.mobileNumber.tr(), - controller: null, - isEnable: true, - prefix: null, - isAllowLeadingIcon: true, - labelColor: AppColors.textColor, padding: const EdgeInsets.symmetric(horizontal: 16.0), - isReadOnly: true, - leadingIcon: AppAssets.call).paddingSymmetrical(0.h, 4.h), - - Selector? countriesList, NationalityCountries? selectedCountry, bool isArabic})>( - selector: (context, authViewModel) { - final appState = getIt.get(); - return ( - countriesList: authViewModel.countriesList, - selectedCountry: authViewModel.pickedCountryByUAEUser, - isArabic: appState.isArabic(), - ); - }, - shouldRebuild: (previous, next) => previous.countriesList != next.countriesList || previous.selectedCountry != next.selectedCountry || previous.isArabic != next.isArabic, - builder: (context, data, child) { - final authVM = context.read(); - return DropdownWidget( - labelText: "Relationship", - hintText: "Relationship*".needTranslation, - isEnable: true, - dropdownItems: (data.countriesList ?? []).map((e) => data.isArabic ? e.nameN ?? "" : e.name ?? "").toList(), - selectedValue: data.selectedCountry != null - ? data.isArabic - ? data.selectedCountry!.nameN ?? "" - : data.selectedCountry!.name ?? "" - : "", - onChange: authVM.onUAEUserCountrySelection, - hasSelectionCustomIcon: true, - labelColor: AppColors.textColor, - padding: const EdgeInsets.symmetric(vertical: 12, horizontal: 16), - selectionCustomIcon: AppAssets.arrow_down, - leadingIcon: AppAssets.globe, - ).withVerticalPadding(8); - }, - ).paddingSymmetrical(0.h, 4.h), - - const SizedBox(height: 120), - ], - ), - ); - } - - Widget _patientInformation(){ - return Padding( - padding: const EdgeInsets.symmetric(horizontal: 16.0), - child: ListView( - physics: const BouncingScrollPhysics(), - children: [ - const SizedBox(height: 12), - 'Patient information'.toText16(weight: FontWeight.bold).paddingSymmetrical(4.h, 0.h), - const SizedBox(height: 12), - TextInputWidget( - controller: _nameController, - padding: const EdgeInsets.symmetric(horizontal: 16.0), - hintText: 'Enter Identification Number*', labelText: 'Identification Number ', - ).paddingSymmetrical(0.h, 4.h), - - TextInputWidget( - controller: _nameController, - padding: const EdgeInsets.symmetric(horizontal: 16.0), - hintText: 'Patient Name*', labelText: 'Name', - ).paddingSymmetrical(0.h, 4.h), - - Selector? countriesList, NationalityCountries? selectedCountry, bool isArabic})>( - selector: (context, authViewModel) { - final appState = getIt.get(); - return ( - countriesList: authViewModel.countriesList, - selectedCountry: authViewModel.pickedCountryByUAEUser, - isArabic: appState.isArabic(), - ); - }, - shouldRebuild: (previous, next) => previous.countriesList != next.countriesList || previous.selectedCountry != next.selectedCountry || previous.isArabic != next.isArabic, - builder: (context, data, child) { - final authVM = context.read(); - return DropdownWidget( - labelText: LocaleKeys.country.tr(), - hintText:_country, - isEnable: true, - dropdownItems: (data.countriesList ?? []).map((e) => data.isArabic ? e.nameN ?? "" : e.name ?? "").toList(), - selectedValue: data.selectedCountry != null - ? data.isArabic - ? data.selectedCountry!.nameN ?? "" - : data.selectedCountry!.name ?? "" - : "", - onChange: authVM.onUAEUserCountrySelection, - hasSelectionCustomIcon: true, - labelColor: AppColors.textColor, - padding: const EdgeInsets.symmetric(vertical: 12, horizontal: 16), - selectionCustomIcon: AppAssets.arrow_down, - leadingIcon: AppAssets.globe, - ).withVerticalPadding(8); - }, - ).paddingSymmetrical(0.h, 4.h), - - - 'Where the patient located'.needTranslation.toText16(weight: FontWeight.bold).paddingSymmetrical(4.h, 0.h), - - Selector? countriesList, NationalityCountries? selectedCountry, bool isArabic})>( - selector: (context, authViewModel) { - final appState = getIt.get(); - return ( - countriesList: authViewModel.countriesList, - selectedCountry: authViewModel.pickedCountryByUAEUser, - isArabic: appState.isArabic(), - ); - }, - shouldRebuild: (previous, next) => previous.countriesList != next.countriesList || previous.selectedCountry != next.selectedCountry || previous.isArabic != next.isArabic, - builder: (context, data, child) { - final authVM = context.read(); - return DropdownWidget( - labelText: LocaleKeys.country.tr(), - hintText:_country, - isEnable: true, - dropdownItems: (data.countriesList ?? []).map((e) => data.isArabic ? e.nameN ?? "" : e.name ?? "").toList(), - selectedValue: data.selectedCountry != null - ? data.isArabic - ? data.selectedCountry!.nameN ?? "" - : data.selectedCountry!.name ?? "" - : "", - onChange: authVM.onUAEUserCountrySelection, - hasSelectionCustomIcon: true, - labelColor: AppColors.textColor, - padding: const EdgeInsets.symmetric(vertical: 12, horizontal: 16), - selectionCustomIcon: AppAssets.arrow_down, - leadingIcon: AppAssets.globe, - ).withVerticalPadding(8); - }, - ).paddingSymmetrical(0.h, 4.h), - - ])); - } - - Widget _otherDetails() { - return Padding( - padding: const EdgeInsets.symmetric(horizontal: 16.0), - child: ListView( - physics: const BouncingScrollPhysics(), - children: [ - const SizedBox(height: 12), - 'Other Details'.toText16(weight: FontWeight.bold).paddingSymmetrical(4.h, 0.h), - const SizedBox(height: 12), - - InkWell(child: TextInputWidget( - controller: _nameController, - padding: const EdgeInsets.symmetric(horizontal: 16.0), - hintText: 'Medical Report', labelText: 'Select Attachment', - suffix: Icon(Icons.attachment), - isReadOnly: true, - - ), - onTap: (){ - ImageOptions.showImageOptionsNew( - context, - true, - (String image, File file) { - setState(() { - EReferralAttachment eReferralAttachment = new EReferralAttachment(fileName: 'image ${medicalReportImages.length + 1}.png', base64String: image); - medicalReportImages.add(eReferralAttachment); - }); - }, - ); - }, - ).paddingSymmetrical(0.h, 4.h), - - Selector? countriesList, NationalityCountries? selectedCountry, bool isArabic})>( - selector: (context, authViewModel) { - final appState = getIt.get(); - return ( - countriesList: authViewModel.countriesList, - selectedCountry: authViewModel.pickedCountryByUAEUser, - isArabic: appState.isArabic(), - ); - }, - shouldRebuild: (previous, next) => previous.countriesList != next.countriesList || previous.selectedCountry != next.selectedCountry || previous.isArabic != next.isArabic, - builder: (context, data, child) { - final authVM = context.read(); - return DropdownWidget( - labelText: LocaleKeys.branch.tr(), - hintText:_country, - isEnable: true, - dropdownItems: (data.countriesList ?? []).map((e) => data.isArabic ? e.nameN ?? "" : e.name ?? "").toList(), - selectedValue: data.selectedCountry != null - ? data.isArabic - ? data.selectedCountry!.nameN ?? "" - : data.selectedCountry!.name ?? "" - : "", - onChange: authVM.onUAEUserCountrySelection, - hasSelectionCustomIcon: true, - labelColor: AppColors.textColor, - padding: const EdgeInsets.symmetric(vertical: 12, horizontal: 16), - selectionCustomIcon: AppAssets.arrow_down, - leadingIcon: AppAssets.hospital, - ).withVerticalPadding(8); - }, - ).paddingSymmetrical(0.h, 4.h), - Row( - mainAxisAlignment: MainAxisAlignment.start, - children: [ - Row( - children: [ - Checkbox( - value: isPatientInsured, - activeColor: AppColors.primaryRedColor, - onChanged: (bool? newValue) { - setState(() { - isPatientInsured = newValue!; - }); - }), - Padding( - padding: const EdgeInsets.all(5.0), - child: Text( - "Patient is Insured".needTranslation, - style: TextStyle(fontSize: 14, fontWeight: FontWeight.w600), - ), - ), - ], - ), - ], - ).paddingSymmetrical(0.h, 4.h), - - isPatientInsured? InkWell(child: TextInputWidget( - controller: _nameController, - padding: const EdgeInsets.symmetric(horizontal: 16.0), - hintText: 'Insurance Document', labelText: 'Select Attachment', - suffix: Icon(Icons.attachment), - isReadOnly: true, - - )) : SizedBox(), - ])); - } - @override - Widget build(BuildContext context) { - final bool step0Active = pageIndex == 0; - final bool step1Active = pageIndex == 1; - final bool step2Active = pageIndex == 2; - - return SizedBox( - height: MediaQuery - .of(context) - .size - .height, // constrain height - child: Column( - children: [ - const SizedBox(height: 8), - Padding( - padding: const EdgeInsets.symmetric(horizontal: 24.0), - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - _progressStep(title: 'Requester Info', active: step0Active), - _progressStep(title: 'Patient Information', active: step1Active), - _progressStep( - title: 'Other details', active: step2Active, showDivider: false), - - ], - ), - ), - Expanded( - child: PageView( - controller: _pageController, - physics: const NeverScrollableScrollPhysics(), - onPageChanged: (i) => setState(() => pageIndex = i), - children: [ - _requesterForm(), - _patientInformation(), - // const Center(child: Text('Patient Info - step 2 (placeholder)')), - _otherDetails(), - ], - ), - ), - - - ], - ), - ); - } - } diff --git a/lib/presentation/e_referral/search_e_referral.dart b/lib/presentation/e_referral/search_e_referral.dart new file mode 100644 index 0000000..fabf115 --- /dev/null +++ b/lib/presentation/e_referral/search_e_referral.dart @@ -0,0 +1,98 @@ + +import 'package:flutter/material.dart'; +import 'package:hmg_patient_app_new/features/hmg_services/hmg_services_view_model.dart'; +import 'package:hmg_patient_app_new/features/hmg_services/models/req_models/create_e_referral_model.dart'; +import 'package:hmg_patient_app_new/presentation/e_referral/widget/search_e_referral_form.dart'; +import 'package:provider/provider.dart'; +import 'e-referral_validator.dart'; +import 'e_referral_form_manager.dart'; + +class SearchEReferralPage extends StatefulWidget { + final Function(VoidCallback) onNextStep; + + + const SearchEReferralPage({ + super.key, + required this.onNextStep, + }); + + @override + State createState() => _SearchEReferralPageState(); +} + +class _SearchEReferralPageState extends State { + final PageController _pageController = PageController(); + final ReferralFormManager _formManager = ReferralFormManager(); // Use manager + int _currentStep = 0; + + + + @override + void initState() { + super.initState(); + _loadData(); + widget.onNextStep(_handleNextStep); + } + + void _handleNextStep() { + _searchReferral(); + } + + void _searchReferral() { + + CreateEReferralRequestModel createReferrralRequestModel = + CreateEReferralRequestModel( + isInsuredPatient: _formManager.formData.isPatientInsured, + cityCode: _formManager.formData.patientCity!.iD!.toString(), + cityName: _formManager.formData.patientCity!.description, + requesterName: _formManager.formData.requesterName, + requesterContactNo: _formManager.formData.requesterPhone, + requesterRelationship: _formManager.formData.relationship?.iD, + otherRelationship: _formManager.formData.relationship!.iD.toString(), + fullName: _formManager.formData.patientName, + identificationNo: int.tryParse(_formManager.formData!.patientIdentification ?? '0'), + patientMobileNumber: _formManager.formData.patientPhone, + preferredBranchCode: _formManager.formData.branch!.iD, + medicalReportAttachment: _formManager.formData.medicalReportImages, + insuranceCardAttachment: _formManager.formData.insuredPatientImages, + preferredBranchName: _formManager.formData.branch!.desciption + ); + + final hmgServicesVM = context.read(); + hmgServicesVM.createEReferral( + requestModel: createReferrralRequestModel, + onSuccess: (response) { + print("E-Referral submitted successfully"); + }, + onError: (errorMessage) { + // Handle error (e.g., show error message) + print(errorMessage); + }, + ); + + } + + void _loadData() { + + } + + @override + Widget build(BuildContext context) { + return ChangeNotifierProvider.value( + value: _formManager, + child: SizedBox( + height: MediaQuery.of(context).size.height, + child: Column( + children: [ + + Expanded( + child: + SearchEReferralFormForm(), + + ), + ], + ), + ), + ); + } +} \ No newline at end of file diff --git a/lib/presentation/e_referral/widget/e-referral_otp.dart b/lib/presentation/e_referral/widget/e-referral_otp.dart new file mode 100644 index 0000000..3fcac6c --- /dev/null +++ b/lib/presentation/e_referral/widget/e-referral_otp.dart @@ -0,0 +1,105 @@ +// services/otp_service.dart +import 'package:flutter/material.dart'; +import 'package:hmg_patient_app_new/core/enums.dart'; +import 'package:hmg_patient_app_new/core/utils/size_utils.dart'; +import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; +import 'package:provider/provider.dart'; +import 'package:hmg_patient_app_new/core/common_models/generic_api_model.dart'; +import 'package:hmg_patient_app_new/features/hmg_services/hmg_services_view_model.dart'; +import 'package:hmg_patient_app_new/features/hmg_services/models/req_models/check_activation_e_referral_req_model.dart'; +import 'package:hmg_patient_app_new/features/hmg_services/models/req_models/send_activation_code_ereferral_req_model.dart'; +import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart'; +import 'package:hmg_patient_app_new/features/authentication/widgets/otp_verification_screen.dart'; + +class OTPService { + static void openOTPScreen({ + required BuildContext context, + required String phoneNumber, + required CountryEnum countryEnum, + required Function onSuccess, + }) { + final hmgServicesViewModel = context.read(); + + hmgServicesViewModel.eReferralSendActivationCode( + requestModel: SendActivationCodeForEReferralRequestModel( + patientMobileNumber: int.parse(phoneNumber), + zipCode: countryEnum.countryCode, + patientOutSA: countryEnum.countryCode == '966' ? 0 : 1, + ), + onSuccess: (GenericApiModel response) { + _showOTPVerificationSheet( + context: context, + phoneNumber: phoneNumber, + loginTokenID: response.data, + onSuccess: onSuccess, + ); + }, + onError: (String errorMessage) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text(errorMessage)) + ); + }, + ); + } + + static void _showOTPVerificationSheet({ + required BuildContext context, + required String phoneNumber, + required String loginTokenID, + required Function onSuccess, + }) { + showCommonBottomSheet( + context, + isFullScreen: true, + title: "OTP Verification", + isCloseButtonVisible: false, + height:ResponsiveExtension.screenHeight * 0.75, + child: OTPVerificationScreen( + phoneNumber: phoneNumber, + checkActivationCode: (int code) { + _verifyOTP( + context: context, + loginTokenID: loginTokenID, + code: code, + onSuccess: onSuccess, + ); + }, + onResendOTPPressed: (String phoneNumber) { + Navigator.pop(context); + openOTPScreen( + context: context, + phoneNumber: phoneNumber, + countryEnum: CountryEnum.saudiArabia, + onSuccess: onSuccess, + ); + }, + isFormFamilyFile: false, + ), + ); + } + + static void _verifyOTP({ + required BuildContext context, + required String loginTokenID, + required int code, + required Function onSuccess, + }) { + final hmgServicesViewModel = context.read(); + + hmgServicesViewModel.checkEReferralActivationCode( + requestModel: CheckActivationCodeForEReferralRequestModel( + logInTokenID: loginTokenID, + activationCode: code.toString(), + ), + onSuccess: (GenericApiModel response) { + Navigator.pop(context); + onSuccess(); + }, + onError: (String errorMessage) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text(errorMessage)) + ); + }, + ); + } +} \ No newline at end of file diff --git a/lib/presentation/e_referral/widget/e_referral_other_details.dart b/lib/presentation/e_referral/widget/e_referral_other_details.dart new file mode 100644 index 0000000..d473dfe --- /dev/null +++ b/lib/presentation/e_referral/widget/e_referral_other_details.dart @@ -0,0 +1,308 @@ +// widgets/other_details_step.dart +import 'dart:io'; + +import 'package:flutter/material.dart'; +import 'package:hmg_patient_app_new/core/utils/validation_utils.dart'; +import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; +import 'package:hmg_patient_app_new/features/hmg_services/models/req_models/create_e_referral_model.dart'; +import 'package:hmg_patient_app_new/presentation/e_referral/e_referral_form_manager.dart'; +import 'package:provider/provider.dart'; +import 'package:hmg_patient_app_new/core/app_assets.dart'; +import 'package:hmg_patient_app_new/features/habib_wallet/habib_wallet_view_model.dart'; +import 'package:hmg_patient_app_new/widgets/dropdown/dropdown_widget.dart'; +import 'package:hmg_patient_app_new/widgets/input_widget.dart'; +import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart'; +import 'package:hmg_patient_app_new/widgets/image_picker.dart'; + + +class OtherDetailsStep extends StatefulWidget { + const OtherDetailsStep({super.key}); + + @override + State createState() => _OtherDetailsStepState(); +} + +class _OtherDetailsStepState extends State { + final TextEditingController _medicalReportController = TextEditingController(); + final TextEditingController _insuranceController = TextEditingController(); + + late ReferralFormManager _formManager; + + @override + void initState() { + super.initState(); + _formManager = context.read(); + _updateMedicalReportText(); + _updateInsuranceText(); + } + + @override + void didUpdateWidget(OtherDetailsStep oldWidget) { + super.didUpdateWidget(oldWidget); + _updateMedicalReportText(); + _updateInsuranceText(); + } + + void _updateMedicalReportText() { + final hasMedicalReports = _formManager.formData.medicalReportImages.isNotEmpty; + _medicalReportController.text = hasMedicalReports + ? '${_formManager.formData.medicalReportImages.length} file(s) selected' + : ''; + } + + void _updateInsuranceText() { + final hasInsuranceDocs = _formManager.formData.insuredPatientImages.isNotEmpty; + _insuranceController.text = hasInsuranceDocs + ? '${_formManager.formData.insuredPatientImages.length} file(s) selected' + : ''; + } + + @override + Widget build(BuildContext context) { + return Consumer( + builder: (context, formManager, child) { + return Padding( + padding: const EdgeInsets.symmetric(horizontal: 16.0), + child: ListView( + physics: const BouncingScrollPhysics(), + children: [ + const SizedBox(height: 12), + _buildSectionTitle('Other Details'), + const SizedBox(height: 12), + _buildMedicalReportField(formManager), + _buildBranchField(context, formManager), + _buildInsuranceCheckbox(formManager), + if (formManager.formData.isPatientInsured) _buildInsuranceField(formManager), + ], + ), + ); + }, + ); + } + + Widget _buildSectionTitle(String title) { + return Text( + title, + style: const TextStyle(fontWeight: FontWeight.w700, fontSize: 16) + ).paddingSymmetrical(4, 0); + } + + Widget _buildMedicalReportField(ReferralFormManager formManager) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + InkWell( + child: TextInputWidget( + controller: _medicalReportController, + padding: const EdgeInsets.symmetric(horizontal: 16.0), + hintText: 'Medical Report', + labelText: 'Select Attachment', + suffix: const Icon(Icons.attachment), + isReadOnly: true, + errorMessage: formManager.errors.medicalReport, + hasError: !ValidationUtils.isNullOrEmpty(formManager.errors.medicalReport), + ), + onTap: () { + ImageOptions.showImageOptionsNew( + context, + true, + (String image, File file) { + _addMedicalReport(image, file, formManager); + }, + ); + }, + ), + if (formManager.formData.medicalReportImages.isNotEmpty) + Padding( + padding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 8.0), + child: Wrap( + spacing: 8.0, + children: formManager.formData.medicalReportImages.asMap().entries.map((entry) { + final index = entry.key; + return Chip( + label: Text('Medical Report ${index + 1}'), + deleteIcon: const Icon(Icons.close, size: 16), + onDeleted: () { + _removeMedicalReport(index, formManager); + }, + ); + }).toList(), + ), + ), + ], + ).paddingSymmetrical(0, 4); + } + + Widget _buildBranchField(BuildContext context, ReferralFormManager formManager) { + return DropdownWidget( + labelText: 'Branch', + hintText: formManager.formData.branch?.desciption ?? "Select Branch", + isEnable: false, + hasSelectionCustomIcon: true, + labelColor: Colors.black, + padding: const EdgeInsets.symmetric(vertical: 12, horizontal: 16), + selectionCustomIcon: AppAssets.arrow_down, + leadingIcon: AppAssets.hospital, + dropdownItems: [], + errorMessage: formManager.errors.branch, + hasError: !ValidationUtils.isNullOrEmpty(formManager.errors.branch), + ).paddingSymmetrical(0, 4).onPress(() { + _showBranchBottomSheet(context, formManager); + }); + } + + Widget _buildInsuranceCheckbox(ReferralFormManager formManager) { + return Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Row( + children: [ + Checkbox( + value: formManager.formData.isPatientInsured, + activeColor: Colors.red, + onChanged: (bool? newValue) { + final value = newValue ?? false; + formManager.updateIsPatientInsured(value); + if (!value) { + _updateInsuranceText(); + } + }, + ), + const Padding( + padding: EdgeInsets.all(5.0), + child: Text( + "Patient is Insured", + style: TextStyle(fontSize: 14, fontWeight: FontWeight.w600), + ), + ), + ], + ), + ], + ).paddingSymmetrical(0, 4); + } + + Widget _buildInsuranceField(ReferralFormManager formManager) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + InkWell( + child: TextInputWidget( + controller: _insuranceController, + padding: const EdgeInsets.symmetric(horizontal: 16.0), + hintText: 'Insurance Document', + labelText: 'Select Attachment', + suffix: const Icon(Icons.attachment), + isReadOnly: true, + errorMessage: formManager.errors.insuredDocument, + hasError: !ValidationUtils.isNullOrEmpty(formManager.errors.insuredDocument), + ), + onTap: () { + ImageOptions.showImageOptionsNew( + context, + true, + (String image, File file) { + _addInsuranceDocument(image, file, formManager); + }, + ); + }, + ), + if (formManager.formData.insuredPatientImages.isNotEmpty) + Padding( + padding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 8.0), + child: Wrap( + spacing: 8.0, + children: formManager.formData.insuredPatientImages.asMap().entries.map((entry) { + final index = entry.key; + return Chip( + label: Text('Insurance ${index + 1}'), + deleteIcon: const Icon(Icons.close, size: 16), + onDeleted: () { + _removeInsuranceDocument(index, formManager); + }, + ); + }).toList(), + ), + ), + ], + ); + } + + void _showBranchBottomSheet(BuildContext context, ReferralFormManager formManager) { + final habibWalletVM = context.read(); + + showCommonBottomSheetWithoutHeight( + context, + title: "Select Branch", + child: Consumer( + builder: (context, habibWalletVM, child) { + final hospitals = habibWalletVM.advancePaymentHospitals; + if (hospitals == null || hospitals.isEmpty) { + return const Center( + child: Padding( + padding: EdgeInsets.all(16.0), + child: Text('No branches available'), + ), + ); + } + + return ListView.separated( + shrinkWrap: true, + physics: const BouncingScrollPhysics(), + itemBuilder: (context, index) { + final branch = hospitals[index]; + return ListTile( + title: Text(branch.desciption ?? 'Unknown'), + onTap: () { + formManager.updateBranch(branch); + Navigator.pop(context); + }, + ); + }, + separatorBuilder: (context, index) => const Divider(), + itemCount: hospitals.length, + ); + }, + ), + useSafeArea: true, + isFullScreen: false, + isCloseButtonVisible: true, + ); + } + + void _addMedicalReport(String image, File file, ReferralFormManager formManager) { + final newAttachment = EReferralAttachment( + fileName: 'medical_report_${formManager.formData.medicalReportImages.length + 1}.png', + base64String: image + ); + + formManager.addMedicalReport(newAttachment); + _updateMedicalReportText(); + } + + void _removeMedicalReport(int index, ReferralFormManager formManager) { + formManager.removeMedicalReport(index); + _updateMedicalReportText(); + } + + void _addInsuranceDocument(String image, File file, ReferralFormManager formManager) { + final newAttachment = EReferralAttachment( + fileName: 'insurance_${formManager.formData.insuredPatientImages.length + 1}.png', + base64String: image + ); + + formManager.addInsuranceDocument(newAttachment); + _updateInsuranceText(); + } + + void _removeInsuranceDocument(int index, ReferralFormManager formManager) { + formManager.removeInsuranceDocument(index); + _updateInsuranceText(); + } + + @override + void dispose() { + _medicalReportController.dispose(); + _insuranceController.dispose(); + super.dispose(); + } +} \ No newline at end of file diff --git a/lib/presentation/e_referral/widget/e_referral_patient_info.dart b/lib/presentation/e_referral/widget/e_referral_patient_info.dart new file mode 100644 index 0000000..779804e --- /dev/null +++ b/lib/presentation/e_referral/widget/e_referral_patient_info.dart @@ -0,0 +1,289 @@ +// widgets/patient_information_step.dart +import 'package:flutter/material.dart'; +import 'package:hmg_patient_app_new/core/utils/validation_utils.dart'; +import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; +import 'package:hmg_patient_app_new/presentation/e_referral/e_referral_form_manager.dart'; +import 'package:provider/provider.dart'; +import 'package:hmg_patient_app_new/core/app_assets.dart'; +import 'package:hmg_patient_app_new/features/authentication/authentication_view_model.dart'; +import 'package:hmg_patient_app_new/features/hmg_services/hmg_services_view_model.dart'; +import 'package:hmg_patient_app_new/widgets/dropdown/dropdown_widget.dart'; +import 'package:hmg_patient_app_new/widgets/input_widget.dart'; +import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart'; + +class PatientInformationStep extends StatefulWidget { + const PatientInformationStep({super.key}); + + @override + State createState() => PatientInformationStepState(); +} + +class PatientInformationStepState extends State { + late TextEditingController _identificationController; + late TextEditingController _nameController; + late TextEditingController _phoneController; + + late FocusNode _identificationFocusNode; + late FocusNode _nameFocusNode; + late FocusNode _phoneFocusNode; + + late ReferralFormManager _formManager; + + @override + void initState() { + super.initState(); + _formManager = context.read(); + + _identificationController = TextEditingController(); + _nameController = TextEditingController(); + _phoneController = TextEditingController(); + + _identificationFocusNode = FocusNode(); + _nameFocusNode = FocusNode(); + _phoneFocusNode = FocusNode(); + + // Initialize controllers with current values + _identificationController.text = _formManager.formData.patientIdentification ?? ''; + _nameController.text = _formManager.formData.patientName ?? ''; + _phoneController.text = _formManager.formData.patientPhone ?? ''; + + // Auto-focus the identification field when the step loads + WidgetsBinding.instance.addPostFrameCallback((_) { + if (mounted) { + _identificationFocusNode.requestFocus(); + } + }); + } + + @override + Widget build(BuildContext context) { + return Consumer( + builder: (context, formManager, child) { + return Padding( + padding: const EdgeInsets.symmetric(horizontal: 16.0), + child: ListView( + physics: const BouncingScrollPhysics(), + children: [ + const SizedBox(height: 12), + _buildSectionTitle('Patient information'), + const SizedBox(height: 12), + _buildIdentificationField(formManager), + _buildPatientNameField(formManager), + // _buildPatientCountryField(context, formManager), + _buildPatientPhoneField(formManager), + const SizedBox(height: 20), + _buildSectionTitle('Where the patient located'), + _buildPatientCityField(context, formManager), + ], + ), + ); + }, + ); + } + + Widget _buildSectionTitle(String title) { + return Text( + title, + style: const TextStyle(fontWeight: FontWeight.w700, fontSize: 16) + ).paddingSymmetrical(4, 0); + } + + Widget _buildIdentificationField(ReferralFormManager formManager) { + return Focus( + focusNode: _identificationFocusNode, + child: TextInputWidget( + controller: _identificationController, + padding: const EdgeInsets.symmetric(horizontal: 16.0), + hintText: 'Enter Identification Number*', + labelText: 'Identification Number', + errorMessage: formManager.errors.patientIdentification, + hasError: !ValidationUtils.isNullOrEmpty(formManager.errors.patientIdentification), + onChange: (value) { + formManager.updatePatientIdentification(value ?? ''); + }, + onSubmitted: (value) { + _nameFocusNode.requestFocus(); + }, + ).paddingSymmetrical(0, 4), + ); + } + + Widget _buildPatientNameField(ReferralFormManager formManager) { + return Focus( + focusNode: _nameFocusNode, + child: TextInputWidget( + controller: _nameController, + padding: const EdgeInsets.symmetric(horizontal: 16.0), + hintText: 'Patient Name*', + labelText: 'Name', + keyboardType: TextInputType.text, + errorMessage: formManager.errors.patientName, + hasError: !ValidationUtils.isNullOrEmpty(formManager.errors.patientName), + onChange: (value) { + formManager.updatePatientName(value ?? ''); + }, + onSubmitted: (value) { + // Optionally move to next field or keep focus + }, + ).paddingSymmetrical(0, 4), + ); + } + + // Widget _buildPatientCountryField(BuildContext context, ReferralFormManager formManager) { + // return DropdownWidget( + // labelText: 'Country', + // hintText: formManager.formData.patientCountry?.name ?? "Select Country", + // isEnable: false, + // hasSelectionCustomIcon: true, + // labelColor: Colors.black, + // padding: const EdgeInsets.symmetric(vertical: 12, horizontal: 16), + // selectionCustomIcon: AppAssets.arrow_down, + // leadingIcon: AppAssets.globe, + // dropdownItems: [], + // errorMessage: formManager.errors.patientCountry, + // hasError: !ValidationUtils.isNullOrEmpty(formManager.errors.patientCountry), + // ).paddingSymmetrical(0, 4).onPress(() { + // _showCountryBottomSheet(context, formManager); + // }); + // } + + Widget _buildPatientPhoneField(ReferralFormManager formManager) { + return Focus( + focusNode: _phoneFocusNode, + child: TextInputWidget( + labelText: 'Phone Number', + hintText: "5xxxxxxxx", + controller: _phoneController, + padding: const EdgeInsets.all(8), + keyboardType: TextInputType.number, + onChange: (value) { + formManager.updatePatientPhone(value ?? ''); + }, + onCountryChange: (value) { + formManager.updateCountryEnum(value); + }, + prefix: '966', + isBorderAllowed: false, + isAllowLeadingIcon: true, + fontSize: 13, + isCountryDropDown: true, + leadingIcon: AppAssets.smart_phone, + errorMessage: formManager.errors.patientPhone, + hasError: !ValidationUtils.isNullOrEmpty(formManager.errors.patientPhone) + ).paddingSymmetrical(0, 8), + ); + } + + Widget _buildPatientCityField(BuildContext context, ReferralFormManager formManager) { + return DropdownWidget( + labelText: 'City', + hintText: formManager.formData.patientCity?.description ?? "Select City", + isEnable: false, + hasSelectionCustomIcon: true, + labelColor: Colors.black, + padding: const EdgeInsets.symmetric(vertical: 12, horizontal: 16), + selectionCustomIcon: AppAssets.arrow_down, + leadingIcon: AppAssets.globe, + dropdownItems: [], + errorMessage: formManager.errors.patientCity, + hasError: !ValidationUtils.isNullOrEmpty(formManager.errors.patientCity), + ).paddingSymmetrical(0, 4).onPress(() { + _showCityBottomSheet(context, formManager); + }); + } + + // void _showCountryBottomSheet(BuildContext context, ReferralFormManager formManager) { + // final authVM = context.read(); + // + // showCommonBottomSheetWithoutHeight( + // context, + // title: "Select Country", + // child: Consumer( + // builder: (context, authVM, child) { + // final countries = authVM.countriesList; + // if (countries == null || countries.isEmpty) { + // return const Center( + // child: Padding( + // padding: EdgeInsets.all(16.0), + // child: Text('No countries available'), + // ), + // ); + // } + // + // return ListView.separated( + // shrinkWrap: true, + // physics: const BouncingScrollPhysics(), + // itemBuilder: (context, index) { + // final country = countries[index]; + // return ListTile( + // title: Text(country.name ?? 'Unknown'), + // onTap: () { + // formManager.updatePatientCountry(country); + // Navigator.pop(context); + // }, + // ); + // }, + // separatorBuilder: (context, index) => const Divider(), + // itemCount: countries.length, + // ); + // }, + // ), + // useSafeArea: true, + // isFullScreen: false, + // isCloseButtonVisible: true, + // ); + // } + + void _showCityBottomSheet(BuildContext context, ReferralFormManager formManager) { + final hmgServicesVM = context.read(); + + showCommonBottomSheetWithoutHeight( + context, + title: "Select City", + child: Consumer( + builder: (context, hmgServicesVM, child) { + final cities = hmgServicesVM.getAllCitiesList; + if (cities == null || cities.isEmpty) { + return const Center( + child: Padding( + padding: EdgeInsets.all(16.0), + child: Text('No cities available'), + ), + ); + } + + return ListView.separated( + shrinkWrap: true, + physics: const BouncingScrollPhysics(), + itemBuilder: (context, index) { + final city = cities[index]; + return ListTile( + title: Text(city.description ?? 'Unknown'), + onTap: () { + formManager.updatePatientCity(city); + Navigator.pop(context); + }, + ); + }, + separatorBuilder: (context, index) => const Divider(), + itemCount: cities.length, + ); + }, + ), + useSafeArea: true, + isFullScreen: false, + isCloseButtonVisible: true, + ); + } + + @override + void dispose() { + _identificationController.dispose(); + _nameController.dispose(); + _phoneController.dispose(); + _identificationFocusNode.dispose(); + _nameFocusNode.dispose(); + _phoneFocusNode.dispose(); + super.dispose(); + } +} \ No newline at end of file diff --git a/lib/presentation/e_referral/widget/e_referral_requester_form.dart b/lib/presentation/e_referral/widget/e_referral_requester_form.dart new file mode 100644 index 0000000..b6952a5 --- /dev/null +++ b/lib/presentation/e_referral/widget/e_referral_requester_form.dart @@ -0,0 +1,228 @@ +// widgets/requester_form_step.dart +import 'package:flutter/material.dart'; +import 'package:hmg_patient_app_new/core/utils/validation_utils.dart'; +import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; +import 'package:hmg_patient_app_new/features/hmg_services/models/ui_models/e_referral_form_model.dart'; +import 'package:hmg_patient_app_new/presentation/e_referral/e-referral_validator.dart'; +import 'package:hmg_patient_app_new/presentation/e_referral/e_referral_form_manager.dart'; +import 'package:provider/provider.dart'; +import 'package:hmg_patient_app_new/core/app_assets.dart'; +import 'package:hmg_patient_app_new/features/authentication/authentication_view_model.dart'; +import 'package:hmg_patient_app_new/features/hmg_services/hmg_services_view_model.dart'; +import 'package:hmg_patient_app_new/widgets/dropdown/dropdown_widget.dart'; +import 'package:hmg_patient_app_new/widgets/input_widget.dart'; +import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart'; +// widgets/requester_form_step.dart +// widgets/requester_form_step.dart +class RequesterFormStep extends StatefulWidget { + const RequesterFormStep({super.key}); + + @override + State createState() => RequesterFormStepState(); +} + +class RequesterFormStepState extends State { + late TextEditingController _nameController; + late TextEditingController _phoneController; + late TextEditingController _otherNameController; + + late FocusNode _nameFocusNode; + late FocusNode _phoneFocusNode; + late FocusNode _otherNameFocusNode; + + late ReferralFormManager _formManager; + + @override + void initState() { + super.initState(); + _formManager = context.read(); + + _nameController = TextEditingController(); + _phoneController = TextEditingController(); + _otherNameController = TextEditingController(); + + _nameFocusNode = FocusNode(); + _phoneFocusNode = FocusNode(); + _otherNameFocusNode = FocusNode(); + + // Initialize controllers with current values + _nameController.text = _formManager.formData.requesterName ?? ''; + _phoneController.text = _formManager.formData.requesterPhone ?? ''; + _otherNameController.text = _formManager.formData.otherRelationshipName ?? ''; + + // Auto-focus the name field when the step loads + WidgetsBinding.instance.addPostFrameCallback((_) { + if (mounted) { + _nameFocusNode.requestFocus(); + } + }); + } + + @override + Widget build(BuildContext context) { + return Consumer( + builder: (context, formManager, child) { + return Padding( + padding: const EdgeInsets.symmetric(horizontal: 24.0), + child: ListView( + physics: const BouncingScrollPhysics(), + children: [ + const SizedBox(height: 12), + _buildSectionTitle('Referral requester information'), + const SizedBox(height: 12), + _buildNameField(formManager), + _buildPhoneField(formManager), + _buildRelationshipField(context, formManager), + if (_showOtherNameField(formManager)) _buildOtherNameField(formManager), + ], + ), + ); + }, + ); + } + + Widget _buildSectionTitle(String title) { + return Text( + title, + style: const TextStyle(fontWeight: FontWeight.w700, fontSize: 16) + ).paddingSymmetrical(4, 0); + } + + Widget _buildNameField(ReferralFormManager formManager) { + return Focus( + focusNode: _nameFocusNode, + child: TextInputWidget( + controller: _nameController, + padding: const EdgeInsets.symmetric(horizontal: 16.0), + hintText: 'Enter Referral Requester Name*', + labelText: 'Requester Name', + keyboardType: TextInputType.text, + errorMessage: formManager.errors.requesterName, + hasError: !ValidationUtils.isNullOrEmpty(formManager.errors.requesterName), + onChange: (value) { + formManager.updateRequesterName(value ?? ''); + }, + onSubmitted: (value) { + _phoneFocusNode.requestFocus(); + }, + ).paddingSymmetrical(0, 8), + ); + } + + Widget _buildPhoneField(ReferralFormManager formManager) { + return Focus( + focusNode: _phoneFocusNode, + child: TextInputWidget( + labelText: 'Phone Number', + hintText: "5xxxxxxxx", + controller: _phoneController, + padding: const EdgeInsets.all(8), + keyboardType: TextInputType.number, + onChange: (value) { + formManager.updateRequesterPhone(value ?? ''); + }, + onCountryChange: (value) { + formManager.updateCountryEnum(value); + }, + prefix: '966', + isBorderAllowed: false, + isAllowLeadingIcon: true, + fontSize: 13, + isCountryDropDown: true, + leadingIcon: AppAssets.smart_phone, + errorMessage: formManager.errors.requesterPhone, + hasError: !ValidationUtils.isNullOrEmpty(formManager.errors.requesterPhone) + ).paddingSymmetrical(0, 8), + ); + } + + Widget _buildRelationshipField(BuildContext context, ReferralFormManager formManager) { + return DropdownWidget( + labelText: "Relationship", + hintText: formManager.formData.relationship?.textEn ?? "Select Relation", + isEnable: false, + selectedValue: formManager.formData.relationship?.textEn ?? "Select Relation", + errorMessage: formManager.errors.relationship, + hasError: !ValidationUtils.isNullOrEmpty(formManager.errors.relationship), + hasSelectionCustomIcon: false, + labelColor: Colors.black, + padding: const EdgeInsets.symmetric(vertical: 12, horizontal: 16), + leadingIcon: AppAssets.user_circle, + dropdownItems: [], + ).paddingSymmetrical(0, 8).onPress(() { + _showRelationshipBottomSheet(context, formManager); + }); + } + + Widget _buildOtherNameField(ReferralFormManager formManager) { + return Focus( + focusNode: _otherNameFocusNode, + child: TextInputWidget( + controller: _otherNameController, + padding: const EdgeInsets.symmetric(horizontal: 16.0), + hintText: 'Other Name*', + labelText: 'Other Name', + errorMessage: formManager.errors.otherRelationshipName, + onChange: (value) { + formManager.updateOtherRelationshipName(value ?? ''); + }, + ).paddingSymmetrical(0, 4), + ); + } + + bool _showOtherNameField(ReferralFormManager formManager) { + return formManager.formData.relationship != null && + formManager.formData.relationship?.iD == 5; + } + + void _showRelationshipBottomSheet(BuildContext context, ReferralFormManager formManager) { + final hmgServicesVM = context.read(); + + showCommonBottomSheetWithoutHeight( + context, + title: "Select Relation", + child: Consumer( + builder: (context, hmgServicesVM, child) { + if (hmgServicesVM.relationTypes.isEmpty) { + return const Center( + child: Padding( + padding: EdgeInsets.all(16.0), + child: Text('No relationships available'), + ), + ); + } + + return ListView.separated( + shrinkWrap: true, + physics: const BouncingScrollPhysics(), + itemBuilder: (context, index) { + final relationship = hmgServicesVM.relationTypes[index]; + return ListTile( + title: Text(relationship.textEn ?? 'Unknown'), + onTap: () { + formManager.updateRelationship(relationship); + Navigator.pop(context); + }, + ); + }, + separatorBuilder: (context, index) => const Divider(), + itemCount: hmgServicesVM.relationTypes.length, + ); + }, + ), + isFullScreen: false, + isCloseButtonVisible: true, + ); + } + + @override + void dispose() { + _nameController.dispose(); + _phoneController.dispose(); + _otherNameController.dispose(); + _nameFocusNode.dispose(); + _phoneFocusNode.dispose(); + _otherNameFocusNode.dispose(); + super.dispose(); + } +} \ No newline at end of file diff --git a/lib/presentation/e_referral/widget/e_referral_stepper.dart b/lib/presentation/e_referral/widget/e_referral_stepper.dart new file mode 100644 index 0000000..a6cd771 --- /dev/null +++ b/lib/presentation/e_referral/widget/e_referral_stepper.dart @@ -0,0 +1,72 @@ +// widgets/progress_stepper_widget.dart +import 'package:flutter/material.dart'; +import 'package:hmg_patient_app_new/theme/colors.dart'; + +class ProgressStepperWidget extends StatelessWidget { + final int currentStep; + final List steps; + + const ProgressStepperWidget({ + super.key, + required this.currentStep, + required this.steps, + }); + + @override + Widget build(BuildContext context) { + return Padding( + padding: const EdgeInsets.symmetric(horizontal: 24.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + for (int i = 0; i < steps.length; i++) + _buildStep( + title: steps[i], + active: i == currentStep, + showDivider: i < steps.length - 1, + ), + ], + ), + ); + } + + Widget _buildStep({required String title, required bool active, bool showDivider = true}) { + final Color activeColor = active ? AppColors.primaryRedColor : Colors.grey.shade400; + + return Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + CircleAvatar( + radius: 13, + backgroundColor: active ? activeColor : Colors.grey.shade300, + child: Icon(Icons.check, size: 14, color: Colors.white), + ), + if (showDivider) + Padding( + padding: const EdgeInsets.symmetric(horizontal: 8.0), + child: Divider(thickness: 1), + ), + ], + ), + const SizedBox(height: 6), + Text(title, style: const TextStyle(fontSize: 11, fontWeight: FontWeight.w600)), + const SizedBox(height: 6), + Container( + padding: const EdgeInsets.symmetric(horizontal: 6, vertical: 4), + decoration: BoxDecoration( + color: active ? activeColor.withOpacity(0.15) : Colors.grey.shade100, + borderRadius: BorderRadius.circular(6), + ), + child: Text( + active ? 'Active' : 'Inactive', + style: TextStyle(fontSize: 9, color: active ? activeColor : Colors.grey) + ), + ), + ], + ), + ); + } +} \ No newline at end of file diff --git a/lib/presentation/e_referral/widget/search_e_referral_form.dart b/lib/presentation/e_referral/widget/search_e_referral_form.dart new file mode 100644 index 0000000..37d4025 --- /dev/null +++ b/lib/presentation/e_referral/widget/search_e_referral_form.dart @@ -0,0 +1,184 @@ + +import 'package:flutter/material.dart'; +import 'package:hmg_patient_app_new/core/utils/validation_utils.dart'; +import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; +import 'package:hmg_patient_app_new/features/hmg_services/models/ui_models/e_referral_form_model.dart'; +import 'package:hmg_patient_app_new/presentation/e_referral/e-referral_validator.dart'; +import 'package:hmg_patient_app_new/presentation/e_referral/e_referral_form_manager.dart'; +import 'package:provider/provider.dart'; +import 'package:hmg_patient_app_new/core/app_assets.dart'; +import 'package:hmg_patient_app_new/features/authentication/authentication_view_model.dart'; +import 'package:hmg_patient_app_new/features/hmg_services/hmg_services_view_model.dart'; +import 'package:hmg_patient_app_new/widgets/dropdown/dropdown_widget.dart'; +import 'package:hmg_patient_app_new/widgets/input_widget.dart'; +import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart'; +class SearchEReferralFormForm extends StatefulWidget { + const SearchEReferralFormForm({super.key}); + + @override + State createState() => SearchEReferralFormFormState(); +} + +class SearchEReferralFormFormState extends State { + late TextEditingController _searchController; + late TextEditingController _phoneController; + late FocusNode _searchFocusNode; + late FocusNode _phoneFocusNode; + + int criteria =0; + + List> criteriaList = [ + {0: 'Identification Number'}, + {1: 'Referral Number'}, + ]; + late ReferralFormManager _formManager; + + @override + void initState() { + super.initState(); + _formManager = context.read(); + + _searchController = TextEditingController(); + _phoneController = TextEditingController(); + _searchFocusNode = FocusNode(); + _phoneFocusNode = FocusNode(); + + // Initialize controllers with current values + _searchController.text = ''; + _phoneController.text = ''; + + // Auto-focus the name field when the step loads + WidgetsBinding.instance.addPostFrameCallback((_) { + if (mounted) { + _searchFocusNode.requestFocus(); + } + }); + } + + @override + Widget build(BuildContext context) { + return Consumer( + builder: (context, formManager, child) { + return Padding( + padding: const EdgeInsets.symmetric(horizontal: 24.0), + child: ListView( + physics: const BouncingScrollPhysics(), + children: [ + + const SizedBox(height: 12), + _buildSelectionField(context, formManager), + _buildNameField(formManager), + _buildPhoneField(formManager), + + ], + ), + ); + }, + ); + } + + + + Widget _buildNameField(ReferralFormManager formManager) { + return Focus( + focusNode: _searchFocusNode, + child: TextInputWidget( + controller: _searchController, + padding: const EdgeInsets.symmetric(horizontal: 16.0), + hintText:criteria ==0 ? "Enter Identification Number" : "Enter Referral Number", + labelText: criteria ==0 ? "Identification Number" : "Referral Number", + keyboardType: TextInputType.text, + // errorMessage: formManager.errors.requesterName, + hasError: !ValidationUtils.isNullOrEmpty(_searchController.text), + onChange: (value) { + + }, + onSubmitted: (value) { + + }, + ).paddingSymmetrical(0, 8), + ); + } + + Widget _buildPhoneField(ReferralFormManager formManager) { + return Focus( + focusNode: _phoneFocusNode, + child: TextInputWidget( + labelText: 'Phone Number', + hintText: "5xxxxxxxx", + controller: _phoneController, + padding: const EdgeInsets.all(8), + keyboardType: TextInputType.number, + onChange: (value) { + formManager.updateRequesterPhone(value ?? ''); + }, + onCountryChange: (value) { + formManager.updateCountryEnum(value); + }, + prefix: '966', + isBorderAllowed: false, + isAllowLeadingIcon: true, + fontSize: 13, + isCountryDropDown: true, + leadingIcon: AppAssets.smart_phone, + errorMessage: formManager.errors.requesterPhone, + hasError: !ValidationUtils.isNullOrEmpty(formManager.errors.requesterPhone) + ).paddingSymmetrical(0, 8), + ); + } + + Widget _buildSelectionField(BuildContext context, ReferralFormManager formManager) { + return DropdownWidget( + labelText: "Select the Search Criteria", + hintText: criteria ==0 ? "Identification Number" : "Referral Number", + isEnable: false, + hasSelectionCustomIcon: false, + labelColor: Colors.black, + padding: const EdgeInsets.symmetric(vertical: 12, horizontal: 16), + leadingIcon: AppAssets.search_icon, + dropdownItems: [], + ).paddingSymmetrical(0, 8).onPress(() { + _showCriteriaBottomSheet(context); + }); + } + + + + void _showCriteriaBottomSheet(BuildContext context,) { + + + showCommonBottomSheetWithoutHeight( + context, + title: "Select Criteria", + child: ListView.separated( + shrinkWrap: true, + physics: const BouncingScrollPhysics(), + itemBuilder: (context, index) { + return ListTile( + title: Text(criteriaList[index].values.first), + onTap: () { + setState(() { + criteria = index; + }); + Navigator.pop(context); + }, + ); + }, + separatorBuilder: (context, index) => const Divider(), + itemCount: criteriaList.length, + ), + isFullScreen: false, + isCloseButtonVisible: true, + ); + } + + @override + void dispose() { + _searchController.dispose(); + _phoneController.dispose(); + _searchFocusNode.dispose(); + _phoneFocusNode.dispose(); + + super.dispose(); + } +} \ No newline at end of file diff --git a/lib/widgets/attachment_options.dart b/lib/widgets/attachment_options.dart index 64c2485..be443f8 100644 --- a/lib/widgets/attachment_options.dart +++ b/lib/widgets/attachment_options.dart @@ -45,7 +45,7 @@ class AttachmentOptions extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ SvgPicture.asset( - "assets/images/$icon", + "assets/images/svg/$icon", ), title.toText11(isBold: true), ], diff --git a/lib/widgets/dropdown/dropdown_widget.dart b/lib/widgets/dropdown/dropdown_widget.dart index b4062e4..5ef5e58 100644 --- a/lib/widgets/dropdown/dropdown_widget.dart +++ b/lib/widgets/dropdown/dropdown_widget.dart @@ -19,7 +19,8 @@ class DropdownWidget extends StatelessWidget { final String? selectionCustomIcon; final String? leadingIcon; final Color? labelColor; - + final String? errorMessage; + final bool? hasError; const DropdownWidget( {Key? key, required this.labelText, @@ -34,7 +35,10 @@ class DropdownWidget extends StatelessWidget { this.hasSelectionCustomIcon = false, this.selectionCustomIcon, this.leadingIcon, - this.labelColor}) + this.labelColor, + this.errorMessage, + this.hasError =false + }) : super(key: key); @override @@ -42,16 +46,18 @@ class DropdownWidget extends StatelessWidget { Widget content = Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, - children: [_buildLabelText(labelColor), _buildDropdown(context)], + children: [_buildLabelText(labelColor), _buildDropdown(context),], ); - return Container( + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [Container( padding: padding, alignment: Alignment.center, // This might need adjustment based on layout decoration: RoundedRectangleBorder().toSmoothCornerDecoration( color: Colors.white, borderRadius: isAllowRadius ? 15.h : null, - side: isBorderAllowed ? BorderSide(color: const Color(0xffefefef), width: 1) : null, + side: isBorderAllowed ? BorderSide(color: hasError! ? Colors.red: const Color(0xffefefef), width: 1) : null, ), child: Row( // Wrap with a Row @@ -62,9 +68,21 @@ class DropdownWidget extends StatelessWidget { SizedBox(width: 3.h), ], Expanded(child: content), + ], ), - ); + ), + if (hasError! && errorMessage != null) + Padding( + padding: EdgeInsets.only(top: 4.h, left: 12.h), // Adjust padding as needed + child: Text( + errorMessage!, + style: TextStyle( + color: Colors.red, + fontSize: 12.f, + ), + ), + )]); } Widget _buildLeadingIcon() { -- 2.30.2 From c84564dafd92fb4e21ecfeb6fe3123f368f0394b Mon Sep 17 00:00:00 2001 From: faizatflutter Date: Mon, 24 Nov 2025 09:37:13 +0300 Subject: [PATCH 06/39] minor changes --- .../location/location_view_model.dart | 36 ++++++++----------- .../home_health_care/hhc_procedures_page.dart | 22 +----------- 2 files changed, 16 insertions(+), 42 deletions(-) diff --git a/lib/features/location/location_view_model.dart b/lib/features/location/location_view_model.dart index e2e0cc5..bf5f18a 100644 --- a/lib/features/location/location_view_model.dart +++ b/lib/features/location/location_view_model.dart @@ -2,15 +2,12 @@ import 'dart:async'; import 'package:flutter/foundation.dart' show ChangeNotifier; import 'package:flutter/material.dart'; -import 'package:google_maps_flutter_platform_interface/src/types/camera.dart'; +import 'package:google_maps_flutter/google_maps_flutter.dart' as GMSMapServices; import 'package:hmg_patient_app_new/features/location/GeocodeResponse.dart'; import 'package:hmg_patient_app_new/features/location/PlaceDetails.dart'; import 'package:hmg_patient_app_new/features/location/location_repo.dart'; import 'package:hmg_patient_app_new/services/error_handler_service.dart'; import 'package:huawei_map/huawei_map.dart' as HMSCameraServices; -import 'package:google_maps_flutter/google_maps_flutter.dart' as GMSMapServices; - - import 'PlacePrediction.dart'; @@ -20,8 +17,8 @@ class LocationViewModel extends ChangeNotifier { LocationViewModel({required this.locationRepo, required this.errorHandlerService}); - List predictions = []; - PlacePrediction? selectedPrediction; + List predictions = []; + PlacePrediction? selectedPrediction; bool isPredictionLoading = false; GeocodeResponse? geocodeResponse; PlaceDetails? placeDetails; @@ -30,14 +27,14 @@ class LocationViewModel extends ChangeNotifier { FutureOr getPlacesPrediction(String input) async { predictions = []; - isPredictionLoading= true; + isPredictionLoading = true; final result = await locationRepo.getPlacePredictionsAsInput(input); result.fold( (failure) { errorHandlerService.handleError(failure: failure); }, (apiModel) { - predictions = apiModel.data??[]; + predictions = apiModel.data ?? []; }, ); isPredictionLoading = false; @@ -75,21 +72,20 @@ class LocationViewModel extends ChangeNotifier { handleGMSMapCameraMoved(GMSMapServices.CameraPosition value) { mapCapturedLocation = Location(lat: value.target.latitude, lng: value.target.longitude); - } handleHMSMapCameraMoved(HMSCameraServices.CameraPosition value) { mapCapturedLocation = Location(lat: value.target.lat, lng: value.target.lng); } - handleOnCameraIdle(){ - if(mapCapturedLocation != null) { + handleOnCameraIdle() { + if (mapCapturedLocation != null) { getPlaceEncodedData(mapCapturedLocation!.lat, mapCapturedLocation!.lng); } } void updateSearchQuery(String? value) { - if(value == null || value.isEmpty){ + if (value == null || value.isEmpty) { predictions = []; return; } @@ -99,18 +95,16 @@ class LocationViewModel extends ChangeNotifier { void flushSearchPredictions() { predictions = []; - mapCapturedLocation= null; - placeDetails= null; - geocodeResponse= null; - selectedPrediction= null; + mapCapturedLocation = null; + placeDetails = null; + geocodeResponse = null; + selectedPrediction = null; notifyListeners(); } - FutureOr selectPlacePrediction(PlacePrediction placePrediction) async{ - selectedPrediction= placePrediction; + FutureOr selectPlacePrediction(PlacePrediction placePrediction) async { + selectedPrediction = placePrediction; await getPlaceDetails(placePrediction.placeID); } - - -} \ No newline at end of file +} diff --git a/lib/presentation/home_health_care/hhc_procedures_page.dart b/lib/presentation/home_health_care/hhc_procedures_page.dart index 0cf57ce..e4a6656 100644 --- a/lib/presentation/home_health_care/hhc_procedures_page.dart +++ b/lib/presentation/home_health_care/hhc_procedures_page.dart @@ -5,7 +5,6 @@ import 'package:flutter/material.dart'; import 'package:hmg_patient_app_new/core/app_state.dart'; import 'package:hmg_patient_app_new/core/dependencies.dart'; import 'package:hmg_patient_app_new/core/utils/size_utils.dart'; -import 'package:hmg_patient_app_new/core/utils/utils.dart'; import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; import 'package:hmg_patient_app_new/features/hmg_services/hmg_services_view_model.dart'; @@ -213,7 +212,7 @@ class _HhcProceduresPageState extends State { margin: EdgeInsets.symmetric(horizontal: 16.w), padding: EdgeInsets.all(16.w), decoration: RoundedRectangleBorder().toSmoothCornerDecoration( - color: AppColors.primaryRedColor.withValues(alpha: 0.1), + color: AppColors.greyLightColor, borderRadius: 16.r, ), child: Row( @@ -232,25 +231,6 @@ class _HhcProceduresPageState extends State { ), ], ), - Column( - crossAxisAlignment: CrossAxisAlignment.end, - children: [ - "Total Amount".needTranslation.toText12( - color: AppColors.textColorLight, - fontWeight: FontWeight.w600, - ), - Utils.getPaymentAmountWithSymbol( - viewModel.getHhcSelectedServicesTotal().toStringAsFixed(2).toText16( - isBold: true, - weight: FontWeight.bold, - color: AppColors.primaryRedColor, - ), - AppColors.primaryRedColor, - 14, - isSaudiCurrency: true, - ), - ], - ), ], ), ), -- 2.30.2 From 8068de70cbadfea6992d6950f7bb2fb0df303263 Mon Sep 17 00:00:00 2001 From: faizatflutter Date: Mon, 24 Nov 2025 10:58:31 +0300 Subject: [PATCH 07/39] Completed the HHC and CMC --- lib/core/api_consts.dart | 10 +- .../appointment_details_page.dart | 46 ++-- .../cmc_selection_review_page.dart | 106 ++-------- .../home_health_care/hhc_procedures_page.dart | 195 +++++++++++++---- .../hhc_selection_review_page.dart | 46 +++- lib/widgets/map/location_map_widget.dart | 199 ++++++++++++++++++ lib/widgets/map/map_utility_screen.dart | 103 ++++----- 7 files changed, 467 insertions(+), 238 deletions(-) create mode 100644 lib/widgets/map/location_map_widget.dart diff --git a/lib/core/api_consts.dart b/lib/core/api_consts.dart index a1f4062..f5aa29d 100644 --- a/lib/core/api_consts.dart +++ b/lib/core/api_consts.dart @@ -513,12 +513,6 @@ var PATIENT_ER_INSERT_PRES_ORDER = 'Services/Patients.svc/REST/PatientER_InsertP var BLOOD_DONATION_REGISTER_BLOOD_TYPE = 'Services/PatientVarification.svc/REST/BloodDonation_RegisterBloodType'; var ADD_USER_AGREEMENT_FOR_BLOOD_DONATION = 'Services/PatientVarification.svc/REST/AddUserAgreementForBloodDonation'; -// HHC RC SERVICES -var HHC_GET_ALL_SERVICES_RC = "api/HHC/getallhhc"; -var ADD_HHC_ORDER_RC = "api/HHC/add"; -var GET_ALL_HHC_ORDERS_RC = 'api/hhc/list'; -var UPDATE_HHC_ORDER_RC = 'api/hhc/update'; - // RRT RC SERVICES var ADD_RRT_ORDER_RC = "api/rrt/add"; var GET_ALL_RRT_ORDERS_RC = "api/rrt/list"; @@ -858,3 +852,7 @@ class ApiConsts { static final String appGeneralId = "Cs2020@2016\$2958"; static final String sessionID = 'TMRhVmkGhOsvamErw'; } + +class ApiKeyConstants { + static final String googleMapsApiKey = 'AIzaSyB6TERnxIr0yJ3qG4ULBZbu0sAD4tGqtng'; +} diff --git a/lib/presentation/appointments/appointment_details_page.dart b/lib/presentation/appointments/appointment_details_page.dart index e620783..4c725aa 100644 --- a/lib/presentation/appointments/appointment_details_page.dart +++ b/lib/presentation/appointments/appointment_details_page.dart @@ -2,7 +2,7 @@ import 'dart:async'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_staggered_animations/flutter_staggered_animations.dart'; +import 'package:hmg_patient_app_new/core/api_consts.dart'; import 'package:hmg_patient_app_new/core/app_assets.dart'; import 'package:hmg_patient_app_new/core/app_state.dart'; import 'package:hmg_patient_app_new/core/utils/size_utils.dart'; @@ -26,11 +26,7 @@ import 'package:hmg_patient_app_new/presentation/appointments/widgets/appointmen import 'package:hmg_patient_app_new/presentation/appointments/widgets/ask_doctor_request_type_select.dart'; import 'package:hmg_patient_app_new/presentation/book_appointment/widgets/appointment_calendar.dart'; import 'package:hmg_patient_app_new/presentation/contact_us/feedback_page.dart'; -import 'package:hmg_patient_app_new/presentation/lab/lab_orders_page.dart'; -import 'package:hmg_patient_app_new/presentation/medical_file/widgets/lab_rad_card.dart'; import 'package:hmg_patient_app_new/presentation/prescriptions/prescription_detail_page.dart'; -import 'package:hmg_patient_app_new/presentation/prescriptions/prescriptions_list_page.dart'; -import 'package:hmg_patient_app_new/presentation/radiology/radiology_orders_page.dart'; import 'package:hmg_patient_app_new/theme/colors.dart'; import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart'; import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart'; @@ -208,7 +204,7 @@ class _AppointmentDetailsPageState extends State { borderRadius: BorderRadius.circular(24.r), // Todo: what is this???? Api Key??? 😲 child: Image.network( - "https://maps.googleapis.com/maps/api/staticmap?center=${widget.patientAppointmentHistoryResponseModel.latitude},${widget.patientAppointmentHistoryResponseModel.longitude}&zoom=14&size=350x165&maptype=roadmap&markers=color:red%7C${widget.patientAppointmentHistoryResponseModel.latitude},${widget.patientAppointmentHistoryResponseModel.longitude}&key=AIzaSyB6TERnxIr0yJ3qG4ULBZbu0sAD4tGqtng", + "https://maps.googleapis.com/maps/api/staticmap?center=${widget.patientAppointmentHistoryResponseModel.latitude},${widget.patientAppointmentHistoryResponseModel.longitude}&zoom=14&size=350x165&maptype=roadmap&markers=color:red%7C${widget.patientAppointmentHistoryResponseModel.latitude},${widget.patientAppointmentHistoryResponseModel.longitude}&key=${ApiKeyConstants.googleMapsApiKey}", fit: BoxFit.contain, ), ), @@ -286,17 +282,17 @@ class _AppointmentDetailsPageState extends State { ) // : SizedBox.shrink() : GridView( - gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( - crossAxisCount: 3, - crossAxisSpacing: 16.h, - mainAxisSpacing: 16.w, - mainAxisExtent: 115.h, - ), - physics: NeverScrollableScrollPhysics(), - padding: EdgeInsets.zero, - shrinkWrap: true, - children: [ - MedicalFileCard( + gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: 3, + crossAxisSpacing: 16.h, + mainAxisSpacing: 16.w, + mainAxisExtent: 115.h, + ), + physics: NeverScrollableScrollPhysics(), + padding: EdgeInsets.zero, + shrinkWrap: true, + children: [ + MedicalFileCard( label: LocaleKeys.labResults.tr(context: context), textColor: AppColors.blackColor, backgroundColor: AppColors.whiteColor, @@ -385,13 +381,15 @@ class _AppointmentDetailsPageState extends State { ); Navigator.of(context).push( CustomPageRoute( - page: PrescriptionDetailPage(isFromAppointments: true, prescriptionsResponseModel: patientPrescriptionsResponseModel), + page: PrescriptionDetailPage( + isFromAppointments: true, prescriptionsResponseModel: patientPrescriptionsResponseModel), ), ); } else { showCommonBottomSheetWithoutHeight( context, - child: Utils.getErrorWidget(loadingText: "You don't have any prescriptions for this appointment.".needTranslation), + child: Utils.getErrorWidget( + loadingText: "You don't have any prescriptions for this appointment.".needTranslation), callBackFunc: () {}, isFullScreen: false, isCloseButtonVisible: true, @@ -412,11 +410,11 @@ class _AppointmentDetailsPageState extends State { // Navigator.of(context).push( // CustomPageRoute( // page: VaccineListPage(), - // ), - // ); - }), - ], - ), + // ), + // ); + }), + ], + ), // Column( // crossAxisAlignment: CrossAxisAlignment.start, // children: [ diff --git a/lib/presentation/comprehensive_checkup/cmc_selection_review_page.dart b/lib/presentation/comprehensive_checkup/cmc_selection_review_page.dart index b6164d9..3be209b 100644 --- a/lib/presentation/comprehensive_checkup/cmc_selection_review_page.dart +++ b/lib/presentation/comprehensive_checkup/cmc_selection_review_page.dart @@ -2,7 +2,6 @@ import 'dart:developer'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; -import 'package:hmg_patient_app_new/core/app_assets.dart'; import 'package:hmg_patient_app_new/core/app_state.dart'; import 'package:hmg_patient_app_new/core/dependencies.dart'; import 'package:hmg_patient_app_new/core/utils/size_utils.dart'; @@ -22,6 +21,7 @@ import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart'; import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart'; import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart'; import 'package:hmg_patient_app_new/widgets/loader/bottomsheet_loader.dart'; +import 'package:hmg_patient_app_new/widgets/map/location_map_widget.dart'; import 'package:maps_launcher/maps_launcher.dart'; import 'package:provider/provider.dart'; @@ -155,100 +155,26 @@ class _CmcSelectionReviewPageState extends State { } Widget _buildHospitalMap(HospitalsModel selectedHospital) { - final String lat = selectedHospital.latitude ?? "0.0"; - final String lng = selectedHospital.longitude ?? "0.0"; + final String lat = ((selectedHospital.latitude == null || selectedHospital.latitude!.isEmpty) ? "0.0" : selectedHospital.latitude) ?? "0.0"; + final String lng = ((selectedHospital.longitude == null || selectedHospital.longitude!.isEmpty) ? "0.0" : selectedHospital.longitude) ?? "0.0"; log("selectedHospital: $lng and $lat"); if (lat == "0.0" || lng == "0.0") return SizedBox.shrink(); - final String staticMapUrl = - "https://maps.googleapis.com/maps/api/staticmap?center=$lat,$lng&zoom=16&size=600x300&maptype=roadmap&markers=color:red%7C$lat,$lng&key=AIzaSyCyDbWUM9d_sBUGIE8PcuShzPaqO08NSC8"; - - return Stack( - children: [ - ClipRRect( - borderRadius: BorderRadius.circular(12.r), - child: Image.network( - staticMapUrl, - height: 200.h, - width: double.infinity, - fit: BoxFit.cover, - loadingBuilder: (context, child, loadingProgress) { - if (loadingProgress == null) return child; - return Container( - height: 200.h, - decoration: BoxDecoration( - color: AppColors.bgScaffoldColor, - borderRadius: BorderRadius.circular(12.r), - ), - child: Center( - child: CircularProgressIndicator( - color: AppColors.primaryRedColor, - ), - ), - ); - }, - errorBuilder: (context, error, stackTrace) { - return Container( - height: 200.h, - decoration: BoxDecoration( - color: AppColors.bgScaffoldColor, - borderRadius: BorderRadius.circular(12.r), - ), - child: Center( - child: Icon( - Icons.error_outline, - size: 48.h, - color: AppColors.greyTextColor, - ), - ), - ); - }, - ), - ), - Positioned( - bottom: 12.h, - right: 12.w, - child: InkWell( - onTap: () => _launchDirections(selectedHospital), - child: Container( - padding: EdgeInsets.symmetric(horizontal: 12.w, vertical: 8.h), - decoration: BoxDecoration( - color: AppColors.whiteColor, - borderRadius: BorderRadius.circular(1000.r), - boxShadow: [ - BoxShadow( - color: Color.fromARGB(26, 0, 0, 0), - blurRadius: 8, - offset: Offset(0, 2), - ), - ], - ), - child: Row( - mainAxisSize: MainAxisSize.min, - children: [ - Utils.buildSvgWithAssets( - icon: AppAssets.directions_icon, - width: 16.w, - height: 16.h, - ), - SizedBox(width: 6.w), - Text( - "Get Directions".needTranslation, - style: TextStyle( - fontSize: 12.f, - fontWeight: FontWeight.w600, - color: AppColors.blackColor, - letterSpacing: -0.4, - ), - ), - ], - ), - ), - ), - ), - ], + final appState = getIt.get(); + final isArabic = appState.isArabic(); + final hospitalName = isArabic ? (selectedHospital.nameN ?? selectedHospital.name ?? '') : (selectedHospital.name ?? ''); + + return LocationMapWidget( + latitude: double.parse(lat), + longitude: double.parse(lng), + address: hospitalName, + title: "Hospital Location".needTranslation, + showTitle: false, + showAddress: false, + padding: EdgeInsets.zero, + onDirectionsTap: () => _launchDirections(selectedHospital), ); } diff --git a/lib/presentation/home_health_care/hhc_procedures_page.dart b/lib/presentation/home_health_care/hhc_procedures_page.dart index e4a6656..bdc2e45 100644 --- a/lib/presentation/home_health_care/hhc_procedures_page.dart +++ b/lib/presentation/home_health_care/hhc_procedures_page.dart @@ -13,9 +13,11 @@ import 'package:hmg_patient_app_new/features/hmg_services/models/resq_models/get import 'package:hmg_patient_app_new/presentation/home_health_care/hhc_order_detail_page.dart'; import 'package:hmg_patient_app_new/presentation/home_health_care/hhc_selection_review_page.dart'; import 'package:hmg_patient_app_new/presentation/home_health_care/widgets/hhc_ui_selection_helper.dart'; +import 'package:hmg_patient_app_new/services/navigation_service.dart'; import 'package:hmg_patient_app_new/theme/colors.dart'; import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart'; import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart'; +import 'package:hmg_patient_app_new/widgets/map/map_utility_screen.dart'; import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart'; import 'package:provider/provider.dart'; import 'package:shimmer/shimmer.dart'; @@ -78,6 +80,15 @@ class _HhcProceduresPageState extends State { } final canCancel = order.statusId == 1 || order.statusId == 2; + final isArabic = getIt.get().isArabic(); + + // Extract services from orderselectedservice + List selectedServices = []; + if (order.orderselectedservice != null) { + if (order.orderselectedservice is List) { + selectedServices = order.orderselectedservice as List; + } + } return Container( width: double.infinity, @@ -128,6 +139,85 @@ class _HhcProceduresPageState extends State { ], ), + // Services List + if (selectedServices.isNotEmpty) ...[ + SizedBox(height: 16.h), + Container( + padding: EdgeInsets.all(12.w), + decoration: BoxDecoration( + color: AppColors.bgScaffoldColor, + borderRadius: BorderRadius.circular(12.r), + border: Border.all( + color: AppColors.greyColor.withAlpha(51), + width: 1, + ), + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + Icon( + Icons.medical_services_outlined, + size: 18.h, + color: AppColors.primaryRedColor, + ), + SizedBox(width: 6.w), + "Requested Services".needTranslation.toText14( + weight: FontWeight.w600, + color: AppColors.blackColor, + ), + ], + ), + SizedBox(height: 8.h), + ...selectedServices.asMap().entries.map((entry) { + int index = entry.key; + var service = entry.value; + String serviceName = ''; + + if (service is Map) { + if (isArabic) { + serviceName = service['SelectedServiceNameAR']?.toString() ?? + service['selectedServiceNameAR']?.toString() ?? + service['SelectedServiceName']?.toString() ?? + service['selectedServiceName']?.toString() ?? + ''; + } else { + serviceName = service['SelectedServiceName']?.toString() ?? service['selectedServiceName']?.toString() ?? ''; + } + } + + return Padding( + padding: EdgeInsets.only(top: index > 0 ? 6.h : 0), + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Container( + margin: EdgeInsets.only(top: 6.h), + width: 6.w, + height: 6.w, + decoration: BoxDecoration( + color: AppColors.primaryRedColor, + shape: BoxShape.circle, + ), + ), + SizedBox(width: 8.w), + Expanded( + child: serviceName.toText14( + color: AppColors.blackColor, + weight: FontWeight.w500, + maxlines: 3, + ), + ), + ], + ), + ); + }).toList(), + ], + ), + ), + ], + SizedBox(height: 12.h), // Info message @@ -206,36 +296,6 @@ class _HhcProceduresPageState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ SizedBox(height: 8.h), - if (viewModel.selectedHhcServices.isNotEmpty) ...[ - SizedBox(height: 16.h), - Container( - margin: EdgeInsets.symmetric(horizontal: 16.w), - padding: EdgeInsets.all(16.w), - decoration: RoundedRectangleBorder().toSmoothCornerDecoration( - color: AppColors.greyLightColor, - borderRadius: 16.r, - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - "Selected Services".needTranslation.toText12( - color: AppColors.textColorLight, - fontWeight: FontWeight.w600, - ), - "${viewModel.selectedHhcServices.length} service(s) selected".toText14( - isBold: true, - weight: FontWeight.bold, - ), - ], - ), - ], - ), - ), - ], - SizedBox(height: 16.h), Text( 'Select Services'.needTranslation, @@ -304,18 +364,35 @@ class _HhcProceduresPageState extends State { ); }, ), - // Summary Section ], ); }, ); } - void _proceedWithSelectedService() { + void _proceedWithSelectedService() async { + final navigationServices = getIt.get(); + final appState = getIt.get(); final hmgServicesViewModel = context.read(); if (hmgServicesViewModel.selectedHhcServices.isNotEmpty) { hmgServicesViewModel.setSelectedServiceForHhcOrder(hmgServicesViewModel.selectedHhcServices.first); - Navigator.of(context).pushReplacement( + + bool result = await navigationServices.push( + CustomPageRoute( + page: MapUtilityScreen( + confirmButtonString: "Submit Request ".needTranslation, + titleString: "Select Location", + subTitleString: "Please select the location".needTranslation, + isGmsAvailable: appState.isGMSAvailable, + ), + direction: AxisDirection.down), + ); + + if (!result) { + return; + } + + Navigator.of(context).push( CustomPageRoute( page: HhcSelectionReviewPage(selectedServices: hmgServicesViewModel.selectedHhcServices), direction: AxisDirection.left, @@ -359,16 +436,48 @@ class _HhcProceduresPageState extends State { if (pendingOrder == null && hmgServicesViewModel.selectedHhcServices.isNotEmpty) { return SafeArea( top: false, - child: Padding( - padding: EdgeInsets.only(left: 16.w, right: 16.w, top: 12.h), - child: CustomButton( - borderWidth: 0, - text: "Next".needTranslation, - onPressed: _proceedWithSelectedService, - textColor: AppColors.whiteColor, - borderRadius: 12.r, - borderColor: Colors.transparent, - padding: EdgeInsets.symmetric(vertical: 14.h), + child: Container( + color: AppColors.whiteColor, + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + // Selected Services Summary Widget + Container( + margin: EdgeInsets.symmetric(horizontal: 16.w, vertical: 4.h), + padding: EdgeInsets.all(16.w), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + "Selected Services".needTranslation.toText12( + color: AppColors.textColorLight, + fontWeight: FontWeight.w600, + ), + "${hmgServicesViewModel.selectedHhcServices.length} service(s) selected".toText14( + isBold: true, + weight: FontWeight.bold, + ), + ], + ), + ], + ), + ), + // Next Button + Padding( + padding: EdgeInsets.only(left: 16.w, right: 16.w), + child: CustomButton( + borderWidth: 0, + text: "Next".needTranslation, + onPressed: _proceedWithSelectedService, + textColor: AppColors.whiteColor, + borderRadius: 12.r, + borderColor: Colors.transparent, + padding: EdgeInsets.symmetric(vertical: 14.h), + ), + ), + ], ), ), ); diff --git a/lib/presentation/home_health_care/hhc_selection_review_page.dart b/lib/presentation/home_health_care/hhc_selection_review_page.dart index 7baeec0..8e9ba90 100644 --- a/lib/presentation/home_health_care/hhc_selection_review_page.dart +++ b/lib/presentation/home_health_care/hhc_selection_review_page.dart @@ -10,13 +10,14 @@ import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; import 'package:hmg_patient_app_new/features/hmg_services/hmg_services_view_model.dart'; import 'package:hmg_patient_app_new/features/hmg_services/models/req_models/cmc_create_new_order_req_model.dart'; import 'package:hmg_patient_app_new/features/hmg_services/models/resq_models/get_cmc_services_resp_model.dart'; -import 'package:hmg_patient_app_new/features/my_appointments/models/resp_models/hospital_model.dart'; +import 'package:hmg_patient_app_new/features/location/location_view_model.dart'; import 'package:hmg_patient_app_new/generated/locale_keys.g.dart'; import 'package:hmg_patient_app_new/theme/colors.dart'; import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart'; import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart'; import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart'; import 'package:hmg_patient_app_new/widgets/loader/bottomsheet_loader.dart'; +import 'package:hmg_patient_app_new/widgets/map/location_map_widget.dart'; import 'package:maps_launcher/maps_launcher.dart'; import 'package:provider/provider.dart'; @@ -57,6 +58,8 @@ class _HhcSelectionReviewPageState extends State { children: [ _buildSelectedServicesCard(isArabic), SizedBox(height: 16.h), + _buildLocationMap(), + SizedBox(height: 16.h), ], ), ), @@ -104,6 +107,36 @@ class _HhcSelectionReviewPageState extends State { ); } + Widget _buildLocationMap() { + final locationViewModel = getIt.get(); + final geocodeResponse = locationViewModel.geocodeResponse; + final mapCapturedLocation = locationViewModel.mapCapturedLocation; + + // Check if we have location data + if (mapCapturedLocation == null || (mapCapturedLocation.lat == 0.0 && mapCapturedLocation.lng == 0.0)) { + return SizedBox.shrink(); + } + + final double lat = mapCapturedLocation.lat ?? 0.0; + final double lng = mapCapturedLocation.lng ?? 0.0; + + if (lat == 0.0 || lng == 0.0) return SizedBox.shrink(); + + // Get address from geocode response + String address = "Selected Location".needTranslation; + if (geocodeResponse != null && geocodeResponse.results.isNotEmpty) { + address = geocodeResponse.results.first.formattedAddress; + } + + return LocationMapWidget( + latitude: lat, + longitude: lng, + address: address, + title: "Service Location".needTranslation, + onDirectionsTap: () => _launchDirectionsToLocation(lat, lng, address), + ); + } + Widget _buildBottomButton() { return SafeArea( top: false, @@ -133,16 +166,9 @@ class _HhcSelectionReviewPageState extends State { ); } - void _launchDirections(HospitalsModel selectedHospital) { - final double lat = double.parse(selectedHospital.latitude ?? "0.0"); - final double lng = double.parse(selectedHospital.longitude ?? "0.0"); - + void _launchDirectionsToLocation(double lat, double lng, String locationName) { if (lat != 0.0 && lng != 0.0) { - MapsLauncher.launchCoordinates( - lat, - lng, - selectedHospital.name ?? "Hospital", - ); + MapsLauncher.launchCoordinates(lat, lng, locationName); } } diff --git a/lib/widgets/map/location_map_widget.dart b/lib/widgets/map/location_map_widget.dart new file mode 100644 index 0000000..4cf5eae --- /dev/null +++ b/lib/widgets/map/location_map_widget.dart @@ -0,0 +1,199 @@ +import 'package:flutter/material.dart'; +import 'package:hmg_patient_app_new/core/api_consts.dart'; +import 'package:hmg_patient_app_new/core/app_assets.dart'; +import 'package:hmg_patient_app_new/core/utils/size_utils.dart'; +import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; +import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; +import 'package:hmg_patient_app_new/theme/colors.dart'; +import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart'; +import 'package:maps_launcher/maps_launcher.dart'; + +/// A reusable location map widget that displays a static map with address and directions button +/// Can be used in any review screen (HHC, CMC, etc.) +class LocationMapWidget extends StatelessWidget { + /// The latitude coordinate of the location + final double latitude; + + /// The longitude coordinate of the location + final double longitude; + + /// The formatted address or location name to display + final String address; + + /// The title to show above the map (e.g., "Service Location", "Hospital Location") + final String title; + + /// The zoom level for the map (default: 14) + final int zoomLevel; + + /// The size of the map image (default: 350x165) + final String mapSize; + + /// Optional callback when directions button is pressed + /// If not provided, will use default MapsLauncher + final VoidCallback? onDirectionsTap; + + /// Whether to show the address container (default: true) + final bool showAddress; + + /// Whether to show the title (default: true) + final bool showTitle; + + /// Custom map type (default: roadmap) + final String mapType; + final EdgeInsets? padding; + + const LocationMapWidget({ + super.key, + required this.latitude, + required this.longitude, + required this.address, + required this.title, + this.zoomLevel = 14, + this.mapSize = '350x165', + this.onDirectionsTap, + this.showAddress = true, + this.showTitle = true, + this.mapType = 'roadmap', + this.padding, + }); + + void _defaultLaunchDirections() { + if (latitude != 0.0 && longitude != 0.0) { + MapsLauncher.launchCoordinates(latitude, longitude, address); + } + } + + @override + Widget build(BuildContext context) { + final String staticMapUrl = + "https://maps.googleapis.com/maps/api/staticmap?center=$latitude,$longitude&zoom=$zoomLevel&size=$mapSize&maptype=$mapType&markers=color:red%7C$latitude,$longitude&key=${ApiKeyConstants.googleMapsApiKey}"; + + return Container( + decoration: RoundedRectangleBorder().toSmoothCornerDecoration( + color: AppColors.whiteColor, + borderRadius: 16.r, + ), + padding: padding ?? EdgeInsets.all(16.w), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + // Title + if (showTitle) ...[ + Text( + title, + style: TextStyle( + fontSize: 16.f, + fontWeight: FontWeight.w700, + color: AppColors.blackColor, + letterSpacing: -0.5, + ), + ), + SizedBox(height: 12.h), + ], + + // Address display + if (showAddress) ...[ + Container( + padding: EdgeInsets.symmetric(horizontal: 12.w, vertical: 14.h), + decoration: BoxDecoration( + color: AppColors.bgScaffoldColor, + borderRadius: BorderRadius.circular(12.r), + border: Border.all( + color: AppColors.greyColor.withAlpha(51), + width: 1, + ), + ), + child: Row( + children: [ + Icon(Icons.location_on, color: AppColors.primaryRedColor, size: 20.h), + SizedBox(width: 8.w), + Expanded( + child: Text( + address, + style: TextStyle( + fontSize: 14.f, + fontWeight: FontWeight.w500, + color: AppColors.blackColor, + letterSpacing: -0.4, + ), + maxLines: 2, + overflow: TextOverflow.ellipsis, + ), + ), + ], + ), + ), + SizedBox(height: 16.h), + ], + + // Map display with bottom button overlay + Stack( + children: [ + ClipRRect( + clipBehavior: Clip.hardEdge, + borderRadius: BorderRadius.circular(24.r), + child: Image.network( + staticMapUrl, + fit: BoxFit.contain, + loadingBuilder: (context, child, loadingProgress) { + if (loadingProgress == null) return child; + return Container( + height: 165.h, + decoration: BoxDecoration( + color: AppColors.bgScaffoldColor, + borderRadius: BorderRadius.circular(24.r), + ), + child: Center( + child: CircularProgressIndicator( + color: AppColors.primaryRedColor, + ), + ), + ); + }, + errorBuilder: (context, error, stackTrace) { + return Container( + height: 165.h, + decoration: BoxDecoration( + color: AppColors.bgScaffoldColor, + borderRadius: BorderRadius.circular(24.r), + ), + child: Center( + child: Icon( + Icons.error_outline, + size: 48.h, + color: AppColors.greyTextColor, + ), + ), + ); + }, + ), + ), + Positioned( + bottom: 0, + child: SizedBox( + width: MediaQuery.of(context).size.width * 0.785, + child: CustomButton( + text: "Get Directions".needTranslation, + onPressed: onDirectionsTap ?? _defaultLaunchDirections, + backgroundColor: AppColors.textColor.withValues(alpha: 0.8), + borderColor: AppColors.textColor.withValues(alpha: 0.01), + textColor: AppColors.whiteColor, + fontSize: 14.f, + fontWeight: FontWeight.w500, + borderRadius: 12.r, + padding: EdgeInsets.symmetric(horizontal: 10.w), + height: 40.h, + icon: AppAssets.directions_icon, + iconColor: AppColors.whiteColor, + iconSize: 14.h, + ).paddingAll(12.h), + ), + ), + ], + ), + ], + ), + ); + } +} diff --git a/lib/widgets/map/map_utility_screen.dart b/lib/widgets/map/map_utility_screen.dart index 87c99fc..e05c104 100644 --- a/lib/widgets/map/map_utility_screen.dart +++ b/lib/widgets/map/map_utility_screen.dart @@ -1,29 +1,13 @@ -import 'dart:io'; - -import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:hmg_patient_app_new/core/app_assets.dart'; import 'package:hmg_patient_app_new/core/app_export.dart'; import 'package:hmg_patient_app_new/core/utils/utils.dart'; import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; -import 'package:hmg_patient_app_new/features/emergency_services/emergency_services_view_model.dart'; -import 'package:hmg_patient_app_new/features/emergency_services/models/AmbulanceCallingPlace.dart'; -import 'package:hmg_patient_app_new/features/location/GeocodeResponse.dart'; -import 'package:hmg_patient_app_new/features/location/PlaceDetails.dart'; -import 'package:hmg_patient_app_new/features/location/PlacePrediction.dart'; import 'package:hmg_patient_app_new/features/location/location_view_model.dart'; -import 'package:hmg_patient_app_new/generated/locale_keys.g.dart'; -import 'package:hmg_patient_app_new/presentation/appointments/widgets/appointment_doctor_card.dart'; -import 'package:hmg_patient_app_new/presentation/emergency_services/call_ambulance/widgets/AddressItem.dart'; -import 'package:hmg_patient_app_new/presentation/emergency_services/call_ambulance/widgets/HospitalBottomSheetBody.dart'; -import 'package:hmg_patient_app_new/presentation/emergency_services/call_ambulance/widgets/appointment_bottom_sheet.dart' show AppointmentBottomSheet; import 'package:hmg_patient_app_new/presentation/emergency_services/widgets/location_input_bottom_sheet.dart'; import 'package:hmg_patient_app_new/theme/colors.dart'; -import 'package:hmg_patient_app_new/widgets/CustomSwitch.dart'; import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart'; -import 'package:hmg_patient_app_new/widgets/expandable_bottom_sheet/ExpandableBottomSheet.dart'; -import 'package:hmg_patient_app_new/widgets/expandable_bottom_sheet/model/BottomSheetType.dart'; import 'package:hmg_patient_app_new/widgets/input_widget.dart'; import 'package:hmg_patient_app_new/widgets/map/HMSMap.dart'; import 'package:hmg_patient_app_new/widgets/map/gms_map.dart'; @@ -42,14 +26,22 @@ import '../../../widgets/common_bottom_sheet.dart'; /// it results [true] if the user clicks on the submit button /// and [false] if the user closes the screen without giving the consent to proceed for the request class MapUtilityScreen extends StatelessWidget { - final String confirmButtonString; final String titleString; final String subTitleString; final bool isGmsAvailable; final VoidCallback? onCrossClicked; + final VoidCallback? onSubmitted; - const MapUtilityScreen({super.key, required this.confirmButtonString, required this.titleString, required this.subTitleString, required this.isGmsAvailable, this.onCrossClicked}); + const MapUtilityScreen({ + super.key, + required this.confirmButtonString, + required this.titleString, + required this.subTitleString, + required this.isGmsAvailable, + this.onCrossClicked, + this.onSubmitted, + }); @override Widget build(BuildContext context) { @@ -57,15 +49,9 @@ class MapUtilityScreen extends StatelessWidget { floatingActionButton: Padding( padding: EdgeInsetsDirectional.only(end: 8.h, bottom: 68.h), child: DecoratedBox( - decoration: RoundedRectangleBorder().toSmoothCornerDecoration( - color: AppColors.whiteColor, borderRadius: 12.h), - child: Utils.buildSvgWithAssets( - icon: AppAssets.locate_me, width: 24.h, height: 24.h) - .paddingAll(12.h) - .onPress(() { - context - .read() - .moveToCurrentLocation(); + decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 12.h), + child: Utils.buildSvgWithAssets(icon: AppAssets.locate_me, width: 24.h, height: 24.h).paddingAll(12.h).onPress(() { + context.read().moveToCurrentLocation(); }), ), ), @@ -74,38 +60,26 @@ class MapUtilityScreen extends StatelessWidget { children: [ if (isGmsAvailable) GMSMap( - currentLocation: - context.read().getGMSLocation(), - onCameraMoved: (value) => context - .read() - .handleGMSMapCameraMoved(value), - onCameraIdle: - context.read().handleOnCameraIdle, + currentLocation: context.read().getGMSLocation(), + onCameraMoved: (value) => context.read().handleGMSMapCameraMoved(value), + onCameraIdle: context.read().handleOnCameraIdle, myLocationEnabled: true, - inputController: - context.read().gmsController, + inputController: context.read().gmsController, showCenterMarker: true, ) else HMSMap( - currentLocation: - context.read().getHMSLocation(), - onCameraMoved: (value) => context - .read() - .handleHMSMapCameraMoved(value), - onCameraIdle: - context.read().handleOnCameraIdle, + currentLocation: context.read().getHMSLocation(), + onCameraMoved: (value) => context.read().handleHMSMapCameraMoved(value), + onCameraIdle: context.read().handleOnCameraIdle, myLocationEnabled: false, - inputController: - context.read().hmsController, + inputController: context.read().hmsController, showCenterMarker: true, ), Align( alignment: AlignmentDirectional.topStart, - child: Utils.buildSvgWithAssets( - icon: AppAssets.closeBottomNav, width: 32.h, height: 32.h) - .onPress(() { - onCrossClicked?.call(); + child: Utils.buildSvgWithAssets(icon: AppAssets.closeBottomNav, width: 32.h, height: 32.h).onPress(() { + onCrossClicked?.call(); // context // .read() // .flushPickupInformation(); @@ -120,8 +94,7 @@ class MapUtilityScreen extends StatelessWidget { Widget FixedBottomSheet(BuildContext context) { return GestureDetector( - onVerticalDragUpdate: (details){ - }, + onVerticalDragUpdate: (details) {}, child: Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.end, @@ -149,20 +122,23 @@ class MapUtilityScreen extends StatelessWidget { spacing: 4.h, children: [ titleString.toText21( - weight: FontWeight.w600, - color: AppColors.textColor, - ), + weight: FontWeight.w600, + color: AppColors.textColor, + ), subTitleString.needTranslation.toText12( - fontWeight: FontWeight.w500, - color: AppColors.greyTextColor, - ) + fontWeight: FontWeight.w500, + color: AppColors.greyTextColor, + ) ], ), CustomButton( - text: confirmButtonString.needTranslation, - onPressed: () { - ///indicates that the screen has resulted success and should be closed - Navigator.pop(context,true); + text: confirmButtonString.needTranslation, + onPressed: () { + if (onSubmitted != null) { + onSubmitted!(); + } else { + Navigator.pop(context, true); + } }, ) ], @@ -190,8 +166,6 @@ class MapUtilityScreen extends StatelessWidget { ); } - - textPlaceInput(context) { return Consumer(builder: (_, vm, __) { return SizedBox( @@ -200,8 +174,7 @@ class MapUtilityScreen extends StatelessWidget { labelText: "Enter Pickup Location Manually".needTranslation, hintText: "Enter Pickup Location".needTranslation, controller: TextEditingController( - text: vm.geocodeResponse?.results.first.formattedAddress ?? - vm.selectedPrediction?.description, + text: vm.geocodeResponse?.results.first.formattedAddress ?? vm.selectedPrediction?.description, ), leadingIcon: AppAssets.location_pickup, isAllowLeadingIcon: true, -- 2.30.2 From fb69723a659fe3ae46437054633fed85d3c8bd89 Mon Sep 17 00:00:00 2001 From: Sultan khan Date: Tue, 25 Nov 2025 14:32:00 +0300 Subject: [PATCH 08/39] e-referral done. --- lib/core/dependencies.dart | 2 +- .../hmg_services/hmg_services_repo.dart | 60 ++++ .../hmg_services/hmg_services_view_model.dart | 90 ++++- .../search_e_referral_req_model.dart | 60 ++++ .../search_e_referral_resp_model.dart | 161 +++++++++ .../ui_models/e_referral_form_model.dart | 6 + .../e_referral/e-referral_validator.dart | 12 +- .../e_referral/e_referral_form_manager.dart | 86 ++++- .../e_referral/e_referral_page_home.dart | 103 ------ .../e_referral/e_referral_search_result.dart | 310 ++++++++++++++++++ .../e_referral/new_e_referral.dart | 184 ++++++++--- .../e_referral/search_e_referral.dart | 134 ++++---- .../e_referral/widget/e-referral_otp.dart | 174 +++++----- .../widget/e_referral_other_details.dart | 23 +- .../widget/e_referral_patient_info.dart | 60 +--- .../widget/e_referral_requester_form.dart | 85 ++--- .../e_referral/widget/e_referral_stepper.dart | 72 ---- .../widget/search_e_referral_form.dart | 137 ++++---- .../widgets/pickup_location.dart | 249 +++++++------- lib/routes/app_routes.dart | 4 +- lib/widgets/image_picker.dart | 1 + .../order_tracking/request_tracking.dart | 75 +---- lib/widgets/stepper/stepper_widget.dart | 71 ++++ 23 files changed, 1458 insertions(+), 701 deletions(-) create mode 100644 lib/features/hmg_services/models/req_models/search_e_referral_req_model.dart create mode 100644 lib/features/hmg_services/models/resq_models/search_e_referral_resp_model.dart delete mode 100644 lib/presentation/e_referral/e_referral_page_home.dart create mode 100644 lib/presentation/e_referral/e_referral_search_result.dart delete mode 100644 lib/presentation/e_referral/widget/e_referral_stepper.dart create mode 100644 lib/widgets/stepper/stepper_widget.dart diff --git a/lib/core/dependencies.dart b/lib/core/dependencies.dart index 73a93c6..2a5c749 100644 --- a/lib/core/dependencies.dart +++ b/lib/core/dependencies.dart @@ -221,7 +221,7 @@ class AppDependencies { ); getIt.registerLazySingleton( - () => HmgServicesViewModel(bookAppointmentsRepo: getIt(), hmgServicesRepo: getIt(), errorHandlerService: getIt()), + () => HmgServicesViewModel(bookAppointmentsRepo: getIt(), hmgServicesRepo: getIt(), errorHandlerService: getIt(), navigationService: getIt()), ); // Screen-specific VMs → Factory diff --git a/lib/features/hmg_services/hmg_services_repo.dart b/lib/features/hmg_services/hmg_services_repo.dart index 6e1d533..4103569 100644 --- a/lib/features/hmg_services/hmg_services_repo.dart +++ b/lib/features/hmg_services/hmg_services_repo.dart @@ -8,6 +8,7 @@ import 'package:hmg_patient_app_new/core/exceptions/api_failure.dart'; import 'package:hmg_patient_app_new/features/hmg_services/models/req_models/check_activation_e_referral_req_model.dart'; import 'package:hmg_patient_app_new/features/hmg_services/models/req_models/cmc_create_new_order_req_model.dart'; import 'package:hmg_patient_app_new/features/hmg_services/models/req_models/order_update_req_model.dart'; +import 'package:hmg_patient_app_new/features/hmg_services/models/req_models/search_e_referral_req_model.dart'; import 'package:hmg_patient_app_new/features/hmg_services/models/resq_models/get_all_cities_resp_model.dart'; import 'package:hmg_patient_app_new/features/hmg_services/models/resq_models/get_cmc_all_orders_resp_model.dart'; import 'package:hmg_patient_app_new/features/hmg_services/models/resq_models/get_cmc_services_resp_model.dart'; @@ -18,6 +19,7 @@ import 'package:provider/provider.dart'; import 'models/req_models/create_e_referral_model.dart'; import 'models/req_models/send_activation_code_ereferral_req_model.dart'; import 'models/resq_models/relationship_type_resp_mode.dart'; +import 'models/resq_models/search_e_referral_resp_model.dart'; abstract class HmgServicesRepo { Future>>> getAllComprehensiveCheckupOrders(); @@ -56,6 +58,10 @@ abstract class HmgServicesRepo { Future>> createEReferral(CreateEReferralRequestModel requestModel); + + Future>>> searchEReferral(SearchEReferralRequestModel requestModel); + + } class HmgServicesRepoImp implements HmgServicesRepo { @@ -757,4 +763,58 @@ class HmgServicesRepoImp implements HmgServicesRepo { return Left(UnknownFailure(e.toString())); } } + + + + @override + Future>>> searchEReferral(SearchEReferralRequestModel requestBody) async { + + + try { + GenericApiModel>? apiResponse; + Failure? failure; + + await apiClient.post( + ApiConsts.getEReferrals, + body: requestBody.toJson(), + onFailure: (error, statusCode, {messageStatus, failureType}) { + failure = failureType; + loggerService.logError("EReferral Services API Failed: $error, Status: $statusCode"); + }, + onSuccess: (response, statusCode, {messageStatus, errorMessage}) { + try { + List searchReferral = []; + + if (response['List_EReferrals'] != null && response['List_EReferrals'] is List) { + final servicesList = response['List_EReferrals'] as List; + + for (var serviceJson in servicesList) { + if (serviceJson is Map) { + searchReferral.add(SearchEReferralResponseModel.fromJson(serviceJson)); + } + } + } + + apiResponse = GenericApiModel>( + messageStatus: messageStatus, + statusCode: statusCode, + errorMessage: errorMessage, + data: searchReferral, + ); + } catch (e) { + loggerService.logError("Error parsing E-Referral services: ${e.toString()}"); + failure = DataParsingFailure(e.toString()); + } + }, + ); + + if (failure != null) return Left(failure!); + if (apiResponse == null) return Left(ServerFailure("Unknown error")); + return Right(apiResponse!); + } catch (e) { + log("Unknown error in Search Referral: ${e.toString()}"); + return Left(UnknownFailure(e.toString())); + } + } + } diff --git a/lib/features/hmg_services/hmg_services_view_model.dart b/lib/features/hmg_services/hmg_services_view_model.dart index 1e97a63..81cd060 100644 --- a/lib/features/hmg_services/hmg_services_view_model.dart +++ b/lib/features/hmg_services/hmg_services_view_model.dart @@ -1,16 +1,20 @@ import 'package:flutter/material.dart'; import 'package:hmg_patient_app_new/core/common_models/generic_api_model.dart'; +import 'package:hmg_patient_app_new/core/enums.dart'; import 'package:hmg_patient_app_new/features/book_appointments/book_appointments_repo.dart'; import 'package:hmg_patient_app_new/features/hmg_services/hmg_services_repo.dart'; import 'package:hmg_patient_app_new/features/hmg_services/models/req_models/create_e_referral_model.dart'; import 'package:hmg_patient_app_new/features/hmg_services/models/req_models/cmc_create_new_order_req_model.dart'; import 'package:hmg_patient_app_new/features/hmg_services/models/req_models/order_update_req_model.dart'; +import 'package:hmg_patient_app_new/features/hmg_services/models/req_models/search_e_referral_req_model.dart'; import 'package:hmg_patient_app_new/features/hmg_services/models/req_models/send_activation_code_ereferral_req_model.dart'; import 'package:hmg_patient_app_new/features/hmg_services/models/resq_models/get_all_cities_resp_model.dart'; import 'package:hmg_patient_app_new/features/hmg_services/models/resq_models/get_cmc_all_orders_resp_model.dart'; import 'package:hmg_patient_app_new/features/hmg_services/models/resq_models/get_cmc_services_resp_model.dart'; +import 'package:hmg_patient_app_new/features/hmg_services/models/resq_models/search_e_referral_resp_model.dart'; import 'package:hmg_patient_app_new/features/my_appointments/models/resp_models/hospital_model.dart'; import 'package:hmg_patient_app_new/services/error_handler_service.dart'; +import 'package:hmg_patient_app_new/services/navigation_service.dart'; import 'models/req_models/check_activation_e_referral_req_model.dart'; import 'models/resq_models/relationship_type_resp_mode.dart'; @@ -19,8 +23,9 @@ class HmgServicesViewModel extends ChangeNotifier { final HmgServicesRepo hmgServicesRepo; final BookAppointmentsRepo bookAppointmentsRepo; final ErrorHandlerService errorHandlerService; + final NavigationService navigationService; + HmgServicesViewModel({required this.bookAppointmentsRepo, required this.hmgServicesRepo, required this.errorHandlerService, required this.navigationService}); - HmgServicesViewModel({required this.bookAppointmentsRepo, required this.hmgServicesRepo, required this.errorHandlerService}); bool isCmcOrdersLoading = false; bool isCmcServicesLoading = false; @@ -51,8 +56,9 @@ class HmgServicesViewModel extends ChangeNotifier { List relationTypes =[]; List getAllCitiesList =[]; + List searchReferralList =[]; - Future getOrdersList() async { + Future getOrdersList() async {} // HHC multiple services selection List selectedHhcServices = []; @@ -702,4 +708,84 @@ class HmgServicesViewModel extends ChangeNotifier { ); } + + + Future searchEReferral({ + required SearchEReferralRequestModel requestModel, + Function(dynamic)? onSuccess, + Function(String)? onError, + }) async { + + notifyListeners(); + + final result = await hmgServicesRepo.searchEReferral(requestModel); + + result.fold( + (failure) async { + + notifyListeners(); + await errorHandlerService.handleError(failure: failure); + if (onError != null) { + onError(failure.toString()); + } + }, + (apiResponse) { + + if (apiResponse.messageStatus == 1) { + searchReferralList = apiResponse.data ?? []; + notifyListeners(); + if (onSuccess != null) { + onSuccess(apiResponse); + } + } else { + notifyListeners(); + if (onError != null) { + onError(apiResponse.errorMessage ?? 'Unknown error'); + } + } + }, + ); + } + + Future navigateToOTPScreen( + {required OTPTypeEnum otpTypeEnum, + required String phoneNumber, + required String loginToken, + required Function onSuccess, + }) async { + + navigationService.pushToOtpScreen( + phoneNumber: phoneNumber, + isFormFamilyFile: false, + checkActivationCode: (int activationCode) async { + + checkEReferralActivationCode( + requestModel: CheckActivationCodeForEReferralRequestModel( + logInTokenID: loginToken, + activationCode: activationCode.toString(), + ), + onSuccess: (GenericApiModel response) { + onSuccess(); + }, + onError: (String errorMessage) { + print(errorMessage); + }, + ); + }, + onResendOTPPressed: (String phoneNumber) async { + // await sendActivationCode( + // otpTypeEnum: otpTypeEnum, + // phoneNumber: phoneNumberController.text, + // nationalIdOrFileNumber: nationalIdController.text, + // isForRegister: isComingFromRegister, + // isComingFromResendOTP: true, + // payload: payload, + // isFormFamilyFile: isFormFamilyFile, + // isExcludedUser: isExcludedUser, + // responseID: responseID, + // ); + }, + ); + } + } diff --git a/lib/features/hmg_services/models/req_models/search_e_referral_req_model.dart b/lib/features/hmg_services/models/req_models/search_e_referral_req_model.dart new file mode 100644 index 0000000..deb3a92 --- /dev/null +++ b/lib/features/hmg_services/models/req_models/search_e_referral_req_model.dart @@ -0,0 +1,60 @@ +class SearchEReferralRequestModel { + String? patientMobileNumber; + double? versionID; + int? channel; + int? languageID; + String? iPAdress; + String? generalid; + int? patientOutSA; + dynamic sessionID; + bool? isDentalAllowedBackend; + int? deviceTypeID; + int? referralNumber; + String? identificationNo; + + SearchEReferralRequestModel( + {this.patientMobileNumber, + this.versionID, + this.channel, + this.languageID, + this.iPAdress, + this.generalid, + this.patientOutSA, + this.sessionID, + this.isDentalAllowedBackend, + this.deviceTypeID, + this.referralNumber, + this.identificationNo}); + + SearchEReferralRequestModel.fromJson(Map json) { + patientMobileNumber = json['PatientMobileNumber']; + versionID = json['VersionID']; + channel = json['Channel']; + languageID = json['LanguageID']; + iPAdress = json['IPAdress']; + generalid = json['generalid']; + patientOutSA = json['PatientOutSA']; + sessionID = json['SessionID']; + isDentalAllowedBackend = json['isDentalAllowedBackend']; + deviceTypeID = json['DeviceTypeID']; + referralNumber = json['ReferralNumber']; + identificationNo = json['IdentificationNo']; + } + + Map toJson() { + final Map data = new Map(); + data['PatientMobileNumber'] = this.patientMobileNumber; + data['VersionID'] = this.versionID; + data['Channel'] = this.channel; + data['LanguageID'] = this.languageID; + data['IPAdress'] = this.iPAdress; + data['generalid'] = this.generalid; + data['PatientOutSA'] = this.patientOutSA; + data['SessionID'] = this.sessionID; + data['isDentalAllowedBackend'] = this.isDentalAllowedBackend; + data['DeviceTypeID'] = this.deviceTypeID; + data['ReferralNumber'] = this.referralNumber; + data['IdentificationNo'] = this.identificationNo; + return data; + } +} diff --git a/lib/features/hmg_services/models/resq_models/search_e_referral_resp_model.dart b/lib/features/hmg_services/models/resq_models/search_e_referral_resp_model.dart new file mode 100644 index 0000000..df72930 --- /dev/null +++ b/lib/features/hmg_services/models/resq_models/search_e_referral_resp_model.dart @@ -0,0 +1,161 @@ +import 'dart:convert'; + +class SearchEReferralResponseModel { + dynamic acceptedBrachCode; + dynamic acceptedBranchName; + dynamic acceptedBranchNameAr; + dynamic channel; + dynamic identityCardAttachment; + String? identityNumber; + dynamic insuranceCardAttachment; + bool? isInsuredPatient; + List? medicalReportAttachment; + String? otherRelationship; + String? patientContactNo; + int? patientId; + String? patientName; + dynamic preferredBranchCode; + dynamic preferredBranchName; + String? referralDate; + int? referralNumber; + RelationshipType? relationshipType; + String? requesterContactNo; + String? requesterName; + String? status; + String? statusAr; + + SearchEReferralResponseModel({ + this.acceptedBrachCode, + this.acceptedBranchName, + this.acceptedBranchNameAr, + this.channel, + this.identityCardAttachment, + this.identityNumber, + this.insuranceCardAttachment, + this.isInsuredPatient, + this.medicalReportAttachment, + this.otherRelationship, + this.patientContactNo, + this.patientId, + this.patientName, + this.preferredBranchCode, + this.preferredBranchName, + this.referralDate, + this.referralNumber, + this.relationshipType, + this.requesterContactNo, + this.requesterName, + this.status, + this.statusAr, + }); + + factory SearchEReferralResponseModel.fromRawJson(String str) => SearchEReferralResponseModel.fromJson(json.decode(str)); + + String toRawJson() => json.encode(toJson()); + + factory SearchEReferralResponseModel.fromJson(Map json) => SearchEReferralResponseModel( + acceptedBrachCode: json["AcceptedBrachCode"], + acceptedBranchName: json["AcceptedBranchName"], + acceptedBranchNameAr: json["AcceptedBranchNameAr"], + channel: json["Channel"], + identityCardAttachment: json["IdentityCardAttachment"], + identityNumber: json["IdentityNumber"], + insuranceCardAttachment: json["InsuranceCardAttachment"], + isInsuredPatient: json["IsInsuredPatient"], + medicalReportAttachment: json["MedicalReportAttachment"] == null ? [] : List.from(json["MedicalReportAttachment"]!.map((x) => MedicalReportAttachment.fromJson(x))), + otherRelationship: json["OtherRelationship"], + patientContactNo: json["PatientContactNo"], + patientId: json["PatientId"], + patientName: json["PatientName"], + preferredBranchCode: json["PreferredBranchCode"], + preferredBranchName: json["PreferredBranchName"], + referralDate: json["ReferralDate"], + referralNumber: json["ReferralNumber"], + relationshipType: json["RelationshipType"] == null ? null : RelationshipType.fromJson(json["RelationshipType"]), + requesterContactNo: json["RequesterContactNo"], + requesterName: json["RequesterName"], + status: json["Status"], + statusAr: json["StatusAr"], + ); + + Map toJson() => { + "AcceptedBrachCode": acceptedBrachCode, + "AcceptedBranchName": acceptedBranchName, + "AcceptedBranchNameAr": acceptedBranchNameAr, + "Channel": channel, + "IdentityCardAttachment": identityCardAttachment, + "IdentityNumber": identityNumber, + "InsuranceCardAttachment": insuranceCardAttachment, + "IsInsuredPatient": isInsuredPatient, + "MedicalReportAttachment": medicalReportAttachment == null ? [] : List.from(medicalReportAttachment!.map((x) => x.toJson())), + "OtherRelationship": otherRelationship, + "PatientContactNo": patientContactNo, + "PatientId": patientId, + "PatientName": patientName, + "PreferredBranchCode": preferredBranchCode, + "PreferredBranchName": preferredBranchName, + "ReferralDate": referralDate, + "ReferralNumber": referralNumber, + "RelationshipType": relationshipType?.toJson(), + "RequesterContactNo": requesterContactNo, + "RequesterName": requesterName, + "Status": status, + "StatusAr": statusAr, + }; +} + +class MedicalReportAttachment { + String? base64String; + String? fileName; + + MedicalReportAttachment({ + this.base64String, + this.fileName, + }); + + factory MedicalReportAttachment.fromRawJson(String str) => MedicalReportAttachment.fromJson(json.decode(str)); + + String toRawJson() => json.encode(toJson()); + + factory MedicalReportAttachment.fromJson(Map json) => MedicalReportAttachment( + base64String: json["Base64String"], + fileName: json["FileName"], + ); + + Map toJson() => { + "Base64String": base64String, + "FileName": fileName, + }; +} + +class RelationshipType { + int? id; + String? text; + String? textAr; + String? textEn; + + RelationshipType({ + this.id, + this.text, + this.textAr, + this.textEn, + }); + + factory RelationshipType.fromRawJson(String str) => RelationshipType.fromJson(json.decode(str)); + + String toRawJson() => json.encode(toJson()); + + factory RelationshipType.fromJson(Map json) => RelationshipType( + id: json["ID"], + text: json["Text"], + textAr: json["Text_Ar"], + textEn: json["Text_En"], + ); + + Map toJson() => { + "ID": id, + "Text": text, + "Text_Ar": textAr, + "Text_En": textEn, + }; +} diff --git a/lib/features/hmg_services/models/ui_models/e_referral_form_model.dart b/lib/features/hmg_services/models/ui_models/e_referral_form_model.dart index fded059..32964b1 100644 --- a/lib/features/hmg_services/models/ui_models/e_referral_form_model.dart +++ b/lib/features/hmg_services/models/ui_models/e_referral_form_model.dart @@ -9,7 +9,10 @@ import 'package:hmg_patient_app_new/features/my_appointments/models/resp_models/ class ReferralFormData { String requesterName = ''; String requesterPhone = ''; + String searchPhone =''; CountryEnum countryEnum = CountryEnum.saudiArabia; + CountryEnum patientCountryEnum = CountryEnum.saudiArabia; + GetAllRelationshipTypeResponseModel? relationship; String otherRelationshipName = ''; @@ -39,4 +42,7 @@ class FormValidationErrors { String? medicalReport; String? branch; String? insuredDocument; + + String? searchValue; + String? searchPhone; } \ No newline at end of file diff --git a/lib/presentation/e_referral/e-referral_validator.dart b/lib/presentation/e_referral/e-referral_validator.dart index 78efb49..3e3399d 100644 --- a/lib/presentation/e_referral/e-referral_validator.dart +++ b/lib/presentation/e_referral/e-referral_validator.dart @@ -10,12 +10,12 @@ class ReferralValidator { errors.requesterName = 'Referral requester name is required'; } - if (formData.requesterPhone.trim().isEmpty) { - errors.requesterPhone = 'Phone number is required'; - } else if (formData.countryEnum.countryCode == '966' && - !_isValidSaudiPhone(formData.requesterPhone)) { - errors.requesterPhone = 'Please enter a valid Saudi phone number (5xxxxxxxx)'; - } + // if (formData.requesterPhone.trim().isEmpty) { + // errors.requesterPhone = 'Phone number is required'; + // } else if (formData.countryEnum.countryCode == '966' && + // !_isValidSaudiPhone(formData.requesterPhone)) { + // errors.requesterPhone = 'Please enter a valid Saudi phone number (5xxxxxxxx)'; + // } if (formData.relationship == null) { errors.relationship = 'Please select a relationship'; diff --git a/lib/presentation/e_referral/e_referral_form_manager.dart b/lib/presentation/e_referral/e_referral_form_manager.dart index a69a2fe..f7093c5 100644 --- a/lib/presentation/e_referral/e_referral_form_manager.dart +++ b/lib/presentation/e_referral/e_referral_form_manager.dart @@ -16,7 +16,16 @@ class ReferralFormManager extends ChangeNotifier { ReferralFormData get formData => _formData; FormValidationErrors get errors => _errors; - // Field-specific update methods that don't notify listeners immediately + + int _searchCriteria = 0; // 0 = Identification Number, 1 = Referral Number + String? _searchValue; + String? _searchPhone; + +// Getters + int get searchCriteria => _searchCriteria; + String? get searchValue => _searchValue; + String? get searchPhone => _searchPhone; + void updateRequesterName(String value) { _formData.requesterName = value; _clearError('requesterName'); @@ -30,9 +39,13 @@ class ReferralFormManager extends ChangeNotifier { void updateCountryEnum(CountryEnum value) { _formData.countryEnum = value; } + void updatePatientCountryEnum(CountryEnum value) { + _formData.patientCountryEnum = value; + } void updateRelationship(GetAllRelationshipTypeResponseModel? value) { _formData.relationship = value; + notifyListeners(); _clearError('relationship'); } @@ -59,6 +72,7 @@ class ReferralFormManager extends ChangeNotifier { void updatePatientCity(GetAllCitiesResponseModel? value) { _formData.patientCity = value; _clearError('patientCity'); + notifyListeners(); } void updateBranch(HospitalsModel? value) { @@ -83,6 +97,7 @@ class ReferralFormManager extends ChangeNotifier { if (index >= 0 && index < _formData.medicalReportImages.length) { _formData.medicalReportImages.removeAt(index); } + notifyListeners(); } void addInsuranceDocument(EReferralAttachment attachment) { @@ -94,8 +109,11 @@ class ReferralFormManager extends ChangeNotifier { if (index >= 0 && index < _formData.insuredPatientImages.length) { _formData.insuredPatientImages.removeAt(index); } + + notifyListeners(); } + // Error management void setErrors(FormValidationErrors newErrors) { _errors.requesterName = newErrors.requesterName; @@ -203,4 +221,70 @@ class ReferralFormManager extends ChangeNotifier { notifyListeners(); } } + void updateSearchCriteria(int criteria) { + _searchCriteria = criteria; + _errors.searchValue = _validateSearchValue(); + notifyListeners(); + } + + void updateSearchValue(String value) { + _searchValue = value; + _errors.searchValue = _validateSearchValue(); + } + void updateSearchPhone(String value) { + _searchPhone = value; + _errors.searchPhone = _validateSearchPhone(); + } + + String? _validateSearchValue() { + if (_searchValue == null || _searchValue!.isEmpty) { + return _searchCriteria == 0 + ? 'Identification Number is required' + : 'Referral Number is required'; + } + + if (_searchCriteria == 0) { + // Validate identification number format + if (!_isValidIdentificationNumber(_searchValue!)) { + return 'Please enter a valid identification number'; + } + } else { + // Validate referral number format + if (!_isValidReferralNumber(_searchValue!)) { + return 'Please enter a valid referral number'; + } + } + + return null; + } + + bool _isValidIdentificationNumber(String value) { + // Add your identification number validation logic + return value.isNotEmpty; // Basic validation + } + + bool _isValidReferralNumber(String value) { + // Add your referral number validation logic + return value.isNotEmpty; // Basic validation + } + + void validateSearchForm() { + _errors.searchValue = _validateSearchValue(); + _errors.searchPhone = _validateSearchPhone(); + notifyListeners(); + } + + String? _validateSearchPhone() { + if (_searchPhone == null || _searchPhone!.isEmpty) { + return 'Phone number is required'; + } + return null; + } + bool get isSearchFormInValid { + return ( + _errors.searchValue != null && + _errors.searchValue!.isNotEmpty || + _errors.searchPhone != null && + _errors.searchPhone!.isNotEmpty); + } } \ No newline at end of file diff --git a/lib/presentation/e_referral/e_referral_page_home.dart b/lib/presentation/e_referral/e_referral_page_home.dart deleted file mode 100644 index d41defb..0000000 --- a/lib/presentation/e_referral/e_referral_page_home.dart +++ /dev/null @@ -1,103 +0,0 @@ -import 'dart:ui'; -import 'package:easy_localization/easy_localization.dart'; -import 'package:flutter/material.dart'; -import 'package:hmg_patient_app_new/core/app_export.dart'; -import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; -import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; -import 'package:hmg_patient_app_new/features/contact_us/contact_us_view_model.dart'; -import 'package:hmg_patient_app_new/generated/locale_keys.g.dart'; -import 'package:hmg_patient_app_new/presentation/e_referral/new_e_referral.dart'; -import 'package:hmg_patient_app_new/presentation/e_referral/search_e_referral.dart'; -import 'package:hmg_patient_app_new/theme/colors.dart'; -import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart'; -import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart'; -import 'package:hmg_patient_app_new/widgets/custom_tab_bar.dart'; -import 'package:provider/provider.dart'; - -class EReferralPage extends StatefulWidget { - const EReferralPage({super.key}); - - @override - _EReferralPageState createState() => _EReferralPageState(); -} - -class _EReferralPageState extends State { - @override - void initState() { - super.initState(); - } - - @override - void dispose() { - super.dispose(); - } - - bool isNewReferral = true; - VoidCallback? onNextStep; - int _currentPageIndex = 0; - int activeTabIndex = 0; - @override - Widget build(BuildContext context) { - return Scaffold( - backgroundColor: AppColors.bgScaffoldColor, - body: CollapsingListView( - title: "E Referral".needTranslation, - child: Consumer(builder: (context, contactUsVM, child) { - return Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - SizedBox(height: 16.h), - CustomTabBar( - activeTextColor: AppColors.primaryRedColor, - activeBackgroundColor: AppColors.primaryRedColor.withValues(alpha: .1), - tabs: [ - CustomTabBarModel(null, "New Referral".needTranslation), - CustomTabBarModel(null, "Search Referral".needTranslation), - ], - onTabChange: (index) { - activeTabIndex =index; - setState(() { - - }); - }, - ).paddingSymmetrical(24.h, 0.h), - SizedBox(height: 24.h), - activeTabIndex ==0 ? NewReferralPage( - onNextStep: (nextStep) { - WidgetsBinding.instance.addPostFrameCallback((_) { - setState(() { - onNextStep = nextStep; - }); - }); - }, - onStepChanged: (int value) { - setState(() { - _currentPageIndex = value; - }); - }, - ) : - SearchEReferralPage( - onNextStep: (onNextStep) { - WidgetsBinding.instance.addPostFrameCallback((_) { - setState(() { - onNextStep = onNextStep; - }); - }); - }, - ) - ], - ); - }), - ), - bottomNavigationBar: Padding( - padding: EdgeInsets.all(20.h), - child: CustomButton( - text:activeTabIndex == 0 ? _currentPageIndex >= 2 ? LocaleKeys.submit.tr() : LocaleKeys.next.tr() : LocaleKeys.search.tr(), - onPressed: onNextStep ?? () {}, - backgroundColor: AppColors.primaryRedColor, - borderColor: AppColors.primaryRedColor, - textColor: AppColors.whiteColor, - )), - ); - } -} diff --git a/lib/presentation/e_referral/e_referral_search_result.dart b/lib/presentation/e_referral/e_referral_search_result.dart new file mode 100644 index 0000000..3f3966e --- /dev/null +++ b/lib/presentation/e_referral/e_referral_search_result.dart @@ -0,0 +1,310 @@ +import 'package:easy_localization/easy_localization.dart'; +import 'package:flutter/material.dart'; +import 'package:hmg_patient_app_new/core/app_export.dart'; +import 'package:hmg_patient_app_new/core/utils/date_util.dart'; +import 'package:hmg_patient_app_new/core/utils/utils.dart'; +import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; +import 'package:hmg_patient_app_new/features/hmg_services/hmg_services_view_model.dart'; +import 'package:hmg_patient_app_new/features/hmg_services/models/resq_models/search_e_referral_resp_model.dart'; +import 'package:hmg_patient_app_new/theme/colors.dart'; +import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart'; +import 'package:provider/provider.dart'; +import 'package:smooth_corner/smooth_corner.dart'; + +class SearchResultPage extends StatefulWidget { + const SearchResultPage({super.key}); + + @override + _SearchResultPageState createState() => _SearchResultPageState(); +} + +class _SearchResultPageState extends State { + HmgServicesViewModel? hmgServicesVM; + + String _selectedFilter = 'All'; + + @override + void initState() { + hmgServicesVM = context.read(); + super.initState(); + } + + @override + Widget build(BuildContext context) { + return CollapsingListView( + title: "Search Result".needTranslation, + child: Column( + children: [ + // List of referrals + ListView.builder( + padding: EdgeInsets.zero, + shrinkWrap: true, + itemCount: hmgServicesVM?.searchReferralList.length, + itemBuilder: (context, index) { + return _buildReferralCard(hmgServicesVM!.searchReferralList[index]); + }, + ), + ], + ), + ); + } + + Widget _buildReferralCard(SearchEReferralResponseModel referral) { + return SmoothCard( + borderRadius: BorderRadius.circular(16.h), + margin: EdgeInsets.symmetric(horizontal: 16, vertical: 8), + color: AppColors.whiteColor, + child: Padding( + padding: EdgeInsets.all(16.h), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + + 'Referral No ${referral.referralNumber}'.needTranslation.toText18(isBold: true, color: AppColors.textColor), + + + Container( + padding: EdgeInsets.symmetric(horizontal: 12, vertical: 6), + decoration: BoxDecoration( + color: _getStatusColor(referral.status!), + borderRadius: BorderRadius.circular(20), + ), + child: + referral.status!.toText12(color: AppColors.whiteColor, + // style: TextStyle( + // color: Colors.white, + // fontSize: 12, + // fontWeight: FontWeight.w500, + // ), + ), + ), + ], + ), + + SizedBox(height: 16), + + // Patient information + Row( + children: [ + Container( + width: 50, + height: 50, + decoration: BoxDecoration( + color: AppColors.lightGrayBGColor, + shape: BoxShape.circle, + ), + child: Icon( + Icons.person, + color: AppColors.lightGrayBGColor, + size: 30, + ), + ), + SizedBox(width: 12), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + //Text( + referral.patientName!.toText16(isBold: true, color: AppColors.textColor), + // style: TextStyle( + // fontSize: 16, + // fontWeight: FontWeight.bold, + // ), + // ), + SizedBox(height: 4), + // Text( + 'ID: ${referral.identityNumber}'.toText14(color: AppColors.greyTextColor), + // style: TextStyle( + // color: Colors.grey[600], + // ), + // ), + ], + ), + ), + ], + ), + + SizedBox(height: 16), + + // Details row + Row( + children: [ + _buildDetailItem( + Icons.phone, + referral.patientContactNo!, + ), + SizedBox(width: 16), + _buildDetailItem(Icons.calendar_today, Utils.getDayMonthYearDateFormatted(DateUtil.convertStringToDateNoTimeZone(referral.referralDate!))), + ], + ), + + SizedBox(height: 16), + + // Requester information + Container( + padding: EdgeInsets.all(5.h), + decoration: BoxDecoration( + color: AppColors.lightGrayBGColor, + borderRadius: BorderRadius.circular(8), + ), + child: Row( + children: [ + Icon( + Icons.person_outline, + color: Colors.grey[600], + size: 20, + ), + SizedBox(width: 8), + //Text( + 'Requester: ${referral.requesterName}'.toText14(), + // style: TextStyle( + // color: Colors.grey[700], + // ), + // ), + SizedBox(width: 16), + Icon( + Icons.phone, + color: Colors.grey[600], + size: 16, + ), + SizedBox(width: 4), + // Text( + referral.requesterContactNo!.toText14(), + // style: TextStyle( + // color: Colors.grey[700], + // ), + // ), + ], + ), + ), + + SizedBox(height: 12), + + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Row( + children: [ + Icon( + Icons.group, + color: Colors.grey[600], + size: 16, + ), + SizedBox(width: 4), + //Text( + 'Relationship: ${referral.relationshipType?.text}'.toText14(color:AppColors.greyTextColor), + // style: TextStyle( + // color: Colors.grey[700], + // fontSize: 14, + // ), + // ), + ], + ), + Row( + children: [ + Icon( + Icons.attach_file, + color: Colors.grey[600], + size: 16, + ), + SizedBox(width: 4), + // Text( + '${referral.medicalReportAttachment?.length} file(s)'.toText14(color:AppColors.greyTextColor), + // style: TextStyle( + // color: Colors.grey[700], + // fontSize: 14, + // ), + // ), + ], + ), + ], + ), + + SizedBox(height: 16), + + // Action buttons + ], + ), + ), + ); + } + + Widget _buildDetailItem(IconData icon, String text) { + return Row( + children: [ + Icon( + icon, + color: Colors.grey[600], + size: 16, + ), + SizedBox(width: 4), + // Text( + text.toText14(color: AppColors.greyTextColor), + // style: TextStyle( + // color: Colors.grey[700], + // ), + // ), + ], + ); + } + + Color _getStatusColor(String status) { + switch (status) { + case 'Pending': + return AppColors.alertColor; + case 'Completed': + return AppColors.bgGreenColor; + case 'Rejected': + return AppColors.primaryRedColor; + default: + return AppColors.lightGrayColor; + } + } + + void _showFilterOptions() { + showModalBottomSheet( + context: context, + builder: (context) { + return Container( + padding: EdgeInsets.all(16), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Text( + 'Filter Results', + style: TextStyle( + fontSize: 18, + fontWeight: FontWeight.bold, + ), + ), + SizedBox(height: 16), + _buildFilterOption('All'), + _buildFilterOption('Pending'), + _buildFilterOption('Completed'), + _buildFilterOption('Rejected'), + ], + ), + ); + }, + ); + } + + Widget _buildFilterOption(String filter) { + return ListTile( + leading: Icon( + _selectedFilter == filter ? Icons.radio_button_checked : Icons.radio_button_off, + color: _selectedFilter == filter ? Colors.blue[700] : Colors.grey, + ), + title: Text(filter), + onTap: () { + setState(() { + _selectedFilter = filter; + }); + Navigator.pop(context); + }, + ); + } +} diff --git a/lib/presentation/e_referral/new_e_referral.dart b/lib/presentation/e_referral/new_e_referral.dart index ca96153..e48d8ca 100644 --- a/lib/presentation/e_referral/new_e_referral.dart +++ b/lib/presentation/e_referral/new_e_referral.dart @@ -1,27 +1,35 @@ - +import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; +import 'package:hmg_patient_app_new/core/app_export.dart'; +import 'package:hmg_patient_app_new/core/common_models/generic_api_model.dart'; +import 'package:hmg_patient_app_new/core/utils/utils.dart'; +import 'package:hmg_patient_app_new/extensions/route_extensions.dart'; +import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; import 'package:hmg_patient_app_new/features/authentication/authentication_view_model.dart'; import 'package:hmg_patient_app_new/features/habib_wallet/habib_wallet_view_model.dart'; import 'package:hmg_patient_app_new/features/hmg_services/hmg_services_view_model.dart'; import 'package:hmg_patient_app_new/features/hmg_services/models/req_models/create_e_referral_model.dart'; import 'package:hmg_patient_app_new/features/hmg_services/models/ui_models/e_referral_form_model.dart'; +import 'package:hmg_patient_app_new/generated/locale_keys.g.dart'; +import 'package:hmg_patient_app_new/presentation/e_referral/search_e_referral.dart'; import 'package:hmg_patient_app_new/presentation/e_referral/widget/e-referral_otp.dart'; import 'package:hmg_patient_app_new/presentation/e_referral/widget/e_referral_other_details.dart'; import 'package:hmg_patient_app_new/presentation/e_referral/widget/e_referral_patient_info.dart'; import 'package:hmg_patient_app_new/presentation/e_referral/widget/e_referral_requester_form.dart'; -import 'package:hmg_patient_app_new/presentation/e_referral/widget/e_referral_stepper.dart'; +import 'package:hmg_patient_app_new/theme/colors.dart'; +import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart'; +import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart'; +import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart'; +import 'package:hmg_patient_app_new/widgets/loader/bottomsheet_loader.dart'; +import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart'; +import 'package:hmg_patient_app_new/widgets/stepper/stepper_widget.dart'; import 'package:provider/provider.dart'; import 'e-referral_validator.dart'; import 'e_referral_form_manager.dart'; class NewReferralPage extends StatefulWidget { - final Function(VoidCallback) onNextStep; - final Function(int) onStepChanged; - const NewReferralPage({ super.key, - required this.onNextStep, - required this.onStepChanged, }); @override @@ -33,17 +41,14 @@ class _NewReferralPageState extends State { final ReferralFormManager _formManager = ReferralFormManager(); // Use manager int _currentStep = 0; - final List _steps = [ - 'Requester Info', - 'Patient Information', - 'Other details' - ]; + double widthOfOneState = ((ResponsiveExtension.screenWidth) / 3) - (20.h); + + final List _steps = ['Requester Info', 'Patient Information', 'Other details']; @override void initState() { super.initState(); _loadData(); - widget.onNextStep(_handleNextStep); } void _handleNextStep() { @@ -52,8 +57,7 @@ class _NewReferralPageState extends State { if (_validateCurrentStep()) { OTPService.openOTPScreen( context: context, - phoneNumber: _formManager.formData.requesterPhone ?? '', - countryEnum: _formManager.formData.countryEnum, + formManager: _formManager, onSuccess: _proceedToNextStep, ); } @@ -99,44 +103,45 @@ class _NewReferralPageState extends State { duration: const Duration(milliseconds: 300), curve: Curves.easeInOut, ); - setState(() { - _currentStep++; - }); - widget.onStepChanged(_currentStep); + // setState(() { + _currentStep++; + // }); + // widget.onStepChanged(_currentStep); } void _submitReferral() { - - CreateEReferralRequestModel createReferrralRequestModel = - CreateEReferralRequestModel( + CreateEReferralRequestModel createReferralRequestModel = CreateEReferralRequestModel( isInsuredPatient: _formManager.formData.isPatientInsured, - cityCode: _formManager.formData.patientCity!.iD!.toString(), - cityName: _formManager.formData.patientCity!.description, + cityCode: _formManager.formData.patientCity!.iD!.toString(), + cityName: _formManager.formData.patientCity!.description, requesterName: _formManager.formData.requesterName, - requesterContactNo: _formManager.formData.requesterPhone, + requesterContactNo: _formManager.formData.countryEnum.countryCode + _formManager.formData.requesterPhone, requesterRelationship: _formManager.formData.relationship?.iD, otherRelationship: _formManager.formData.relationship!.iD.toString(), fullName: _formManager.formData.patientName, identificationNo: int.tryParse(_formManager.formData!.patientIdentification ?? '0'), - patientMobileNumber: _formManager.formData.patientPhone, + patientMobileNumber: _formManager.formData.patientCountryEnum.countryCode + _formManager.formData.patientPhone, preferredBranchCode: _formManager.formData.branch!.iD, medicalReportAttachment: _formManager.formData.medicalReportImages, insuranceCardAttachment: _formManager.formData.insuredPatientImages, - preferredBranchName: _formManager.formData.branch!.desciption - ); + preferredBranchName: _formManager.formData.branch!.desciption); final hmgServicesVM = context.read(); + LoaderBottomSheet.showLoader(); + hmgServicesVM.createEReferral( - requestModel: createReferrralRequestModel, - onSuccess: (response) { - print("E-Referral submitted successfully"); + requestModel: createReferralRequestModel, + onSuccess: (GenericApiModel response) { + + showSuccessBottomSheet(int.parse(response.data), hmgServicesVM); + LoaderBottomSheet.hideLoader(); + }, onError: (errorMessage) { // Handle error (e.g., show error message) print(errorMessage); }, ); - } void _loadData() { @@ -152,32 +157,107 @@ class _NewReferralPageState extends State { @override Widget build(BuildContext context) { - return ChangeNotifierProvider.value( - value: _formManager, - child: SizedBox( - height: MediaQuery.of(context).size.height, + return Scaffold( + backgroundColor: AppColors.bgScaffoldColor, + body: CollapsingListView( + title: "E Referral".needTranslation, + isClose: false, + search: () async { + await Navigator.of(context).push( + CustomPageRoute( + page: SearchEReferralPage(), + fullScreenDialog: true, + direction: AxisDirection.down, + ), + ); + }, + bottomChild: Container( + color: Colors.white, + padding: EdgeInsets.all(ResponsiveExtension(20).h), + child: CustomButton( + text: _currentStep <=1 ? LocaleKeys.next.tr() : LocaleKeys.submit.tr(), + // icon: AppAssets.search_icon, + iconColor: Colors.white, + onPressed: () => {_handleNextStep()}, + ), + ), + child: ChangeNotifierProvider.value( + value: _formManager, + child: SizedBox( + height: ResponsiveExtension.screenHeight * 0.65, + child: Column( + children: [ + const SizedBox(height: 8), + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: List.generate(3, (index) { + if (_currentStep == index) { + return StepperWidget(widthOfOneState, AppColors.primaryRedColor, true, 4.h); + } else { + return StepperWidget(widthOfOneState, AppColors.greyLightColor, false, 4.h); + } + })), + Expanded( + child: PageView( + controller: _pageController, + physics: const NeverScrollableScrollPhysics(), + onPageChanged: (index) => { + // setState(() => _currentStep = index) + }, + children: [ + RequesterFormStep(), + PatientInformationStep(), + OtherDetailsStep(), + ], + )), + ], + )), + ))); + // ); + } + + + showSuccessBottomSheet(int requestId, HmgServicesViewModel hmgServicesViewModel) { + return showCommonBottomSheetWithoutHeight( + context, + child: Padding( + padding: EdgeInsets.all(16.w), child: Column( children: [ - const SizedBox(height: 8), - ProgressStepperWidget( - currentStep: _currentStep, - steps: _steps, + Utils.getSuccessWidget(loadingText: "Your Referral has been created Successfully.".needTranslation), + Row( + children: [ + "Here is your Referral #: ".needTranslation.toText14( + color: AppColors.textColorLight, + weight: FontWeight.w500, + ), + SizedBox(width: 4.w), + ("$requestId").toText16(isBold: true), + ], ), - Expanded( - child: PageView( - controller: _pageController, - physics: const NeverScrollableScrollPhysics(), - onPageChanged: (index) => setState(() => _currentStep = index), - children: [ - RequesterFormStep(), - PatientInformationStep(), - OtherDetailsStep(), - ], - ), + SizedBox(height: 24.h), + Row( + children: [ + Expanded( + child: CustomButton( + height: 56.h, + text: LocaleKeys.ok.tr(), + onPressed: () { + context.pop(); + context.pop(); + _currentStep =0; + }, + textColor: AppColors.whiteColor, + ), + ), + ], ), ], ), ), + isCloseButtonVisible: false, + isDismissible: false, + isFullScreen: false, ); } -} \ No newline at end of file +} diff --git a/lib/presentation/e_referral/search_e_referral.dart b/lib/presentation/e_referral/search_e_referral.dart index fabf115..ea749ee 100644 --- a/lib/presentation/e_referral/search_e_referral.dart +++ b/lib/presentation/e_referral/search_e_referral.dart @@ -1,19 +1,24 @@ - +import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; +import 'package:hmg_patient_app_new/core/app_assets.dart'; +import 'package:hmg_patient_app_new/core/utils/size_utils.dart'; +import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; import 'package:hmg_patient_app_new/features/hmg_services/hmg_services_view_model.dart'; -import 'package:hmg_patient_app_new/features/hmg_services/models/req_models/create_e_referral_model.dart'; +import 'package:hmg_patient_app_new/features/hmg_services/models/req_models/search_e_referral_req_model.dart'; +import 'package:hmg_patient_app_new/generated/locale_keys.g.dart'; import 'package:hmg_patient_app_new/presentation/e_referral/widget/search_e_referral_form.dart'; +import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart'; +import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart'; +import 'package:hmg_patient_app_new/widgets/loader/bottomsheet_loader.dart'; +import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart'; import 'package:provider/provider.dart'; -import 'e-referral_validator.dart'; import 'e_referral_form_manager.dart'; +import 'e_referral_search_result.dart'; class SearchEReferralPage extends StatefulWidget { - final Function(VoidCallback) onNextStep; - const SearchEReferralPage({ super.key, - required this.onNextStep, }); @override @@ -21,78 +26,95 @@ class SearchEReferralPage extends StatefulWidget { } class _SearchEReferralPageState extends State { - final PageController _pageController = PageController(); - final ReferralFormManager _formManager = ReferralFormManager(); // Use manager - int _currentStep = 0; - - - + // final PageController _pageController = PageController(); + final ReferralFormManager _formManager = ReferralFormManager(); + late HmgServicesViewModel hmgServicesVM; @override void initState() { super.initState(); _loadData(); - widget.onNextStep(_handleNextStep); } - void _handleNextStep() { - _searchReferral(); + void _handleSearch() { + _formManager.validateSearchForm(); + if (!_formManager.isSearchFormInValid) { + _searchReferral(); } + } void _searchReferral() { + SearchEReferralRequestModel searchEReferralReq; - CreateEReferralRequestModel createReferrralRequestModel = - CreateEReferralRequestModel( - isInsuredPatient: _formManager.formData.isPatientInsured, - cityCode: _formManager.formData.patientCity!.iD!.toString(), - cityName: _formManager.formData.patientCity!.description, - requesterName: _formManager.formData.requesterName, - requesterContactNo: _formManager.formData.requesterPhone, - requesterRelationship: _formManager.formData.relationship?.iD, - otherRelationship: _formManager.formData.relationship!.iD.toString(), - fullName: _formManager.formData.patientName, - identificationNo: int.tryParse(_formManager.formData!.patientIdentification ?? '0'), - patientMobileNumber: _formManager.formData.patientPhone, - preferredBranchCode: _formManager.formData.branch!.iD, - medicalReportAttachment: _formManager.formData.medicalReportImages, - insuranceCardAttachment: _formManager.formData.insuredPatientImages, - preferredBranchName: _formManager.formData.branch!.desciption - ); + if (_formManager.searchCriteria == 0) { + searchEReferralReq = SearchEReferralRequestModel( + identificationNo: _formManager.searchValue, + patientMobileNumber: _formManager.formData.countryEnum.countryCode + _formManager.searchPhone!, + referralNumber: 0, + ); + } else { - final hmgServicesVM = context.read(); - hmgServicesVM.createEReferral( - requestModel: createReferrralRequestModel, - onSuccess: (response) { - print("E-Referral submitted successfully"); - }, - onError: (errorMessage) { - // Handle error (e.g., show error message) - print(errorMessage); + searchEReferralReq = SearchEReferralRequestModel(referralNumber: int.parse(_formManager.searchValue!), patientMobileNumber: _formManager.formData.patientPhone, identificationNo: ''); + } + + hmgServicesVM = context.read(); + LoaderBottomSheet.showLoader(); + hmgServicesVM.searchEReferral( + requestModel: searchEReferralReq, + onSuccess: (response) async { + LoaderBottomSheet.hideLoader(); + await Navigator.of(context).push( + CustomPageRoute( + page: SearchResultPage(), + fullScreenDialog: true, + direction: AxisDirection.down, + ), + ); }, - ); + ); } void _loadData() { - + WidgetsBinding.instance.addPostFrameCallback((_) {}); } @override Widget build(BuildContext context) { - return ChangeNotifierProvider.value( - value: _formManager, - child: SizedBox( - height: MediaQuery.of(context).size.height, - child: Column( - children: [ - - Expanded( - child: + return CollapsingListView( + title: "Search E-Referral".needTranslation, + isClose: true, + bottomChild: Container( + color: Colors.white, + padding: EdgeInsets.all(ResponsiveExtension(20).h), + child: CustomButton( + text: LocaleKeys.search.tr(), + icon: AppAssets.search_icon, + iconColor: Colors.white, + onPressed: () => { + _handleSearch() + }, + ), + ), + child: ChangeNotifierProvider.value( + value: _formManager, + child: Column( + children: [ + _buildHeader(), SearchEReferralFormForm(), - ), - ], - ), + ], + )), + ); + } + + Widget _buildHeader() { + return Padding( + padding: const EdgeInsets.all(16.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [SizedBox(height: 8), 'Please enter the required information to search for an e-referral'.needTranslation.toText12()], ), ); } -} \ No newline at end of file + +} diff --git a/lib/presentation/e_referral/widget/e-referral_otp.dart b/lib/presentation/e_referral/widget/e-referral_otp.dart index 3fcac6c..c3f5872 100644 --- a/lib/presentation/e_referral/widget/e-referral_otp.dart +++ b/lib/presentation/e_referral/widget/e-referral_otp.dart @@ -1,8 +1,17 @@ // services/otp_service.dart +import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; +import 'package:hmg_patient_app_new/core/app_assets.dart'; import 'package:hmg_patient_app_new/core/enums.dart'; import 'package:hmg_patient_app_new/core/utils/size_utils.dart'; +import 'package:hmg_patient_app_new/core/utils/validation_utils.dart'; import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; +import 'package:hmg_patient_app_new/generated/locale_keys.g.dart'; +import 'package:hmg_patient_app_new/presentation/e_referral/e_referral_form_manager.dart'; +import 'package:hmg_patient_app_new/theme/colors.dart'; +import 'package:hmg_patient_app_new/widgets/bottomsheet/generic_bottom_sheet.dart'; +import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart'; +import 'package:hmg_patient_app_new/widgets/loader/bottomsheet_loader.dart'; import 'package:provider/provider.dart'; import 'package:hmg_patient_app_new/core/common_models/generic_api_model.dart'; import 'package:hmg_patient_app_new/features/hmg_services/hmg_services_view_model.dart'; @@ -14,92 +23,101 @@ import 'package:hmg_patient_app_new/features/authentication/widgets/otp_verifica class OTPService { static void openOTPScreen({ required BuildContext context, - required String phoneNumber, - required CountryEnum countryEnum, + required ReferralFormManager formManager, required Function onSuccess, }) { - final hmgServicesViewModel = context.read(); - - hmgServicesViewModel.eReferralSendActivationCode( - requestModel: SendActivationCodeForEReferralRequestModel( - patientMobileNumber: int.parse(phoneNumber), - zipCode: countryEnum.countryCode, - patientOutSA: countryEnum.countryCode == '966' ? 0 : 1, - ), - onSuccess: (GenericApiModel response) { - _showOTPVerificationSheet( - context: context, - phoneNumber: phoneNumber, - loginTokenID: response.data, - onSuccess: onSuccess, - ); - }, - onError: (String errorMessage) { - ScaffoldMessenger.of(context).showSnackBar( - SnackBar(content: Text(errorMessage)) - ); - }, - ); + + + _showOTPVerificationSheet(context: context, formManager: formManager , onSuccess: onSuccess); + // + // LoaderBottomSheet.showLoader(); + } static void _showOTPVerificationSheet({ required BuildContext context, - required String phoneNumber, - required String loginTokenID, + required ReferralFormManager formManager, required Function onSuccess, }) { - showCommonBottomSheet( - context, - isFullScreen: true, - title: "OTP Verification", - isCloseButtonVisible: false, - height:ResponsiveExtension.screenHeight * 0.75, - child: OTPVerificationScreen( - phoneNumber: phoneNumber, - checkActivationCode: (int code) { - _verifyOTP( - context: context, - loginTokenID: loginTokenID, - code: code, - onSuccess: onSuccess, - ); - }, - onResendOTPPressed: (String phoneNumber) { - Navigator.pop(context); - openOTPScreen( - context: context, - phoneNumber: phoneNumber, - countryEnum: CountryEnum.saudiArabia, - onSuccess: onSuccess, - ); - }, - isFormFamilyFile: false, - ), - ); - } - static void _verifyOTP({ - required BuildContext context, - required String loginTokenID, - required int code, - required Function onSuccess, - }) { - final hmgServicesViewModel = context.read(); - - hmgServicesViewModel.checkEReferralActivationCode( - requestModel: CheckActivationCodeForEReferralRequestModel( - logInTokenID: loginTokenID, - activationCode: code.toString(), - ), - onSuccess: (GenericApiModel response) { - Navigator.pop(context); - onSuccess(); - }, - onError: (String errorMessage) { - ScaffoldMessenger.of(context).showSnackBar( - SnackBar(content: Text(errorMessage)) - ); - }, + showModalBottomSheet( + context: context, + isScrollControlled: true, + isDismissible: false, + useSafeArea: true, + backgroundColor: Colors.transparent, + builder: (bottomSheetContext) => Padding( + padding: EdgeInsets.only(bottom: MediaQuery.of(bottomSheetContext).viewInsets.bottom), + child: SingleChildScrollView( + child: GenericBottomSheet( + isEnableCountryDropdown:true, + textController: TextEditingController(), + onChange: (value) { + formManager.updateRequesterPhone(value ?? ''); + }, + onCountryChange: (value) { + formManager.updateCountryEnum(value); + }, + autoFocus: true, + buttons: [ + Padding( + padding: const EdgeInsets.only(bottom: 10), + child: CustomButton( + text: LocaleKeys.sendOTPSMS.tr(), + onPressed: () async { + + if (ValidationUtils.isValidatePhone( + phoneNumber: formManager.formData.requesterPhone, + onOkPress: () { + + Navigator.pop(context); + + + }, + )) { + Navigator.pop(context); + final hmgServicesViewModel = context.read(); + + LoaderBottomSheet.showLoader(); + hmgServicesViewModel.eReferralSendActivationCode( + requestModel: SendActivationCodeForEReferralRequestModel( + patientMobileNumber: int.parse(formManager.formData.requesterPhone), + zipCode: formManager.formData.countryEnum.countryCode, + patientOutSA: formManager.formData.countryEnum.countryCode == '966' ? 0 : 1, + ), + onSuccess: (GenericApiModel response) { + LoaderBottomSheet.hideLoader(); + hmgServicesViewModel.navigateToOTPScreen(otpTypeEnum: OTPTypeEnum.sms, phoneNumber: formManager.formData.requesterPhone, loginToken:response.data , onSuccess: (){ + Navigator.pop(context); + onSuccess(); + }); + + }, + onError: (String errorMessage) { + LoaderBottomSheet.hideLoader(); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text(errorMessage)) + ); + }, + ); + + + } + }, + backgroundColor: AppColors.primaryRedColor, + borderColor: AppColors.primaryRedBorderColor, + textColor: AppColors.whiteColor, + icon: AppAssets.message, + ), + ), + + ], + ), + )), ); } -} \ No newline at end of file + + + + +} diff --git a/lib/presentation/e_referral/widget/e_referral_other_details.dart b/lib/presentation/e_referral/widget/e_referral_other_details.dart index d473dfe..cf8563d 100644 --- a/lib/presentation/e_referral/widget/e_referral_other_details.dart +++ b/lib/presentation/e_referral/widget/e_referral_other_details.dart @@ -1,8 +1,10 @@ // widgets/other_details_step.dart import 'dart:io'; - +import 'dart:convert'; import 'package:flutter/material.dart'; +import 'package:hmg_patient_app_new/core/app_export.dart'; import 'package:hmg_patient_app_new/core/utils/validation_utils.dart'; +import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; import 'package:hmg_patient_app_new/features/hmg_services/models/req_models/create_e_referral_model.dart'; import 'package:hmg_patient_app_new/presentation/e_referral/e_referral_form_manager.dart'; @@ -55,6 +57,7 @@ class _OtherDetailsStepState extends State { _insuranceController.text = hasInsuranceDocs ? '${_formManager.formData.insuredPatientImages.length} file(s) selected' : ''; + } @override @@ -105,7 +108,7 @@ class _OtherDetailsStepState extends State { onTap: () { ImageOptions.showImageOptionsNew( context, - true, + false, (String image, File file) { _addMedicalReport(image, file, formManager); }, @@ -199,7 +202,7 @@ class _OtherDetailsStepState extends State { onTap: () { ImageOptions.showImageOptionsNew( context, - true, + false, (String image, File file) { _addInsuranceDocument(image, file, formManager); }, @@ -245,22 +248,28 @@ class _OtherDetailsStepState extends State { ); } - return ListView.separated( + return DecoratedBox( + decoration: RoundedRectangleBorder().toSmoothCornerDecoration( + color: Colors.white, + customBorder: BorderRadius.all(Radius.circular(24.h)) , + + ), child: ListView.builder( shrinkWrap: true, + padding: EdgeInsets.all(16.h), physics: const BouncingScrollPhysics(), itemBuilder: (context, index) { final branch = hospitals[index]; return ListTile( - title: Text(branch.desciption ?? 'Unknown'), + title: (branch.desciption ?? 'Unknown').toText14(), onTap: () { formManager.updateBranch(branch); Navigator.pop(context); }, ); }, - separatorBuilder: (context, index) => const Divider(), + // separatorBuilder: (context, index) => const Divider(), itemCount: hospitals.length, - ); + )); }, ), useSafeArea: true, diff --git a/lib/presentation/e_referral/widget/e_referral_patient_info.dart b/lib/presentation/e_referral/widget/e_referral_patient_info.dart index 779804e..2bd8e92 100644 --- a/lib/presentation/e_referral/widget/e_referral_patient_info.dart +++ b/lib/presentation/e_referral/widget/e_referral_patient_info.dart @@ -1,6 +1,8 @@ // widgets/patient_information_step.dart import 'package:flutter/material.dart'; +import 'package:hmg_patient_app_new/core/app_export.dart'; import 'package:hmg_patient_app_new/core/utils/validation_utils.dart'; +import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; import 'package:hmg_patient_app_new/presentation/e_referral/e_referral_form_manager.dart'; import 'package:provider/provider.dart'; @@ -160,7 +162,7 @@ class PatientInformationStepState extends State { formManager.updatePatientPhone(value ?? ''); }, onCountryChange: (value) { - formManager.updateCountryEnum(value); + formManager.updatePatientCountryEnum(value); }, prefix: '966', isBorderAllowed: false, @@ -192,50 +194,8 @@ class PatientInformationStepState extends State { }); } - // void _showCountryBottomSheet(BuildContext context, ReferralFormManager formManager) { - // final authVM = context.read(); - // - // showCommonBottomSheetWithoutHeight( - // context, - // title: "Select Country", - // child: Consumer( - // builder: (context, authVM, child) { - // final countries = authVM.countriesList; - // if (countries == null || countries.isEmpty) { - // return const Center( - // child: Padding( - // padding: EdgeInsets.all(16.0), - // child: Text('No countries available'), - // ), - // ); - // } - // - // return ListView.separated( - // shrinkWrap: true, - // physics: const BouncingScrollPhysics(), - // itemBuilder: (context, index) { - // final country = countries[index]; - // return ListTile( - // title: Text(country.name ?? 'Unknown'), - // onTap: () { - // formManager.updatePatientCountry(country); - // Navigator.pop(context); - // }, - // ); - // }, - // separatorBuilder: (context, index) => const Divider(), - // itemCount: countries.length, - // ); - // }, - // ), - // useSafeArea: true, - // isFullScreen: false, - // isCloseButtonVisible: true, - // ); - // } void _showCityBottomSheet(BuildContext context, ReferralFormManager formManager) { - final hmgServicesVM = context.read(); showCommonBottomSheetWithoutHeight( context, @@ -252,22 +212,28 @@ class PatientInformationStepState extends State { ); } - return ListView.separated( + return DecoratedBox( + decoration: RoundedRectangleBorder().toSmoothCornerDecoration( + color: Colors.white, + customBorder: BorderRadius.all(Radius.circular(24.h)) , + + ), child: ListView.builder( shrinkWrap: true, + padding: EdgeInsets.all(16.h), physics: const BouncingScrollPhysics(), itemBuilder: (context, index) { final city = cities[index]; return ListTile( - title: Text(city.description ?? 'Unknown'), + title: (city.description ?? 'Unknown').toText14(), onTap: () { formManager.updatePatientCity(city); Navigator.pop(context); }, ); }, - separatorBuilder: (context, index) => const Divider(), + // separatorBuilder: (context, index) => const Divider(), itemCount: cities.length, - ); + )); }, ), useSafeArea: true, diff --git a/lib/presentation/e_referral/widget/e_referral_requester_form.dart b/lib/presentation/e_referral/widget/e_referral_requester_form.dart index b6952a5..5f9e4d8 100644 --- a/lib/presentation/e_referral/widget/e_referral_requester_form.dart +++ b/lib/presentation/e_referral/widget/e_referral_requester_form.dart @@ -1,6 +1,8 @@ // widgets/requester_form_step.dart import 'package:flutter/material.dart'; +import 'package:hmg_patient_app_new/core/app_export.dart'; import 'package:hmg_patient_app_new/core/utils/validation_utils.dart'; +import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; import 'package:hmg_patient_app_new/features/hmg_services/models/ui_models/e_referral_form_model.dart'; import 'package:hmg_patient_app_new/presentation/e_referral/e-referral_validator.dart'; @@ -63,15 +65,17 @@ class RequesterFormStepState extends State { return Consumer( builder: (context, formManager, child) { return Padding( - padding: const EdgeInsets.symmetric(horizontal: 24.0), + padding: const EdgeInsets.symmetric(horizontal: 24.0, vertical: 0.0), child: ListView( + padding: EdgeInsets.zero, + shrinkWrap: true, physics: const BouncingScrollPhysics(), children: [ - const SizedBox(height: 12), + // const SizedBox(height: 12), _buildSectionTitle('Referral requester information'), - const SizedBox(height: 12), + const SizedBox(height: 12), _buildNameField(formManager), - _buildPhoneField(formManager), + // _buildPhoneField(formManager), _buildRelationshipField(context, formManager), if (_showOtherNameField(formManager)) _buildOtherNameField(formManager), ], @@ -98,43 +102,43 @@ class RequesterFormStepState extends State { labelText: 'Requester Name', keyboardType: TextInputType.text, errorMessage: formManager.errors.requesterName, + isAllowLeadingIcon: true, + leadingIcon: AppAssets.user_circle, hasError: !ValidationUtils.isNullOrEmpty(formManager.errors.requesterName), onChange: (value) { formManager.updateRequesterName(value ?? ''); }, - onSubmitted: (value) { - _phoneFocusNode.requestFocus(); - }, - ).paddingSymmetrical(0, 8), - ); - } - Widget _buildPhoneField(ReferralFormManager formManager) { - return Focus( - focusNode: _phoneFocusNode, - child: TextInputWidget( - labelText: 'Phone Number', - hintText: "5xxxxxxxx", - controller: _phoneController, - padding: const EdgeInsets.all(8), - keyboardType: TextInputType.number, - onChange: (value) { - formManager.updateRequesterPhone(value ?? ''); - }, - onCountryChange: (value) { - formManager.updateCountryEnum(value); - }, - prefix: '966', - isBorderAllowed: false, - isAllowLeadingIcon: true, - fontSize: 13, - isCountryDropDown: true, - leadingIcon: AppAssets.smart_phone, - errorMessage: formManager.errors.requesterPhone, - hasError: !ValidationUtils.isNullOrEmpty(formManager.errors.requesterPhone) ).paddingSymmetrical(0, 8), ); } + // + // Widget _buildPhoneField(ReferralFormManager formManager) { + // return Focus( + // focusNode: _phoneFocusNode, + // child: TextInputWidget( + // labelText: 'Phone Number', + // hintText: "5xxxxxxxx", + // controller: _phoneController, + // padding: const EdgeInsets.all(8), + // keyboardType: TextInputType.number, + // onChange: (value) { + // formManager.updateRequesterPhone(value ?? ''); + // }, + // onCountryChange: (value) { + // formManager.updateCountryEnum(value); + // }, + // prefix: '966', + // isBorderAllowed: false, + // isAllowLeadingIcon: true, + // fontSize: 13, + // isCountryDropDown: true, + // leadingIcon: AppAssets.smart_phone, + // errorMessage: formManager.errors.requesterPhone, + // hasError: !ValidationUtils.isNullOrEmpty(formManager.errors.requesterPhone) + // ).paddingSymmetrical(0, 8), + // ); + // } Widget _buildRelationshipField(BuildContext context, ReferralFormManager formManager) { return DropdownWidget( @@ -159,6 +163,7 @@ class RequesterFormStepState extends State { focusNode: _otherNameFocusNode, child: TextInputWidget( controller: _otherNameController, + keyboardType: TextInputType.text, padding: const EdgeInsets.symmetric(horizontal: 16.0), hintText: 'Other Name*', labelText: 'Other Name', @@ -192,22 +197,28 @@ class RequesterFormStepState extends State { ); } - return ListView.separated( + return DecoratedBox( + decoration: RoundedRectangleBorder().toSmoothCornerDecoration( + color: Colors.white, + customBorder: BorderRadius.all(Radius.circular(24.h)) , + + ), child: ListView.builder( shrinkWrap: true, + padding: EdgeInsets.all(16.h), physics: const BouncingScrollPhysics(), itemBuilder: (context, index) { final relationship = hmgServicesVM.relationTypes[index]; return ListTile( - title: Text(relationship.textEn ?? 'Unknown'), + title:relationship.textEn?.toText14(), onTap: () { formManager.updateRelationship(relationship); Navigator.pop(context); }, ); }, - separatorBuilder: (context, index) => const Divider(), + //separatorBuilder: (context, index) => const Divider(), itemCount: hmgServicesVM.relationTypes.length, - ); + )); }, ), isFullScreen: false, diff --git a/lib/presentation/e_referral/widget/e_referral_stepper.dart b/lib/presentation/e_referral/widget/e_referral_stepper.dart deleted file mode 100644 index a6cd771..0000000 --- a/lib/presentation/e_referral/widget/e_referral_stepper.dart +++ /dev/null @@ -1,72 +0,0 @@ -// widgets/progress_stepper_widget.dart -import 'package:flutter/material.dart'; -import 'package:hmg_patient_app_new/theme/colors.dart'; - -class ProgressStepperWidget extends StatelessWidget { - final int currentStep; - final List steps; - - const ProgressStepperWidget({ - super.key, - required this.currentStep, - required this.steps, - }); - - @override - Widget build(BuildContext context) { - return Padding( - padding: const EdgeInsets.symmetric(horizontal: 24.0), - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - for (int i = 0; i < steps.length; i++) - _buildStep( - title: steps[i], - active: i == currentStep, - showDivider: i < steps.length - 1, - ), - ], - ), - ); - } - - Widget _buildStep({required String title, required bool active, bool showDivider = true}) { - final Color activeColor = active ? AppColors.primaryRedColor : Colors.grey.shade400; - - return Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Row( - children: [ - CircleAvatar( - radius: 13, - backgroundColor: active ? activeColor : Colors.grey.shade300, - child: Icon(Icons.check, size: 14, color: Colors.white), - ), - if (showDivider) - Padding( - padding: const EdgeInsets.symmetric(horizontal: 8.0), - child: Divider(thickness: 1), - ), - ], - ), - const SizedBox(height: 6), - Text(title, style: const TextStyle(fontSize: 11, fontWeight: FontWeight.w600)), - const SizedBox(height: 6), - Container( - padding: const EdgeInsets.symmetric(horizontal: 6, vertical: 4), - decoration: BoxDecoration( - color: active ? activeColor.withOpacity(0.15) : Colors.grey.shade100, - borderRadius: BorderRadius.circular(6), - ), - child: Text( - active ? 'Active' : 'Inactive', - style: TextStyle(fontSize: 9, color: active ? activeColor : Colors.grey) - ), - ), - ], - ), - ); - } -} \ No newline at end of file diff --git a/lib/presentation/e_referral/widget/search_e_referral_form.dart b/lib/presentation/e_referral/widget/search_e_referral_form.dart index 37d4025..21bada6 100644 --- a/lib/presentation/e_referral/widget/search_e_referral_form.dart +++ b/lib/presentation/e_referral/widget/search_e_referral_form.dart @@ -1,4 +1,3 @@ - import 'package:flutter/material.dart'; import 'package:hmg_patient_app_new/core/utils/validation_utils.dart'; import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; @@ -12,8 +11,10 @@ import 'package:hmg_patient_app_new/features/hmg_services/hmg_services_view_mode import 'package:hmg_patient_app_new/widgets/dropdown/dropdown_widget.dart'; import 'package:hmg_patient_app_new/widgets/input_widget.dart'; import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart'; + class SearchEReferralFormForm extends StatefulWidget { - const SearchEReferralFormForm({super.key}); + final VoidCallback? onFormValidated; + const SearchEReferralFormForm({super.key, this.onFormValidated}); @override State createState() => SearchEReferralFormFormState(); @@ -22,35 +23,25 @@ class SearchEReferralFormForm extends StatefulWidget { class SearchEReferralFormFormState extends State { late TextEditingController _searchController; late TextEditingController _phoneController; - late FocusNode _searchFocusNode; + late FocusNode _searchFocusNode; late FocusNode _phoneFocusNode; - int criteria =0; - - List> criteriaList = [ - {0: 'Identification Number'}, - {1: 'Referral Number'}, - ]; - late ReferralFormManager _formManager; - @override void initState() { super.initState(); - _formManager = context.read(); _searchController = TextEditingController(); _phoneController = TextEditingController(); _searchFocusNode = FocusNode(); _phoneFocusNode = FocusNode(); - // Initialize controllers with current values - _searchController.text = ''; - _phoneController.text = ''; - - // Auto-focus the name field when the step loads + // Initialize controllers with current values from form manager WidgetsBinding.instance.addPostFrameCallback((_) { if (mounted) { - _searchFocusNode.requestFocus(); + final formManager = context.read(); + _searchController.text = formManager.searchValue ?? ''; + _phoneController.text = formManager.searchPhone ?? ''; + // _searchFocusNode.requestFocus(); } }); } @@ -62,14 +53,13 @@ class SearchEReferralFormFormState extends State { return Padding( padding: const EdgeInsets.symmetric(horizontal: 24.0), child: ListView( - physics: const BouncingScrollPhysics(), + shrinkWrap: true, + physics: const NeverScrollableScrollPhysics(), children: [ - - const SizedBox(height: 12), + // const SizedBox(height: 12), _buildSelectionField(context, formManager), _buildNameField(formManager), _buildPhoneField(formManager), - ], ), ); @@ -77,24 +67,21 @@ class SearchEReferralFormFormState extends State { ); } - - Widget _buildNameField(ReferralFormManager formManager) { return Focus( focusNode: _searchFocusNode, + autofocus: true, child: TextInputWidget( controller: _searchController, padding: const EdgeInsets.symmetric(horizontal: 16.0), - hintText:criteria ==0 ? "Enter Identification Number" : "Enter Referral Number", - labelText: criteria ==0 ? "Identification Number" : "Referral Number", - keyboardType: TextInputType.text, - // errorMessage: formManager.errors.requesterName, - hasError: !ValidationUtils.isNullOrEmpty(_searchController.text), + hintText: formManager.searchCriteria == 0 ? "Enter Identification Number" : "Enter Referral Number", + labelText: formManager.searchCriteria == 0 ? "Identification Number" : "Referral Number", + keyboardType: TextInputType.number, + errorMessage: formManager.errors.searchValue, + hasError: !ValidationUtils.isNullOrEmpty(formManager.errors.searchValue), onChange: (value) { - - }, - onSubmitted: (value) { - + formManager.updateSearchValue(value ?? ''); + //_validateForm(formManager); }, ).paddingSymmetrical(0, 8), ); @@ -103,17 +90,25 @@ class SearchEReferralFormFormState extends State { Widget _buildPhoneField(ReferralFormManager formManager) { return Focus( focusNode: _phoneFocusNode, + autofocus: false, child: TextInputWidget( + autoFocus: false, labelText: 'Phone Number', hintText: "5xxxxxxxx", controller: _phoneController, padding: const EdgeInsets.all(8), keyboardType: TextInputType.number, onChange: (value) { - formManager.updateRequesterPhone(value ?? ''); + formManager.updateSearchPhone(value ?? ''); + // _validateForm(formManager); }, + // onSubmitted: (value) { + // formManager.updateRequesterPhone(value ?? ''); + // _validateForm(formManager); + // }, onCountryChange: (value) { formManager.updateCountryEnum(value); + // _validateForm(formManager); }, prefix: '966', isBorderAllowed: false, @@ -121,8 +116,8 @@ class SearchEReferralFormFormState extends State { fontSize: 13, isCountryDropDown: true, leadingIcon: AppAssets.smart_phone, - errorMessage: formManager.errors.requesterPhone, - hasError: !ValidationUtils.isNullOrEmpty(formManager.errors.requesterPhone) + errorMessage: formManager.errors.searchPhone, + hasError: !ValidationUtils.isNullOrEmpty(formManager.errors.searchPhone), ).paddingSymmetrical(0, 8), ); } @@ -130,7 +125,7 @@ class SearchEReferralFormFormState extends State { Widget _buildSelectionField(BuildContext context, ReferralFormManager formManager) { return DropdownWidget( labelText: "Select the Search Criteria", - hintText: criteria ==0 ? "Identification Number" : "Referral Number", + hintText: formManager.searchCriteria == 0 ? "Identification Number" : "Referral Number", isEnable: false, hasSelectionCustomIcon: false, labelColor: Colors.black, @@ -138,38 +133,63 @@ class SearchEReferralFormFormState extends State { leadingIcon: AppAssets.search_icon, dropdownItems: [], ).paddingSymmetrical(0, 8).onPress(() { - _showCriteriaBottomSheet(context); + _showCriteriaBottomSheet(context, formManager); }); } - - - void _showCriteriaBottomSheet(BuildContext context,) { - + void _showCriteriaBottomSheet(BuildContext context, ReferralFormManager formManager) { + final criteriaList = [ + {0: 'Identification Number'}, + {1: 'Referral Number'}, + ]; showCommonBottomSheetWithoutHeight( context, title: "Select Criteria", child: ListView.separated( - shrinkWrap: true, - physics: const BouncingScrollPhysics(), - itemBuilder: (context, index) { - return ListTile( - title: Text(criteriaList[index].values.first), - onTap: () { - setState(() { - criteria = index; - }); + shrinkWrap: true, + physics: const BouncingScrollPhysics(), + itemBuilder: (context, index) { + final criteria = criteriaList[index]; + final criteriaKey = criteria.keys.first; + final criteriaValue = criteria.values.first; + + return ListTile( + leading: Radio( + value: criteriaKey, + groupValue: formManager.searchCriteria, + onChanged: (value) { + if (value != null) { + formManager.updateSearchCriteria(value); + _searchController.clear(); + _validateForm(formManager); Navigator.pop(context); - }, - ); + } + }, + ), + title: Text(criteriaValue), + onTap: () { + formManager.updateSearchCriteria(criteriaKey); + _searchController.clear(); + _validateForm(formManager); + Navigator.pop(context); }, - separatorBuilder: (context, index) => const Divider(), - itemCount: criteriaList.length, - ), + ); + }, + separatorBuilder: (context, index) => const Divider(), + itemCount: criteriaList.length, + ), isFullScreen: false, isCloseButtonVisible: true, - ); + ); + } + + void _validateForm(ReferralFormManager formManager) { + // Trigger validation + formManager.validateSearchForm(); + + // Notify parent if form validation state changes + widget.onFormValidated?.call(); } @override @@ -178,7 +198,6 @@ class SearchEReferralFormFormState extends State { _phoneController.dispose(); _searchFocusNode.dispose(); _phoneFocusNode.dispose(); - super.dispose(); } -} \ No newline at end of file +} diff --git a/lib/presentation/emergency_services/call_ambulance/widgets/pickup_location.dart b/lib/presentation/emergency_services/call_ambulance/widgets/pickup_location.dart index 9410af1..051c850 100644 --- a/lib/presentation/emergency_services/call_ambulance/widgets/pickup_location.dart +++ b/lib/presentation/emergency_services/call_ambulance/widgets/pickup_location.dart @@ -23,7 +23,7 @@ class PickupLocation extends StatelessWidget { children: [ "Select Pickup Direction" .needTranslation - .toText24(color: AppColors.textColor,isBold: true), + .toText24(color: AppColors.textColor, isBold: true), SizedBox( height: 16.h, ), @@ -34,128 +34,147 @@ class PickupLocation extends StatelessWidget { height: 12.h, ), Selector( - selector: (context, viewModel) => viewModel.callingPlace, - builder: (context, value, _) { - return Column( - spacing: 12.h, - children: [ - RadioGroup( - groupValue: value, - onChanged: (value) { - context - .read() - .updateCallingPlace(value); - }, - child: Row( - mainAxisAlignment: MainAxisAlignment.start, - spacing: 24.h, - children: [ - Row( - children: [ - Radio( - value: AmbulanceCallingPlace.TO_HOSPITAL, - groupValue: value, - activeColor: AppColors.primaryRedColor, - - fillColor: MaterialStateProperty.all(AppColors.primaryRedColor), - ), - "To Hospital" - .needTranslation - .toText14(color: AppColors.textColor, weight: FontWeight.w500) - ], - ).onPress((){ - context - .read() - .updateCallingPlace(AmbulanceCallingPlace.TO_HOSPITAL); - }), - Row( - children: [ - Radio( - value: AmbulanceCallingPlace.FROM_HOSPITAL, - activeColor: AppColors.primaryRedColor, - - fillColor: MaterialStateProperty.all(AppColors.primaryRedColor), - ), - "From Hospital" - .needTranslation - .toText14(color: AppColors.textColor, weight: FontWeight.w500) - ], - ).onPress((){ - context - .read() - .updateCallingPlace(AmbulanceCallingPlace.FROM_HOSPITAL); - }), - ], + selector: (context, viewModel) => viewModel.callingPlace, + builder: (context, value, _) { + return Column( + children: [ + SizedBox(height: 12.h), + Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Expanded( + child: Row( + children: [ + Radio( + value: AmbulanceCallingPlace.TO_HOSPITAL, + groupValue: value, + onChanged: (AmbulanceCallingPlace? newValue) { + if (newValue != null) { + context + .read() + .updateCallingPlace(newValue); + } + }, + activeColor: AppColors.primaryRedColor, + fillColor: MaterialStateProperty.all(AppColors.primaryRedColor), + ), + "To Hospital" + .needTranslation + .toText14(color: AppColors.textColor, weight: FontWeight.w500) + ], + ).onPress(() { + context + .read() + .updateCallingPlace(AmbulanceCallingPlace.TO_HOSPITAL); + }), ), - ), - Visibility( - visible: value == AmbulanceCallingPlace.TO_HOSPITAL, - child: Selector( - selector: (context, viewModel) => - viewModel.ambulanceDirection, - builder: (context, directionValue, _) { - return Column( - spacing: 12.h, - crossAxisAlignment: CrossAxisAlignment.start, + Expanded( + child: Row( + children: [ + Radio( + value: AmbulanceCallingPlace.FROM_HOSPITAL, + groupValue: value, + onChanged: (AmbulanceCallingPlace? newValue) { + if (newValue != null) { + context + .read() + .updateCallingPlace(newValue); + } + }, + activeColor: AppColors.primaryRedColor, + fillColor: MaterialStateProperty.all(AppColors.primaryRedColor), + ), + "From Hospital" + .needTranslation + .toText14(color: AppColors.textColor, weight: FontWeight.w500) + ], + ).onPress(() { + context + .read() + .updateCallingPlace(AmbulanceCallingPlace.FROM_HOSPITAL); + }), + ), + ], + ), + Visibility( + visible: value == AmbulanceCallingPlace.TO_HOSPITAL, + child: Selector( + selector: (context, viewModel) => viewModel.ambulanceDirection, + builder: (context, directionValue, _) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SizedBox(height: 16.h), + "Select Way" + .needTranslation + .toText16(color: AppColors.textColor, weight: FontWeight.w600), + SizedBox(height: 12.h), + Row( + mainAxisAlignment: MainAxisAlignment.start, children: [ - "Select Way" - .needTranslation - .toText16(color: AppColors.textColor, weight: FontWeight.w600), - RadioGroup( - groupValue: directionValue, - onChanged: (value) { + Expanded( + child: Row( + children: [ + Radio( + value: AmbulanceDirection.ONE_WAY, + groupValue: directionValue, + onChanged: (AmbulanceDirection? newValue) { + if (newValue != null) { + context + .read() + .updateDirection(newValue); + } + }, + activeColor: AppColors.primaryRedColor, + fillColor: MaterialStateProperty.all(AppColors.primaryRedColor), + ), + "One Way" + .needTranslation + .toText12(color: AppColors.textColor, fontWeight: FontWeight.w500) + ], + ).onPress(() { context .read() - .updateDirection(value); - }, + .updateDirection(AmbulanceDirection.ONE_WAY); + }), + ), + Expanded( child: Row( - mainAxisAlignment: MainAxisAlignment.start, - spacing: 24.h, children: [ - Row( - children: [ - Radio( - value: AmbulanceDirection.ONE_WAY, - activeColor: AppColors.primaryRedColor, - - fillColor: MaterialStateProperty.all(AppColors.primaryRedColor), - ), - "One Way" - .needTranslation - .toText12(color: AppColors.textColor, fontWeight: FontWeight.w500) - ], - ).onPress((){ - context - .read() - .updateDirection(AmbulanceDirection.ONE_WAY); - }), - Row( - children: [ - Radio( - value: AmbulanceDirection.TWO_WAY, - // activeColor: AppColors.primaryRedColor, - - fillColor: MaterialStateProperty.all(AppColors.primaryRedColor), - ), - "Two Way" - .needTranslation - .toText14(color: AppColors.textColor, weight: FontWeight.w500) - ], - ).onPress((){ - context - .read() - .updateDirection(AmbulanceDirection.TWO_WAY); - }), + Radio( + value: AmbulanceDirection.TWO_WAY, + groupValue: directionValue, + onChanged: (AmbulanceDirection? newValue) { + if (newValue != null) { + context + .read() + .updateDirection(newValue); + } + }, + activeColor: AppColors.primaryRedColor, + fillColor: MaterialStateProperty.all(AppColors.primaryRedColor), + ), + "Two Way" + .needTranslation + .toText14(color: AppColors.textColor, weight: FontWeight.w500) ], - ), + ).onPress(() { + context + .read() + .updateDirection(AmbulanceDirection.TWO_WAY); + }), ), ], - ); - }), - ) - ], - ); - }), + ), + ], + ); + }, + ), + ) + ], + ); + }, + ), SizedBox( height: 16.h, ), @@ -170,4 +189,4 @@ class PickupLocation extends StatelessWidget { ], ); } -} +} \ No newline at end of file diff --git a/lib/routes/app_routes.dart b/lib/routes/app_routes.dart index a0ee1e5..b37ebfa 100644 --- a/lib/routes/app_routes.dart +++ b/lib/routes/app_routes.dart @@ -3,7 +3,7 @@ import 'package:hmg_patient_app_new/presentation/authentication/login.dart'; import 'package:hmg_patient_app_new/presentation/authentication/register.dart'; import 'package:hmg_patient_app_new/presentation/authentication/register_step2.dart'; import 'package:hmg_patient_app_new/presentation/comprehensive_checkup/comprehensive_checkup_page.dart'; -import 'package:hmg_patient_app_new/presentation/e_referral/e_referral_page_home.dart'; +import 'package:hmg_patient_app_new/presentation/e_referral/new_e_referral.dart'; import 'package:hmg_patient_app_new/presentation/home/navigation_screen.dart'; import 'package:hmg_patient_app_new/presentation/home_health_care/hhc_procedures_page.dart'; import 'package:hmg_patient_app_new/presentation/medical_file/medical_file_page.dart'; @@ -27,7 +27,7 @@ class AppRoutes { register: (context) => RegisterNew(), registerStepTwo: (context) => RegisterNewStep2(), medicalFilePage: (context) => MedicalFilePage(), - eReferralPage: (context) => EReferralPage(), + eReferralPage: (context) => NewReferralPage(), comprehensiveCheckupPage: (context) => ComprehensiveCheckupPage(), homeHealthCarePage: (context) => HhcProceduresPage() }; diff --git a/lib/widgets/image_picker.dart b/lib/widgets/image_picker.dart index 9444159..e25b117 100644 --- a/lib/widgets/image_picker.dart +++ b/lib/widgets/image_picker.dart @@ -147,6 +147,7 @@ void cameraImageAndroid(Function(String, File) image) async { if (base64Encode != null) { image(base64Encode, _image); } + } class _BottomSheet extends StatelessWidget { diff --git a/lib/widgets/order_tracking/request_tracking.dart b/lib/widgets/order_tracking/request_tracking.dart index c0847f9..f07c0b1 100644 --- a/lib/widgets/order_tracking/request_tracking.dart +++ b/lib/widgets/order_tracking/request_tracking.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:hmg_patient_app_new/core/utils/size_utils.dart'; import 'package:hmg_patient_app_new/theme/colors.dart'; import 'package:hmg_patient_app_new/widgets/order_tracking/order_tracking_state.dart'; +import 'package:hmg_patient_app_new/widgets/stepper/stepper_widget.dart'; class OrderTrackingWidget extends StatelessWidget { final double? height; @@ -35,9 +36,9 @@ class OrderTrackingWidget extends StatelessWidget { return Row( children: List.generate(4, (index) { if (index == 0) { - return oneProgressBar(widthOfOneState, AppColors.primaryRedColor, true); + return StepperWidget(widthOfOneState, AppColors.primaryRedColor, true, height); } else { - return oneProgressBar(widthOfOneState, AppColors.greyLightColor, false); + return StepperWidget(widthOfOneState, AppColors.greyLightColor, false, height); } })); } @@ -46,9 +47,9 @@ class OrderTrackingWidget extends StatelessWidget { return Row( children: List.generate(4, (index){ if(index == 0) { - return oneProgressBar(widthOfOneState, AppColors.primaryRedColor, true); + return StepperWidget(widthOfOneState, AppColors.primaryRedColor, true, height); } else { - return oneProgressBar(widthOfOneState, AppColors.greyLightColor, false); + return StepperWidget(widthOfOneState, AppColors.greyLightColor, false, height); } }) ); @@ -57,9 +58,9 @@ class OrderTrackingWidget extends StatelessWidget { return Row( children: List.generate(4, (index){ if(index == 1 || index == 0) { - return oneProgressBar(widthOfOneState, AppColors.primaryRedColor, index == 1 ); + return StepperWidget(widthOfOneState, AppColors.primaryRedColor, index == 1, height ); } else { - return oneProgressBar(widthOfOneState, AppColors.greyLightColor, false); + return StepperWidget(widthOfOneState, AppColors.greyLightColor, false, height); } }) ); @@ -67,9 +68,9 @@ class OrderTrackingWidget extends StatelessWidget { return Row( children: List.generate(4, (index){ if(index == 2 || index == 1 || index == 0) { - return oneProgressBar(widthOfOneState, AppColors.primaryRedColor, index == 2); + return StepperWidget(widthOfOneState, AppColors.primaryRedColor, index == 2, height); } else { - return oneProgressBar(widthOfOneState, AppColors.greyLightColor, false); + return StepperWidget(widthOfOneState, AppColors.greyLightColor, false, height); } }) ); @@ -77,7 +78,7 @@ class OrderTrackingWidget extends StatelessWidget { return Row( children: List.generate(4, (index){ // if(index == 3) { - return oneProgressBar(widthOfOneState, AppColors.successLightColor, index == 3); + return StepperWidget(widthOfOneState, AppColors.successLightColor, index == 3, height); // } else { // return oneProgressBar(widthOfOneState, AppColors.greyLightColor, false); // } @@ -87,7 +88,7 @@ class OrderTrackingWidget extends StatelessWidget { return Row( children: List.generate(4, (index){ // if(index == 3) { - return oneProgressBar(widthOfOneState, AppColors.errorColor, index == 3); + return StepperWidget(widthOfOneState, AppColors.errorColor, index == 3, height); // } else { // return oneProgressBar(widthOfOneState, AppColors.greyLightColor, false); // } @@ -97,7 +98,7 @@ class OrderTrackingWidget extends StatelessWidget { return Row( children: List.generate(4, (index){ // if(index == 3) { - return oneProgressBar(widthOfOneState, AppColors.errorColor, index == 3); + return StepperWidget(widthOfOneState, AppColors.errorColor, index == 3, height); // } else { // return oneProgressBar(widthOfOneState, AppColors.greyLightColor, false); // } @@ -106,58 +107,6 @@ class OrderTrackingWidget extends StatelessWidget { } } - Widget oneProgressBar(double width, Color color, bool hasThumb) { - return Row( - children: [ - AnimatedSize( - duration: const Duration(seconds:1), - child: SizedBox( - height: 28.h, - width: width, - child: Stack( - clipBehavior: Clip.none, - children: [ - SizedBox( - height: 28.h, - child: Container( - width: width, - height: height, - decoration: BoxDecoration( - color: color, - shape: BoxShape.rectangle, - borderRadius: BorderRadius.circular(30.h) - ), - ), - ), - Visibility( - visible: hasThumb, - child: Positioned( - top: -6.h, // move thumb above bar center - left: width - 22.h, // move to right end - child: thumb(color), - ), - ) - ], - ), - ), - ), - SizedBox(width: 8.h) - ], - ); - } - - Widget thumb(Color color) { - return Container( - width: 18.h, - height: 18.h, - padding: EdgeInsets.zero, - decoration: BoxDecoration( - color: color, - shape: BoxShape.circle, - border: Border.all(color: Colors.white, width: 2.h) - ), - ); - } } \ No newline at end of file diff --git a/lib/widgets/stepper/stepper_widget.dart b/lib/widgets/stepper/stepper_widget.dart new file mode 100644 index 0000000..5d901ac --- /dev/null +++ b/lib/widgets/stepper/stepper_widget.dart @@ -0,0 +1,71 @@ +import 'package:flutter/material.dart'; +import 'package:hmg_patient_app_new/core/app_export.dart'; +import 'package:hmg_patient_app_new/theme/colors.dart'; + +class StepperWidget extends StatelessWidget { + + double width = 80.w; + Color activeColor = AppColors.primaryRedColor; + bool hasThumb = true; + double? height = 4.h; + StepperWidget( this.width, this.activeColor, this.hasThumb, this.height, {super.key}); + + @override + Widget build(BuildContext context) { + return oneProgressBar(width, activeColor, hasThumb); + } + + Widget oneProgressBar(double width, Color color, bool hasThumb) { + return Row( + children: [ + AnimatedSize( + duration: const Duration(seconds: 1), + child: SizedBox( + height: 28.h, + width: width, + child: Stack( + clipBehavior: Clip.none, + children: [ + SizedBox( + height: height, + child: Container( + width: width, + height: height, + decoration: BoxDecoration( + color: color, + shape: BoxShape.rectangle, + borderRadius: BorderRadius.circular(30.h) + ), + ), + ), + + Visibility( + visible: hasThumb, + child: Positioned( + top: -6.h, // move thumb above bar center + left: width - 22.h, // move to right end + child: thumb(color), + ), + ) + ], + ), + ), + ), + SizedBox(width: 8.h) + ], + ); + } + + Widget thumb(Color color) { + return Container( + width: 18.h, + height: 18.h, + padding: EdgeInsets.zero, + decoration: BoxDecoration( + color: color, + shape: BoxShape.circle, + border: Border.all(color: Colors.white, width: 2.h) + ), + ); + } +} \ No newline at end of file -- 2.30.2 From 2532b494f7d94856b8d5e094a3ad598b18172657 Mon Sep 17 00:00:00 2001 From: Sultan khan Date: Tue, 25 Nov 2025 14:43:51 +0300 Subject: [PATCH 09/39] e-referral done. --- .../e_referral/e-referral_validator.dart | 28 ++-- .../e_referral/e_referral_search_result.dart | 34 +---- .../e_referral/new_e_referral.dart | 1 - .../e_referral/search_e_referral.dart | 1 - .../e_referral/widget/e-referral_otp.dart | 137 ++++++++---------- .../widget/e_referral_other_details.dart | 32 ++-- .../widget/e_referral_patient_info.dart | 38 ++--- .../widget/e_referral_requester_form.dart | 53 ++----- .../widget/search_e_referral_form.dart | 4 - 9 files changed, 107 insertions(+), 221 deletions(-) diff --git a/lib/presentation/e_referral/e-referral_validator.dart b/lib/presentation/e_referral/e-referral_validator.dart index 3e3399d..e0a8006 100644 --- a/lib/presentation/e_referral/e-referral_validator.dart +++ b/lib/presentation/e_referral/e-referral_validator.dart @@ -1,4 +1,3 @@ -// utils/referral_validator.dart import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; import 'package:hmg_patient_app_new/features/hmg_services/models/ui_models/e_referral_form_model.dart'; @@ -7,24 +6,19 @@ class ReferralValidator { final errors = FormValidationErrors(); if (formData.requesterName.trim().isEmpty) { - errors.requesterName = 'Referral requester name is required'; + errors.requesterName = 'Referral requester name is required'.needTranslation; } - // if (formData.requesterPhone.trim().isEmpty) { - // errors.requesterPhone = 'Phone number is required'; - // } else if (formData.countryEnum.countryCode == '966' && - // !_isValidSaudiPhone(formData.requesterPhone)) { - // errors.requesterPhone = 'Please enter a valid Saudi phone number (5xxxxxxxx)'; - // } + if (formData.relationship == null) { - errors.relationship = 'Please select a relationship'; + errors.relationship = 'Please select a relationship'.needTranslation; } if (formData.relationship != null && formData.relationship?.iD == 5 && formData.otherRelationshipName.trim().isEmpty) { - errors.otherRelationshipName = 'Other relationship name is required'; + errors.otherRelationshipName = 'Other relationship name is required'.needTranslation; } return errors; @@ -34,19 +28,19 @@ class ReferralValidator { final errors = FormValidationErrors(); if (formData.patientIdentification.trim().isEmpty) { - errors.patientIdentification = 'Identification number is required'; + errors.patientIdentification = 'Identification number is required'.needTranslation; } if (formData.patientName.trim().isEmpty) { - errors.patientName = 'Patient name is required'; + errors.patientName = 'Patient name is required'.needTranslation; } if (formData.patientPhone == null) { - errors.patientPhone = 'Please Enter patient phone number'; + errors.patientPhone = 'Please Enter patient phone number'.needTranslation; } if (formData.patientCity == null) { - errors.patientCity = 'Please select patient city'; + errors.patientCity = 'Please select patient city'.needTranslation; } return errors; @@ -56,15 +50,15 @@ class ReferralValidator { final errors = FormValidationErrors(); if (formData.medicalReportImages.isEmpty) { - errors.medicalReport = 'At least one medical report is required'; + errors.medicalReport = 'At least one medical report is required'.needTranslation; } if (formData.branch == null) { - errors.branch = 'Please select a branch'; + errors.branch = 'Please select a branch'.needTranslation; } if (formData.isPatientInsured && formData.insuredPatientImages.isEmpty) { - errors.insuredDocument = 'Insurance document is required for insured patients'; + errors.insuredDocument = 'Insurance document is required for insured patients'.needTranslation; } return errors; diff --git a/lib/presentation/e_referral/e_referral_search_result.dart b/lib/presentation/e_referral/e_referral_search_result.dart index 3f3966e..ba31f1b 100644 --- a/lib/presentation/e_referral/e_referral_search_result.dart +++ b/lib/presentation/e_referral/e_referral_search_result.dart @@ -241,12 +241,9 @@ class _SearchResultPageState extends State { size: 16, ), SizedBox(width: 4), - // Text( + text.toText14(color: AppColors.greyTextColor), - // style: TextStyle( - // color: Colors.grey[700], - // ), - // ), + ], ); } @@ -264,33 +261,6 @@ class _SearchResultPageState extends State { } } - void _showFilterOptions() { - showModalBottomSheet( - context: context, - builder: (context) { - return Container( - padding: EdgeInsets.all(16), - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - Text( - 'Filter Results', - style: TextStyle( - fontSize: 18, - fontWeight: FontWeight.bold, - ), - ), - SizedBox(height: 16), - _buildFilterOption('All'), - _buildFilterOption('Pending'), - _buildFilterOption('Completed'), - _buildFilterOption('Rejected'), - ], - ), - ); - }, - ); - } Widget _buildFilterOption(String filter) { return ListTile( diff --git a/lib/presentation/e_referral/new_e_referral.dart b/lib/presentation/e_referral/new_e_referral.dart index e48d8ca..c736216 100644 --- a/lib/presentation/e_referral/new_e_referral.dart +++ b/lib/presentation/e_referral/new_e_referral.dart @@ -43,7 +43,6 @@ class _NewReferralPageState extends State { double widthOfOneState = ((ResponsiveExtension.screenWidth) / 3) - (20.h); - final List _steps = ['Requester Info', 'Patient Information', 'Other details']; @override void initState() { diff --git a/lib/presentation/e_referral/search_e_referral.dart b/lib/presentation/e_referral/search_e_referral.dart index ea749ee..1a243da 100644 --- a/lib/presentation/e_referral/search_e_referral.dart +++ b/lib/presentation/e_referral/search_e_referral.dart @@ -26,7 +26,6 @@ class SearchEReferralPage extends StatefulWidget { } class _SearchEReferralPageState extends State { - // final PageController _pageController = PageController(); final ReferralFormManager _formManager = ReferralFormManager(); late HmgServicesViewModel hmgServicesVM; @override diff --git a/lib/presentation/e_referral/widget/e-referral_otp.dart b/lib/presentation/e_referral/widget/e-referral_otp.dart index c3f5872..390fc71 100644 --- a/lib/presentation/e_referral/widget/e-referral_otp.dart +++ b/lib/presentation/e_referral/widget/e-referral_otp.dart @@ -1,9 +1,7 @@ -// services/otp_service.dart import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:hmg_patient_app_new/core/app_assets.dart'; import 'package:hmg_patient_app_new/core/enums.dart'; -import 'package:hmg_patient_app_new/core/utils/size_utils.dart'; import 'package:hmg_patient_app_new/core/utils/validation_utils.dart'; import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; import 'package:hmg_patient_app_new/generated/locale_keys.g.dart'; @@ -15,10 +13,7 @@ import 'package:hmg_patient_app_new/widgets/loader/bottomsheet_loader.dart'; import 'package:provider/provider.dart'; import 'package:hmg_patient_app_new/core/common_models/generic_api_model.dart'; import 'package:hmg_patient_app_new/features/hmg_services/hmg_services_view_model.dart'; -import 'package:hmg_patient_app_new/features/hmg_services/models/req_models/check_activation_e_referral_req_model.dart'; import 'package:hmg_patient_app_new/features/hmg_services/models/req_models/send_activation_code_ereferral_req_model.dart'; -import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart'; -import 'package:hmg_patient_app_new/features/authentication/widgets/otp_verification_screen.dart'; class OTPService { static void openOTPScreen({ @@ -26,12 +21,7 @@ class OTPService { required ReferralFormManager formManager, required Function onSuccess, }) { - - - _showOTPVerificationSheet(context: context, formManager: formManager , onSuccess: onSuccess); - // - // LoaderBottomSheet.showLoader(); - + _showOTPVerificationSheet(context: context, formManager: formManager, onSuccess: onSuccess); } static void _showOTPVerificationSheet({ @@ -39,7 +29,6 @@ class OTPService { required ReferralFormManager formManager, required Function onSuccess, }) { - showModalBottomSheet( context: context, isScrollControlled: true, @@ -49,75 +38,65 @@ class OTPService { builder: (bottomSheetContext) => Padding( padding: EdgeInsets.only(bottom: MediaQuery.of(bottomSheetContext).viewInsets.bottom), child: SingleChildScrollView( - child: GenericBottomSheet( - isEnableCountryDropdown:true, - textController: TextEditingController(), - onChange: (value) { - formManager.updateRequesterPhone(value ?? ''); - }, - onCountryChange: (value) { - formManager.updateCountryEnum(value); - }, - autoFocus: true, - buttons: [ - Padding( - padding: const EdgeInsets.only(bottom: 10), - child: CustomButton( - text: LocaleKeys.sendOTPSMS.tr(), - onPressed: () async { - - if (ValidationUtils.isValidatePhone( - phoneNumber: formManager.formData.requesterPhone, - onOkPress: () { - - Navigator.pop(context); - - - }, - )) { - Navigator.pop(context); - final hmgServicesViewModel = context.read(); - - LoaderBottomSheet.showLoader(); - hmgServicesViewModel.eReferralSendActivationCode( - requestModel: SendActivationCodeForEReferralRequestModel( - patientMobileNumber: int.parse(formManager.formData.requesterPhone), - zipCode: formManager.formData.countryEnum.countryCode, - patientOutSA: formManager.formData.countryEnum.countryCode == '966' ? 0 : 1, - ), - onSuccess: (GenericApiModel response) { - LoaderBottomSheet.hideLoader(); - hmgServicesViewModel.navigateToOTPScreen(otpTypeEnum: OTPTypeEnum.sms, phoneNumber: formManager.formData.requesterPhone, loginToken:response.data , onSuccess: (){ - Navigator.pop(context); - onSuccess(); - }); - - }, - onError: (String errorMessage) { - LoaderBottomSheet.hideLoader(); - ScaffoldMessenger.of(context).showSnackBar( - SnackBar(content: Text(errorMessage)) - ); - }, - ); - - - } + child: GenericBottomSheet( + isEnableCountryDropdown: true, + textController: TextEditingController(), + onChange: (value) { + formManager.updateRequesterPhone(value ?? ''); + }, + onCountryChange: (value) { + formManager.updateCountryEnum(value); + }, + autoFocus: true, + buttons: [ + Padding( + padding: const EdgeInsets.only(bottom: 10), + child: CustomButton( + text: LocaleKeys.sendOTPSMS.tr(), + onPressed: () async { + if (ValidationUtils.isValidatePhone( + phoneNumber: formManager.formData.requesterPhone, + onOkPress: () { + Navigator.pop(context); }, - backgroundColor: AppColors.primaryRedColor, - borderColor: AppColors.primaryRedBorderColor, - textColor: AppColors.whiteColor, - icon: AppAssets.message, - ), - ), - - ], + )) { + Navigator.pop(context); + final hmgServicesViewModel = context.read(); + + LoaderBottomSheet.showLoader(); + hmgServicesViewModel.eReferralSendActivationCode( + requestModel: SendActivationCodeForEReferralRequestModel( + patientMobileNumber: int.parse(formManager.formData.requesterPhone), + zipCode: formManager.formData.countryEnum.countryCode, + patientOutSA: formManager.formData.countryEnum.countryCode == '966' ? 0 : 1, + ), + onSuccess: (GenericApiModel response) { + LoaderBottomSheet.hideLoader(); + hmgServicesViewModel.navigateToOTPScreen( + otpTypeEnum: OTPTypeEnum.sms, + phoneNumber: formManager.formData.requesterPhone, + loginToken: response.data, + onSuccess: () { + Navigator.pop(context); + onSuccess(); + }); + }, + onError: (String errorMessage) { + LoaderBottomSheet.hideLoader(); + ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text(errorMessage))); + }, + ); + } + }, + backgroundColor: AppColors.primaryRedColor, + borderColor: AppColors.primaryRedBorderColor, + textColor: AppColors.whiteColor, + icon: AppAssets.message, + ), ), - )), + ], + ), + )), ); } - - - - } diff --git a/lib/presentation/e_referral/widget/e_referral_other_details.dart b/lib/presentation/e_referral/widget/e_referral_other_details.dart index cf8563d..fd1649f 100644 --- a/lib/presentation/e_referral/widget/e_referral_other_details.dart +++ b/lib/presentation/e_referral/widget/e_referral_other_details.dart @@ -1,4 +1,3 @@ -// widgets/other_details_step.dart import 'dart:io'; import 'dart:convert'; import 'package:flutter/material.dart'; @@ -48,14 +47,14 @@ class _OtherDetailsStepState extends State { void _updateMedicalReportText() { final hasMedicalReports = _formManager.formData.medicalReportImages.isNotEmpty; _medicalReportController.text = hasMedicalReports - ? '${_formManager.formData.medicalReportImages.length} file(s) selected' + ? '${_formManager.formData.medicalReportImages.length} file(s) selected'.needTranslation : ''; } void _updateInsuranceText() { final hasInsuranceDocs = _formManager.formData.insuredPatientImages.isNotEmpty; _insuranceController.text = hasInsuranceDocs - ? '${_formManager.formData.insuredPatientImages.length} file(s) selected' + ? '${_formManager.formData.insuredPatientImages.length} file(s) selected'.needTranslation : ''; } @@ -70,7 +69,7 @@ class _OtherDetailsStepState extends State { physics: const BouncingScrollPhysics(), children: [ const SizedBox(height: 12), - _buildSectionTitle('Other Details'), + _buildSectionTitle('Other Details'.needTranslation), const SizedBox(height: 12), _buildMedicalReportField(formManager), _buildBranchField(context, formManager), @@ -98,8 +97,8 @@ class _OtherDetailsStepState extends State { child: TextInputWidget( controller: _medicalReportController, padding: const EdgeInsets.symmetric(horizontal: 16.0), - hintText: 'Medical Report', - labelText: 'Select Attachment', + hintText: 'Medical Report'.needTranslation, + labelText: 'Select Attachment'.needTranslation, suffix: const Icon(Icons.attachment), isReadOnly: true, errorMessage: formManager.errors.medicalReport, @@ -123,7 +122,7 @@ class _OtherDetailsStepState extends State { children: formManager.formData.medicalReportImages.asMap().entries.map((entry) { final index = entry.key; return Chip( - label: Text('Medical Report ${index + 1}'), + label: Text('Medical Report ${index + 1}'.needTranslation), deleteIcon: const Icon(Icons.close, size: 16), onDeleted: () { _removeMedicalReport(index, formManager); @@ -171,12 +170,15 @@ class _OtherDetailsStepState extends State { } }, ), - const Padding( + Padding( padding: EdgeInsets.all(5.0), - child: Text( - "Patient is Insured", - style: TextStyle(fontSize: 14, fontWeight: FontWeight.w600), - ), + child: + "Patient is Insured".needTranslation.toText14( + color: Colors.black, + weight: FontWeight.w600, + ), + // style: TextStyle(fontSize: 14, fontWeight: FontWeight.w600), + //), ), ], ), @@ -192,8 +194,8 @@ class _OtherDetailsStepState extends State { child: TextInputWidget( controller: _insuranceController, padding: const EdgeInsets.symmetric(horizontal: 16.0), - hintText: 'Insurance Document', - labelText: 'Select Attachment', + hintText: 'Insurance Document'.needTranslation, + labelText: 'Select Attachment'.needTranslation, suffix: const Icon(Icons.attachment), isReadOnly: true, errorMessage: formManager.errors.insuredDocument, @@ -235,7 +237,7 @@ class _OtherDetailsStepState extends State { showCommonBottomSheetWithoutHeight( context, - title: "Select Branch", + title: "Select Branch".needTranslation, child: Consumer( builder: (context, habibWalletVM, child) { final hospitals = habibWalletVM.advancePaymentHospitals; diff --git a/lib/presentation/e_referral/widget/e_referral_patient_info.dart b/lib/presentation/e_referral/widget/e_referral_patient_info.dart index 2bd8e92..469755c 100644 --- a/lib/presentation/e_referral/widget/e_referral_patient_info.dart +++ b/lib/presentation/e_referral/widget/e_referral_patient_info.dart @@ -1,4 +1,3 @@ -// widgets/patient_information_step.dart import 'package:flutter/material.dart'; import 'package:hmg_patient_app_new/core/app_export.dart'; import 'package:hmg_patient_app_new/core/utils/validation_utils.dart'; @@ -7,7 +6,6 @@ import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; import 'package:hmg_patient_app_new/presentation/e_referral/e_referral_form_manager.dart'; import 'package:provider/provider.dart'; import 'package:hmg_patient_app_new/core/app_assets.dart'; -import 'package:hmg_patient_app_new/features/authentication/authentication_view_model.dart'; import 'package:hmg_patient_app_new/features/hmg_services/hmg_services_view_model.dart'; import 'package:hmg_patient_app_new/widgets/dropdown/dropdown_widget.dart'; import 'package:hmg_patient_app_new/widgets/input_widget.dart'; @@ -67,14 +65,14 @@ class PatientInformationStepState extends State { physics: const BouncingScrollPhysics(), children: [ const SizedBox(height: 12), - _buildSectionTitle('Patient information'), + _buildSectionTitle('Patient information'.needTranslation), const SizedBox(height: 12), _buildIdentificationField(formManager), _buildPatientNameField(formManager), // _buildPatientCountryField(context, formManager), _buildPatientPhoneField(formManager), const SizedBox(height: 20), - _buildSectionTitle('Where the patient located'), + _buildSectionTitle('Where the patient located'.needTranslation), _buildPatientCityField(context, formManager), ], ), @@ -96,8 +94,8 @@ class PatientInformationStepState extends State { child: TextInputWidget( controller: _identificationController, padding: const EdgeInsets.symmetric(horizontal: 16.0), - hintText: 'Enter Identification Number*', - labelText: 'Identification Number', + hintText: 'Enter Identification Number*'.needTranslation, + labelText: 'Identification Number'.needTranslation, errorMessage: formManager.errors.patientIdentification, hasError: !ValidationUtils.isNullOrEmpty(formManager.errors.patientIdentification), onChange: (value) { @@ -116,8 +114,8 @@ class PatientInformationStepState extends State { child: TextInputWidget( controller: _nameController, padding: const EdgeInsets.symmetric(horizontal: 16.0), - hintText: 'Patient Name*', - labelText: 'Name', + hintText: 'Patient Name*'.needTranslation, + labelText: 'Name'.needTranslation, keyboardType: TextInputType.text, errorMessage: formManager.errors.patientName, hasError: !ValidationUtils.isNullOrEmpty(formManager.errors.patientName), @@ -131,29 +129,11 @@ class PatientInformationStepState extends State { ); } - // Widget _buildPatientCountryField(BuildContext context, ReferralFormManager formManager) { - // return DropdownWidget( - // labelText: 'Country', - // hintText: formManager.formData.patientCountry?.name ?? "Select Country", - // isEnable: false, - // hasSelectionCustomIcon: true, - // labelColor: Colors.black, - // padding: const EdgeInsets.symmetric(vertical: 12, horizontal: 16), - // selectionCustomIcon: AppAssets.arrow_down, - // leadingIcon: AppAssets.globe, - // dropdownItems: [], - // errorMessage: formManager.errors.patientCountry, - // hasError: !ValidationUtils.isNullOrEmpty(formManager.errors.patientCountry), - // ).paddingSymmetrical(0, 4).onPress(() { - // _showCountryBottomSheet(context, formManager); - // }); - // } - Widget _buildPatientPhoneField(ReferralFormManager formManager) { return Focus( focusNode: _phoneFocusNode, child: TextInputWidget( - labelText: 'Phone Number', + labelText: 'Phone Number'.needTranslation, hintText: "5xxxxxxxx", controller: _phoneController, padding: const EdgeInsets.all(8), @@ -179,7 +159,7 @@ class PatientInformationStepState extends State { Widget _buildPatientCityField(BuildContext context, ReferralFormManager formManager) { return DropdownWidget( labelText: 'City', - hintText: formManager.formData.patientCity?.description ?? "Select City", + hintText: formManager.formData.patientCity?.description ?? "Select City".needTranslation, isEnable: false, hasSelectionCustomIcon: true, labelColor: Colors.black, @@ -199,7 +179,7 @@ class PatientInformationStepState extends State { showCommonBottomSheetWithoutHeight( context, - title: "Select City", + title: "Select City".needTranslation, child: Consumer( builder: (context, hmgServicesVM, child) { final cities = hmgServicesVM.getAllCitiesList; diff --git a/lib/presentation/e_referral/widget/e_referral_requester_form.dart b/lib/presentation/e_referral/widget/e_referral_requester_form.dart index 5f9e4d8..cc981a9 100644 --- a/lib/presentation/e_referral/widget/e_referral_requester_form.dart +++ b/lib/presentation/e_referral/widget/e_referral_requester_form.dart @@ -1,21 +1,16 @@ -// widgets/requester_form_step.dart import 'package:flutter/material.dart'; import 'package:hmg_patient_app_new/core/app_export.dart'; import 'package:hmg_patient_app_new/core/utils/validation_utils.dart'; import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; -import 'package:hmg_patient_app_new/features/hmg_services/models/ui_models/e_referral_form_model.dart'; -import 'package:hmg_patient_app_new/presentation/e_referral/e-referral_validator.dart'; import 'package:hmg_patient_app_new/presentation/e_referral/e_referral_form_manager.dart'; import 'package:provider/provider.dart'; import 'package:hmg_patient_app_new/core/app_assets.dart'; -import 'package:hmg_patient_app_new/features/authentication/authentication_view_model.dart'; import 'package:hmg_patient_app_new/features/hmg_services/hmg_services_view_model.dart'; import 'package:hmg_patient_app_new/widgets/dropdown/dropdown_widget.dart'; import 'package:hmg_patient_app_new/widgets/input_widget.dart'; import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart'; -// widgets/requester_form_step.dart -// widgets/requester_form_step.dart + class RequesterFormStep extends StatefulWidget { const RequesterFormStep({super.key}); @@ -72,7 +67,7 @@ class RequesterFormStepState extends State { physics: const BouncingScrollPhysics(), children: [ // const SizedBox(height: 12), - _buildSectionTitle('Referral requester information'), + _buildSectionTitle('Referral requester information'.needTranslation), const SizedBox(height: 12), _buildNameField(formManager), // _buildPhoneField(formManager), @@ -98,8 +93,8 @@ class RequesterFormStepState extends State { child: TextInputWidget( controller: _nameController, padding: const EdgeInsets.symmetric(horizontal: 16.0), - hintText: 'Enter Referral Requester Name*', - labelText: 'Requester Name', + hintText: 'Enter Referral Requester Name*'.needTranslation, + labelText: 'Requester Name'.needTranslation, keyboardType: TextInputType.text, errorMessage: formManager.errors.requesterName, isAllowLeadingIcon: true, @@ -112,40 +107,12 @@ class RequesterFormStepState extends State { ).paddingSymmetrical(0, 8), ); } - // - // Widget _buildPhoneField(ReferralFormManager formManager) { - // return Focus( - // focusNode: _phoneFocusNode, - // child: TextInputWidget( - // labelText: 'Phone Number', - // hintText: "5xxxxxxxx", - // controller: _phoneController, - // padding: const EdgeInsets.all(8), - // keyboardType: TextInputType.number, - // onChange: (value) { - // formManager.updateRequesterPhone(value ?? ''); - // }, - // onCountryChange: (value) { - // formManager.updateCountryEnum(value); - // }, - // prefix: '966', - // isBorderAllowed: false, - // isAllowLeadingIcon: true, - // fontSize: 13, - // isCountryDropDown: true, - // leadingIcon: AppAssets.smart_phone, - // errorMessage: formManager.errors.requesterPhone, - // hasError: !ValidationUtils.isNullOrEmpty(formManager.errors.requesterPhone) - // ).paddingSymmetrical(0, 8), - // ); - // } - Widget _buildRelationshipField(BuildContext context, ReferralFormManager formManager) { return DropdownWidget( - labelText: "Relationship", - hintText: formManager.formData.relationship?.textEn ?? "Select Relation", + labelText: "Relationship".needTranslation, + hintText: formManager.formData.relationship?.textEn ?? "Select Relation".needTranslation, isEnable: false, - selectedValue: formManager.formData.relationship?.textEn ?? "Select Relation", + selectedValue: formManager.formData.relationship?.textEn ?? "Select Relation".needTranslation, errorMessage: formManager.errors.relationship, hasError: !ValidationUtils.isNullOrEmpty(formManager.errors.relationship), hasSelectionCustomIcon: false, @@ -165,8 +132,8 @@ class RequesterFormStepState extends State { controller: _otherNameController, keyboardType: TextInputType.text, padding: const EdgeInsets.symmetric(horizontal: 16.0), - hintText: 'Other Name*', - labelText: 'Other Name', + hintText: 'Other Name*'.needTranslation, + labelText: 'Other Name'.needTranslation, errorMessage: formManager.errors.otherRelationshipName, onChange: (value) { formManager.updateOtherRelationshipName(value ?? ''); @@ -185,7 +152,7 @@ class RequesterFormStepState extends State { showCommonBottomSheetWithoutHeight( context, - title: "Select Relation", + title: "Select Relation".needTranslation, child: Consumer( builder: (context, hmgServicesVM, child) { if (hmgServicesVM.relationTypes.isEmpty) { diff --git a/lib/presentation/e_referral/widget/search_e_referral_form.dart b/lib/presentation/e_referral/widget/search_e_referral_form.dart index 21bada6..fa3ae19 100644 --- a/lib/presentation/e_referral/widget/search_e_referral_form.dart +++ b/lib/presentation/e_referral/widget/search_e_referral_form.dart @@ -1,13 +1,9 @@ import 'package:flutter/material.dart'; import 'package:hmg_patient_app_new/core/utils/validation_utils.dart'; import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; -import 'package:hmg_patient_app_new/features/hmg_services/models/ui_models/e_referral_form_model.dart'; -import 'package:hmg_patient_app_new/presentation/e_referral/e-referral_validator.dart'; import 'package:hmg_patient_app_new/presentation/e_referral/e_referral_form_manager.dart'; import 'package:provider/provider.dart'; import 'package:hmg_patient_app_new/core/app_assets.dart'; -import 'package:hmg_patient_app_new/features/authentication/authentication_view_model.dart'; -import 'package:hmg_patient_app_new/features/hmg_services/hmg_services_view_model.dart'; import 'package:hmg_patient_app_new/widgets/dropdown/dropdown_widget.dart'; import 'package:hmg_patient_app_new/widgets/input_widget.dart'; import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart'; -- 2.30.2 From 757ace2ba1eb6db950cace88e9acdffee213f24a Mon Sep 17 00:00:00 2001 From: faizatflutter Date: Tue, 25 Nov 2025 16:42:18 +0300 Subject: [PATCH 10/39] Added Organ Selector --- assets/images/png/full_body_back.png | Bin 0 -> 225750 bytes assets/images/png/full_body_front.png | Bin 0 -> 229850 bytes assets/images/svg/body_icon.svg | 10 + assets/images/svg/rotate_icon.svg | 3 + lib/core/app_assets.dart | 22 +- lib/core/dependencies.dart | 21 +- lib/core/enums.dart | 4 +- lib/core/utils/utils.dart | 6 +- lib/extensions/route_extensions.dart | 2 +- .../symptoms_checker/models/organ_model.dart | 41 + .../symptoms_checker/organ_mapping_data.dart | 371 ++++++++++ lib/main.dart | 4 + .../appointment_payment_page.dart | 4 +- .../immediate_livecare_payment_details.dart | 2 +- .../immediate_livecare_payment_page.dart | 4 +- .../review_appointment_page.dart | 2 +- .../RRT/rrt_request_type_select.dart | 4 +- .../er_online_checkin_payment_page.dart | 4 +- .../wallet_payment_confirm_page.dart | 2 +- .../home/data/landing_page_data.dart | 2 +- lib/presentation/home/landing_page.dart | 700 +++++++++--------- .../home/widgets/large_service_card.dart | 2 +- .../medical_file/medical_file_page.dart | 4 +- .../my_family/widget/family_cards.dart | 4 +- .../profile_settings/profile_settings.dart | 41 +- .../widgets/family_card_widget.dart | 207 ++++++ .../organ_selector_screen.dart | 337 +++++++++ .../symptoms_checker_view_model.dart | 108 +++ .../widgets/interactive_body_widget.dart | 121 +++ .../widgets/organ_dot_widget.dart | 49 ++ .../widgets/selected_organs_section.dart | 133 ++++ .../ancillary_order_payment_page.dart | 2 +- .../ancillary_procedures_details_page.dart | 2 +- lib/routes/app_routes.dart | 7 +- lib/theme/colors.dart | 1 + lib/widgets/appbar/collapsing_list_view.dart | 20 +- lib/widgets/buttons/custom_button.dart | 7 +- 37 files changed, 1824 insertions(+), 429 deletions(-) create mode 100644 assets/images/png/full_body_back.png create mode 100644 assets/images/png/full_body_front.png create mode 100644 assets/images/svg/body_icon.svg create mode 100644 assets/images/svg/rotate_icon.svg create mode 100644 lib/features/symptoms_checker/models/organ_model.dart create mode 100644 lib/features/symptoms_checker/organ_mapping_data.dart create mode 100644 lib/presentation/profile_settings/widgets/family_card_widget.dart create mode 100644 lib/presentation/symptoms_checker/organ_selector_screen.dart create mode 100644 lib/presentation/symptoms_checker/symptoms_checker_view_model.dart create mode 100644 lib/presentation/symptoms_checker/widgets/interactive_body_widget.dart create mode 100644 lib/presentation/symptoms_checker/widgets/organ_dot_widget.dart create mode 100644 lib/presentation/symptoms_checker/widgets/selected_organs_section.dart diff --git a/assets/images/png/full_body_back.png b/assets/images/png/full_body_back.png new file mode 100644 index 0000000000000000000000000000000000000000..2eda5e8f991cbec87aa9a39c2250db1b4e4bad33 GIT binary patch literal 225750 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
m%5?tjalHZq0hUjF`$)*tN}0mzqe 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%0DhYt4!8C4Hfl)l@ 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 literal 0 HcmV?d00001 diff --git a/assets/images/png/full_body_front.png b/assets/images/png/full_body_front.png new file mode 100644 index 0000000000000000000000000000000000000000..d1f34b4e583cfc22d68d23943a4e378d2550536b GIT binary patch literal 229850 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

wKM0@PvkIh za27sAcg9e>0Z3w6H|q5wubbC}Iq(9%T{jtydEr-o@0Z69-u~ecfZQbO)1v9pQsSTf z@8A6R$rqk}&E(`PZ<2h2#2%H7USZS=U1~%$3(}>vNrth!Mo|uZlqV)AHm3Qn0ELpw zAL$W1>R4~IP^5;kmlof!+e3%(a$K@i5rr#a)f&+;putTeo37_Y*`RUW?c0pIrThB8 zjG>h-YGa)w+WK6=F68Zy1T){D-O4+*%)2#tY%;b%>{9t1$ujkLJge7N=$iCUqV_V& zkVR74C9ILqAT3Nqjznr@gdz00+D}BnFqa}~Jdx5Ee{#>1j)8FV6o2V%&`yGg1>HtH zsv?%hl)j=8W(|GSL85Rbh(Z^Fp#X_IuSacS$WWu+uAx_JXuifY#n2*MC0BZ^l2ydW z_@bmdduMbeA}2~7OL}++T?)wxg&oC3_@t0c<`oclTMUi5i>pW!Cy+RLfPl?|BJ=a8 zcLY;&7)+J9F$sKY3`MpYWP}83f<`j$V(aWRTw3U&Kxb>lTUW8X_28FK_vjpz)~>seYAu-B+N!xeV`vzlN0bN!dd{OG({L zN~?6;jVoCF)CpK~2N_0Eq@|uDbv0;I^}3S=Pk|KkNiretGJdm4QFW}6{JY=zfH5(D zc{heKw<3TjlK=D%{NsQ3$G`fE|9oP8kA^35y~(DKDopdng}XBeP71tM7_t8I z9)YvBQGr_~I84*_HOYY1wxYtl@iGDmttOoxLx5y)1;)OEa0r$gD^;v{B|1E5B$iK- zolrly|DDPn-OZ~ACk`MnIgiHkpFn)+95SVGRMLE(?tC4B^%W#GuAxfz%oG<%E}fTO zK#y^rIdc?lCIOSqklU)mJ97ey=dWV&jSnHk8%LjUlQcRqdr`rov}M##PC`WLAwgxu z@b7x-?xNfO({u|)&r+@suBfs&le(1Z4jGKM!$IW{w*`Z`ZT2bd7ZNoPt zN6vD?cDX5=#qwa69sAmP2>|Yva&>G(_xs?QC%RDmypIKko76j z)*-=8f)~8xUDT=-Y;LaWB)Po@4j@Y^FJL7Do+R9Hx#1HOUSm0mmD0K}71Noz5~@kj zo!ZsXG(apx{wJ>iT9ilmfGkJGRt*?(LGx8)hHfuvsR-zWul-vUa82B}MM~r6p`_E2=1MP zdu<6drv&?fH)C&Sh&K0c)k(qp)cY_=u(KJabn2Th7tWxc=gs5zLzHheDS*-zAD?7c zLrZzsLpYYlBwzcGe-q5iQWv=$@iV94H5tMhIjtS)l2yi!9!Ghtg7vc(u=mc};8wP2 zJxlQ&G&xV>GLK;mT_fL)8@3$l!uhZ0Ts!+va__OHcUvfPOZEeK>BA5IM5o(JCS>}U z=b46vEW9hbv8Wy*jHs6mmgXILVR;J^q|2#T3IpEB^ZAm7IW{$eMKY6dii`XA&7j}v z>K$0JQ>CYbaQjqRdXn}OSi+sW5CM-iFKFAa(GpfcHq*BFd#SM~t2D-qKu4fnt5G8j zP$KJ*P)LNg8nuHSwTC1bLxHh;k3!#t^B1-FYhr2~<76EY8VwrVs2L);ahw}3Q_N|t zi7+h@XoE%veIC0E-ZeA^q1CIc28J5S@c(F2R~W9eP_DO;qabWEl%cJpY2J=9v?x>w z4T6NBx%beM7e;`gqY@1?!9a1?o6Ivz;Ik6crGZmv{{g-qb+nh3Q9nVJM<*t^ zXNH0_9V;>v^9%)03Zad;qwq>|3~jb3N378P?Vxjdo#&My&zYC7XYXM+M;}1%lfQ%T z(u+vm`3B_gdm9>S%ZTOoz-ZTW!@JUWd1{s#3*D*JMOyANFb^I@c;yw?6VnuXTUuW< zOidzv*KyQ7_6SHrM55%JL1ZlX*ya z{B$X=j3SXqMDu7#ou#HFGdZKPQ9SA$0xmH!54BY#OrSNXjjv?3EI-Sd5@@x0ya~DLiUhnfia^>M(xr(<31bpkZBihuG8{@5 zGMJ(Tou+u|ccKKZSjLoUa8u zr_$Tr*a1IDZj&2Al1v4K1a0&x`gEg&Vwlo-y~NOv??Icaz?_`L@a)sbx3`fVpFl3< zp?bZ77B%%@eHmkSK8PX1r@_gmFdzde?7I`qY8AZ;C*d|WQ6>=i)MdiT212q#J5Kgl zuV_mIhv$00V{?m>FskbeO9F&^zg#lWDw#-%Hy$ZH5dLS$_>Lq&L<%82sdwV}rt@R- zeGmG*i68pq-~Xj|zx&-??4ot^GmyW0F2DZP;rq?wIe|8!_DE5al%W{Jhqyu;X}?=?v@qP}owZc;mYiP$P58YN5_@^>Y<%i_f^ z&5DJ|bol#;bW)#FTI`9YA#Dp=W(va?sdQzLE(uRJ1=J?3VCgR^Y@u1}s4L^j;3r8( z_YL$Y0yer7UJGf=GNzXd(_j!KkO^qnI)qz08o}s_Fl!>k4d6;ELrWV0Xh$VshAI90Clc0D%BhXh(vr*xrL^fUm*7 z54W2-G&_*4YkaR{j<0kb6K3MblXLTWh|Yt{_a%8C!w`&`!}>OQ>&x8u3A#E-Z8Pb5 z1P6hxK6ML0SeaD^H{KUsmU0TQZ)C>j$ zi%{}b2!39cA(bS^$pG|JmY_sIw!S@Pt(?1`C*a}T6vo^V4CKZMKl$7fM}Ffy|IaVD zHsL`gwu>tw?E!fKiVGrlRoO6tHIj~Asnpbd9b*_G+f(u?TmnV6PZeG&P7m_pka;Zp zJBJ%ed!kARARAru1SyY~i&|85vFBt~D+R>{MGsH34?BZlf}(3@8RKcmNsXf=fWy18 zbTjLB`VpW>)~7V3Asc8(LR!*BX?g-nRCjNp&tH)mjS9L{~`49F=$^lnVWq z91{^#4ap=GK~;(ZrJ`6`1Pr6^n**_VJxzZPc!!p}7MX=BU?`ICkdBbOXD@9~Za%r2 z3iI%z&T64*AyF3Xr{~!4d*VLHad&wq?elRH1hqVMgM=J|#4ge^#kG|^h*d7F5v19Y z=6<+QwKEYOAw^!BT9B|XDyKSRTgsjVx}>9+BgfBgc_IY&qn;`PhQey(c;u$wl1VxQ zN1v`xNXvcDq<~4y$Z*r}FPuSwp{CcR_LFDWH8G3c_yKG``=}NOruQAd;LMA(jw{F> zzmK{`5`F4IHp36OmYmEKbql`!>YBC>@CoEHcsxE%+jiqRU#Fw)kTD2VR1LRiL6d3b z_U(y^9;MTK(AO$w=}2erreMSvR=aVM$}aC5{nG#aegD_{jF}l9yJX!`8pzWheE)Z} zR+p3I0|zw=P;?5p2!)=@O;dzZsj?NWEEHHn7gEx$%qdAryFaP-=%dyTFix8;HtbRq zbht^=+Fe~MH)A?3PLr%$X*?8Y+aR@s+YEW6lwK0jwg^0}FiVQDfeFDIi`FeKT$6wy z310H|!T{tBI+SsXQgYADBz-lcG+we*`vVy;?dpbb%&6gzumD$d1H(`e)9ab)Y?xt` zdm_gnAG)nnxs!ARhH_H%W87$)XsD$stW5f;>gy0ygPS*&iz;U&Ow!$o9ox!_8WrCd zrKCMyB|H?(MLV=4lUrC*!DqYn18eGdz@h~Y<--NM97Ac?46b2-sDxb@UQxi$L zYTY{0q)9>;Ns`MIHQhYW&??k~HmQ5D88Y|`9R&2kUQY$!z?LE8u5MB*pI5hKNLH98 zOQ^i`6mqY77g~q!fP3O8t+4f41m7bMV*1D-YD}+S=}+E=*)M&Ej&KOt8)#m68Af`X zVdy!eOWCMNw6O#uTjaT?yxrL1@fFB6JanmZxf8rmtgaxW@ahZSVMv#m-h=kJbLcW; zkp|En!#Yc9abyf90Xmd4cM9fa+BU)@pSQO5b{u=)^*p_g?iLnuO8|(R=+nG0p&8S*=U*GID}1DmqQNXM^$ zVMRKr3_+5*Ov_RG(c@iQSdEB+!=WE#nM$D-g~}vFNEt)9Igk;Q6cf$1mXUXQQS%_l zs}KOQ_@P6rRor!uq4VHy1IZ;b;Ds+vg&}lbn-N9MiS`zeDXr`~YGjcpVx<$36CFIEPGGiHaxm1po>Rl0LZBrA-6!dIiAf~n> zkaHUbw$$C}dGT8eDP^8FLp>SQAZ!W(tkNGuLa|IvLC%y`k9s%vHC&PUotO#VT`|c8r|?5^3w1~ z1ZakmUUi%A9gkBgsbwk-*`^ff#Vc#Hm}7cuPF9V3mBM;kXmdyhh`9~de=YT=yZQSkU&GiqKe)8v#h zNL`2|D>59ByS*u3Bg{hbAf)TMC0)=H>R{NKQ(>woDy;%6WhtSCD?6F|+GSiC3`yOO zGH`;cP^c9@5+fD{dF^0cEl|D3NY z>^0D#bI~Dy#PccS$z-I>qErbh_}Zp24|yQdi`bBahB8({YDFYuRCmUTX67U$gEn?u z&y6E@Y=$(_5Hm7%Qy6R3uFwNm!HLe!ffufUyA15 z1qz^KHVn053nwvaZek%*!j-d&nwTe@?!)WL$d?K{hjiSwYZPM1CR0Utb-t%E{!;WB zSHP64$6>fk)@AV8vzHh7^*C=HJb%<+WOT*WmFv_&rWIr%1$-h3Q)`nOgURzIOwtIc z?8tPy#`+hBCr_q~yY6aZ7py-YKyI#KaewC0J|9aN;62x+4pXPf$y_O6O#YT1T>9M>b|?t5a#7GxS45Qymz~^ZAk@{E2;O=mcEe@l6#& zg(=yxDa@#Uh-8CmoWJ9Yw7B^l>9UJ?q3a*jlk zk+gRae0{y^6EtWOn_i@CSqc_VVOURw0G&1uvK3^azO+1dZWd*R5nCr7g@524P2Km% zIJ^_jQrpw!q5_A8J(3YaQE(|4WH1G2D#QO zg0h5$L&;~UwGpIwtOR0nb5j%b{3fqEUSqw}wBhOExv>Of^q7QRa(uqDgoqEcsZ_}K zA&}6t+un;r_*S0U4`3IpKOaDLi6i~^OHUqKUD?=^lv;{tr$u=QmaP|^W6ReX3@Gbp z(=rv%kPj7B#YK?@#e7pGtz4W8lQF7Ru?kHFG$i7U6X~74s3L-fJ2P&j{zDi+i}Cn! zm(Lq?k@OmjZHp9D+nQ`8+J``e^uUm&%<`CG3#$mre~VryEJPh5E1JCRN!|munru1& zJ;4Q+EF>nNAsbBY=KP)rqjuO=zz~qq%`QWud9e;8cS+qROTkq1lb91#!=}kLL}wXx zDEP_<2vVR}CJR4P;E77A?jg)3@Z=mqGiIerS#;-@&oU6JE42Z7?lj>{N8Om(`$Pa& zr^4|dg$)U^#gn#{$xD)()Zxfy2_@xqXn5#DtC__BkI``&@E9$EZH$}V%qDf%u!Lg* zWIE()XA+%+FXA@Ihznb+A!#GV_aO?sY-Mj_WS#9-9@S29X=%Rf*Xi7lMfMDolU-Wo zCaw?Sh@U%)iOC6UZPsLKQ~TgMBO&cF-JQv43|Ck69LRMbuh*vL;!{8JwrS%EC{(Hu zzx+Uh2FTJ)w}-a|7Qz^xEtMb1SiqXa^|JImk7vBrggIFSn@k0L^` z0G22i0(^lMA4i)^hJN?Efu19o1Sh~McW%*!9Rik7qh-0Y06&!{B_HSc;l>EWl8zXN zI3F@AB@_olv=IJVTo}nbZLe>j+vsTOyZ}~Gs*{aK8;NVuSk&)SG#}fJtX-k;(xgXz zCN75b6|s2Nj%72{5>mNFjosFIf&ocN)fKmX=k$$qir@cj@5Xe?mVyG74>M?4b ziZASwY)j%qIh{%Ax=)K)a&WG%V`eOeh2?87=I+J0GmqKT~qP{h9GE4ss~?_bc2&gyfV$S)zIU#;uf-W)9NcLC{2xNRC`Oml~R%SGMo zNBu1d1Pc*O<${w95R;@NvJT1OOz1@$ZC2T+k|QELJEi?%A971DbSX#-&EFgF;*{r+A4Jo?zuwAX8Mqn;v z;}|D+I&_*UJA=QIM)>Iw7t#w>*&FZRp4`R7simzgHn~*c3Ih{X)UDNMr&jf~BqS`; zGXJDDelik4G?%9*y;*3nQp+&3pNkirV@cXF%;>og3BaZi9lJ6!5n(0F5`~j5%ch-e z)Gh2Ur}6Bimr#n46*9o{^|sqd}uJUAcVj4N0os@NMUF(cvtiVglFh4tGph$zKp5Z$+wWa7peErS-#w;avr*5AOhmj2ed&QsL|~rExk_}hM3wH*3b>6 ziBvLlT=`kLgXVWp(` zl8nmeN6B@eui>lM#J-;6PfH|Gs3Ws@cpU_NPXS(TDBBmVA~9P)qJABN@+1mJ@5AZm zPGRrCIrM8)9ZW7Q7?ON2uU>_bOz~l;afsg5ZK(h%=R!g#Cx}Ei%~Ki36p5$;w?%fB zAF~uF_i<3Dvz3y0V*dlu03IKAG>mbX^i$`nK?fCS*!w^$Z?(ODI zE`-F?!!RnLk9vOuIub!f73d@~9mW)uxobMO2%Hj1=wR8t3XGzA#3hDSCng$ODTP*0 z@Nl&9_R<#bVEHlltJi1&r)k4RiB?*^CKtXL^;k94d62uK0EMN1CoV#t7uSHcW!#aF z$y28yY6}qP9Vr!yfI`MThL%{a1TnJ%X&%t#=5*|6v)Eb`$KxfNax{dCYZhpf5a#Qh zSv3KvszZcD<|B)z2e zF?F<5zt?D?y-`)zmDiuh6;#iVgflyrfkU@P2XTqBA?+T+D9^>9qh<~}8s3CE32xH* zQRd`I*}f&?A*2Vb8AhTtZy1-JJ&(h8%;Uw&FCe}D0h~Ya1hQmonPOg>Kg-x|GwJGM z*mPcuonh#by=!XDTa+dsc_98ys=ii7$87E1-|z4`;f+UGh6ug{LcC;DpDkX zpxq*RclYwEE4azmuD5Zooj-F}8X_~UW@yfBDK3Kr4Nc??me}3eN$=Kne0)>WjH5-v zko*lvev(i@V*!cF#ifxuw{J$FkIquHqBmCnKvK$uHHetk>*CVNns(&wRMt>PT2YyM zr>Auta>woWB`3vGVbu$x2Ft!!x!P_J$}&Xo6_zlx`uhB~ILbutYOc~kH5^2vyXa^LFw@ASXo=dQ95(oN=*T$@8+Z{By|spvkxb=k&b^2<{T11!PO2hsbl8kIZw zET6zlzIHu;Y^|)kCYBIq#E&|BNCK7>ZOmv2yP+Z&G$q^DJA^nPQX``d1MNC3W|!85 z5^M9K8cJgxp_VdunIfV*mNpX>7s3xCVB+JgtWY!r>3_S)J6cz(aiuGlf{-L{@`4`r zA`98)RVVoy5=O}}X-72vTQ<0ey^b9Xp9)0WY_IEdOFNm z(9(!m1d|w2(uIpoREEGI7OAoY*-#>S4nu8&C|R(c5l!>(#SL+zo+dK#vejy%UC3kZ zKpA;5kC35A^QC9dx$Ax&Gl9jG9GI@AVT*HO~8<*&`G{eT45_LlnBcVFTF0ojsRrr^lC{`3yIMJHMMJeN~?lpn6-?S@MCMkLcnsFrr=!p>$^*FtoM zok7>)Tgunllm6M zK(vxQ?M2d}HL2l}l+p8|72DdD5_CRZTnge$Uv(Ep=C?$7a5|M<;&!PbzPh=h^JWh5 zt{a=1ro~9+Ks^KEh**(*D#Sy;jyo= zWu(R@G~XgFtVviE&sSeYDkK;d$h@0c1;NZTys@Ib&lZ`AO)HiZ2PUm*N5oe$Dr0sG zX2Dp%PwFtAz0HyTJk-lrK5zP@>+x@$RKqm7G?X3JJu3A-_cS= zxr<5b2r;B3c~IVmW{U#8WIb#Cu8y_R&TZnn2&s`AAO%1XX}$JAeoNZa-P8$XyBa|5 zzyE&cQ@{G3N@DFrQcaXDt*k@5OCw?*hO!G&@4%AOBzHU0jItDEHmZg$PSho9DBYtZ z{@6(e7yOq*FERWjgU=K;wHUCX;4Et!fZusoK#+E%vR=3tyO)B(lZhWFcluzZMYAHR3u<%Ua(=r?!m> z&rN1>zs~+Oqkt;XP2{s^Gg45tx`F!TCG@y~OAI&m6blNRn(HBbU>gI1Det~yDe~M> z>m!!9latUSPlk}uEMZ7L5ekh1sdnbiGLpd6X`!-l9X^3fa$j<@vzVNop{SYCP|}bP zfREJ^u~)2Ls+Qi`5(0)n{{Dk7#!Kp=U}YKR>NN$xU}`4PEvQc!W8?6ic?Ed_Kz=5V zkH5HpvLoF(LTqoZAjhA}AZ>Ah#M1WpZ|Qp?HazJN!95B~rC89Tbql9JK(L~a%!q1< zgb7N)W2onWu96fAssLt0BQ)ezuv2!RQL~EveiqQ#UVl9R`5c)ayBa`Rt@T`Q&>gcW zs)Z_OiDm2P8zM7MwGdQtG(ukiLEdQBHr44ccM8MQ@etQWvI#|G<(*G17Lo4N$`zKW zyVcirbb%iUp)H0g%^_{!>L%i3HdX2l!e9y%4}D=fjCW;f7^vY;1MZ0XBy(vbxr^)}N4G?nlJ6#U)I)51Ob1i9 zqKv;fQD^G0HV5s8PRfKEk=~#sp+3l zFssZ&-dq6z8PhQEEp((y6C6a;9rA7`alH_mCh2pl zLm`pQhEVVL4j728AU!n#z7`oiB|@F-|F{;KN%bsgzEsd!QuXcWb9A`5+cK<*&Onwn zc3uX7%ckWWa*O)FW(e)?nq)YUqPAg6j}l=~{VqYFi$=Sr`5e-_WUJjrR>J|C$I+G) zEZ)(}C=+d3{Z^DuV@0_&sxQg$si+%LcS)llwKt(opwbfkzV!6adKy0xPK9lhi#pRr zgy}(xn{OyRLj!d-3X>C2-N^Pf)?PkI(4p8pUdGYa-G^dnT>H3cMefQ9&-WnGhmua@ zHkGJD`8;KTgoD&$&gMB+-V;fC9X(}?YSMvKe)-)-xxqXpJ^iX z+U683N!KEs)np;{`h)0hAfb%L?10W_ZV7oAPQ^QUt4UTvkf_x< zNOY;Sa1*35i^%TT%X2`{HIPBq(cGJ0rw_LPsoZ-9C4$2Ky$CN}gUQEh@m%$&JtXO_ zWVy*?@RoeY<_f4^w8;`|Nr-bLsg2rBp{U7K>(m^!H@6gU@>3JobL22Z+40C~?FH!7 zw-m&sWuip}XYQK zK}EbD&5qSHc2hIJqDpwi7?Sf4Wqi`QWGK<>3>d;tRI5kvx=-tFQ~oU-0x6nJlJ!Wd z!U5Spjd#={K}51GyE37UXFNkoGEETbQFQaF9&FO`N~fba2kBBqpV#2=%ADH_Lkc-| z$<7oFM~cci1hXy$UH$poUL24)v4ak_R#&i5Tf=f?6>DxvM?jRy1?=U8EjbWfild#) z4K#V2n>@xuiaW^O!rl zpXc8}S_=86`QC{x<)+fwL@Kq@=0S2l1~Nd5*MVm71`&uzCaxpp5t8gC z&X^%vFY1z~>4jmG^ry%ouAk@eqORZc!|!)>2xEG|lnSS!FG%loX_#Y19jesf5Z6L% zSJ4l5O4$_&b~F$L4@85~rKUw<)<9>~MsrZ)fhD&>dUgsG6#(h;?%W(0(TIbtbYM5p zkPR(qUD6LiwG2Z$gc*7pB8Y5Okr~hH@G5a~Dy=R`1el^!Z1Q50HUgUd%+1vxkR|z9 z`n8I-(RGGMlQopxqBcnqM_|CaykW&C;Bu4jZn#ZmA|p7*j~7tp#XKPM*;rpgV`CLd z>+9OxOXmIN8P8|Q)-*Af}`g8_53}rkSM9qyQ<39Vm ztBXb5(=>4bts(jgmr-50u1RfiY8Y8bz7wI67HM}FHE)U&7zLR7JdYh7uZYJTv6D&P zWiD^2oYS7Kd4_yLhEmcPdC+g7*6r(E+7e5bu1jKOisy#M#@7{yU0xtKlqaM2b$x;1 zMTR2f2CZ9Z9gv6ik@xEG2|}UYfnT10dHpKI)OGlCb1=0t9QlIV(l9Y-czDxmZ^N6P zJckcmS-})v$40%02_ENqtA_$vhmNIyRDHKFWVqLnR+2_c8yxY3YDj21hH7wnClE}K zFxreBqZ!J9>R_SXuy&eO>rK!IdV+2@`P${hbVg|HXcl^BG@?GBMpRj_ zlhz)kjjQfqMQj5*DeuwmKqszgPO9EPBOxmqejREht*1)4Hesj5$vd^j7@wP~KL|7v zv+0GJIk~~#ol8sRsH=K_F9g(f6-YW8H5GBymGMH&i1jV$7m>m&8A^-cL$}ez*yI@h zmh6f@pU4+@aZ>D*5evMiG7L|~%X!U*=ut?NczW0iv>s!0vVy^l5yGKM(oix?TIeJjVZ}{ zV^d?8o1NBL5wUXzU1A{X zloXgz8wu?NBF&<@J$1vdQ{<@=2qooRwSXWh{?yD5BaG`fyPJFM?nE-#;RZep1UG6- zwBwfMe?-|KwoX_Z?lcEBqB@kFl6UO%`BWYvcTP|0P9nX-*D($Ks7^r`0yk{8OSWMr zX*X8n`as8*Oja9pf=PoLWg?kZ(NKF}N;)>;BRcV*jqHL^ODW~oBq+!s27gjaw zqCA#ImKWFd8m+^rDNK-oG~3*`$t=b*v?2rQE{zI5DDX*Q)KrP?4_^~6T&c%t1CHbItCJ`rSG%sDl@`clwz3r~3Q@hj#i6u;MwE6fpk3-t_4S1|6ZuBa3p>97wPP%#V zJZ#mv>PktQ0ZDWlBOpxi^@?Dt`8nMHO@=Yj6+SMHN39`2(O2xu6akJR4%tXMDhkZ! zH48P)jos`KB#LFE2?qVut8`^b+Pkznyb9~~*CWxR7IN_``b3}K3n zlFbl^9=>D=OHPe1O|Hjz70@<*(}5Yhp_Ioto=@^VR0+Z}1paz+12r;0xsk~1;synD znN8g1-xy|6!BUdzWYBmt&QDq``Vo88j%;G#_jbw(%&4D?r1fje8YP%1`B2l4u%3vG z0OYf|qDJAyr|0V#;SEtYno6(kt9&*iu&|BDLC_E-gT(xD zL24}rsi};7>~hn|+?GB!<1p}5td-K5I`23lf=-c9$R!h)(acoo7^a|>iXq9*!v;ej zSJKdFBhntV2?nB}Y**WuEM{>qm%_@%1~$ox4opm-O%PeyY-4I_4&w|3di8Bo=`0u& zRbzAn(%A$Z13n%%Xs0iBEsvRWyCXZ3p_G)I%a}|%11+<+dbCh8ZEYUi-fm#Mx{U=o zHe-cx6bL2*o|Dx|1vAOC*0R_XH0Sslm)cQTe7K`lOQ&?t?<>0qrE-`6)Zw{m$Y5(t zvrlU4fGR^OX|@!jeo-cSDit&8JQ>4Kf8Wx14xY{-c0@awC`VbEk_g7TbA8KGK(@)O zBxz3=K+s&rX0?L!!MoLAYF>RAZfO=Cb&3w3KmEmD3#UbZfAJFpkNujY7k}nc6nyuP zeei5?Zw}lHEV3w}sM>&tk3&95Kz4Ov-KDS*{%Y3s^CCCy;8P2vCR!I?N$w(>q zX9*-SDNu%FC8?3f>|#$Z%qTTq68OaW6@xE~E;MbyXj`%9n%xmiKOIa9=t%EZD^3f@ z8{#HkyBa`((6>~3lDd|iBr6a;IeQ1NHO6sF{z} zcJNMVQ9lv!R7O40e@3UWO?{+{EJKbBUa+}B7RL|n!}iKL&MmCq_?}smhHYFYRqy3X z7^he`-tXvL&m$XJTJI4=$X=2%B2s3`#9_~z&tlJx12;lj|2638Uif*gn%1#R0& zmthG7+^q^WYg@FZo0ufyNK-%P(Xpr!B-52GwCy>ssy;Cj1A>^>B!8Utd04}f&y`EYXu1r zczL`7hC2gW8a+?(*po;l2rOHR*zSZV-ElAC?It!)zKl4v5v*Q9b7LEYul^>))~=xc z{3p=ccOTuP0<05Hp*OylF3qec@9@$zX?sy_koFRhbaXN%$tn$#{2tHi1dlJSH9~SO zxtC=gk5A2m3{U0;Niv`$)JS7)nL*sto~X&F@f6i`G5+MHW0U2mODm&@@yL_fczxh(nW^cBMB+9kJK|H~HG#Axx+ZK@cU7MchM^$BalUje2hwN)z>GT2Kc4 zePJ3pWKG1go&L32vM=99RDK{AiMLa}?lVki4<-4E08(4#zdeo9W4!7sEnkbVq!uO6 zXeZSC5_v4?^dJJ6WV(7o5!h&LQlXb{!Oi8ULnKjMT~)SoXnGbkvX8UP4(>cUkL>mu zE?&8U{j^Ds&Bd{}w2tdtvW3zZ^#Rg&hBYzXq^@r+qeqc5qlH<}ULmohf%JeZq3hEn zXlXYvZEq+SD(}F7%;_Cc;7n$a9gA8Ews=S0;GJDm=Q1~$WTyEPH7mmo0c5}0uaLg6 z!w6hOh?Oyz(n=wdX=;Zvn?GCU9oysMNmHdHK~08z%Run!w2b2fr$kb0ZQjW#KuZ&- zH0@ZgUDa9~c~6{7T6**lI7-M+V6`pDeC-gV$O0WYONS@mT)%?rl}$!16jB!!DLyxl zd&4^ryK({Tlh4CE{vZ;2XJLHePvMoxJPzLuclC^FAre>G%0OvNlLdKpG`iDC<(1u- zwEAOwFLOIB7n@>Fx7%vbZxHQ=28Y8 zfBpqt&>0+^$>aRRi&*Of*f&q%u+_xY+A>20>I!syij!p=qYz0215JiD9`F1e>NDFi z_K_^ePCLkC>8^Cio~R{A>qcIh+Qdi_-0Hl$nglgla%m({jCVvC>fICIl)9ewPzN}f zydz7tt{|icg;JR4^Y2pJa zU8m*|ApgLZA-1`W>hsUSy!Z8p%}yZr_`~SM_<8>U*a9B>d(%zoY!;9DjKSv`XtO6* zTN(thMAXQdOfk!FFDJrvDz3$so7-Dx@=~jK2AT|0T4Yj^CEIFs6i8dta60^2nlowI zfDyGWP!Qo~8Eh3uQJ}C|KWg_N*O<0e7!I{3FM_BAq%?aDwKMikC#;)zeSR6p-!Kb} zr*|O8EpLbubrXtMg;cIaBU}-6$cWxB$Bb!sqD(}Xh7mCZ5k114jV^sZebGJaFq)Z%%^RC#^28ulPKHtL?0$hyX zu4M|66)Zz9_*mswQ3p(Q3C04Nk|r-2m`d|fLnUbdT6D*2L~LW}4+XwBb-sof!cU$vPDcL>NhzchU}(e3@aJCdJMsNW;Z~qe!NX2R|fn463*r z(FU`3isbyL_o@hxF@_nAma=#Ga~WNbz&1go%M0qrVG4fKR~~=-MR?RY{?7e(XfMt4 zt5w{2Xdhyv>1P+OA~`;ez0@Rzof;YxK?h_bTVx(iwusrihmapD(F!KuQNQSHSFycW z$2MbksW2X+NSn2WXl||29cd~1NO8l~`R~Q$HEn}fDvzOC2290mG)A(c<}(ULaXVlJLl+R@W&> zwDkPQ_tON!#6XJg=(xC|Aq}zZ(}^igBh~9*;pH=0nVfb_Y@DE@k}9Hf=bbQ5zJl)3 zD$Kj@LcpK39(x>Z>Fs)y?#tMWjwKBkb_8*PNUIlh1lz3e`(&F8p`<~SFfv1|SIbn< zH%)*TC;N!;#xohWFvD{?SuW%1W=lKi>kWn1Ra3Mm+P6|R+vMvNcTIA8gh>ed(Ehga zSuRsPk6a_+PHRZ%gr+@WRBIb(NFzyup41JY|>r!J8>_}Zj62zI)q z`;nuvW6x@RE)&4eDqBD=NO5I`LP@PKN@Etga~Smzjr#9!L(pE;9wZ{b@%IuIU6?J3j=byM zamNvqxd|S9^d&6tu6f^UZb!-Mkb$gVe0mB8#?CLQ{SN1f8(-PgMf!N1<1M)cv zlVmnshBJ*i!l&TTNH zi;vG>^58MxGW8D`HF@N?2F;UqY+CRz3?*`V7eq=Zad)m?z-17{c7XZw{}y?G7w%cXY#VFszldmKsAB z5t3!NnAevs{cTNYmn24C1$ti-3gtXQua&4~DDa{luE9=Q$Ee5SPyxhu-B);h_HdK0 zT`i)@-o992|+&ZMAK8dV_}8>G6RG`HiUjU9B|%9chpoMp=T= zZCnz-`kv%i3^cJTH#JQgwh5OPgk)K2uTAU}+#&j1?I$I3UikMhI}x=LFlE|WpYBA| zSXtT+hOwchK1*hz?HXESwoWD@b7GI(egu{4D|qp#lc*d&iZ{IG4wSfoPQH8|^LyuU z&wLr@m#?ChDN|rQM3%9M^|ei%+ms?W)S5$`P#5Fon~?&)?QP9j=(J39`P@0`9mPx@ zQbAOs;MrqHBME33h7}1?@J6MM^@ZzbW+@z&Ceg@k)9EP@A*0G-v4^#-p%ZmClbWC& z*_pXh(;?ZK(mY5&vfc5tCrB|L<%`s);YdD>O_0noWJ$$S6r_hdKLgcZ=+tTx>XDt**BKsxrxNh6km6p ztm)gn`it?C|KT!XWPN#YPYjt#$YW1M{dE1_Kr?Y=(74o9$?RJZr9}_B5nAhzK_j|} zMNMoy1r%kkyau&dvzs`Nzs~v`7pLuN0CAFume#rrhpy0S%_a@Qo%yZiPFAoV)fap^ z#0hqoLzHQ3sXh{=scZSXwDFKPQCbK}P6$~=o$kQo{2pZ>QlzE5M?L9_)mNq?iDVKE zb)+-6A9ej63R{sWWKyLnT7wK#(k8%e)H&XDREV@qbEki*)SJ-3SX|L0q`i#e-^>kt z^73VTf=iEu*@*6*X$+=I#np z=5ZDCdF`uOt&pKm^VkwWxSzyiK>#L;t@RDm+Y(ZF+Cw#4%;|X<$ea~gvQnHUnUq59 zRX;MMbw?NNE=6WL#Skc?o!N(4?-5PBlj(ay-o1jYDa`i4x>mP_erhrzo8YqAG6*eI1Wy zPg*SQ2=_^W^BoN&5;~$`<)#iMlWWYz5YI=6@|-i7bE{V3wKH9U3l61L)b+U-8`8+pvtJ=cV}7*a#YQ$uQyP4u=aS~nE9X>2XqX{sy&rjXSxS*8^?P@+9ONheHdlXCRw$EkZg{_Jyj z<7@9HFqW}M_L3uD_J%u}(9VrYKD*jPDhjLZP_x=2Kv5%Wursqbh^$-3dhl!&{HGZ}E2Ir{I%Tzb9Zw)g_PIC|mvC{6Y#f_pcB^QQN@oHbv zVN^)BGpS7+iipNLNKlZqf@nkbNP*LILef&T&yeTrsVlg^O*V6U4@$gwUAS}|=NcWP z%LPp3a+;bh)t`Gy6Xdg*Cc7hwnblczv%5qvCLsY#*x(an5hH)Ha@+7^9X_ zg4J(hacL0?Ya7~pWdHs>DilgVTfN#ri^nuBqHC{#*78Es)m<2qfJhh#(|)f_VYx~g zxRZ4)cU%HQk&cN&yL6kZr$+tAq7zi4<00=)h5EhvYgge{={U_#00dakfTaJeWW$Hd@B^$P3K!#1o64;bYqeW3_caz=CuDP-*E2}Dp$jq1{-itTCJI~`8 zyw?71RF@j8&M?Gcy)fz)q9QWly?4(&=lk}z_u6Z(<+<*}i6=Yq9K4?E08(r=dsZ~w z^@6#UDrTl7To^V5KPXw0G`4VUS1?mOJ4`U4(Kb(p&{}xd*~%}`jHK6}N@iU|friJY^4<3y13;|G`bu8epHI-?=meI6vCLvfLfP3^m91<+ z9)9<>eCf^a$rzjH#+5CdS(!|Ilo1>{8Oa{CKGC7DQc-#F>P6W`R?@AX%6lI^l)aM^ zDIw#i7SI}wxysep-#u36`+SND_Ol;Ug>xG1 zh||83$*Ry%4c!mY!7~&u!uM0BHjR^>juy3}mNXHl*EXu?1Z6a1A$HV7cVmXHYXK0Q zV8b`RcUvBPD$(M^VrJ;GVuLLko%jfbd07!W_%+#ND{Nz;pp+(5@vA+(1dxM1 z+(+B<5WwZi&W^nC+RL(8t;ivQ%fnLyj5s}O@U_gg(pi)rl=@s!XFhfde!#yq((3iE$Zq@SrW)b*abR9@L=JWpa~NlVsSbr(bXa&_5|6*02#@~ zR#B=M+BHzR0NKru!*K}aD1%0L4y_L#NDHm)WHqm5)tqJyfJwEHsZnB)*wdueRRbzI z&kaUB%_KPu?c!RA0x*;~GY5x5#;$A? z5^}ivSRUiEy#Cowq9q=edViu>2<;|9nn)$c1Bof_p^PB5!HIb>NHP2HjkXN4Q4VZ| zbJK+(csfT$7bG*a%*vIY29SRPuOO98bri4)P3G}5x@+q;FlsL9$mW{`PiJ^PfgUuJgXQNtH4JAhl_&}nVm220wP~xQI1YMm+O-k&ct*Z*@ zXqV#qT%ZdxbXxZA?#a9N9!nP))GIhm-?;fIvM=Bx2*}9@a0<3RqoOl3ssv_77Cw=p z19iM!g0)t}){M`_rep_YhyY3@_LX7*A107}bVyE+^|17dI!5$~UNBT>YXC&O`{V?{ zIw9-JMYNZ*T6*=Vdx|Wk13aeLZp-+rB{OX90X7)*PiaM(Ut303YF!2hhWqGR5!!O7 z>J)Ma?*!QjP1F-I>U5M+PVL;uDT#IitOI%Yhhn6w0?zV;i?bc-Z$^{kW8KcI}W6>I)SYO@i=vm7E zlAyPW{nP}TM5?F~jFePn884Pl3{#b||Kx|HkUPa)@l%1OQ9o zc^v(p0V_DcW?#L$BiAl0NeOUc?bai?^Zq^AZM7ueM6U8uLTLgA**mJs5bw1LJmUho z5;L?fZyg@WsZSn8PBxJ4SMvp&{Mh{Sk#vquewwtmGJY$NeOwEuaQu{1GR0h!= zg5v}H+bJ-eB05eROL;nIBfDs6;NVOT8M|`?*D11>X0xFNQE7bML@^^P*RM(r+1SCY zTappeuD|u(eZ7YXWL(r>B?Y~K`!@gxTmaZSrydIK2TQFvf=aj`d$IH!)a!D3(vp@A z1%^7tFky=wL2?84gT5~eLIqk#VE<1L#P8pFPs+GoH`X`h`)54_wS;QrdMH)H#avWq zbHFm8%vA-Sb=r2O+!LfY+V0o+82o&iW6h}gpU6Lv=j8R=8%rf~`48tDVJCPR7$8)G z29ssSXis`Nb{|z=RtFE+QNGB+gM(r+&P<6ztV4RIsN0ii*|>I5qIl4cA3Vb5w6Gx( zY6`^4CxO$2qx1Zac*Gbp*|sT>Y}*jZ##jg>W?3#U5sv}K%#mCXV`;IO&|Eb7iTK=tV=UcuF-@PS5Jt3{#Xr zQQh>JL{$BM$0#R`5tO+(i)g{FRCAKTb&uM;1>HZUAoBoiWjeW$n8oKv4V4rykNgs_ zp!GHBoSexqFdM4S7w~tlqb2?Lq=sO42W{Z0mWQpgQ++;HcQ(Wy40Tv9o+hy^#65PA zZK2GG#1T9i=RDVvQSC0aOy1d_!k96jXxVb8|YXv$bPf)aP{nBG?sIl8-}Q zS1kSxPP=AjCKo^biX^O=^mccpd3uV@L|(;iI3mx@PX85uWOyg)8pjzB(x#}limZen z9yo+ zd*I1MT~SWP4%!_VVI$R0!nBcQmr7YFm(!A-M5Tw5^rSyTph(Jv3!73xusS$x%k6qc z_KRs*#R)wPaf@?FF*C#Fie@Te7fPC)%$4RZV#fI$dhPEE+ea;xz<^21=Ksqcf?*fL$O%odgc>kTdPZ(YL0O zPs&JT9z3~@fb~8yr8AVdtC6XUaA^GYCts9*^yWM0m~Bh7xCC%KEp~ANybGb9<29f#VX$un~DrFY~xc|G?5B$dl~+L6_+iPy>ek|Jh-%~{8$OJn0!k-}2m`sqWpeuc zv20w;s62qb!){-4sIAAyG>)-hS1Wl*MvaF{A{muod!Pp2{F$ftIj88#lqv<;SX+`P zPP+~|Hv9NF`D|9MvlD{U{SYVa0otqkPwG;rW@QOKb2(wC-W(1~0W0bwgG#J#NC_?M zG_s;lr-|)_i9A4K1P%@dQcy^$Rav@p4V|i8>7iU8R>bm$nF_(sQNN+{L@9jUY6XBR zuA4!Z8Y@%W>lnI66sKm^HSf(-Fxf>JQb5*Gq#Y)3ha^?zk!e17cuSvW8Lj9H+Pjnv z^pr^~DjQJ1^Qt|#5Bvq?+Qkbfg9b`+QRi~p0wo%nG@%6PEr0%k%?Jr zS@DoT9PAy7`hrv164}TSvc|nG+U9iE!+m{uwIY9U|3H5B7haYJ=-h0U^75OPH|5X& z;#*R>d{bW8S(TGPA6Y2MS}$gd!$aL)6KOmCvqz{504A%Ki=U|kbY6xV$Qmuh^Fqk+T)wZN_a3~Lf?iZGF zva(D&gg(}=r)pX|XcO`wk?<5E7({@s&1eKgvQWfe0)a}@g$qF#1Ez9%bvU!JfNa$+ zjbbCr(OFRo2?QOA)WkyLmm5d7V@TUZ`ktVL8&dFiiqC-sl|djW;iL_z;*LfB5R1LE zRFVQV4+%~wfPC40PI_!Va$$BSQg1cnjKJw?3F&-ZGPpJ4Zd+Q|u-uH>i49~y2s}9H z8;3`7=im$}caF1m_E`5HN(F)hD4g$tJF!zch^z?;k;iQkuo|-)ZLm|(lTF?M((QhZ4 zMu2Zf51kL*#{yd1QEY0KdnO-HM@e@3gWG6tr=`5Pq2Mb6Mr1K$Nw3~GvZFaY zX%MXU4)#%|oJtGX&PlT?`2vS3ooaKB;vH*EABVTFvCpcVw{>DYQ z2OR5Lj~ntcmsXM4oynEUEAoquFL(a*&*Z|T7bH`v$k{1^q|a7zLGK^upQw$(07A@& z_?d4JubXNIY2?n%vf1@#=YaeKg9l&FeE{ipyY_T$?xKkyh9Jh@In<^f&u)M#p#gqj~zC!dmbPN0=jlT<}V7D51# zEnJd`n9g%^a8S=t&lw9@2-0}hQ#0oTyFFO+?7q-BPFsj$OXUC^`q*-~3b+P;W-^i2 zZc+|qMv5|qp6TSIl5rjQt7FrTkWG||C3V_!fp;unlZ}wAbOE?VNTM3H<>Wz6j`yQd zM(SV1hKU33@rDEGA&p=Qw7e3L&81LkCvAC*GUf)!drM`tu zs#5y`pJ$9L)TWsB@4j+H{^$SnoATOLS*{^Nxr=~u<@%Pq01WCY|Jnad ze(CT2Jt?45HXimhV9q8+XNLM8KG!T~XRtmj%hPTgF`ucTt3TQGGfkzQ$|E{f#3;S16{VrT6K4x;lqXmbQ=F=OfPmaEU9>T|(Aim;C?_PL zKTE9)ag8*6B9U#*p)X_>mGvb(%?WbGqb4Ac~{0lZ$ z1>k5OWs8qZpCenAN}u~j^1wb;KUxmU@#kfb74%WVH}QQ%;1Mq_6{LoaNE7YTF|r(g zZBy1?enmQR3x2WL+tjbOL7y{U}eK8N;b z5lUrrWGks$QU=YI9Nyc*_a3q7i9kp%m@vr72ggnM;`PgNZ7C&R zy1gfV|L0yspqL;SH>3foW0g@`SjU?FjUj5x#qKqN=i38HeNXo+MQtHKCMA>XzZ9=w)zb}0YP zF?aT6d9s)Qg3~n>l`c~10#a?F@^h+$V?j>6iMIG?NlEi5l98InH4SFf3mZD`(!&N! zMh)j;IGQQ*l@#~{zK89{5dudZrzcNalA=;L!Q;_oIjgnsy**uyF>KP1qR@EaJ=~in zu$D9e)fnBRM*w1Jv#F!z?6TmxYy>6;_rSA#aA2Go|u<706%DOtI+Dcw^vFvuhY7&^qszXYs;+?>6G1F59* z(gKcgMotR8zmANr(E@;rgWv?^(IsRZuUy$QeF2VX1~nnB9144)a{Ro@*XR82+#9R-^d>Y3kGIOaln(a>FrH-xxE~!n0lL z_nEfXDERW>+iyvwoRh89b#1K%$V^yb)Ehko5=+1iDD9^kgr$iXj~KOtSPbbIKM%{; zW8xP#`ILr9vp`R0F7z>_0FdsF=f2u6^g2D=sN96pp&2mqfHBNQQ`I6Nu_*ySZrC5m z;q8a&AH$k{L^E&7=lR4Hrb^cGsZ{~6FaoTiwttK+(nw2<4t-egd2%?ND=5>Pd7v%X z+F*{Bt*5DU6RG^eV{~7TvODW`^NTxs{cM+2Pu_FMyuwt&(G_*&Oi>o{Y$Z4`@dSJ!~FE=!?6}^Tw@Porf~x! z8Z_fj8-UX%_ihV?xK~%pw8vCjge3(B+G@Z)ssQ|Av554rxajR-;pC@&s4@Pr)XmI{ z)+`3_nAza>Br+Bs9R`|ivt^q=>obU3x|w1_M~PSzgYZ%Nr{f7tWm(dYBS7Gi#56ks zU=r`0tCUq`{NV0GDXuO_o}Hi(tsYVS!~nh_c=Wq78R6RKW}jf@bbKOhU;tTkFgRO5 zMk%>2QEbvYo^&5whHf7l7}rl#bq@M9NUg@t%CfXUz-<5&UA=fwR<2*CEjSwlvb=po zQf%dN&WJj%xEJsCza?JZu&q^RMP2;x^~mlne)==m_^!0?JwT8Ih{~2PmKt?J99lG} zYG7RFfcQ)zp{oMc^Z8Ia?X;KRd=QoI=hLAEZUzMs_*nkXd3BuEqv{8*wuja;U2nBC_&Z$PTzdxlDvcrVT^L>=94)CBVYf{Z8^h1!3?E#Qq#{^ z!;RU@qGZ~ADC@6(TBors^uN4Cc4*2t zxp?vuNVLekrZ_IU3RGI>xHaVox$y&IYDE^L&N$$-V$g^vzJL>DL|aF;j3d%Vmcg;^ z6v`D)>xh1uuic_C}5OA7DTb08bH$tN}58YqzYMMWGf^b#aLD$ z@Ejvk%3woQ^4usbIev1aWgLSHXLQ&?C1~eFNa_+~FQTOd7c85t9x{}f?de9%U%4We zzwkwg0(6}tYgt>pB<0mj8Q|LNh1#3t#`SZPdd<5{xdKaF=Vejmp|gACIyyxeIlg~S zrexr%se!G}MSXR-!@Ri?s)kcwPY6sYTpX3rh#@rqWQvi<&}SC`m^?#C;_~LU`}=bL z@I+p{aaq#&3WDrdMUs59w1dWxlI~oTiDM30YB$i7a4e65xiNNUd$=(3R(|E>odVvn zA!U0iKbPtWA}$wg!%DA&YDS z8-*nh{b5yMEtEDEYu7gVtVJ&lFtj6Qxb85p6d1N5M)x%u*oxcCD7S~~YCfZ3cc|B~ zboH`SUc4a|$yFcTk||ohCA1$otxFL3tZ||p1r4NR;<5vTjoLZdmD=OSqB6o%A)lzK zxMb;jn@vd#KaV^QYREFsGka$_XR^gWmD-qb5L@D054$JSQkm(D6I$U2jt-uer3&rl zIi!(!khOY@;5x&}PjxdJ8Ap=cD3l<>lM`7(8L=(#MP-h4P{B{R|G_(w1Wq<{jZcxvNbq!9XruP#w7I}@u&lJ@xl8iX z0P^F19UMLWtUvdndJ^O2&pEYEaLo>Nkt*AO%useHu%M3~Ka?`S#w<4Kka`g0B;czO z5gVn;2w;{EOd%}Y&MKrT07ns=4Xqn1-5d+r7V>H%Ir~(!@TO`2WBP$|KkU^cz`u+^K1qFF1 zSfhLs{gHDMyqNhAm%;ldasAwAZD1*EP5QVt4tqrwDp~ybJl)x$BL0x3z6et3+u!)A z#OO;hMmd4M-vFMGLuOM)2cy zz~-VNm#ez3vw+@j=qv#vnyPLFgDs7`(fOi|DBIQez6_b5%mny6@oY%S<7eSwrO=Vf zu>yQuor7`6Mrhy3AWB}&fEq3bHCbP(O0z$fC&Y#T=w?x~zPPrA7BMmc20tv2G}`A; zj_c$5`h$sf&ggDs;hAwPpPUpkgux%r83JC3ob)FC#W}|9!i&YYom?67rX2f>yG&Jd~6`GTimIhRmVunM7D|=ze%V0#xwy$8Uv3Q`C1v@!Q z`K)@Ea8pc>HFP?j6jDi5+M>%mxeT1y;J*&*hZ;aEc)U`l;-vx$3 z(3X4^NAU$w9EW8IJxQ1aa8YWf2p=eqzv~WW*d#O4F%i=>;eCp;?4o&6t0vvrsfsQW zpP-<8FdIq>r|q?B6O}!LqTjbGM zh@mu^qD?s+dlEyYlXuL-Ggas<-b-A22SJXQ4dntD6sMfH#l4O4K6-}1OPogYJu1Qp z4V?y>eX(1{E*H=eWCneu;f=tp$k<&Ah?N4VWm_+t30A6P#OG+;JH(Na<(7| za?nx%(-BEtmW&YaBfQ6sVHSs$VKI+z?_FdaeXOM-Hob-Gn6d+guP@{9>7fHtwWvMI zY2%2*d_!csa_yq*K74|EfsR@tZ4M<83Dw6e&`ulG?_=IHIqCLp;BViQ=iv3+1`rzW z{EvU@SE{PAZ5z=X%I)b$yh;?B!8Z%Q!)O{Rv+^>4HE%l84diHNB~X1+s&6@1AoMQb zz+A*NBmc@S4b4=njRoR6W+0CG4Qd><7;TT>d!r7)NFz+dOvEv|?}kQih04Z^ArPg5 zs1AsYnbzYPlMzP+Wths-fu2FIHyi+~NSF@ILa3SLOpL5mZtex>O0{@vVJ6NX#uJ;} z9kxknzep7|c2Km9Y#G}`y6YMJ)sP}&`dNLno0HhEAvV!G8tVJfUXnnlhfMA4@gr4t zAEPXoZ0+d8@f^V|L00SbWpRG_ccgy!Sp05NQrHCiz6tJgAptNL_rFEA`lzo!w1?ob znPOLID1*5Xa0+lAIOyo9Sb0cS2%RqGFdoar9I5QcN<3sVSpdi`KPZA;j8>xfSe@|* z8+Ri8;Y4SW#^|I)aX&8tvskYdq>_p$UnfGxKKvp8PDU+>g=D7^|6;jB&I;MFJUEc7 z;Ti)iXUH?^4*FWcP=P&@N+G}mQbgN!cyKDtwX0(1e7U$(LI4f`fCIY%4&~V~Ela29 z2vs+hsx+hgOs}58suq{GZ>Et&I)w0VK}QNr(a* z4acGCsl534FUSjTd|v+LKl+Dq{Jk>-zPPrt$DDD&{j6q_f;!6Fr&(GWz=g(@)IbiFIN}3ueF-vmn zt3r2}4(93|YEzGMm9J&TbU|)h=hFa6d-fhL%(@4IsV-4w{WS zDiDpfJg}D$WsEHr3;bjj`S!2f}mXoc4Jhf9l;{W_tc;l>gFRCBkIPa zoQ&iBfCo_^T1zxw7XbfKZUO-S$=K+fnUSaWKx;{uh%M+o-E8 z$_Eblk;5|PeRq@6)s`?7_VM#+7^bs9o{r&1B3Wr6<5@}MWpva;Nw`a`UEy*I= zNk4cjPYxUM+Ldh?@9&Du);7v%A`-x9l0)GisjGm{DRaS?P-0!>h& zdY#q^?v-OvF72GZp4$M@8w^&_0?ns5*FwUNV@_UDx*c>km>p2mhuFhbwPJz*4Y3&r z9N->vW6!|FPY)9+l8e#D)c`;@`$(wh0suAJw0l(#!_on|8JVUW#U`VYiew^6Jc>GI zSWb0F{5gV3XiTJ@;to%T?iK+hp&FVo%`%kfIp?VPT!BrN67-7gV<&Jlouz?p1C&1` zaj}N?EyLi{0X4M^FuEkFlorm7`WMr8mQk)En|iu)5HG3iXkY@=*+9E-Xi-}!sjOJu z16NhY9J#P@K@Na*aL6#jfj~7(vJ@+@7Uo?E#dNUok)E3wA)NZ;d>}ZLfIpB~>!?SH zEmuk#Izux-YdDL~oJMDZ`X)SmTiw2Xc9%WxxuuF-YwJsLU^%e`;CiF-ED&l>s&G(*vj3^TnxN|OdMp$a}%G9K6LiwDHq~Kl!p8ymw26oYVzwMC}w3592!B%!%PRsRBq<8q}EX%Q=5N zw*jQz>lIN`$0CJ{a0L_aQYk|s>9(&eMI~_IA*Im@rA#2R6DoFdl%6M91PjXp{=xBb zlEsu|%Aety4bI6~DwG+cnYnHhEoIblZjn)N5|t+jPBP*NN|xd#M$qxtDV&>Z##v-5 z%oNCAU8Ez5N2nPSfkHKE!q4;Vg)gsQ;aVy!$QHAw)4OrWqU9MwH^Eje3f>n#J4Jp- zv!hgYW(QGH>LY;$%rw$&27{=I=me_uQAB2u#^N4ev*t2cDdHZGNJnZpr3q}_C;TjG zV??7#saDsed2%R4fY29iyawE;sU!UX$_wg*kbLE0!&0Fw0gT`&(=?kY8nY#o3~7MF zEZewYH@B9ggU$`TW|o&%q|pPdw&u_`ehaX6(n$fb9gtK@oqXI`Hw-L3SB#1Xf4fqW3hhQo(DF%CT zOz1S%MkW!%zo*d({_xHN#kMpEQGycJnPR7hkKAE)IK=viO0UsTe9J@N3D-Au>UjU7 z2LN!-6yVhoi|S;=lSVU%0w-B|@w(LCdC$lTP=^=Kh*Q@NF_Ux@8LgM8_4_{!AV1F6 z(b0YxsjtJ~ruoDGhvYWs5CJ`I@rMaE_Zr%H)L>A1LCscxbC9adp(rc}I>V*&2@@O` z8MH5JYga%;U$9tINH{R=cG~*&jHQGAvJAGt6x5m++d?J^d_OK^CmvBcH33aWOBZ)R zeK#O)xBzO|MVe^_HP`fBffoAH(0CeuPG<9xsg$I=wILaRz04w%#cDpVOqvaOgw6wl zAcGLSR*(hjhM|rpF&nC&2iom$B%eijLY~Xe)u50BU=;TNDk6{&=;6e0l-GvRVN9D( zWHHo%^>z5}f)3^}!EWI+uRZusI*;!w2ZQZnpSr>bI&`ovtgj-wXrrtFfQwj=`1H^=8A_6*~U4}N}bgtN%Qe;UzO+xESJz$ZtNdP z_R3`ms7jVVCYQ^LAICKh$Flj_%hG(FAr3N@`(I?+N0RIw4_D2pLFTU$M$W)IXwWm`6mMMSWbHUG}OH|G7N+>YvLdTBHH6gcvqJUuSyaGDhGYAdn_-5)Y8# z$7nI>PBfTVoP+UlXgc&Iif2UJD#IZ`WC<5>UCpB-sRAP*J2u4iY!SXdJ3F$m2{0Dr z3Pqe~a$P?L7I7l4|IBM*-Ml6fnq859fy|?~e<+=LLkV$Hu92A0fk82+&y(#K(&A~T zp2qd0S1USq^X^BF@V;ovR&$2eLmLQUW1-Qw3S>jF^TEw-Y$6R{$#_ty7J(s5@$XSp&*C^ZhnUn^4hxCn*X$IKZR#ve z80B;XCacgzV_6ID+t6?FGe z0C1KRcWSEAUnPg{BO{lsVbZ!8?C4QLzDo$4A%>sr`$qVOtENp2+QQe;FBEMw)vM<*Wa%e=OA;N`dl)rxwBbIaThFqCa%LXPXq+8oMhL1Y%TX z5N5XHkB~hHyFO|Cd+avZxO5enAq9u02y|s>N?o$N&&M^fU!@o}mErK7>A3X%;%g$O z2eNcwQ)1Vyp&Y>GR?qUetkXRF&OM_ju$4AySw=)6k~;HQOl>)BaL z-hAslIX$k+3hsFZSsK?DF$!{0R9zpK8nH38kC+>Ub-zE+z&Synoe*0pBxQ1Rsva*6 zN=*;otFyI^Ksb;<50y|>@mxQ8@IazewqtqA0}9z!gy8dN6bWl5+KC}uf#TtEPG8UE zH14fiw+g+p)0blEFXG4olN8sWfSV zXr7^>tLQD~YAiD#CV?#UR#BR;qrrD%7baK?Lm7hB}{2&1T%3&osNDtTGK=65@Fnccr5!;e0c>G7eKK?w)g0yZ?+ zsIzWY{Zi=qMiufz+))8&D$Z9?@?;PYY-B{bFo8`VHPN)$#);<;xWj*k$W~|~#m!}O zJ4~j<>0||Ur&9%l6_CX}8TAG-258wj+(Xc@rBWy=$V{mOs;`9$FIYF0FtbAB&)~Bu zQJfNmlr6y5v!o$mi~`Hljt!6@&Unz%k9VbN#FS}|iOh*JB>Uff6CIBuiIrBwLe_#0 zq>_eFls_!71}DcdL7*6&9LVtTzIHd_S1-tw&wU0!?3%Q2pBiTk1#hPs(Gdvnh>zL> z`SRNz$d|wVeHnB|vc6K1D;HL@3}RL=XU4${i5QhdjuARP$hP{xG}x{^IYnT@e`l}` zs3a#8hDIRkqP$5I>EYvRSr`Co65RU`_a(ovEH3_S$WD@$MV87rxYUM4c0BGjU*w8D z&%uMQ=Q0DC%?9h;c55d^#%35U*r1lOLyb0wNRhQNyCxB5K}9z8KUG7>RcO^3+J(_g zzwpgv7D17ph*~xnVP+-#gbNEyV}Odc3Jg0jFy1p-jc9p;h6-wJN(BbZp%hSlXm*0~ z#igRVZ)^@#B|bFzqGX=3*+cz`6m1i*A>$DQH9ORx!)^*Q021ILjXLeTCBAc6)z1Z` zS&dx-Z2oL9D`C{qP6Izvl#Y1_7%tOxa!>GgB&s#K9rfTPuHxbp52L2N+r=qcT1kkH zvWHlJrFe|5GbGB>pyVJx&XCv#$yfM1R3!@?WADInOYxzA9{2Yr<`+LJsYg#_|Gkgo2!SSWko5(P3T;AbDAn2wHtCs*dP08^5C}`bB$x|*D6n|o6MMmlANmI5jtm0roKuF|N z5x7un zu_ygnIUIp0A&7H46=yK|7xIHPEdM_UpH??U$Vl0aIHl4!9cke>oY1y0q8m(0E8h^@ z`1Lwi=21crSpdo%vPF~F*c2&JgDPQLII6r1lESiBR59YfSkwu8z8M!ae$MdtL+~~*7 z`x+R@%4Djo-5JiKC|!MygeI!I5-N`uA`#sT3<#8hRDe?Pg_zz$c3j*=FdHI(5MN=I zp{7l?0VtDk4it`zw-0qw#Ec}+F0zPhYVhc>ws6VtoS}`&OeqP>fvWn%#Oyc?Wq^bD z=6igf^mNnqE?v7Kg%xyv9zKyyttPS7KnfvR?^%>G_}m9)$5KF-WEDW_?gw?1L0~CG zz?AJ@W>+y}8qBtu$ig;|;oSoUa&2=<&N_YRA*kh|ah>_0-RAM}nehU`v$K0O5o)w@ zaMKHP2yx@`McIApEd=N>f__{9YhpCa5X13c3%86Z_E668>$wad{eB}#HE^D;Dv>V+ zvrz5@Hg5nyqR*S_2-e5d+eLWqSZ;&cYGi>52p0$vO z;zIV7f6D*RiBg@paY7?u#8d=}j8+QVv}ee2=0Qxm!2Z)rX(76-X3}h>rW3m9^@L>$ zmt~S28nTXYQq{n2h(m0E)$k0+kSQo8A`kkaJ1waSLrh=$uE9?dkFpMZ|n_8rE z4WP8t^y~$3%|S+jw@4$v)cRd4a(w+vbXvBOOB#nXTr(Z!*eU6TZ1Lh6fDJgy%i1j= z`D_g-{4zGpP-lK}I>nlzE-5y33md(Q_oOrcvk+z&w3!Se$Zi-K=(0g7y_R&Lxu0ma z2JC1t0CFxRFoM_~F(zOi7O&8K?5 zslXp}TKF~6>?yagiVYi)OtFtr0k{P+73#AN2A+KOZ=mx6JcwACi))ymO-rNhY@wtR z*d)BM)H}o9=a5-Y*0O^DvjM=he%g}qwTlSSQ)Gl0c?e*eLeTlmb>)LtRItbAh!7wL zSQf380NkRq0+z&=>ze0H>?%6*vfcfC;@IapfIOENNTYTVCyK7MH5nhIpJP+8j!yt{ zpu&_owJfwy)jE*1GFx|eLQ3M{X;0QA+pDBab9_JQY9L_RO$MoAAp~T#E;2udWr%Mu zPaT$HhRl=C0Gf^hbUsd$QX!>Ia2ktTR|nRT1TRTi!*#Gv$N3IhOB=(|)G~}g#xdkL zn`A10fuz<`VV-05(_SAz0GopPpa;iV25>e*J4Ey?VYy{5N;>+|*lZ8alvvfm_Y+8E zM59f`fP%>Q{A7ccQyFb%jwdspdnPh69SE#WOqWpf%0XI9v=)QB*omWi~UOkXr+u z5lrEAILf)`n@f0V@OzjKAP~*jXogWzT*eb<*DH4p6 zG@=IFNKbi^k|`P(RV|OAGbFi&asDY(sow_Q8&a23KXaPIVxR?)H7W7r&NoJwfoJj>gzGBkO6JTp?RvX*NRI zO@k+!;5HKcLj@b}0j81zf!&#^xG&?_(BH*AO@gd>?%mg^&!|Y=; z9P9I={G_&LdCD)$q>Qajr~{E2Oi8|DW)?LVj#Ayx;$)!d9-Z9A<@`sfOyRq^QWk-8 zD6=OICA#-WVzpDTraip>OvfA8i?+ilvYCOF5c6hThTW$0>vfp`tBT-#n)scq{_^p9c!gv!taGJu{{}aG8_NP?mFP{mgr4rI)jLlx$=D+BwS4crGJ@ z)4IX=)x6y{3V9-iSA_eszO|`jM?YdRPHL@?>5O6~VMiv8ob%Un89)Y|+A_-y?d6M+ zE99nSNs`5bC(|=nc*H0G$&}uS=t)CSVB(_jl$qqzK!dO2>;(y9{BJIP{j+7dE#xRX z1!)y;RVO?%K0jc+u7b@b&=9oMazyy!eJP_w=%TB@X---JOeh3|pFQLJN8o8!i0n`f zTd__LvElvkKuZX3I8lWyQt0O+0FwPJo%rH7m5K1xxK$gET9cssU=s84zQNuGDg}Sr-m|+8QT* z!({_YI}*vnlm|quSuYaNaQr-ZT z$E-7M1}WK%ir7Kcjit^#ne4d?Afx`^(o?fyZf**~kWrD(rnJN2tDaAw{0=Pv*l}PD zYO`}NG~@1xs5uHk!y?tJn~GPIveS`x!}Ro21;~^b>Zi*S*f;cZ{;v-Vf@O^pE`)_e zjE*W>z#)N7U#e)!5`+t8^Mw{>s4ZP~c-YY)qf%3PWJXBK)o6Kwz~L=;B4$BO#i7A< z7I?zMQ-w0l;Ha3=%;=NIg5(ylO~;8tXMSi-ZxX*)rjfEuabq%VZ3Z#&La?a^^m$<* zMsS&9v$4HM&I8Mz0a~LSY>de3uS;r+s^utUa1E8q*YQ3489m%H1Ob4RmYT2mN=BP< zx{+;Q1dONhk7NZCx8n72gnop;#^7sdTYaX%ge42h%5VWTQ`m_^iWI6&VPp4>Pjbl2 zCblQ-lifY(ob6*#48>xwXqb8?v0Pn&jSh{QU!we{#*xU*fOG48=Tb6Wa3go3%CsICylS)1tyiC zWhy=<9RRD8#>8hNj^eTec8pq{>Y{S}a`ht1O=}k8E2Tgc^q8UAVcZ@~6LQX9&u0J` z^eUE0!|}f??GA8LCeYdp*TE=&s2U{R^1fn_M< z+?*=uui1-jbWweifl%azCnCEmLu`7M7L*Ru$rg`zfTz|3TGxBVN-@W&R@L&HYS1tp zVZ1*%7A#Y+(3lGQ9yj>>2em&1gxCd`(kZ@x)*%)d#eoS>lBdCG;jw45NtIWk23Qdd z7IfERP$XltOMz$_N>O-eJlD)5imx3ZeP@6g^l(a#5WxCVWHW)vCDORNad;+UPRG9d zs+4cOrYS#XK$wkhzIszC8|%_ItLb#CzhKDHpO_|B0|W=s{U^BR9#zE{%<0TFHJKMl zRa4q#uEBriedU7|CsWiDD+l}d9Yi)Jydx>PiXT~$7dmcWA zvXPk;Dh4uBFx1E9Bz81G31d@7g+MDM4$(;|;8|Q=D&SD+iA~u=W>NITVL6MR(?$lu zH9|6=K2I^ugrnh94;z*$1iC^U65u9=4q$|=Oy`in zgP>|AQ&4>v9wh9#@leG2q5$GgGmwAXFEaC{!%;?kZnfuu3pm?3G~mZvn;!hJ(?CkRQ` zcT06CjOPi5!UCl{8}VWV4cYBM;G#B1t=mIucCOtXE+v*PN-bHOzAT^kXRu z<|%mUDP>($Wqzb5wC$m_HTC~DZn^Z^iR!8~?9Jp1!J*z8>hv{vCA_MCB@NOGRhti^Hp)hP4X!ncwZN=H{cwe5{hL4%)Vgs;g0NN*!s4E&h}M`BYf!x%uBopJavkxOYt!=U6W z=5tWaTF5}peV6okY~$Lq$tY*$ML4*I2aNzgZUI@1RJnet1{UbxXT;Rg1h#m}2`vSp zdb%lLOhivFvN)g00orC7PSbsMG8j43M4G1|H#birRVA8hb~3=pRir%u>CU!kORC8f zRnMQ|FlbH?unYj?lI+EjsXy_QH=+}@3#kAC!s<~wH};&w3KIFMR9}5n1$=mNPI0>X zc+WIyY~zDtqy*-a*o)elX|QBbJq^4O&B95QW><>(q7j|ewX|$eX;fq!1NsUCmd+AJ z09IyKUz5azi>T2n>c4AcqPme-<13$q(ulxamM`zftAF#iXXzy@xsEI=w6S$uX2 z0jV!ZI@#g#jIkMYxEaBeR-ObpxtRiB3PXV0IRM}@;1&Ve#hQTyzTQ7_PKcpUt|4YE zx;4K4DHmOC z*Zunb_rGt?#^a<;QYrvzK$O2W;c1G?)~EqBj0qG|XO{y#Gkf8uFr zqxb;{Q{;W9bGy=qP4M6>2(>_F22kYJ(@|c2NFay=EmE=PI2}0|tkwc3Lug{fMH5f} z6t}sDla(OZg_Ww&puh%VHWV&o1DFx%pcaLJRPGR20zlN|7jMY61`lKy0m=~6*nMOm zx`{~On$5K3shJU3v2ra84JXP8_L5$3VTA#%jM?HNx1HgxTLa3e+$pc?O z30U2}Ea{y~l3ZR>Z4i#WGgJ};WCts-kj+Js8h}UuV`jB}aYy7g|EApg&UfUf_CzkB z{pz4>=%GzIL$J=q9h62a#T=tpPpb^im}wC>j@iCyg^t*L8qoH$YRX5lVEH*id!epo zz;RI*LK9$@Uw=d9CpCHWhyPfT1#E0Q+v#FVpTUQKH8Udyd15?M;56}MURGDq((Kmc zxHpy8fPn}V?EAiw`#fZMS#)BK@pIb%v#UN!V+YT0B&mdP*`poBXhP4Mh?dT6-194& z+tNe1)~U56lSN=r0V4E>`T%p06{#XVbzUfJ#qkOrHV8~Hn`GItdJ(g8Mg3KP^fnHv zqMY;Bb4etdOlDEFMkL5K^K}z4gD@}rw-wQHBUBTTKo>d784{J^aU(WF@PH-9949=* zZ22?TexqlJwtiXj6859%59@2rbg=tEwQ!a$6JN6pPPtM)!^eLIInj~#5LreGsVt{l z*F;^d;?()zNtk4X^^Beo9sX_v>bjCU`CiDSfrsY%+b*Kqo0mHnw$3jI`sVC7I5 zo&I>PMorEl9i|OIdW@6a8z|1ABWPVu&zYoApGUgitM^d4aHggxu}W5s_ja}2NI;V!M{^*V0ZNCpm1W8P@~_B;?|onP zPY>l{HY)jPLxY|#Nt8>-+!9KbQO7>Ea&0w}LQCC4Ky&ePhCS7ADbMHHHQ~UTjvpx4 z5o%N(EWE zdQF4-!>_$9Z-4dcl0!zgN{<;dJ&sOyfiq>Wf#>q*q%L#E*32M6o(wfl26Q)!`~dhK zpgb(1e3{}vYGa*La%E{ZJ5nwi@op!bQ^kHtK}Kv}r7LZIc9I;)-7)q7l0wEa>^2l1 zqKcW42IuotIp?qEE`a2`S^|qM9av_}o=insRl=UmxLTS;C{f2U`XF{_sOPMynI;qI zC*zYeWgTGC6U7k9SYxwOz`C3?aGvnwHE=`C**ypsyb#sb6rKE}GaM&J$3)u;IkiY= z*3SUO4Q1$&)*X>*C2w?ACnhstF0Tw#g0xTPT|xuU@#`YUR#qxSX`Y-)uT+&hT7}Lc zy`A!8vleqW{AvX~Cwek-!?GhpGS&#!6h|iHGDu=k()NIqZ3`{P^yMqq^xKjsRK!Q{ zjb`)cV4TV6(Xo2&a`R^J`@{F%m&>31v>XFq-Ta%sARAX+l;Z~DH1gPx7)~@5rmKB9my;<$k*(g;-MAxekLq z9(|vjo{Xci4KXXL!G#A&3RzvF(~#|z3kZxul6<2&@rt>fy_Oxd6bKiw|?gB`w>y^+3EGS=t!J9aU3do4IR@DN4Y(`FpMy$o` zii&#tKo!hdNPn=7r3&{`R9wMQ{Ml7Drzv~pqnTnY>~_#SOy75ACQm(os%<^gBT{qf9eu=ro^lwb^8{40bR^*i1PDoza{Ezfp;dEa|e9=!Wq$)nSgq0TG)VS#_-r!}d6`bGr85?{_ zj3T`>_o!I>PDd?KX*f|(>wXf@m7MhXo`9H1m(2dM{O)7q#=B9kzTU>qO`lpD)e zF3I8MhJ?rvUjI9P3qccQo;O0q!f^w>X{Z@VNPsgPQ;9(v+2ad8|7oc|d@QF37Ci(u zc9=2%HQ)W-o}7*XDIvoOsj*6o2<6@YKd+EPmWRwV?U~_B+I_|naW(TE&PM7}(?`kX zQf>mzD2?|V02^6KEgLT>{C$Yh$x0YX0P!>inmK;9hkNK|(<+}Cc+-fS^Vf6Ng=w~X zOWt@IQ(FelIK_txr})1d>lgh4MSPeaI+juXW|rbU)%eiNWg&pf(Rhm>V~13E_a$Od;7)L?*H9?@PGOTqyE4Pr!y;uEQA1WDrTwv z=UC03LN#t?2ZU|SVBv==q3OQxng|c*{0*+DjZ>J6+Y)6wvDrv*=ZpLiekKDH`+8b& zPJx#`kqvEjfAj`_g~wYjXOPe<7XQ?}^($ z<`K1|$dPhviy}^Jay>RLUQu!B%GQ>o@qO?7!GErXSIv{AJo?I4WOV z<+2E}PWHS41a3QqZF_nmpZW9)l1EALX#Z5!msb^de)r%^dOB(ws8ZZ~ zp~}WXh1bfK{se)X0gP1l2=OA)1o)hgjj)49t`e6@Je`m(${~v_W*%&@xVCCl-a#{3 zGmk~)w5|)!bmjc%BrWIs_1tA3<97GunLkfNnF+8N#!X@&Ew{`GPAZqR7*^qF5(&+W z8y)QWdMO5VlXZmf-Ms%)1CvZiLquE_4 zuCIUj>KmW?5B}G`_SxTh@L=~^9CbHmAt=n7NF+7b#aXPx9VH5>z%tu<8p!54mt&mm zP?Q9YwuK`K!s1jW0EzM`vYIu`@86NrJNKlJiA$Dh;|M(K=oo|~hG7FNm)F!sCzZ%*7H5Qz9QC7_^J_0` zNp1fL$_W6V&8FOY^P6&gy`m>B)wu3Fc_NolGQ`>5jLxNu)P1G2EHz{`WQrd4TGIB0 zvbj>03d*o?r)@lp$^4v5H2Y%)!WJw`P_~4J{jrkO=$%XPVpW`@y4#RLd7?vvBVa{) zZ@(ow>l?C#Y)X~qfpu7UbdRzrLlWdc&r+3HBm#-lIwA)rC>cAbC_;JR(x$d}*LK!r z01)*1Ck>TUU<$`)F$Tt!jN&?Qe|R7`xL;)MW{YWMz|xO5LQ||6r{7Sv*hYvu5++o8 zb=+tx6Ir!EaDPqY47A&)$)wT+$dvXC)0t)We3FxM{(Am0kXHRFPXp3zhzF=coNY*4 ze5vVkU`Fe8LoS4WXllec5S>+1RUrH!YUV;h)y8lP?qOL<#pd^TIDxIuur)$$>zXb= zxDWzTv1ICV0OMG>{Ng>n|7*YexBrj9bg2A=SR}642yGbXD=$99YLFqCYG^KU$NKeWff*L{OJcV-r2-QgqKWoUz!5(%}8=!7qE+LS7;pTO@ z`oc|_l`hDGSV`VTN2fNS{bxbe0637(qZli8?xN$%E6H ztZbCU&E(|0-2-{EJ(Lnkmnp46Y_p~~#qHQpZRzsavAe_0)d=s=@1bOg8_N9%;5JKR zHDc#%RWzZQ=ZLLjd>+pIXoH!w0&-s1OV@65Q~`E19akXvr%cp;?XPaTSt23FQlgRB z%*H4x)Hx4T@CePsC}(9fd05O>7+VBWHxs*{J_V;?Ilsa#g{F|?4k!z9u3|qNtmA~G zr;EnY_MyEH8YW?j^Afr8%6#d{weRp}zx=oU&L89|E02clhR$9j9khAL@SJkeG@_Jm zmPHoRR7xz;f|39o9rL(Rkh0U4R)_g!W*WGQ@`Oa{$YNSIg-xrL62uf(htmcE*%H;S zoGVvlcI{<}C9~q)epgzz-jd+tK;j5u`3$n6Y!(YTC8^K^4W?)8zHq{n(Um$I48?2> zlf#fDKY}SdGPoplE$CNsT$9r$`)bBT%@PLFBsw>Fg0TccNz+DPd+_8)+6aEN_uiH9 z<2&-=dR9KOQj%-9#{A1~$YEhw?x4gtMCm}O$09XTr!#FqbJGXB?+B)xLbg<b{sNyIe!8iNy|gd-Sm-d9M;5bb(Pmb(inYh zx*Uu|c5`uc1q-YzZ$7EZ?wrO`u>~Q_S1CrW5$zt)H`fm|tEABvb$QvwjU%}8nU49~ z5KK6nIUG>E-BpSJ0bqw5keTs;u?>}4*~nTB<6vM(PAd$B|Iz=6` zR}o@QQ$GW!8Z1L6*%#g?Y>R415*oR{7{!xSm&4V64+BFpcd!Zc!Lh35U3@=Fk4(zi6FyaXlzMun1X(pP&;# zm2#R~GfSmIp1(MO9H#4};&YVSF?yng#cHsQTs$c=oVw(r@RTcUt|{Mx)4Uu3Pi*c; z>9ap8?#i?GE_Y$lJ)q;Yhl%+fqJJjy_dSCdB*Lx5p7fkH<~bT2rBH|*4 zl_yEc$UeFVK<}J2g{-0m)&8-C2db(cs{Er7KO%=Cs>6uAMpxVM zBt6>r`8xqOa*yyFSaMqnHZjXekHd}{NTxrfvj6LT z_1i54mVBK}@s(htld{y6M7WKM2xO>okj^%W+o5k- zz#OFF#`gka8pWwq1{?M7ATbS_u{WA&2Sqa){N2jsi*M#OU+O%)#uq;InXgcwn1N=% zv>BV-L7TLV?`yYv8hnV=l4Z(aHZC$PU)cK(493FxpATn(5@Lc4w0iYAx&s-lnU^;< zJCz{bbT zj!c*>;s!Z9-4R$g)~^v2n-pn-q@!Ty;Xb_P)EHNdJfn!Fy0z@~;b)9T6VtYxo2h5c?dYhcWvowy znF<2asNdF!=h0-4mvjDlt^x?>V7lG5qnZl-g66C)a0|z`#SBcSD(SLNBXe|ChVw60 z;HkfdMt(glLM=16DW6W;`T!u=Y@~9PEfyWrPCiMpl6dZpU%nEU-)_1{`BXyQ?mcoH>LBPZ%ej=6rBPd*wh7-ISdLu z7A$cN8alIA!*WF>32_fd>t@=`VCU1YiK75fllGItL7a%n<7DGfu3~`GnIPnd^Es&h zDd0>y2*rC+X$6aIolF*G{UQ~R7|JSQDw$$NtWjT%-@7fnZX0FQu2^q>O}ux%uHrmf zzx8j)8~>yKKz3gLq&mSJwVHS@PU2G9(CD&yBa~9Hv{Wu#*3y&rtXy5y=g@1_P=*Xp z4&cN`pc|v5O1_DMU_j<4Zma~rXRIy&+HMP&Nli6kA03_m3`M3F&&U+5+^;=6P_Vp8 z({+5d6MSo))6Et=mgk1q%mBaunJXxzpCbk-T35_`{WHau#`xL^;aqz$vxPu4MDS$a zY0jx%mdea*X9inSy%VN8$c9Ix4seEPIE>0Ue?4~@$e`QP*(${~Xdhsiv3}Fk6az?! z5xOG2cvltC93C%1B;@LR0XLFNsvfgj@C#t!T zISJe#HnFRRC$!9(%YP4o@S;abrXa`d#W7a^Ha0~6^ z|NQ?TwLklB#l3!0cK*HpP+t4pza#O=k{lwSj%HKMG*w3gwP5nXj#PFoO58!~w$+i- z=CP9FT$C?t?-Ep>b_e1i7`VtLZ3Mb-W+V$-;!E{2)IAOLOTK@4ChvXt2-#DKu$k;X zIhMzbj+E(KhbNiF2RT3h?I4ilc!*$~jQqKZakJD25tN+-731;m<*E?c=QJ)AgcbN>483DW#!_v7Eh zYj1BaHX00yrV|^e&L*$GUSt!>O~qo3Jj2Qzt5iu-WkC&pV^AX+9p>pYL&1hH#u#*+h@+D%F&_fff z0!jcZ^ixm|C^I%h7eR*+v3V$IIKbcgDnICIz0VVunF`Iq6Tn5BKWtP5*+{6QtP#)`stsQ+~53tdE*nGm(wr*nH+xWo6@Tt z0014!2&edkPrrdcRg~d;te-2%t_1>qjKWO7J0|!Xc?6VfG--sfnNHw7D@fhzDtE*~ zws3dvOg{W*Pu=^b=;-*sL~gfH2H{zk5a^F_?{&HgKmP#Ncr|Xic{9o&BqGWfrO;3Y zSx5&#bp`i19-_pY4-_lnb@=hL@;zn?BQYfbGTUW_Np>)&COkt$&<22xHMrV7j}i-+ z&(8e;|KBr!{F}9`=std2nv6#kiWn0|u+*|3_`$Fo0o7o^BvYMHJ6w$XGg!oo4J4Jx zI12)h&837MLkv=VC-junX<;+^gVsXW1rL2}xE0J~YIL&0=1N$`%$qdqolk!1OBR6B zzk02!OQjKYL78PZF;_VuEQ^W9kXyo1B1ERZ0D@hF7GYntN2hGf#sWiSPM0Km^(Bdw ziU=|@6?2Yaannxm-nZUXeo8hKL%{QlB_|VP6*4mNfB`2zBT7Y8)pQyu(K>({vH=B` z>AOom8&y;@a)RVvc;P~;0vnwZ%ubGg^;j9C0q)h98$n0g9dq9u18NUYKCs-=sbSv) zc%Sz*nN~6t??1Bz&q7&*;Ob=24FV|H?xVAm%F8jbso?8>A^BhYO^IK;DqFw#KaiEr zenIN*eOGqh`kn&D8=v}=-d~?W$n0?B3ku>6_V@HK$l_;m@|FSBRXod6+PEt1lTe0? z;U3DAqbE(--r3P|XaC@Fkgi^`gJe;nk7~$nP{MH(0QV+^=W&c|VcCy~ij?7=MS;r@ z$KbSWaqEKAfT#2kP}1ovTIrmuM(2zN90CZb1pch2!Ftr|=zUWkXLj+CMiN)i!NI`Q zZd?QKlK;Yx}DXV$noyN*)RMC&-bN#maV{hb{n5DBFAwGNXh_`Ue0xStIKdFfyRc*FPbJ z3)gVOCbXrg*H6`UguKr2k=FWAocP2~sE|&OLbEc0#`c1pPf12PtBDaRA-k2WV9u8q z2S1udF?tw_OwzLH0~6&8hmHw&IGtxW4RK03QBw}urhH^~L=!!Z-20)nsRLh&NMu}r zWX3VAut>tO6%T7xJ?Q6o>fc4_G~S;_>2g)#&K^0T2tWf8b>wh zwfnMiX-78D&8p!3j9PWO7tc&T{XhHnTVH?c*OqZ_Ew+F;f0MLOy5N8JQM%qJXGQI? zD2;&9mU=7Hc;T>Pe>jtD2?2`S4~kde8Ul3yETOebuOXvmN3$yx&ep8cHeE!@DA?4p znVRz23Kt4>)5v*urhBde$f)1SpbsC5pte@P)OmX9nzO)Z z(xD1C@e>lS@ORk32naY8WuS|~n~n6ORRDmt4o*bpOjPMxiA6^QLlwN683rsl6h?E^v_$!5^|)OqvMco*84#yaCr5V%=(T%e#-nb-{YFWyetVFjeaobo{sO#oWQ z74!}f;C!l!rO@K0c@;r(;#~+zQEJSx#9`zlSH(81VQ*@iQU?zs!jfh-FR*MEgSDT_ z*K-A;4*P@LY&MUmXivDXo+OXKHJON|l7vqk>n#l^EHlV?;OvaeU=fWQ{}uM-0gAGf z$-#Y=JY2}yUSo>s7+VO|q-_KbbwcF$I!S7_nZsFq;rcrlE?k&A1y6tYWkuoxvKUDe zvq*|!W-&M4%j+eo&#Z*tE;A*f`!vtyf=aMtYP4na)Mh(S!IuNw@df#krruAwRMa*I$cEsK_OBB-l$$+H7yeQ4ymjOB$#3@*hlho7$ zen3I!B$=1&h_E#tI?5WI>1q0xouj}umK)xJwM*g`n?rnmj>4bu`J6do>51MGH9NP|IIJS^z6W32>d~s!2xFg)-pt!oudQ;1PKN^jfTu}XxW)f zqP;zrV{~6mCb)wrQI;-TkV_Y~WqGY4_SH?1Qb}U?nhRI193VUU_VT5x54pIqSUY)S zNE6!-6_;_{`@m>Cw!-=BXbVE8KXi*Sm8zDDEI1fEeaDo`4%VBE?o@zv#^2RugBq{4 zAqX-6@oRa%2y6#-sPu!tGE#@$c$_T`heDWYt8YhB+EV1dx=2k!;s7j%_^<)GVJ91F%UHq;+hLKk=#_$#E1QU! zjY=WosG~t(=jN+#{-|q>CsM;1b`LkGz3|0V<#8S_%%0SPCe&$Eo{kBWBUy9?a_N+r zs6`7nJ{=pych@Mqvjs?5zzLPJa1WUDuv7_E2lqFb%b@#{*6b!8cY#6papCvf!O7qEq*p(G^ciMXS)%_UV`f$B@w6e{xf+gjYt7N*z^{&LJ(1xrmh3D07 z)p6LkYEVwFoudRJ9vCbEd1xUR&M0t{E9z&QO*j=CYUbxNGO^W;06S;x5;Bmp!(`cC*pWIl2zOld=aALTL zm>NM*5lV3gPIc0l3a6Ep3-~$el8$Nqt`!A<;B5SFLoHZoKs8ysm#$ zjT%j*PLU0GBWh`ShF(vtjzDX4Gei|?31h2Un<}LPj3n3^R}Kc?4_ue)c|VZlBYTCV z$COG~G1HDVbm&06WFuO#c}kcwgMYrxT&TJ^^-?E>LCX?=vot(4c@jFxxDAct9ydEP z47GLejnNiEH67LHt793DUoDj!<2%fbf++2Ljxu4Q8`-m{CQqSg({bSU>(E$eED}^G zjSBI24pzcgRfPEL(KJ=ikQL$=!Ce>E)d3iK^yXXAJ>6H*n|3Sk8KdaN&@s-XV!RV- zKWG4Oyxwff-qD%#@HaabZpaJQuFKB#OOmFdeF2@4d|Cv7%B8v1$(}g)bNbQ?Z}IZh zUw!SHX_QK=H`2f*63K{`9Ta$4MUXf}Cf1xy^$wUb2M0%& z^iW;+(vqQQaF9R&DwjM462Pp82A8L4y-PQGH7PP*uZvlY!rVo$F|&1?SS4eXKcCr0 zv(XebinBajh^ruLNTL0T)KV%JuYPCi<{M9b)U}3_$)QWuIy*g_pWu74%DgtApj1I2(<=Gc9QVftE)10Qc_1|Fh+LPL%GsL*0FZ+vi$rPz9_5f z%h zX+>m;_xJX7^OL)i$>-Ifk73;C#SlA*tMD`d=mG9Ixgz|g|c@2nR0r3zYuBt zpx>olqcUMhpAQ%I4bsP9!h#i7wbz>i^Fl^GZYBRS;Z zg7?oB3P$xF?cj(?9okwBhYPVNW?3}vN}`(-S%CI-DkTwihPeH>F7suyv`aefK=(bC zFEsL|Al10p%E&o>JvUvLwz_gJLU{A%F+1KX?HZccc47JlUHK|Hq0TNs!JG785$P}O%OPcjp zZhn{7^`qKs*<|QPVs6My5{;nchjccYjZ@kbCqA+WN+{yzhX?{wEELp6k^%;hK|0;) zw4{Ug8ICsb*)m2Wgk>AEB>Ik!2{|QDi*m<}>WR#3g8_l_9KH^GA)_ERf_p`fk?Fic z*E9r+KGJS>R$2&FQDgzrX<(??C?6tN>}(CULbM~XQ2^#>hk@CVbK^zHZSLrd%}fK1 zarqmM1}gD4>9dWF>;TskPK^s+fS*Y{j~L#Q5``2_=C#i894K$7lRs=R&x}+81N2lg zt5BcC4DU^Bg?`4lW=ocNbM+9gB$`Rf=9Q~rp+vd;oi`=^K}@#tSv)@kP<(x+m=|ZM zBsRWIThinOp?-7weF<^TIT72Wg~QI}FXI{hpwm&=y3n!wuNw;nJg_33%L(p9o~rOz zS7jV3XGe!pU0Id_bwH3kFhffl30jq1m=6OTh@-*zkmaB%%Omguhhu`Q9XNZJOQK{}0}F#cHECK;_O|34zs`LI^0dQo=bd+Mo^^X!+9}fKRkH`S>Nw*<(`*J0 zJS-BKlz+ffg)Kwd_`+z5Q_S3pT0io8$U|TSq#X*L90}!?93LDY-JeJ%fs+Dn-^Yoa zD3`Q*GadG%P^|P;FJ3y}b^WLw{Vd`J=}gM!=41LxkC4f5s;1tQ2;j-@_h`>BR5dYz ziW~$B!?{%Qh7vwQJ@2S`w`s}p@>AFh*227s2r6+IAtB8P-0(d8rOVg88!pOP zGY#xW0*6O~voHvd8I&?O<|jh&@ekFP&sm*JGfPhaBFtbWCEzEKq?` zcA_$3Cs|)V3 zB#%>tb@q@HXguUhCNEQL2o%~3ZgQ=r-<%-AbZXQ_sbn(zV2A@Ic5?IAEpECY*= z?L`unSWmOKNTKzbAdQkSmu+kOtUS_v3+Zym zKLrTA^Yed0atItF1gV{uUy{>X?@R0WR6%K$dBZM(0)u*(!F`-b%%4b{Vn6M!WOKIC z{zH5nfzkm2fs@YYdB8H+bddncAJA3dz z-v6Wjk6Z?3gp5zfbjueD5??N)VBEfUU#wKNZpSlse)!qt zx3}MnMBV>s3&AwQ3<~#pshE{Io?{0kA?JFCiwzJ6&yJ5}>C#1Qg)1+I-7o6g;xlPU z%T5Eap$x*41r4aqL$3Cuw+H?H_d@Pn^63T2^| zI8m)nwTHoU8YjT0*OX%fkR-))bWj1cKj&ad73Guob3?EyU%Gf}<6l8v|KV3VnG8un z%Oi8?)Z0>Kd4Q~EtRA&<4I(tcB1RJ@poT!zIjdna<|K)~qsv(Yi*A6R#YLy-G%*T% zU*Ym4&8kw!QpPy#DNsD@wj@$q5gVsAr)%lON_8zKMIDfw2uc^v@+7;wiCAj5C8=CV zmCqtneZO!C?}-hJlz!6cDvvI{w2HDOs&g@sWL_;URPBCwMLzwzzbhy2y{i+i8FV(L z%{tyYg-j(Pon}X!+M>uxrUbQJfSaq7sD;Ai=I zee71ybZG`KIWkWuSH{x4ALz_YOWpHm_Vz2+)t-^&1ogaR7rSeK6nNEb={=`CsqKA`*070+YlVg;& zkE+$8xvp@Q3vcHl_uw-A`4SYz?hvV9c5FLbc+hJGvA}%rxGJq4n95@9XxN}KVib}S!={Sg=-@gA) z`n!8*(Ov~ei4p|?ZrVBlW`cXWgrK-l)lL`ZcpMs76Kf(>pCbVGAK^MD5_|d8Fa6bL z7tLiFxk_O=uIqS|HU{u4iJ&#X;-Q|#7~q^8PXy)Ft@l6f+Q(;8 zTNSvmD>g4|$pf5{N3DizlnQ#V=A^&|KPjm8UQ#&5bOZ-jFk(f4##`PaC(x~-pBV>*vg)d zq+P2?e!8Ke%B;~lM-f32QMEraybp7Ltg)=@F0V@DZ~wlOH#Q`S?o`^L>)K4tKKh;n z05&ruRx#@VK6DveEily$&0v>i^%3z~u->`5s@Jrf&PO&yp`R~!mY z-@GCPmZ-?Of_z3*zh-E?y1=sRwUW$$$Bgek7H4Ctmiy!<{>#7m>`Ilj{q*X_NB&3q zuMN>{Dxq9S(n1xVc_|Z-OIz#mX#ZFNXHw0Y_-v)M4egvLzlUozs_Z}I*>KucEgN|7 zF&J7VxX>ufH&tgisPBMm zq;+tp0>W&;jpt)ckxP{_Adiueu;YYfqfJHev*O0uw?FQ>NAAdCyEUW$5Kg))I~QaZ z^>PhCp^~87A0-H8`Wck3Li#v|vnbz(I^HLs7BPU@4_-W>0Twp)&~cm&jE)4pe#{_= z)6YTnFv8+2BO_6c7yg@{Erp;IizKvdnsR1lGFB3Xi=sZa9Q#M;K<1N2&}{}S1($6r zBNgBts|Y9`{j+~2iGTOsL8*||`*iTtFU!6E`k%-$0=2ufCQIl@bRW$mi<3Vy1SZfQ z=zDwPC5evcag&nb&;6<_QHi~Cs+dn3<Ds4ja=|Ad=&j`qGZPXMm7QxO0s;*>mbT_??GDZEpCmEQ60P5Eg6dG^=S^5y>9-}>a?lf$iCHlw-5C{%WiekQPo9evT4>B(}>dt5QpJfr;SMCTPnO2w4cR5K9@KNJ@}J z<+BB?*IW4hR3vT~ocLTLY>fKx396YulJt_LBp*&k@;U}ww3OE4pdRrSbX#I5VJu(~ zq{&k%nR6QHWJc#+^2w+Xqz;W(5^MG>QgU(?Vid}uz6Q#uE`sxoYggp()*Wd)d?*_? zKOsY8E)Tx^W$AW$a{cv}m4aRXVBC8ANP@T{d9+U3%`+L{d#5NJ63D`$qaHdXj-*$Y zP{JhvqLyUi6*Ogm`}EK7eWy==gV@sP&7^zx9XVpQ$P<2o>-9%Nmdga}9yB zgy>QQwU$o%=9VfrRPa5xhG;o2Jd;0RzX(TvEV39FdzyZeS za5%GptfcZX#-?r{U~vY5o0f9^+LFZrom25Fi_bzebcvhxEx}W4#?iQkRCp+H+niL9 zgr(+HHhP<=mlS9vxX1Y(wsJYoVXK%l$|BC9SjavS4i+;ubOM<~I8-XSg0L)+c-;sn z#4$+zqH}!@*VO2>B#Q+-M7Ch#=g)z6bW!_fiDe+;NF$>nnJkCT7Dai}=V^@hpZ0oU zp=7ZUkh5+eqm#$La+}DI3P}GuGPrY$PEQH=!8$%-MAEBeU;*hL%p>-n?A|a)5R2`t~F8c&RaOWb6AezGNn zMmo+wFHdJoIQYlFhxZ+#oyn7Ft-LIK1jKf?tto8=n=CyX#)F33NjIT}-6WR9u#m@Rr!qrH*GKT9z)_{LrF;`}|3wG(I9^XXNeU`w zsCdRQE#OQDI#2V7^p4s_Pc@%K3ln8%aHblrb{5?hfVSjExG%pdc6m+mC#TX`-jH}< z6#=DS{D~>*Old-9a4Soah~vG_+A3!-#X&Fw&QwA>JceImN*>_;jykwzWC^8oS_B~G zle-_tYrpevzvFIQy!E4=U#d`kl!`<~ZV)7095@t(PNDScb%wGM2PlsAYY+HYmcxo@ zi6?*q>40Eh8^31HU~HaZZJex~B2XCLm>@LR2uCXP0Q8N;B@M+rwzn4)d9se<8TuBN zBs|)ErGM*tzl=-!BRNN}|1Od2oai4tC69gZ?Js|(-Du^Rg3^+b3`Z40wvCaJ0jNyK zaO8))Ey<8%sv9m0wpoW-VuY8OQE(1}^y<*p4anjljS^{PrL5Dfs=dk9;$WiFp)-=b zfFH00Sl-@#@GPHUTmy*e2bLOA`9>B%(;sXsPUw!?EtC_kl!3D_P#pl++Xq0I0Lq_4 zOVx{`&d$V@ElI5owK}9uhtHugLyWU^n9fxRMgqzdCt~SCpqM@;u5v$+O;9cXn>j{f zDtDnUPoryUqcGTNH!G@>xa@A|V4DU8OHz1m8j*K_xkN})pM)rva9U>5xc)Q(h^2;9 z+D3PcZb_7yT!F2#Ng7DXMYN_9YCu)x_&o0E1R$zcL&xO9_oe&pyU6g+I<6l`^x%=W z1Dxmpc~c2j(zrj-42`r$3tT49PRbOSQHTvUs@2gfssYpJNB|6JGixj+sI=bMJ3?oz zuA>13973^tS>8Q3mhGSUoTOfP?T>Mq4}R41o5!<{a@pi5_jd;Oug$f=D|!tLqyY(0eEwZOe!)k;|e}I}5*}DGnf=^5&YIm>H#~qEf`BL_K8sDwM=B zoFzC1^{UA5T&#onq%ZR)cmI~0v)6w&134#M=BH`o_rLkgzefO&)3V&W3AGmRv}R}N zK>(2B;;h;A`?Tv7E{voCb#5mMlqaz%RvbFWn({@AvOD?9q&&A-cXGZXU^{*)d>g7+ zaV}&&oazZ1O(uio?aSYNme1fNe8-#5EXoHkJ>>~*DT5LV1MNT#a&i77YDZZlfIu;V8Qo^q-9;~dM_Jz~=k1DVrA8k;$Zntg;aA>@Rz z&Gt6hy{QyGgHpLUnxBap9~f$%B;yecs3v1ELN^RD7B&otQ*0mGBYYn+5Hc@m`M^M} zN|Is*1qo~umvYz<<5V*@4zi{=uAgNRbuni6j7e;cBrPTQ*^qT%2gwMn(Ewc;n|Q^+ zf%utw$U+KIxUi$sx_9=DWi<6vE0#lctRjc?nz-of#C=Dy$Xwzq4M~>=)?rhG2<`j~ zf?B3nQdPRQAMDE3&;P7!UR@7-JNnl?$JbnUSln2toqTYAM=eUxW^N-uRq?rp%yzm% zRZqY0nNLX!>xYAiEUC0*%kq!Xkhqo<)$b7)dH{1v0Okq&a^%2dY!N+NrfMC5k`Eb& z&Mk4Y0$C49dKI+tBaV+Xlat`!{x5~?cHSx!I&w~4=Z?z$H2e7D|MDOG@}oOj~HLe0=2;ORW?rR&Q!T9 zPtF=D_ZM5p*+sAzD5?|V21I>bU0G_aUAXW}8A#Zexat?g&E;7-7hx*^V}{8%37g60 z)s$#B9_Xlk1skA5a19%2jIWR5q^2DOm`GvJ!eibJ4oArf^J#lFlYIs5qQl=8TSQGMO1E@$^G+h-m;TLMqSJ zFpa?j6~?iQlDqObES+Yy0MOFNI+{x9@zA96+i-)+3K1!nr@Cd4r z6>)D9*zB2XR)#3e9-vEg(?6eE@r8lMw!Ku zf|(iTVwyOEKKZ%N1KYiX45zC>Fk3Atb)L*qdhw_qFYfQK*=EutF0x#9r)IRdMD|1- z6|M#9;(EbM54y>4tVUB!d`}$MM^#z0QT(|;tI(BB?eL3oj$Y?3fIQ7UzVR>q`QIH3 zhgM=yzOZwW(BU|vM`7dX%tKQeJY|zousB?}%5gNEq^|_B6MryP+e4K&714Tp$X1_f zgIF>KAeKfOav6)E3oN9CdXsda>bUL*R6Wsv3?DR}0 zMh}%Ij|MNg(qZ#vaWXO5^l+kfj}D~5wqd`e^C?<|x%OX*j0MJ2E40mrA;TqHlyhtm zs<}45IAW%ewbo{Qag9=Yh`;COCT8Fw>+qaVmEdh=N|Y3=6eZ3P^^n<_h0X|qA21ur z3vlsM(1?R`7A*+~8X`n;D3H7xCG^EPlAh4c0y!QG6x6tgAS2?;M+Bt=B!@J7HXWH=Z%kO#LvK$ifSKxV(Xr=&6lFH4L$ShQG`NOesz>+2eb zL)E$UR4sj^Ay?!H%9jHKsY}29Yf|N=zJFJwSbikcOGh8~442op&SFle2T>{#)eV2t zYRmG*rrdbxMO}M*mL-6{4U|xw(}vJIq=^5fpDt}MsTjBW;cY3dRF&LEJr`ne{MBJl@i35;iOVka?~Rh7B5G}r|quMNL>gF zo0eK=oYqj=Pl2$P5ba4z?goz9P!cfY&u3asCB2=iH@^$$!#Cgka`496gVrgMfPe^hmCu3qyhD$;{}81)))&=Qz8krG{&~ zUp4D8?qkpRjOgZDCU7MKvqIB*dgz_ zBB6GSwt}eS36MZWT!LP;Q&kTOm9~9+0^qOKkX2k0HB-mzzIX-$u~baS(O{r~&G!~c zUn)8Bml=r84dGvd4I-+0&#(I;b)rhTaf2x`smQF(23Rt@Fv?SLqh-_bw<)8TiK+#vEi*<0+Y|0^m z;uv4Q@xoQPgwGIR`NJ%WEnOX{Pk;0*&oG&c)=bs#Ub9+sGhV0DzOSgbd=|ciurJv5G7ct?q71Eijn5P#Mm{spRRwH`f43 zuzHRT*8pX662Uf|jwq4LCfA2qIPQn&~iprx1?{^H`SA{ah$^slMq#RETzs)W#@mRHb`*DD7UyIG9mCb3RoU zu#isccu)F>@MPvx;`_1iD1ca3j!N7*iA$>Q2Z z;F*{WMT&;>U2$>BCUX>GR_|IYEjd0ol=*30P~2!*tOCXKYN3XxdipL*y~1GO4Qvp7 zeV_}$Y0JzGY5?)bk-_~87p#~W%Op3V*#fgWdgyRyPOTQPut_AdwT9;$kf(Dh83elk zCEgGi05wU-xtZ|uQF@I=Q#dVMWm`JBxtQH?7>?;TJ#h#y(mK<_-|@bavmw|hK_t}R zL;o0`G6rVQ+8hp?a>a+p;xu+iloO-55y6Hm{p@F@_zS--N66?O@9#^$S(8#REjycA zaW-FEVqE2i;pu3EK=c4rGnq$UA-ihDt zOFESSNV}wh&YX>jg;*!}dI~L{Ja{C@!Lc+NhcW;LLm*ul(QahHf}Sb=NWF`Y0a9dX z+-gb#nNp>S&J{{PB3~TFV`j(6b50l!9^HRK&dKZCl`y-zyZPOFcYZCE$?5b;jH$D# zJ6Wpx$y&F7#S>y7k8u+4WiN0BnivIQ^fC>#-B(1r+v-a9>`1x?N7$elRoxolK~07e zEW|V(EV>K;uUO;9kl_%yn2$P2cuJzbKVin;D8urZNj%7qQj`f`?}vB{H#Gx@N)lqj z#t{f<&P{^X0PS0LH(V;Xi=$kOE{&|2=Cf6+QI^pHe|+Zy$uApi5(33@WHH1|m~rxRp1yxeCMPHI%F8zuJZ%9B z3#l@P3}jBn017#0@>u)5o8zM=ugf`jox1?CckkiF(P$ERXKBVd9xfn1jQkE%ldC zk3{wl#Ku~YO!YAiBkx(BVI@cpv9@S)t632FD^bS~?WjzaEuo{7E9-PERoQdZWn{U> z^5|dwvBc12$(AZ8`_QJheObc+<=)?w4{p7q8Zne^#5z}wNYsf-4_M0gzWnF13V`;; zYp>9OKt}<FlGy}7cc{!RY7-MmOkr@@M z`w`p0b0r2cV-Tfzho(%?VB_iVBe9W4uBe&T9Kkls6e*!E^FRKlGWjq5?*f2J9NaH^ z?x=!T^3tk!kwE$%-Vy)yV*rl>0~ak7B`g#_b`bLE%S|M#2x^Wr5%OH0yvAa4<4}7U(#Iy$k!ajl60dx0l)bNgTP*y22IT>3 zPHtdNk31@dccg)`#>c|<`GDvzi`tZU2$`ERGFL4}@fQtF_{K;wIkh;A_AH;Fe)3ZD z_Liu-NtRPGopN7%#fhk#HN=JqXjVkiD%R^LA!zI1_s1si5LH!Mg^A)DW85EJ zle0iwN4+lFG9~~K`(OZ=8|OD#HI&!ZB*017LcnF#HU)-bu{}L!fIz^-_0MTzsR3)E zY4~JBIY{6<1H*#|`QJ$EL!z_9W$^uhmITIDlwF`107IYPdA2Bau}m#?%^0nIU8djs zij3~wk!WQ_;v4IdK=u+vyK{oTa`x^A(tGD4_4rM!EooUJ>s4F_g41aB?0oC(ZImq* z8$-HNl+R3}82LjXvMcH?7E4Od8{fJmwXgjP$>w8{1z=kO_R{EdahT;LmP$x5pGVhd zU9N6y%F&_z@gq6@=snp4UXn%0+U`(GC8h+vNF}ejDh@uwY%$J3 z=|{hQ{KCJ=5%J&j>s$qpJKyGbIEMvTOyg=rF7k33m%5-10RFSb7^Ae2X0LZ$E4 z$+7Yy$W<7l&b|BfH-V3|@Gx`OY;&W9N`Dpvm`1y&3hSsSrGEQ;8J`}jr6e;L&MdHt z5U3=8W57VmOv5J9@mVw)eWuj6Sv$FmfMDyiF#dapjKSx?6wS5O6v=3Jj`~w+;`9l0 zA~qt~1Z58C08iI90Ga8uYLku-5Zpz|Pqrgv5S5rVHJg!~4sLK-EvP)8S~=i^#wi#g z`{*GRX30X)p)qGh5L8^;mqEXe(gr~SWzUr4Is^n#F*vuufW|FD@#GLchq*KvCT&vS zE1R-@<%&E4DD6?}V=`6sbR7nxev0B#ZJBj@nql}8Vk zh2gNTfo^6~O2E@LCntLy$`ux}xMjX}gzWk$N|sZUdMF*Np#=JKJ92sip#1O**-%mn zz(%60OZxo%=~%5og-(AoV|m8c-rgQn??W1EdE{y;U1s7^(`4b*%u4<{1iYi%jGhz zmo9)5z^00QfD|vAM}R^G#+S=hJFzJoER%M9LvG*xi36$UDuC?o@4nGFtFI++^Vo4w z^J#W0qA{go6I3$;FSZhP;wg#+qc7iVVR4S|!0K{v>m%_H`Dp+ZI!{fjLmlC7A|oOF zI~6lMe2#&4AMeSieyrUCDzo!cCOcFW*h$$AjJaVVkviGl-X1>7=Qw`!XpK#Vkdk)9 zJrfaW5Bn-gLjaPLdRj)ZyJT^A58a@VO8NyldQW*nwkp{o%~EKYRB*P0$%-xI5kx8) z9CYI{TjHtBw(w}8?r07PPQY~tq%!QxkkyRYE~bSzTATCXM91P;gWL48MW#aI>oGDF zs?pP+iB<~C_DFOiaG9i^FAIuX0dZ&`S3mn{nWObgjZg+C+Ey@dOh!FpZcdvC3MONN zOd2hjBM62FOr4%lZVx+sTt9;p$^(++dc>jT3tLQI13Cj@16TkxLu0f+SV%TdBGSEZ zMdF|Oyv#N(i&R%6x3wc%*I$&Ct5?*sHFOraZ-}#1|z4=@OkvTAzTU}FuXPdP!yE%+Zo(UvsnoUM2y=*;0=O*isu5uA#B*+Se zIQ{7nGwuy^x|!cMYIcp`(`>An1ThqXhb%$HWV2%HEie7f?@8N_ z$l$1^&w!-1DTCOI>S|*xqlkU5G@+e@#e2@SFW#5s6@%g&Uq`!!DLZO-ubGxUfsVM- zpNF;)#H!S`gQP;r{Lwa&U~m0I;{A>!dma3_E@!n9IeD@xv(uVt!IItT;m`s%`me9AQ-3>T`5Orhu47vfsjO7x3Gj}OzVS^J@1{*rKg&vPua1=-u~_SvV3;qnrlb75D?$sN^KT*Ak0k7F{Xk^>FLpIi-R3=rI|0RRdNT z)?^V=c~1?|*a7MnPzPt_C;U2B0i<_Uud&>QiZiF&%z5(mlp_p?Z4CN7N(R&|$pdE-f z5OZ=CBA&5OWcMJEN<35f5L{n!f{kJUbg_AcOo6Fqku*La zN)p53F>ONQf6Ml3WvQ&K+Ch7uHWp;n5;Lh>*wVHh9q%j}Tr-I9gbK`jjj~TsQqb8< zPjZssP^S1}Pg}AhY)qCFG_;ybP`03anE>~oxf4yanGtX*lvBvg9N7}}S!ofmT*k)l z$OIeL>(%7i8?VW=U;kw}p~+N#tX?-PWv2e3gGH-H5pDmnD?<)Uh_AB|OeQnKD;Xc3 z>Mwfhvb36@tWuj#@^a8d_gVg-tc-97FEqBBHt>=(%GCs^;P@FmVl?=bM&?p3=2Wt= z1MH}`ixPnYew^@~10=6?aLAnE1QF+1p5>+43|;0}Xlu6%YbFsZDjhAaYYDw&lw zf+Ne+8Ng*ePhxk(lae?Ph{vpMugTHwBWc{*l@tyR3z*#L(W%%7q$z~u9`1W8j;_cgKm{?jF(Uw4Dfp|W78e{M`YF<2noY%Ul1~UI^0Zf;grjOz zda@z#)PWClv9Vry@dnWEh;E9g4zr?+N++Kw`}lsho2i}FR@j2H#&g*yFG&M`Zt_Gz z>dA6!fUZX1#WefjpdddZDPc@csk%kIDwc6c{A$fiheQpG*a5IOlXFGx;go8e?n@>U z)svrdHrVM3+NO#|p=^NDJi+N?MBV9>1BA##@Uy1O-q=;a?~QI>f9D*_Wa3L4L3l)c z)fDX{?EJMtx95f6bUZJ;YLMey#&j1bb8 z_L_K3omLO+$Ak(I%6eHkq;B#*-iO%6;8P#Z69=S zDkl|a^;07iDJCkG^-vZObD^Srow}-gZjRnRIu|-_3IPv+jpN2vkiLEU_A?!v-ye@d z%Z>y(ihux`r1nX#C2eF@IpAiU_(X|!Y=?7~Pw;0tClZuSCD5swkEMW;GlsJ4%U}Ph zeDarmRVpvOE+JaI)b{P29?1uP_Eo8FQTacnt?O(uYTOXu~@aVg1T=wW93fXzR!-!nM_cU%mMJwxT=SeBD<8AF$o>`tW#tM zggR#EWRS<>r=vPh=iz&&D6!@&KUK*M8)!I_*xII%NW`-W5;oI8bBLfc3HoiBv;fQk zmkFs^iVe(7NI@y?>jb(U^w;e^JkEz)7f7*(5o7mW&Rw5W=Kp)NWA%~a_uWmVCVV`SwU-WN|k*){4KP` zrbvySJor%6qHGR}seWpxtu*2X-a=<2$r1QDP8LKIH%iC!xCWbOJT-cj&++8po!7AX zU5d+0=n2c~M>@{TsSHeHhK0f5DKbDgyf>%I8HdZzMrH?u03+vp0+aazIBjE?dv?*qX#MeU85F+EDB zGbjfpdV&+^O(Doxi+_tCPiNPJa*lQ`D;pO!0pJqoof|s}&oEdCaXh$vR|egI+t?2d zHf9E1A zAW@4dR9%3CU4W?p>gi-6fs;QWQJiM!t!?p8Mx@yHrx1{BI4SC^higl(tw?!iTm55c zof${4qZ3;;lU0C{pivqNdNk<%VD2VRlk2E*Hz-4xNf(u9M!rFHbz8do4|V>C8m;!I zD<_Q;S%2jP$zd^%uu&rT3>|bg_MaSLV@#!h0Kt>_2$@I;C-0SVMjq_d#a~&HjVmwU z+Ok@XjL{wvy`T7t^6?J3dZGmB@`qGTVvng3A%8Q=6yy7p!wQ zoWyn@ztU6fQ6sQCK&^dtf)u~olo|zYI8+vzae3C7%tYAcRo(;fmVoVDJQ&vq^QgL) zh*HE^N+qN5kHtW~@|CZ+fAXLH?_W$&&=)6mp1>IAP{xKP&u$A(N2cEl23df*1sYe8 zM20qRYuJ@cu!QX5y13<{I+c;l%FS+z=?2+RlZmlg#B6{dVsr12@&?A}Hf7?JD5T_G zTY*xxpabtjspu|HeHZP=0aI`UDi8N1iSmbCC%$*V8z?t~N^BW7kTV)}eHWV| z%V|y?=lnYANa9T~Zuvxc^wDPn!`Q=gE^jq75!JC@(C(IVkLm5+a6DMTmK{oq=Q z+LSl&mDESDc!Fn{LB>0e1NRvXw45e*&dFO3L7}>}Cf+{hSw=d$l&UTvsQtN|_M5W3 zwFPVhG*=?EoP!tOdxscqrd^UPz`&;m<%oC{N|)%FEo|MOuvx@6tJ*6 z<2K3&BLhfEVVu2mDwpZh8R9yA4jB?r>K#XHk-dP>NP0UMdO>T-0}l2PC)cs)I> z3xg$P7^&z!WX%uUqmahu#3u1Op`?*P6!9sEb+~A4haTF*XMIUfn}ec8J=} zJu#3bPUFj0g zAgwcW-4J+IcGe|-aZB6+I%~BWf+pK2-K*h8A4RPjH$HCT1wkY}n9mK+?nI18ldIFm zQ=Kr5J4T3!UH=+d$rpCEq=v2=Gf+F8Mxag^(36=Zu%zt^+w$mxJCeEM zg&QkSAur`)=Ot)2DL<}sTzyW z$<~O-1cA}$VEvm!R=|x%BHP8yZMllTP`mYAx&Mu?$P^1P${d=QgB7Y)DCy#4hf)=N z`TAw)^gAl7>>!n|mh-B*&TdWyIDzV+lHH0@h%*#+!nBP`g`)A*iBs(>2Ea8Tm4xA? zuq2{`8prNm#fg3R@SZYgbJt&x?VStq3vb-iaREvPWRgY_lDZ%?$s%8*R%Ero_d z{Cf{=VrB%K)!}L*KQ76RHaCl(U5raXrjoU0Qq9Mth!fa4dLo_o-;tme2u@XRMvDkD4NenxT6uC{FG>9q-&b(|`1C}DoC)er2Iwv!pl5&~ zaVolx)-~w@f@iRWQmQu|sum2#6EdqSlH9y1(e-VaP#cyeR^sS&J8FUIY58uXI}QCn zR3>xmoSdBeMCt73CV)&w-6%k+h>8Ijon8|%c;kM^_a&l)GF!pHI2Ssx5kF8?CpUh( z-I90T{GXfy;_?vIa$=*Zl4mne^a5x*n>WyvE?CP>IRTTureJd4n_`I%~E>Zq3 zfzvjmW~pVVYnvL1v(<=e${;hM#|m4+5d@KRGJ+s$X@1F);u0ybR;{DXoFb_v0D_r84e5C1dij_C#mAlWmUh{oTVqVixt z7iN0+PzGQ5m(qLxBXqW0+4#gO^4hQdf~>xJ5#61Hge0~RSViyEUgvx@Qz zFOq9vmOggf< zT9#}qL{^uQIG($M10+)_OJ!|KQk>GwMAV%wR2hP(c4ElRb&NxaYQylwL)4$nVk`E_ zk2QdN+z&rD0c0>3y5wXiC&D-2r~;;pxC^y)1`fwIof)0Zb&Y+cI@Q@`N|#JXPTcx~ z7HUtV$~^H18ZI_Q0_gqD)f;lWF902jR~qcW)mBIWLw#(9-`Rp93AYf+P(pOxxtySlB&)0-ltO>?Hs6G;!?1PCQ%0T98AX= z99MH0|%!caP$I~i9Ye-}u zWb3BX;hlsrN2iSW%f`-Snw(4`w6KMZ#mW+^kJ>v?sp|ZXjr*0Q3OR!D0Pp|Ci&x~h z+m}E2fBwIvgzgU|CTSl^2}TR8$Qa(wL905N%>$RHpj>Dm;9+Bg6SZ<+pb*Ma^4gP@ z5mx2_A*LLq%bgC4A;36;D35K4ZCwBkvnPoKzQE0D`$iAMK@f|g1o-G5{$HdF3?+|l zRFvMhIu3x~n!yH~4>h3qMS#&0PlK%TT(oBmAgJA5k!N_>ZfvL$59AK%P>jOTniWRS z6`Eq>XIToyjMDwQ-<5j3AtiE#)qxCp8(L%<_x0=?Jy9CVrL{!-`h}6 z0ejIhrk|X86r~zjm}sy0RA#d%d%2kmEq%i(l|R+Y(iDNw38Ck;X2jWVNk(6 z$*5HYbx~}!x6~FWPfphEIDr|YDUHVsZAWb_Cpc$95Oj{;ZJgdT>UNQaQ(3)5>OBJ5 z&gzEz%Ilw%&!T&#i9T9)MMHEA{`GHwo#w&&DOhDz#W;i|(Or$*Tap?w5!3lH~S zkon95OHWX0u=v@ec2`2;GoGcQ&-5W?mX%*A%lyf{mPY~G>12fB=Q3FC{=xqhU6+Ow zKKm&Et{2f7#{q(%;^Y3Q>N#g{5D*>OKroP?tHhSIl}L%(YXkloT#{#a;j@etbXOIB z-{ka`xtGj{_^e$V1}Ut~Q*?e3VN_0!j!~YV8`EmYENbhh0q1;ZHpQXI04?3z^&3*y z+?351UqlH5Fm>viiE`CP@m1O8zn(+`d>Rq<_+xjNFSjOi>vj(GAr6+ozIEbwtE1Z@mV^C8)Y#ffBUwQ45a{1*? zpk212GZ|!raxO*9jHw)^Wr~@?4HrR*c*UF|I&Nfwg>?4UT|Ec1#-qXdoFJWV=2Fz5 zOoNiE?Po3oS7&=nkkL#k5MxAyG@Wx5?Qkxur4kljPYydBDdAMlt*>C66lHvLf^LRk z+|Kc{6WFY2oOI(rLxRu%B7@9JHAn+vI7QHp#0&bA@SgDA&3IEunO_)3MNn3R_?aVY zG}=|_u-c;Zm^0ua5Y1G(Bqn8S_#3P1@`>x8kk5Sfi)cfal>=cRn9cc|sI7tk!hpn< zxvDTyU>O*PlZ>m&oG2)2skjn@2d7JwXu$)4wLLctEi%g)86NM7)$OnlQ!*9#75m@% zh8!L3$xFZb+mhJY!6A{A`SB@!Rzl?g1GKhXY+#E3Ip>N{wpc?34_ptyOiC0?N7tWW zQPN<1G?@mv)^ueMk0UP$0fe46%#4X{=kU3jed?;%05?a#X}jVAK<{9U>GSIJl#eq6 zz#pWOvJAkqT&zgGT9Fj*GlJ&ao2VtJ>Ymz;wxrdxmEbX_qKS2Jaye9^4^ID%`1GXWAB23yN*;y(l2hh#Q|vM6Q-2C2syHTcimH^Yepo_S4buYmU+ z0#jkzRwiL8NEnB2JRUQF?)Iu`nvEZN49W_;|X%>1bWiIhU1 z85aR!w#_+;PD=#h2ecU-j(f_zaU+Yvf~|K1HGUqpWG}AnN6g;ByPQF(8ei1SG2<=>FS>apUG4mvPLD1SqMvNPEQkmqPS3i42w3QrCdRd&>rVOcC>#4oCJZg zKh+X$L~Bq4U-e?fz2QA;9_>r(_(xf~Zs*yAi{F#qa)zj$hL@gEE zQFU{+B$2j0dGtVbA3l)d-Ca3){8(&CSdts{Sp3atWxjNoFU>T~U1P z?qN*=bRI4)SLLwLL{K@As5h0Ri(6W#QHa-Gw3v%q>$o@gesn-4R4&6QTSgYbZVQ8w zi(twiMcondT@oZ;QK(mpN9}-`A_z3hEC%D5jDQj3i|8Vt)y-6z9R%ViEIT-#GQf$- z3@^p(0UIF}RYD7@E}WpiK{(9FmbHg+!ee0Jvl>q|!I;~o^rWuF9Az2_fWg#P_N%sO zNd_cFL<<8g6M!AH5l~MK6mxOVX0|3HoZMCQq;V14!s7$!AqXbWVwP@G2kp4QWr7?B z;HK1vD!`)zzD8dKc{DX0byj84&41jwjAfF?V`47|&PL)=j3GHQ5~|5@m=hQV35R8Z zNGhgN^{1`FHVfELQzky7%u(Yxkk#87mTI{%XcRN4;K( zX%UE}5E3#^N;mL2OomHK68D*=ihrE1a}z+Uh-*6C+T%7qEiW-N*%UNV`#VPGI|M?ag80NBj%Nh|{zCXwz2 z+BydILHPm#jQHm!0Lwx?sY>7XPFhl2%A=%6$RP*Rnx_a#bJlSNg1EtEb2M~VjJ7VZ@~0!fqt z+^{VY;qp24+D4RK*lXI-t+ynClV6lbMIqyvI@3?+^-8ucu@*`xqSL_6f_`*%ofxU< zhr)Dx;kKvc3dj73Q*aQF8;1DFoHBGceWSiia6+qT9a{7(DI?WoNdfB$(7|eTrjkcT z&2Q9X#Ox!!&QG8jH(sq+1@><%I5^}0h1&=YL-cC)TxNYsMu;_$M7S&=)EFK1wQxX$HbqEENk4BCp;6#$rKHXVFX~ zP;uhLe^W%5U=ww8u$g+e!6cL=lCHKcUDb~O67Pj-iIBr4V2h2XV*;tC?XjMYNGg(4 z$2(D8iKB7>OuyB8R^9<>fW$w%SrdNg-zqq{=REo{T!d zkslDj_ffHYi1e07eGgek7C>SOnZ}3?a=;_vEa_}fP1Cf>K+bhzkt@Q_*+-79M%?)G zfI6zGxb8>?wR~DzqM-tl)Fz2%GwSO)>o;Z8ZK<7uhrmT0R+eIFVKFmZFGn}Q)To|O z7nQ?u98+gDiO)mPqZnP!ccx=h*)m2srYT@0O$;lYXQ zKDZ|{d=1&2V;VkD9)Un3x*uFYjrTs1uu6^!O0%)CzzB7i5{FQ)7exyt_Hpa7x^b~j zmh5CO)dNk`mU5!&k!6If7>KJz=&7V@x^E~$P7lu(MrWZKYPq=Y^P16froIW)x#M_F z8Qxdii;g-0_(t=E8nEcYv&BDOI1Xwc_RJFW7x)?u%bzHK%GbFGAQ3077UjhagM(1qhTWA3qW6fUk&A^# zB2~nYtwcE>5nZ&wqJ12ycWEHS%F4mVUH{E&)<@|y@zK^yU@?tY{>%&s&EbrWDt2L0 zVAE3NjNYD?WTw9G4|Vmeeu#dV4hk%UE378iORm{1>INBczvII4%S#vliz zjoy$FD40Z&j~#3=5Bub~hUH#l#lp3HbAb8HF~JDM98 zdV+$gXW>m%BEg>pDvHD*KW0ZH-w`)bvKBU0lqTNvcj2?gwaiG?YBkZBxi2&7<|1Ru zBV(hRphYbc918QpBLr+qhP4w30ZyiK$gIwqs)-Vs1*QRH-0s=E`6&8v&oxml)^H$s zz4k~?extoI*X)lajpdq7TM9v)qY@N_s^fkZ(ZxF1KU5{L5z4gG%97se$#GMhQb9Z% zUM_+$@hxU$9RTK>zNJ#0%QZ`6J*1oARPUu7nh^$TQ9dyV$9nzP%=pLsIzJ_hMh*5d zOxsrdP8M7cW+GG{Q&QJrXl^o|tMGXiDV6)}eB|)ap!+k5|vN|us1xX^5;JH6BgO2D5kgD%-I+k@h03Qaa5cigH1vEit z-NH?#TpPB9@jYY=@#EWR_;KX$6k#NV(484HR)%aKr zMIl?-O|2{+)ceLRgIco8AcrbdX)D2R;*GUq7`J1xfzqT7@YY5aLe}Wf-3L@bQ?qb- z+_v}bn=uT01}k5b(n=NCvkUm9g`YiEaqOpNX;BV~Vr|YR(?u!oFT8#Xq0Vum1or>> zAo62oiJTu0)ruOAXbmHVgTWV1C%vIehsj}JovgHGPg$uG*4g-4PI~ebU@MYs!~hG4 zWG(VODC0+gc7*2b-m{{&y~6RF%_ z4lvEd$s56DB=|PR=`+I#;(JEec}8%Nv~L<$QIav8RGvr%X?UaAN8pLbS~e;Vj}D}` zyev7CTW`Jpp=@n#OB(pjN&QUbSj<^0P*US~KZ>iX5=B7i&@mpRQy&|I0Va=4JwOoP zxmCpb#Icx8*m*)nBB^!v)CgAN=M0!Rkr;*m*T$dos;D+qW@Q|?=MZ3=Q_)y3$gcqEQe-HO zPGC$v{NS!^Z(r2O;mO{vv}$!ptO4*wCN-t*E9D9SlBZXfB)!nf4JggXj6<6Rj&_ft z3f|7OiQvyH4XVcGlp^slRziP$8S`UCNX}0Q!%4Bw)OSi>_YH-YH_U$uYVtu*g*-Gm z9_*Mf6=%<8EnjPd^)>=%Xuk7pa(V1hBm1PdXAKoRAZS{cVEA>lJ%;YMd8? zYa(N_1KKkX^y>UwH#?VGCPVW89Cjhwpxpp<9sK!_FQCtgW=ss0q?Rd2(bAJCKL?AG zcBj*m%QBiQmLKFSIklcmg{)tQ$Kdb!W%{E6MD#kExzTzcK;{LDg_M|wn8Rj8M(#K+ zjT={Vlt&0Bdo|w>7r+28>&+-qOs;O^}&cQ_Gl6b=k#?drD@DcoLsCF+uGV_xVh%{|3Hpn*f4f;BXT% zBjW;9&4&@-X-@&CzjF~2^Pt-}hbl4Ut>Cl_qpqjEgETKUDKidEgQqP%-M}au<7TA~ zDnUYuwg~=N>NeF^=7oWSmH?bWw%dcS4fbPfdTJ**HFZ{_>8F#85iEtyUG6O25Q|N8V3hin(U{P?vWffQ;>EiB-?G1H*S&q_@V?7b z7*iBRQ3hargXRg21=%I&$)>737U`trF;QrOM{&<~0i*Ix#0>z|$jC0kZ{ zwrBapmBwL_OlwwA01ig4Uyi~6sAWKWy4$yGwSx4x`idn{Q^I@Z3x{rc*!#EZb^DYs zexFV7Pb-)1t`gN)=Mh-y4|)-}adrh|WzclgK1Acj@{igNE>6~r7VraZQfd>JdUAa> zYfa4rd|sETGEIMjZIrA7p&F9}r(#f?sQNFFvD)@5)}eC})+RoZ#p1q$Kv!=yJ}D8%$X^W46gWC!fcMvSOesR=b?TbT)H`Fl$g-2H3x#2Q z)BL4UY<_>2>NtXmhcKv_hCmNTh-%}T-Qg(Gu#An*0CPZ$zv7w^?CKTczJ`pd)2IS` z#Cvve?Z`Z{FFz-t%($8_Z*S#geBZoyO536>P&S8F0j~(sWv!=pOaiTqjg6*Eq7mG9WX(Y)SL-9<~wa8Avu(){#-5WC56~ za(m)qk%aUSd^tqiLGVa&Oe-?1>`p;NlN9gKQ`SHpZ3W{^3%_mrbGa{w**UJi4j{WP z4?qtrI9dvg!|eD(APjyuDA7PIN_c^9=mFpHg|}PstImKZ?s|? z9D39pFDo(5ajK4ov$Lm0?@1mI}7$3{5gcFxktqtY5nOFuFu+~75W%R1tsqxH6SBIDmwM+RsO$rgBr zGjjsKY;X^|I#kjG4rV?suWlIjfVhcy;PV>vMzCG#AKRm+3VS)+#z09iY!)R9^2{=n z(l%C-oFT(9fSMkM*F!H5{F%>(&4uTxwLfUsetQteEJJ;>B#n)YiNBH+8^CaSc3!f} z3lg84La7Fjb0@ETLu_VrCjihE%$N^;&n|EsUm!po{Y^P}r6=cZj8BZ@)+-%kZHP+5 zwd!pJi|fcH7{odBj0Y8GxzL!Z)n$TXI-MIR#Y#B@2P-1=t#$DMtLs)!vNVd)M^N;D zIUL5btKhyj@V*{UxCG-#63|enPaTo6kbNx)eJ(Q}3Bl1wQ{TYX?KK;Ba4YoSQr9r! z|7j0~NOJ%+|Bm7@o`(Ey?X^H8rz%he7zs~L7b!y0hD?2_BVjFWnL$ zuB{8prHFS&Kd{*7C<1=u#F0xkd-?f7El}&2*(@xPx?Qs&SsqYIt{4w#KzoS^+ zj%ky(NK4y>CZ->To|0maQq?T50g^N)!$r5PC5q)TY?sM2Y0YjFv)mk3+t&YPA4s47 zkWB%uLA{GJaN(lngPYTK3JUfAmKQHA{8;lV$xb02p(h!@QErzvGt{XfC z_qkoc@6=F&1avC!O>Mr+p+n8tLx;9X_}n!F1D$1DZt37GZlF3!N-tHjWCd{#QXKA% zd&b5&^^?J}BP-O>Swkp60i;q=P+MI^sR%k6^!-pG4hF5MfVye97Na9VnZxm<>bB1V z&@nnG24rA-*LJg{H|lj;1rUb=WOwUqE>LO@x;>5XT(qQadGhso=AJQaW_!F^{tZq} zHk2{LU~Q@*oOZ{QE%=!(KsrY;I%A>F7f&^+0LdFu!p_a;#${}kYcf4Pnx8p*@aoN6 z`^P@^F*hL0q)d*;I)X(WX{$#SwT61G;w0qBtkc*#W>YfIk$zR+c0ji&eW}LDhP7$a zL2Ni9J*4ogHX(J@iol~Afi*pY4?axK`#e3N^W=6y}RJyN?U?yfz*T7O!ls@k%Ze%fFG5GNFI9ijEe+GKq3vFf-mHs>I z(FrG|o6m}c%qtiU%l5)`5nw(v#kK5^izkOt0fp<>5`d zurB)3hYq|H#@nre?(Pf@q$&cF4_Qcs^M-Y9512P#RUCB2HCW*QajHt`D2KzKR>|S8 z3#nASjze@xoQret+)Ci z`U~jb+oyyH1|5QK+ziIMp{HrSY6)D1uIw8Dw92X5$P~&rfk~rzaPw*6qm#WjYLHq8 z`dWyQ2=l}v-Alm{sas+od>{2!<;KC{C&Sm(k(Stat*%qR=bpUl?iZ$~4{Y4b^`AI# zB2}$a_Ki%8$?*QYQcEXf2SI}=I&}_poYXCG2A&jLP&|EY9ipZFthN~_?Qt7`uuTe+ zKq7#(DmGngVj8J=P=!o21QTXq{9Vz`%)SPt)XbDbBT?Dj&gp}-I1d=#Jrhr8uSy#M zI2s75RK9}ujt8kj>8iTdM^F$M08N{{01q1Np8BAYW^FQ1uq+`)MbA{~69~xCrT`gz zAezwhT?a7r8Kege^6p*bqztyd)}zX>u+fjDn@!IaYGl}WsHvuIg?N#S4xi3lUlt!qfXu`=fJkJ2oJPpGyV&rG;jmm|CP44k0svG$PXA&# z*vW6-^laIQ19$#mDirBf5I{F5wqsXweUOC^AO$cRRChI(0?0GtQ?gzr=GIYWj5CN@ z*_;Mvs&cc-EBFrdTxn>t9R+Va1d2+X*-=CrLdl@XfFh?S38`>fc?J~_+Q6ayQg-ll zd;JA@&TSJwnD$#Na0enTp1?h&I*kiduRlQLIcFAkuUcy!9tA3Eyr=vH$%sdc01~P zUT@abl|2lgks?6tz{a%%k@EBKP%H>^z26^|wdHjQ;N<3?^_cOL*h(KZH86r~yT(a( zHFdNv^_Y42Z(3$GJ-`3?%wh16e!P$N9*t)>J3I7<(fMH6_6Hoy;EYM=JsSR2jndl#k0Az+zSNhA$ z&)`$iJVf;vrp-JO@{{ z^iXwt&%WpV110ljxu%#(uh}=*Bn5Z?O4+k=rgQ2cskW%b24CI41~X&ybQaSKQv>o& z6Bs^J;+gE<;5-)Hu&tg38$OpD*b4%&voq5x554!j*KYRuuV1<_Gn7n7DiM~6WL&Cv zpKF(wBM(LNvwUqH*5wJNt;aU37$&A<%Ed(N9 zI@ohWb*zgbHv*reAsIl}v8;ouOgCuX>S<}B7!GX=9T`yH9^(M%7!M0l!ln&DtIdH) zlacci12T3C=Edu#PKPX+rD|hKC;D~T#^!*%AOYGo(iejOH%}0nAq8XNnV11iB2obp zGYUp#e0INzw%pQH>OVjWff~(@P!eGC){%j=Hg=>L84}O26S1w!mru$qyk?Hy{{%Bd zVjLTln(UyIiQoWh0t=z6y<8|5PhIuu6&X#%kx}GjVPgf^VOX48Nh&P{#H2X5PJU;) z*SF|upH4|45=3^{klapA0_r4ZDci)gO4h|0>Kfs$taj(sw5h1*RSF}bg^ionjUv8`G#^9%~ z7lHzTMqex?Az&dpYuKo~Mj)}Y6sTh(T2r%F8@NL#Z5zlM%J`jqKlC?cv*e#8TP^AT#n zUSnUUr@Qo&rNJ@43b}UavaG&*K>~@0%-?@PX}c_YRN6+SPxBnLXe4$(xiU5gUDQJO zG?UOftS|T^h75s2q;-n zfsm>gyL3Op0HTuLRf8K+xr2D`x=yiY5S#w*7M=7b#i0WBN37 zNSAF~yGWmMGx0l-o^{$i-C+7Y13iPv;px9ZWpT#<-o%7Bamx+7psUJNWF}x*1F2yI zs*YwWJw{DtIIS}4KO@3RC8b2ybpWKqNVI*vjNpPy%o-h&KA0C?*xKR^i9PUu#O^*U zE5G*(82V!Hq|-8q67qp@k<0JalgVZ?SiLQo;Z$k<=v7Jk!?_h$w(aWv?cCXP&YTfs~_od59u;p*u5UVQUBuJw^7ci88hx92UBZ6uuKqV z^zOS2NJ<4T@fcN?>MF7a|F{MdITCJ-c?Xp(BTmNN;ByIFMIL z8yiySfgSn&56PK7_@u}Ii`)T|Gs zB8P~nkd7x88~lP{8A+wE_PnyRup&3EugUzqcZ0rd=<{HS<^t2z!@8;A@QI9!0tB|D zh5$k%Ykwr9`+y!dlqwJ#V$+x!Yk55VU?TC?8OZJ{l}gpU-aw9cfT}nxV{WXt2iyB8 zjn<|*_Qn~DJTGprHobbYb?vFUj5r(s~*|9HV#Ww!3QnLkmKR zuEIXQQ^!KR=gn{X;=vOqZrtp(uP)#CAkup`gB^{InY!}?VNK5sM8GeG1xCBV8?T&` ztIxh5VWg}R51y28IwPx_+fv15_G2M>yvRJf$|(apC4U>0VWh;hoo(3yxaJ;;Nt`rh zF(>|R%UC)N{8N~VP$?P$=olZJ(9YUTEJm6w@em`p7{m9k7i;20Do(9P0VRSPC5T6} z1{)blO)1+LvK5v!1beMrh}YFqTRvu5>`iL7O}oB_dJ&59JZ5wPOV6I$EG-4XiPh*h zKF2UHYFF7;WhzG(5UlmM9mQ4Dg$zIALr`y(3SzUX7BsZ2zOgjYM#h5x(IR*YY=p*A zcCjd)W?Sz=$YbbIXDkC2$t?k_r$(zPpZ?k@IsSA1U+JMNT>r>NWn%vxsg=s%(%SNO z-pn)JEoEmPeDi0L5x?CUU^Wc;%Uj!$N~hHvx~sB%x6Zl6fhci2_hg8acaOfga$|K> zW)C0Ha*&-2dO#nH3_;APL^KNKQnR}ob7>rlY#sdz2Vl!QfowY4x1H#F;o`7uTQe>ag-zX~M zKqaJ;d0-Fi0o}$XIZ~94$GCsf)tt2_?fJ`~<$O5lx}BEA33YFI&!d09Yq}Zy13%;1 z+E_iLgS{5wU2aO7S!%_jk_yM9gN@Rt;dHeE*iGQF5`vGkpCrwVzl&zl>U!1yrbAr|?{^d>Vy{_IBjWJHtd>wttt!tx{en#Yoxd$< zlrCp~_YY)*jhAGQK&v-amrvrm{iWWbyQS>ho;%Kr-LbdG&f#XumIOfNtwLUMcs9e6 zlelai9th-Ef4zPaSp-e2*%|EzOOuxyC}r}%r!u4CYI;Sbt;c8ND9+>v0PX+|L$4Ho zpIHc=5->igibZimDyR9mxORQ@a^No?`2OvF-BwD}a5&P`RGjDCfKgGWbhd%>1|r(i zx{hfG-OmX`5ya!PxjNEYFHS9vP~d~9*XvR!mQ^$2W@jl4jV-Sl%23Hi=q`ZYtI>*| zPU-l$A~1n{6B9dk+2{rM%eMSYFEb6Nh$8+!2OqKQv~X=yb2>=b`^wlj%0AJZt5|ADaBjv3<|v|~cRyX^A`vy)>8goxTTgQi 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

D
zC^I6#t&LVX97)Xl*#H4CzomKy(u}6PzoC>_9GFOAVxr{>Mql;#%0K(sxxR5{r&dW5
zz*3vSo|!%`|9AYrLN}R*0;ojYDfj}u5e!CD2}%mJ2khe9;sQ=sk4n(Ppl36{Z*n=*
z$e>1h0F7Cz`z()QCgbx+f3XR(*_>(!2+%s5Jxh^ysV*&)J>%08oTnhfXS%=_*lVN1
zt2xLC8D#LArY`jWVZ$0z=s+we&wu7mM>_;W>ne8Vj1*xC3Sui^n$O8;P|0oZeu{8BSW;qhMMcsckATRGYo?
z&XT-NubmrfZ*4WpfkY~*bQ(oi8bVygu}g(n9Lyx9V>LuW=tfn#ZZklt!=Xm_@oOBt
zkS(ZbF8ff%(kaeC)J8YbxZMgihA*l8Kh<(s=7A;bKXgF0R@Ri>_7f+;NlCdoUDr9P
zGBrCb?q^P^>z7Lz7+V7?LxYP}h{y`)1TGYQ;pUE|l5z!L-15?j?A<$ujapIgP>qkd
z8C~r1B_`33&!Zf9?kiuCG2kaF3(NTI5#ZVh;Oh;~KnVP+W4H_kp4q#Enx*|C1S~mpx<5#-`|29r)tk>oyS~aMP5SND
z);dRh!>ywZc+#+(s5Xtm
zJQbVt_~;cXa(QJ*SPv7}jK^Y%Q&d3>yFn-NbnKS_y3tWfg9A<^U_hC%arLq&0$h&7
zQ);Np)SSWv`lO@)&;_-F)TJpsgRa#?FyLS%oYb2rf8wKQ0JcG8Y1k7polKyPUIO^q
z*Ezgynl&MqjUG585d<3=Co_nVUD`Q+RtlHSNvpCW4U`C;a11y}Oe)(OhAjd%>qS7$iL?X(%51%11vfF+8z&A}LJ(r8uf1|cS~T$?w#E?}ES9Ir(Dl
zp2r*L_EoOm({)N)1lm(j?-Gs1u?FIx)x%1``@LkLBI^C(8Du9RtO-)j)W{_8d{Qh4
zao+&O20X#=8|sbvhGih^E1@(zx1AkfbC|ZFdyV~{H5m7(5k-vOCWU5fEw|0=XmeW9
z{)RJKX{6gVLM@Id&@NL17SLh!&CSi%G(h{CUzN@El$Hi=qcG(a5FjM$;#dYmHRgB5
z)=-BUA-=`Dex)LVeYdQxY{(8yL>kwy_hkeNoP8P|e1}L3%mA{MDt>7a|DQS*e%T$A
zHUXsL45)=%0e=_Ag7$*(@GHK;$?v1%2dFtfS%g1Fd?j|!b3nsllN49hrH;*d0(Jg1
zlpe*drBpI?Atk)uHPC~54$O-uG$cpwf16R0KJ<3^{oK#W@-t6MU?`1D!Y#@DhvZG)
z^+73ITa)3vdnGkBDqsI^zlk!XDlPz$Z11;wCWr=z&7yn@%+D$C$I_A|LJZl*Q(t~e
zt~`B84$sW!R6O1zPN9zs#bpGU(W&zb2&h#FSfUiH8yN_nah+Kx%9lL|mK(@mc&ISV
z@*`X7;ooVLHMt9m(y$yA-Q}`b1e?QBK@hrh?wlMR&d4ghe+6Y^3}xI7O5{j-SjI=j
zfC*id8=!O#y!)MCMi7MYcin(7b+YjMT=iNKHRdhvmwwkr^zo$nF=-FD%5K`s&xei-1rCY5UgpHvU~zyu&@1?8cLxf+)96ec$bA
zQtMu&xJcC!3sE0V$IKp4ECjW1B0Y2i8OUpHq8nVZE5ErGREIHZVDF~^&Uk<98V}oQ
z7ijCPZesEKJVvDC!|#+)wk&`OrL_Y=&_q09hSrb;@dagQcvvcQ=tiBM00zPOpYDk4
zG)|6Wu=xC75X$O*N}PiVU7qL;a3hMY;*;Y@REEKi%bQKM565=Tb1w!Nh@YMQmGI2;>_>}8`-m!a`783D+gD-AFm?GJLa
z2P%xxZ6mwQ*|9Q&le$Jc4L>!8dso_6mm1h4!qQnbUE=fI9WxVW0woyRBhEkhl=LbU
zofTuZOqQ#q80ccF-AYv3?OWD@)LpJ>I1#@dVq+c{l>&g@MPz+T3k$Nbazl2uK;<_p
zqVByYUAnY9K)HG5r89E+si!5kzA6{bz9iSLEy_#JpOzP%eM&egZ3+N!*8&c*apS+ss|%$?wBShfQTUZcPsfO!@WLa-@w7G%`MR`nAr$-F;nn
z_SrTpl0Ktm`vPpLXrSFpZt?Q
zl9kIZN*+wbcm2?h$p`TKlyL}6@Xrp2MBa@(xMZb+BvF*q^H2H
zkJgAR1Hc~nLDjZeb&2EOR2hHv_dbHssw+X@9Tk>1xKFejqy~o1tb*@#^6-8+b#Xz4
z*ojTxRG+)0!SfKZ78>%<|Flnr4u4)j08GqgbQ7)@wk41ll0*VPDS}M7T9N(8u1X6R
zq=4X<#yxJ-kev+y3khu@8*EB?a##|VBeHt+s%&1kAX9I;&rA@cmw*l(_t1Mb=1JXp
z-^spx``hO~@%vwV>cS`Aw))BiFj+Mm24gaJ@}z{Z?kyaEv7xA{eq+c+30_lv(5Ut0
z<(JRO_{6wO&h0^on3RP}7o^uL$>EcS<@8s-&cNfGc-zBPtx*1n{FUzT-_OI-fSGLT&dX@0S-GiSp8=@ELVzjS!u;IclI<2mP0o?UhwoMpVyYk+WRzg~Bp6IeT4Rr&qaL
z-h)hF*dH*nW}Lz3P5o!k#!rt?Vh|i2)gw@5neN;G($meYHQ6YZ4JC=NO=-DqJJORp
zK~YXnmd!SO1{Auhv3V^HTtFr6(WoScN2G!GpeW6cl7^*UVBmUIN9{i`J*hKx*)zcm
zCx8G_S>BfD?3Bz-rq!J-2t1`ve^KBU$?;hLkWndLIVaD3_OqaZ$0R}z(Qr^|o6GXV
z=l)pkeA_$afe-!-(4~D`V?qH-n*G>d2w0nQR*#PxTx)ogpV-_1GG)mj3GBbaw8mQm
zxr6e#Kl+@M*Vkogd{k=9zG4(TZ2%P0rHqZUgA(J;lgDHjfhiAc$JMvA)0uNrS~xsr
zCr72Yy#qknQD-tQ4i}mk@jkVYVU!S@!oXePfhbOVuN3m2wvjbWjR7F-7%U}$_0w>J
zi9!kHL2xIiJ3Kn9;}$MGa~j!4TeU})HWlLeFp%~8zF?*QD%7Zsw8Z<$xvxJXuBAm8
z>NO>5fo0?Hc!HsH?dRF!rQb;zhbWjAvXOlPsm2tXP*)#+9truCmjC+azkp|1lN0yc
zZ-rvRcCp?M{g03Q_AjrWe)9itc6K7W!Q-_~U%Z*uw><;-rmRCVf#)9o%00jOd%yA9
zU;6Unhhwn>Zm-uK9v*Q8d{x;%dQWvEXMAu_asUsJE&5e3D)fU$#M$}kG0+HVd%MrM
zu2=y65Yk@1Y+ku4>sKzRVs&_S-WeGmEz9fls^qrEdPrf}ed{=8;L`3(6{v&07h(%E
z$z$t&pF$yGBUp&nuyIILsI&P~)xf%yY6ckfa4S?#xg
zwOCylKYUyczW=)zGaQ6wh@15@kLvjs3ZdPu*a#~WuWAf+^
z{Ro115%g^V7!4RBY&5#PQ50oxD>fB+m4f#IyNOPZiw}%Q2%C~Fa#3U(S1w+W=fCo}
z+<{HYERCRNM?G-8z(2quh5X7;R4V{S(*c>EnUu3vu1gOAiwfEbGPg)NBa;MvuUyu9
z-W$lx+b(8tUde52X#Y(j9@Sa6qX@XGt3|~?d{|df040p9a0r2qplv8NB&ooPY@w7Q
z7UI9LEGuU(Nb&lL3>}yitJ2giUSp)x^}74^tCF)f+pXVLoA>K@Imto)WRpa0WSubjJZ
z*o)Mgw*2L4iERg(X$%8hu7azle`Ww_BSizfE>8h$2B7C{?f2kp(~jaC><6K0k;8&G
z8Zd&ACe2B8*sO)66$gu`E3fgj8vwIg>miyQxfKJk20>%jncUzt#4<=H+d2ilqnnKC
z!t7=N*+$VwqH3UG7>3#>BJ%(&6jEzF`BW75gc0;u;A!Hpqark>p-~q|Zu(92v
zOrLG&F2lHxg|M1c9hW#dJ}o(9WE{j@M`|Cr`#w4R-VbVzSaGKyzL5zz@jV|>5!$&=
ze^R33j?BauPv?
zpRs4(9g4-Qf+7wuI|HUfCaA}5zSH{hnmqsPbFzc-{_xQwvIiv%%fV|)OLAj%85H=YyyMLeIW0WXFF*72cbBhS
z{zCTrnGfvly>DkG@@)$s3?9rn_ywN-;unwn^2a{%#G`HXT>#GPXf|<0?$>m-BK-FLKgc52*R&
z>&rU&KwZl4l_^>0_ymqAq#wuB*o4#p;?XOWOj5TG>J{HP0=9(>fs|>}sca1O{|Gib
zGmj857`l_GBN%@Vn~x?$a|c0j;@@p#WDbXGZ(Nne>XI~qL%3&srGNwJ5xMf@*QIdk
zlo~Tl96T!T`jH=%>XnP~$G`lGa^SAJW#60Ls=gl%%AE_3e^weh8=#h>I$|_JD@EWS
zWPJj7W?`K49%LM8Y;X?PYO%c@fstbp*g^dG=e{cS^=%m&8&+_epeHH#07{H3vdi>n
zTs=?f2p%-t+1bkJ0Hv`}U@f?BWvq`1?(zKmi~^x8lqsClMqrZ8_OyH;Th*oj4EHIG
zY_8jEtH0_j%C~i7ZFVpUY$PFeg)I*arA=*6=PqO(aWEXAI9Lx_Ndl9&{=$n=!8)Ud
zsnaywx$a&cHCBH{Ud1b!O0`EanVyB`>IwUiNdg-J4bJ;;?h}73FMaBhSWg}~_Ru5p
z@T2cV_7ssTOUtsgvn5~u`ctyLwkAW!$oJ#>GdthGv$(WyMM3*vJPWF}cS;58eINLM
zLq_S98<&n2YWa_DzHs^%=@+saM7|w?us8unu
zA{`BS9CJVsQil#&9*>@u>#JL`*(ie{@Ts>3|D3~xfQCsO*g$+@8X#y>3OEtje`5FB
z%92<(5ou9S$A*a~Q@|y#d9ip>*o3@SJf6Kgd5Hty-^5Ew8#^+)Zw6poOm3_f#2xWU
zGKj?m6hC?Bute^82phXBD_{7OvR!xo@ZZ(RA}@dHPh|f72jr3O`CIbxAADF|e&R8i
zzw>VKB3O9H?jSn~d2yH3+tt_$1c4iPq6i@Iq%t5ZW7tMOC1nN737g+MU@y);e^#!e
zEEofxWvgF_OKl1x*bwwZDX@tQfhiXDsrao1hQzM6C5r=Oh#HYbTb7Er2dN>M#AeTd
zp`f=0sdHwaWQGX1cTtiQ+BNlpAqC2^C%3UJqsWGsZRHkLC9-e7arY|X-r!yaJT0lx
z(1$t}aH4025!iucYE)m92WdYN=?47K4jlqwDDQ@lY4-r`
zp8buU-^w+|Ihz190URBxE;1=zwKS`Liy2`e6c9^;^vUP
zWf~sFf+}NC^Jh5TVPa%dCUJv!BG>T{i-nRbp+-$|Q1X!jl0@2H1(>$<>}hG|@`n0l
zSr7@SpequIq
zlvAu#Ni(;BLxgau`)G&Aah9M^XGYVqwMD};w=pS3yF=%9`YG+L#sr
z`~zNu#g#`54`>c$U(e|(sZAS5or#kMYCk(CTRcIrF*C>Rm%!+>G?tfS`u>L{FaUQz
zh`&B1)l*-^DL4WUagVHh{&RBvQ=gC;Hr0Fn=O35xgU94Ezy2$7^@%TvMWbV{U;8px
zv%9cieJTa$iQ7StwED<0*lvJQ$rn&-0QDE4aT37hZDbP9fBk96AVZ*VtuyH7=pq0_
zQO>OAi~8&v$kN#N6vKVuI8VmpG6D#j0I4%9)jKjZGY$O3r7rty6JYtmNq(I6##RV+
zZ|CaBW{}OXU4X+W3RoA+a3^ObWMkp7bWz?!X6Auyl%<4>%?c)@i*@LPeCql|@tG9>
zlZOYf1{#(3+{^F87A(@Nt!6}C%?lf%*=@QRaJg>T)OhLZUzI{FEBF22KagV&yam^~
zDPQ=5Ka`87UXVNQJSuN`_@@1?wOJ?Wy
z%AP|9Bo$7`$NuPJa?jhp0|9r^X?3s#JnbK@Z&W{>-`qSrxRlp5h`eqA;4BGknOc~xp8e-X0XVKdyI^YXb%WCMv5Jo00XaH
zyRP!(FlfcS`{w1~fx|KiIxCBxd;Y0su;4nf=lF3s^w5K#6q9n}g=eLf-9pgdVu~3H
zJGZ=UuUe}*+$@#SYY~
zKv8uLE{X$0_98tmqvS~A^lMd1YNl+*C>)AN35%OJ5eGr(OkCXJ@jZKV!dwB_8HW{l
z06tPLK|9C}K+ZZcvf0TwnR?&*B=x@U6$gvT-LJ{&SH39S{I*O!{BDu>7%~b!?iW&a
zoW!Fij!6qAUTJL!!TE@S(Z%%}5~D{8CFm}d_Nif#iuaI;>%=uMF`X_>Xap0gX4y4M
zRTwiVw&OqlwWlP6Odtuorc3+*_lk~c%&h2=#_}bKz(OamHL!3Yd>1lHw0@+ngae)$
zxPJ_sljFnE02^1r=J!!5kCLTEH+lpo8)Xr(f=0*Db)~>F)_@-YC%d&F;UujM@Oj8c
zyud;@v9F%ZiyZ;ugaeD37@h}I1-lX8Ly3r*R@H!=cxX|k4Sfh@t#(Xa#jCNi8few4
z{?z1z09ldqk9}22pyu!T8{aFVQ?qj8*;Del|L|XB1MJoVkG>P7+N|VPSLDjMv$DCe
zj)3fvmE{f1I39k}o9N&tt6&}1Zfwf@-o4_-f!juw{?L2gBL@!LAs_qj@5=bmyR6y6
zZ*{2N^>|7TNh|xg?d|P7BCl@{d0hg?H-V-0m%j9=@t^ydfAsXm>a|BQ*&sB7n@Tg6&CLzPE{HBOU0*|*R@yE|3BX^iTmXd?ki$og
zN)$Es;<-z5&;3o{()uV=x8ErN?7ZEf)9eEG@k*w)f3aJyNgLyhQe`
z!5vc`hGmQN2R%^$NO7`Ied%Y1Fc#g)c20YHIQ-1PLZr}%%o1JG8Q|im^EbD$z$J!2
zO9KM{MN7r#@Yp!8hZ?BPk{aan>c+N!YTF*}O)?e%E3~75(uMMm;|n6}BSJ|~%oZdy
zN*zc`Mo!$NGWq<|&q}0Mmd#VoC}uSGf$x+HPdqMpuwHNZ@t>AE-~YXmU%n>K{?>ny
z{?b+8M*-OYaHpn8l-%1!(5Kdi44|~hV6bpZ3D?6WZ=y71=|=qo|LWYS7dh-#MgX+7
zX(M0{`h_^QlZ**64UTf)aBk*xb(AS>ykCaCrsay3I?P5Z?K)Eal+Md3;C>SGh#*^_
z0-0UdEY}JK0PNMWN~c3^QBVA
zv|Q@+MlY5S?x!DtRXTOKcJ90eP>VBJ_*L7TA$b+A#@gnz)9rdmL
z%weC-B33=|+lgeU7u$KPxV;`1Mxn?=Rv@EV>QC4nGhb8|tI~euHlYOF#SB&p!N%|K?vkpWj|R;15TfT%is?E9DwV$K@)hrsW$ea`29W
znwF8~EaKEFqXy=z4?h-#8t~vI-hn7Oj1q<})by|9Nmt$3mImANGf6C{jI5ryB$rR0
z7VJiuIdL~?Uyp1ch;X`467*qVb9-icWA#;;;r`iIvAi9ic7nk`D;3pz*eZfjTR_MB
zLq7?6Jp@>D?-V5mEFer9LbBzK5k2W#Q`~h9qxRzWcZzjnUm1X)4W#NdU>_;qKq;vs
zaQcy2i+ZW{RO)Q&sq90hmJ$awGyzE;o$MQ6c(7TbM@~pHJuR)dy;3>-HMxY+WNiNd
zd|m*V8EDMaE3$|`+xM1t$}s5N&;N)2AR8|~C#%mtEn6=?F9CeMAHiTEos_l3Rb|Ae
z64p|JQK3JuTH94L0~g@bG`0^A{A6}QAo#*FXQZ>81vs41X?hqD^+0oLECP@V1Ir5V|B7Ll%
z3jRBc>t;JVwI#uU19}YEPN`Z1_z;pvqawL$D`Ep9@PW>5qa5lDjp(!F_hb;^3?g>C
zCU6KXU%Z5psmQrSrhTGWeN`n)?&8^p!vIgqV562UU6$1Bh>Y%?mjD7m`Gr?xdu0jF
z5X{oG1(_dD$^GB)upD{dZj_^=xIZ@7mvw;e2(lbdUIr~59YQ(3CP}Q1%C&2<_2LV%
zh*I>q-}ycH;xGNW)Ly(O`7eDzKJjBeAXk3lSEToq$DOBt?~mmC*S~TizwpEhwfxGv
zcwGaW@-@YP*Q5j44Icde|MkE8hoAfxKk*~~9^jTI8jd>M`J~Y^!Bw8Pn+N~_9dP6s40mv}L5kDHXo?d_!~|K5coIg}Q^_FokuJ2kX{gfWiSW0lbE?{4z4M0BB=3
z$`R^9#zDbSj8`cEBg5v3f<{(h8Cw95oq*U-u_3R%(5}ez=m-GFb=gEYGzRc`18cK}
z&mtS-t>fB|*#&^bHIb#z4`mae^v>$4%pk+HY5mx!41M#OznRy#(~`4tcZ;O
z5=soq^z>difefl%-cfLy=2J9-;uy@na}*fiwp7nwVCib@rAgIO7vyUA+;DK@xzDVf
zJN5S_kKX@3c7w>PRcybi0P@Y^FuHX8`~U4<{Gb2vXMgr*X7Mm$!6bbgEZWsK@sI;R
z(hnS(#VHHA41iY%4=X_5hd!xL(62!F-Kk+|104?np|je^N^mmx@GwKDRl5j292!ky
zmjnPu%B^$2P;zTDlj%x%V-+A{0+|jF`>70S$88x2hV-P&-dKKJN|CRjw&|q(7PU$9h7|4#T%0Oz;SUNNl6!<aUy-2)AC#?+E+bv9%7u@AM26OvCBm_p2#h1d
zS-4s0faO>!aSwS-S>a5M8(Tp>Z`;xAK{F8@W8r8k5C1=nkPEq@Y+hOfqvAKdq6qY)
zzFGbdlH#G!M(MGNpQDu_v4{$?2bu^KaKEV1THD-_gQ)eJD1VjqqHmg%>=`gJpHsKgHJwKz%DQ;L>bop{xHnLMq*>DbR0QX}Xo1S1kzoXr1Wp-YCk#hFN&90r1upPZr&h4wP
z1f_f49rG&w^I(%#v+K$>je^!4$;72y-;wQQ{LbWl8JdkCc&*FhfAHIK@yVBD0_Et)
z2!b6-ot?`s%LuZ~8r|lp3ifogfw6^k7X+p@0`S#8HYLtO4@mnRZ5u;KAAI;f{kxwz4$5g_
zdWK21TJc+WDEsd_DQ|!8+vLGF-6uy6%ppA+(g(=)G7gOLhfue3=n}p>(|C6&FD|5_
zPS29^dKUHKHKc4M@q2YVyEMVlbUFxCvqM0`9(ZHFsCFs^5+x}}s0eLIYnY~E;n+R@M
z89RAD=tpbhnI+V}up~1QUA{?e&Z!7EeiLBFr?1fpD~dt)ne%4GtWhw1VJawT(l%
zwQI>oC8wC_c2u3RS&-Ss5HgW4z#+yTVj<0DSE*^2bRP{(bSU*(-mu+lgmbxqxxX$y
zurJ_$xPeu?Zxh+}5CC-c{IrWT=^&eOR$e*vcLy8#Rh2WhoPq2{ss(4k|DXQW&wlcSFMsLX2N2D>
zy}rG^wd3L-r}4dGh?Z&nC!x(jJ%C?k6anD^7l%vZ#HQe>*S4kUY)WD6x^|BCk*Y7A
zyNHKYMWj6=VbrL59(WkI#t?u(OB#iW4k)$(7_w)E-kD82h)^XYKAP)dF>F<`sv{{E
ziibIt5ZC*f6seVbKJ9iJqaaItNyJzHQch24y>2FBC0J`=Q#Y&PMSaSaf2tUrO{#$xBsPCg>QuBMBWvMQYh6C8SWx<*cT4Hi6XF}05f=cqDxr*^Bh#rQ
zc70RwD+OtQF-hS$bvghMLjXAe8U}E!d4STDG6EKG90e^605tGzvDKQ;?KM>P#h0#P
z@t2jZ4I}t8@hqb_%}J^E21B{U^2-ju&LB2Yl(To*Z3jrdUN0vuai*96KaYDGy#8|qmn)do^S4zOMwq*iYuGMLcA|reg
zp8oR9t{qpS;kDZxPn{D6cu3N9ADC1ZL9k5h%GZ-X$fM670-8775;^CeiSKm7ahp`ZAN632SHeEK;VogR~fFDiYMciDO#G%=VSfXP*4
zZ=FUL0dPl#=jJ6kJ0^R+?|o7~cU|(YyksptyXgR|cLg^W{#$?P6~BA#_
zg6>3p+~ldySD7=xGQJm2M$X1n=O)VCo6TWRSFdS;IRj>=mQQ+ATF*gI#-oECoIF1H
znVg!&Ajz4$1$s4bQX&XfQUWgw^rq4eGYCWLxBPybMC-ZU0#3skfQ4xHNb
zilxS%O4Zo-l%z6~62M87o|;pq_n_UDu|s!C;*L9|aN!jxE-y;>IM(*mj5wtNm?LaB
zwhJWF8sxHn`Vsu|aRp?3p{O>%4O2MfccfTkkBp=JG91|%W3wV>*-+?(Y>p)XMSpA%
zWMf}f#d2+9!H2(FK;}`)=JY#Vskf&*>@codpHkX!c|TxKA`3GI*?G
zd}KLAkeNag*#QGfmX?F*AsGkF%=Y#saU(KPUD^eBbZ!po7#>PBtg-k|8o;SvTLYM#
z)bT!}$mlAqiufsC#|HM|&?0t1Ga(DC5i_13Jyh^#P9&<>Q~&{y{(2Jdy9R;dmgwD^3Lt;>
z9e?*%{^JjS>i7T0Po{9fb-R6ga%99cJ2@p8oN7afpd?X7c(Iv!0OYK0UHnMdL-;Zw
zL|UYQ>iFaibJSy9#ZPpGav^w}dHOU`tSjQfmt=ZM>%A80>@YH!4U`2hKX*!6NNZU=
z^l3ZCt!Z&lw{=b{PemUVK9P9Jnvp_#tJUgjRfJgWW-Gvvhqlgfbp~!E+;AQRPAzV9
zEbIodk0wrUpUcc-sak9$|xydnAZ>r%l2q4G3{%wYSurzC#lxI|daAj|0BUZ&pp0rB1apmZko
zX@_tA{5i>^?6I(jEqoR+-!M)<7XlgkSY}6tq>atQveQqy649_D%zg
zPPI}Ho23`-i7%EBD)H^jHR%<$rCC5Z2+VNrqwm03>$fjF^}OW2@bQm3jmE^Tg8Zhx
z-_87x(L8AB;#|9SE&e}#{n!2_Q~E?AY44exa!rkxY2)mmjUp<#@j!Ibu-3x^qx%+V
zNS<0e#XIay!!wrgngG(-BF-~yf;(PXJx`XV5Mn3ezB1(
zCDoi1H@EPh0Z4Pg8-lgR?~W4Mx!2|Pg&^qo>6s(nc1#)%{OJ@AM*K4aOl80Cb(kDM1!FULS
zD7K5?eJjeC5%{q?9q+9ypMJOJZPr^>U~nx=V*D#`elsVmw-mP>_17KYPUPyO4H*8|UpHOC?3ONH{OCu1
zeBt84#6D1kGb5v}C{KK337Mp!Bi(oa9#Tr2(x%hSP^92twQy?DQJdo`d&nZ%^_D(t
zYA3c<*5x{=NYbRN@!i-|6x+~5h_qh`beo0KVR+wuSy)GE1%K+kPnmx8F4J!t2*jHx2an!cmV1+RgCs(ug4(&0>f&KB`{mA&9-
z#s*IC05(w!*#-Mi*n>d<8ls0(Q6`Y~C4fkKK2EErDKSM+^oH%>y{OJ@mkX%hBQlj9
zm8)P>0P@Q0d%q8Lbw$=5`-(b}mjSxXx-5Su$5^t%o`^yXg68+XnvELlriJN8h2C9?u
zaCTO=v?L-E)kOBe(k>KT2s;&
z*FuTWV#bOuM4&yDPV4<{BS1d+%yY6;D9Pl(d70X`S9Z>w1B(}sSaJ|R=ou5Bc@qF{
z1oz%afwNqnj4%&-&0XRuKzfd@*H
zUyERsdW2fqctsSy1w_4rn{SXtM@tXRb7^3+l<@^t0rG6-%Hm-k3r%oHb>ac;Y;9|#
z^s{vwH@#l2N@{#mPmfhZUYZNrwp&v|rpi^$9O=8274YLdMCYo4JBY_$lOx%eIvszv
z(~WV)ixG@Dni+}XQ3WbHDm!>+%#vv7M@GpsmWdiGyXk$%S+;|b3G88+0GP&y+*BiI
zQ7r>qsBDW9>QK%hO^wkv6QxHUDEsi_H0}=q3Q7EbH-GzI|E-_-*}uPCtn{*_x+`1n$RbLXYPqf@3$qtaQ=^%X>2v8R
z?aODt!y$}}ii%vO(!&T=99*r3i!FM;h>68f`*SiM5q*yH0LUXVGn0yIu?H$dZx}ph
zmQp-iya>Kttg|XkXmwYIv#*4#WK{kGeLPlnkMI30v@SIvLekKB4NFh*u(6b@#lr)2EFF}bz?
zP!!a+-NK%#v60a@-qGQVlyn@2MH@kO8JYW~vzHMJ-C)4NQhH@U))!X*A#BR>#VZn@
znsK@}t_4;ed;FjCx^EUpy}1%*5RCwEKD4pAnmMrl4$`mcx5ZZC9%r(Wo+S9hnHInT
z*mcW#mOvT3Jb5b7FSOADYL3NP%$D)xS7o(Wkm&;lurPcYj5zj@HGUzNRqB)e81%bn
zB8{XgS0v)ojj*z|uDSp&Tm@Szbp=z!@tX8jZ-TeiV`zR2uOW|TwBKtFTRLry45v#0
zH6}L{7m@g~>D$mT)FCqkTkop#jZv4ZMkrzLsFKtr<4B{K!djpto2YH0943v^)QwHo
zRd6h#ObUBo>bWghUtN-kIb;%DOPLBPds~H^v_RXhXN=0$OV
z*|DehN&x|928*%*aFKQgY&?s2jXs4yCoKusaxff6nSlVs>t*oMF`Gz_x6fa^{Py>~
z@4vnOZ+!1ZHdi-5J(f|1fga_Qd*TIdV}8vni%o0-VC5P{E&w)Fn
zg6EStb`+UIMON`ML&&U>SS!F?03;V=^p1T9hH**a9&B7aEA#gq6BkOHt>tA|zP=H%yui56NelO~GN-9k!-}k7tVPMZ}9B!uctpBKSj4
zumsiwpb^phRvpw5K%X2^s2yyAqi?!jC>5*cwn0bvBsw{%Wk>-S$S|$!nc@K?10^f*
zi3~~_fL_?J3=7v0MCiN8Cc5pdf_8O!aC&<@W`e!Pl;GHG=iX|
z7r!PY#M8v&s2qLZ0r~8uD>`v5L+uSNuEXhOmaz-uF!EuXcFU!zelH8pl&)T@tDAE5
z)DsWjOZ?#v{C|G#Cto@B+`Xq>K679?7E-GMGBzB!!Bk(3lIT%N3qJgJ1K9x8w(Pj|
z``o%_ygF{e(itwq(3r9G5N&;=b+Nc9jN-k#_wasA?YEXn>Mu*!x~DAzqVLUnOAxn&
zjTgX%B5qEdn0gQ<^h15R5xGp1-g6R(>tVa`7H-2C-(=iWIsmca?sLSzSzoi8X2xxKk5+Z&rw0uZ#l
zye-!*UzaQAuFB;L_y=jz<+GOn`m7-1Sdq(D7iBw}1&CUfJtvQeHmDCl{Sc>U{z-d%i>f@k~w@xJ5<|PtW1A#B%g
zAe)T&O-T~QDVe)?@tzA8F8Jo==1TwKmwxd>Bk^dHOcT|_eyTln(|QNvG)2obF4PbM
z9D+k0bTU0wY1+fdY?gYN_VnJ6_GREaNPLx(?t~1F5n(##L&eaOFsZ6EC4XE
z*#IsT8$v0JtO>y;h;q?F;G#_f`+!2o+8EgQz3skDQ{4Xt6Z5TeePDj1$m!q0Ok#Tr
z!LujVvlVeg=Vd&TluTk+>de?iV(N8!?ZsD6!VOD&7}*B}m$X!5ivh4O4+4lES<$}z
z^RoW*ixQofklFXW7aPBUYi=p+UPpP^!~2y0m~O2AC&`ttpE%{u))5ti1&F6q@Mr8V
zy0)?;7m@Lt-P(}Ntxb0?SGsAj+)W3N^Ow*4jn$Rwi8g1Gvh$KPt2d~~aypZi*|}Mn
znw>=57SWDKn(vZ{VG7B#m^WXMY^2f-Fp>1VcggU9gR=6%85u`gtVL~I6$vddPv7QdT~>SfSQA7ktLjzJkct&JtPyNhQ|bQJ-tJR4!tHn
zNG$d#)+EG0*a1Q+hEwu*$}z#{6Z}N_>`^B)|6r_@minp>VVUFM6fs&Ha0!*o+)D2N#EKM5;V_VsMTK98&X;aP?$>VM7sRdbCLv>5~XSr
z8J#zhG&%zW(jM+zlFnSH-Ca2CCTI8RMpCAQ*`wvt;GwBHzFUGW<=FIvd`&?{;)+q6
zNTrpfqbXO1b7AG=Bk#EQ-Vc4xvrfmTPnB8nc#R*dWmLM%(pZ`h9NwTd#PX=F#Orr!
zGo8ya^LibcG+X9=k`y6bOL}v9b{^$X0Ebgv>0M<}@N8Si()x%{ZGx}(a01LMF_`hv
z8>H3jfw4&7@F}SRmVc*>b>*0Pk*!+hKDT2V#0p4bFkP{9ovPT}D
zPcbxRBrLmm4T`w{M{4(PZOl-k!m)F1i{G`0&)v@M$hpmJ+5e7r%fYEBNdj0-Bv7(~
zWgEhNKn*Y3I26W^Z98O}*arh_&&IX*0epvnn-sukQ9yQJ&!jAV;d3%{=V2ND?(fC<
zV#!!4Dz$1+$qKTd5tOtPToMjw)@xdta(qa7coc`(sElMrWNLUu<|n5lg6CgEwNR|=
zjNk0{`<4OZn~~TTUVi0WZd^zrPSfLzx*pM4DT$1LKv~am*-LAyvJBKWUo6>NJX9TW
z(GZ39*d2XXZ9ItC_q<0YkbSJ2dQK+d9@#THAvr91+Tw8&l7aCeNN|j05F0Ln6f%eh
z+Nw4HBxS@k;Pf1UzX7~-6i1%-Xd8XvJ+FIDlynbkiEFDBrl%5z)`Ap
zFA#AS0lIE%ZaYP+F|wcyJcmlVqGMza-+P}NL11%&;hVNCxTzcQsn31tO=~MR9yomR
zE}1`Zrwjw+BF*OjkYX)bZ}pw!m1S2vIl1}3_k91?S9f+?8@asBe=RjChJOcTRj&1A
z-=pu9u@i@7^Xt#b6i%kGxpCBQhaZnr$v8YK&(hQ`zVl((u>olAfTnV
zf(wfx4F)2yZ=d99B~Y40(-q4U;B|02v32^K2^u{uVJ!8SP*9lJ7_uo=Evm5n#%?e)
zZ{JM6(oSPC4oR>L%vkDJ2s|15*sNRBJmAkGNY&M8o_Yo9K-fn^p%fNV3z-$iK`>;o
z6p7*9t3@DN0}^2brigS9Kx||-J`O>`{b_((}(s+8Z1@`o5|Mp`o3;j
z7Gg~Ki3T%Or(U3hAnYS0PklkJ>&h)&o#(w+U0n@czi@F2`
zs0iIb2Eo9|l8nL0MYNe2DS>qcVx7OMy=kaV(aviFyQnBIOcg9Knnoj(&1P?23({@)d^$v~Dd(;%h-Yj}
z-t#~GOi)fNDM96_pC)gj{{9GawlOPt|LBWq+}1(aJO?2ZoO;MvRy
zLbqh*CuIotX5*=+<^J#gZi&v`A%$ui%-uN3F_Fz;O$zvK)qc12!~gNu|M~pMljn2G
zt5&(yb~ZpvWO2A~v}i97mjXNBfie1rhK}t5sec)r`xkDpUE$cy&Q9cyKk~c3Ihu+E
z_RY*W1=Leb*0um+asZ^d;keB
z5;F*K72&6k&%YozFRhi8uod
zd3f5oz-zM=yH(hcz4zQBfr&|3-T+XB-y=K3U3c-~#n2nA6(%z#3pn`V^%B(RZO{9s&(Ze~@gkqM48z3$TSiV1Z5Gn1~jD
zOqvCc&P)N#FR72JL%Ns)t2INURe@J2bULx~bf?9jhb#*MV_|XeIKSJC8<)p&#bPEx
zeFTSiv8?0waT&0f-v5}*SN%7aXX!@9h5k<*gPD3C+3i1zbz>Sb>xley`m
zsaDKId@hgc`r5Xv1DiPd@cqC-+;aBJ%aTZ=gbI80-h{Am*|wm@(0~RwageU<{c2AV
z)UM!A-CS4zusR_@tn(dU9xX6pf^%nTep*7H)@#{KdFN03J?Y^v4x+R_ad5xP&5z*y
z16WVUHj1qezwf7i?gPo`@ls`b%W^_tr|pZ$Cg|TQc;=@b10w{mHZ_*`zHVXlmk|T}
zf0-ua|MfS}-otu-PJ^M-JxeA+0^5~EL*sq*?
z$9tY#y>KPU)0Pi^WH>CzZ~`(fJ0~Z$wP;vfCa_oCpu>#@SvRay`})d
zx8Vg)`(ftq_S9IJpIyhv#sCq*sju^K2eW+nXWF%^ZR{?+X4cgmfOIXqS2C8;X>!{D
zppoz6gaK}WO+bp9j0!6>^?}66+rbIJ?p8H}?^2Q2P`rSp0J(mWOhIH82?UsJfM7IO
zq8A2rB*aoY!H8;doPJB@_wNOe+e0SRHxuY-0?jN$yKMVfwv1(lvH4L7>R3+D=qP)N
zTdOCyCd$`$=JB1QVNkd}&5(=-D%llg3ueQK3YVCLWfBR+SlFq|_h&}g?;1mD;u`FK
zVTM5sk2e&PX`GrZq}IG^Hr|uW7ia2Hc2CU9i;Y!7#zh5=)S
z-{pp9aI{de^l-9zP=X|JpBQvKc$n>KNx^D2pC_pF7Vj4}vIn?9k8@x^XGW*7Me%5Q&qLiQiKQ?{?KNoi|cyT{3z^>L5r)^7Q!
z==PdED`s58cu=m8#!hn%(4|EzE}u;AKPYWvAWFgsKUty(rUd*Hy*qd)PFf2xUl-Yw@WnlfeRF+4gV5oBYt$BsHa
zeC0-~^24qC=0D+g_*OyW&jpZOZ&UvN&-}@sJn+TOfBI+kpgiEHLcrZ}_gmkBFQ`bL
zMDcLyYb$c-{s%wvy+8BMev-daZj>{G2f{-DKv836x9YMAbp4KZy+v%`6l>4Cf^Mcu&uN@>g2ZM}5>10}jH_FF1)GB94jBRB7VL_(yN>>M
zFcDPolq(UJnNg}wH&kchL%q%bu2M|=H#=r+Y{Zehvx-TT@H;&92u7>R8TAbWx2d_H
zFDR~uH8!s$6pVsm&mCD?TMOJ+zLugqJw%@kZd5WT#86nyS;ixTrAHP_2m4)AP{?~o
zp&bQc?8MgKHwYpM!}QdNEHjc+JgbGZVr$c(u}|Q&F{2=O9|V(=18czGHoboe;9_50
z%MvsJ!hPb%O2%IHB@qYXb+#(VZc%!$$xh=k*)9B?(#p22{XH&fExMc*hr=s?Y$QZ{
z2SJ7|@|Iz&d>Yk}?baJ!jg~k0>Xh?GH-KT)T>%-}J16^&fTq288P5-ZG4LybGF0C5
zXa<12a?v*nls0c>(
zPFbam4adQ`YgdXt+pboR48F?E1rQk+BcD6>+|-AE^H)Efh(*2Wc-p4xHVtj9cu?l{
z?#BW_y@ZA0nVea9_uu`W|G{p?(ks=6d~Qd@QJ$V(&2pzs9F*~~VLAWgDIJOw0HXkW
zND5my$s@uBVsRM=ZJkzRJ~Eu5r94y;b--WaRqlgm1|P%9j+f;WSFz2JQiK
zpdn7N2mV85hyJJ(nb`pC3FfvyYnJjmM%2j0K4d3#GF+sU`Ez7ROG(M14pfPr`w
zM{=ublmU^tB0fXX$zW!D^?d%OF_0$8{0hp6P%(B=ftBjo
zEifptL`H_j0D$_VD8IT|=0)Qf-D`A98wU=v_|kI{$s{Bc9g>mpJJgMh3?(tL36L6>
zUV2foz#l*OcfJSg8b`)>7?!HH@R@>_ba}x4|6~JkMraJkidt~$4
zl9Z8Mgb``gWt=Vf4U{g)F%?%OLEmoSXPA0NQJ0d!r6`MOZ?DVwv6eaQK|gkQ`jLL*
zg2!TK36aO<(X@GDM0(z^6kF_dXawA~+H1-{ND;aQ9;mx+>^=NbMcKp!|)^&>81ISYH3urV(XMVPDLXX=u=NuWDIV5-;I?U_o3w0IkwEWRADV9E96dQJSuSF
z996}{M+TGu9eT3jeNUc
ztIzf*ttu5Of2`
z%=q~pfZDEs*^zc#lVPLA1ZNT0EzoDfH(kQmE|*e*Y;qg{#z)(M9@xb!DPax39u>6}
zJC5RLQ5-0~bQ}TPR$GCwp;4Iv-OKqmL)hROz(IUSs;3XmNpg0NPPU^;o4k9RzPMN#
zkA3vhAUpQT{M+xBOUpP=Q1(Rd`HfmVxqDqB)6>`9@ppdcSG@qDTj7x9=D*n~&$5ku
zHI=UArnO~$b#Hs=-0#qNkb&pVmNMT6Am3~x^5Nh6jbF`QyF5EJHcGtQ3j4SqElDCu
zM{$A@wOvChx##eKPdxDU_kQM^-=kQ_rfGniE7s+Dy($OpJ*gd+OBWaPi_jmFsdcB?
zmllxUAgIGJ)U#v+3R_ze1Q=$qrUhEg7We=addn+5KcN`Dcr!^xIFe7t%mqI#`Vkv++%xr8T*{ns-vkksoem#
zCVr0X=sh-iVK+=32F3v@eHBcLPhIbgfl*(*Mey@T_ow!tjKQ_!0jyGSs(>b`OEI>C
zRCLC$DT((q+bspJ{fLxn8(TlHy|!{!&^u6G_WGKMedF2F#D^sXt}Q`nIi=)Xdyw}!
znt7<73hx8Ulb$J`%J^O*smx%^XG7ttMbz6mr+KEHWb!?HTAG3+z4i2
zlu@NZQTtdzQzLS92c=~YvcybgB%$DjvHk+WL{c))k8amM30}L^f
z8I$$J>#`08^v&P>9a2ITmdjSvaZcwKebejE{crm}?mT(&Sz>DqkRsWw9jwiY8g$uI
z`LX*w|0f^&(ht1w#N*$yXU`s9)J9C6sxT$!JBPtu;IB$*|&dIcGkBw<@cvz>apO_E*hlt
zsQ(+-B(x#iTv^f9e|IdRE$=>-Ek26LLb45%xEpk-fl9B{GfGC%ySTxWv=foPfvbhH5t+lUCW$mdN*xN*>&L)Td+*l
z!i`F0q{p^(_DvrTme~kT4hFw&kCJk~!8%Z;F;GY!K&CC)(oT?7PkT;dYu9yQvxIU0
z2vWt#u@9-ecZlC^%ks)~?54Q#M>>*$%3OB8BcO*ljuN08XYufqc07h1q4x)4A@Kut
zGgEWGgF;yyx8>VhUiyy0R(4p0W6TQwf9(ASv|VX-9tQ3c?m0K7mjm#S3qa-66*^Tn
zJCfZ^HreD@!4j>p*Yaqs8EI@y@RFB?(y~YP1dpZVk!9JIZONo*lA_3NcBsy&x~ePZ
z0#GPqJiPpFPA7SP-+vyuNLE#&3V2YrbpKvxpn&)8yXV~V?|<)afBX9)L)SNwjWMsY
zIW%Qf0Yo(YM;J%}SY>!g!k8VXrauZ^=BBeoCRBS
zS#hJunMo~=OVUEy6*{>Z5YS#F2S;%^8?Efb=&*uQgA4|N6rF06zc!H_i>JR0#Wa1k
zM>xSX5J6}uLO|Ie*nvp`4G^R5!T~(pCYe#(^RM;!iNd&(*8>q+sK9HU{K5C-10VX3
zeB}Kfl+Cp*Vml+nTlVfhLYjiF9l50=2j#K?x(a+scA_X<%oOQ;>}j_8z7ISsTg&Uj
zND7L36=vpiPf)2whKi>+bt6ge!$0|!v{%>V_`~nh3@b081}p6ZUS(xt&(F`#_wIY-
z=m`Ph8rYQherVL8YY^d-iyhX-L)4p_4So$YCragVtL3^QxsIjX
zhMvB5XeEXihLg3g!4Papas}|aZ5}Z@wYmfrz)S^cKK>RbD!@lQ#rhEF(M?e(<#}Ra
zey7vxlb%dt?%0UsK?q!?y}wk
zam$mNe_K
zai5Jhu$3}Ut*i0|Ep%=igH7R=g&>eJHwm=j56FZdmZTYGLr;EmAtto+LIwm*k&{|y
zMBKzei~#p=eQlHaCCEM^#nBKjF>{6c3=I}sCkF1~V8pHxxE$b}^z@mCC_QC9CwSO+
zF!BcXK{F*^F^@#CJ+x4*va!g3v;cBIjlUuAH;nuv{#iTH1U@rPI|$=z#?>@m(Tb`k
z`wlM1!yo*BeBv{okp1@@6K$c&HW=O7b+f^}(02T#GiPMwtZrP*4u=pGug_^P)cd7a
z$=ok|SUlZ7`|du@eQ@;l+vFEM^+~M)ZjB_(3f=_3(+oRB
z79V0dt-lHXARh$(L)S(h&H!8nOK1{~5&|N~?7p-#py+7`qb*4P4HMEtc?vqZ!3VLK
zjvaxsKoUwop3F#3SGcC(!ErUM&*(o5FpRbTAdGBawyc}hB@GsJtqmLm*onUGl6GT;
z(B4p#AA?q`E~o$>Frz?=Hk*q6Sd?e5<-+S{EsWD+Gli*<7E>1TwzNHp6H+%dN)7s~
zfYy!{E&xyf(6Ql&0ApbWqyOI0g60dqQwc`bJ6tty%j-9J&@4Li@7l0XTA3V)YrW7!mT-wX@H5?}5D{8$LwSB80FF*4f
zJ2#lKK}LfI6m(o5=JSf;-*)#Ma_rbGa`@YB()TE_
z>7n9Ml`Nv{U!b@Tey$7irf^92dt@n?OBsRG1xY^5Fe-Z&q^P*vmCM_PBN*_Sw9@&hWVm&17Ai(Q`kL$=`GIs!)dxost5K4B?6&ZABM22w!yPRj|
z##S6jKWhe#C>qenDFOG0b)A@2yq6)$J+emEjIH_kTpK|M?=wm>v{*lbKx@nOmi7ye
z-Xcdn_Gy`0+Aj}$=mYYx&wo}v{TKhD+^&B=tX8F4u8F6a+Q}!L(}QND9m)c|h&uY*
zKpr!v*_)fI$+~9gOGl5(2R{CB*{7Jx=9P=Gpy{%^?5FEG9x5*C
zw89u1fHH6#Y)acP9SNRz^o>ayqbaQ&Gq8Bz*cZzDprh#U!NB7C#Gd)YFbtmQ)+iH
z_3D`!851XD2>%tuL1yRYpaH>|nUS_U;h|z{u!;G#iIgEu4N5qM*L3qOYi7qF#Ey(b
zYylZaz}LkIKO&npn@JhDc9P-c`U7(zK-6
zIZVhMy|H!e+JFc*%H%nH``Xjb@?e?QtRAA+&_oHkfs|_Hjq0?&^5*xpV{fUyk3RgD
z{`a4}?Zclw-8g^N4jaq5p9b-Tl`Xll-k?Trt3R>^ol#P*ds1k>ar@S@KmNyP>nd>T
zHx4h%3?{4jY@t}O@WH#<7Pa-{7+|PL)8*3Cf+t3F}vjqB7WQ05-e&0c~Agqm-YUD~Xe;V&NfSn+p!-gE^V!56VKs|nUFP!}=}^JMhu_2dC~YHNhX@Kkkrz9HASyg0t1srQ!a
z+Eq^91_4h}0JxEpVjd<}FcYa9`LM2bAHa10UVzqhpdYB-T=G>QqlY<{VFu+)iPND>
z-%)1hW^!4+8Eb-2GXXp}(lb%^wO
z{E!4P59N{G$3nG0Y>zqtda8%5fM1L3gT`6xQ46yuOi&L8$u&=S&)<9RtF^B$t|g;z
z9z%qqK00m?j?%pXLgBef^4yodBKA~C4j#Xab6jZ8D}DeM49P9(XTCBkM>J5J^#a*g
zTal?!omwZM9!8MZv^-1dnt28nugI!);2N#E3EjCa0L+1vWF@9#~f
zQmf5o^MQrKhyKYkU;Kk#TR(TsE>>&Fa^y;KKS3v9X`A+@_&$b
z3LaR+QfUi}O$;(2U5ubKt`}Ow2cEXh0-juYT0qr{^==>_szFoKBYRUblZwyu3@0*9
z1w?MlHsGcpJ8~50YU#shL!rEs=Ex8B^96>O0ie5fT
z!KQq+Xb5{~BVWFv!L>`UG`5Xhr)HjJEJ1|tg{2!<(w=wC0VJ%|w&(U8IiVQKyyUfY
z+XJ@XNkvPrZm772Vuclbf9Fr0mG;cER24V{PQZb~xM(OS$3(cpPu_9(PD$`a3fAFKn!w|Jd_?
z_y_;Z$sc_Ez-WCfDi|-}mOqPaQt|Afwh#3miMkFXn7ee_;lM+8M+#JOCX9U}KmNK_U)L
zEzrk^KqXGhP$tZm^aM-lT8?-HMa1>P^T58%k$H+#ogD=y(E9EQ+fpc1pqb&o|HL*T
z$N0c|nxX8!?bxX!4?XlfUo&Kf#nPU?rCCRLwyxcqK0(Mp
zHyp|==yyWdi)Dvyb|}q59So%!gJr7u!3_&|NuQurXTzMo|}DO4Vd67%<@
z``dJ)o6-{%)a6i#Op}e8CwpX39Clv3}|4q*=XyhG`te@?%)>+XEhp*!FIvcAsCZ}sBu#;qy><HifeST!C@EgMGm5AAH{*)$8@9T<222F3I}&cw`T_(K3-C86n$`Bh$X*;2ix&
zY@X3J{a}q3?9K@WpOdm}l-dzeTAIr0F)AhPF2OV!ornlWA1LoIKngTF!N$=CK!3W{
zq#d53n8C?lxGx5P>QZWe&;&x3-iMK%*g0(x&no!*>eDaE`L%61z7P5^G35m!JWY`K
z(~oCSagdj;oY3bKoOKPp8SqdB?9|XALraDh48gdeOdFQxFuEyemtzg{V_f+BfIH(@`qc%LCo9P8g{D~RrfjviEj
zp0W}6GtrPhFYQc85JU;*@|o0@{K&JigKK$qcJ|Hm(c8Xx_QfYLo#l47d$Rwo!_r*S
z40PX7Sy#-X*FPya%`!IEwwd8=Z?3ac9Sybo((-MfpHHWxnRhRyI($bvBzhO5uI25C
zldsAvFTW`33V_Zn?k6Fw1OC=Osrz`R;gH4z`2YUT`sd$oY^*%o
zxqRVM*j&{;haW9YO#BeI2{Djs=~BEKt2@VY;tXZzoYdODCgI7$aFRyNjf-pYsMdUN
z%{p-OPAWY`Y}X0fY*37Xv>e25DY6XYUT+4Fbv%ebiyv3cSh`?$r_q
zAfN)kUOu_y&bz<)<_}Tc<9g(gN0Kl9|NqMXxC=;DPTIZ1am>@nNG&s6w^GvBj{T!p
zh7&>Pz!=FAi@-RMXURhq{{Y1$Mj0buw;M8#QM*+)5J1t*8D$6L?
zh^gl!CAWpN`ban`50JO6Wsjx72DnZUfT(_tn=fm+-_bU>0{MDBW6f3!=Hn0$XJ!eq
zAUcQCf6Zvc9bA(v+0JuUo}FFxoJ>QH)=8K_tzF)f<9FUJlhc#(qsO0=7hn64+;+#k
z8i2E8*n;P?tl2d%M6^)>E<095!BB^GCIOhXwg%bJJ_U4p^8C}^WkxzPGiRp0wZt`y
zUW;troPyO}zS6nYeeh=j2{M=O=q>%uo4+~r(T#6_aJjJgpiz6;f+xw+T(@7e!!dNZy|(ok2NEtk7?Dx71bo+pWzHl|tWDdnVoD40bd
z8`S`aIDNCk1p>Ai2MTuf^}&XSEo>RHsR1;;9~cfSFEX4sc8sVnHiT{fDBYXcAY-2q
z+vdc_NofH<1lb8hJow}2Lo=&o3_#`{x4K((=%KEM1_oyQu-0{e(s3&n9j;TzaGFRnZuR|7-Yzbq4p#D}K2n0D#llH0H
zyP^gtjNK|t*RCX5uGJXSyiQyN@
z?>ZZQb8?Zq#lNwQD>rxzf?y60u@5|hPTJ-~#V)|9+H5qXq7V1POP7<@Ui*u
z4mAC~aOR|Ju3zG?7g*?t9dZ@`8luBdPwV)mtZ7>rOglJ`WJ)ek_f~sAJoJY(2OUcY>%eRYs^C2hIv~*v(~V=tX{#6;MzIk1wuZ!A
zT+YZ?g^JWP!|AVU3x1=??uy=MDu)GVm+OY}G{v3NQeumPhz?5!1VtEDLRxM;jF&Hs2%0{xuMR!HPfy)pstQdOK?Lvt%h!%1`Jt9i{9Q|SI`c@
zqNrddreS>zG^TTa(nss=Jr(dUCw!P=W-y3AL$Wcov!nrdK=pEmYT}V*cF>2w!|b99
z1;VQSdl&o{kg9-7Xut)hz=FnwKKzp!KzzO57tbvlK_)Y~PgO2-EFuladk*g-X$>7P
zWE%id@i{^NglcMdAQQQoZP{sUhHFO4ADSjEY$aGWSVjjHug&p(ho?6PXlT7|X!$v%
zC-Ahk-JxAe+=7{ENcA&fA|TMgM|b%OI}OM@`20YB5Ss)-J7leo7+i}AqHk*e1dj#c
zILO+deh;#ug98+}QDm|Qba3eB6PeBpr5(|A!4>IsV+tIW8lyo#9tyHN5JGr>LB-6b
zyk^jD#qT<+t;{Z+F=V|qGtEI)GfFL)N;7rYw=mCui0oS1NDLU0^`d6dbvb(PLvrVR
z_cLfRFza>H>XWkf&=Hx{z~i_@EnT%+=^2}hC~^2c!RbM1Y-e)>kdrtl$}X%M9zeRC
zP8FvOL}{TMh7=pp`#8bS+9T&fqdkH+9*%hz3M
zJ(zWV7HaT$b~nsbSi0f#0nzk0mn*JT=Js8ar^U6dLb$8$H8i^6p!T5WmCoyPuIGJ!1
zL)sAlGwvfaGp$UP*#bmrAaj5RADcF-B}_eAkd@cZX-#Z2Nmz}b#j2Yk)=tpe!Ze9e
zO-1yfRf0AvO|(gLJWCEGUToCcEE3~lnl0f#z#t=V2Y|$Z253(+V@?>SL_LHFJi{n?zI!0m_`KdKTPeBQE9gmoi*FXK^H^(+J85u+1I*mXaE7Q
zG8lHNkf{S`$l)anZDlM{c~QFq1Awv=HWtK@(Yl2N0Mat>9gw1d%fPe|uY;2o8w3jF
znqhzlwY2XLQc1Q0X?Sgm(MDAOYHD`=^#1+(uip^&O-nHl&@hP~VDVuT>nZ}0q<|_m
zzn#|ml4^s{ABJHx=B!4Lrs^O+jrjh}u-(q4h*McWc#GLjO8i@yqF|O+M24pdo
zN);JsM+)AvC>QLJ5o3my1@1dIGBZU|Nm<)`wE}WN%WoJ$gZQadop8)x+;vYB=
zaGGK`Ee;Gx3-24*M_%!uvu90-3O!fQ$2lE~E)aqvDCYXToxy+vJka6s9AwE#cKD1X
zR>Xjd^c{Q=4A>cQYh)n^E*?KUh#*lgNDngTuEgm2!BomJ!3n_z+!(m-*(ugydxicg
zsI>2L?Jw89UY+0b3TI7#>vZZty
za|9pM5ix>;$B#d*8~0s*!0)t5_0l<{)#O3gDe_Ow3C$ivQi9b_Fp-_#O`6Qg0qsLA
zF|^u}s-~PE%yqzfz(5yN%|fF|in0ya8bCBH{)|=!?i=a|ec1hs$2KUKZE$`Ao1qC_
zh@RF_Z@^%Nx}KdPJ?V>+HE~)Sa{9uu9)lGI7biAl2taLkp`aVEy1B_rG1BfAnVjii
z1u&Hg>d8(gW(QYGWQ5O@t!$IoAV9{EDSbHP1}|Pe!&w=Cr}GnNF>0rQ!)^xr#peda
z{hg^}@H{SFxWp0;SsLeCP&yDFN(d4IP(~1fnp;Z`jg(bS)-E!ljQ-55zW=TUSMWqY
zRznZ~B_L)A6Ee7<)D9DLEAnCoCU`Rwgow3c#tIMt$(K&cE!)qn&&eLJ}P}}#Q7qda8GmOMw-&us@q6R(e4{DicmI6H*
zL(CIqFL?!uacEoAs1^yeM@2m+Fc(G3NdH-w~~2Gx2w
zPkTdh#xfqsVLd98TWPB_Ax)X4-00fGLRxvC_W=5r5ikm9ZRm9u3qBCvjebOjUu%*PeTxvVt^C+7ZjKjj+$e!W13p5U>--2*jogKo&F5_k{rP6KNm{
zJTd^_^{7yvn9dDD3?AaNjNxX^!1p&IK)ZKlf+b5dG$mNb%pzv{9{1MQEaD^thxOi+
zpj?;Bnl|u`=4xaU91I6taSKKcVRLJPfd^3p&h;Jrx146ISxhHuS0h6nPL@G{SO%^w
zF+tEmZG_;6^9+Fn_7NG6!)nM>P%@%S1hY06h5U@&T)v@)!@F~rN|%!>ozJ8P&k(@>
zR-==2!hcwvJocAwyX&Dx(P@O60SJ;{A;YY!*KKOhtufo`Zf_f(9JKQ_18a0zJUk1f
z3B^om`s|H(Pq!LOdqJBD3DU2l}E$wzp
z=>ZTluMY(#I{CmwDK!a1ER2L>+TDQ}!9+wNo6Q%JKWYu=#!DGh~JDZ7Z>OCav
z^+RG0isutkGiUtr)D!RcCf`F0o~+fHxom!flWV6;F?J2M0Y6ia(Rkq|DX7Z6FW)!u
zAG9}hD?)7^zA9}@NjfflVeyp+vM~v1HYwdmO<@HA)9Fx8%Dir_{`QuU5P&_x$dot*
zP0>j*L&p!95jW6*R-b~0I#GKAL-y;~TXfx)|_X?jIZ=zP)m!J^#Cp-ZFp
z!A*k{B0`*)%+5)l0i*J7T_wG7UI+&m%SoFVj-=j0_yxiP1}QBsb4?_&w_3Skc4Gwo
zN{B8I$a90jcCWPuEzz0%hyM|Tx)O**>3c&E?P;k(zvpa477iRzoT_O=tSy)SHt39G
zdvl9r+P{NtSm=-$IEELAEEzffqHT6_oGP0U8Jelo)EFsP*VjgAR4w89jl>Q3Cp
z&v3lHKQb7RWvV@s#TY9J0)Zn;@;Vt~K+S=%45bVWfh)uDcXST&ir8D)_iqqf&XZGP
zM)*;%yQI746^INpI5bu^4WSIU8uo|2CO)H5t)iz`PA;sh(7zTu3tS>?7@`yu1&E7{
zpO$I(yCB{fu(No5;D5l5GGy!8VOiQrjl=g$)U+1&*>RH{9?edfgzk@Krfuy?z%3p@
z(o3@v3Na%IMH#0V29(+`h&KTVKm|`Rs0dj@JXgRD>>YfAQ?x>MEqE^ohz=O5shy^k
zg59Z{tuSbgD22zrKnBRq(l#KlpUZRO4wLs@9{bhF*X&F#w$cDwEEMy@;ov_`l8d=|
zVd_=Iga)H-gELK-VuyB2Z__-^b9?ubh9Bu6ThMGI(2iV3OBCp#2KxE$-M5GDd!U(Q
zzk}hqP!GN$o$f%{SAe`HyRdF(08wBp(T6+OVPJy$0KLg}qpR6PWV}p4*r7&5!i
zww_IZs0V>vkcK>uO66$PMa*Od(rz`STB`IWrf2?eb7P|gGp8hdzym0-_eU}{HS@ac
z!rJKdHp->a^QiajH))`f=V8lL=eiy0v!PWR7kO?zW>{vt9k|Z`8m1``3%CJo9K~!{
z;6=Em2wfFq0c3t!>}nv@$7CsLTFj`Ryzt=fsvW4_b_X<0wmTt6LMgv8kQKmb;J_Xkk5z;
zu}ftJ3Agl6$ZB~pRV`g*=;FFfsbl01ctYyuiGVPGmkUZ;4Zz5701%Q$r>_iO-w-oa
zu9=2z=}8OPHslfz2vG_XY()S^+Y_A|*k`&~1{Po-)ce5AW*3Q*e*7NWPC@c?^dP3n
znZrP6>?>^IFABK6XMw70u690~FLj_uWV1zGg5lH0TU+7(y*yoUGJbh$L}xQ
z`_fi#V?#RY7o}F4G$Kfy1{uHzglz;+{rZ*Vi&EASMgx)_*pS4qwTrbSl}bTo=cWj@
zDscRsGpBc2H#C6k+qVy&HMq|lqJy)#m%5u#W&+?<)~Bo-sL0gpOX=NRP_XrZL3?(n
zr!!fHXyAv&3bEU2!}w;?$z*$-R=b4s-%TmqI9)v5MAf;uv$6~8zWeSAO4Z57;uHfh
zTA=0>wv2`$Hw_*NJ8j|asF-2nN5Ft0141I}2*@)?C?3SBU`IRDHkuiD@IeUkGDd$C
z4{^9dl}Gy$90z?+nwr%Cn<$jauu!BNB;@#@D-voJ0{j8OKv_ljbDD!MpS@^wHf%F{
zVl(Jrn$x1k4BEdu!Od`u;uaD0OLl0ecvt|_#i`;NN*quvdXz52FGHMjEu%?_le?=K
zBqp&diu+J|)v?$T#{VdWY?~m8GU(FsDyNLml8@5hn_(s@EV&>@09AGb#7N8IQ5>)&
zM2Q8z7iyGPCdlKxdTH4M;Mj)QJFGh0ln9qj*ILkO#b;yFQHHn(_$a_eaPQCww15p+
zCg9}C<+i-XWmPlXe4*U3setbYgnQbJO|W18nq_DIp6h0-rYjXnx6zjEt&VJNugUht
zicHMTX(m~gPIHr%9(IJ0rVTA&Ru%J#q@)=hRa~`{FKISesleR?IdhVKn4F?@QaQT9^vqBguZR)8K
zF(qT4UQeECZSu9=u=iT4)houdsBqZ-w=D*y;lje=GjfC1PVc-@ub)hkt8u|7U|Bmt
zy_RXWrrj5l`WoE~JDuQVd)6^qaD=v~V;HSudL}#FjflY#Q>G5x-k`bau!8`PTi_%p
zK|q_soQkD&FnJgnboFedurvd5WX!TTnCIn~(bW`eT|a+`F7~#cF();^xR~jpOjIhI
zy%>aHnl&Y))W<2d0YH`4Et0;|gp<42RLCd;j`5pKPr?^LRa-ZFS0?ItDQJf$h|+-<
z+e+ta(u7E_rKxS^_0>(bPdTdtK9KJ-cn(umEXp&yMnzBBEyaU8$^r(40EfUpPF_sw
z27;mlx-Fxsj@G-q(}*x;-#=+RM^}R;|3AfX5bT(Nq>>DYQRjQlrNH#`{;kT?>{G&W
zPdiDyrgXc&GU7!i6r=a#l7=dLTB_q_VpQ@q_}n*wza=7AjZ*d
zHwnDL{5w`~9S(%>1*T69N1Q_jblbl104mmX29Q7hp7f-}nMNA{OhYoIW|1FLf0G}q
zn4UT~A7O-t3Bz-JI=y2aBCij4shFcq2sjT>5)d4kTiEk@JczoZ;V92+03rM-DO4tK=u5&OH_0xAu8=YF}sXY&IqkLy6htP
z8dUMKp?*gCJ-9CvLJIjr7BKgNPF7+(U1IilQ+dKPfXNPn80u$fkW5lcXGgk#i{w2q
z?;e>*#_P*_T%Z?J=Vt#9Vo)HeHCmu7^rU;`l44SQDby#RtY?GNHZxb%gEo}18;b`u
zeSKpHoZUfNv!EO!Z(p;q{ZK4J3mD=_djEg`!NL=|vGgy8!dsAfMeoA8v0a!;muzh>
zx~BAqO?#HamXKW-@IV0R0FbKcLnW~hgh}X7*5{0Zlb$}c8jOdt`YUggrXbU{XaCFH
zR_l&Yuan1fOC~6((vi&1EWA?L`{xyxZq%wz&9)O-^QM`gC4VXbv(qVD)1fi5G2~=O
zlKw9RA0d*Q7(9fB0?Gg}fC6qC0u($%c1}HW8Ya9>fUhAKroIu1NsMO;MV@iWx)cYq
zNsGqMNAN~>1Aub|s_*)cojrA$z$(fJmN1E7ca$coESW&H2jjAvnml>7nG6oih^+w~
zIbdgkAA%(Ch%UGp0QpG2H^YVf04il!nbZ<15c9n|<%J!Y&5aTTUNV<1UDi@3L-HC*
zI|nRP0LtJ^#D-!|ty32|7(EiNf*?%G978rEo|Z8a%s60>b#SJ|HQ5KT7t4GiJjigc
zMXBEpGCJG7>edI!fdRwal!xSyF7No+j=YC;HItp5eSO&4jxA`yYJk=rniPktaN(BP
z{1QKFNHXL>o!4^Y^6CmRAB%&0Hb3jG1|BH6m9nnxlLB$YI5c1!@HJpgP$O@wY)BV#
zPzIygl?ZaP9)BUY_kKIP~0+t|1%
z$RR8_Fze&UPpln?hnQBNIkBy@E{|EBupEnxzb@O;7&OCkEUA$*HYb9KmC`snlL8;#68yY{zc4)J@
zp8JzBGu2)I{{tffc51C@r8b%71>LLNAO=VtakiOwM#~%nb(E&Sd(OsIzVL>;hqaT*
zW=hpTu-%N~?RA;V#InC&%Tz(&RVvea5Ak3D!6pd$bSlVjL_#y|oWmdpbMk?fF39k~
zNZndnr(56?Uv@
zkoD7AZ@8&_?p80}d*t9_cn`b5_s81k_qPk>$~sPC(!7~X7}-K{A7p34n@*u+@KA1G
zR{QC{kr`r{a)z%FneqH6ZGB2woAZ#w_qayU91l8Pl%`saVMx-+O}8ushRqM57*Sfz
zv*k-b7S3k+P{G-6xW1{aQpEvF8Y~!`Fy=ZUSeP#r*e*qm703=nUo((6?E+aTec!UK
z>Z1}E1~7`vhe=Y~2xH@*0G={2SvB`7HJ{=pj=_6FhsfeE-pYk#N?N+E@srsJ#vmDT
z&<;MlX&Hk62lI7s9*_a~3d(~VhW|#_h*E$t**BCVWJgR(A!HFzVp`kgb1)d1u!IRy
zKbf?ri{OaT8#6GO4BOFo4in$M68Y{^aviHaH@%t96+8XaOA;zTYU#7>js`F_YSb6@
z{By_4_u{Z;v7C)?utM;;FX2{~oEo|nQar^@C$9%o>9-la0T%?EwZYe*q%o(H9!`Pv
zuGzEKvTkSqQ2@+Jh66vsMPOPIzcfw52s6cqiR34AOA~e%OkW8@c!JCpv3CKNz0hnlrUtiGVK@gEezlprX7u#X(|?zY%5hfgVre>_+n$ImCnW>
z)yC;;W;+~~9pv-c<{q=lgN;GE1cyNc22>6t@;0`qhL&*+s7O3hpUxt@kAcY~LV%PY
zuw#Hpqp)V~MUq}S3R0Z*5YDz)vV`2I)MrV|@L#o(|H;%4_pi&W#pZj~R-|T8&8>!U
z>DvL|)B6aH5S|OX4*;ERYS4wU7TO;8S_B+y{6Mo2bYSxl@k_M*pC>4`%Xe>ez@Nmdr{s}MOn7OmQmNzgg
z2d!bCf5te0ZXj_+y`TLIWLl4+LA&8W6$=uCkYj^Vc%U_FU;oVMMx0iRt`ScMoK~ot
z;r7NT4^%z2I5CMfS{RQ=Q=gexynqkA-)ZH6I3sNajlHG)?kJb-ZG_=_2Dh$deeZkU
zi>tL-FSQ@xqAmzB3D-`g3xCqaWvi07MPxQ;nivs7z<4=l(qo>en6gaboeqZCN61b9
zTnZj|p#SU?nC=G37L7
zm`6G`9q~!w-9NE@v2tZ#ZV~AsT@4z%1$_f~~iFi+Jv{+E4VI0Dc#$1C90AS|WeoWmC
zP~aJ$&{hYYqM3`8W){?@VJ2m4S`A??4Jc`_N83H-*g&3HF#-+#UjJhCdgrVl1(+>W
zm%&>ZVknOIlAxn7&<4V*#ZqM%23>Ig=|>Drj%Zz)~={Q68g791jDe&V7dcM1Ox~_=kZkJe2o6%?4JG4;%6u*XlJq>>EL(>dKz6P7WSUh
zdiaJ;;Qrb5Tfg;NadEQVLE4Pea!0xlC5)3&q>1vUv-?Qld2)&YMmY_Wc03?(V>>wY
zjDChiz)p-G3SJw^;cW35(PGCn{2KEU^y+MseD;Bz-5##_;u_FXwm_p$M
z0_FrUXGE?tq!8D(wA+Fp6LN^mz)2R{=ur3y-Xw@LLVFkiKQ>HM{x3Fws6?i_1Rf5R
z<*@lE;_J}srIgLFq@hSL?I0jx91+N*W{Cdx)@D<3>3t;2SJRUmiBiUD6R#Der4#@}
zU^h@68)$$+3qKhd-UO}_Q`?qiGOz|k0HC(H22MAV4nMN1B`iI8!s8aOD`;4&VhXRPd6J~F
zFFRR8#FQ*8&)5Nq%z&i6ZbdVi9aT20R91-r3mqTMdNi8^)Z>(7gUkcZ36>fw~#k$_Re&io?iz24JZe@EF&hqiAePoNxN
z*TWFYz_CDv2h0Uj{0a11MB&Ed{lu>m@WZ$9#>CV2MK@r#NCc&rTKWO)>#^4q|=I_40{=4Tx_Kn048tytq!do{2jSD06==G1P~vt
zRyQa2?RyPBqf{uxwn4!-mFeltE6?mXFE?RTrzTDkj01rxEmd|lhhce}O<*NI!9!?k
zkdmfYTc_O%(#X@P)g4=iBxSfVyWzmw4zOxSXYBUI#xw~5l$xugny2!BpoY`t(Fpp0
z5{@=zoN_9#p>oib&=M0qA1IG3w$e=rmCqUC7UTgSH-LE@?etiS$B(Z~Oi%U0-iYAN
z&TNdN#4N+^kC}y_1wGV*0a?UEvA`1bDklbPRa_&2qMwsh?I1+m{#E6623I=;rBhIu
z+!+LD!h|t1IS}5UC4!bSbzGsukFrh=D`c)X%GtJ6U^c<#K{97#;*CWsoP
zj9lBu5FpV*06~Bz?kcI2gYT`$4OsEao^QqZ5(hz7R#&X^msb=VnfovBZ{@j}SHgZs
z&>7EvZ)*caFq(Drq^yTSuQTMcfWY1D4y2FkPfgs>>W0lLc|5&7Te=ox5+Fw8I5)oI
zDmOTQEDdt8w$);^|7boG8L=3ixG+;feVn%N(5DBmicN%CkStX&IN>&?>1C*=44#b6
z_O{H=Ek3hn&mMkwQ*(3Y+nbvN;zr$;)Fvhxd-fgpUAYOXn6Eys4|5QP#y$cMqKO}7
z{)2l%Qd>kZYFxx7;yA6lQ=*wjs`f1@cx*m~kQ>aL?wl%dowVa&Sgcl>{Qz8}RU~z0
z4I?(>Sb&HT9d^uI2dMsF>ZThVV+7F35IEg!G#EgPTD*~5pfjE=#G^nw!WetM(~EC?
z_@Vz~W`6!#D5=uW!IA?dSqeKc@j>=A(DyOWpIyppDdD+>t}fP9JO~@ob&Xi_`uYZg
z-VXKOOvs8{rOp%kF@Ypb?=$p5!oYx~15DgHMnMhF7O(=$)DTxlu^5z1g8@o0J-NEKK;A5fBIMder0lRx7`op
z-qgZBE8p?{KgPe6ij{^v2$Sy0x`+k)7y8j#^gC%{8udg;J8e7N0V
zbAkZ1ZFo4ydO4ZROfFU8wSQhS}mk>?l9&AEfu07&!~4t
zLN*@$jWYZCIyS(;#1N`BmoLg)4}I{&jt0Yrf9aS1?%L_o_ikT2yH7Vya?eLU`}ZIC
z*vC#?uYJR{tU{%7()KeQJ?(3fQnyV@+DeH?<|LQ2-MKThYiQl+?1g1?y^@{($Huoz
z@4?|5M%wL&5~lK0>PltTID95)386TUM+2{rI0HH$tVYlt#RC+YQV5!~)Na+VmdQgx
z(iaa?o?8mG9X0@>8N3h8ly54LVCRZ-6+}C6YG(07He0ye#3uuqvZb45P|QNa@IjDo
z^!kxZPv)2b0rYd3lEns>fdQ4ir7f-J2b}>G>F|6&77=Y&;z+!AcFN*4offie(Wr#k
zxY#^h1NaDOMuoIKi^=8Ga|hfBdi|nnLt>jvZ5qf4#zD#-((EK?_4scHtcjK~=n7`s
zP)uvuHp*p*0rG7K-R4TCif`|M=pIPybG{(JJ5ep^rWz|K8u`zbl^Qhr_-#
zY-kYEAPlb`#4pj#)5K(*mZ&Yo5WQRiuXGt~_obtyOi>ZQum_tDpJ1Y!H|q2>;=-Ym
z^>?L&xuF3ho|;P7b%qEH@QYz!^eJ&7#%3}X0MRHwJ?kotnYq$lH!q#=o8NRJ&mWis0AIt7uLJT>*SA)ygP#|ev51cV_EJkuIMr^R)voI*Wz`
zhkJwb8LIaD$+l6n!yXJ%rL~wHs3av=xy+CN^nx_zMjn3#g6)nRg9Vztm+x75@1k7i
zdXpC|Zsb)Xx1GO3#hS65l<;Oz7kCX?-RK4WO~GNDh&X-S~)K)w|Wk|;~2YKQ?l
zbQ|`3_}!_g
z=B0BN4K-bi=`=eGNRXN0n>3iVmXL3>jXvoP`HZzH+t(pCHNKDPW8`=kjDr@AFn`XO
z+B;6nNen=cGJCO6FQ+gMgngm`Ee-HJ7}WDgyn=tNu~-0WllxL!IzKgo3(mvGx^D9kb=Q3GZ)U1xT)z>DimGO_fDD`LiHBowlAyf=ez3ClSX6wr!>
z`4pzU-CV&8F&fbo!&*fULDK_mUkH3_u*U1+`z&Ba`m?gd0{vPDm}6Sn&9$>b>xO7*
zyw$V1^LK?pX{|gxJ?w6*_;3bvvaV5%*X#@y7CC_83a%D4KxS$B-6K@shdDij9Mka{
z2F$>Qy+AsU$}AScz_EY!^+5LR+c%t?o;rtNAU%PTIAiKfBKiSNN=ya<{TxytC;(vw
z{v`UnWlhnbz@-6*)Mwi>dX)u5lIITWC;E*N<*mw;n-M(HpA${Z%$~sj7qSU*3T*4@
zJjPBspS)>!4x57Q!Pr=0lGcuaH)>DVY}ZDiA(PRR2~()xzhF~`accBrTEGZSoIusG
zg=W~12~HM4w_GE#ict&6p{2a;0^dp59fi5!S#fyfSt0
z@Ka!Cv+PZMhz8*Egj%wp^n%H}J|86w7-dW!Q?taJG??bFvikg_e#_A8fU
z7uF38AlTf8?z;PXVXvzn&d5Sb3>Otdsj8*|Qcz^ad<#!#)R=l|WT3bOt%i)t6Az^T
z_y7=(nVFsIP41G;$9q}TnfWJx;~4t|gL6=*H#YMhl>ei1_xRqSwGJ%8L|)PZssecZYG}}l=9_u6ADcDz$p&x
z)>Oz)ug9p;V-#UpPj3@6;;T3iH+^Etk97ntWJ>IeSg8=u4hPlfpQQ6{3=CA9Wd;%H
zDeLpSv75(1L&JVWwg=`b%(+}wTh&m*qkxm4u7mPTgKyv&2zH^tI$|;W6B5-3NyXIK
zKmcKef;R$erceP7X;;dCorUaLn+5%)Be#4B?Rm^7As|MB*vLzYu(OFQGe-8R?=f4Q
zkX*Gy6?g9DAZG9%Ip~HZ$*|uMZ(;AZ{mID_vJ2~mw|4G+e+JamkLZTA*zc3FVuVJzMzJ+AmD;i8|FBABS1J?IDG8H{#)+2DQ((o
zS#yhvXD}NQM}|ekQ!v#Akv9o0Qy0{7uL@`+X@><=_8n`?m?P;~p4!A6FoheM?{fl^
zjl>k6F+??FJ_tVOq@Y~E1LaZ#*l3a9Eupn(Q;mz@jQLq9i<6rTWq`Kzzy|@L3HX#dOf#MkQ7Pc0@?>{zO!9?$qlXfl84McW~?=#&${ao`3BB!MkIWWc24{lbb
zJF#c~8Q^OPrr7np3|T6ATB`P?-O+AKVur2alxzso4OjP;_H`xfXiHeLm*HTPw6>S6
zLDZANEqDAQyzb9~FN}5U*xl!T^KbmE-^jauYyHYOtFdxXjvc>e<)dHt-!+EO(9VW7
z)uy5QL1Q4tC_!Q1$9J;{@DFqjIJ2e?{+>g$X&CI*klednQ%ie0utL!Ko=f$8R4Suqj>`uE^*(l!lM4MHu!iY|H(VN{6y5~~0^nJU
z5~FAQYeyq~e;&hT@Ha8%s9u8!^BvcE_=ISQ7$`suBO~BWCa@WM4N%tyV9;^dXtuOA9}e0hG5Z)H#8&vPyp+XX#GG<5g2|WLqSK(PURdmZAN4)=w2Hl_AS4
zz22S`@H5?9+ty4L?Rd?&^xEK|lhJ$aDe&9v53Hk~{#>;0zK4Te`-&)rV!@7M=0jij
zyT!#@zV+tUzme;PYXqbq=c6w@@x%wOyz$~+bv^*omnV6o@il=XRxqQ;=2l}}VG5i(pId;pJ@w&U+qP^BNRiECh)a#=`
zzvqGJXQpoxmM)N0#KTIDn^Z^BbyD#p)atNpFb>pL?H~1A=2MN?lfd_`mIVMyvGov8
zK;h1lzAxG$)u2*$$$6kFEkM;i=7omjhQ!+59QMti73JMQ#KO-DO}m%?rG764(!z~R
z=_-Idp{-r3WAQx$NF|496f)S&?Afz|>#o-80|i_$*yEUa7}I*S($RkXHkMztdPxfG
zte7cUbWRvzV1c0*u({C?4`xWZ+35?MlEu*Owe55cDE^5iDMW)Jy*ER>2lZ-|&kS%Q
zJGGsl)L_c;bu&JhsH1L^p8B4qn^)TR?k@mk=&b(nc<(k~~@CRjhT&uEa>^*n)M?d`?`59VMOG_84Q`48bE0_0EO&kxUWgd9FAVVZe?I2mFgB^$IXhW~384z?sZGHFJU#74E;P3Ld|t@qIu
z#_L-gIy4;!wsLh7Lx?O_C`)E_U0RK{OqR202Ph`+imW2yFqtp4#Rbk7`Q>c4nDsQS
z4;(vhG+8|>zPfp7Vy)j(@QuAEKHeSEV3cm4(s%S8b@b<99tVNNr6@JpyB2W_kfoB8
zL&I;y`vsY;*T1So8>aUc!3Nn-R)cm1ojy|SGYo1yc-25m86_lIumSIw>FU^~T(sy*
zY_Zg0OWyXF$&neWn=*Ecf|-lqHQ(=uQ+Ur>sPA^cgz88C{J;L^Pyhb^@b`wDhP`$%
zkY=x+yzejl;u8yN;n7nUPu3v1J%lSkDqTQvx!&Mwg{3NFJ^z%n=Wcc>Z#V{$c1r%-
zo6VL>Jw!`;ht8asv3GP6oNV^g!@u%{zr640-M_PX{+w)|JEJvREcbrqSN`75Qu%_l
zu&}T_F+cYLu?8zG2~z%qb+tzzDTg3Q=Q<3DE>2Z>xWPd6*OM86k&SDK5W{)|q%i1YgY%9u|TWHVT;D-cZeKq%)8|HDnG?j)ThX4r4N
z+0l|AL}!QN{_$1az~pMV=cLL(JJNz!qtLk5@y8-m5p!~kFtlsB6!gl~p8)rBy?*yzZIt)G<X6$t_4>u1n_F$oTAUq|U8DQKR^^UehR9B(N-)()O9+tSv^>H6
zj8bCEj)1e5@?ru7oeOAXN9pK49qH4Mu5E5`ZJcyikiylPEx|6P6w83FvgS1PnI#!n+|E$d)~f*_dlbDd-FZ;?BYuSHC^qiqDSD4
z;I+X5Eo%9ah>&-PkZnLber=cqeS@as$UZI;7Ul7>v0Hzhl@_nZ0rNrw=!=$Srq-sWrn*ghTx@ui{{S|=k>r)SX^gon;1?#4iFgqE<1E2idw;%t~|NIwEKK0|jIqG#Q
z_x{3XpM2kM{Dr?`O-!_I#xUHCS~CX^o-fquYr}qjuT&#u1DFb>?Ls<=OPqu5Yev%|
zPTJUXJZye18HA1t6@Z
z>aIp2s{@7f0m)>9TpUK3Y
zg>(E5yw;91AvIwQ)>DE6U}&-lUcdgF42Ja-Z)r8R6mU*WpW?_&8{4KM#ZwI6ElC<;
zKu&6v8aG3qx+;e3MFld)n6{&I^Ywl7TY9fb1p>tANU;M0P*lqghppR?qCtt#3(&98
z|4!{P(2dz4yNx<+Epq_$XUJhe0EzwVws_^ox*(
z^S6B96aPhScInIxR=C^yh%|)s&o>PN*{SOu`s`o+U-i$wf9cXCAFMn1kNy+>+ne6g
z&-^-m{CIC_eqmLk|6WqiBa>DeYM04GB62tkzX6*D0e~XMbh4+*EV(ZX0Aj>*V7`Sy
zo52XGWsxzSqP%0u3yD${GO!J8%Z#`46OD|)QsO35g6jo+sbcyY%3R3j;h92)mVqLZ
zRI?QCq^$vDc6RD2h`J+gG_f%Mr&8jn`I)T@xgeylnGGqz%?=IS;hxMOBD^S7}e)kh2A&JUg0&h1@2&sB4fTzUs$X{^_(|5
zyDOHd?`5U?=$!uXZ~mFTzbV0kKkH3@zG)apTG#DdWX$04rhof+$v&{~erNYBtz%*q
z={gLWkPc^m>({0ED
z;&qW70PqBM0wX7AUnF60RU9BrEh7MbV49hm09g)qvMV|4xx%O8mXz16_Fffr&bpM%LrkhVz8lsvQ52DY%pkrBD7E#86r*k&DlbM
z;HphAA|p1FFXkv48Ik%cCM$}DlFMe3`uyUba{8N`m}vNZCZJ_vVt_|6%^S&Qvqm&1
z#e*n6fYMIiOQX>tVbCX0&W!EbsdlPyi%T(@jBSSSNJmL$dMr~4Lh6w!Y^kRU-f9+<
zb4jz~~wx)Z<)prPvJ
z{WO!YjOBs;+0)Dc@1F|j4DUvZ#4qIs)w#I~Z@%VAF1M1)=Q{>CHp6i{!awDlXBx?=
z$WW4IBFG|I%_g%GlXjVM#oDP_k~sabwh5x?_^q+VFeOrudi^@76d{5LvJKC3+44pZ
z$YCBvvyx$82JKR8oA(ExGTYY}jUO6~6Y3Ts$ir(GLf5^H!KNUjj8-tpQIOF})l)KF
zZ@b0;b?oiTzh0E8q4Z9Y^J6i(`iY3S>Kqpl~;|Pc>$AXU$G+XW2k`${wLTlqcBWy1(TKZQ^Rdap++X4
z(DIQkd8ta6V+^~Iz9R!^w>yRlLc7gaYKu$f>hlNx6tnTrp+jM@R_jt9DHVH)BZFm>
zd;^F|T4JC~$Y_nV-R;OwF_0YQOGqFyBsAAG6UjU8I!H(VQ3l58U?K+nI2YuY_lfdD
zQl=~>x^Zn?#XR8Of|rJ72Cg4^sTdu=TnxwJQC^};!}%*=HY2cJ#RN0rSEomPU5)al
z`~x5a#rnM06R$EZVcubl1IT+^0JG)~?0>$i4<1{xXfp<8x|Sp45DMZTmYGk%iYTlU
z5!3{M460u_JuL@#fc4*sT4I2cft1}%I}}vJLTMraOCRWaU{g@kh#NKHXg||(Qa_BI
zEH?&7UmR68RB~>Z*a#Gv!8(U6Sp3~~tC{L<7@TI}!2ZY3GW;`_oz$jh8Z0{$lgY5X
zDhzPYHHlJsJFBjAns#-wNy@mB+HsnxU&B%bXv|WFk;4q!v2;Q5LOMNgc8fB89RJ}+
zk7@N{7%!qW#!xc8F^(Ewpb#R6NRm0Rml2kb0=yqG
zE^r}zd5rag_N7;(DmTOn=3mz}4j|XDmX6*2(qLc)wU|zihQ`}9RZX`nBQS&w0@7BJ
zT38}8!SpGp>zHjpTMn=^lJ_BTh>iyBLGh3q!5@yqyGD5|97Ws!7@UVOb$8Ie
z>bVQy-O;E|41icm~h#=1}h!=H{Lpi`p@c3Gb0ei&~f2V
zTx^^T6+Yr19spG1?B~GPjae6LEI_m)JwAbX(||Y-Mg*XpieMBD`y3O%eS{+3sNZIg
z!Hf#}R#@z}WR&pOTp1zwr8@xQ+}>e=a&U2pR$z00l=0ZkvfhlMIF<2GW6ILvh%X
zL8HlgAqaFvT8^b&cGvA!b%bvkCydTZ*eVF;wAgBjuQw?v!iqa7aQUvg8^WwbA#_*6g6S9uTqb>c7G=rs-?*Re1?eE8Pe
ze>l*TI#4VGL?~$0Nf5(bpIaLsGJ}&7pPtkf-`^G)gCPjV=g%WH8f_7=~+@aw?2&YCxJh
z$}0e~T@cE2gXQY=ZnjWpz11}r>h+%EdJ%m~gi;~|Q%yTIWD4SG@N8+9sM+jD-uKdx
zIwLn=0O1{QIKzOrb1x8B*wIP_ig4}^@pbx#EV8cDlsk`XtFc8T`f8;@pmaDGqzqsf
zQ0dRn5Qo3BV66daJ6N%LPZi{#+BTjRVMa
zuK7bpp3+k^9t{nJng-%QXdLBTV`gNhvVQDF!bJ`p6pq3eT!N~HQEc={Z8KztHY7Hg
zmyWJSL!<3Uz6r7tbRD!TA##9n2()_r6(QIF3vi4pTgZR{bup6#;PvT6OPkDyouEvb
zu^@mz@TX9%Z|Vk4vSC?IKWD>uwm#MPvITfH%VEEF=qn45)m-n8Tog}Ms-Z&
z;!F+fG+KH>>b-#Z6Uvc5!O$+U
z2+X$(h78`|^HGOIzj2_M->6oV9_|ygP)S_Va#KOsj<&C}S{h~ZK8JxIb2z}5K)C{u
zt4PM{9oIO3T<7u^7B=cLvzy>@aC6%BRmnmG4+xYdJHZ_Ju+#*T?fWWCR(9VP}g4%kkD>)bB
zG4HBOA{K>;Q^FcM!JwD}N1^_Q#m(FYh>R>mUwb$(?PzGQx}ov%g*jOOBPrk4@}pz2
zEZ{vb(n1T@-qDs7@@pbLr=6m@c)79+eE9#ysaSPKMjg1k>vf0P-`Ad+)rx55uD2#`&fd5?rt
z>mjj-L^nZ4GYi@i=n2^$8LI~XrpOQ=;EeJItWK0CNarDIh=d#_UR36bj5rPwkil?Z
zM1@cqq0MaVc(CjcvQqC?2sG=zceNXVmncooZNA-gcPo|1$rXo5sw$rmGZaW^Un5m2
z?Z6m7moU_3r9lI44PRxM`$J{4D7tzh3H)L@7>42Ko>)dy2{d?Wj<6#&AcNKCNHee(
z{kz_PxDO1g;@HR|6m95_^rVw7X+Trpb$tz9_8Q0s5;VGejo8wk(djc|$xloe`&A6=
zVa6s`Y+L!-H)Xtj>iXFYAV1@{_s-h`Lces&EkBCW(fv3`$o!H_Y74Thi+QvWcOCI*Ki;}D;L@J|*@(vit{^5yc|lBW(GIuvCK#SXC;eGeYR
zdy9*Q=~qaq*s;LA*2;jlLP)P-6-T3KHV5#EJQAZ!5aXSjv_NjijL=C*k(`w
zlM>}jkPg>@5JuK3Y#zjT%n}!IO<)5)0Z$o70b(=zP$3%t*vv?2YNGWHmz(%mZ(vcL
z!=a7|ey4)DOR+=Q?gf(3V3o_dbh+a-T1H8X<2Sa!Jt(?_SEQ4t(G@{!H%N>&3IvOw
zHXd>?&dmSBR#px^@<}=Jp^r#wV^i^+w&^UPtQi3d(N5OB!?Ne@2bsC_23@^9k>m$$
zaXKAIJllx0Lc&l>#vuV|uuu#1)I|$d1IVSDDWd%Iyv70K2CPGii!WAd^{oMh;%u|&
zk)~q8jXiCpX
zUt7o<3HoM=7AHKc7>s^~X?J470qh*o62dXsAlQtN5kiJfF@Q`=)h{Fq(o692wNeWQ
zGezr@%8ru3qv4Vf@&QN+DZ>8H%)=nUKntU%fdc?5^gNhl5Ij{7QlEPOtR6Wb1Iihi
zvS^?wywG@xMg-t>=*EBnGfbj60|TrCcnjy%V$Rf1`$Mx9U%ME_yb5HpEJxf?S~=idG{xRK}o6@#5S^H*ssVm$d6%}m!bN+
zk#;nqL{Vgh>U=vDF4FgwXa?76ZfIcWiKE!Zq5B_@;_>6sZ@0xpHwJ-M@8_`9VFp7x
z4FJ1(k>Jn3zog%UF|6ph51v-Kxrysl}D1IP_nmi1fl;=Y4V
zgR?LQ!UUTGDquN3&oU%T+p7R7al)d#h)vZ;8&+b@sbtx`aCu6yRcjgJC2jyGqh$=(
zlQCPm02VW3Oh#m*4rnA5u|xv*f!eFoKsAO_Q3}i^7_8$UUT931vL5w6;YAF(IVko)
zph%@9=Wt!gTVAV`WOKO_sbrF5ETf?jI|c(8>U-}gwoo8wn}Vy%z|0UF8&y=Q&oM*6
z`(s6s80M@AI)*W8u#&`(zO?j6G~0UVkN>5dfAM*-e3xC5BM*H*Du<3qx7lW!*U@X}
zb-Hw^Bij}CT5%b4Yv`$ivPkd8*4jEdKlP~zD5Y~G7f_{>$ztgpP+59r#Q7W5Jq|`BUHM&_r7e@w^GyjnKyjVsD#5UQE
zt>CJk_c@7-7B+>W0R)3LVtIx*XH*jeH?SJFA}d*UeDyK
zD>7c!w8jDC2CeD6i)ZqcN{G!#N;=Dwp=9)=M+SkD5DxIebUuY;3?%q82<$LdL21V+
ziOd9644!VjhTCGZn$r&y{3K|NhiBz9yGXze3$rPXo!q
zgCCT_;y!7uZcv=a2L_~ow5R1t(C#zSb74@9_p{xRR=Xut%|1xU2Mf-3&0J4y?%P(e
zI1V7!xW)nG2CYiD{(OCU{xuG$#imVar$WE3Ys7(eWDVh-R)7Yog_h@#r3gmxp_2+c
z04nS~eW>B|*6;SEkB)|Gcp-i|u!pWrq5-OnP67jqnevTeL!TcE0w4-35iG~LszH)g
z3u5W!4NzLRrj?6189Q~S(vAF%0i>AA#YXzalp|Iq^?`v1kp5iPiLZJCv-{&1UdoQK
zQ=G~b!sv?aZZc;L&3+UIhR#oI5nHkVK|`Zf51Ki$o~&;6?64~@edUj3<-!}}fB*wp
z`p_>*SgdQ{XmBzaWt!_{rP12tXh4kiuKvEcd|9%^ywqxS&HxzzSl<(Vug`r+WITa;
zt!o@WZqPb--+j%6gU7!+=ylm?0M1~@Q4vc67c}b~2Bc;I@NtEg$!5FDO%c;qK~w0|
z60?b^Q!QOw#S~Vy8^jcVb>Jlf0<-3$Lr^f@G7*DEOgn?X4B#aeaS=#@MX8y0%yz14
zG6c4ET@ySq#)>itv}k}K%{we7n~Uj&M>@LAa*eL{`gdLZxn7#l>#vq@k_q<%^f4P%axlCNw1#^-+uYfp|G8
z(T^u^uWj8lW2t|g*N&^+;=zMYJ^8JG!(QpNmfxYPf7L-~sC)+C>
z#Wf-=X>67wRo^Fwh&He0AX3u0z0>N-+*Dorwg3cUwnGEZ)GedQ0rD6E3R$L!nZkwf
za+b1+2|Gg}#@L}1qU995;9N6=7n4ZkXvvi|hTS3l27t=jFVD7813sgRYA5E;h*c=j
ze3VS-pq!PKWfUv6%H5pymkdxnfRE~Z6bCRpnr7}Gu+4_`bX+4^8#jY=lx7==&=M`iP*0-b{
zdQz?`CNxy61a5uW#irM=JCu{%&4
zBpc~o2{Z^e@IuLqI3NZL06?J|86662G-z9F=!v?NDbXu8$#{}ikaZgrZ4Cy+oG)Dk
z{Sqf(nm^R`W*)DN4$cS)8Yqbz&d87)#+eR)ueMC;<{4{Wtl?M2lxk6
z#LPVzNWv_@7?8utGSp0_uYaDqudamo8A}jv#M{}sc;H-Ra(b)ZGbTy{ND~74P{0&*IHi6bH+Qx%Ejj)qcwAdzf
zT`>|(=RM74`u!2J0E=ahMQ1wzr;eWVXzQ{|qUDvNKL=kQg@NWKQSqIw)3zKEM^U|?
zjZ2q%eRJ6G0ENAjI7hQ9bUx5gN>%A8QOJ?}nC)g4Dr}mCbW!ppF}qAzEj<95LfFv{
z9m!Sea__JGx*UDrA-ykI0-u;Q@)2~K16qH^Tbpv~>)()mrvWwfbigo@&gzQ1@$E0m
zm1iH9)srV>OYsj#3V0e^^AppWu`KB8SFKP3pf|PW5BMyM@sDd>;}YfuuDN^f9Zc=p
zf9~RI&(GH<>IzZ@R2I)^DU;O=I_w7oJdGx~Zam%ag>0%FssW+yXEZe*X+Rh$fU1Ar
z((*<@KzN?CG!RtKvC!-y*3Lrg3~7ByY(tC!SVSl>AaN`|QKM0G2d8{a0b7(g5GckN
zK8RXSkq2pwitRalj{#e~NxbIis~*y~__o7j5CQ_o2_-OeK@38Q;1?JT6Ar%EoWw;?
zvIv?+V&V*npOG=h3N3=mMZE_bjV@WS1HGP%mVF4OP;(q+i*oNrJ}R>Z4$2T3AX;jz
zo;xe6SC%DHEXww&mnH9Jr4PV$(2&#L{+jIl@F!)WR+e5@u_i5RHaCAP!|ioheR-&W
zv?~YhxI=~r9JQ(pw^qfA`%<5oyy91D3?O6tD<_`zSlNMTQ`0oXJiQ>7>o}ra4;WY
zbIt{AR0NMfX!;^fV*GR6azT<|$bf;9og?lrrm~E)9ZCd?9sGZLUa115e|Hr^OEY`nl+PD^y>!W)6(;
zk9WDo0ptd+1GnGxFI+!23bp-;lb1TEXdyyW$4$ieP8%U1A=A{7QlUW2RO8^Bh$1KA
z>;F96+-UPAk#V8JU|J5taVTN9X??b8F=Y!!yI73JOMvo1u@g+_B17RgJjP^GPZjEq
zD(-;!5DGM-Yl0y^ZEd2hI_US_@wrI#fY>3S;1PbZ6S4j5+Hs0|I3&$k#vGVTRg^i@
z9fhJ8)Xy}aM6{7im~r4<__Uf#NaIJ)t7`xNR|H+6^;56P`V&t`F;mcB>Px}PYiXFJ
z`yB=pyPBmHE0dya7CG^~Z_r1^(rj$<`0bKEcAxb0##D+04(nC2d8t=RQY?8IoHdx%
z=Ee?m?_rGt$PHe5ZolV5xjwlJI<>J-NS)#_ROi6c)n?lir!X>+A!PTo)IcfF(FeY&
zU?w^Uzzebk`00w4Au$D!d%b=tNCYiaG45#~j|Il3mZnhpk&ck&(0zWy420PL#>6Ny
zkTFcvDBz%;l~FJeDrngPJ2A*ew6uB0(iRv&k{Bi`IwuL~BMG}r2r8Do9_L*^+M-#V
z!wdw)o9p;&Zx2J`VT&LO;+&^{Z*kbpAzPFbcMTF`ih{kWU)yaq#AgGE`Hx(ei1
z?c9%Lyx#R12asJ@`;Oo9%xKUhaEMdhxf(2plhBqC9TboAFCGn@G8zC-_N?h9tW8dF
z<6+V@iH(nm4P8%IJAfvy-yf0zn&D=R^!JEqeuhB-K_;guI@-viXsAG~&x{8xRD=ov
zkP0Fe_$qkA`aTfsAQ1>WBZ`A}%s`@Oh(-tzc*2c#Y?{s~GVQ8EFuXR->5x_0LPmgmy
zPO1^&at;S2S3)md%UFG){IEQ_^9{Ac@bvv{!&?U+vI4|~C{p)7gm0DdezMqBY3&sWTj%3W9CKh^kJ5z
zfMGVI_h9~(clFsMUcmUf%FFhmIw|ea6w}S(bUcmKLBn)b1MWN#{{@|7`!7BHI7EclhRIo
zRP<*8Km~3A?_Lb?VZs=!QYeu{S538DGmm4^6qZ(fEz5#pN$Lj<>3i)_Xl6l=$vp?;j?aBghREKAm{164lu
z^<;5zK{K_4p9fmYu*I}(eNPkf&-+u0XK@wR+`b(*d9SW<0NI5#T`Qc-m1?WqURO_b
zpA)7=ncQR|oH|9DS5M85X4WxFn1Tj_ToTBo%}vtaqgBL#WJ(CE63prEEj)$xyg
zOg{0Kep421zel>7F^#m$$tD3iO^_ULwY|LY`Wbocx##rSTn3q$rGs+I$37*Q*+pr4
zIXV3B2V_y(y&cU!@|wY+)Qejk*}QN@N{TCGb9EW^n!Gn1c*uZUmoJGufAIHV-!LYR
zy|?vK0?7EDzL&Ld=#I;!xw+@yIf4ykxoEe#OzBA-*Aud<_yh*ya=8pmvT@pGa-I}*
zvo$uiq@^W>{-fk7HSs`U$MBi&lPfWDU}>rNf}YeN6t?vBlX_iG>uD`%G8lH_%*mkN
zWmf~`3d;OpUW
z>r|%Y$R~b5nw#5l;`!$!qaY|cI`w_~q0c3nn-^;?oIK6-WtC04K
zpmhNr1Wm0y&San)f;-zAjHFyB(V1;D8WI+pvtWBuF8X18hd_g*y>!MAAAd{MCx!_yC_eHNe)GX-EkA7Sh
zZo5^3T7cO)dGVQNB-vVLDHTOFLEuP(=-r?Cq}=}5Uy>saJt!-$os^R=y`WW&t5{N2
z@)}?()6-N}x3#MR8HD9amn7a;lS^-$klM^N%SBjjcwhs!dm4c9oZd}}6W_5)r8OC^
z_q@g>%r33zJxiAc32J;}h>dJN082CD(N@5v4yZ+uACQ}%8PZaqumn6n%Z^rKQ#P7y
z>FOq#J#th_k)n)1+|p7d($_$pA8JOEDVN1pz;HB-qzBMa({dVC5BuzJIF?I$%!ZaT
z;ILC99UKvm&-%t8Zv=h`+QMmxWB-)LLfgEE3g)^J@({aw}|2xT#dK~EhyEQ@;mPB)fC
z?XK*-_a13pT$UGq^do6(Y|~!{AZ=q~Q%;{cC99XNNLKIZ+KE@BtFKj`nxWQgR)YpU
z3%uKWwaU!Rug`o}#_PJ)IDqWZs!r9Ty$3xgA=d^l;5`
zQ}^}1t6)oZ8q#YtWJ^!Xq?nhY1`2w~_<0x~X$IjlD~W(_XaFI9gEE5V^dF4|($fHe
z7H1r^q}%Ut<^}kIo6mAH;lm&3DG%)s_|kKtmp&}XJMut+;m|Tdg|@Mt(7%H{0(@Nh
ziZ4|6?v>*o`Ka{pej{Ue#?S?%5ELWb^cSIsMwJk|`?isXt@?o%hQ0;lt8dxuV&~%W_3Q(lgIJEwBFg3F&S(WTH}%
zaAR36oj#>lNZHKcfHVi23+Sm}3Ku0-X<}I_57TYe>5tM+@H0U4z5
z%>{uh;#`QWC$S-vp_Bps06^1oFiaLu{*a^XZOuRwM+tO4d(|>67X)MJ+Fghg_h7q}
zTI&usGg5j?)>1=MTeU$Pu*_)b#)W+&uoj3J!_X-j7;&P3zCX;g0GklH=mFFnzGDCh
zlfVZx-I3Iu5@S1IOpFIC(E7}x+@YZ6(tQs~TX7g@qx4%1nLBt`vNL;(UP-foUah{T
zSf(mQLA
zAoTuE{gT}E@n4dKBX>zdGl=CgXGmTH8}*^jd`{*bdRPO8mL&Z)F%__OGp@$~+gRN&
zYVDfM<;q2=&dln4C@Yqcg^!C=_be%f#
zm+i>J%5EVlgOGY5`23p$`J8HPpW|mT_sr;2hYgc{jDbgtdd`Qxphg
zL_z-yY+}&uDK5|>wxO@bdco2xBAd-?CQ>4$8-po0nSqf2-+*xyN}qOjNSzT+F$rWr
zP8Q-l2{lN=pr;tfh{Uf@vk^=N8!RJc7V>sWPi#Ahf*Ay<$o#i4hysNjC6#6az4aBA
zY@uco$M1Zf-1`0x$(Hd32s(bd)ugk{9igtvc>h8%0f9+RgR
zr;1ZKMF=wu^yZ`cl$}`oVRdFN&9ledm+M>O0J2MKVPPT2779ZfZ9}-r!5M87QU@dl
z#T{)#_G9De3R_9XHRVfA%MfUQW;L^b>wGZkE0)k_$0k=O2!sy(N>x1VIG~$=VY3W}
z&az~LI{JG?Ujq}YZT%i#F7VHFDe7YwqLCd@F&<<0C?Vjz3srY4vzy-eu~6WW4!ZzO
zLwjHLR={3Cioo~wWg);_@(Tr)oW+Bybl`Z2d=TFEpU;Ty#3|GsTP5IFu{7c1P
zdXldd<&DQ5ll2RiG$3Tn`%t{c*Ff>1&wf@W<`((-m@5Jps~0SV$r@*FY;?Eq^R;EW
zxpIm3uB-tU1UwC)QqoRWqFGoLj8zR>$)5fHgx5MQU#@$N1IR9|#nsiYP%O4R1?{-e
zLa1#8R1ZT7)JNYEtW+aUs)55bM%r2iWVKX@l91rSusi5L3Z{S33#O_F}AjSXyZH!qJs?nw8S@V=bRv`S!Od#faApNFLKRvStR~{O#YC)}^ylA}cF~(YkO>
zp8Li((igQW(>E<|sJIn#vhS|DWbdKF+Ep4zUW4X^^Jldj8z2>7)&;HCs$R3N
z!8B}YSEkvNT)wC!8rZOblxSwI_!GKS@a^#{FISh2eU%q7&OWYtjRVMTt$Xi{vwp4(
zl`pgm!^o5dJuPPddBBa{&t(ix0`34BLFK-4`g>7vjV?ANw0{^-0tx%*9z>~|Tb6@$
zpp4_cBTV(8qmx%`#L@5V!AMEVgxMMDrLr7BwBpxV#5!PTJ%H1_z7Hqy*(wc39g@HL
zTWtz7J5)1z>-F95e%I1~;Nf*+N}5=luqB-Ywlauv!I?W{}?G`{ru8F~H0Nd}-)@X3z+#_E4RJ3*smkTF?zqV5_m>88IG=mN@B@EX8=@fJWO07Em375*Jvb02Dz^
z%j)K|QePFpl&)?rbVe|P1B?VG@nG1Kn7Sf;vPGL6P4{W4a#2$a^qw(Yh%WX2x&;D=@ZeGkZ~#~+v1o_tJBJ^hqC^X*49SfL{#lGUK_
zz_0#_1`3z0)@m!SrxPN%IIO^(uu0jef)Xkrc>=BX&}
zQNS6B?!Z65rEznflxC;MY+b)}St@&P`F>^Y;BzuwH*AeXm3MI!@|BlSj%2lrX(d}6
zoO3n907V;RNk19rrpPjk!&U*xTtl>MA*kHzX?kw_Q_y*cVY;o`$14<#WhAl?(&CM>
zS5C8&uGOa^yXzq+m07-Ud>+{g$|M(NP$SI_hEj5K(pNCDxG=9-Ltn80SGt`J+qs(N
zl;7@}j_32>o8}TSQ8gHK2hvO&IrP2<1;+3j$
z{NDSewbhixr32b=`GS1w_kLSu5Hu9XZ7If+ho5b;D{Z~jBYXEt35-!KserAN6fc1(
zwotXqH8Vz-EmADVf{dcxr;G+wy$mVmO2lIFGZTD`=3u}H#Gb#}W
zTa(ns76WuHPxUA=;3+y3^n8IJv6d_4nJJF<16+0a_gWli$rF#d8esBNYtLz=5`;q<
zLg`MFUc1ZE$9C92NsLdGQd#+$CtZ5^I4g_^=<|e7)w3vK3J~Jet
zp$+R%2|l4?U6z&=9zB75FH1orv}-YV2+YaTtPh-z((J7CB5+_dGtu_3SDzlYZg21!
z2asJ{<$Ue5ZsvhL(FJr6Mo?Hs0O0BAkTit}*{=R7=!S?CFokAE(CbhD8LI2qQjy}s
zoKey5ftCfB7YHOS${r}8>!t@~ebgUn8PX>)4d3TLoLMsy@=J6Rqa}<}-c089wA0}c
zQ-RS_9Q35qY^S=UZy!L6Lb>)fzq7Jhw
zQ0ROu!A@v<7j~1g2M$TE(Uzlk-zN+E_fgvfJdS#$BJcaWZs?$~Y03}HLgJBWMS8ShPyiG2BARXV`xeLjLp_}#x##KE5-b#>g9_ac
zY;pt*fS<@l08mym#iu;!cEZvkuO$p{6`a!OxkB~BO`sfROEv>0DkKgS7f~z*otvHp
zl%4{OkoeP6zWa99^vpBOST}FCue<*62R4SM=|)GO;~-zqmow+jOL<{QDw8#UwFG4&
zjR*mu!jBpMBe
zpySUi%KR<2%G~i|GSc^nZq2B(C6E8XAIS0>uPZiGpv5Johe3D$;UE2heDnAIh0HGQ
zlVYjF60ZqxmV(e011&*eFJsiu65~w+S{pO8YE4_ZRSgz-iS>0sMDsMWL3!t9bMSoW
z%Xq!@dXGijI0M4w@W_3q}r0m;^3z
zX#Z-4kS~p>e97Mzyv$8UE{+J$ijN$8g+Cs`VRXOG+>mD-GABHOZl_H{`b
z4RK33{l0k#VJ@zL0i7dHfo235(By#)p_9Z6M2t5u4X!jZ$yO`kRO*Ts={?qLWR$B&
zocF|98A*9^7QVN!jMoia;{dXY%bA%O6$_PSW8`DuwMXBg=M+_;=Q!ufj8A;gQ
z5GS(8E*&Tig2`1N9Bu8mpcS0U`7+cpVOcQ?V2jW+^-G1f-Dt;;9}m4^Wv#!tMNDR-
zm`iDDQuf?&j|7wJa_Ejb8eCyL0liju|5oi(!$7rly#Q#Ae56AW1blV#*4#I{}6($Y~TbhENe$ry67mx_PE&7A5ZY
zLHy8-JYY8je3StP`$A*tq@9z#mK`f=8^($O@4<5~yxle76u;}i_kVBw;<9ua+r(e;
z+FE`{!PHOwJHIJQx87mK`UhP(`|^vja^{p+qgeXe9oc*2sN^Ol_2&&JhUDnAqVr^H
zAPwM)gK|Y%ux0(b7z|l0U638IOwsEEK4a4dSm?M%PaV7`F=Ex=hEx_0h*h1IB(I%l
z{qGoJN!e`EDmYKcc-`47_4Q
zgD^>JvUqYmu*gtHUn4QqMwt4~K>0oB^rfTt#=@PqNpX5khFY%p#S+j0=>-8h9_Wxj
zSO~*(>+3D?w1miJ;V2r%+L;Kb9D1xoQr1*I5AolO%{DIDq@HW|5U6}GLqZQ~
zF(u82Lvcg0O^2H8^wu||I=>{7`;STUr60(2zNlEofSC(QD6(SpJ#>P$T;AM}`t*cY
zidQ6VrZYWTTzRK!nm@cWvRs=SlVt@@S6+TW!CO7;wfwkv^0f4tT`4F4YsmTr`BJHi
zG#l27n1prxtaeXq&arTo1mZowHyn@HM`Q~@)cWikmB}cD2vsfUi>AaWd_7d$p)nHU
zbce2oe$NmjD>42vgSK{hbb~Ky3$@W~vQq=x1G0u47=J@TQ8(kt${M>bdF^y;uWw51
zx}Ex=2YT;xO~r}&D5Dw2Fi_wULvXNfP^_h($v~x4FxNLRBlmydFUWxh9}r)G(XGqN
z^6dA&!xE~mDHt?VhhfaLpsCpsz|q+~3krc4zgkKggd=7exJFD6vxkDglQ*MO(hm)+kk~OwrN8#R*I84I+jXPhe~mjNT8myOP0_uLc^ZzQZF1
z(uG4kpmn&bYPSzsDbsShFfI1HmWO&0&?mHm2fA|r(?_(d=j0-L5fo!!p^7L2!M4DGF
zF+&)llcGTn#5O3VH@ZEU*OqU6az+NDA;*=&~j
z9;j;u9W4vW)3Wrw56K&ke_d*GMJZ|EXf!&^0v7MNPxgQ87j)A)Qq)qQxv?tsy@!4z
z|Ji@_j@Ohc*I&&~Or39?ef>ZN*^pjachHmS?5*;dU-~r$yNUV~v5qq*PRe6n{E}RH
z`4!?4$P}>QQGWHc)Y{gvYI4s$sZLCZ2Or?xfIq|5pfu1xQ><1sqsg*Ni^!hUV6ijV
zoSI|P-7nS*C34LGB6L$=G!8vjd`+fsLB?xW);NId^2+ACmgi-oFzGo^`?AUkidr#C
zm%IjvVYjR0O~e)?gn!yv{}(D1&dNaH7@HBI!l?ae6{*<=(tRk5Be297P4xrYv^F)h
z?_zot3Ss)uj&w7Q^fl)dhgds%N}l<_4;7rP%AO;~<=C%$UX~twh%R_h(x$zFzR1YQ
z70&;(Yx3*$wqDrUXfQg!j0l<_8o|)IE!Qh7rJ7r7a{kmQxpLwasnm+%-1|PceDS=j
zuB=cmB+ya{<=UR3x61V5qJB@G-YubCzfFQ%hL#YnZUA{Opl7{H20@LYkZp-TF*X6>ci?aU4X)QIH+HHz83#x07nAQwsQqG?}Czmf=
zVJmx5%ctpDT~?N_$i&fw~MQnW^Z8YX)948l~^b0L^I8
zxK{8EmSXeA-=F!{UBCslK-zNOE
zc4b9s+Ofzg5DB5uI1LQIOI+%IDiDep4>4LCuu*`tA(*QDPLCPP-hKNBIJUH9I-#xE
zXwZ@1%sJW8AM>%l^?%c!yCQ3fyJWR|$ZFZL)^5qGk3K5>7oV5Y7cY4SKK;4+PrD|J
z!++@?{C~gw>i56>tAS=vuu!nHYzSK|dFD_4P%dt4N-dX@$-N8OZ3(2&Zi)p#pi+&&
zae8uAyHAe3&!KEwyh!{alks?ciC!Ou08ysp!Hmd3d=TBZb2
z(f0=&W2l)Dl+!qQ3l}+XU<^*mzsFD_?g_MIAsv8!K>HeweXf@VV(?_((icE%09vxy
zvl4qJWY^cfnG&nx0J8fF;>taAC|qsThDl)bPW3_WD98zxsjD^qns!7glN0oe0mw+O
z5NhHGAeh!g_5pniF;)o>C&DQWMkh{gd<`h?(7!;5glX1Rqb-SBkg5Cbk-HTvwKW^@
zqrOz9C#mKRhAc!A71ovZ`nHr7k1QAW@4qI^jBq&U-Tu(~w+}r0ei`%wmO@%&XgQ-B
z-_K|OF!F>s4IU7Eh8dKttzuk3Ujt{LofH7R`T7J*xTrdhdjvjAM@uo%(;0+piYes_
z1=8$EUdJRdCUPyKi^8@q29%jlBQ*;o>bCTs(e05FR-tf3c76SusZlg8VQ#|8=6&5?
z7G(&*O$f9*P$(4T%F42I{f4$O%?7AXPVzL*XG`RH!0QG6xjbn#-7gkP8b}73T{zS)
zg>DG&2bfDiwQNfP(MiP=JTEWR+Jsb&7ufv)V4JHf$oyS*$m)exsAG!58jA0W`wq&f
zQ?E$%j(g
zL*1;{zP5Eo8UkX+@H@a1wNqBAW>mhGJ)pZoiZQQkW&92YK4f6N1|kR}L3_KBJWatQ?6zcT071-4PmQaQ5H5sp6Tf3ZrjFt0&7Zi%cE(DZufteICOdZQm=v|nhwURyY+td0a1JBJe3_EP3w!rTYk5Ul&8DD2s!h(zU7z}8Ir@=L#g+X_
z*Sy&>PCWhO*S@s>@h^W_H@L%gDwP8D(9eN~At1zA`b)Es5M`F5ouj-IE80q)&@Pj{
zzbI8^8!DzztxYmBgL7O#OR22lH-$=x0i+0%Z2daiFZ5avNb&QEkQ30-C9hwHY{ZQD
z$J9p20Y`y(mQ(tvU8V7Q?`xL>$XI$3E0-^x0(OBZRqz{#S!jBmFBQpunA0|99@Y%d
z{?rX0(HGXEhz`mYoWv+ehJ!#RXXa#KaY^EZty0L7*!uS4bvBCR_$=9Y`?Ir=l
z<$xfpHO25-&?N#V1J)H_r5XQUpE|9fqxV9A0J3Ww^gt-<
zb{ZP&wlv6g=+L*`*rcWkhvzh#L;LtA^SBB5FA$5yY>=(N$IbiOGG4p3#wE;6Sb0CU
z&f1-u%wa1Rk33A2Mgu)1K`PT=fzy`2DO#3#+F}#rkftOF?OthQ-Glq4E_YPFi2
zKJlt-Pt;^WOP1MMMN@m1n=jCIDBRgHg}m4>Y#J7%s96kHoDdjlEiY@D@5+>(^bkW{
zU%4!UO68i{owZWQ&e=BkDbV!D;Pe+W9EbL+&0yk~YZf7%!+*1~R7WGJOv{j*em~>@
z^d?Bw(YAJICYPOTQ9DLW{eCTthCLay8{&*6rKcSm=$=$2v{kE_%jD#Y(OnGc!a5Xj<8CUG)_j*Qo?t#JUk3Cqi86Dzf4K#+hY
zDmo}QsWYCF3L^_M5zf6JKS2q=mL;uc$x3ysNZvT{lAL?vG=qu8Bf0zjd*tAugMxAq
z6S3{h4SDtXXJqBvS!qLuLpLKfZFzc%Q?5b3Z`z`e{99j@bFVx@1+#o@W~E%4S-#e5
z%6PdK?Tpg_KntQ9vMP|tzyifk8``S)Hv|Pt{c>IfBl_V;V_B9nK^7Reu5qV>S5Bb7
zF@R?H@pUxgfU3L8E)<;R3e<6h-YY9Fy-RrwgyE>i*G0JmFW?chMuH);oXB!}krj_=
z?7O($I)IF^&l|e@T%i|R*l1e5M7E(`bB@EM25B6P(wcv$Swo;DhG!`27_@^BkAN@*
zf~amx{lbf9PSdJ!r>kQI^CEfu)fZ*!@_B)xX|>?X)|Jb8LJtVuf}j@Ip0v7cY<>y~
z6?2|!KKo<(n05m=_9&jr0L+rjg?W_XBvy<{E9QUG%?|gL--B#O
zUnhc|D%!l+Ro^eK$awAAdg}l(#y)T8%397cXTKZ;5iOSi!ZP*=OyeW%7NE5W=|h01
z`FxI3sR$n6J0PB;-XCDo<%)9GJ$IAhO{I0<9Ey`{Zfr=awJnnqlRV)?GaCr4u3Wmz
zpW|x@Gq-e5afd9Yb_sNX`Pu2pi(mZ%4ISN$<BpWIQW4XqnAx5bNiD}3kXc?3(6qrH5?>A)2
zTK`V37g-xPA}Cj4#Z5f4e>I4XMg!t2wqH~n#M^i`*EC-5evM0*o3Na`e_9{vAwWda
zj?9y}Nt^)MpimswZVKvnFP~?rgUkV)7@!9O#RCRlR_dmNM{IMuLApCiA?RX6S~twj
zE=sXJ#UKO09+0;HHa4zYk&V@5g0QZmLFCYJv2!))brd_$GA4KAm_*H%v@c&o2j-fG
z&fIzuXd8J1OGzla0|W(`3`W<~B>`+hZwd?o7N~a;#h{yG#NS{$wqD;zF%MifvI$P=
zX0$6*%9Busa?XM6g?J|D>D{39CL|x@DD{W2scmAXfNtE^`=;0KfYF+`io%YM!`)ot
zF3e3>`D~_}aoj;P9Au%>$?^0kq+cy~9|O4B_q*a3Ds-Din-_y)2p}V17P>i)-+q?@
zr3d7D-~NW2IQ1eKt%;uS3-fbQo19imqa-uh4u-`-t)Kx!9JV>3)_(cyd2RnrGD|3H
zkg3fs$dzSnt#)@u;n6L=0`tKtJhBdo@*>|bT_lJQ%1QRPUb1md^q;ZVuYruwxrx>|La9prB#AjKi
z=E1Uz4=~KNU1TfZrFzzujHL{Bb&WHSo3Ok}IYwYWiGtsuN(QY^v>a(Ng@<0#am;&I
zn7##PBE_Nlno-4dX%iqyYGL11hey}Psym$l1mrQ(y|f;QWMkDQktBUMyJEf
z1#DJdGn$OP_S)sk;umw|Mr3q@RSH$f#5S}&Wd9={5^rwLH3O(v3h*Wxv^Zdou1=Js
zl3yACkX_jdWM(uf47Ef;oq@JAN*q{lLYW;xK~O>i){}wqyfO7QWIHI-Cr0}Ne~+O!
z1`{z4EPz$uF3?n=h&05OAS^xTn91a9iT5g-%dd@vgm!n01ISHTaiAM$1c4l1H!s+f
zsPQ>10(!RA`4Cx-MghmsNx(`Cw81pJaQ>pSTWw+`b#2)mJaCL^TzTJ-K!e5EH{PIe
zHCnQZ`wnP;Fj);YXLs0_@??eGmn#=88BNqAp=6+=faK-Vugcnq6H;5)bLrh&QLEL8
zinVGq#OtAa0sGW8?PojVvtomlS^$#~$6Q5@R%=K|BQlaM0S`X*xA&%Pw%wX16!KyJeF{fWNo
zc#S^o7K%*8k#h5t^mDBDG0%}e<5YtHumHHu3C*H>X{;~H%i5X+5IWG!v$%Ijrso%A
zv(ey8O+(wU%NNfXUl+wx7WN*HUJ%Qbl{Kn*ji79%8+@SH$(1u_C9i+~
zTXOo_Uz6U(>Y%!~=ec)tO~;QPkIJ=rE94}u%K(k~O2aubvw6mfZptA+>O!orz
z4?&ui6aG`Mu&RLRrE_QGeIZ
z4oGEUTB=jiviHytN%Uu9^u4YnO;gL6%~L0&f8`RJHHF#fW}#4d<=tG9mIl$p;=Wg*
zdurRD-J{>CWg3E>{tV&pAOZ`})S-A9D1nh+7!VwojDBrS!A=0i0D`fSBxRJs?*;gV
zLUb;IE8OigI3U9UXJlvpA*+hDEQASHj3A@;4?zW>t_GN=ty--iKa=YnaNVD?*fI_v
zH(@oK%{X5!^>YQ?SRA^y*o^_tAsqII7Xyao{{bgV~)9(byJ>t
z`32cnUg1EAuut|LKE!U%G*sR-ctHt02_k*H
z9A|Mbcj8y4FU}n~vL)|wO&&S&Jz8!iFzD8-DKXx@j&5Lh&!A8OZGPBmQD7O=eYB}f
zfQ$%wx?qq%l?}KLM)DzzNLFb`({N;DL4ZzdNGt?hm^gqWK$`$_*pHZDiT;eZwZWfh
zz9uRt(E9WDeE*#FjK%@vCain!z1PlX{d_T>CEJoyt2?f)+O8cc7>e}%qo4Y;%+1co
z(c{Nu-_kzW+SuSGi#a0iGD~^(=_jP!Xfc44N>w>>%W>*{V6G)meBk*f9+!4=n*(?w
zoaE_%Su`9HtnBK>3quV!P;)OT7NMK8JUw^vy?~7ekKOux1u6#}XuV>#1->nLGcYGb
zFil5Vf>ora!4Q}WKvekUWsqej?M#ONv}_L`;l(CKsV974?RGAkhbC$G_f9r;*rrA%ac$1i1|LSlDiy9NV1I@fV1xsDU
zdh|u8-%5WMfTvpS3_5LcTZTi;SR$cv8Rmshx;S252FNzR-fcIizZ!e+-63{_8JKYg
zW|!AEfZT+Y%?{m+<9Oh9gpqNN0|S*{B8KS{9E{tW^2AsENZRY`%nl$b{NO|H*Rn%_
zQ~H~@ENN=xnr19*c|k!{P}~QDP!1kHDurS}gT`e&^%I$zoRC4QDQ8}KMb<7{xZ^tjeSUwcl^=o?C5{B>Z
zs5dkUWC&K4c69?+5$G`qn8R}_@9fF|nzy}_t05Jx|pla6d52d2rjw|QhkdrUJ#6dVr
zqTG7towD9i5LScKehny8572BT4?!Lc9%u=-6lCov=$ePuuC`c#pX7=YYsJZl_bj@z
zbjz(z!IA+b47wkf?6tMiglxmsat0f|QYlHd-=$j~h;4{`lyx-jzI+I&uC9S|a()ip
zyV7g-H7V<}TmefJxkO*f87+du%N3n;1pOyr`aN?`M~=>ARqa}r{#mc_&K@bgCCRX+`MdDI3qv!lP@Wr
zF(kKPdU8hYy!#$VfQielg>6*1TwhMT@|tXKYKfzpMq8?~@6Ow$zPP9<|A-wO5WFzl
zMxvF1oEw+UYui^(Y|T70a*z^V-M9Zci-+%gR~(QxuYJdku6PatM@&E3P&+2zdw>%H
zEF{u$q6)uS4JzxG&r@a)*;T~xeVhO7Xbo3XfO(`PS7eQ3cJI98s}r2mO*GJWg@Sf=
z%2KIL%jE35ROV(x^j;*92CG3sqOB{Yy^HXo*<3V$p;V?T7y
z0|j5R3Ql^Js#vdE$%WodVsvan}S
z1Cz~wH0X6@?v8uDi1(Nz$$M%b7N=($g_1Dy_WGgi(%}hyovMyZ(fFVmT
z(sCw)Yiw+YKh!P{Ix+hFec&SsRBKT*A>*~{YaBps!m2Xm3!fG)UyKW;T;^Q<8OalpaLck@545iTz8&
zKP=N4deR*bZLD5wl2!JcDCsIJwW`{;QJYcnzHtNFSUa8jWWT;kaRYM)uQf7U9O-{V@f@Jg*
z_No;!O=1OW?X1U+$A!};1v6z!2M$VqtEr`iC!s=>}hy^_68=P%s#a*Wef}5e&wmtvl@X4LVZROeNAR
zMqdNkA*0j_$D)0O2AGjzKCLy$LnGDl+0}}-w1r(j`#KySjyGYAZ}Lr8k3atS=*Y3#
zUcc+^d%011nk9Vy>tAO88MU|MjDn#*`kI2L+95%=p{(`)1D{k(q*jqvpL<4LeC}!L
ze_&JPG{8WWTnxiQGmEqG>Qm23GB9dh&|C#}0!>tm)&p6*eBq=l9M~_ewt`a+R4%sYMMWB$81bf!Fd}RnaP8oTY^+Ms+7=HSk_ZGcEnT`j=_@!L
z!#`rYc72Tl$W2&x%+Ke;Fs?%16QVayKJ|=TIeSLRIg{p>71P+#65~f-{jzjh4Vq+6
z)+gld2OgHJrtdF3_nbWU^iwpSVtZ3dfX&raIr-|Va^l68#EAo{a=|*26Reuf;}l0A
zYObwIF6Yxs3WiST0AX?!q^*2y^18AQtj5+#r3d{F1Q2~q4F82Nc7lEfIwWX6M**3q
zh$ZMOHTn$fySqZ
z2IUbP>hx!~wzT8ZAL|I+j5RJ{Zo*pI+PWtg4)28u`PNoPYBeoYbTbY6E%ALw8ah(Y
zuE_ei)AGcle=HyTrOzw4TGaMuS?+!CVR`b|=V(B^t@S;CRgcbek#5GKl(ZXRC$M+4
z+5W`lvj(7$Yqp_S!j^8-*?k8nn*l5Z{EMM>c#pDIw7h8Le1fM#ZL``F
zHL$%X8U)J*YN6_N5AdqrAnS16JcSuGsy*Z#B%$ccgp<_JtQM-zxLW~4vS&5y_{D(1@^u3{jslpvQHvTxKv~E1?U_@jBwO%ha%P$s3W#WsNgNG&
zV5GJzEBm5c$I`69-8_5lfr&kPq^l)Vr~w2W6&N|hn8Jld2!1B0>iP@zoXAk%G&j3<
zL9Sf7C~X8q_~&Y{ffOS(h0wayE>2Fb5pssWQUK86>v9EHKLj#tZpjeSx7vA0h7si(
zlM%I56JPOZZxqUS?fx1E5ZV3trS{gwkte?Kb$RJWk4d#uq$bC~Iy)(hYM_RRW)bH^w5?iKC#X!oQ~
zY=v4UP)dhALrOIVk!=*331c*TVB0yRZS2OH;c#fq#8xf>2At(EaOikD0BeTBfp}Um
zPm|TxA8l<&(Ap9w(o)4TV$ERY_6Hp+t6x|33S$i9CaiG)xe2R32&bW@{_+pMEl)o7
zJ@GYL7!A5|@U~;}!O#9OGm$~J%Ycw*#{${L=IJ+xiA3qC-Gl!L1%_;blh8c%HPy#v
zgx+X2U*g{ZQwe%#(K@p4Fzg;;GcJ$d17RLayK1(OwYsY5xyz-&V)#XY>
zJ41!ZN$Gal^shnYfpCSfePS|^(J@6QCQd?9^)cHsH#aNgnMo~ux>TEIu+Y-Q)AEfT
zxca>ah~Tk6TNP8qhHsJ)f`NubkqF!``?#mo_U5TJBGxL-gdiu=of!YI+}5h6y$WV`E-L73OQNTOytRL
zJSs1~^sJnI1-+-Ph~y^?Ncs
zJx!q`WGbMSWl^#q6M?e42qh07I0OVXi=e3)$e_8c-Ii_1*a>96bycvDB0BoNNyRUgPrNMWPoAVB8vsz?0qC}Pe#Us);*`$iq*N}^fC<_eF_gX(
zGeE@v{ZvrIINh3dLPnY?w405JoId@YKY!pK%Ws^xH&FZmW>)pt2`SD@$>lTWP$vl#
zOd;|UMFs=GQ<~vGU_voyi@K(^1e%>dMV)HvX!p{>A0$p_>bhVZ#^n`1wcEBbsWCqc6sO*KP%cFA)^wz9~eSjae$I$FEo+@!&Em4vJi))
zE!|*_Zv>k4zfsaa!5kYXR7}Bz4-ML>w()JDY8Tp^jZFn!vze`W{XK88R~~=7ynOLO
z6}ls6$%a}M9lHHC`uJ{KSv7evt{LrJrXWVfktGeaKeVK>JpOqE4`96~V4ETkfISQ8
z0$@5(XetqiEMo>J=xYGcR<}Ta3APUC+F(8pk^pqSi`c@BgHcAtYuDG$NgEeWu4N3*EYo*F)Yim(o{8f1mYjf@L(ZLG$v}R70rh?mTfgwjzY=}$6Q7ou
zy-QN6)?{{Zk9_7genakf@F98ZYhRLQzx@sIFqW?X;*9=VzF1N$Qa7E4w0y`+1R)eU
z7vO+kgMny8OB77P>c2biK>>hD6|g)r5@amccn}~4_1o5LCTjQS4HG0$b>-}-hvhx4
zOJ`2r)9DP{yka%ldSTb6*Bxjpx+Ix;S$Y~&92jn+oT4DoNP|JZ3r8W|!B(;_UY1!aPK|WYBI&uiaGev_n0N2Os&k29r5?^1F}9(?9y5Y_DFFC%*E>
zBv=6?wPS23?PLTP9E)Vo*(9HWb_cYL)D062SRNql2iO4xbFw$#F=NHXYc@5%#%4qL
zlAWkYZ)4qFJNe2T@-ElT)b6<#UcNO$y&jvJdu#c!3{ht3&!|mJOGitZeyfS0U&=9}
z5d;>kP3s3Eo(w(+)Y?bdibd&x>u@qCUtq%BW48tw78tFNgLD(kYQXjAY?(lVdq9-d
zU?dLAwnlvmZDGf8CS|;KeT@UiF0WB{7-#H^ENd6#OTYI!^5_@8C|hf5l#A6$@!xSGp2{28ol`52oNTOmXlj?q;
zRSMN}F?|=^*h9%^R?^ds$sibLsWBtnwN+_dIzK1xa$#!s^y$;nZ@l!v=ZbkBdTLZ(
zw|hfrtgRErC}s;%oST!a?S}N*Emkg2A{#~Ut_{tUE~af^D&;xkrDQTN5!ae58L?u;
z*8>PHmaBTLMJZN_d{{%xa>CB4cp5a&wSjCRgHjCQm?B8SzGfn@$cU#BxS5aFuC8$a
z+2z%2ZcRV+{qK2S{TIJ07qu;W;q_B;NrMS$cXU%+51ud@6rgP0?`qc}Lk$fmk^>#I
zwOoNhSvZOaI6{0G+8>SrvX){Q#oCm%e6{5nLdGu?loSXa{ccYIOPABFpqZn!xxRK;
z=9dn0mZY(^BE!w~s=SA_e)_~6m(HG@hxaZ!Jenz#H9)OhxGc>^gWzsuqArYtrfGAGE&^6P@HC$CX8XUoh1h(((6YDCe-`k
zL14*E{bBGFYe0e~8YB=AkRr_fk2O(ueT@UiF0U{B&OiH&??3uw*MWtBZlZiivyO!s
zlAoaU(N?U$0#FJ}KwGl{+(I{ah7N7UnJrP^bD$e7PJI0ZBPKtcZ3*->ijpf-$0h}b{q3!Vix)5EqGYlB_8Hz(3WO(2F9(HbluH$#X$xPh%DQXts#);f4drJj5${ivp81=eaCC});NId
z;#zs(g~H0|QxDgQd5)rowl5$2*e7IqW>)XKFYBx8y5UYrp_BuWlI>Om0+t2nM!=*A
zWU)b4dMy~u6J9i~^wh;bi&Vi;2ja+C3I)X^TxAuA&C96Mp#xlAGljKt=cP6~t?k>A
zTzdX#De5UbXm0J5c6(9YoUhTypKQuRumz;7WxJ|41hEmw~cbDR$nq|Zcxq4fuo|;Y?N+g^*+ZsWkq1Z)}b2|tS!Jw_(7%e+|!=_EhTs0aZ
zNlJtFGVpIYco)~1
zbEjr{VNiJg$388e|INQ9hi|=IMsTgy2mZTX{gRx1>3Jzt$_Nv*H$dRv2eQNK5M!|I
z>j@tW2OLzxJd4YD5CtUT0n>Oo+2e2Z`_b7zsT2=;#<*Jd(#G1dEFRvY?cIW$dHH3@
zD-Mw@RwNn@?8fSa1^mcs)kHo0gC9(;URpkqFDV8?IYNs=Y&P4nz$ElC6v#ZMnN?^R
zQrOhwq!x;+xG
z5`h_$tEEdp|69v}piN##OWVd(-Rzb6jBGS}(m8WlDlRA&=G5LebLJ4<>$Pg4o_O`8
z2YZdi1c%-DedhmATA}CBHnr2^`dYFm98s$k86XFp7J*%mzPyYjP%{JT
z)YISwi;8%pc#4I#?v@4@=!9sn%V+=z`qE!sm7bP9<#LVJhQI+PDr_G-cA<<(moerJ
z#vPcOu*Lyo7gu9t^}yz(EB1+(Uf}@QrSosdqkr(b^4c>`NHM3SNycNkF64GNoasQW
zj)`291K5n{XiVyf8@9JKfb@0afnbHnT+rNMzSN-NSBwCn806H1Qxi0I(+5#n}8;y`xL!Qfg(w$7bSoplp)U`!Yl~CBLM2A&T8qg
zthkG9N2EJj3XB%21?@Bq72AoZTISf`sU*_rXt2vThWBBI;v^l-ZrTtC&`8kJ-}{Oo
zb)~s{L7*>G%vHn*O_>J;cMjfZSBe=N{dFN|6nJv(+&GBr@*2~9cX6$)TzbE)K;i4p
zJuQt(7v$AfUXh$W;WO2u*7Kn;g|@7ej&5;S&LN31;pytZ5>hwHtl|jS%WKltjfM^9
zIWaR4$I_G6?$iC=^70yrMr@fvr7MJRvIZRg>ISo6K(<8v)x`MwLKqo=1Z`<#A;Tb)qLve#?WSyQtVu;P23Sde
zH0EpO^S`zC=RtPn*OeG}zWwcc?ukTVM*+1Li))D@MNt$fspYm>a<|8A%h3);JE9ey
ziHR9UIKm!H%*-Dh?HOx4G3^e^o7$3PN!@Cxn-WQJCyT|}Pz&}QNFev+<=fY9@wxYV
zNl9F)K(YWN#CIz)fXaON-uDvuJKw$M+D-It8?xc8K#*x{
z*U=>pB7PyRN7B@g$N0K|&d_2=HrNwT%(w~7WGN#iM51yu$a_=?AfCL2@FZf5m`+n-
z-N^NK>J#t!hIo1BUwNgndh^C?lFug@m3Gn#sr#Mx43%$XU`__xtacB#m+mOpX&P}K
zOCY`;hOb?-+ULUSbeup5UpekJ%a?&K0OE}J4I9Z60hcPyZgmHlLV2*)NdyFByj`T!$ml~y?Bu*TqqPdW
zLtD{kN|l7;F8PE0-DP+piSn*4*-ny@YPa3Ct7~@-z3Us|bJf@H9$`=r4$Hv@2;ZV>M(0c$FCuF22uj@`9ke6i4ChmHBJ(BIp7a+W(*+rImQ5TpQ3T|
zrq!(NI<6DDhG}01RZonjW97655k{l-hH@S9H6awGiAqWuUCt!t%ltlZaPL!vpe!8k
zy;Y{rPyjIu;R<@{k0AqS;mF}!o?Da{vHWW>6G%`-HQlt%oTy^s+PeI@e*5P8-s!#U
zDKvMl-8dQc`nm%~mrRT#TmeHF!`D%LaY&PKeKY>LvD?=98`~zRuzd2=Rn3VD4#^b6
zB|hxOE&0s1M17IU+DS+c$RPGVAzxCxaa(;uGT9unsz7(|N;8?wY%Er*Oyz=1jOub-
zzf64tcb#1qZPcK#ZKJWR#@-}@tXU}t1Zfr|~KY{zti!zNd6XO7dGv4NlN@-%Kl
z2j>bkXq{_=*kFttEbhQU-5`;O{e8o_z>EWZ(*B7Vnwt9(0uCR7;}MQ$vT=ygZ))(|
z=*BGqDQT*vTC%mk5vh8`=)%1xbgJ|iT{&&?IH(CTQL@=FBW#9LZBGAdsn+z=xN9!&
z>e0E1?nYTH5ctPvR89uM+tTvuV%vqFI01TBG-7GV{WWM~){ITSw3?n|4;kf*AdPl<
z`-ZS`L8Z7Gvp+=6uw`ecFgiHqUiMO;%kndlXl>()nhjefKQ0zzGgr^+q*NnDy#p{mo}
z(uAEjcPtxeK)OZI;D=U{W2Mom-il14f#zm1iu}BeLBFva0twPq(2w%Zsf+l_TAIZv
zIsqmLV6|VTPFnTK@@;C2%>OJn6;nQ~M=lB-$133hwzyycwX;2Jgm^#tu(4mJ5Vl=1
z=59WorRJ>Aoz~_{q6L%X;5xp7(_nE?{L1*6!CyD(Qq8$X*>{=^OnCJ!i1-L2{8?!Eb;l%f!fDJZbLN(Q&@40utw2VPdZw2nw9utn4`kQEChyCu_j^!<0AR~
z&;IG~QsV_bc4JF-kVl|rAnO2%ILY*x5`mqi
z)Gz4-uz-{3S-cpi0#)4KDcv1_5~5h})PPAoZC=UG2Co|;LFFse-1&3Ev`R~zNXy!;
zQn8MzxN_R05%3RBk_WN>-eJEBA${l;J7q6;%+55`PMRZxDN0ck4uyqQ1=G9e`cghD
z)5i}i0T2oRnI>DGiDmvN@Oxq9iZ!NHAHs8;J{h4dQ^*Np6!RGpnC*NVZU0K@hESOAE{Wx@Y+>!{+
z;7(JDa~arwsdbrqGO-fpRU49qQV~{do}GpjgV7z;_|TE{(vGMvx7g_R(SH%Pq}1*M
z(j}vLZOPE=#BTEjeM{HB$`YpM0H$&zB4AiRwX4p!@Y#eiaBG)M*Za-s-Kvcqm=6tV
zO{oc4YkT%klfWAkg13No)A9;!#-Y-wx4+oAK2OSnfh}Ml9tqhvR(n%IlSk8B3n{r1|FO*Un8s^
zy;ZMuyjM>%Dde07YHVaaz-SU$Xw(Qs$=-bYnjnp0;+Z~>;=j|&%1dd09
zEO%`v@8c+YN2q;T`1Bf3VU);nBtkDF@c7y);;~Bl*%&Vkt|YJc!$Nq|j%q8Lo3Gp}
zUP%74orJjB9oIZl;UW&dHNE+ZsJf97a~^M61%&-Mv4OHx#f?UnEG!^esruZ@53HKb
zo-$RWyY@9MCsICf5cE%`MPOS7&xRk6_#DSJ^6Re*_`YV^j%~~~_7F33
z_)jz~oqcjHE(@uG|9d&JrSx?;R9vEMZFnlgpXB-E0uqg#Dr%m
z29HI4Laq#gdcQs7~DW?8lEq6{Y_`Z39)&aV9=L0at9Z3
z6!YHsnRMZLdz=y9qqSecCu|^-4<#pc&4z8@RCjw5Ow^cafu1?m04lm94F
zJ#Z41FQnFtslDQXA%{Q)^)PPDSS|PTsMzt0;1XeSnUbjFiE9%$_PtJ$Yx2&jDqF1+
z1{Gy0iOblGH2zop@`o5ZW`+;eR?fa=l9Pbc76DOA!Ga>R`HzhKZNm~9=H5n+1;=w2
zwBD+aCiscVFvYu*4%=E$-zH{b+~hOV9(>J=;TEcImQYZD1(8IqZsj_DCM3%fEir<|
z5Rn6VL`zbwoaXuvs5W5P(cE>2sewtPHJ$b%!q<@t6ustl{3fCex-?u}U
zj2jzX4Rtu>_*i>;d*?Qj`XnlW2j6eL=P8klPtmY;@3uGD5`~l}Pd6CKP=eh8;<=K0
zu^zTSBs(ZHi7z(})HVijL5Uq+dbo?{Jg)Rgk(GV7d`f4p?WQiG>DAhwUdL^`5^I4CVn6jRsiG)pp8*H%kUi0%B>7@Q?dPVK{-Mkb*XAD7XfMv`@oW#|~f3gd;F40Nk
z3XPz0I_oYRMc(5Ih~-!6qQh=@F2ioM<7^?hS#bad!n@AF
z6fXq~1hdta+UpC3?-&)j*1jxUtj$Ku6(&$rAN-YZk9(f4h5d`lwN}A%SkJYT`xzvm
z63te}h!eGmJJjpaixF2*{-Ctcn?3P`>_4Xl$j-8->9Q2#os3!OiWrC1-U+}d4
z)Q>8?#Xy@Rqpau7AUmn%S-!*h*%@a%|q>UG$K)5M7g)fGLMW
zkCBpB7%oRifojS71oVM5QUD3^*c)y%sRn-q{dPmJ8X75iR1m~r*|>FF0w
z9OBL&5JO%RVBSkxmdXN-v?EzFWN4NQ&9L+9M+5lBDobL+1T5dY)
zJ|fPJ^NJ~f;@l$f6{z?8tP8-*wG-IhA+1O>JJA*ZAP-*r#Lef`H0tDMO*F8shGZL<
zU;oW;HNYBtD9Y95?7;o=@b^W+^4`r8-mu%o4n4d$*{!4YICmgl+O37l6y{tTUxHB9
zy@qFm_hj%$VYlxJ@4fu209sGvh)iJ
z%VUg(;H;8`>V=xS77+OO7!zm)+1c9qeR84~)a7JCuWz*}f-3chN26I~N$89C)>iL$`}dcuez0hrhsW5rsJ9FKmNjQy
z(xVl%2-M`((QZv_OF~rGG
zyU@z@J7RX#Qa{lW$z~r|ihf;Q;s6?n2szUcgN=0*0k%y>OnF>@3N3YJc6UZ>**a)+
zRe3s1V$|E`?#FXB{V4u?*{i`C%0|A1<&e*cAS=~H;$egUjE%_%@8oOR^z?zYh#+=`
z9}h3(F3tv5U87()!CLjy6E(?{DMFC0e@a^erpuJux^(_A*p#4rG>L$A2z%76gyvU~
z`+d2cO7QUB-Se&}d;%Ghm3o>5Mnr8V4w}tR;V772=YL4e)f_0PUqYYqBG*`REI*sD
zY7X$9`@a%EUH?M6E(%$=xw#1vO>tu2GaH60Eq&h(#MHkE0V#>MOx#?e2*P#~zZ4BK
z*g@;&quBib@wzPS)8!Tgob#T%25?rvo+S7&JHsS6!1k!HQxQ;qF_X@;<#NDOgsT6X
z{Dl3fZic_dZm8~H5y>63+d{qRc_B69*Ggjzz|mnCPML*6_R6TXwusx}9k!@e3p!bC
zRHIzNJt;~!c|ne@`RNOtw^c}Lom8MRUCmNTfM~7?P<)Lx3X3Y6EoCG5@
z?T=YMFvg;~e|03okpEhnI*)@~Inm&1P17O7XVch5eGuPr^Tbw6CQ=xnP{#`|ECMTL
zjmN^pOKTtNXeSH4nQkIdKC?{YqNR=H&-~D-_yY!q+N&EpHhXo~PEqdl1=sO#Z?9ts
z?2bvv{h{EN=6ZJUhBvVvBbuy~7A!|N#T<~zEKmE*16@7?WYK4uBObirGcaL)IjVQW
z+Od%(J&p(`)o)NZ5rv+@y5@^UEg7mVmw>`Nmtr9DeGjhwML>=OMuf5-sdB!juhXKe7wELA(%JrnrAITC2
zxkL9Sj3071;x<^$twgm7>uDMH$L3lg7=exXASNRjA_3bUbJxytF8%9dc+}~N<|TvZ
zG9pAR)}IV6l1>qo0o)O=GglAMmUch5FPZjYl51Z@$xM$HNzh=mwLRPyqCrXy4*c7D
ztLAA8QB@n~^-7mbTF2;}Sa!9Ic0h@;#yn!59`wI;X9vjU2}8H=e2j=*2^=t1
zMp$?-AznX0)mieDS28phN>wcOiJ%?>r$Xmx)bYN~iegl$w&uD~5A!(R4ft{3)w8|J
z2U`E_?{^(x7ZXi#{z1k1$#sREbf6fJgWXXvvIs|N9u^yR>!V?Pk)L>N>C)-p3+RsT
zy^nm4Sj#K&jex&@QMOpNr)U78L#)sCime2a!Xib
z1I?_>QfqsS8K3Be@c_B^gAG)LiG@AlqI_iJ>;HG5eg#mH_QCR1<>dm>j2ej{rYSYo
z$j#v#iCtNCM_5`??RBt(v>ZRb)z;STB8-1gZ=i9&(zMa6wfH%C$udr4d#VE%k8zd0
zZW$lRIO@^O>kN&;6btF-r-r6Ty6zpH09Y*0?4irNp+U-KbPs;DMM;V}?r)%7Oe9#x
z*>#tE=di{hW>uUD-y-gi?qE~4g&~817Y?vnkWzDLAR$b&b^>GS2`Be6%3V|tPGz+{
zai=ARtamq`@Wd+8Keoaeo{x~+ZdgCO)$1uXYGX0meJLi?ejD8l6hd;c(EUy+)Pi4L=VY%B`eVIK
z$3OTvK8x;SU%f4&Dr={vgW0q_HRBs?0DAw;V*9o=6Jo6e2|CUH;_)M?IPX0)7U%6s
zvP&2D%}*3GGs!^l4%w7+jNCKz{OHy0Pe#vvx>2=Z5YN?T$|$}~vpW)W%-*tvqlDG<
zo&7H?~CY#afP^5U{oai9pI>22|=gs?yLhdzP+#sDe*(QI&lG!1sMc|dUz
z?jNakG!P-Y{8Z34E~YJJ__uf4ZTw0!d8x{BW(Wmd(!-EuR}X850u!QyuG-?SibBU#
zW7=;(8NoD4c@oSVzvs8YHtB#3Yn)zHMi(z$Z``))h%Rf!nlr)bm{DyO)(>r9GPPGr
zD6mv@2wmwxtxar7NF8am+9>4Wg@eC5##LArD93+A34-*aG&9;KReS6uiXEQh3NRME
z7k+>d68bMvH133?7aDUu4^182elpZ<4p?xhZ?bQnL3c(D4kXn|vX^!*>Gvr;9UH1p
z{p;GoMdqlVX=X^%@<`2bBrsEOq`%Jl@kz9oFWLF8M0GOQ;n%fz_9j)V2C#Bsy_EkW
zR^f7^X=LQ6B4aKw2whU_j61tiwkC(edly#vrXwoX%K8t-5N0nb;1fD@)7qr+SZ7|k
z?VDFVi4sD4duFEv(!=i|Rrp}xK_c4%VgD9xfk3`>WQ&nlMSe~KyeBQ^@rHhiv{{_)
zIs1`&2|;qKx|mrsZLHK|ZaQgezH?+ZpF?1PqeB_dKgGn=b<`z;vhO@@h5?dz+Bd-q
z<<2M`rjt59F{cmXt_O%;e=dY%|IzAwdDe8kh}>IT3Dh?oIxU%+kh0X5O(kupH14hi
z{C#DB1yC%vQZ2Afgz&lL;z$ro-P5c=$utl(6}5;xKE6;qe9pS$1VhcQWg
zOP$Iz65iRha7)W9?Hr?5w|VYlQW`?6#k4%a<4hy}rj@c5SUv`I#}{=|9s6Pp*WS9L
zI&+$gFb9$lT4S9xJEikZ@N3u^C(qHBFPWFJpt?(R@ySf4;c%b4ZlSRIo9aZN2~E;T
z($6SPkpBBTeAQ?EUoCG?$Hn<-(=cdy!306Sp2D&)In-X}bYv-d@pHPnev=OZnVR_=
zQ1*OYK_yFYgo-4r0M>_c84f1p+EHitxwWdCkHKc_yCQa$fc-L&K555Xe6S?~XwacjPq-14_Inaa7z|5I(IN@=?L8*L9x`y^RX576p3y
zZ2bfV<-F<*4-^`jzrg~2^3-`L^;Z0>1!zv&R4$lKS#X~uesM!fvmic0u&J2<8T1aI
z+5$0zdSOSWa|+o{Wx{-;3nYi)xd3@xdU`tN56od1hPs9-
zY$d(Qa@O~I7-^+D3+1T-FulxhEuVF~`aFaoW&h`0Vb;kTxs&RSJEEi-4&iu?M4M7HvUbh;3^{
z5T~RjKTf7Z%(kNp3;eRACGa&_MHgD&?s?Ob2AJ5=Z^#+Lf)@oN*YRiHBx@#&Um8Q}B
zjIEhPXd4J*bq_iDEsvD}RSOqUD;}^~pVsTp8^2Yy!Xb
z!H4)ht{o&rt{YFn5fF+r@vxqtNBC)i`2z>xJ+^c4cv8?0L=aoY?a0}pkWK=z8r>GaClEd?TEm3jpA3l&h2144C<-5WJL
zO(01w>`dFUAqS?f1(;}3EKq~9ZSwuN+rR##EZ3ehp;Pu!4|J={&t!Cey-fDR&@gA2
zP@&qCaAd~@jGEf9V&73I6hHq0ZY&H{@wd8qG6YPN6MIqwGISWLcEy^D7U9d$+b3;e
zHsB~~q&IV0$N~Q)d--XndUQ*5{ag4&vZwT@BzGy;IR`J8TJ$vpK%(rc^PWT1W5c*c
z@}BcdqwNH&dNUwxK2yd~`1-c=^x7qlM%(Ih%QAcwwj&yiWC7(1<#u>A;;^*6n>BU2
z=4M>1?oR<=fw3PjDv;vm;j{WB5pje2{D
zI;zK+rc0a?-3bSI2hBh%zFXSTR7HV^LyqODoA5Z&`q1J#jq46x5b;%PocKno;=5#E
zsHGv}KgImBQed#qLR^QV`u%h{BEa)eu)0>P?{;U#hJK{
zeBoT482}W^lNCSFe3zi!lYHZh!0}0%6(CQ{Hf3hwB>`F^Rc4tThOh<<*;05*gW?k9
zJRD5Wk|Yx^3FkH)r_=rcPaF(3WALwHY_)|@zk1Q3kNXndz+r9D
z@6EHp!nY4>{of@S5_A1dZ~Eh8v@jsT!iA-X-%R7%K9ha}
z)jt#ypkyvCEopOVNS?2AL_vApV%?DO+!788%ZGa3h|9@Y<4XP+>&s#+x++``ub0wy
zE-V*vXg;GkGY|69=;jjKMf2b?qN3cq3VaGvs%*3OUw2+eYC1D=L}0NN09tW(en8nWpokL>eNEk75|%ELu9QTCF^eX!XaLrn>p)nV^oZUg-2@!(u2MC}6U{=WqxA!v#?#kK_5(3H+BDG{4e?xK?6
zvE*{Y-&3{HkF3^&SYI4vE=INvym;s3E4@a4?CPU_t)zN-{a6i>Xf)Up^Z%~)t1%^e
z>0^_9@3UNQN+i7QH?u#S!$*Es_-FFW
z`%?SUNw*FHykeqKzYap3dathIR|XXexK98cV>(#v(vyAxIplVapvaD(KhwBL+w-iM
zQ669Q;7CU~JG3~8cX$Y{$d=bw#}K#>>}7-`LR&K`D^8Sp`|v|}T7CYsL(Fwt`D
z&b%AR@#4?z@C6|-b@ly8lmfV(Bq_t}%`C|+*FHiyATQYyK~!Ti%I^a8+C^nF<=nIM
zgO=rMx*Gb{{zg6YfIy2CNm+zrnDP00e>d_fKBA0_Tu7qHs8&Y}S&qA#h^|MSISIP(
zfBwM2-tDS7V>`MlE0y;gYPq9^^%xTNCyYv8UNBQK!hVo-F2bu7e`CpWd43w3g*LQK
zbo@$C?v5z!&!jbMNC(BU-(%CACQ4v&jvQS^gypn(3niWiqiFBzj;8eR;2_+^cKg1N
zu|FNiA@;Ya5J}-gbs^Aw1}Sn(%BQ1zWjYUiRJdt7`To_T>pP$GJLhbSQqbNY6qrZW
z@GK*@#puLcR;Yd&hqN3w5O
z8P{^mU0&Ir?HG5ddt2*Ul+Dw?yzdgmH;}lqJe^e#LN4wo11=s{yCBcyhrjB`p~gsY?~xZjos<;C@96YODB-p
zX3RzyB$(INX&Qh^?Y&rG$P7Xbz6}qI3|2UbT
z{pQVpk;-zEb}&_>xhCOfey_6E7xNJX75tZ3Vq6!}cfPu<7~f{W0m3O2WBU;d^u?pc
zamQv{)e;Eg5?WJUKiGGdp6zsWgqT{y=M0C3pP_HBv9%k)^QL7CM>=vx^NlWfNnXq@
zzsXa`Z)asz?#FYTf^qdvEI9@k181`oq)u1Nkv{NHRy)B7tu`#$NoCgn@
zghI?y1BNnAWal6v1
z9BmP0h6e*}m0i7=1%L7qk#{nBX7_pLPT{X%fmU>kIiu4GTTh2~OjlMD&hm_-bb;31FH8y$dbd>#~}eXDCelVxQs%YRNzvOljvFFLa=h
z{mADd`Og2_zN$B_vtU58fZUj63HH%xly54l!e4>ui$^IvyzDDiAZ446dBMau;hN&FXqj7gw{S#|dDyE3_%($4yK|PcU1L280P|eX|Vp
zbuTQ3T4`!5kEwB}U;RSPe}6zQl7ufN6Dk6qj6ecGzkd8X^|me!zXASAgN^n~bvCxH
zn`?}8d-+Hm4CZveXlT%JxN=o!F&+N53G-QFTn|u5zFh(M&^4oiaXlm@US5+(!*;leSeWX)M4fp$Q=GW^{
z&RNT@ZHtU`xzSo3V}0=z;}yU%yx+MDq}9tht#)EsEN<|%wDeBk?h){E^k+b|d40O|
zcbfHXQDamA@+uSnCJKCZxvle`DBP1oZVELk;z71zgCA{Pu<>$&{RFDQ_qX{gqaMa%
zNSSe%P}8}LoG@%R9NS$bM_onVS@#?x^`)?Rt`u?A2x{C@g?d&2L+qIvD3GDh`18V+
z4l+L1qXq2xhe(flIwdCt!@8Ck`;otm^j&+o57>rsw;0!`XM2_7w9IWc)Y1G^*)
z&XFii5?G7dX-5~Xuws1p;yucbgMGw-cBNIS_k(vG|u1Mf?$?1lRL9xF2TP=+Kwhu<`gQ
zZDbzHMvF+~bbonxSL;;%gpX2s^OcEZTaM1+-QA!#e6f))^+#XuPwGI*iU2hEP?N15CDKN6
z;2>&-GRuuXi36{EG9Z$j&#a=gs-t$)+&NwFv-oQsTq9~D7ftKm8BSJ^d{WL5%%lpO
zM6vE5N}%HxHbz3j43?ApTnAnK=T$R-)V8y|@o$6tWcI?`P)|s!Fps$ybDQ9+kCk5-
z*#n&oB0VpG}VxSCz$nE6Jv02)?!GFrr>xn+*apmk(l60R)g
zn#3TC8>Z`Uh$w5A4br%jdF&nxQiOG5R93kFWHx=w>#{zn+k!gXVWkIjDM@Qv(jM0<
zC;~|JE$@UYH0X@Vai|P4kijAT{l(4;TU2)WO!-3#W_W7oVU_lQl8eU|SoY~o9CiCH
z)yy$=cl1xD4svHUF&IFhveb|>_7!4lzL(~rc6PM@EPFc(7?6E4V9+*(g#5m~-8;i#hhDrr56?`sS@y4$B-D%=Vx8|-{Q83XKz0+9{
z`4#gyAmJ=MII5&dC~AVYL0?za>5lIAlx!uDy870}S5K^Oi_g~Dfn~gDnFsQexG~v9YaS((Bfm(X5P$Iznp_COt*{$#;CpIatleG?c86ztt!ye*-wt
zC1y{Pa=0Uqp;^?aAI-3n9*HI#C||deAWcEttu1@QpITD3WKhRNl|x0BbGK_CNz^65
zkCPfVeBp^rg|(j{JNkp0$pxTn5#+-4os(vo^J~>{rBCZUX^&}^qcxYx?ng-{ZceQ0
zwEB#sD}b+V49P4W8@|GDGXlz?$Fds-x1mdb?BXUv7V*I(C{|~=
z&DzDBUvd5l-p=2*4%>Or5w4=E+8#WgH+nUc^0Q==Q3RsV{H?5=Kr6`FQ#p(*9Lz
zp9SzC=8NfrE4#9BcgXg!NqbDF^49`ePwsg6vSYOTXw^&xrg3rC)K-@e80Z`=Gt3Y(
ztKyn86B8epz3q>ce({FO-(*+&AP%K?mPyQ&mv^&n4_jZq3|fohtEm6R1T~#aI%zS{
z^5`9h>EkG}tL?c#p8l+Er5ua4$SNi6YzHG48pG6wX-DtC6SAT9JM`iwX#)|8xY
z2aQ4Ib9J1YnPFX~XjSU^uvXg)m_ms0@cUUgc~~@$y^YVnXli>W5vnDpu_aj8_D^c~
zNl9~oAG}}{qSLx$O}9l2qHmQjk$O`tk(E9+FiBC~lh4^6`r_nQ+5a#cKe9CiMlYJ5
z=M@~1Kjx#ob9s}XliTrOze0os7ya}9e)t#z@^O9cadg3^X9c(qJxG;W-C>rFWmX%{
zuK&_tl??yOilq3>dsCsRlRquyyDkM
z-Ck`lf)cJC-$kR{kZv$`j>^P-af|dmraS7S+<&O$?(%lGE<pHv#Ci=&eWvA&u;wyH*e>d*>)-
z@JIX0Px=Ms%J@`^^kt0Upc;kEjy&gz@4~Vh8^7j4K=LE6(W&MEdE(-cn}BUur!pDy
zmarIeJW_YEZY87})!zKg)HKXYm-PL89rnaP%n!dPS1a)6P)LBE(mVkMz<(CPWRYwD8H>W)``8{X_mLb0hJvvpvBkD9*lE_?jnumO6NK%rk2
z-_)1v*|K78)yuJn09%NWg4omzwK$(?fpJ17!~~J`qiP!@4RFD{4p$@tqgGonz4k@F
zuc_8MnaL_Rg{a9&o{nM@Kc3XeSflq#_#
zof@(|g%pdM-9Q`*s3ioq$K9Q8D)?~)886Xm1+PWXcli@QIXcQfEdTT<(SIhad()N9
zrg26Rbl;|XVomC#I3Zu7XhY>gH3T&rRyq-17r!d`V10>t42W@0*N-jY4L1|q5gM8h
zv7*?ee}+9XvWnRqYN$SKjmg+U(etuuM56Vxcv@8Jo$r3aKjKu*K=W#?`qfB?!;HOb
z#jKw`0d;h4#3X;xTF13=SO8>8$&bnXOX2hsP_3EObwZD|bN2m(VHm0boysud+1<|h
zJ_{qZFflrZS;{JM7g^W?LdHrbA}KRg+AiD
z67QUsE}Ki)srnG9rxShcNxh^ke7PQ!eTE6SD;63PC3^l8;AZ>f=vDXmQR
zpeI%IUg9<^%EtqT25mS&1M?84H2#}3EJrd&j&CYzpN{VIs3w%Csp>T9wB^kO1yPwx
zf^+s$Z%yJ6C%1QJb#Mgk{M%JN7F|Vl^;BczZA;Rv)!f@2)bN*c+{CQx4>e5B?Q@I@
z?}
zNgPkwd$vhUclz(I$X&kNz!m;N=b;?KMLt|_kJ%dsVXg0mq#KRsMJ$PZOc+Fw_(z$Y
zUv5V@`c_h^90g(l3-n;^RijDkx^7n&UBO8U^x)DKN67GXdz|eja|I=F!bsck21h$4
zi%7tZS&h?$EpvM@bO@nK)pt@m{_k@$ESZ1UHg43i4%QR|tqpnmV*riizmTF922Y2T
zeRjo80c!;%J1?BdEO1pm***;fu}~UWSrVL?8Vw*CM0+?12R~@Sy7=W~JS;71&eR;M
zz=$n?Tv|6*fa+xP-t7K9-Ee*H$5(%$QR3?6@P7n5Namou$$9s{bp)|`L2II;Nxe!d
zlm5ns&1>QgUu#bgQmm3wQK^7|ILwU-+-tRb`K5)(u=jZrtQ7wYxE8P!%W=hlh#c?5
zHT!oD8{zPL8L^KOG*^VpzF>A^PP{^@XKzBiW5ldj)cB^UTZ4oR8JIaM`YLK|{vPaH
zs~Fomx{vp4f`(j{C!W|FGxFmYTaJxnhOR9+yy2_(=QlH&Ol^1f_nOhs(W~dkKs>Q6
zsD>X3c2^3B{6S
z{FlQA!Q))@oXnZPPVwNxt*_P_Y
zQ_5V=ojhy~wB+gmGUaUrSbe6Dd1u4i-9{SIl7G~|K>mUdsi~fCWv<=}&KCAt?6mug
zw_&xw5g5>$_1atR*<&L}ADD-541=l$;PD
zQmsiO=~-5ASHIZD6YOFQ33x<@=IIduPY!SW7^WtE7jaS(;wJ4
z2(;c$la`sh8YQ=g`I~X`A;S3?{)bF=?{g#3$oog)`LxKC@Nbro$F71nR&%Xa*cD1V
z_$S1JRrxSCP3qWeOla-
zKCaiBN@PZ`enZ;*jWtRIg6+j;vN&m3syYPTb|}S$6u~(8eNXZ2x(Fke@_qkhO|<40
z2j?7aR3H~)fKq@^2_^qzan;dLL-Y(M$4ql50BL3-evzAwrEC0-P_T2xlh(kz>2oMtzZsq5u_wRGnCV76f7N~&G^7xzkMbDs;SM2u=J
zgG6yMhjHD?rd-&xITb30$A3FD+olo{9B~T0Jw|O>UT28-z{slR$nb&&3aHC`C*`?Y
zK=tiGvU3Gmf(d0o@A#NXWR#bvp74mUN0{=|A0>By!MCRrEsF$b%lx6)?NvUyQu>8K
zqjE(uDUec(W_y5iQ6Rfy=-4Zw1a1CphOCdAMuC1$fU@BLwf;R0TG}c%Y<95~QLYU2
z{ZTTDG)QNjGt&izl-cOFPdQy3pm1Kxz~hO**T_3!k-O
z^8QUvZMWl#R>s~=+ssScrhL+MZcT{Gf3q<8GEO-lA*dUi!p4DoWY>bjiR@6KDbXoF
z&{}u#_am|vjngd4+sMf<^l|8OEUGFAb)~4krg|&x=Rm|StTk7sz$?@;*2_~1tXS`e
zJa$HnfTXsBeDw7`!;uJNz+PjB$^_Cv7@36S)ai`R{-C@0V#=?m^(@fp&RCSD&|&y+
zW}b|rWxxToB3YPZTza2zwOVy30#v9pP50H+l9DFpa92B?>0;A3sZ37pms;zu_p1Vq
zq0e&yNplVH0i$4eA%p}O()+>RjR>l_e#HtI`NjX88u`eR|Cj4+7fN{yjv&GD>q+!Y
zw5}-pwhrBOEu~2%nJ@>}L4M|Mj8>O*twu6qba}9COIC-!j?qR`;1x-X$4+v&PmpZi@Kyr3wt6#w+BjT9d(x%fcW+>bXG<#st6
z6KCGTW!XZBT(#Fn)ZxmgmM1YIr7Zg;!{oC*R$(Ak#`g$$N2B)A*vM0D0IKV9T4hj`
z@MTT4>aGE1%=_}*{6V7cT!pk@EO5xKP2N#$FgQkJyW3S%T4!E$jD|Bv-rVOABe_!*Kn~!fx4Sm18X#1xkLP&D*x4tq^D3?@Gmf>x{B_xrXsxU=TJATd+u6L
zHm(L8KlLS_oQ3#@io=(14ze~ux1^vq#O$8nSEWVy)fXBoGyT|rXz!tCr|f{!`!ffukVmH@0>+O=)?lapvA
zGYFe4H5o#_a+{!aPi9BscsMZzkbM?X>&u<~=u^-BIZt{dE$LFm$TDjkB{NNxX=OL9
zF2*LB5MofEs!?xuNKR(pHEXzj;VKE%lo~ZxceYTNs8G($pjB;X`9l^}*DRR*UipW)
zzDz#56euyu@3#YV31BCldjZdW^ylHF3wmw-po3bqiex5-iODG>_*$N8qE+9)#`+2j
zetk%(wzPN%$3Ff^xRVPo=1*eb1E0XmGtZ-ICrBVOo0^#U(bqSOCuSZYDEs}{t;Xo|yK;7dKwVy*kh5w11N^U|G+V;@EwCm!=TW_Mr?@J^-9_Stn
z9?EPXuX8bCHP{z}Wls!-T2nvF^`(-zw}L3}jijk%)dDk)(;xUaiQa)446QHU!r529
zhHroU^Ew|R>nmIBwzj@c&Q4g-aqzhMqL$|7;qfCh
zJQU^*zJwn&#*E1Wi7|le(>S@1U7MJj*^wc%KGS(wYY^$iy10oe*xsyBC1FV*JtdSyGle3mTRZ9nVtZ+woDF-eqmi(n_ZXRCw(1ag
z+=P&@1)Lz~;g6<(2SN(Y|&O-ehId$!0%`aqR0D1IRv&;^F6-2M!&+B@43$GI%D&
z#kwCd-hmLw{utfE9brJlBB1=4&66l?x2TS=bgAxQ>BcpZr+FA8TRY7rawJk^K4#eO
zGm{{R%B-cmyZvmh*PFZ7>xv?G*>s#i7!ENpyMT1D!b~W@%JLF!TzDPDjE6?EjSl79
zgD0NG)PZA|TRe%GV^2_hPGRY-^T-kmmtT7sSKoe2r*9p6
z@|nwRW;Ej4A-j2HHfJDnE0FmZW=2jPAN$nb!ZYvxAj*|VlqwZ09yx+SeuBj6ke@5T
zqWZGEb_0#&8`wJYD(dGc`EIZCF$r`;St`vgjiuZDANL7B#thbb5sy9b#9!o!1z(6t
zkzZwAKHj+!DG&s*c!{60_%)e|P4l2i*|1H3n3^b}ed`V`ymby%(nhb}(o!Rx&Z<+p
zG?KZgEE2BeMEybbUa#rU$3NbC;WNMd>cL|tP}|UYmt3GU83btY{#THNh}7KRaF^
z^)9g=PT4yH$d7!5;~U3&5xMDwuT9O*EK84t_zGDv#xJHq%6%BxjoK#>DZEIp-G!48
zIX8#R-3H1NlQ7yfEML39$M`x!BZkWp%n0gLlA1E!Px;qyLL&%=_78Ji*+MQ{SX{)~
z>Roaw>zdiPoL1jLyD6Vx}T-l
zZjuO1z?D@Gt#0vNuZbCu{nD5J%~My;y@I4?;rtsfqTSro<=zefsnZt;cO6&Hzlm$-
z-$1vytsv9b+9JsHlzVBlS_rZ!O3y`-xP4f|QCmLWPfu(IDiiH=Y34c}a=e$n{(n=C
z(wGC;$DxCD$B)11M3R}Y~U->L9
zyzwnup*;J|FMJj^ue^$0bq(2+2eBonlq#%cx@vi7%PNPBOnyr;2v{P-Eyb(w((HxP?3A-NARHP!{$EN8?|L%5Je
zyMt^gkLlT2+@f4tF6NOTpRj!6j_z;~YXEs%Wo`y{-@Jg;^Oq?Rn}{6Tvt^)Bts13L
z(MY7r@SOt7rU_;?eOx*73cmWMe~8r^SFw0-T6+2*M1QY0Ms5#4CUCB6{IL9G)!W!qqDXfBJc3c~G~Q
zjSTu-@*y64djWGKGW(I6+v|XRx9bV|{m}P^p=}08vuv>v8JKPw;>2ou+qxldd96z6
z*~R?9<9O=nCp60u;2Ny6l(}*lVKIx@g9`|lotSQtSqWrIH=<6*h};y?Q?p_af_uHD
zaXh?u?*U{S?`f1uQ!7&k7FyLCce84;Y&j~M%Gw5TRhM$a78i5ZQoq!8r;p<71R^)Y
z>TU}Q#YtSdaRG0B{o9y5bOI5}o6^J~eDH67nq+7hTT8E_xw~GNJfYcW@NU<$JRAi}YM&^(dMBr6kuR0hS-rlxjHNeUL$I_2zsoY}&@3v2
zf*LZ5wV~~^C?kM$WfNwh(n_XFcjUFk;IaQ>3?TbFdcA0A_Rx`6c5dAGS(%>;nRQ4f
zsNuu_LZm>*QpU@qwbfnJm{Kmqk1Q@q|<@l3WJah;dSs6L(VdKtq
zmPYxgv@rWN59_;vhs1NwJr@i&uHI_Ycb;u`1}IR5)qTBGbqsTeG&6|DAAdh3SsRY*
zup!x7+g?SI1nYp;eRbt7j(_keCL9)e!UM~SO|fZYnI=1Sy~){??Ck8gf$R~9F@Wsz
zkd1Z!)BpGX_2Stteg0>~iL4(6@k$2SZ%ZQ6A{Y$#xty2KKU*YHw>=v(M~|R3HAL}+
zk6_{C7u{})S&4_u?M>8nt7>d?!^icx}4gb|%wSmSxV>(?bV&wbOuduXu+td?
zPDYKEXD4ScHG2q^$vLdu{WI(=-$p5)hMCQ3IU&TSY<;u&SXstB?CqdhUHeqf8h(mT
z_P@Q`HNEk*&;1G$pHIt9mm|kdp}M_}oz1)CJ928&ENd)xx3`g!t#~rX$JY^4B$><|
zh#51pAD54D`FGh~XM{s^GA&&;W$*Nmo|%8>4P@iE_ZatqJOXiGI(sF|7na-Q0&>&y
zh!T0&nF+7)9uotW4$Kft
zb$53t@AfRuZ#?^M*C83vwTo~3`o_vq%1dNbQ-0?CAEuOBLZ{t}6XPJz{k*o?4ahED
zS9kJ?Vife5`3$53)8GBE~_M<6Et=^u3#
zjz9Ir3mDK&W(#mehTnxDnxr2*{vaxzs?Erhd9&&{VWQ!9>Qt_Bvm`7!H
zMh|a~gr{_U+5{KZV`efmuyW_d`w0-vyIhLZ*tov%`nNxicB8HXbWXZ}C!YN&^&7El
zTf1AOOcKD5jL0G}>hiU^t%jJbYbR~L(@{G{sl|mr9kh4RTEBx%t@Sk|lVbw)5sEQ@
zJOW|-=5K}v7LTl21dJhN(B^Ipwm6FMqub_PocxEZnv_)y8*3}Lb^W?Zy|V3XZhj6^
zle5Sqvq+MUC{0fz8uS%tZeG8P&E+NSD79VdV6)lGzteTBt*yDO=8n^EY~%cyZ@^=A
zF&uOSe6YTL8_O#+;`vU8WP>E
z;}1fwm@8s?^(t;$okqRh#O1f%#KPfua=IbRsDZ5GVddiMxc+8<_c#Y8?9@#sKn&L?NHsp?n(k`vYTcVL`n{GrYqe
zI(C8?$2FD@K6(QmGqVS9lH5lC@hk12wY`O{JGZfQ^BQiy{7vSZ20rwk{RWO6`4G0M
zO*JcW$Wa&(h2de4kk|U|4$!^-ulu_*rsoxnp$FMpbN%c~s5ZLDvrNjBC)9l`n@C}n
zoXqy?=U`N8$We^hymS`lzVs!$|8M_oO1upeOOqsB%jym_Zfd1P}0_H)JOA1PX;R@8$!lBFAz1@l)g-3>`{C*n<@g
z&|F!=L8>z+2rl_Sh&xwqY3FDnX`)%*RMOS9tZ8x)zo6Is13Ez0mX?3I)oCUjexDd6
zr&3u2mZxRPfSe0tR)<{3>iQaXws(-r7nlVlk>PKd$1l#7T_l4VHgBE7(xo%F^5(0!
za_J&Ey!P_sbf=KcZDJgcREz=SKE`|5hn-0}H(07{Wy>XU4J+gvHg(-)uhquFp@Vpg
zS;zd$6e4NPiURc8O`LnbeqZIpDVWR>c5dH=SRkh@6TRj(W!QDe2CSYx
z_*=|2{#qHcmwiOhHSf}!FaLXvI|0+1LbpFem%t-X1j
zM&xW(Ha9SF{HQLw%H(pGnJQy4Ya{Pc5vtwBD_{Kr&R%%C*|+U6fIMO`E@2*(@N&IG
zCgYpr8CGuHz#rVXg<=Ymf
zPo6+^={D*cLUit8I#WXGrLhgpJC>!@D6grKoY2{&XZ
zVas+oU3=MSxACPfehybJont2ABPZFw?iN~9P5j}2T!W3{ANeQ(mNAr1=CYAIQqel;QF;I2vd0^Dhqh_^bE_7A=d9)vaLk+H(ITY
zFJ>}R8++x;(z%!ZgMPjGWNu;>>IEN|77P
zL1T9pi!Xc-
zCpg(8JY*@AG_FB6Oi(tqLN!*7B9>2!nX=s5gl#&^
zDyZlX6ifn)$#SY)tzyt=Ayb~hPyd5|q`fCMZrsGw+$3e&r1q<*yPD%tDC)pvHWN+G
zcKeaj!g~?#-LUC6-X+Ey$RiS|)QmqlJ=v`{nkY;kz^8ukm$7y8HX2k=s_QExPS3;P
zAs+f6o_P8LlxTC<+#>(c9>7giP&oX!_K9pPQ^J*X5F|6D?L3jq!ge#v9!SDcY@J&;
z%XSKgsJi*%DFO}
zFyw3YF?ZxRW{y08DmjwYZk=U|?E3X}lU{RW6?MwY#p5SmoSvTkp?BeaU;1hc9uF+W
z8OS3N{rC(ly19K!TJAIt`@C!J8_5wDS*Ky+U6FC3o8I-3cF*!A-yI~F=KaDrv
zcnuRg$ORsH*?ym7`O#qM;1OI(l@g*3iC3RD{cwnWbC-%v9*ycYUVQ201ATi^7Q4K7
z=H;*d`mNhn5m*$5ZO@Ro7DIOQk_NRX-ws1QM=yX=>r!e?QKn_4lM1N}l~K+Y)q0>u
z0yjavW%1}USY5h?+skXHP&sO{gz0vC9RKt$V&a+Szs2YMp-Y%CRy^Do1IQy1{l43}
za^Y+%^oMxti4UsB$EW}PzmI?Uhrfq?1gkHBcScrS0wQv}GlR6{;_lnFB~=QtB=?V41YN
zO`d~taHTTI=bj;el#pWiQphm7DVAAsrI~%$a4l13U=q_AGt*X;>^R(zy)2{>9Ie6M0i_;6Aei=}z@{n766U
ztT79aEq3+0*RXT(E%>`t**Xb}0P*zmA69kc^5sitw%R8Wj`@7Q-C=U$@_SdYv9*CM
zO0Jng76%Uq=pZN4I;H7VT6MbeH{b3)kz4a!B@L?M+F0)){t*x+3Igb}U^K*FP#jjz4q-vHb
z%(c@M9GEzOoL55mg^%IH2VcOsw_ZhO`PxqnhCekO1W|cweH~uL)O8S()AKB!QhW`b
zdCx(svxAj4ZeXI`!fJ|O_Uuutf9ozjM#=W|FZ~6c%Kx8Hf9(uKoenC=L^CO@6xirS{K;ykQUHd!(`I`hDKYqV_5crl6^{~6Kge$Lo
z1Hb!E{wrL&bP*nvkI6~}CmwqY{q7KnbVfQY@ak8;jIaIKpCD!TvGeU0ar^aGDAOKb
zCNltf9Ta32?ZytaS1x1YPyZ#Zeg1b~1U3BZFZ@b0b8tQz2H~^2yW95W)?G|a%;D6D
z$EfIJAp2=#oo1(c2VGvv?%EP6EM*EQW)u;#jC2|%vy{br4(m%xm^{3QH~--GaQUs*
zP`h;vE9Wl4rF?w!^piNwOynFa_2ri_MPPgK!ym@CfA4o?bQhPt^))PC
zy~J#(i>H467jf{!37GwEALDrBVhkV;G=B6f@xCWcW7zFr;@|=7+*w1j(Lp+2)WzK0b{9RK*J0=&Y7NjJ
z8QacJ!mtXkO&`Nx3+2j`+9r0y=R;i7T^F(2ASKz>E>a$lO{b7dNXC)GMz@EV`NQZo
z+LU+O*lGJPsn}Rc*Klij1y7U1+5Yw!EMLBW6ED1gZ~yVXz?H9j9#*>_O+WS&n$_xf
zox>v-V*q)e@uO!UGMDo4pZlfX4g1k>of2w!c2?chPd;{v<;w(oDj$ulP5j00{~nGk
z972tyNsEX7#ED~AxqJ*>u;%9RmOitzT_N~j9JM{#P9Xy7OwM}gF`=~i-EMzjc
z^7R+tQ|_HOb_n14@BbGVxdO`_mN(0**j~D39De%!4YyFafN?x>anAtq2u!^HjgR?*
z$6x;Br~l5<-}#UKAx=H_Jl_AI597&aomj8*d_6%A=Am
zVExWAhQk06$=1+xFg;m8E|bF+|KFgr8f>d^*6k$R$r;$|OK5aL9Qv7$AtHHu
z{aY{L$VWbeZmo{04ANQNTTg!cm(ODyk6ipEfV>Mrj9Yphew;sle)HHf&wS|#^KmQyG2M!`dx%Ae}D=5w!K*Dsfa{D%hS<0moc>;-vL$lMm
z1gc@i%cz1O3me-aXJNv0SepnqgjM)dbHp=M`b$h*jseD2TwHQspTB{)HZ{KOQj
zppSN=h6>9ZbbYLCu9FLy*5SDp$yT4Gip?YIl2o;`1sJ*whUE*tt^gu{Vl)x@J<7BL
zZBLgic>P{m4S{SkQU`WH5PwL{gpzJ~wt`YIi5I{14ZQ#7K1t4m)>Hz9Sg0i
z=aHz)AS#fDu?JXs?KR9l_hFc!Y{2Y3UcG+d*yw$Z%j!oc?l}V)$HR?1qvLL)v3utA
z*9YIGMEmtGe+j?)-~TplU%HH(XN%R3Hj)`pgq|NDUoNB7BoHvWFx(WCnwC!DUca->
ztfR+rrjPVQ86p4f`=J61YY`<)P4XPo)my07yJ{39ZSKB2j(=LJ#>g)WPd|Yq3PNJe
z5T_qMf%?`88U&f6r=P&`l?!kPD!ohz+vnb-Tzm&JBuqoT&dOUaA~8FMnG;9R3x<{T
zvv2+LnT|95zucl$nN*2$S^1hROW2RcCj5t((!
z5=9J#B#Rg@>sVe{M|Qe|gyo=0rR3JeD(r3>-uwhyCqeK?Gt+QX%^3*ak#uqG+{;vN
z+PYMdB=oUWWSq(RvTFkQA`S*EtS%RGzts*?VIBtxdm(FlO>6S5>K3`8ELlzX6r
z>e@1LEM4a3=Fr*RMP+^-Lw|tQjjPOT(kM;OqFl&h=^I~QHj+U(NtrlPO0HkN`0vPj
z{6T9a#4_J#rp!)wgtUaTd9J2JLnS-A=r3H!fRv
zzU6uOcl~P=D>nUs4=WypI
zX?7I|-BJNtt9SnWXyy6=d7tAfU65sFl>_XR7*lLNrIES#BkU}#H_=T
zY@shrom5B2O(dwuAe}}kvN2={(qYNtQ(m2%D#G7b#?94rl;;*uzjc)|?i3$0KxE0z
z+6dWFmeofNZ65LtL1{<;A$IYZg{EMp5(P1sD5*Noui2)JRK_FU(!}EFQ`o$AjUbhW
zTP&jzv{Ao#9Tu~mB)ONIYg6uBM`HRY0j?|WXX@>*eChut@AD@s3wd<0att7kSXfh2
z1Ev|hA^+*RBt;F+(`i@{Rzn_OC*d+1Akj(LHDngyCQ|%hP9X%VyaLAS4xaUzq0LGre>x`H7k
zU7s0KbnOCmx2v$r6NYTi3%zt|o$D@9ZI{o-Y)K3yM<>y@fp1I
zyZ;Q!Re6;Rk)W@cOR++3qSi*W)9mDx&)KJ(s`Y=w_itg<_KE(BoaXfo8SH#iYK3gJ?x-({Bd0R+`suxJ3BjL
zF60r2F@QWGv3HP`u3taa8uU|1>DREtGSJmBrZw~t88#fpLU+Vfuy)`bJ%h!^pJ0j5
zLpT_yy`l7mbf}6nd6=ikMO^>#7tmcig^A84Ui+ip2fQOZ{60*oI46%UqCqfPSz5#9
z+OF<$5z$ws7v=?y|;SRO?L6Im*iU=}1m;^p$__d3WI(kkf=ce=1o
zo<>_h>FzSz*+ssWB#cCa?RIzK+Dl*myYha=S;+p5F@U^haer@=dk5+A+vlDa(oz;P
zB{BsFtR(rTLDDm1R$>z%2A#HA3#PmzR!NllN1w#uXP%>^x=E=w4KY6tq&?jx7m-OI
z-`T;}zWEY9@N54evw_dy{MA(wumx=rd+O;U$THRN`w@1Qcd@x%)%Nu`BDE^i4`w}r
zSp&+wwr%T5%a*jkGxLdt5enp497@jR1T!bc#O9^5C?0wot=SUN#VJu>V9n0M*j~rf
zVX8N0&-}yn_4P@8m2nobZ(|G~?^(#9y1&2Ych8?My?yr0Uzo}iseuGY$t(=jk#shP
zN;X4D*F}OHh$&zqc7~o!-M5A_uY3~=KmSWC8>Y3Rv>+UX@Du#AOCja?6Nhl~OP_`J
z+)rVF2mRb<{|t>VOEidZ{Nw_rsH#Z$Q(zggdUF-kt@h}OeEkKIGA3eH67kQ$pvTh3
zq?*%4i&;#VE0BAsA<1iPvAmh5WV=wzVsm=~Ar+wM=Uza&=%RJyJQ~c3@|6XYCJS)V
znZwt={JH-o`oll8MjP_RzpMK&#{VeqY24pz`{LD$Pv5w?bgYteF{F|@IXi`boJ4|m
z_9Xd=Y&xl2L#|XpTe1*>#8fVg{*||JyI#Yw4}6R=ZWDGWstL1-kV*^7pu*xj!umGe
zc>5wA`}8ki{mfTz`SK2iodhNqW^tH`Nqa!ZvdD9^hgiM4P5AP)iOi7SpfFZpgn1RG
zGHGqMLK3f(lbwkfY%Sl0!*Xcx1MkPpY8}%U67ULGy>^4wn?ak`;yC1Fu3v$9gd}de
z9hK(~qH*{3uiiK``<)i|F^KHH82^JjLh;JCUwOgt`?k%yeQtIE1y4LaSRUlF=ullL
zO;2NUa|ik9c_hd=h~(-qBYE!0$8h$=FT>1D=ziJ`RS_pCLvsV9sp4#OhIsnpKZQ#q
zH?7Jnas;SLZ@h~2b@CK^{0l$#th&Gtd`iWUg`Ld?8ugw6hGCd7kO&hZO=Z%PGVpc0
zzuBszvUn6r7tdjBX&Hw<@L{;8kE(-Oc~D2PP{gp=LUHCGYLtkxUZ}k#PI1QQS!Pr|
zaM)aar<|HRQrmM?~f$%6;c-Pypz+$<$r
z9_rmX4xc)WOXuH2wcWzOQ%}Wh=gdN$e(p*1*6!l=#s(%Q=g@9ZVIgpo6SgkIZd1uQ
z_4H#H?5v>eTR3?5D7J51z|J;R6+ZU=@Q;2OvlBTCyW})n6V>$^HpzzwVJl-Zx@4Pw
zMkHH(rba^2=JF|BST%LzBsq{aZe2c)0W+Rsr;efY{QKaoFQZb-0lg4eDZ5Nc#xrwB
z`z@pn9b$<^rY7YOFFg0gTQC2&*I)bQe=I+TF^KH1*q{FpW6JD1u}2`j_S%adZ7kjV
zK#2-R>iA=D!X9e1Eld#*2F*GQW)#Pc9ER!FarO3foH+e7CW8rN
zilG^)%$oHQn9G*57sDy%kV<&)hF#pcy@cZ*`x*FaYdr7)nwwoLo_rRc`dc5uQnLpu
z!SbmKtgqIzmEBZh5JN#k)EPf8w0x4eynd(3>|!2=PdI#ZeGjPkyeo9o7w%0JRa2#&hH1Z2&ic2N?>bE}s&))j%|Mq_ez5^o0
zm|T5W@s~gL{Rtpr;qE)Jr@nmcU;XJn@ar31>hMV%U!23Ox6dP$%cxSava*TUqbE?z
zB=PL&PJ4LGknlF;U85>)K^l-VfB6@`_5b`|Z{508*!#JRvyq1pe|bR1
zKm2_hdw19`{+oZZaQR!`{N%*p$8q4v=V7hgMgardS=&ad-9U{WC!YBL`XoXpCrX%~
zo598F7pR2PVEG+_%1PMK5PklA&}+lZr%_%wh=un(g~KNnU{J}qOF}b~G|5$5$MuzM
z{M6t5b*!Dghz;@}L-HzzpLz=a-aqC6$
zwp+tgIgPtFU&rP36+HckpU3j~SFqiR(6lEJ8X*onbp*YgD_a3Z{EFeS$I7+RmAS?b0k+?96B-$
zzuTb_OfJN);_v?YFJdm2WNi}aGOL|x7p#zALFVZqaxSvEGEiB!-5#Jtvi9`RS*+ZA
z8-12JPaU4a);Io`z;qrfw>Ht^V_dI?=B?Lp``oK&tzTgIa*=>xVD8`n__bwhuCA#c
zYauZ(tz0fT`OCkKg;eVCYk%Lo&GN@;z7spt_6}fz7Plz+n3(<|b2koP_J3wu?5u&-QzmjcP_GpnUwH
zpN|fmK31$>`sN>A_{JB1Lw;W4OyuFj7(n)6$U)ds8$SQf|Hpsa9|Q$TnmlX<%C?Oc
zo__*Oavxv0a1I}T?ga9?7ZKik5f?69#@pv^U@Dh`6Z8;LMs2Ju;qKL|Xp&>VkkV_1
zS;>IqMn6K1sly!-t2b_3L#x&yiP}S+s!hsHB56949=wOi<1y@}SjHI^tt{Pd^Z
zM{<+ID@oHvtxuk%uSBYA%Fvzxn@WsyrVe|39p0-|TWIXm(cNufXxQ)*IaHlA>aL5x
z%3xyVI0;;mxz$zFS8t=X-Nc|p9%Y9LPNB@Ks)xq%4b)ba^?GyuDz2aTQ={MA3dxlu
z?A>d>b@3a2{*TFvBu1IY7(^am?DO5YKbf&d5dQW*{(t=18!vt9SIWmvqF5-PoO3Z>
zqMX|3qQ1TXCut!;HKx6`fkvl}H(!1Obpk+%zG&C`2q^3JQ$tG4Squmu*9bZh%PNa1Pe56>GBts+
zS4Jv5i5*JK+wL+F79ZR4;I|!=DeNzKfBH-dmDSJK7iO48OZpS@x8%AV7>AeU-(bp+D3=c>(1sf>Qpa=rjNgP
z?PZ+5!7?PWQCqE})A6uU1If=FswO<3Vl>nkQU!^S%~hBMF#G6+$Wl>Bh8EnwMktns
zBw;TT9Kw14FI&XY&L*~2?xL}B2V2*#;o7quK7D
zM$V$koltsPu
zb-eNVd2H1iBuSI-2?&EIU^&r6l^jNz97Z~oMQEonWX6$9Pvi2^HV?9)t?uG@YC0~;
z#SE&eOL+a
zSZU$*$`+oXUJ3aAX&nQE1LL(@Ox@#;k9emwCOBQ6{lF5#q3O(C7Flm`2`$U
zT;%uqc;wAd$@=
zU&!Io8)vY)(?(`$3hn*?#Z(%#UVvUO;B(iJGY?>{Kmgm}UEXN1BpJYJ1E2ZTe+T)O
zE}_|K^6@~6VCF||Y#|T|Xat)57=ikvL3Y@zGfRl5(oE*3Sl;;9tkvPCQwUhL>{5Pq
zZGs8q=Tpx;g^S;K4eirUAT_awK`My@Pd$g~?OWL1VaZk8f)(Xao|(fgOQ_W1Q4Ftl
zjOIow%B8YK{q>jrv(@Wo|77;)lV>oF`yOKe*{89*b~EdU4-oIngI*WI?f^kLj~Y3J
zCe;m-B&TgL`v|CX5MY+8J4iSV)szIf@X-oLil#iuw@uW^hdez|M03cm1bsNJ%+54%
z=H?Rm%=8a3YZ(S6x`Q67tr{}ow+faZXI{e{9`bxH&*!$N?zGYI13bY@;pB&Y8fiC!
zJLg`+-D`hFY?>iA5xbLt*-khJH5swg`cQt+?AS_xIf1%R721
z#XCAP0KeZ=a&+nXO}ujM3JFS2jgZZD9lN)>m}FTJP|Z2FvI)|j@c6u*?SOfUOz7(Z
zZ7DsB(5Cb|ghB2?2I;c=ZINBM|HFU%TWAuLJlR-Bpg48FLMFw>kXw=0H-_lr8OW34QpuMd<}td3|6j)^i&?<
z>mAgXu~cR%DDe4e8_U|xzc@dI)=m`{aF@hynVd~`%ILqWvTSXx
zq23ulE{oL(!e$086_!Y@$F}167`Y$?5JLy{Y-UF;!NhfC?E_yU2wC#*^$A#pd>?_a
z+i2n3xr^wD`7%K(L*QFozKN*U=5;gk5_hxZJLuIrn3%1gPW6as4Qf()5isp=4Gp`5
z7VHPBtw&^h}WoOA0#wo2TOgo#)H@=FfiR`
z7Gm=5e`j?=H`5KeEj?5b4`Y>TiNn$(!BU}00`%&Y8_Z6YV2J(Uuut-}#cZYz;T@&K
zaFjH)c=wlWcQVF5B*z(QCUl-E%7EZfVp)?(=P+5$qf4&i=G`84Hz_akqf-l%td)kd
zPM1>eaG=?eO|C{dS6y5DT+MjPUF55i`((nzm8B)TeDw|%N=0NOyXi%6n_cXZSiNxO
zJTs>x=JRD__#E|H%T!?+aC&{*zH||r{8@yR6oPq4m&{DK;?C@{m
z_U%tyxOQv$(99$%g$&v}jEy=u5dy-6B`OxOdXo2n4$GD%LFHPtfj6m8%u>aW1=<@y
z4=o<}&g++OVj_=hKE*7<#cI8YYL9nx{tDdO+-3$~p`4BP$k;|gGXfcu6O)g=lqy-K2+7Hj9Eu
zr6`d`l5l7X@bL*=zI+XT@X{HqwF8(J@8aXkXv%!dM!SbEoV|!^8|(N4c@P1gF2Qkv
z8BvO_6Iwzt4=^)3i9x51Mrvk&Wa(dH91kSMEg1VWM%}2_e5$wPSWfCPyxt{NM-j17aFF1~~?U-)p7>3^-^cMVK
z`x&#*E%f_+qegH^GXIopBS93H^c-d&7A8neR!E#q$WEAi4k>0m2@)35#}2g~|Cyip
z7rRM&xwTbWtMBe?HEWHi(P?Cd1OGGq-e9rS?##9twdr=fVf4CPb!p$)Y8cyFbxN)Q
zNmEM61d%Mujx0%2*A-rbwN4@%o~t#7&5lnA+HkwQAma5HrF<%il1bT7Lpdt#XDh`{
zWqRsrCY3#(OuBwKn;T{(rfcOwE}%qhnnb=rapEhp&wcm{dp|#n
zg~oiTa4S}=2zT#(_Wo^FQ}aoH&snm_(FeqY^)=)~<2$W@GS~&wQr8_qg$0
deH`B%|2w(EE|g@;I@tgK002ovPDHLkV1lw8RYL#(

literal 0
HcmV?d00001

diff --git a/assets/images/svg/body_icon.svg b/assets/images/svg/body_icon.svg
new file mode 100644
index 0000000..03591ec
--- /dev/null
+++ b/assets/images/svg/body_icon.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/images/svg/rotate_icon.svg b/assets/images/svg/rotate_icon.svg
new file mode 100644
index 0000000..cb52c31
--- /dev/null
+++ b/assets/images/svg/rotate_icon.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/lib/core/app_assets.dart b/lib/core/app_assets.dart
index 5fccc6e..eb6f74c 100644
--- a/lib/core/app_assets.dart
+++ b/lib/core/app_assets.dart
@@ -176,7 +176,6 @@ class AppAssets {
   static const String all_payment_method = '$svgBasePath/all_payment_method.svg';
   static const String ic_rrt_vehicle = '$svgBasePath/ic_rrt_vehicle.svg';
 
-
   //bottom navigation//
   static const String homeBottom = '$svgBasePath/home_bottom.svg';
   static const String bookAppoBottom = '$svgBasePath/book_appo_bottom.svg';
@@ -190,22 +189,29 @@ class AppAssets {
   static const String alertSquare = '$svgBasePath/alert-square.svg';
   static const String arrowRight = '$svgBasePath/arrow-right.svg';
 
+  // Symptoms Checker
+  static const String bodyIcon = '$svgBasePath/body_icon.svg';
+  static const String rotateIcon = '$svgBasePath/rotate_icon.svg';
+
   // PNGS //
-  static const String hmg_logo = '$pngBasePath/hmg_logo.png';
-  static const String livecare_service = '$pngBasePath/livecare_service.png';
-  static const String male_img = '$pngBasePath/male_img.png';
+  static const String hmgLogo = '$pngBasePath/hmg_logo.png';
+  static const String liveCareService = '$pngBasePath/livecare_service.png';
+  static const String maleImg = '$pngBasePath/male_img.png';
   static const String femaleImg = '$pngBasePath/female_img.png';
   static const String babyGirlImg = '$pngBasePath/baby_girl_img.png';
   static const String babyBoyImg = '$pngBasePath/baby_img.png';
-  static const String apple_pay = '$pngBasePath/Apple_Pay.png';
+  static const String applePay = '$pngBasePath/Apple_Pay.png';
   static const String mada = '$pngBasePath/Mada.png';
-  static const String Mastercard = '$pngBasePath/Mastercard.png';
-  static const String tamara_en = '$pngBasePath/tamara_en.png';
+  static const String mastercard = '$pngBasePath/Mastercard.png';
+  static const String tamaraEng = '$pngBasePath/tamara_en.png';
   static const String visa = '$pngBasePath/visa.png';
   static const String lockIcon = '$pngBasePath/lock-icon.png';
-  static const String dummy_user = '$pngBasePath/dummy_user.png';
+  static const String dummyUser = '$pngBasePath/dummy_user.png';
   static const String comprehensiveCheckupEn = '$pngBasePath/cc_en.png';
   static const String comprehensiveCheckupAr = '$pngBasePath/cc_er.png';
+
+  static const String fullBodyFront = '$pngBasePath/full_body_front.png';
+  static const String fullBodyBack = '$pngBasePath/full_body_back.png';
 }
 
 class AppAnimations {
diff --git a/lib/core/dependencies.dart b/lib/core/dependencies.dart
index 73a93c6..58c4a66 100644
--- a/lib/core/dependencies.dart
+++ b/lib/core/dependencies.dart
@@ -16,7 +16,6 @@ import 'package:hmg_patient_app_new/features/emergency_services/emergency_servic
 import 'package:hmg_patient_app_new/features/habib_wallet/habib_wallet_repo.dart';
 import 'package:hmg_patient_app_new/features/habib_wallet/habib_wallet_view_model.dart';
 import 'package:hmg_patient_app_new/features/hmg_services/hmg_services_repo.dart';
-import 'package:hmg_patient_app_new/features/hmg_services/hmg_services_view_model.dart';
 import 'package:hmg_patient_app_new/features/immediate_livecare/immediate_livecare_repo.dart';
 import 'package:hmg_patient_app_new/features/immediate_livecare/immediate_livecare_view_model.dart';
 import 'package:hmg_patient_app_new/features/insurance/insurance_repo.dart';
@@ -39,6 +38,7 @@ import 'package:hmg_patient_app_new/features/radiology/radiology_repo.dart';
 import 'package:hmg_patient_app_new/features/radiology/radiology_view_model.dart';
 import 'package:hmg_patient_app_new/features/todo_section/todo_section_repo.dart';
 import 'package:hmg_patient_app_new/features/todo_section/todo_section_view_model.dart';
+import 'package:hmg_patient_app_new/presentation/symptoms_checker/symptoms_checker_view_model.dart';
 import 'package:hmg_patient_app_new/services/analytics/analytics_service.dart';
 import 'package:hmg_patient_app_new/services/cache_service.dart';
 import 'package:hmg_patient_app_new/services/dialog_service.dart';
@@ -123,11 +123,7 @@ class AppDependencies {
     getIt.registerLazySingleton(() => LabViewModel(labRepo: getIt(), errorHandlerService: getIt(), navigationService: getIt()));
 
     getIt.registerLazySingleton(
-      () => RadiologyViewModel(
-        radiologyRepo: getIt(),
-        errorHandlerService: getIt(),
-        navigationService: getIt()
-      ),
+      () => RadiologyViewModel(radiologyRepo: getIt(), errorHandlerService: getIt(), navigationService: getIt()),
     );
 
     getIt.registerLazySingleton(() => PrescriptionsViewModel(prescriptionsRepo: getIt(), errorHandlerService: getIt()));
@@ -220,17 +216,6 @@ class AppDependencies {
       () => TodoSectionViewModel(todoSectionRepo: getIt(), errorHandlerService: getIt()),
     );
 
-    getIt.registerLazySingleton(
-      () => HmgServicesViewModel(bookAppointmentsRepo: getIt(), hmgServicesRepo: getIt(), errorHandlerService: getIt()),
-    );
-
-    // Screen-specific VMs → Factory
-    // getIt.registerFactory(
-    //       () => BookAppointmentsViewModel(
-    //     bookAppointmentsRepo: getIt(),
-    //     dialogService: getIt(),
-    //     errorHandlerService: getIt(),
-    //   ),
-    // );
+    getIt.registerLazySingleton(() => SymptomsCheckerViewModel());
   }
 }
diff --git a/lib/core/enums.dart b/lib/core/enums.dart
index 4151bed..e318401 100644
--- a/lib/core/enums.dart
+++ b/lib/core/enums.dart
@@ -32,6 +32,8 @@ enum AppEnvironmentTypeEnum { dev, uat, preProd, qa, staging, prod }
 
 enum FamilyFileEnum { active, inactive, blocked, deleted, pending, rejected }
 
+enum BodyView { front, back }
+
 extension CalenderExtension on CalenderEnum {
   int get toInt {
     switch (this) {
@@ -172,7 +174,7 @@ extension FamilyFileEnumExtenshion on FamilyFileEnum {
         return isArabic ? 'محذوف' : 'Deleted';
       case FamilyFileEnum.pending:
         return isArabic ? 'قيد الانتظار' : 'Pending';
-        case FamilyFileEnum.rejected:
+      case FamilyFileEnum.rejected:
         return isArabic ? 'مرفوض' : 'Rejected';
     }
   }
diff --git a/lib/core/utils/utils.dart b/lib/core/utils/utils.dart
index e3b108f..9fdd947 100644
--- a/lib/core/utils/utils.dart
+++ b/lib/core/utils/utils.dart
@@ -721,10 +721,10 @@ class Utils {
       mainAxisAlignment: MainAxisAlignment.spaceBetween,
       children: [
         Image.asset(AppAssets.mada, width: 25.h, height: 25.h),
-        Image.asset(AppAssets.tamara_en, width: 25.h, height: 25.h),
+        Image.asset(AppAssets.tamaraEng, width: 25.h, height: 25.h),
         Image.asset(AppAssets.visa, width: 25.h, height: 25.h),
-        Image.asset(AppAssets.Mastercard, width: 25.h, height: 25.h),
-        Image.asset(AppAssets.apple_pay, width: 25.h, height: 25.h),
+        Image.asset(AppAssets.mastercard, width: 25.h, height: 25.h),
+        Image.asset(AppAssets.applePay, width: 25.h, height: 25.h),
       ],
     );
   }
diff --git a/lib/extensions/route_extensions.dart b/lib/extensions/route_extensions.dart
index 0dcc54b..b76acfa 100644
--- a/lib/extensions/route_extensions.dart
+++ b/lib/extensions/route_extensions.dart
@@ -17,7 +17,7 @@ extension NavigationExtensions on BuildContext {
     Navigator.of(this).pop();
   }
 
-  void navigateTo(Widget page) {
+  void pushNavigateTo(Widget page) {
     Navigator.push(this, MaterialPageRoute(builder: (context) => page));
   }
 
diff --git a/lib/features/symptoms_checker/models/organ_model.dart b/lib/features/symptoms_checker/models/organ_model.dart
new file mode 100644
index 0000000..984a290
--- /dev/null
+++ b/lib/features/symptoms_checker/models/organ_model.dart
@@ -0,0 +1,41 @@
+import 'package:hmg_patient_app_new/core/enums.dart';
+
+class OrganModel {
+  final String id;
+  final String name;
+  final BodyView bodyView;
+  final OrganPosition position;
+
+  const OrganModel({
+    required this.id,
+    required this.name,
+    required this.bodyView,
+    required this.position,
+  });
+
+  OrganModel copyWith({
+    String? id,
+    String? name,
+    BodyView? bodyView,
+    OrganPosition? position,
+  }) {
+    return OrganModel(
+      id: id ?? this.id,
+      name: name ?? this.name,
+      bodyView: bodyView ?? this.bodyView,
+      position: position ?? this.position,
+    );
+  }
+}
+
+class OrganPosition {
+  final double x; // Percentage from left (0.0 to 1.0)
+  final double y; // Percentage from top (0.0 to 1.0)
+
+  const OrganPosition({
+    required this.x,
+    required this.y,
+  });
+}
+
+
diff --git a/lib/features/symptoms_checker/organ_mapping_data.dart b/lib/features/symptoms_checker/organ_mapping_data.dart
new file mode 100644
index 0000000..a2395e4
--- /dev/null
+++ b/lib/features/symptoms_checker/organ_mapping_data.dart
@@ -0,0 +1,371 @@
+import 'package:hmg_patient_app_new/core/enums.dart';
+import 'package:hmg_patient_app_new/features/symptoms_checker/models/organ_model.dart';
+
+class OrganData {
+  // ==================== FRONT VIEW ====================
+  static const List frontViewOrgans = [
+    // ========== HEAD & FACE ==========
+    OrganModel(
+      id: 'head',
+      name: 'Head',
+      bodyView: BodyView.front,
+      position: OrganPosition(x: 0.50, y: 0.03),
+    ),
+    OrganModel(
+      id: 'left_eye',
+      name: 'Left Eye',
+      bodyView: BodyView.front,
+      position: OrganPosition(x: 0.43, y: 0.07),
+    ),
+    OrganModel(
+      id: 'right_eye',
+      name: 'Right Eye',
+      bodyView: BodyView.front,
+      position: OrganPosition(x: 0.57, y: 0.07),
+    ),
+    OrganModel(
+      id: 'nose_mouth',
+      name: 'Nose/Mouth',
+      bodyView: BodyView.front,
+      position: OrganPosition(x: 0.50, y: 0.09),
+    ),
+
+    // ========== NECK ==========
+    OrganModel(
+      id: 'throat',
+      name: 'Throat',
+      bodyView: BodyView.front,
+      position: OrganPosition(x: 0.50, y: 0.15),
+    ),
+
+    // ========== SHOULDERS ==========
+    OrganModel(
+      id: 'left_shoulder',
+      name: 'Left Shoulder',
+      bodyView: BodyView.front,
+      position: OrganPosition(x: 0.22, y: 0.22),
+    ),
+    OrganModel(
+      id: 'right_shoulder',
+      name: 'Right Shoulder',
+      bodyView: BodyView.front,
+      position: OrganPosition(x: 0.8, y: 0.22),
+    ),
+
+    // ========== CHEST ==========
+    OrganModel(
+      id: 'left_chest',
+      name: 'Left Chest',
+      bodyView: BodyView.front,
+      position: OrganPosition(x: 0.38, y: 0.22),
+    ),
+    OrganModel(
+      id: 'center_chest',
+      name: 'Center Chest',
+      bodyView: BodyView.front,
+      position: OrganPosition(x: 0.52, y: 0.25),
+    ),
+    OrganModel(
+      id: 'right_chest',
+      name: 'Right Chest',
+      bodyView: BodyView.front,
+      position: OrganPosition(x: 0.65, y: 0.22),
+    ),
+
+    // ========== RIBS ==========
+    OrganModel(
+      id: 'left_ribs',
+      name: 'Left Ribs',
+      bodyView: BodyView.front,
+      position: OrganPosition(x: 0.38, y: 0.35),
+    ),
+    OrganModel(
+      id: 'right_ribs',
+      name: 'Right Ribs',
+      bodyView: BodyView.front,
+      position: OrganPosition(x: 0.64, y: 0.35),
+    ),
+
+    // ========== ABDOMEN ==========
+    OrganModel(
+      id: 'upper_abdomen',
+      name: 'Upper Abdomen',
+      bodyView: BodyView.front,
+      position: OrganPosition(x: 0.51, y: 0.31),
+    ),
+    OrganModel(
+      id: 'navel',
+      name: 'Navel',
+      bodyView: BodyView.front,
+      position: OrganPosition(x: 0.51, y: 0.38),
+    ),
+    OrganModel(
+      id: 'lower_abdomen',
+      name: 'Lower Abdomen',
+      bodyView: BodyView.front,
+      position: OrganPosition(x: 0.51, y: 0.44),
+    ),
+
+    // ========== PELVIS ==========
+    OrganModel(
+      id: 'left_groin',
+      name: 'Left Groin',
+      bodyView: BodyView.front,
+      position: OrganPosition(x: 0.42, y: 0.49),
+    ),
+    OrganModel(
+      id: 'right_groin',
+      name: 'Right Groin',
+      bodyView: BodyView.front,
+      position: OrganPosition(x: 0.59, y: 0.49),
+    ),
+
+    // ========== LEFT ARM ==========
+
+    OrganModel(
+      id: 'left_elbow',
+      name: 'Left Elbow',
+      bodyView: BodyView.front,
+      position: OrganPosition(x: 0.21, y: 0.35),
+    ),
+    OrganModel(
+      id: 'left_forearm',
+      name: 'Left Forearm',
+      bodyView: BodyView.front,
+      position: OrganPosition(x: 0.19, y: 0.43),
+    ),
+    OrganModel(
+      id: 'left_wrist',
+      name: 'Left Wrist',
+      bodyView: BodyView.front,
+      position: OrganPosition(x: 0.14, y: 0.5),
+    ),
+
+    // ========== RIGHT ARM ==========
+
+    OrganModel(
+      id: 'right_elbow',
+      name: 'Right Elbow',
+      bodyView: BodyView.front,
+      position: OrganPosition(x: 0.79, y: 0.35),
+    ),
+    OrganModel(
+      id: 'right_forearm',
+      name: 'Right Forearm',
+      bodyView: BodyView.front,
+      position: OrganPosition(x: 0.81, y: 0.43),
+    ),
+    OrganModel(
+      id: 'right_wrist',
+      name: 'Right Wrist',
+      bodyView: BodyView.front,
+      position: OrganPosition(x: 0.85, y: 0.5),
+    ),
+
+    // ========== LEFT LEG ==========
+    OrganModel(
+      id: 'left_thigh',
+      name: 'Left Thigh',
+      bodyView: BodyView.front,
+      position: OrganPosition(x: 0.4, y: 0.60),
+    ),
+    OrganModel(
+      id: 'left_knee',
+      name: 'Left Knee',
+      bodyView: BodyView.front,
+      position: OrganPosition(x: 0.4, y: 0.72),
+    ),
+    OrganModel(
+      id: 'left_shin',
+      name: 'Left Shin',
+      bodyView: BodyView.front,
+      position: OrganPosition(x: 0.41, y: 0.82),
+    ),
+    OrganModel(
+      id: 'left_ankle',
+      name: 'Left Ankle',
+      bodyView: BodyView.front,
+      position: OrganPosition(x: 0.43, y: 0.91),
+    ),
+
+    // ========== RIGHT LEG ==========
+    OrganModel(
+      id: 'right_thigh',
+      name: 'Right Thigh',
+      bodyView: BodyView.front,
+      position: OrganPosition(x: 0.65, y: 0.60),
+    ),
+    OrganModel(
+      id: 'right_knee',
+      name: 'Right Knee',
+      bodyView: BodyView.front,
+      position: OrganPosition(x: 0.6, y: 0.72),
+    ),
+    OrganModel(
+      id: 'right_shin',
+      name: 'Right Shin',
+      bodyView: BodyView.front,
+      position: OrganPosition(x: 0.57, y: 0.82),
+    ),
+    OrganModel(
+      id: 'right_ankle',
+      name: 'Right Ankle',
+      bodyView: BodyView.front,
+      position: OrganPosition(x: 0.57, y: 0.91),
+    ),
+  ];
+
+  // ==================== BACK VIEW ====================
+  static const List backViewOrgans = [
+    // ========== HEAD & NECK ==========
+    OrganModel(
+      id: 'back_of_head',
+      name: 'Back of Head',
+      bodyView: BodyView.back,
+      position: OrganPosition(x: 0.50, y: 0.04),
+    ),
+    OrganModel(
+      id: 'neck_back',
+      name: 'Neck',
+      bodyView: BodyView.back,
+      position: OrganPosition(x: 0.50, y: 0.14),
+    ),
+
+    // ========== SHOULDERS ==========
+    OrganModel(
+      id: 'left_shoulder_back',
+      name: 'Left Shoulder',
+      bodyView: BodyView.back,
+      position: OrganPosition(x: 0.33, y: 0.19),
+    ),
+    OrganModel(
+      id: 'right_shoulder_back',
+      name: 'Right Shoulder',
+      bodyView: BodyView.back,
+      position: OrganPosition(x: 0.67, y: 0.19),
+    ),
+
+    // ========== UPPER BACK ==========
+    OrganModel(
+      id: 'upper_spine',
+      name: 'Upper Spine',
+      bodyView: BodyView.back,
+      position: OrganPosition(x: 0.50, y: 0.23),
+    ),
+    OrganModel(
+      id: 'left_upper_back',
+      name: 'Left Upper Back',
+      bodyView: BodyView.back,
+      position: OrganPosition(x: 0.38, y: 0.28),
+    ),
+    OrganModel(
+      id: 'right_upper_back',
+      name: 'Right Upper Back',
+      bodyView: BodyView.back,
+      position: OrganPosition(x: 0.62, y: 0.28),
+    ),
+
+    // ========== MID BACK ==========
+    OrganModel(
+      id: 'mid_spine',
+      name: 'Mid Spine',
+      bodyView: BodyView.back,
+      position: OrganPosition(x: 0.50, y: 0.35),
+    ),
+    OrganModel(
+      id: 'left_mid_back',
+      name: 'Left Mid Back',
+      bodyView: BodyView.back,
+      position: OrganPosition(x: 0.38, y: 0.35),
+    ),
+    OrganModel(
+      id: 'right_mid_back',
+      name: 'Right Mid Back',
+      bodyView: BodyView.back,
+      position: OrganPosition(x: 0.62, y: 0.35),
+    ),
+
+    // ========== LOWER BACK ==========
+    OrganModel(
+      id: 'lower_spine',
+      name: 'Lower Back',
+      bodyView: BodyView.back,
+      position: OrganPosition(x: 0.50, y: 0.43),
+    ),
+    OrganModel(
+      id: 'left_lower_back',
+      name: 'Left Lower Back',
+      bodyView: BodyView.back,
+      position: OrganPosition(x: 0.40, y: 0.43),
+    ),
+    OrganModel(
+      id: 'right_lower_back',
+      name: 'Right Lower Back',
+      bodyView: BodyView.back,
+      position: OrganPosition(x: 0.60, y: 0.43),
+    ),
+
+    // ========== GLUTES ==========
+    OrganModel(
+      id: 'sacrum',
+      name: 'Sacrum',
+      bodyView: BodyView.back,
+      position: OrganPosition(x: 0.50, y: 0.52),
+    ),
+    OrganModel(
+      id: 'left_glute',
+      name: 'Left Glute',
+      bodyView: BodyView.back,
+      position: OrganPosition(x: 0.45, y: 0.56),
+    ),
+    OrganModel(
+      id: 'right_glute',
+      name: 'Right Glute',
+      bodyView: BodyView.back,
+      position: OrganPosition(x: 0.55, y: 0.56),
+    ),
+
+    // ========== LEGS ==========
+    OrganModel(
+      id: 'left_hamstring',
+      name: 'Left Hamstring',
+      bodyView: BodyView.back,
+      position: OrganPosition(x: 0.43, y: 0.65),
+    ),
+    OrganModel(
+      id: 'right_hamstring',
+      name: 'Right Hamstring',
+      bodyView: BodyView.back,
+      position: OrganPosition(x: 0.57, y: 0.65),
+    ),
+    OrganModel(
+      id: 'left_calf',
+      name: 'Left Calf',
+      bodyView: BodyView.back,
+      position: OrganPosition(x: 0.43, y: 0.79),
+    ),
+    OrganModel(
+      id: 'right_calf',
+      name: 'Right Calf',
+      bodyView: BodyView.back,
+      position: OrganPosition(x: 0.57, y: 0.79),
+    ),
+  ];
+
+  // Helper methods
+  static List getOrgansForView(BodyView view) {
+    return view == BodyView.front ? frontViewOrgans : backViewOrgans;
+  }
+
+  static List getAllOrgans() {
+    return [...frontViewOrgans, ...backViewOrgans];
+  }
+
+  static OrganModel? getOrganById(String id) {
+    try {
+      return getAllOrgans().firstWhere((organ) => organ.id == id);
+    } catch (e) {
+      return null;
+    }
+  }
+}
diff --git a/lib/main.dart b/lib/main.dart
index 1af80b6..254a2ca 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -28,6 +28,7 @@ import 'package:hmg_patient_app_new/features/prescriptions/prescriptions_view_mo
 import 'package:hmg_patient_app_new/features/profile_settings/profile_settings_view_model.dart';
 import 'package:hmg_patient_app_new/features/radiology/radiology_view_model.dart';
 import 'package:hmg_patient_app_new/features/todo_section/todo_section_view_model.dart';
+import 'package:hmg_patient_app_new/presentation/symptoms_checker/symptoms_checker_view_model.dart';
 import 'package:hmg_patient_app_new/routes/app_routes.dart';
 import 'package:hmg_patient_app_new/services/logger_service.dart';
 import 'package:hmg_patient_app_new/services/navigation_service.dart';
@@ -145,6 +146,9 @@ void main() async {
         ),
         ChangeNotifierProvider(
           create: (_) => getIt.get(),
+        ),
+        ChangeNotifierProvider(
+          create: (_) => getIt.get(),
         )
       ], child: MyApp()),
     ),
diff --git a/lib/presentation/appointments/appointment_payment_page.dart b/lib/presentation/appointments/appointment_payment_page.dart
index faf1c2a..ccd7018 100644
--- a/lib/presentation/appointments/appointment_payment_page.dart
+++ b/lib/presentation/appointments/appointment_payment_page.dart
@@ -149,7 +149,7 @@ class _AppointmentPaymentPageState extends State {
                                   children: [
                                     Image.asset(AppAssets.visa, width: 50.h, height: 50.h),
                                     SizedBox(width: 8.h),
-                                    Image.asset(AppAssets.Mastercard, width: 40.h, height: 40.h),
+                                    Image.asset(AppAssets.mastercard, width: 40.h, height: 40.h),
                                   ],
                                 ).toShimmer2(isShow: myAppointmentsVM.isAppointmentPatientShareLoading),
                                 SizedBox(height: 16.h),
@@ -191,7 +191,7 @@ class _AppointmentPaymentPageState extends State {
                                   Column(
                                     crossAxisAlignment: CrossAxisAlignment.start,
                                     children: [
-                                      Image.asset(AppAssets.tamara_en, width: 72.h, height: 25.h)
+                                      Image.asset(AppAssets.tamaraEng, width: 72.h, height: 25.h)
                                           .toShimmer2(isShow: myAppointmentsVM.isAppointmentPatientShareLoading),
                                       SizedBox(height: 16.h),
                                       "Tamara"
diff --git a/lib/presentation/book_appointment/livecare/immediate_livecare_payment_details.dart b/lib/presentation/book_appointment/livecare/immediate_livecare_payment_details.dart
index af7d053..d16e441 100644
--- a/lib/presentation/book_appointment/livecare/immediate_livecare_payment_details.dart
+++ b/lib/presentation/book_appointment/livecare/immediate_livecare_payment_details.dart
@@ -61,7 +61,7 @@ class ImmediateLiveCarePaymentDetails extends StatelessWidget {
                         child: Row(
                           children: [
                             Image.asset(
-                              appState.getAuthenticatedUser()?.gender == 1 ? AppAssets.male_img : AppAssets.femaleImg,
+                              appState.getAuthenticatedUser()?.gender == 1 ? AppAssets.maleImg : AppAssets.femaleImg,
                               width: 52.h,
                               height: 52.h,
                             ),
diff --git a/lib/presentation/book_appointment/livecare/immediate_livecare_payment_page.dart b/lib/presentation/book_appointment/livecare/immediate_livecare_payment_page.dart
index 914ac4a..b052969 100644
--- a/lib/presentation/book_appointment/livecare/immediate_livecare_payment_page.dart
+++ b/lib/presentation/book_appointment/livecare/immediate_livecare_payment_page.dart
@@ -147,7 +147,7 @@ class _ImmediateLiveCarePaymentPageState extends State {
                         child: Row(
                           children: [
                             Image.asset(
-                              appState.getAuthenticatedUser()?.gender == 1 ? AppAssets.male_img : AppAssets.femaleImg,
+                              appState.getAuthenticatedUser()?.gender == 1 ? AppAssets.maleImg : AppAssets.femaleImg,
                               width: 52.h,
                               height: 52.h,
                             ),
diff --git a/lib/presentation/emergency_services/RRT/rrt_request_type_select.dart b/lib/presentation/emergency_services/RRT/rrt_request_type_select.dart
index d628c1d..66894b6 100644
--- a/lib/presentation/emergency_services/RRT/rrt_request_type_select.dart
+++ b/lib/presentation/emergency_services/RRT/rrt_request_type_select.dart
@@ -131,8 +131,8 @@ class RrtRequestTypeSelect extends StatelessWidget {
                     children: [
                       Image.asset(AppAssets.mada, width: 24.h, height: 24.h),
                       Image.asset(AppAssets.visa, width: 24.h, height: 24.h),
-                      Image.asset(AppAssets.Mastercard, width: 24.h, height: 24.h),
-                      Image.asset(AppAssets.apple_pay, width: 24.h, height: 24.h),
+                      Image.asset(AppAssets.mastercard, width: 24.h, height: 24.h),
+                      Image.asset(AppAssets.applePay, width: 24.h, height: 24.h),
                     ],
                   ),
                   Column(
diff --git a/lib/presentation/emergency_services/er_online_checkin/er_online_checkin_payment_page.dart b/lib/presentation/emergency_services/er_online_checkin/er_online_checkin_payment_page.dart
index a3524fd..8de7518 100644
--- a/lib/presentation/emergency_services/er_online_checkin/er_online_checkin_payment_page.dart
+++ b/lib/presentation/emergency_services/er_online_checkin/er_online_checkin_payment_page.dart
@@ -137,7 +137,7 @@ class _ErOnlineCheckinPaymentPageState extends State
                                 children: [
                                   Image.asset(AppAssets.visa, width: 50.h, height: 50.h),
                                   SizedBox(width: 8.h),
-                                  Image.asset(AppAssets.Mastercard, width: 40.h, height: 40.h),
+                                  Image.asset(AppAssets.mastercard, width: 40.h, height: 40.h),
                                 ],
                               ),
                               SizedBox(height: 16.h),
@@ -176,7 +176,7 @@ class _ErOnlineCheckinPaymentPageState extends State
                                 Column(
                                   crossAxisAlignment: CrossAxisAlignment.start,
                                   children: [
-                                    Image.asset(AppAssets.tamara_en, width: 72.h, height: 25.h),
+                                    Image.asset(AppAssets.tamaraEng, width: 72.h, height: 25.h),
                                     SizedBox(height: 16.h),
                                     "Tamara".needTranslation.toText16(isBold: true),
                                   ],
diff --git a/lib/presentation/habib_wallet/wallet_payment_confirm_page.dart b/lib/presentation/habib_wallet/wallet_payment_confirm_page.dart
index 8be6ce2..1341af7 100644
--- a/lib/presentation/habib_wallet/wallet_payment_confirm_page.dart
+++ b/lib/presentation/habib_wallet/wallet_payment_confirm_page.dart
@@ -120,7 +120,7 @@ class _WalletPaymentConfirmPageState extends State {
                                 children: [
                                   Image.asset(AppAssets.visa, width: 40.h, height: 40.h),
                                   SizedBox(width: 8.h),
-                                  Image.asset(AppAssets.Mastercard, width: 40.h, height: 40.h),
+                                  Image.asset(AppAssets.mastercard, width: 40.h, height: 40.h),
                                 ],
                               ).toShimmer2(isShow: false),
                               SizedBox(height: 16.h),
diff --git a/lib/presentation/home/data/landing_page_data.dart b/lib/presentation/home/data/landing_page_data.dart
index 31b4598..0178720 100644
--- a/lib/presentation/home/data/landing_page_data.dart
+++ b/lib/presentation/home/data/landing_page_data.dart
@@ -142,7 +142,7 @@ class LandingPageData {
 
   static List getServiceCardsList = [
     ServiceCardData(
-      icon: AppAssets.livecare_service,
+      icon: AppAssets.liveCareService,
       title: "LiveCare",
       subtitle: "Explore our app, View our services and offers",
       largeCardIcon: AppAssets.livecare_icon,
diff --git a/lib/presentation/home/landing_page.dart b/lib/presentation/home/landing_page.dart
index 1007547..454f1e7 100644
--- a/lib/presentation/home/landing_page.dart
+++ b/lib/presentation/home/landing_page.dart
@@ -12,6 +12,7 @@ import 'package:hmg_patient_app_new/core/dependencies.dart';
 import 'package:hmg_patient_app_new/core/utils/size_utils.dart';
 import 'package:hmg_patient_app_new/core/utils/utils.dart';
 import 'package:hmg_patient_app_new/extensions/int_extensions.dart';
+import 'package:hmg_patient_app_new/extensions/route_extensions.dart';
 import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
 import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
 import 'package:hmg_patient_app_new/features/authentication/authentication_view_model.dart';
@@ -39,6 +40,7 @@ import 'package:hmg_patient_app_new/presentation/home/widgets/small_service_card
 import 'package:hmg_patient_app_new/presentation/home/widgets/welcome_widget.dart';
 import 'package:hmg_patient_app_new/presentation/medical_file/medical_file_page.dart';
 import 'package:hmg_patient_app_new/presentation/profile_settings/profile_settings.dart';
+import 'package:hmg_patient_app_new/routes/app_routes.dart';
 import 'package:hmg_patient_app_new/services/cache_service.dart';
 import 'package:hmg_patient_app_new/theme/colors.dart';
 import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart';
@@ -104,6 +106,346 @@ class _LandingPageState extends State {
     super.initState();
   }
 
+  Widget buildOptionsForAuthenticatedUser() {
+    return Column(
+      children: [
+        SizedBox(height: 12.h),
+        Row(
+          mainAxisAlignment: MainAxisAlignment.spaceBetween,
+          children: [
+            "Appointments & Visits".toText16(isBold: true),
+            Row(
+              children: [
+                LocaleKeys.viewAll.tr(context: context).toText12(color: AppColors.primaryRedColor),
+                SizedBox(width: 2.h),
+                Icon(Icons.arrow_forward_ios, color: AppColors.primaryRedColor, size: 10.h),
+              ],
+            ),
+          ],
+        ).paddingSymmetrical(24.h, 0.h).onPress(() {
+          Navigator.of(context).push(CustomPageRoute(page: MyAppointmentsPage()));
+        }),
+        SizedBox(height: 16.h),
+        Consumer(
+          builder: (context, myAppointmentsVM, child) {
+            return myAppointmentsVM.isMyAppointmentsLoading
+                ? Container(
+                    decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
+                      color: AppColors.whiteColor,
+                      borderRadius: 24.r,
+                      hasShadow: true,
+                    ),
+                    child: AppointmentCard(
+                      patientAppointmentHistoryResponseModel: PatientAppointmentHistoryResponseModel(),
+                      myAppointmentsViewModel: myAppointmentsViewModel,
+                      bookAppointmentsViewModel: bookAppointmentsViewModel,
+                      isLoading: true,
+                      isFromHomePage: true,
+                    ),
+                  ).paddingSymmetrical(24.h, 0.h)
+                : myAppointmentsVM.patientAppointmentsHistoryList.isNotEmpty
+                    ? myAppointmentsVM.patientAppointmentsHistoryList.length == 1
+                        ? Container(
+                            decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
+                              color: AppColors.whiteColor,
+                              borderRadius: 24.r,
+                              hasShadow: true,
+                            ),
+                            child: AppointmentCard(
+                              patientAppointmentHistoryResponseModel: myAppointmentsVM.patientAppointmentsHistoryList.first,
+                              myAppointmentsViewModel: myAppointmentsViewModel,
+                              bookAppointmentsViewModel: bookAppointmentsViewModel,
+                              isLoading: false,
+                              isFromHomePage: true,
+                            ),
+                          ).paddingSymmetrical(24.h, 0.h)
+                        : Swiper(
+                            itemCount: myAppointmentsVM.isMyAppointmentsLoading
+                                ? 3
+                                : myAppointmentsVM.patientAppointmentsHistoryList.length < 3
+                                    ? myAppointmentsVM.patientAppointmentsHistoryList.length
+                                    : 3,
+                            layout: SwiperLayout.STACK,
+                            loop: true,
+                            itemWidth: MediaQuery.of(context).size.width - 48.h,
+                            indicatorLayout: PageIndicatorLayout.COLOR,
+                            axisDirection: AxisDirection.right,
+                            controller: _controller,
+                            itemHeight: 200.h,
+                            pagination: const SwiperPagination(
+                              alignment: Alignment.bottomCenter,
+                              margin: EdgeInsets.only(top: 210 + 8 + 24),
+                              builder: DotSwiperPaginationBuilder(color: Color(0xffD9D9D9), activeColor: AppColors.blackBgColor),
+                            ),
+                            itemBuilder: (BuildContext context, int index) {
+                              return Container(
+                                decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
+                                  color: AppColors.whiteColor,
+                                  borderRadius: 24.r,
+                                  hasShadow: true,
+                                ),
+                                child: AppointmentCard(
+                                  patientAppointmentHistoryResponseModel: myAppointmentsVM.patientAppointmentsHistoryList[index],
+                                  myAppointmentsViewModel: myAppointmentsViewModel,
+                                  bookAppointmentsViewModel: bookAppointmentsViewModel,
+                                  isLoading: false,
+                                  isFromHomePage: true,
+                                ),
+                              );
+                            },
+                          )
+                    : Container(
+                        width: double.infinity,
+                        decoration:
+                            RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24.r, hasShadow: true),
+                        child: Padding(
+                          padding: EdgeInsets.all(12.h),
+                          child: Column(
+                            children: [
+                              Utils.buildSvgWithAssets(icon: AppAssets.home_calendar_icon, width: 32.h, height: 32.h),
+                              SizedBox(height: 12.h),
+                              "You do not have any upcoming appointment. Please book an appointment".needTranslation.toText12(isCenter: true),
+                              SizedBox(height: 12.h),
+                              CustomButton(
+                                text: LocaleKeys.bookAppo.tr(context: context),
+                                onPressed: () {
+                                  Navigator.of(context).push(CustomPageRoute(page: BookAppointmentPage()));
+                                },
+                                backgroundColor: Color(0xffFEE9EA),
+                                borderColor: Color(0xffFEE9EA),
+                                textColor: Color(0xffED1C2B),
+                                fontSize: 14.f,
+                                fontWeight: FontWeight.w500,
+                                padding: EdgeInsets.fromLTRB(10.h, 0, 10.h, 0),
+                                icon: AppAssets.add_icon,
+                                iconColor: AppColors.primaryRedColor,
+                                height: 46.h,
+                              ),
+                            ],
+                          ),
+                        ),
+                      ).paddingSymmetrical(24.h, 0.h);
+          },
+        ),
+
+        // Consumer for LiveCare pending request
+        Consumer(
+          builder: (context, immediateLiveCareVM, child) {
+            return immediateLiveCareVM.patientHasPendingLiveCareRequest
+                ? Column(
+                    children: [
+                      SizedBox(height: 12.h),
+                      Container(
+                        decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
+                          color: AppColors.whiteColor,
+                          borderRadius: 20.r,
+                          hasShadow: true,
+                          side: BorderSide(color: AppColors.ratingColorYellow, width: 3.h),
+                        ),
+                        width: double.infinity,
+                        child: Padding(
+                          padding: EdgeInsets.all(16.h),
+                          child: Column(
+                            crossAxisAlignment: CrossAxisAlignment.start,
+                            children: [
+                              Row(
+                                mainAxisAlignment: MainAxisAlignment.spaceBetween,
+                                children: [
+                                  AppCustomChipWidget(
+                                    labelText: immediateLiveCareViewModel.patientLiveCareHistoryList[0].stringCallStatus,
+                                    backgroundColor: AppColors.warningColorYellow.withValues(alpha: 0.20),
+                                    textColor: AppColors.alertColor,
+                                  ),
+                                  Utils.buildSvgWithAssets(icon: AppAssets.waiting_icon, width: 24.h, height: 24.h),
+                                  // Lottie.asset(AppAnimations.pending_loading_animation, repeat: true, reverse: false, frameRate: FrameRate(60), width: 40.h, height: 40.h, fit: BoxFit.contain),
+                                ],
+                              ),
+                              SizedBox(height: 8.h),
+                              Row(
+                                mainAxisAlignment: MainAxisAlignment.spaceBetween,
+                                children: [
+                                  "You have a pending LiveCare request".needTranslation.toText12(isBold: true),
+                                  Utils.buildSvgWithAssets(
+                                    icon: AppAssets.forward_arrow_icon_small,
+                                    iconColor: AppColors.blackColor,
+                                    width: 20.h,
+                                    height: 15.h,
+                                    fit: BoxFit.contain,
+                                  ),
+                                ],
+                              ),
+                            ],
+                          ),
+                        ),
+                      ).paddingSymmetrical(24.h, 0.h).onPress(() {
+                        Navigator.of(context).push(CustomPageRoute(page: ImmediateLiveCarePendingRequestPage()));
+                      }),
+                      SizedBox(height: 12.h),
+                    ],
+                  )
+                : SizedBox(height: 12.h);
+          },
+        ),
+
+        // Consumer for ER Online Check-In pending request
+        Consumer(
+          builder: (context, emergencyServicesVM, child) {
+            return emergencyServicesVM.patientHasAdvanceERBalance
+                ? Column(
+                    children: [
+                      SizedBox(height: 4.h),
+                      Container(
+                        decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
+                          color: AppColors.whiteColor,
+                          borderRadius: 20.r,
+                          hasShadow: true,
+                          side: BorderSide(color: AppColors.primaryRedColor, width: 3.h),
+                        ),
+                        width: double.infinity,
+                        child: Padding(
+                          padding: EdgeInsets.all(16.h),
+                          child: Column(
+                            crossAxisAlignment: CrossAxisAlignment.start,
+                            children: [
+                              Row(
+                                mainAxisAlignment: MainAxisAlignment.spaceBetween,
+                                children: [
+                                  AppCustomChipWidget(
+                                    labelText: "ER Online Check-In Request",
+                                    backgroundColor: AppColors.primaryRedColor.withValues(alpha: 0.10),
+                                    textColor: AppColors.primaryRedColor,
+                                  ),
+                                  Utils.buildSvgWithAssets(
+                                      icon: AppAssets.appointment_checkin_icon, width: 24.h, height: 24.h, iconColor: AppColors.primaryRedColor),
+                                ],
+                              ),
+                              SizedBox(height: 8.h),
+                              Row(
+                                mainAxisAlignment: MainAxisAlignment.spaceBetween,
+                                children: [
+                                  "You have ER Online Check-In Request".needTranslation.toText12(isBold: true),
+                                  Utils.buildSvgWithAssets(
+                                    icon: AppAssets.forward_arrow_icon_small,
+                                    iconColor: AppColors.blackColor,
+                                    width: 20.h,
+                                    height: 15.h,
+                                    fit: BoxFit.contain,
+                                  ),
+                                ],
+                              ),
+                            ],
+                          ),
+                        ),
+                      ).paddingSymmetrical(24.h, 0.h).onPress(() {
+                        Navigator.of(context).push(CustomPageRoute(page: ErOnlineCheckinHome()));
+                        // context.read().navigateToEROnlineCheckIn();
+                      }),
+                      SizedBox(height: 12.h),
+                    ],
+                  )
+                : SizedBox(height: 12.h);
+          },
+        ),
+
+        Row(
+          mainAxisAlignment: MainAxisAlignment.spaceBetween,
+          children: [
+            "Quick Links".needTranslation.toText16(isBold: true),
+            Row(
+              children: [
+                "View medical file".needTranslation.toText12(color: AppColors.primaryRedColor),
+                SizedBox(width: 2.h),
+                Icon(Icons.arrow_forward_ios, color: AppColors.primaryRedColor, size: 10.h),
+              ],
+            ),
+          ],
+        ).paddingSymmetrical(24.h, 0.h).onPress(() {
+          Navigator.of(context).push(CustomPageRoute(page: MedicalFilePage()));
+        }),
+        SizedBox(height: 16.h),
+        Container(
+          height: 121.h,
+          decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24.r),
+          child: Column(
+            children: [
+              Expanded(
+                child: ListView.separated(
+                  scrollDirection: Axis.horizontal,
+                  itemCount: LandingPageData.getLoggedInServiceCardsList.length,
+                  shrinkWrap: true,
+                  padding: EdgeInsets.only(left: 16.h, right: 16.h),
+                  itemBuilder: (context, index) {
+                    return AnimationConfiguration.staggeredList(
+                      position: index,
+                      duration: const Duration(milliseconds: 1000),
+                      child: SlideAnimation(
+                        horizontalOffset: 100.0,
+                        child: FadeInAnimation(
+                          child: SmallServiceCard(
+                            icon: LandingPageData.getLoggedInServiceCardsList[index].icon,
+                            title: LandingPageData.getLoggedInServiceCardsList[index].title,
+                            subtitle: LandingPageData.getLoggedInServiceCardsList[index].subtitle,
+                            iconColor: LandingPageData.getLoggedInServiceCardsList[index].iconColor,
+                            textColor: LandingPageData.getLoggedInServiceCardsList[index].textColor,
+                            backgroundColor: LandingPageData.getLoggedInServiceCardsList[index].backgroundColor,
+                            isBold: LandingPageData.getLoggedInServiceCardsList[index].isBold,
+                            serviceName: LandingPageData.getLoggedInServiceCardsList[index].serviceName,
+                          ),
+                        ),
+                      ),
+                    );
+                  },
+                  separatorBuilder: (BuildContext cxt, int index) => 10.width,
+                ),
+              ),
+            ],
+          ),
+        ).paddingSymmetrical(24.h, 0.h),
+      ],
+    );
+  }
+
+  Widget buildOptionsForNotAuthenticatedUser() {
+    return Container(
+      height: 127.h,
+      decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24.r),
+      child: Column(
+        children: [
+          Expanded(
+            child: ListView.separated(
+              scrollDirection: Axis.horizontal,
+              itemCount: LandingPageData.getNotLoggedInServiceCardsList.length,
+              shrinkWrap: true,
+              padding: EdgeInsets.only(left: 16.h, right: 16.h),
+              itemBuilder: (context, index) {
+                return AnimationConfiguration.staggeredList(
+                  position: index,
+                  duration: const Duration(milliseconds: 1000),
+                  child: SlideAnimation(
+                    horizontalOffset: 100.0,
+                    child: FadeInAnimation(
+                      child: SmallServiceCard(
+                        serviceName: LandingPageData.getNotLoggedInServiceCardsList[index].serviceName,
+                        icon: LandingPageData.getNotLoggedInServiceCardsList[index].icon,
+                        title: LandingPageData.getNotLoggedInServiceCardsList[index].title,
+                        subtitle: LandingPageData.getNotLoggedInServiceCardsList[index].subtitle,
+                        iconColor: LandingPageData.getNotLoggedInServiceCardsList[index].iconColor,
+                        textColor: LandingPageData.getNotLoggedInServiceCardsList[index].textColor,
+                        backgroundColor: LandingPageData.getNotLoggedInServiceCardsList[index].backgroundColor,
+                        isBold: LandingPageData.getNotLoggedInServiceCardsList[index].isBold,
+                      ),
+                    ),
+                  ),
+                );
+              },
+              separatorBuilder: (BuildContext cxt, int index) => 0.width,
+            ),
+          ),
+        ],
+      ),
+    ).paddingSymmetrical(24.h, 0.h);
+  }
+
   @override
   Widget build(BuildContext context) {
     bookAppointmentsViewModel = Provider.of(context, listen: false);
@@ -132,7 +474,7 @@ class _LandingPageState extends State {
                             Navigator.of(context).push(springPageRoute(ProfileSettings()));
                           },
                           name: ('${appState.getAuthenticatedUser()!.firstName!} ${appState.getAuthenticatedUser()!.lastName!}'),
-                          imageUrl: appState.getAuthenticatedUser()?.gender == 1 ? AppAssets.male_img : AppAssets.femaleImg,
+                          imageUrl: appState.getAuthenticatedUser()?.gender == 1 ? AppAssets.maleImg : AppAssets.femaleImg,
                         ).expanded
                       : CustomButton(
                           text: LocaleKeys.loginOrRegister.tr(context: context),
@@ -152,22 +494,9 @@ class _LandingPageState extends State {
                     mainAxisSize: MainAxisSize.min,
                     spacing: 12.h,
                     children: [
-                      Utils.buildSvgWithAssets(icon: AppAssets.bell, height: 18.h, width: 18.h).onPress(() {
-                        Navigator.of(context).push(
-                          CustomPageRoute(
-                            page: MedicalFilePage(),
-                            // page: LoginScreen(),
-                          ),
-                        );
-                      }),
-                      Utils.buildSvgWithAssets(icon: AppAssets.search_icon, height: 18.h, width: 18.h).onPress(() {
-                        Navigator.of(context).push(
-                          CustomPageRoute(
-                            page: MedicalFilePage(),
-                            // page: LoginScreen(),
-                          ),
-                        );
-                      }),
+                      Utils.buildSvgWithAssets(icon: AppAssets.bell, height: 18.h, width: 18.h)
+                          .onPress(() => context.navigateWithName(AppRoutes.organSelectorPage)),
+                      Utils.buildSvgWithAssets(icon: AppAssets.search_icon, height: 18.h, width: 18.h).onPress(() {}),
                       Utils.buildSvgWithAssets(icon: AppAssets.contact_icon, height: 18.h, width: 18.h).onPress(() {
                         showCommonBottomSheetWithoutHeight(
                           context,
@@ -181,342 +510,7 @@ class _LandingPageState extends State {
                   ),
                 ],
               ).paddingSymmetrical(24.h, 0.h),
-              appState.isAuthenticated
-                  ? Column(
-                      children: [
-                        SizedBox(height: 12.h),
-                        Row(
-                          mainAxisAlignment: MainAxisAlignment.spaceBetween,
-                          children: [
-                            "Appointments & Visits".toText16(isBold: true),
-                            Row(
-                              children: [
-                                LocaleKeys.viewAll.tr(context: context).toText12(color: AppColors.primaryRedColor),
-                                SizedBox(width: 2.h),
-                                Icon(Icons.arrow_forward_ios, color: AppColors.primaryRedColor, size: 10.h),
-                              ],
-                            ),
-                          ],
-                        ).paddingSymmetrical(24.h, 0.h).onPress(() {
-                          Navigator.of(context).push(CustomPageRoute(page: MyAppointmentsPage()));
-                        }),
-                        SizedBox(height: 16.h),
-                        Consumer(
-                          builder: (context, myAppointmentsVM, child) {
-                            return myAppointmentsVM.isMyAppointmentsLoading
-                                ? Container(
-                                    decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
-                                      color: AppColors.whiteColor,
-                                      borderRadius: 24.r,
-                                      hasShadow: true,
-                                    ),
-                                    child: AppointmentCard(
-                                      patientAppointmentHistoryResponseModel: PatientAppointmentHistoryResponseModel(),
-                                      myAppointmentsViewModel: myAppointmentsViewModel,
-                                      bookAppointmentsViewModel: bookAppointmentsViewModel,
-                                      isLoading: true,
-                                      isFromHomePage: true,
-                                    ),
-                                  ).paddingSymmetrical(24.h, 0.h)
-                                : myAppointmentsVM.patientAppointmentsHistoryList.isNotEmpty
-                                    ? myAppointmentsVM.patientAppointmentsHistoryList.length == 1
-                                        ? Container(
-                                            decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
-                                              color: AppColors.whiteColor,
-                                              borderRadius: 24.r,
-                                              hasShadow: true,
-                                            ),
-                                            child: AppointmentCard(
-                                              patientAppointmentHistoryResponseModel: myAppointmentsVM.patientAppointmentsHistoryList.first,
-                                              myAppointmentsViewModel: myAppointmentsViewModel,
-                                              bookAppointmentsViewModel: bookAppointmentsViewModel,
-                                              isLoading: false,
-                                              isFromHomePage: true,
-                                            ),
-                                          ).paddingSymmetrical(24.h, 0.h)
-                                        : Swiper(
-                                            itemCount: myAppointmentsVM.isMyAppointmentsLoading
-                                                ? 3
-                                                : myAppointmentsVM.patientAppointmentsHistoryList.length < 3
-                                                    ? myAppointmentsVM.patientAppointmentsHistoryList.length
-                                                    : 3,
-                                            layout: SwiperLayout.STACK,
-                                            loop: true,
-                                            itemWidth: MediaQuery.of(context).size.width - 48.h,
-                                            indicatorLayout: PageIndicatorLayout.COLOR,
-                                            axisDirection: AxisDirection.right,
-                                            controller: _controller,
-                                            itemHeight: 200.h,
-                                            pagination: const SwiperPagination(
-                                              alignment: Alignment.bottomCenter,
-                                              margin: EdgeInsets.only(top: 210 + 8 + 24),
-                                              builder: DotSwiperPaginationBuilder(color: Color(0xffD9D9D9), activeColor: AppColors.blackBgColor),
-                                            ),
-                                            itemBuilder: (BuildContext context, int index) {
-                                              return Container(
-                                                decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
-                                                  color: AppColors.whiteColor,
-                                                  borderRadius: 24.r,
-                                                  hasShadow: true,
-                                                ),
-                                                child: AppointmentCard(
-                                                  patientAppointmentHistoryResponseModel: myAppointmentsVM.patientAppointmentsHistoryList[index],
-                                                  myAppointmentsViewModel: myAppointmentsViewModel,
-                                                  bookAppointmentsViewModel: bookAppointmentsViewModel,
-                                                  isLoading: false,
-                                                  isFromHomePage: true,
-                                                ),
-                                              );
-                                            },
-                                          )
-                                    : Container(
-                                        width: double.infinity,
-                                        decoration: RoundedRectangleBorder()
-                                            .toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24.r, hasShadow: true),
-                                        child: Padding(
-                                          padding: EdgeInsets.all(12.h),
-                                          child: Column(
-                                            children: [
-                                              Utils.buildSvgWithAssets(icon: AppAssets.home_calendar_icon, width: 32.h, height: 32.h),
-                                              SizedBox(height: 12.h),
-                                              "You do not have any upcoming appointment. Please book an appointment"
-                                                  .needTranslation
-                                                  .toText12(isCenter: true),
-                                              SizedBox(height: 12.h),
-                                              CustomButton(
-                                                text: LocaleKeys.bookAppo.tr(context: context),
-                                                onPressed: () {
-                                                  Navigator.of(context).push(CustomPageRoute(page: BookAppointmentPage()));
-                                                },
-                                                backgroundColor: Color(0xffFEE9EA),
-                                                borderColor: Color(0xffFEE9EA),
-                                                textColor: Color(0xffED1C2B),
-                                                fontSize: 14.f,
-                                                fontWeight: FontWeight.w500,
-                                                padding: EdgeInsets.fromLTRB(10.h, 0, 10.h, 0),
-                                                icon: AppAssets.add_icon,
-                                                iconColor: AppColors.primaryRedColor,
-                                                height: 46.h,
-                                              ),
-                                            ],
-                                          ),
-                                        ),
-                                      ).paddingSymmetrical(24.h, 0.h);
-                          },
-                        ),
-
-                        // Consumer for LiveCare pending request
-                        Consumer(
-                          builder: (context, immediateLiveCareVM, child) {
-                            return immediateLiveCareVM.patientHasPendingLiveCareRequest
-                                ? Column(
-                                    children: [
-                                      SizedBox(height: 12.h),
-                                      Container(
-                                        decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
-                                          color: AppColors.whiteColor,
-                                          borderRadius: 20.r,
-                                          hasShadow: true,
-                                          side: BorderSide(color: AppColors.ratingColorYellow, width: 3.h),
-                                        ),
-                                        width: double.infinity,
-                                        child: Padding(
-                                          padding: EdgeInsets.all(16.h),
-                                          child: Column(
-                                            crossAxisAlignment: CrossAxisAlignment.start,
-                                            children: [
-                                              Row(
-                                                mainAxisAlignment: MainAxisAlignment.spaceBetween,
-                                                children: [
-                                                  AppCustomChipWidget(
-                                                    labelText: immediateLiveCareViewModel.patientLiveCareHistoryList[0].stringCallStatus,
-                                                    backgroundColor: AppColors.warningColorYellow.withValues(alpha: 0.20),
-                                                    textColor: AppColors.alertColor,
-                                                  ),
-                                                  Utils.buildSvgWithAssets(icon: AppAssets.waiting_icon, width: 24.h, height: 24.h),
-                                                  // Lottie.asset(AppAnimations.pending_loading_animation, repeat: true, reverse: false, frameRate: FrameRate(60), width: 40.h, height: 40.h, fit: BoxFit.contain),
-                                                ],
-                                              ),
-                                              SizedBox(height: 8.h),
-                                              Row(
-                                                mainAxisAlignment: MainAxisAlignment.spaceBetween,
-                                                children: [
-                                                  "You have a pending LiveCare request".needTranslation.toText12(isBold: true),
-                                                  Utils.buildSvgWithAssets(
-                                                    icon: AppAssets.forward_arrow_icon_small,
-                                                    iconColor: AppColors.blackColor,
-                                                    width: 20.h,
-                                                    height: 15.h,
-                                                    fit: BoxFit.contain,
-                                                  ),
-                                                ],
-                                              ),
-                                            ],
-                                          ),
-                                        ),
-                                      ).paddingSymmetrical(24.h, 0.h).onPress(() {
-                                        Navigator.of(context).push(CustomPageRoute(page: ImmediateLiveCarePendingRequestPage()));
-                                      }),
-                                      SizedBox(height: 12.h),
-                                    ],
-                                  )
-                                : SizedBox(height: 12.h);
-                          },
-                        ),
-
-                        // Consumer for ER Online Check-In pending request
-                        Consumer(
-                          builder: (context, emergencyServicesVM, child) {
-                            return emergencyServicesVM.patientHasAdvanceERBalance
-                                ? Column(
-                                    children: [
-                                      SizedBox(height: 4.h),
-                                      Container(
-                                        decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
-                                          color: AppColors.whiteColor,
-                                          borderRadius: 20.r,
-                                          hasShadow: true,
-                                          side: BorderSide(color: AppColors.primaryRedColor, width: 3.h),
-                                        ),
-                                        width: double.infinity,
-                                        child: Padding(
-                                          padding: EdgeInsets.all(16.h),
-                                          child: Column(
-                                            crossAxisAlignment: CrossAxisAlignment.start,
-                                            children: [
-                                              Row(
-                                                mainAxisAlignment: MainAxisAlignment.spaceBetween,
-                                                children: [
-                                                  AppCustomChipWidget(
-                                                    labelText: "ER Online Check-In Request",
-                                                    backgroundColor: AppColors.primaryRedColor.withValues(alpha: 0.10),
-                                                    textColor: AppColors.primaryRedColor,
-                                                  ),
-                                                  Utils.buildSvgWithAssets(icon: AppAssets.appointment_checkin_icon, width: 24.h, height: 24.h, iconColor: AppColors.primaryRedColor),
-                                                ],
-                                              ),
-                                              SizedBox(height: 8.h),
-                                              Row(
-                                                mainAxisAlignment: MainAxisAlignment.spaceBetween,
-                                                children: [
-                                                  "You have ER Online Check-In Request".needTranslation.toText12(isBold: true),
-                                                  Utils.buildSvgWithAssets(
-                                                    icon: AppAssets.forward_arrow_icon_small,
-                                                    iconColor: AppColors.blackColor,
-                                                    width: 20.h,
-                                                    height: 15.h,
-                                                    fit: BoxFit.contain,
-                                                  ),
-                                                ],
-                                              ),
-                                            ],
-                                          ),
-                                        ),
-                                      ).paddingSymmetrical(24.h, 0.h).onPress(() {
-                                        Navigator.of(context).push(CustomPageRoute(page: ErOnlineCheckinHome()));
-                                        // context.read().navigateToEROnlineCheckIn();
-                                      }),
-                                      SizedBox(height: 12.h),
-                                    ],
-                                  )
-                                : SizedBox(height: 12.h);
-                          },
-                        ),
-
-                        Row(
-                          mainAxisAlignment: MainAxisAlignment.spaceBetween,
-                          children: [
-                            "Quick Links".needTranslation.toText16(isBold: true),
-                            Row(
-                              children: [
-                                "View medical file".needTranslation.toText12(color: AppColors.primaryRedColor),
-                                SizedBox(width: 2.h),
-                                Icon(Icons.arrow_forward_ios, color: AppColors.primaryRedColor, size: 10.h),
-                              ],
-                            ),
-                          ],
-                        ).paddingSymmetrical(24.h, 0.h).onPress(() {
-                          Navigator.of(context).push(CustomPageRoute(page: MedicalFilePage()));
-                        }),
-                        SizedBox(height: 16.h),
-                        Container(
-                          height: 121.h,
-                          decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24.r),
-                          child: Column(
-                            children: [
-                              Expanded(
-                                child: ListView.separated(
-                                  scrollDirection: Axis.horizontal,
-                                  itemCount: LandingPageData.getLoggedInServiceCardsList.length,
-                                  shrinkWrap: true,
-                                  padding: EdgeInsets.only(left: 16.h, right: 16.h),
-                                  itemBuilder: (context, index) {
-                                    return AnimationConfiguration.staggeredList(
-                                      position: index,
-                                      duration: const Duration(milliseconds: 1000),
-                                      child: SlideAnimation(
-                                        horizontalOffset: 100.0,
-                                        child: FadeInAnimation(
-                                          child: SmallServiceCard(
-                                            icon: LandingPageData.getLoggedInServiceCardsList[index].icon,
-                                            title: LandingPageData.getLoggedInServiceCardsList[index].title,
-                                            subtitle: LandingPageData.getLoggedInServiceCardsList[index].subtitle,
-                                            iconColor: LandingPageData.getLoggedInServiceCardsList[index].iconColor,
-                                            textColor: LandingPageData.getLoggedInServiceCardsList[index].textColor,
-                                            backgroundColor: LandingPageData.getLoggedInServiceCardsList[index].backgroundColor,
-                                            isBold: LandingPageData.getLoggedInServiceCardsList[index].isBold,
-                                            serviceName: LandingPageData.getLoggedInServiceCardsList[index].serviceName,
-                                          ),
-                                        ),
-                                      ),
-                                    );
-                                  },
-                                  separatorBuilder: (BuildContext cxt, int index) => 10.width,
-                                ),
-                              ),
-                            ],
-                          ),
-                        ).paddingSymmetrical(24.h, 0.h),
-                      ],
-                    )
-                  : Container(
-                      height: 127.h,
-                      decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24.r),
-                      child: Column(
-                        children: [
-                          Expanded(
-                            child: ListView.separated(
-                              scrollDirection: Axis.horizontal,
-                              itemCount: LandingPageData.getNotLoggedInServiceCardsList.length,
-                              shrinkWrap: true,
-                              padding: EdgeInsets.only(left: 16.h, right: 16.h),
-                              itemBuilder: (context, index) {
-                                return AnimationConfiguration.staggeredList(
-                                  position: index,
-                                  duration: const Duration(milliseconds: 1000),
-                                  child: SlideAnimation(
-                                    horizontalOffset: 100.0,
-                                    child: FadeInAnimation(
-                                      child: SmallServiceCard(
-                                        serviceName: LandingPageData.getNotLoggedInServiceCardsList[index].serviceName,
-                                        icon: LandingPageData.getNotLoggedInServiceCardsList[index].icon,
-                                        title: LandingPageData.getNotLoggedInServiceCardsList[index].title,
-                                        subtitle: LandingPageData.getNotLoggedInServiceCardsList[index].subtitle,
-                                        iconColor: LandingPageData.getNotLoggedInServiceCardsList[index].iconColor,
-                                        textColor: LandingPageData.getNotLoggedInServiceCardsList[index].textColor,
-                                        backgroundColor: LandingPageData.getNotLoggedInServiceCardsList[index].backgroundColor,
-                                        isBold: LandingPageData.getNotLoggedInServiceCardsList[index].isBold,
-                                      ),
-                                    ),
-                                  ),
-                                );
-                              },
-                              separatorBuilder: (BuildContext cxt, int index) => 0.width,
-                            ),
-                          ),
-                        ],
-                      ),
-                    ).paddingSymmetrical(24.h, 0.h),
+              if (appState.isAuthenticated) buildOptionsForAuthenticatedUser() else buildOptionsForNotAuthenticatedUser(),
               Row(
                 mainAxisAlignment: MainAxisAlignment.spaceBetween,
                 children: [
diff --git a/lib/presentation/home/widgets/large_service_card.dart b/lib/presentation/home/widgets/large_service_card.dart
index 3989523..7a155df 100644
--- a/lib/presentation/home/widgets/large_service_card.dart
+++ b/lib/presentation/home/widgets/large_service_card.dart
@@ -34,7 +34,7 @@ class LargeServiceCard extends StatelessWidget {
         mainAxisAlignment: MainAxisAlignment.start,
         crossAxisAlignment: CrossAxisAlignment.start,
         children: [
-          Image.asset(AppAssets.livecare_service, width: 220.w, fit: BoxFit.contain),
+          Image.asset(AppAssets.liveCareService, width: 220.w, fit: BoxFit.contain),
           SizedBox(height: 10.h),
           Row(
             children: [
diff --git a/lib/presentation/medical_file/medical_file_page.dart b/lib/presentation/medical_file/medical_file_page.dart
index 883ca37..05ae91a 100644
--- a/lib/presentation/medical_file/medical_file_page.dart
+++ b/lib/presentation/medical_file/medical_file_page.dart
@@ -123,7 +123,7 @@ class _MedicalFilePageState extends State {
                 fit: BoxFit.contain,
               ),
               Utils.buildImgWithAssets(
-                icon: AppAssets.male_img,
+                icon: AppAssets.maleImg,
                 height: 32.h,
                 border: 1.5,
                 borderRadius: 50.r,
@@ -174,7 +174,7 @@ class _MedicalFilePageState extends State {
                   Row(
                     crossAxisAlignment: CrossAxisAlignment.start,
                     children: [
-                      Image.asset(appState.getAuthenticatedUser()?.gender == 1 ? AppAssets.male_img : AppAssets.femaleImg, width: 56.w, height: 56.h),
+                      Image.asset(appState.getAuthenticatedUser()?.gender == 1 ? AppAssets.maleImg : AppAssets.femaleImg, width: 56.w, height: 56.h),
                       SizedBox(width: 8.w),
                       Column(
                         crossAxisAlignment: CrossAxisAlignment.start,
diff --git a/lib/presentation/my_family/widget/family_cards.dart b/lib/presentation/my_family/widget/family_cards.dart
index 4db5470..3621cc3 100644
--- a/lib/presentation/my_family/widget/family_cards.dart
+++ b/lib/presentation/my_family/widget/family_cards.dart
@@ -173,9 +173,9 @@ class _FamilyCardsState extends State {
                     children: [
                       Utils.buildImgWithAssets(
                         icon: profile.gender == null
-                            ? AppAssets.dummy_user
+                            ? AppAssets.dummyUser
                             : profile.gender == 1
-                                ? ((profile.age ?? 0) < 7 ? AppAssets.babyBoyImg : AppAssets.male_img)
+                                ? ((profile.age ?? 0) < 7 ? AppAssets.babyBoyImg : AppAssets.maleImg)
                                 : (profile.age! < 7 ? AppAssets.babyGirlImg : AppAssets.femaleImg),
                         width: 72.h,
                         height: 70.h,
diff --git a/lib/presentation/profile_settings/profile_settings.dart b/lib/presentation/profile_settings/profile_settings.dart
index ee7465d..9e4c808 100644
--- a/lib/presentation/profile_settings/profile_settings.dart
+++ b/lib/presentation/profile_settings/profile_settings.dart
@@ -29,18 +29,14 @@ import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart';
 import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart';
 import 'package:provider/provider.dart';
 
-import '../../core/dependencies.dart' show getIt;
-
 class ProfileSettings extends StatefulWidget {
-  ProfileSettings({Key? key}) : super(key: key);
+  const ProfileSettings({super.key});
 
   @override
-  _ProfileSettingsState createState() {
-    return _ProfileSettingsState();
-  }
+  ProfileSettingsState createState() => ProfileSettingsState();
 }
 
-class _ProfileSettingsState extends State {
+class ProfileSettingsState extends State {
   @override
   void initState() {
     super.initState();
@@ -184,7 +180,10 @@ class _ProfileSettingsState extends State {
                     ),
                   ],
                 ),
-                "Quick Actions".needTranslation.toText18(weight: FontWeight.w600, textOverflow: TextOverflow.ellipsis, maxlines: 1).paddingOnly(left: 24.w, right: 24.w),
+                "Quick Actions"
+                    .needTranslation
+                    .toText18(weight: FontWeight.w600, textOverflow: TextOverflow.ellipsis, maxlines: 1)
+                    .paddingOnly(left: 24.w, right: 24.w),
                 Container(
                   margin: EdgeInsets.only(left: 24.w, right: 24.w, top: 16.h, bottom: 24.h),
                   padding: EdgeInsets.only(top: 4.h, bottom: 4.h),
@@ -192,9 +191,12 @@ class _ProfileSettingsState extends State {
                   child: Column(
                     children: [
                       actionItem(AppAssets.language_change, "Language".needTranslation, () {
-                        showCommonBottomSheetWithoutHeight(context, title: "Application Language".needTranslation, child: AppLanguageChange(), callBackFunc: () {}, isFullScreen: false);
+                        showCommonBottomSheetWithoutHeight(context,
+                            title: "Application Language".needTranslation, child: AppLanguageChange(), callBackFunc: () {}, isFullScreen: false);
                       }, trailingLabel: Utils.appState.isArabic() ? "العربية".needTranslation : "English".needTranslation),
                       1.divider,
+                      actionItem(AppAssets.accessibility, "Symptoms Checker".needTranslation, () {}),
+                      1.divider,
                       actionItem(AppAssets.accessibility, "Accessibility".needTranslation, () {}),
                       1.divider,
                       actionItem(AppAssets.bell, "Notifications Settings".needTranslation, () {}),
@@ -203,7 +205,10 @@ class _ProfileSettingsState extends State {
                     ],
                   ),
                 ),
-                "Personal Information".needTranslation.toText18(weight: FontWeight.w600, textOverflow: TextOverflow.ellipsis, maxlines: 1).paddingOnly(left: 24.w, right: 24.w),
+                "Personal Information"
+                    .needTranslation
+                    .toText18(weight: FontWeight.w600, textOverflow: TextOverflow.ellipsis, maxlines: 1)
+                    .paddingOnly(left: 24.w, right: 24.w),
                 Container(
                   margin: EdgeInsets.only(left: 24.w, right: 24.w, top: 16.h, bottom: 24.h),
                   padding: EdgeInsets.only(top: 4.h, bottom: 4.h),
@@ -220,7 +225,10 @@ class _ProfileSettingsState extends State {
                     ],
                   ),
                 ),
-                "Help & Support".needTranslation.toText18(weight: FontWeight.w600, textOverflow: TextOverflow.ellipsis, maxlines: 1).paddingOnly(left: 24.w, right: 24.w),
+                "Help & Support"
+                    .needTranslation
+                    .toText18(weight: FontWeight.w600, textOverflow: TextOverflow.ellipsis, maxlines: 1)
+                    .paddingOnly(left: 24.w, right: 24.w),
                 Container(
                   margin: EdgeInsets.only(left: 24.w, right: 24.w, top: 16.h),
                   padding: EdgeInsets.only(top: 4.h, bottom: 4.h),
@@ -261,12 +269,13 @@ class _ProfileSettingsState extends State {
         children: [
           Utils.buildSvgWithAssets(icon: icon, iconColor: AppColors.greyTextColor),
           label.toText14(weight: FontWeight.w500, textOverflow: TextOverflow.ellipsis, maxlines: 1).expanded,
-          if (trailingLabel.isNotEmpty) trailingLabel.toText14(color: AppColors.greyTextColor, weight: FontWeight.w500, textOverflow: TextOverflow.ellipsis, maxlines: 1),
+          if (trailingLabel.isNotEmpty)
+            trailingLabel.toText14(color: AppColors.greyTextColor, weight: FontWeight.w500, textOverflow: TextOverflow.ellipsis, maxlines: 1),
           switchValue != null
               ? Switch(
                   value: switchValue,
                   onChanged: (value) {},
-                  activeColor: AppColors.successColor,
+                  activeThumbColor: AppColors.successColor,
                   activeTrackColor: AppColors.successColor.withValues(alpha: .15),
                 )
               : Transform.scale(
@@ -295,8 +304,8 @@ class FamilyCardWidget extends StatelessWidget {
   Widget build(BuildContext context) {
     AppState appState = getIt.get();
     final isActive = (profile.responseId == appState.getAuthenticatedUser()?.patientId);
-    final isParentUser = appState.getAuthenticatedUser()?.isParentUser ?? false;
-    final canSwitch = isParentUser || (!isParentUser && profile.responseId == appState.getSuperUserID);
+    // final isParentUser = appState.getAuthenticatedUser()?.isParentUser ?? false;
+    // final canSwitch = isParentUser || (!isParentUser && profile.responseId == appState.getSuperUserID);
     return Container(
       decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
         color: AppColors.whiteColor,
@@ -312,7 +321,7 @@ class FamilyCardWidget extends StatelessWidget {
               Row(
                 crossAxisAlignment: CrossAxisAlignment.start,
                 children: [
-                  Image.asset(profile.gender == 1 ? AppAssets.male_img : AppAssets.femaleImg, width: 56.w, height: 56.h),
+                  Image.asset(profile.gender == 1 ? AppAssets.maleImg : AppAssets.femaleImg, width: 56.w, height: 56.h),
                   Column(
                     crossAxisAlignment: CrossAxisAlignment.start,
                     mainAxisSize: MainAxisSize.min,
diff --git a/lib/presentation/profile_settings/widgets/family_card_widget.dart b/lib/presentation/profile_settings/widgets/family_card_widget.dart
new file mode 100644
index 0000000..eaee4c0
--- /dev/null
+++ b/lib/presentation/profile_settings/widgets/family_card_widget.dart
@@ -0,0 +1,207 @@
+import 'package:easy_localization/easy_localization.dart';
+import 'package:flutter/material.dart';
+import 'package:hmg_patient_app_new/core/app_assets.dart';
+import 'package:hmg_patient_app_new/core/app_export.dart';
+import 'package:hmg_patient_app_new/core/app_state.dart';
+import 'package:hmg_patient_app_new/core/dependencies.dart';
+import 'package:hmg_patient_app_new/core/utils/date_util.dart';
+import 'package:hmg_patient_app_new/extensions/int_extensions.dart';
+import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
+import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
+import 'package:hmg_patient_app_new/features/insurance/insurance_view_model.dart';
+import 'package:hmg_patient_app_new/features/medical_file/models/family_file_response_model.dart';
+import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
+import 'package:hmg_patient_app_new/theme/colors.dart';
+import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart';
+import 'package:hmg_patient_app_new/widgets/chip/app_custom_chip_widget.dart';
+import 'package:provider/provider.dart';
+
+class FamilyCardWidget extends StatelessWidget {
+  final Function() onAddFamilyMemberPress;
+  final Function(FamilyFileResponseModelLists member) onFamilySwitchPress;
+  final FamilyFileResponseModelLists profile;
+
+  const FamilyCardWidget({
+    super.key,
+    required this.onAddFamilyMemberPress,
+    required this.profile,
+    required this.onFamilySwitchPress(FamilyFileResponseModelLists member),
+  });
+
+  @override
+  Widget build(BuildContext context) {
+    AppState appState = getIt.get();
+    final isActive = (profile.responseId == appState.getAuthenticatedUser()?.patientId);
+    final isParentUser = appState.getAuthenticatedUser()?.isParentUser ?? false;
+    final canSwitch = isParentUser || (!isParentUser && profile.responseId == appState.getSuperUserID);
+    return Container(
+      decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
+        color: AppColors.whiteColor,
+        borderRadius: 24.r,
+        hasShadow: true,
+      ),
+      child: Column(
+        children: [
+          Column(
+            crossAxisAlignment: CrossAxisAlignment.start,
+            spacing: 8.h,
+            children: [
+              Row(
+                crossAxisAlignment: CrossAxisAlignment.start,
+                children: [
+                  Image.asset(profile.gender == 1 ? AppAssets.maleImg : AppAssets.femaleImg, width: 56.w, height: 56.h),
+                  Column(
+                    crossAxisAlignment: CrossAxisAlignment.start,
+                    mainAxisSize: MainAxisSize.min,
+                    children: [
+                      "${profile.patientName}".toText18(isBold: true, weight: FontWeight.w600, textOverflow: TextOverflow.ellipsis, maxlines: 1),
+                      AppCustomChipWidget(
+                        icon: AppAssets.file_icon,
+                        labelText: "${LocaleKeys.fileNo.tr(context: context)}: ${profile.responseId}",
+                        iconSize: 12.w,
+                      ),
+                    ],
+                  ).expanded,
+                  Icon(Icons.qr_code, size: 56.h)
+                ],
+              ),
+              SizedBox(height: 4.h),
+              SizedBox(
+                child: Wrap(
+                  alignment: WrapAlignment.start,
+                  spacing: 4.w,
+                  runSpacing: 4.h,
+                  children: [
+                    AppCustomChipWidget(
+                      labelText: "${profile.age} Years Old".needTranslation,
+                    ),
+                    isActive && appState.getAuthenticatedUser()!.bloodGroup != null
+                        ? AppCustomChipWidget(
+                            icon: AppAssets.blood_icon,
+                            labelPadding: EdgeInsetsDirectional.only(start: -6.w, end: 8.w),
+                            labelText: "Blood: ${appState.getAuthenticatedUser()!.bloodGroup ?? ""}",
+                            iconColor: AppColors.primaryRedColor)
+                        : SizedBox(),
+                    Selector(
+                      selector: (context, insuranceVM) => (
+                        isEmpty: insuranceVM.patientInsuranceList.isEmpty,
+                        patientID: insuranceVM.patientInsuranceList.isNotEmpty ? insuranceVM.patientInsuranceList.first.patientID : null,
+                        isLoading: insuranceVM.isInsuranceLoading,
+                        cardValidTo: insuranceVM.patientInsuranceList.isNotEmpty ? insuranceVM.patientInsuranceList.first.cardValidTo : null
+                      ),
+                      builder: (context, data, child) {
+                        if (data.isEmpty) {
+                          return const SizedBox();
+                        } else if (profile.responseId != data.patientID) {
+                          return SizedBox();
+                        }
+
+                        final isLoading = data.isLoading;
+                        final isExpired = !isLoading && DateTime.now().isAfter(DateUtil.convertStringToDate(data.cardValidTo));
+
+                        final String icon;
+                        final String labelText;
+                        final Color iconColor;
+                        final Color backgroundColor;
+
+                        if (isLoading) {
+                          icon = AppAssets.cancel_circle_icon;
+                          labelText = "Insurance".needTranslation;
+                          iconColor = AppColors.primaryRedColor;
+                          backgroundColor = AppColors.primaryRedColor;
+                        } else if (isExpired) {
+                          icon = AppAssets.cancel_circle_icon;
+                          labelText = "Insurance Expired".needTranslation;
+                          iconColor = AppColors.primaryRedColor;
+                          backgroundColor = AppColors.primaryRedColor.withValues(alpha: 0.15);
+                        } else {
+                          icon = AppAssets.insurance_active_icon;
+                          labelText = "Insurance Active".needTranslation;
+                          iconColor = AppColors.successColor;
+                          backgroundColor = AppColors.successColor.withValues(alpha: 0.15);
+                        }
+
+                        return AppCustomChipWidget(
+                          icon: icon,
+                          labelText: labelText,
+                          iconColor: iconColor,
+                          iconSize: 12.w,
+                          backgroundColor: backgroundColor,
+                          labelPadding: EdgeInsetsDirectional.only(start: -6.w, end: 8.w),
+                          // padding: EdgeInsets.zero,
+                        ).toShimmer2(isShow: isLoading);
+                      },
+                    )
+                  ],
+                ),
+              ),
+            ],
+          ).paddingOnly(top: 16.h, right: 16.w, left: 16.w, bottom: 12.h),
+          1.divider,
+          _buildActionButton(appState),
+        ],
+      ),
+    );
+  }
+
+  Widget _buildActionButton(AppState appState) {
+    final isParentUser = appState.getAuthenticatedUser()?.isParentUser ?? false;
+    final int? currentUserId = appState.getAuthenticatedUser()?.patientId;
+    final int? superUserId = appState.getSuperUserID;
+
+    if (isParentUser) {
+      return _buildParentUserButton(currentUserId);
+    } else {
+      return _buildNonParentUserButton(superUserId);
+    }
+  }
+
+  Widget _buildParentUserButton(int? currentUserId) {
+    final canSwitch = profile.responseId != currentUserId;
+
+    return CustomButton(
+      icon: canSwitch ? AppAssets.switch_user : AppAssets.add_family,
+      text: canSwitch ? "Switch Family File".needTranslation : "Add a new family member".needTranslation,
+      onPressed: canSwitch ? () => onFamilySwitchPress(profile) : onAddFamilyMemberPress,
+      backgroundColor: canSwitch ? AppColors.secondaryLightRedColor : AppColors.primaryRedColor,
+      borderColor: canSwitch ? AppColors.secondaryLightRedColor : AppColors.primaryRedColor,
+      textColor: canSwitch ? AppColors.primaryRedColor : AppColors.whiteColor,
+      iconColor: canSwitch ? AppColors.primaryRedColor : AppColors.whiteColor,
+      height: isFoldable ? 50.h : 40.h,
+      fontSize: 14.f,
+    ).paddingOnly(top: 12.h, right: 16.w, left: 16.w, bottom: 16.h);
+  }
+
+  Widget _buildNonParentUserButton(int? superUserId) {
+    final canSwitchBack = superUserId != null && superUserId == profile.responseId;
+
+    return CustomButton(
+      icon: AppAssets.switch_user,
+      text: canSwitchBack ? "Switch Back To Family File".needTranslation : "Switch".needTranslation,
+      backgroundColor: canSwitchBack ? AppColors.primaryRedColor : Colors.grey.shade200,
+      borderColor: canSwitchBack ? AppColors.primaryRedColor : Colors.grey.shade200,
+      textColor: canSwitchBack ? AppColors.whiteColor : AppColors.greyTextColor,
+      iconColor: canSwitchBack ? AppColors.whiteColor : AppColors.greyTextColor,
+      onPressed: canSwitchBack ? () => onFamilySwitchPress(profile) : () {},
+      height: isFoldable ? 50.h : 40.h,
+      fontSize: 14.f,
+    ).paddingOnly(top: 12.h, right: 16.w, left: 16.w, bottom: 16.h);
+  }
+
+//    //TODO: Add family file switch logic here
+//           isRootUser
+//               ? CustomButton(icon: AppAssets.add_family, text: "Add a new family member".needTranslation, height: 40.h, fontSize: 14, onPressed: () {})
+//                   .paddingOnly(top: 12, right: 16, left: 16, bottom: 16)
+//               : CustomButton(
+//                       icon: AppAssets.add_family,
+//                       backgroundColor: AppColors.secondaryLightRedColor,
+//                       borderColor: AppColors.secondaryLightRedColor,
+//                       textColor: AppColors.primaryRedColor,
+//                       iconColor: AppColors.primaryRedColor,
+//                       text: "Switch to this medical file".needTranslation,
+//                       height: 40.h,
+//                       fontSize: 14,
+//                       onPressed: () {})
+//                   .paddingOnly(top: 12, right: 16, left: 16, bottom: 16),
+//
+}
diff --git a/lib/presentation/symptoms_checker/organ_selector_screen.dart b/lib/presentation/symptoms_checker/organ_selector_screen.dart
new file mode 100644
index 0000000..6b9582c
--- /dev/null
+++ b/lib/presentation/symptoms_checker/organ_selector_screen.dart
@@ -0,0 +1,337 @@
+import 'package:flutter/material.dart';
+import 'package:hmg_patient_app_new/core/app_assets.dart';
+import 'package:hmg_patient_app_new/core/app_export.dart';
+import 'package:hmg_patient_app_new/core/app_state.dart';
+import 'package:hmg_patient_app_new/core/dependencies.dart';
+import 'package:hmg_patient_app_new/core/enums.dart';
+import 'package:hmg_patient_app_new/core/utils/utils.dart';
+import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
+import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
+import 'package:hmg_patient_app_new/presentation/symptoms_checker/symptoms_checker_view_model.dart';
+import 'package:hmg_patient_app_new/presentation/symptoms_checker/widgets/interactive_body_widget.dart';
+import 'package:hmg_patient_app_new/theme/colors.dart';
+import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart';
+import 'package:hmg_patient_app_new/widgets/chip/app_custom_chip_widget.dart';
+import 'package:provider/provider.dart';
+
+class OrganSelectorPage extends StatefulWidget {
+  const OrganSelectorPage({super.key});
+
+  @override
+  State createState() => _OrganSelectorPageState();
+}
+
+class _OrganSelectorPageState extends State {
+  late final AppState _appState;
+
+  @override
+  void initState() {
+    super.initState();
+    _appState = getIt.get();
+  }
+
+  void _onNextPressed(SymptomsCheckerViewModel viewModel) {
+    if (!viewModel.validateSelection()) {
+      ScaffoldMessenger.of(context).showSnackBar(
+        SnackBar(
+          content: Text('Please select at least one organ'.needTranslation),
+          backgroundColor: AppColors.errorColor,
+        ),
+      );
+      return;
+    }
+
+    ScaffoldMessenger.of(context).showSnackBar(
+      SnackBar(
+        content: Text('Selected organs:\n\n ${viewModel.getSelectedOrganIds()}'),
+        backgroundColor: AppColors.successColor,
+      ),
+    );
+  }
+
+  @override
+  Widget build(BuildContext context) {
+    return ChangeNotifierProvider(
+      create: (_) => SymptomsCheckerViewModel(),
+      child: Scaffold(
+        backgroundColor: AppColors.bgScaffoldColor,
+        appBar: _buildAppBar(),
+        body: Consumer(
+          builder: (context, viewModel, _) {
+            return Column(
+              crossAxisAlignment: CrossAxisAlignment.start,
+              children: [
+                _buildTitle(),
+                SizedBox(height: 8.h),
+                Expanded(
+                  child: Stack(
+                    children: [
+                      _buildBodyViewer(viewModel),
+                      _buildViewToggleButtons(viewModel),
+                      _buildBottomSheet(viewModel),
+                    ],
+                  ),
+                ),
+              ],
+            );
+          },
+        ),
+      ),
+    );
+  }
+
+  PreferredSizeWidget _buildAppBar() {
+    return AppBar(
+      backgroundColor: AppColors.bgScaffoldColor,
+      elevation: 0,
+      leading: Transform.flip(
+        flipX: _appState.isArabic(),
+        child: IconButton(
+          icon: Utils.buildSvgWithAssets(
+            icon: AppAssets.arrow_back,
+            width: 32.h,
+            height: 32.h,
+          ),
+          padding: const EdgeInsets.only(left: 12),
+          onPressed: () => Navigator.pop(context),
+          highlightColor: Colors.transparent,
+        ),
+      ),
+    );
+  }
+
+  Widget _buildTitle() {
+    return Padding(
+      padding: EdgeInsets.symmetric(horizontal: 16.w),
+      child: Text(
+        "Organ Selector".needTranslation,
+        style: TextStyle(
+          color: AppColors.textColor,
+          fontSize: 22.f,
+          fontWeight: FontWeight.w600,
+        ),
+      ),
+    );
+  }
+
+  Widget _buildBodyViewer(SymptomsCheckerViewModel viewModel) {
+    return Padding(
+      padding: EdgeInsets.fromLTRB(16.h, 16.h, 16.h, 45.h),
+      child: AnimatedSwitcher(
+        duration: const Duration(milliseconds: 600),
+        transitionBuilder: (child, animation) => _build3DFlipTransition(child, animation),
+        switchInCurve: Curves.easeInOut,
+        switchOutCurve: Curves.easeInOut,
+        child: InteractiveBodyWidget(
+          key: ValueKey(viewModel.currentView),
+          bodyImageAsset: viewModel.currentView == BodyView.front ? AppAssets.fullBodyFront : AppAssets.fullBodyBack,
+          organs: viewModel.currentOrgans,
+          selectedOrganIds: viewModel.selectedOrganIds,
+          onOrganTap: viewModel.toggleOrganSelection,
+          isBodyHidden: viewModel.isBodyHidden,
+        ),
+      ),
+    );
+  }
+
+  Widget _build3DFlipTransition(Widget child, Animation animation) {
+    final rotateAnimation = Tween(begin: 0.5, end: 0.0).animate(
+      CurvedAnimation(parent: animation, curve: Curves.easeInOut),
+    );
+
+    return AnimatedBuilder(
+      animation: rotateAnimation,
+      builder: (context, child) {
+        final angle = rotateAnimation.value * 3.14159;
+        final transform = Matrix4.identity()
+          ..setEntry(3, 2, 0.001)
+          ..rotateY(angle);
+
+        return Transform(
+          transform: transform,
+          alignment: Alignment.center,
+          child: child,
+        );
+      },
+      child: child,
+    );
+  }
+
+  Widget _buildViewToggleButtons(SymptomsCheckerViewModel viewModel) {
+    return Positioned(
+      left: 16.w,
+      top: 36.h,
+      child: Column(
+        children: [
+          _buildToggleButton(
+            icon: AppAssets.bodyIcon,
+            onTap: viewModel.toggleIsBodyHidden,
+          ),
+          SizedBox(height: 16.h),
+          _buildToggleButton(
+            icon: AppAssets.rotateIcon,
+            onTap: viewModel.toggleView,
+          ),
+        ],
+      ),
+    );
+  }
+
+  Widget _buildToggleButton({required String icon, required VoidCallback onTap}) {
+    return GestureDetector(
+      onTap: onTap,
+      child: Container(
+        width: 48.w,
+        height: 48.h,
+        decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
+          color: AppColors.whiteColor,
+          borderRadius: 11.r,
+        ),
+        child: Center(
+          child: Utils.buildSvgWithAssets(
+            icon: icon,
+            width: 25.w,
+            height: 25.h,
+          ),
+        ),
+      ),
+    );
+  }
+
+  Widget _buildBottomSheet(SymptomsCheckerViewModel viewModel) {
+    return Positioned(
+      left: 0,
+      right: 0,
+      bottom: 0,
+      child: AnimatedContainer(
+        duration: const Duration(milliseconds: 300),
+        curve: Curves.easeInOut,
+        decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24.r),
+        child: SafeArea(
+          top: false,
+          child: Stack(
+            clipBehavior: Clip.none,
+            children: [
+              Column(
+                mainAxisSize: MainAxisSize.min,
+                crossAxisAlignment: CrossAxisAlignment.start,
+                children: [
+                  if (viewModel.isBottomSheetExpanded) ...[
+                    SizedBox(height: 20.h),
+                    _buildBottomSheetTitle(),
+                    SizedBox(height: 12.h),
+                    _buildSelectedOrgansContent(viewModel),
+                    SizedBox(height: 16.h),
+                    _buildNextButton(viewModel),
+                    SizedBox(height: 16.h),
+                  ] else
+                    SizedBox(height: 20.h),
+                ],
+              ),
+              _buildExpandCollapseButton(viewModel),
+            ],
+          ),
+        ),
+      ),
+    );
+  }
+
+  Widget _buildBottomSheetTitle() {
+    return Padding(
+      padding: EdgeInsets.symmetric(horizontal: 16.w),
+      child: Text(
+        'Selected Organs'.needTranslation,
+        style: TextStyle(
+          fontSize: 16.f,
+          fontWeight: FontWeight.w600,
+          color: AppColors.textColor,
+        ),
+      ),
+    );
+  }
+
+  Widget _buildSelectedOrgansContent(SymptomsCheckerViewModel viewModel) {
+    if (viewModel.selectedOrgans.isEmpty) {
+      return Padding(
+        padding: EdgeInsets.symmetric(horizontal: 16.w),
+        child: Text(
+          'No organs selected yet'.needTranslation,
+          style: TextStyle(
+            color: AppColors.greyTextColor,
+            fontSize: 14.f,
+          ),
+        ),
+      );
+    }
+
+    return ConstrainedBox(
+      constraints: BoxConstraints(maxHeight: 150.h),
+      child: SingleChildScrollView(
+        padding: EdgeInsets.symmetric(horizontal: 16.w),
+        child: Wrap(
+          spacing: 8.w,
+          runSpacing: 8.h,
+          children: viewModel.selectedOrgans.map((organ) {
+            return AppCustomChipWidget(
+              labelText: organ.name,
+              backgroundColor: AppColors.secondaryLightRedColor,
+              textColor: AppColors.primaryRedColor,
+              deleteIcon: AppAssets.cancel,
+              deleteIconColor: AppColors.primaryRedColor,
+              deleteIconHasColor: false,
+              onDeleteTap: () => viewModel.removeOrgan(organ.id),
+            );
+          }).toList(),
+        ),
+      ),
+    );
+  }
+
+  Widget _buildNextButton(SymptomsCheckerViewModel viewModel) {
+    return Padding(
+      padding: EdgeInsets.symmetric(horizontal: 16.w),
+      child: CustomButton(
+        text: 'Next'.needTranslation,
+        onPressed: () => _onNextPressed(viewModel),
+        isDisabled: viewModel.selectedOrgans.isEmpty,
+        backgroundColor: AppColors.primaryRedColor,
+        textColor: AppColors.whiteColor,
+      ),
+    );
+  }
+
+  Widget _buildExpandCollapseButton(SymptomsCheckerViewModel viewModel) {
+    return Positioned(
+      right: 24.w,
+      top: -24.h,
+      child: GestureDetector(
+        onTap: viewModel.toggleBottomSheet,
+        behavior: HitTestBehavior.opaque,
+        child: Container(
+          width: 70.w,
+          height: 70.h,
+          alignment: Alignment.center,
+          child: Container(
+            width: 48.w,
+            height: 48.h,
+            decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
+              color: AppColors.whiteColor,
+              borderRadius: 11.r,
+            ),
+            child: Center(
+              child: AnimatedRotation(
+                duration: const Duration(milliseconds: 300),
+                turns: viewModel.isBottomSheetExpanded ? 0.25 : -0.25,
+                child: Utils.buildSvgWithAssets(
+                  icon: AppAssets.arrowRight,
+                  width: 25.w,
+                  height: 25.h,
+                ),
+              ),
+            ),
+          ),
+        ),
+      ),
+    );
+  }
+}
diff --git a/lib/presentation/symptoms_checker/symptoms_checker_view_model.dart b/lib/presentation/symptoms_checker/symptoms_checker_view_model.dart
new file mode 100644
index 0000000..35a23f1
--- /dev/null
+++ b/lib/presentation/symptoms_checker/symptoms_checker_view_model.dart
@@ -0,0 +1,108 @@
+import 'package:flutter/cupertino.dart';
+import 'package:hmg_patient_app_new/core/enums.dart';
+import 'package:hmg_patient_app_new/features/symptoms_checker/models/organ_model.dart';
+import 'package:hmg_patient_app_new/features/symptoms_checker/organ_mapping_data.dart';
+
+class SymptomsCheckerViewModel extends ChangeNotifier {
+  // State variables
+  bool isBodyHidden = false;
+  BodyView _currentView = BodyView.front;
+  final Set _selectedOrganIds = {};
+  bool _isBottomSheetExpanded = false;
+
+  // Getters
+
+  BodyView get currentView => _currentView;
+
+  Set get selectedOrganIds => _selectedOrganIds;
+
+  bool get isBottomSheetExpanded => _isBottomSheetExpanded;
+
+  /// Get organs for current view
+  List get currentOrgans => OrganData.getOrgansForView(_currentView);
+
+  /// Get all selected organs from both views
+  List get selectedOrgans {
+    final allOrgans = [
+      ...OrganData.frontViewOrgans,
+      ...OrganData.backViewOrgans,
+    ];
+    return allOrgans.where((organ) => _selectedOrganIds.contains(organ.id)).toList();
+  }
+
+  /// Check if any organs are selected
+  bool get hasSelectedOrgans => _selectedOrganIds.isNotEmpty;
+
+  /// Get count of selected organs
+  int get selectedOrgansCount => _selectedOrganIds.length;
+
+  // Methods
+
+  /// Toggle between front and back body view
+  void toggleView() {
+    _currentView = _currentView == BodyView.front ? BodyView.back : BodyView.front;
+    notifyListeners();
+  }
+
+  toggleIsBodyHidden() {
+    isBodyHidden = !isBodyHidden;
+    notifyListeners();
+  }
+
+  /// Toggle organ selection (add if not selected, remove if selected)
+  void toggleOrganSelection(String organId) {
+    if (_selectedOrganIds.contains(organId)) {
+      _selectedOrganIds.remove(organId);
+    } else {
+      _selectedOrganIds.add(organId);
+    }
+    notifyListeners();
+  }
+
+  /// Remove a specific organ from selection
+  void removeOrgan(String organId) {
+    _selectedOrganIds.remove(organId);
+    notifyListeners();
+  }
+
+  /// Clear all selected organs
+  void clearAllSelections() {
+    _selectedOrganIds.clear();
+    notifyListeners();
+  }
+
+  /// Toggle bottom sheet expanded/collapsed state
+  void toggleBottomSheet() {
+    _isBottomSheetExpanded = !_isBottomSheetExpanded;
+    notifyListeners();
+  }
+
+  /// Set bottom sheet expanded state
+  void setBottomSheetExpanded(bool isExpanded) {
+    _isBottomSheetExpanded = isExpanded;
+    notifyListeners();
+  }
+
+  /// Validate if at least one organ is selected
+  bool validateSelection() {
+    return _selectedOrganIds.isNotEmpty;
+  }
+
+  /// Get selected organ IDs as a list
+  List getSelectedOrganIds() {
+    return _selectedOrganIds.toList();
+  }
+
+  /// Get selected organ names as a list
+  List getSelectedOrganNames() {
+    return selectedOrgans.map((organ) => organ.name).toList();
+  }
+
+  /// Reset the view model to initial state
+  void reset() {
+    _currentView = BodyView.front;
+    _selectedOrganIds.clear();
+    _isBottomSheetExpanded = false;
+    notifyListeners();
+  }
+}
diff --git a/lib/presentation/symptoms_checker/widgets/interactive_body_widget.dart b/lib/presentation/symptoms_checker/widgets/interactive_body_widget.dart
new file mode 100644
index 0000000..33663b5
--- /dev/null
+++ b/lib/presentation/symptoms_checker/widgets/interactive_body_widget.dart
@@ -0,0 +1,121 @@
+import 'dart:ui' as ui;
+
+import 'package:flutter/material.dart';
+import 'package:flutter/services.dart';
+import 'package:hmg_patient_app_new/features/symptoms_checker/models/organ_model.dart';
+import 'package:hmg_patient_app_new/presentation/symptoms_checker/widgets/organ_dot_widget.dart';
+
+class InteractiveBodyWidget extends StatefulWidget {
+  final String bodyImageAsset;
+  final List organs;
+  final Set selectedOrganIds;
+  final bool isBodyHidden;
+  final Function(String organId) onOrganTap;
+
+  const InteractiveBodyWidget({
+    super.key,
+    required this.bodyImageAsset,
+    required this.organs,
+    required this.selectedOrganIds,
+    required this.onOrganTap,
+    this.isBodyHidden = false,
+  });
+
+  @override
+  State createState() => _InteractiveBodyWidgetState();
+}
+
+class _InteractiveBodyWidgetState extends State {
+  double? _imageAspectRatio;
+  final TransformationController _transformationController = TransformationController();
+
+  @override
+  void initState() {
+    super.initState();
+    _loadImageAspectRatio();
+  }
+
+  @override
+  void didUpdateWidget(InteractiveBodyWidget oldWidget) {
+    super.didUpdateWidget(oldWidget);
+    if (oldWidget.bodyImageAsset != widget.bodyImageAsset) {
+      _loadImageAspectRatio();
+      // Reset zoom when switching views
+      _transformationController.value = Matrix4.identity();
+    }
+  }
+
+  @override
+  void dispose() {
+    _transformationController.dispose();
+    super.dispose();
+  }
+
+  Future _loadImageAspectRatio() async {
+    final ByteData data = await rootBundle.load(widget.bodyImageAsset);
+    final ui.Codec codec = await ui.instantiateImageCodec(data.buffer.asUint8List());
+    final ui.FrameInfo frameInfo = await codec.getNextFrame();
+    final image = frameInfo.image;
+
+    if (mounted) {
+      setState(() {
+        _imageAspectRatio = image.width / image.height;
+      });
+    }
+  }
+
+  @override
+  Widget build(BuildContext context) {
+    if (_imageAspectRatio == null) {
+      return const Center(child: CircularProgressIndicator());
+    }
+
+    return LayoutBuilder(
+      builder: (context, constraints) {
+        return Center(
+          child: InteractiveViewer(
+            transformationController: _transformationController,
+            minScale: 0.5,
+            maxScale: 4.0,
+            boundaryMargin: const EdgeInsets.all(20),
+            clipBehavior: Clip.none,
+            child: AspectRatio(
+              aspectRatio: _imageAspectRatio!,
+              child: LayoutBuilder(
+                builder: (context, imageConstraints) {
+                  return Stack(
+                    children: [
+                      // Body image
+                      Positioned.fill(
+                        child: Image.asset(
+                          widget.bodyImageAsset,
+                          fit: BoxFit.fill,
+                          color: widget.isBodyHidden ? Colors.black.withValues(alpha: 0.5) : null,
+                        ),
+                      ),
+
+                      // Organ dots
+                      ...widget.organs.map((organ) {
+                        final isSelected = widget.selectedOrganIds.contains(organ.id);
+                        final dotSize = 16.0;
+
+                        final leftPos = (organ.position.x * imageConstraints.maxWidth) - (dotSize / 2);
+                        final topPos = (organ.position.y * imageConstraints.maxHeight) - (dotSize / 2);
+
+                        return Positioned(
+                          left: leftPos,
+                          top: topPos,
+                          child: OrganDot(isSelected: isSelected, onTap: () => widget.onOrganTap(organ.id), size: dotSize),
+                        );
+                      }),
+                    ],
+                  );
+                },
+              ),
+            ),
+          ),
+        );
+      },
+    );
+  }
+}
diff --git a/lib/presentation/symptoms_checker/widgets/organ_dot_widget.dart b/lib/presentation/symptoms_checker/widgets/organ_dot_widget.dart
new file mode 100644
index 0000000..0783dfb
--- /dev/null
+++ b/lib/presentation/symptoms_checker/widgets/organ_dot_widget.dart
@@ -0,0 +1,49 @@
+import 'package:flutter/material.dart';
+import 'package:hmg_patient_app_new/core/app_export.dart';
+import 'package:hmg_patient_app_new/theme/colors.dart';
+
+class OrganDot extends StatelessWidget {
+  final bool isSelected;
+  final VoidCallback onTap;
+  final double size;
+
+  const OrganDot({super.key, required this.isSelected, required this.onTap, this.size = 50.0});
+
+  @override
+  Widget build(BuildContext context) {
+    return GestureDetector(
+      onTap: onTap,
+      child: AnimatedContainer(
+        duration: const Duration(milliseconds: 250),
+        curve: Curves.easeInOut,
+        width: size.w,
+        height: size.h,
+        decoration: BoxDecoration(
+          shape: BoxShape.circle,
+          color: isSelected ? AppColors.whiteColor : AppColors.blackColor.withValues(alpha: 0.6),
+        ),
+        child: Padding(
+          padding: EdgeInsets.all(isSelected ? 2.w : 3.w),
+          child: Container(
+            decoration: BoxDecoration(
+              shape: BoxShape.circle,
+              color: isSelected ? AppColors.primaryRedColor : AppColors.whiteColor,
+            ),
+            child: isSelected
+                ? Center(
+                    child: Container(
+                      width: size.w * 0.25,
+                      height: size.h * 0.25,
+                      decoration: const BoxDecoration(
+                        shape: BoxShape.circle,
+                        color: AppColors.whiteColor,
+                      ),
+                    ),
+                  )
+                : null,
+          ),
+        ),
+      ),
+    );
+  }
+}
diff --git a/lib/presentation/symptoms_checker/widgets/selected_organs_section.dart b/lib/presentation/symptoms_checker/widgets/selected_organs_section.dart
new file mode 100644
index 0000000..dbb93ab
--- /dev/null
+++ b/lib/presentation/symptoms_checker/widgets/selected_organs_section.dart
@@ -0,0 +1,133 @@
+import 'package:flutter/material.dart';
+import 'package:hmg_patient_app_new/core/app_assets.dart';
+import 'package:hmg_patient_app_new/core/app_export.dart';
+import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
+import 'package:hmg_patient_app_new/features/symptoms_checker/models/organ_model.dart';
+import 'package:hmg_patient_app_new/theme/colors.dart';
+import 'package:hmg_patient_app_new/widgets/chip/app_custom_chip_widget.dart';
+
+class SelectedOrgansSection extends StatefulWidget {
+  final List selectedOrgans;
+  final Function(String organId) onRemoveOrgan;
+
+  const SelectedOrgansSection({
+    super.key,
+    required this.selectedOrgans,
+    required this.onRemoveOrgan,
+  });
+
+  @override
+  State createState() => _SelectedOrgansSectionState();
+}
+
+class _SelectedOrgansSectionState extends State {
+  bool _isExpanded = true;
+
+  @override
+  Widget build(BuildContext context) {
+    return Container(
+      padding: EdgeInsets.all(16.h),
+      decoration: BoxDecoration(
+        color: AppColors.whiteColor,
+        borderRadius: BorderRadius.circular(12.r),
+        boxShadow: [
+          BoxShadow(
+            color: AppColors.blackColor.withValues(alpha: 0.05),
+            blurRadius: 10,
+            offset: const Offset(0, -2),
+          ),
+        ],
+      ),
+      child: Column(
+        crossAxisAlignment: CrossAxisAlignment.start,
+        mainAxisSize: MainAxisSize.min,
+        children: [
+          GestureDetector(
+            onTap: () {
+              setState(() {
+                _isExpanded = !_isExpanded;
+              });
+            },
+            child: Row(
+              mainAxisAlignment: MainAxisAlignment.spaceBetween,
+              children: [
+                Text(
+                  'Selected Organs'.needTranslation,
+                  style: TextStyle(
+                    fontSize: 16.f,
+                    fontWeight: FontWeight.w600,
+                    color: AppColors.textColor,
+                  ),
+                ),
+                Row(
+                  children: [
+                    if (widget.selectedOrgans.isNotEmpty)
+                      Container(
+                        padding: EdgeInsets.symmetric(
+                          horizontal: 8.w,
+                          vertical: 4.h,
+                        ),
+                        decoration: BoxDecoration(
+                          color: AppColors.primaryRedColor,
+                          borderRadius: BorderRadius.circular(12.r),
+                        ),
+                        child: Text(
+                          '${widget.selectedOrgans.length}',
+                          style: TextStyle(
+                            color: AppColors.whiteColor,
+                            fontSize: 12.f,
+                            fontWeight: FontWeight.w600,
+                          ),
+                        ),
+                      ),
+                    SizedBox(width: 8.w),
+                    AnimatedRotation(
+                      turns: _isExpanded ? 0.5 : 0.0,
+                      duration: const Duration(milliseconds: 200),
+                      child: Icon(
+                        Icons.keyboard_arrow_down,
+                        color: AppColors.textColorLight,
+                        size: 24.h,
+                      ),
+                    ),
+                  ],
+                ),
+              ],
+            ),
+          ),
+          if (_isExpanded) ...[
+            SizedBox(height: 16.h),
+            if (widget.selectedOrgans.isEmpty)
+              Padding(
+                padding: EdgeInsets.symmetric(vertical: 8.h),
+                child: Text(
+                  'No organs selected yet'.needTranslation,
+                  style: TextStyle(
+                    color: AppColors.greyTextColor,
+                    fontSize: 14.f,
+                  ),
+                ),
+              )
+            else
+              Wrap(
+                spacing: 8.w,
+                runSpacing: 8.h,
+                children: widget.selectedOrgans.map((organ) {
+                  return AppCustomChipWidget(
+                    labelText: organ.name,
+                    backgroundColor: AppColors.secondaryLightRedColor,
+                    textColor: AppColors.primaryRedColor,
+                    deleteIcon: AppAssets.cross_circle,
+                    deleteIconColor: AppColors.primaryRedColor,
+                    deleteIconHasColor: true,
+                    onDeleteTap: () => widget.onRemoveOrgan(organ.id),
+                    padding: EdgeInsets.symmetric(horizontal: 12.w, vertical: 8.h),
+                  );
+                }).toList(),
+              ),
+          ],
+        ],
+      ),
+    );
+  }
+}
diff --git a/lib/presentation/todo_section/ancillary_order_payment_page.dart b/lib/presentation/todo_section/ancillary_order_payment_page.dart
index f9995dc..ad204fa 100644
--- a/lib/presentation/todo_section/ancillary_order_payment_page.dart
+++ b/lib/presentation/todo_section/ancillary_order_payment_page.dart
@@ -148,7 +148,7 @@ class _AncillaryOrderPaymentPageState extends State {
                                     children: [
                                       Image.asset(AppAssets.visa, width: 50.h, height: 50.h),
                                       SizedBox(width: 8.h),
-                                      Image.asset(AppAssets.Mastercard, width: 40.h, height: 40.h),
+                                      Image.asset(AppAssets.mastercard, width: 40.h, height: 40.h),
                                     ],
                                   ).toShimmer2(isShow: todoVM.isProcessingPayment),
                                   SizedBox(height: 16.h),
diff --git a/lib/presentation/todo_section/ancillary_procedures_details_page.dart b/lib/presentation/todo_section/ancillary_procedures_details_page.dart
index 449d21e..940c8eb 100644
--- a/lib/presentation/todo_section/ancillary_procedures_details_page.dart
+++ b/lib/presentation/todo_section/ancillary_procedures_details_page.dart
@@ -221,7 +221,7 @@ class _AncillaryOrderDetailsListState extends State {
                 crossAxisAlignment: CrossAxisAlignment.start,
                 children: [
                   Image.asset(
-                    gender == 1 ? AppAssets.male_img : AppAssets.femaleImg,
+                    gender == 1 ? AppAssets.maleImg : AppAssets.femaleImg,
                     width: 56.w,
                     height: 56.h,
                   ),
diff --git a/lib/routes/app_routes.dart b/lib/routes/app_routes.dart
index a0ee1e5..a144d19 100644
--- a/lib/routes/app_routes.dart
+++ b/lib/routes/app_routes.dart
@@ -7,6 +7,7 @@ import 'package:hmg_patient_app_new/presentation/e_referral/e_referral_page_home
 import 'package:hmg_patient_app_new/presentation/home/navigation_screen.dart';
 import 'package:hmg_patient_app_new/presentation/home_health_care/hhc_procedures_page.dart';
 import 'package:hmg_patient_app_new/presentation/medical_file/medical_file_page.dart';
+import 'package:hmg_patient_app_new/presentation/symptoms_checker/organ_selector_screen.dart';
 import 'package:hmg_patient_app_new/splashPage.dart';
 
 class AppRoutes {
@@ -20,6 +21,9 @@ class AppRoutes {
   static const String comprehensiveCheckupPage = '/comprehensiveCheckupPage';
   static const String homeHealthCarePage = '/homeHealthCarePage';
 
+  // Symptoms Checker
+  static const String organSelectorPage = '/organSelectorPage';
+
   static Map get routes => {
         initialRoute: (context) => SplashPage(),
         loginScreen: (context) => LoginScreen(),
@@ -29,6 +33,7 @@ class AppRoutes {
         medicalFilePage: (context) => MedicalFilePage(),
         eReferralPage: (context) => EReferralPage(),
         comprehensiveCheckupPage: (context) => ComprehensiveCheckupPage(),
-        homeHealthCarePage: (context) => HhcProceduresPage()
+        homeHealthCarePage: (context) => HhcProceduresPage(),
+        organSelectorPage: (context) => OrganSelectorPage()
       };
 }
diff --git a/lib/theme/colors.dart b/lib/theme/colors.dart
index b3abe6a..ccdf030 100644
--- a/lib/theme/colors.dart
+++ b/lib/theme/colors.dart
@@ -9,6 +9,7 @@ class AppColors {
   static const lightGreyEFColor = Color(0xffeaeaff);
   static const greyF7Color = Color(0xffF7F7F7);
   static const lightGrayColor = Color(0xff808080);
+  static const greyTextColorLight = Color(0xFFA2A2A2);
 
 // New UI Colors
   static const whiteColor = Color(0xFFffffff);
diff --git a/lib/widgets/appbar/collapsing_list_view.dart b/lib/widgets/appbar/collapsing_list_view.dart
index 8fa5f99..e124f02 100644
--- a/lib/widgets/appbar/collapsing_list_view.dart
+++ b/lib/widgets/appbar/collapsing_list_view.dart
@@ -92,7 +92,8 @@ class CollapsingListView extends StatelessWidget {
                             t,
                           )!,
                           child: Padding(
-                              padding: EdgeInsets.only(left: appState.isArabic() ? 0 : leftPadding, right: appState.isArabic() ? leftPadding : 0, bottom: bottomPadding),
+                              padding: EdgeInsets.only(
+                                  left: appState.isArabic() ? 0 : leftPadding, right: appState.isArabic() ? leftPadding : 0, bottom: bottomPadding),
                               child: Row(
                                 spacing: 4.h,
                                 children: [
@@ -109,11 +110,18 @@ class CollapsingListView extends StatelessWidget {
                                         color: AppColors.blackColor,
                                         letterSpacing: -0.5),
                                   ).expanded,
-                                  if (logout != null) actionButton(context, t, title: "Logout".needTranslation, icon: AppAssets.logout).onPress(logout!),
-                                  if (report != null) actionButton(context, t, title: "Report".needTranslation, icon: AppAssets.report_icon).onPress(report!),
-                                  if (history != null) actionButton(context, t, title: "History".needTranslation, icon: AppAssets.insurance_history_icon).onPress(history!),
-                                  if (instructions != null) actionButton(context, t, title: "Instructions".needTranslation, icon: AppAssets.requests).onPress(instructions!),
-                                  if (requests != null) actionButton(context, t, title: "Requests".needTranslation, icon: AppAssets.insurance_history_icon).onPress(requests!),
+                                  if (logout != null)
+                                    actionButton(context, t, title: "Logout".needTranslation, icon: AppAssets.logout).onPress(logout!),
+                                  if (report != null)
+                                    actionButton(context, t, title: "Report".needTranslation, icon: AppAssets.report_icon).onPress(report!),
+                                  if (history != null)
+                                    actionButton(context, t, title: "History".needTranslation, icon: AppAssets.insurance_history_icon)
+                                        .onPress(history!),
+                                  if (instructions != null)
+                                    actionButton(context, t, title: "Instructions".needTranslation, icon: AppAssets.requests).onPress(instructions!),
+                                  if (requests != null)
+                                    actionButton(context, t, title: "Requests".needTranslation, icon: AppAssets.insurance_history_icon)
+                                        .onPress(requests!),
                                   if (search != null) Utils.buildSvgWithAssets(icon: AppAssets.search_icon).onPress(search!).paddingOnly(right: 24),
                                   if (trailing != null) trailing!,
                                 ],
diff --git a/lib/widgets/buttons/custom_button.dart b/lib/widgets/buttons/custom_button.dart
index b823eae..676f0bc 100644
--- a/lib/widgets/buttons/custom_button.dart
+++ b/lib/widgets/buttons/custom_button.dart
@@ -3,6 +3,7 @@ import 'package:hmg_patient_app_new/core/app_export.dart';
 import 'package:hmg_patient_app_new/core/utils/utils.dart';
 import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
 import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
+import 'package:hmg_patient_app_new/theme/colors.dart';
 
 class CustomButton extends StatelessWidget {
   final String text;
@@ -64,10 +65,10 @@ class CustomButton extends StatelessWidget {
           width: width,
           padding: padding,
           decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
-              color: isDisabled ? backgroundColor.withValues(alpha: .5) : backgroundColor,
+              color: isDisabled ? AppColors.inputLabelTextColor.withValues(alpha: 0.3) : backgroundColor,
               borderRadius: radius,
               customBorder: BorderRadius.circular(radius),
-              side: borderSide ?? BorderSide(width: borderWidth.h, color: borderColor)),
+              side: borderSide ?? BorderSide(width: borderWidth.h, color: isDisabled ? Colors.transparent : borderColor)),
           child: Row(
             crossAxisAlignment: CrossAxisAlignment.center,
             mainAxisAlignment: MainAxisAlignment.center,
@@ -86,7 +87,7 @@ class CustomButton extends StatelessWidget {
                     overflow: textOverflow,
                     style: context.dynamicTextStyle(
                       fontSize: fontS,
-                      color: isDisabled ? textColor.withValues(alpha: 0.5) : textColor,
+                      color: isDisabled ? AppColors.greyTextColor : textColor,
                       letterSpacing: 0,
                       fontWeight: fontWeight,
                     ),
-- 
2.30.2


From 9e0336687cb5f7be15bfb4e73f7bd557573a1348 Mon Sep 17 00:00:00 2001
From: Sultan khan 
Date: Tue, 25 Nov 2025 17:07:16 +0300
Subject: [PATCH 11/39] virtual tour.

---
 lib/core/utils/utils.dart                     |  6 ++++
 .../hmg_services_component_model.dart         |  9 ++++--
 .../hmg_services/services_page.dart           | 28 +++++++++++++++----
 .../hmg_services/services_view.dart           | 13 +++++++--
 lib/presentation/home/navigation_screen.dart  |  2 +-
 5 files changed, 46 insertions(+), 12 deletions(-)

diff --git a/lib/core/utils/utils.dart b/lib/core/utils/utils.dart
index e3b108f..e2c11d4 100644
--- a/lib/core/utils/utils.dart
+++ b/lib/core/utils/utils.dart
@@ -8,6 +8,7 @@ import 'package:connectivity_plus/connectivity_plus.dart';
 import 'package:crypto/crypto.dart' as crypto;
 import 'package:easy_localization/easy_localization.dart';
 import 'package:flutter/material.dart';
+import 'package:flutter_inappwebview/flutter_inappwebview.dart';
 import 'package:flutter_svg/flutter_svg.dart';
 import 'package:fluttertoast/fluttertoast.dart';
 import 'package:google_api_availability/google_api_availability.dart';
@@ -29,6 +30,7 @@ import 'package:hmg_patient_app_new/widgets/loading_dialog.dart';
 import 'package:lottie/lottie.dart';
 import 'package:path_provider/path_provider.dart';
 import 'package:shared_preferences/shared_preferences.dart';
+import 'package:url_launcher/url_launcher.dart';
 
 class Utils {
   static AppState appState = getIt.get();
@@ -865,4 +867,8 @@ class Utils {
     }
     return isHavePrivilege;
   }
+  static void openWebView({ required String url}) {
+    Uri uri = Uri.parse(url);
+    launchUrl(uri, mode: LaunchMode.inAppBrowserView);
+  }
 }
diff --git a/lib/features/hmg_services/models/ui_models/hmg_services_component_model.dart b/lib/features/hmg_services/models/ui_models/hmg_services_component_model.dart
index d5180ae..d6e2654 100644
--- a/lib/features/hmg_services/models/ui_models/hmg_services_component_model.dart
+++ b/lib/features/hmg_services/models/ui_models/hmg_services_component_model.dart
@@ -5,21 +5,26 @@ class HmgServicesComponentModel {
   String title;
   String subTitle;
   String icon;
+  Color? iconColor;
   bool isLogin;
   bool isLocked;
   Color bgColor;
   Color textColor;
-  String route;
+  String? route;
+  Function? onTap;
 
   HmgServicesComponentModel(
     this.action,
     this.title,
     this.subTitle,
     this.icon,
+
     this.isLogin, {
     this.isLocked = false,
     this.bgColor = Colors.white,
     this.textColor = Colors.black,
-    this.route = '',
+    this.iconColor = Colors.white,
+    this.route,
+     this.onTap
   });
 }
diff --git a/lib/presentation/hmg_services/services_page.dart b/lib/presentation/hmg_services/services_page.dart
index af576aa..fd6e976 100644
--- a/lib/presentation/hmg_services/services_page.dart
+++ b/lib/presentation/hmg_services/services_page.dart
@@ -1,6 +1,7 @@
 import 'package:flutter/material.dart';
 import 'package:hmg_patient_app_new/core/app_assets.dart';
 import 'package:hmg_patient_app_new/core/app_export.dart';
+import 'package:hmg_patient_app_new/core/utils/utils.dart';
 import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
 import 'package:hmg_patient_app_new/features/hmg_services/models/ui_models/hmg_services_component_model.dart';
 import 'package:hmg_patient_app_new/presentation/hmg_services/services_view.dart';
@@ -22,7 +23,7 @@ class ServicesPage extends StatelessWidget {
       route: AppRoutes.eReferralPage,
     ),
     HmgServicesComponentModel(
-      12,
+      5,
       "Comprehensive Checkup".needTranslation,
       "".needTranslation,
       AppAssets.comprehensiveCheckup,
@@ -32,7 +33,7 @@ class ServicesPage extends StatelessWidget {
       route: AppRoutes.comprehensiveCheckupPage,
     ),
     HmgServicesComponentModel(
-      12,
+      3,
       "Home Health Care".needTranslation,
       "".needTranslation,
       AppAssets.emergency_services_icon,
@@ -41,6 +42,21 @@ class ServicesPage extends StatelessWidget {
       textColor: AppColors.blackColor,
       route: AppRoutes.homeHealthCarePage,
     ),
+    HmgServicesComponentModel(
+      11,
+      "Virtual Tour".needTranslation,
+      "".needTranslation,
+      AppAssets.my_address,
+      true,
+      bgColor: Colors.orange,
+      textColor: AppColors.blackColor,
+      route: null,
+      onTap:(){
+        Utils.openWebView(
+          url: 'https://hmgwebservices.com/vt_mobile/html/index.html',
+        );
+      },
+    )
   ];
 
   @override
@@ -49,7 +65,7 @@ class ServicesPage extends StatelessWidget {
       title: "Explore Services".needTranslation,
       isLeading: Navigator.canPop(context),
       child: Padding(
-        padding: EdgeInsets.all(24.h),
+        padding: EdgeInsets.symmetric(horizontal:  24.h),
         child: Column(
           crossAxisAlignment: CrossAxisAlignment.start,
           children: [
@@ -60,9 +76,9 @@ class ServicesPage extends StatelessWidget {
               child: GridView.builder(
                 gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
                   crossAxisCount: 3, // 4 icons per row
-                  crossAxisSpacing: 16.w,
-                  mainAxisSpacing: 24.h,
-                  childAspectRatio: 0.75,
+                  crossAxisSpacing: 24.w,
+                  mainAxisSpacing: 0.h,
+                  childAspectRatio: 0.85,
                 ),
                 physics: NeverScrollableScrollPhysics(),
                 shrinkWrap: true,
diff --git a/lib/presentation/hmg_services/services_view.dart b/lib/presentation/hmg_services/services_view.dart
index 225bd96..2cd923f 100644
--- a/lib/presentation/hmg_services/services_view.dart
+++ b/lib/presentation/hmg_services/services_view.dart
@@ -11,13 +11,19 @@ class ServiceGridViewItem extends StatelessWidget {
   final int index;
   final bool isHomePage;
   final bool isLocked;
-
-  const ServiceGridViewItem(this.hmgServiceComponentModel, this.index, this.isHomePage, {super.key, this.isLocked = false});
+  final Function? onTap;
+  const ServiceGridViewItem(this.hmgServiceComponentModel, this.index, this.isHomePage, {super.key, this.isLocked = false, this.onTap});
 
   @override
   Widget build(BuildContext context) {
     return InkWell(
-        onTap: () => getIt.get().pushPageRoute(hmgServiceComponentModel.route),
+        onTap: () {
+          hmgServiceComponentModel.route != null
+              ? getIt.get().pushPageRoute(hmgServiceComponentModel.route!)
+              : hmgServiceComponentModel.onTap != null
+                  ? hmgServiceComponentModel.onTap!()
+                  : null;
+        },
         child: Column(
           mainAxisSize: MainAxisSize.max,
           crossAxisAlignment: CrossAxisAlignment.start,
@@ -33,6 +39,7 @@ class ServiceGridViewItem extends StatelessWidget {
               ),
               child: Utils.buildSvgWithAssets(
                 icon: hmgServiceComponentModel.icon,
+                iconColor: hmgServiceComponentModel.iconColor,
                 height: 21.h,
                 width: 21.w,
                 fit: BoxFit.none,
diff --git a/lib/presentation/home/navigation_screen.dart b/lib/presentation/home/navigation_screen.dart
index 18803cc..f8447d2 100644
--- a/lib/presentation/home/navigation_screen.dart
+++ b/lib/presentation/home/navigation_screen.dart
@@ -33,7 +33,7 @@ class _LandingNavigationState extends State {
           appState.isAuthenticated ? MedicalFilePage() : /* need add feedback page */ FeedbackPage(),
           BookAppointmentPage(),
           const ToDoPage(),
-          appState.isAuthenticated ? /* need add news page */ ServicesPage() : const LandingPage(),
+          ServicesPage(),
         ],
       ),
       bottomNavigationBar: BottomNavigation(
-- 
2.30.2


From fc0f98da1de46b98602c6faa202cf54620e40885 Mon Sep 17 00:00:00 2001
From: tahaalam 
Date: Wed, 26 Nov 2025 14:24:56 +0300
Subject: [PATCH 12/39] calender reminder added

---
 .../reports/problems/problems-report.html     |  2 +-
 lib/core/utils/calender_utils_new.dart        | 94 +++++++++++++++++++
 lib/core/utils/date_util.dart                 |  3 +-
 .../appointment_details_page.dart             | 70 ++++++++++++--
 .../prescription_reminder_view.dart           |  2 +-
 pubspec.yaml                                  |  1 +
 6 files changed, 159 insertions(+), 13 deletions(-)
 create mode 100644 lib/core/utils/calender_utils_new.dart

diff --git a/android/build/reports/problems/problems-report.html b/android/build/reports/problems/problems-report.html
index 82570ba..866b270 100644
--- a/android/build/reports/problems/problems-report.html
+++ b/android/build/reports/problems/problems-report.html
@@ -650,7 +650,7 @@ code + .copy-button {
 
diff --git a/lib/core/utils/calender_utils_new.dart b/lib/core/utils/calender_utils_new.dart
new file mode 100644
index 0000000..b4c4bd7
--- /dev/null
+++ b/lib/core/utils/calender_utils_new.dart
@@ -0,0 +1,94 @@
+import 'dart:async';
+
+import 'package:device_calendar_plus/device_calendar_plus.dart';
+import 'package:jiffy/jiffy.dart' show Jiffy;
+
+class CalenderUtilsNew {
+  final DeviceCalendar calender = DeviceCalendar.instance;
+  List writableCalender = [];
+
+  CalenderUtilsNew._instance() {
+    getCalenders();
+  }
+
+  static final CalenderUtilsNew instance = CalenderUtilsNew._instance();
+
+  Future getCalenders() async {
+    CalendarPermissionStatus result = await DeviceCalendar.instance.hasPermissions();
+    if(result != CalendarPermissionStatus.granted)  await DeviceCalendar.instance.requestPermissions();
+    var calenders = await calender.listCalendars();
+    calenders.forEach((calender) {
+      if (!calender.readOnly) {
+        writableCalender.add(calender);
+      }
+    });
+  }
+
+  FutureOr createOrUpdateEvent({required String title, required String description, required String location, DateTime? scheduleDateTime, String? eventId, int? reminderMinutes}) async {
+   print("the reminder minutes are $reminderMinutes");
+    if (writableCalender.isEmpty) {
+      await getCalenders();
+    }
+    var writableCalendars = writableCalender.first;
+
+    print("writableCalendars-name:  " + writableCalendars.name);
+    print("writableCalendars-Id:  " + writableCalendars.id);
+    print("writableCalendarsToString:  " + writableCalendars.toString());
+    print("writableCalendarsToString:  " + writableCalendars!.id!);
+
+    CalendarPermissionStatus result = await DeviceCalendar.instance.hasPermissions();
+    if(result != CalendarPermissionStatus.granted)  await DeviceCalendar.instance.requestPermissions();
+    print(result);
+    String eventResult = await DeviceCalendar.instance.createEvent(
+      calendarId: writableCalendars!.id,
+      title: title,
+      description: description,
+      startDate: scheduleDateTime!,
+      endDate: scheduleDateTime!.add(Duration(minutes: 30)),
+      reminderMinutes: reminderMinutes
+    );
+
+    print("the event Result is ${eventResult}");
+    return eventResult.isNotEmpty;
+  }
+
+
+
+  FutureOr> getEvents() async {
+    var availableCalender = writableCalender.first;
+    DateTime startEventsDate = Jiffy.parseFromDateTime(DateTime.now()).subtract(days: 30).dateTime;
+    DateTime endEventsDate = Jiffy.parseFromDateTime(DateTime.now()).add(days: 120).dateTime;
+    return await  calender.listEvents(startEventsDate, endEventsDate,  calendarIds: [availableCalender.id]);
+
+  }
+
+
+  FutureOr checkIfEventExist(String admissionId) async {
+    if(writableCalender.isEmpty)return false;
+    List events = await getEvents();
+   if(events.isEmpty) return false;
+    for(var event in events){
+      List title = event.title!.split("#");
+      print("the splitted admission id is ${title}");
+      if(title.contains(admissionId)) return true;
+    }
+   return false;
+  }
+
+  FutureOr checkAndRemove({required String id}) async {
+    if(writableCalender.isEmpty)return false;
+    List events = await getEvents();
+    if(events.isEmpty) return false;
+    for(var event in events){
+      List title = event.title!.split("#");
+      print("the splitted admission id is ${title}");
+      if(title.contains(id)) {
+        calender.deleteEvent(eventId: event.eventId);
+        return true;
+      }
+    }
+    return false;
+  }
+
+
+}
diff --git a/lib/core/utils/date_util.dart b/lib/core/utils/date_util.dart
index a918706..ee2b4ec 100644
--- a/lib/core/utils/date_util.dart
+++ b/lib/core/utils/date_util.dart
@@ -17,8 +17,7 @@ class DateUtil {
     final endIndex = date.indexOf(end, startIndex + start.length);
     return DateTime.fromMillisecondsSinceEpoch(int.parse(
       date.substring(startIndex + start.length, endIndex),
-    ))
-    ;
+    ));
   }
 
   static DateTime convertStringToDateSaudiTimezone(String date, int projectId) {
diff --git a/lib/presentation/appointments/appointment_details_page.dart b/lib/presentation/appointments/appointment_details_page.dart
index e620783..ba110a2 100644
--- a/lib/presentation/appointments/appointment_details_page.dart
+++ b/lib/presentation/appointments/appointment_details_page.dart
@@ -1,10 +1,16 @@
 import 'dart:async';
+import 'dart:collection';
+import 'dart:io';
 
+import 'package:device_calendar/device_calendar.dart';
 import 'package:easy_localization/easy_localization.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter_staggered_animations/flutter_staggered_animations.dart';
 import 'package:hmg_patient_app_new/core/app_assets.dart';
 import 'package:hmg_patient_app_new/core/app_state.dart';
+import 'package:hmg_patient_app_new/core/utils/calendar_utils.dart';
+import 'package:hmg_patient_app_new/core/utils/calender_utils_new.dart';
+import 'package:hmg_patient_app_new/core/utils/date_util.dart';
 import 'package:hmg_patient_app_new/core/utils/size_utils.dart';
 import 'package:hmg_patient_app_new/core/utils/utils.dart';
 import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
@@ -62,11 +68,13 @@ class _AppointmentDetailsPageState extends State {
 
   @override
   void initState() {
-    scheduleMicrotask(() {
-      // if (AppointmentType.isArrived(widget.patientAppointmentHistoryResponseModel)) {
-      // prescriptionsViewModel.setPrescriptionsDetailsLoading();
-      // prescriptionsViewModel.getPrescriptionDetails(getPrescriptionRequestModel());
-      // }
+    scheduleMicrotask(() async {
+      CalenderUtilsNew calendarUtils = await CalenderUtilsNew.instance;
+      var doesExist = await calendarUtils.checkIfEventExist("${widget.patientAppointmentHistoryResponseModel.appointmentNo}");
+      print("the appointment reminder exist $doesExist");
+      myAppointmentsViewModel.setAppointmentReminder(doesExist, widget.patientAppointmentHistoryResponseModel);
+
+
     });
     super.initState();
   }
@@ -272,10 +280,54 @@ class _AppointmentDetailsPageState extends State {
                                       // activeThumbColor: AppColors.successColor,
                                       activeTrackColor: AppColors.successColor.withValues(alpha: .15),
                                       value: widget.patientAppointmentHistoryResponseModel.hasReminder!,
-                                      onChanged: (newValue) {
-                                        setState(() {
-                                          myAppointmentsViewModel.setAppointmentReminder(newValue, widget.patientAppointmentHistoryResponseModel);
-                                        });
+                                      onChanged: (newValue) async {
+                                        CalenderUtilsNew calender =  CalenderUtilsNew.instance;
+                                        bool isEventAddedOrRemoved = false;
+                                        if(newValue == true){
+                                          DateTime startDate = DateTime.now();
+                                          DateTime endDate = DateUtil.convertStringToDate(widget
+                                                    .patientAppointmentHistoryResponseModel.appointmentDate);
+                                          showReminderBottomSheet(
+                                            context,
+                                            endDate,
+                                            widget.patientAppointmentHistoryResponseModel.doctorNameObj??"",
+                                            "${widget.patientAppointmentHistoryResponseModel.appointmentNo}"??"",
+                                            "",
+                                            "",
+                                            title: "Appointment with ${widget.patientAppointmentHistoryResponseModel.doctorNameObj}".needTranslation,
+                                            description:"${widget.patientAppointmentHistoryResponseModel.doctorNameObj} will be having an appointment on ${widget.patientAppointmentHistoryResponseModel.appointmentDate}".needTranslation,
+                                            onSuccess: () {
+                                              setState(() {
+                                                myAppointmentsViewModel.setAppointmentReminder(newValue, widget.patientAppointmentHistoryResponseModel);
+                                              });
+                                            },
+                                            isMultiAllowed: true,
+                                            onMultiDateSuccess: (int selectedIndex) async {
+
+                                              isEventAddedOrRemoved = await calender.createOrUpdateEvent(
+                                                title: "Appointment Reminder with ${widget.patientAppointmentHistoryResponseModel.doctorNameObj} on ${DateUtil.convertStringToDate(widget
+                                                    .patientAppointmentHistoryResponseModel.appointmentDate)}, Appointment #${widget.patientAppointmentHistoryResponseModel.appointmentNo}".needTranslation,
+                                                description: "Appointment Reminder with ${widget.patientAppointmentHistoryResponseModel.doctorNameObj} in ${widget
+                                                    .patientAppointmentHistoryResponseModel.projectName}",
+                                                scheduleDateTime: DateUtil.convertStringToDate(widget
+                                                    .patientAppointmentHistoryResponseModel.appointmentDate),
+                                                eventId: "${widget.patientAppointmentHistoryResponseModel.appointmentNo}",
+                                                location: '',
+                                                reminderMinutes: selectedIndex
+                                              );
+                                              setState(() {
+                                                myAppointmentsViewModel.setAppointmentReminder(isEventAddedOrRemoved, widget.patientAppointmentHistoryResponseModel);
+                                              });
+                                            },
+                                          );
+                                        }else {
+                                          isEventAddedOrRemoved =  await calender.checkAndRemove( id:"${widget.patientAppointmentHistoryResponseModel.appointmentNo}", );
+                                          setState(() {
+                                            myAppointmentsViewModel.setAppointmentReminder(isEventAddedOrRemoved, widget.patientAppointmentHistoryResponseModel);
+                                          });
+                                        }
+
+
                                       },
                                     ),
                                   ],
diff --git a/lib/presentation/prescriptions/prescription_reminder_view.dart b/lib/presentation/prescriptions/prescription_reminder_view.dart
index 8b7df0b..2f1154f 100644
--- a/lib/presentation/prescriptions/prescription_reminder_view.dart
+++ b/lib/presentation/prescriptions/prescription_reminder_view.dart
@@ -100,7 +100,7 @@ class _PrescriptionReminderViewState extends State {
                 text: LocaleKeys.setReminder.tr(),
                 onPressed: () {
                   Navigator.of(context).pop();
-                  widget.setReminder(_selectedOption);
+                  widget.setReminder(_options[_selectedOption]);
                 },
                 backgroundColor: AppColors.bgGreenColor,
                 borderColor: AppColors.bgGreenColor,
diff --git a/pubspec.yaml b/pubspec.yaml
index 3d6604c..23e3ea9 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -45,6 +45,7 @@ dependencies:
   file_picker: ^10.3.2
   local_auth: ^2.3.0
   share_plus: ^11.1.0
+  device_calendar_plus: ^0.3.1
   device_calendar:
     git: https://github.com/bardram/device_calendar
   manage_calendar_events: ^2.0.3
-- 
2.30.2


From acb6d31ff3b5d4ff90544de3013f57c9b7f2cdc8 Mon Sep 17 00:00:00 2001
From: faizatflutter 
Date: Wed, 26 Nov 2025 23:54:14 +0300
Subject: [PATCH 13/39] Added possible conditions screen

---
 assets/images/svg/home_bordered.svg           |   4 +
 assets/images/svg/refresh.svg                 |   4 +
 lib/core/app_assets.dart                      |   2 +
 lib/core/enums.dart                           |   4 +
 .../emergency_services_view_model.dart        | 167 +++++++--------
 .../models/conditions_model.dart              |  97 +++++++++
 lib/presentation/lab/lab_orders_page.dart     |   2 +-
 .../organ_selector_screen.dart                |   5 +-
 .../possible_conditions_screen.dart           | 177 ++++++++++++++++
 .../symptoms_checker_view_model.dart          |  46 ++++
 .../widgets/condition_card.dart               | 199 ++++++++++++++++++
 .../widgets/custom_progress_bar.dart          |  60 ++++++
 .../widgets/interactive_body_widget.dart      |  17 +-
 .../widgets/organ_tooltip_widget.dart         |  34 +++
 lib/routes/app_routes.dart                    |   5 +-
 lib/theme/colors.dart                         |   7 +
 16 files changed, 735 insertions(+), 95 deletions(-)
 create mode 100644 assets/images/svg/home_bordered.svg
 create mode 100644 assets/images/svg/refresh.svg
 create mode 100644 lib/features/symptoms_checker/models/conditions_model.dart
 create mode 100644 lib/presentation/symptoms_checker/possible_conditions_screen.dart
 create mode 100644 lib/presentation/symptoms_checker/widgets/condition_card.dart
 create mode 100644 lib/presentation/symptoms_checker/widgets/custom_progress_bar.dart
 create mode 100644 lib/presentation/symptoms_checker/widgets/organ_tooltip_widget.dart

diff --git a/assets/images/svg/home_bordered.svg b/assets/images/svg/home_bordered.svg
new file mode 100644
index 0000000..b9f6291
--- /dev/null
+++ b/assets/images/svg/home_bordered.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/assets/images/svg/refresh.svg b/assets/images/svg/refresh.svg
new file mode 100644
index 0000000..6a84970
--- /dev/null
+++ b/assets/images/svg/refresh.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/lib/core/app_assets.dart b/lib/core/app_assets.dart
index eb6f74c..ab2bfb2 100644
--- a/lib/core/app_assets.dart
+++ b/lib/core/app_assets.dart
@@ -192,6 +192,8 @@ class AppAssets {
   // Symptoms Checker
   static const String bodyIcon = '$svgBasePath/body_icon.svg';
   static const String rotateIcon = '$svgBasePath/rotate_icon.svg';
+  static const String refreshIcon = '$svgBasePath/refresh.svg';
+  static const String homeBorderedIcon = '$svgBasePath/home_bordered.svg';
 
   // PNGS //
   static const String hmgLogo = '$pngBasePath/hmg_logo.png';
diff --git a/lib/core/enums.dart b/lib/core/enums.dart
index e318401..6754e8c 100644
--- a/lib/core/enums.dart
+++ b/lib/core/enums.dart
@@ -241,3 +241,7 @@ extension ServiceTypeEnumExt on ServiceTypeEnum {
     }
   }
 }
+
+// SymptomsChecker
+
+enum PossibleConditionsSeverityEnum { seekMedicalAdvice, monitorOnly, emergency }
diff --git a/lib/features/emergency_services/emergency_services_view_model.dart b/lib/features/emergency_services/emergency_services_view_model.dart
index ad72ef4..0f264c5 100644
--- a/lib/features/emergency_services/emergency_services_view_model.dart
+++ b/lib/features/emergency_services/emergency_services_view_model.dart
@@ -3,12 +3,10 @@ import 'dart:async';
 import 'package:flutter/material.dart';
 import 'package:google_maps_flutter/google_maps_flutter.dart' as GMSMapServices;
 import 'package:hmg_patient_app_new/core/app_assets.dart';
-
 import 'package:hmg_patient_app_new/core/app_state.dart';
 import 'package:hmg_patient_app_new/core/dependencies.dart';
 import 'package:hmg_patient_app_new/core/location_util.dart';
 import 'package:hmg_patient_app_new/core/utils/date_util.dart';
-import 'package:hmg_patient_app_new/core/utils/doctor_response_mapper.dart';
 import 'package:hmg_patient_app_new/core/utils/size_utils.dart';
 import 'package:hmg_patient_app_new/core/utils/utils.dart';
 import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
@@ -16,29 +14,24 @@ import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
 import 'package:hmg_patient_app_new/features/authentication/authentication_view_model.dart';
 import 'package:hmg_patient_app_new/features/authentication/models/resp_models/authenticated_user_resp_model.dart';
 import 'package:hmg_patient_app_new/features/emergency_services/emergency_services_repo.dart';
-import 'package:hmg_patient_app_new/features/emergency_services/models/OrderDisplay.dart';
-import 'package:hmg_patient_app_new/features/emergency_services/models/request_model/RRTRequestModel.dart';
-import 'package:hmg_patient_app_new/features/emergency_services/models/resp_model/EROnlineCheckInPaymentDetailsResponse.dart';
-import 'package:hmg_patient_app_new/features/emergency_services/models/resp_model/RRTServiceData.dart';
-import 'package:hmg_patient_app_new/features/location/location_view_model.dart';
-import 'package:hmg_patient_app_new/features/my_appointments/models/facility_selection.dart';
-import 'package:hmg_patient_app_new/features/my_appointments/models/resp_models/hospital_model.dart';
 import 'package:hmg_patient_app_new/features/emergency_services/models/AmbulanceCallingPlace.dart';
+import 'package:hmg_patient_app_new/features/emergency_services/models/OrderDisplay.dart';
 import 'package:hmg_patient_app_new/features/emergency_services/models/request_model/PatientER_RC.dart';
+import 'package:hmg_patient_app_new/features/emergency_services/models/request_model/RRTRequestModel.dart';
 import 'package:hmg_patient_app_new/features/emergency_services/models/resp_model/AmbulanceRequestOrdersModel.dart';
 import 'package:hmg_patient_app_new/features/emergency_services/models/resp_model/EROnlineCheckInPaymentDetailsResponse.dart';
 import 'package:hmg_patient_app_new/features/emergency_services/models/resp_model/PatientERTransportationMethod.dart'
     show PatientERTransportationMethod;
 import 'package:hmg_patient_app_new/features/emergency_services/models/resp_model/ProjectAvgERWaitingTime.dart';
+import 'package:hmg_patient_app_new/features/emergency_services/models/resp_model/RRTServiceData.dart';
 import 'package:hmg_patient_app_new/features/emergency_services/models/resp_model/rrt_procedures_response_model.dart';
 import 'package:hmg_patient_app_new/features/location/PlaceDetails.dart' show PlaceDetails;
 import 'package:hmg_patient_app_new/features/location/PlacePrediction.dart';
+import 'package:hmg_patient_app_new/features/location/location_view_model.dart';
 import 'package:hmg_patient_app_new/features/my_appointments/models/facility_selection.dart';
 import 'package:hmg_patient_app_new/features/my_appointments/models/resp_models/hospital_model.dart';
 import 'package:hmg_patient_app_new/features/my_appointments/models/resp_models/patient_appointment_history_response_model.dart';
 import 'package:hmg_patient_app_new/features/my_appointments/my_appointments_repo.dart';
-import 'package:hmg_patient_app_new/presentation/authentication/login.dart';
-import 'package:hmg_patient_app_new/presentation/emergency_services/RRT/rrt_map_screen.dart';
 import 'package:hmg_patient_app_new/presentation/emergency_services/RRT/rrt_request_type_select.dart';
 import 'package:hmg_patient_app_new/presentation/emergency_services/RRT/terms_and_condition.dart';
 import 'package:hmg_patient_app_new/presentation/emergency_services/call_ambulance/call_ambulance_page.dart';
@@ -85,7 +78,6 @@ class EmergencyServicesViewModel extends ChangeNotifier {
   List nearestERList = [];
   List nearestERFilteredList = [];
 
-
   List? hospitalList;
   List? hmgHospitalList;
   List? hmcHospitalList;
@@ -104,7 +96,6 @@ class EmergencyServicesViewModel extends ChangeNotifier {
   AmbulanceCallingPlace callingPlace = AmbulanceCallingPlace.FROM_HOSPITAL;
   AmbulanceDirection ambulanceDirection = AmbulanceDirection.ONE_WAY;
 
-
   bool patientHasAdvanceERBalance = false;
   bool isERBookAppointment = false;
   late EROnlineCheckInPaymentDetailsResponse erOnlineCheckInPaymentDetailsResponse;
@@ -118,14 +109,11 @@ class EmergencyServicesViewModel extends ChangeNotifier {
   RRTServiceData? ordersRRT;
   TextEditingController rrtNotes = TextEditingController();
 
-
   List allOrders = [];
   List orderDisplayList = [];
-  bool historyLoading=  false;
+  bool historyLoading = false;
   OrderDislpay currentlyDisplayedOrder = OrderDislpay.ALL;
 
-
-
   setSelectedRRTProcedure(RRTProceduresResponseModel procedure) {
     selectedRRTProcedure = procedure;
     notifyListeners();
@@ -161,7 +149,6 @@ class EmergencyServicesViewModel extends ChangeNotifier {
   String? termsAndConditions;
 
   Future getRRTProcedures({Function(dynamic)? onSuccess, Function(String)? onError}) async {
-
     print("the app state is ${appState.isAuthenticated}");
     if (!appState.isAuthenticated) {
       dialogService.showErrorBottomSheet(
@@ -797,8 +784,8 @@ class EmergencyServicesViewModel extends ChangeNotifier {
         historyLoading = false;
         ambulanceOrders = apiResponse.data;
         allOrders.clear();
-        allOrders.addAll(ambulanceOrders??[]);
-        allOrders.addAll(ordersRRT?.completedOrders??[]);
+        allOrders.addAll(ambulanceOrders ?? []);
+        allOrders.addAll(ordersRRT?.completedOrders ?? []);
         changeOrderDisplayItems(OrderDislpay.ALL);
         notifyListeners();
       },
@@ -889,8 +876,7 @@ class EmergencyServicesViewModel extends ChangeNotifier {
         });
   }
 
-
-  RRTRequestModel createRRTRequest(GeocodeResult? result, PlaceDetails? place, PlacePrediction? placePrediction){
+  RRTRequestModel createRRTRequest(GeocodeResult? result, PlaceDetails? place, PlacePrediction? placePrediction) {
     AuthenticatedUser? user = appState.getAuthenticatedUser();
     if (user == null) throw Exception("Authentication Required to Continue");
 
@@ -898,7 +884,6 @@ class EmergencyServicesViewModel extends ChangeNotifier {
     Procedures procedures = new Procedures();
     rrtRequestModel.procedures = [];
 
-
     procedures.serviceID = selectedRRTProcedure?.procedureID;
 
     rrtRequestModel.latitude = ((result?.geometry.location.lat) ?? place?.lat);
@@ -920,7 +905,7 @@ class EmergencyServicesViewModel extends ChangeNotifier {
     notifyListeners();
   }
 
-  FutureOr submitRRTRequest(GeocodeResult? result, PlaceDetails? place, PlacePrediction? placePrediction)  async {
+  FutureOr submitRRTRequest(GeocodeResult? result, PlaceDetails? place, PlacePrediction? placePrediction) async {
     RRTRequestModel request = createRRTRequest(result, place, placePrediction);
     navServices.push(CustomPageRoute(page: RequestingServicesPage()));
 
@@ -929,9 +914,9 @@ class EmergencyServicesViewModel extends ChangeNotifier {
       navServices.pushAndRemoveUntil(
           CustomPageRoute(
               page: TrackingScreen(
-                isRRTOrder: true,
-                state: OrderTrackingState.failed,
-              )),
+            isRRTOrder: true,
+            state: OrderTrackingState.failed,
+          )),
           ModalRoute.withName("/EmergencyServicesPage"));
     }, (success) {
       getRRTOrders(shouldNavigateToTrackingScreen: true);
@@ -939,7 +924,7 @@ class EmergencyServicesViewModel extends ChangeNotifier {
   }
 
   Future getRRTOrders({bool shouldNavigateToTrackingScreen = false, bool showLoader = false}) async {
-    if(shouldNavigateToTrackingScreen == false && showLoader ) {
+    if (shouldNavigateToTrackingScreen == false && showLoader) {
       LoaderBottomSheet.showLoader(loadingText: "Fetching Orders");
     }
     historyLoading = true;
@@ -947,39 +932,40 @@ class EmergencyServicesViewModel extends ChangeNotifier {
     int? id = appState.getAuthenticatedUser()?.patientId;
 
     var response = await emergencyServicesRepo.getRRTOrders(id: id);
-    if(shouldNavigateToTrackingScreen == false && showLoader ) {
-      LoaderBottomSheet.hideLoader();}
+    if (shouldNavigateToTrackingScreen == false && showLoader) {
+      LoaderBottomSheet.hideLoader();
+    }
     response.fold(
-          (failure) async {
-            historyLoading = false;
-            notifyListeners();
+      (failure) async {
+        historyLoading = false;
+        notifyListeners();
         if (shouldNavigateToTrackingScreen) {
-          navServices.pushAndRemoveUntil(CustomPageRoute(page: TrackingScreen(isRRTOrder: true,state: OrderTrackingState.waitingForCall)), ModalRoute.withName("/EmergencyServicesPage"));
+          navServices.pushAndRemoveUntil(CustomPageRoute(page: TrackingScreen(isRRTOrder: true, state: OrderTrackingState.waitingForCall)),
+              ModalRoute.withName("/EmergencyServicesPage"));
         }
       },
-          (apiResponse) {
+      (apiResponse) {
         if (shouldNavigateToTrackingScreen) {
           navServices.pushAndRemoveUntil(
               CustomPageRoute(
                   page: TrackingScreen(
-                    state: OrderTrackingState.waitingForCall,
-                    isRRTOrder: true,
-                    rrtOrder: apiResponse.data?.pendingOrders.first,
-                  )),
+                state: OrderTrackingState.waitingForCall,
+                isRRTOrder: true,
+                rrtOrder: apiResponse.data?.pendingOrders.first,
+              )),
               ModalRoute.withName("/EmergencyServicesPage"));
         }
         historyLoading = false;
         ordersRRT = apiResponse.data;
         allOrders.clear();
-        allOrders.addAll(ambulanceOrders??[]);
-        allOrders.addAll(ordersRRT?.completedOrders??[]);
+        allOrders.addAll(ambulanceOrders ?? []);
+        allOrders.addAll(ordersRRT?.completedOrders ?? []);
         changeOrderDisplayItems(OrderDislpay.ALL);
         notifyListeners();
       },
     );
   }
 
-
   FutureOr cancelRRTOrder(int? orderID, {bool shouldPop = false}) async {
     dialogService.showCommonBottomSheetWithoutH(
         message: "Do you want to cancel the request".needTranslation,
@@ -998,52 +984,54 @@ class EmergencyServicesViewModel extends ChangeNotifier {
         });
   }
 
-  void changeOrderDisplayItems(OrderDislpay currentlyDisplayedOrder){
+  void changeOrderDisplayItems(OrderDislpay currentlyDisplayedOrder) {
     this.currentlyDisplayedOrder = currentlyDisplayedOrder;
-    switch(currentlyDisplayedOrder){
+    switch (currentlyDisplayedOrder) {
       case OrderDislpay.ALL:
-          orderDisplayList = allOrders;
-          break;
+        orderDisplayList = allOrders;
+        break;
       case OrderDislpay.RRT:
         orderDisplayList = ordersRRT?.completedOrders ?? [];
         break;
       case OrderDislpay.AMBULANCE:
-        orderDisplayList = ambulanceOrders??[];
+        orderDisplayList = ambulanceOrders ?? [];
         break;
     }
     notifyListeners();
   }
 
-  void openRRT(){
+  void openRRT() {
     print("the app state is ${appState.isAuthenticated}");
     if (appState.isAuthenticated) {
-      if(agreedToTermsAndCondition == false){
-        dialogService.showErrorBottomSheet(message: "You Need To Agree To Terms And Conditions".needTranslation, onOkPressed: (){
-          if(navServices.context == null ) return;
-          showCommonBottomSheetWithoutHeight(
-            navServices.context!,
-            padding: EdgeInsets.only(top: 24.h),
-            titleWidget:  Transform.flip(
-              flipX: isArabic,
-              child: Utils.buildSvgWithAssets(
-                icon: AppAssets.arrow_back,
-                iconColor: Color(0xff2B353E),
-                fit: BoxFit.contain,
-              ),
-            ).onPress(() {
-              navServices.pop();
-            }),
-            // title: "Rapid Response Team (RRT)".needTranslation,
-            child: RrtRequestTypeSelect(),
-            isFullScreen: false,
-            isCloseButtonVisible: true,
-            hasBottomPadding: false,
-            backgroundColor: AppColors.bottomSheetBgColor,
-            callBackFunc: () {
-              navServices.pop();
-            },
-          );
-        });
+      if (agreedToTermsAndCondition == false) {
+        dialogService.showErrorBottomSheet(
+            message: "You Need To Agree To Terms And Conditions".needTranslation,
+            onOkPressed: () {
+              if (navServices.context == null) return;
+              showCommonBottomSheetWithoutHeight(
+                navServices.context!,
+                padding: EdgeInsets.only(top: 24.h),
+                titleWidget: Transform.flip(
+                  flipX: isArabic,
+                  child: Utils.buildSvgWithAssets(
+                    icon: AppAssets.arrow_back,
+                    iconColor: Color(0xff2B353E),
+                    fit: BoxFit.contain,
+                  ),
+                ).onPress(() {
+                  navServices.pop();
+                }),
+                // title: "Rapid Response Team (RRT)".needTranslation,
+                child: RrtRequestTypeSelect(),
+                isFullScreen: false,
+                isCloseButtonVisible: true,
+                hasBottomPadding: false,
+                backgroundColor: AppColors.bottomSheetBgColor,
+                callBackFunc: () {
+                  navServices.pop();
+                },
+              );
+            });
         return;
       }
       placeValueInController();
@@ -1051,7 +1039,7 @@ class EmergencyServicesViewModel extends ChangeNotifier {
           isShowConfirmDialog: true,
           onSuccess: (position) async {
             updateBottomSheetState(BottomSheetType.FIXED);
-           bool result =  await navServices.push(
+            bool result = await navServices.push(
               CustomPageRoute(
                   page: MapUtilityScreen(
                     confirmButtonString: "Submit Request ".needTranslation,
@@ -1061,16 +1049,15 @@ class EmergencyServicesViewModel extends ChangeNotifier {
                   ),
                   direction: AxisDirection.down),
             );
-           if(result){
-             LocationViewModel locationViewModel = getIt.get();
-             GeocodeResponse? response = locationViewModel.geocodeResponse;
-             PlaceDetails? placeDetails = locationViewModel.placeDetails;
-             PlacePrediction? placePrediction = locationViewModel.selectedPrediction;
-             submitRRTRequest(response?.results.first, placeDetails, placePrediction);
-           }
-
+            if (result) {
+              LocationViewModel locationViewModel = getIt.get();
+              GeocodeResponse? response = locationViewModel.geocodeResponse;
+              PlaceDetails? placeDetails = locationViewModel.placeDetails;
+              PlacePrediction? placePrediction = locationViewModel.selectedPrediction;
+              submitRRTRequest(response?.results.first, placeDetails, placePrediction);
+            }
           });
-    } else{
+    } else {
       dialogService.showErrorBottomSheet(
           message: "You Need To Login First To Continue".needTranslation,
           onOkPressed: () {
@@ -1079,24 +1066,22 @@ class EmergencyServicesViewModel extends ChangeNotifier {
           });
     }
   }
-  clearRRTData(){
+
+  clearRRTData() {
     selectedRRTProcedure = null;
   }
 
-
   FutureOr getTermsAndConditions() async {
     LoaderBottomSheet.showLoader(loadingText: "Fetching Terms And Conditions".needTranslation);
     var response = await emergencyServicesRepo.getTermsAndCondition();
     LoaderBottomSheet.hideLoader();
-    response.fold((failure)=>errorHandlerService.handleError(failure: failure),(success){
+    response.fold((failure) => errorHandlerService.handleError(failure: failure), (success) {
       termsAndConditions = success.data;
       print("the response terms are $termsAndConditions");
       notifyListeners();
       navServices.push(
-        CustomPageRoute(
-            page: TermsAndCondition(termsAndCondition:success.data??""), direction: AxisDirection.down),
+        CustomPageRoute(page: TermsAndCondition(termsAndCondition: success.data ?? ""), direction: AxisDirection.down),
       );
     });
   }
-
 }
diff --git a/lib/features/symptoms_checker/models/conditions_model.dart b/lib/features/symptoms_checker/models/conditions_model.dart
new file mode 100644
index 0000000..774d8c3
--- /dev/null
+++ b/lib/features/symptoms_checker/models/conditions_model.dart
@@ -0,0 +1,97 @@
+import 'package:flutter/material.dart';
+import 'package:hmg_patient_app_new/core/enums.dart';
+
+class ConditionsModel {
+  final IconData icon;
+  final String title;
+  final int percentage;
+  final String tagText;
+  final String clinic;
+  final List symptoms;
+  final String description;
+  final String? monitorNote;
+  final String? appointmentLabel;
+  final PossibleConditionsSeverityEnum possibleConditionsSeverityEnum;
+
+  ConditionsModel({
+    required this.icon,
+    required this.title,
+    required this.percentage,
+    required this.tagText,
+    required this.clinic,
+    required this.symptoms,
+    required this.description,
+    required this.possibleConditionsSeverityEnum,
+    this.monitorNote,
+    this.appointmentLabel,
+  });
+}
+
+List dummyConditions = [
+  ConditionsModel(
+    icon: Icons.psychology_alt,
+    possibleConditionsSeverityEnum: PossibleConditionsSeverityEnum.seekMedicalAdvice,
+    title: "Migraine",
+    percentage: 87,
+    tagText: "Seek Medical Advice",
+    clinic: "Internal Medicine Clinic",
+    symptoms: ["Headache", "Nausea", "Sensitivity to light"],
+    description: "A migraine is a type of headache that can cause severe throbbing pain, usually on one side of the head.",
+    appointmentLabel: "Book Appointment",
+  ),
+  ConditionsModel(
+    icon: Icons.deblur,
+    title: "Tension Headache",
+    percentage: 37,
+    tagText: "Monitor",
+    monitorNote: "No need to visit doctor",
+    clinic: "GP Clinic",
+    symptoms: ["Mild head pressure", "Scalp tenderness"],
+    description: "A tension-type headache is generally a mild to moderate pain that feels like a tight band around your head.",
+    possibleConditionsSeverityEnum: PossibleConditionsSeverityEnum.monitorOnly,
+  ),
+  ConditionsModel(
+    icon: Icons.medication_liquid,
+    title: "Meningitis",
+    percentage: 28,
+    tagText: "Emergency",
+    clinic: "Neurology Clinic",
+    symptoms: ["Mild head pressure", "Scalp tenderness"],
+    description: "A tension-type headache is generally a mild to moderate pain that feels like a tight band around your head.",
+    appointmentLabel: "Book Appointment",
+    possibleConditionsSeverityEnum: PossibleConditionsSeverityEnum.emergency,
+  ),
+  ConditionsModel(
+    icon: Icons.psychology_alt,
+    title: "Migraine",
+    percentage: 87,
+    tagText: "Seek Medical Advice",
+    clinic: "Internal Medicine Clinic",
+    symptoms: ["Headache", "Nausea", "Sensitivity to light"],
+    description: "A migraine is a type of headache that can cause severe throbbing pain, usually on one side of the head.",
+    appointmentLabel: "Book Appointment",
+    possibleConditionsSeverityEnum: PossibleConditionsSeverityEnum.seekMedicalAdvice,
+  ),
+  ConditionsModel(
+    icon: Icons.deblur,
+    title: "Tension Headache",
+    percentage: 37,
+    tagText: "Monitor",
+    monitorNote: "No need to visit doctor",
+    clinic: "GP Clinic",
+    symptoms: ["Mild head pressure", "Scalp tenderness"],
+    description: "A tension-type headache is generally a mild to moderate pain that feels like a tight band around your head.",
+    possibleConditionsSeverityEnum: PossibleConditionsSeverityEnum.monitorOnly,
+  ),
+  ConditionsModel(
+    icon: Icons.medication_liquid,
+    title: "Meningitis",
+    percentage: 28,
+    tagText: "Emergency",
+    clinic: "Neurology Clinic",
+    symptoms: ["Mild head pressure", "Scalp tenderness"],
+    description: "A tension-type headache is generally a mild to moderate pain that feels like a tight band around your head.",
+    appointmentLabel: "Book Appointment",
+    possibleConditionsSeverityEnum: PossibleConditionsSeverityEnum.emergency,
+  ),
+];
diff --git a/lib/presentation/lab/lab_orders_page.dart b/lib/presentation/lab/lab_orders_page.dart
index 4ffd979..0efa5da 100644
--- a/lib/presentation/lab/lab_orders_page.dart
+++ b/lib/presentation/lab/lab_orders_page.dart
@@ -1 +1 @@
-import 'dart:async';

import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_staggered_animations/flutter_staggered_animations.dart';
import 'package:hmg_patient_app_new/core/app_state.dart';
import 'package:hmg_patient_app_new/core/dependencies.dart';
import 'package:hmg_patient_app_new/core/enums.dart';
import 'package:hmg_patient_app_new/core/utils/size_utils.dart';
import 'package:hmg_patient_app_new/core/utils/utils.dart';
import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
import 'package:hmg_patient_app_new/features/lab/models/resp_models/patient_lab_orders_response_model.dart';
import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
import 'package:hmg_patient_app_new/features/lab/lab_view_model.dart';
import 'package:hmg_patient_app_new/presentation/lab/lab_order_by_test.dart';
import 'package:hmg_patient_app_new/presentation/lab/lab_result_item_view.dart';
import 'package:hmg_patient_app_new/presentation/lab/lab_result_via_clinic/LabResultByClinic.dart';
import 'package:hmg_patient_app_new/presentation/lab/search_lab_report.dart';
import 'package:hmg_patient_app_new/theme/colors.dart';
import 'package:hmg_patient_app_new/widgets/chip/custom_chip_widget.dart';
import 'package:hmg_patient_app_new/widgets/date_range_selector/viewmodel/date_range_view_model.dart';
import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart';
import 'package:hmg_patient_app_new/widgets/transitions/fade_page.dart';
import 'package:provider/provider.dart';
import 'package:hmg_patient_app_new/widgets/custom_tab_bar.dart';
import '../../widgets/appbar/collapsing_list_view.dart';

class LabOrdersPage extends StatefulWidget {
  const LabOrdersPage({super.key});

  @override
  State createState() => _LabOrdersPageState();
}

class _LabOrdersPageState extends State {
  late LabViewModel labProvider;
  late DateRangeSelectorRangeViewModel rangeViewModel;
  late AppState _appState;
  List?> labSuggestions = [];
  int? expandedIndex;
  String? selectedFilterText = '';
  int activeIndex = 0;

  @override
  void initState() {
    scheduleMicrotask(() {
      labProvider.initLabProvider();
    });
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    labProvider = Provider.of(context, listen: false);
    rangeViewModel = Provider.of(context);
    _appState = getIt();

    return Scaffold(
        backgroundColor: AppColors.bgScaffoldColor,
        body: CollapsingListView(
          title: LocaleKeys.labResults.tr(),
          search: () async {
            final lavVM = Provider.of(context, listen: false);
            if (lavVM.isLabOrdersLoading) {
              return;
            } else {
              String? value = await Navigator.of(context).push(
                CustomPageRoute(
                  page: SearchLabResultsContent(labSuggestionsList: lavVM.labSuggestions),
                  fullScreenDialog: true,
                  direction: AxisDirection.down,
                ),
              );
              if (value != null) {
                selectedFilterText = value;
                lavVM.filterLabReports(value);
              }
            }
          },
          child: SingleChildScrollView(
            padding: EdgeInsets.all(24.h),
            physics: NeverScrollableScrollPhysics(),
            child: Consumer(
              builder: (context, model, child) {
                return Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: [
                    CustomTabBar(
                      activeTextColor: Color(0xffED1C2B),
                      activeBackgroundColor: Color(0xffED1C2B).withValues(alpha: .1),
                      tabs: [
                        CustomTabBarModel(null, "By Visit".needTranslation),
                        CustomTabBarModel(null, "By Test".needTranslation),
                        // CustomTabBarModel(null, "Completed".needTranslation),
                      ],
                      onTabChange: (index) {
                        activeIndex = index;
                        setState(() {});
                      },
                    ),
                    SizedBox(height: 8.h),
                    selectedFilterText!.isNotEmpty
                        ? CustomChipWidget(
                            chipText: selectedFilterText!,
                            chipType: ChipTypeEnum.alert,
                            isSelected: true,
                          )
                        : SizedBox(),
                    activeIndex == 0
                        ? ListView.builder(
                            shrinkWrap: true,
                            physics: NeverScrollableScrollPhysics(),
                            padding: EdgeInsets.zero,
                            itemCount: model.isLabOrdersLoading
                                ? 5
                                : model.patientLabOrders.isNotEmpty
                                    ? model.patientLabOrders.length
                                    : 1,
                            itemBuilder: (context, index) {
                              final isExpanded = expandedIndex == index;
                              return model.isLabOrdersLoading
                                  ? LabResultItemView(
                                      onTap: () {},
                                      labOrder: null,
                                      index: index,
                                      isLoading: true,
                                    )
                                  : model.patientLabOrders.isNotEmpty
                                      ? AnimationConfiguration.staggeredList(
                                          position: index,
                                          duration: const Duration(milliseconds: 500),
                                          child: SlideAnimation(
                                            verticalOffset: 100.0,
                                            child: FadeInAnimation(
                                                child: LabResultItemView(
                                                    onTap: () {
                                                      model.currentlySelectedPatientOrder =
                                                          model.patientLabOrders[
                                                              index];
                                                    labProvider.getPatientLabResultByHospital(model.patientLabOrders[
                                                                    index]);
                                                        labProvider
                                                            .getPatientSpecialResult(
                                                                model.patientLabOrders[
                                                                    index]);
                                                      Navigator.push(
                                                          context,
                                                          CustomPageRoute(
                                                          page: LabResultByClinic(labOrder: model.patientLabOrders[index]),
                                                        ));
                                                    },
                                                    labOrder: model.patientLabOrders[index],
                                                    index: index,
                                                  isExpanded: isExpanded),
                                            ),
                                          ),
                                        )
                                      : Utils.getNoDataWidget(context, noDataText: "You don't have any lab results yet.".needTranslation);
                            },
                          )
                        : ListView.builder(
                            shrinkWrap: true,
                            physics: NeverScrollableScrollPhysics(),
                            padding: EdgeInsets.zero,
                            itemCount: model.isLabOrdersLoading
                                ? 5
                                : model.uniqueTests.toList().isNotEmpty
                                    ? model.uniqueTests.toList().length
                                    : 1,
                            itemBuilder: (context, index) {
                              final isExpanded = expandedIndex == index;
                              return model.isLabOrdersLoading
                                  ? LabResultItemView(
                                      onTap: () {},
                                      labOrder: null,
                                      index: index,
                                      isLoading: true,
                                    )
                                  : model.uniqueTests.toList().isNotEmpty
                                      ? AnimationConfiguration.staggeredList(
                                          position: index,
                                          duration: const Duration(milliseconds: 500),
                                          child: SlideAnimation(
                                            verticalOffset: 100.0,
                                            child: FadeInAnimation(
                                                child: LabOrderByTest(
                                                    appState: _appState,
                                                    onTap: () {
                                                      if (model.uniqueTests.toList()[index].model != null) {
                                                        rangeViewModel.flush();
                                                        model.getPatientLabResult(model.uniqueTests.toList()[index].model!, model.uniqueTests.toList()[index].description!,
                                                            (_appState.isArabic() ? model.uniqueTests.toList()[index].testDescriptionAr! : model.uniqueTests.toList()[index].testDescriptionEn!));
                                                      }
                                                    },
                                                    tests: model.uniqueTests.toList()[index],
                                                    index: index,
                                                isExpanded: isExpanded)),
                                      ),
                                        )
                                      : Utils.getNoDataWidget(context, noDataText: "You don't have any lab results yet.".needTranslation);
                            },
                          )
                  ],
                );
              },
            ),
          ),
        ));
  }

  Color getLabOrderStatusColor(num status) {
    switch (status) {
      case 44:
        return AppColors.warningColorYellow;
      case 45:
        return AppColors.warningColorYellow;
      case 16:
        return AppColors.successColor;
      case 17:
        return AppColors.successColor;
      default:
        return AppColors.greyColor;
    }
  }

  String getLabOrderStatusText(num status) {
    switch (status) {
      case 44:
        return LocaleKeys.resultsPending.tr(context: context);
      case 45:
        return LocaleKeys.resultsPending.tr(context: context);
      case 16:
        return LocaleKeys.resultsAvailable.tr(context: context);
      case 17:
        return LocaleKeys.resultsAvailable.tr(context: context);
      default:
        return "";
    }
  }

  getLabSuggestions(LabViewModel model) {
    if (model.patientLabOrders.isEmpty) {
      return [];
    }
    return model.patientLabOrders.map((m) => m.testDetails).toList();
  }
}
\ No newline at end of file
+import 'dart:async';

import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:flutter_staggered_animations/flutter_staggered_animations.dart';
import 'package:hmg_patient_app_new/core/app_state.dart';
import 'package:hmg_patient_app_new/core/dependencies.dart';
import 'package:hmg_patient_app_new/core/enums.dart';
import 'package:hmg_patient_app_new/core/utils/size_utils.dart';
import 'package:hmg_patient_app_new/core/utils/utils.dart';
import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
import 'package:hmg_patient_app_new/features/lab/lab_view_model.dart';
import 'package:hmg_patient_app_new/features/lab/models/resp_models/patient_lab_orders_response_model.dart';
import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
import 'package:hmg_patient_app_new/presentation/lab/lab_order_by_test.dart';
import 'package:hmg_patient_app_new/presentation/lab/lab_result_item_view.dart';
import 'package:hmg_patient_app_new/presentation/lab/lab_result_via_clinic/LabResultByClinic.dart';
import 'package:hmg_patient_app_new/presentation/lab/search_lab_report.dart';
import 'package:hmg_patient_app_new/theme/colors.dart';
import 'package:hmg_patient_app_new/widgets/chip/custom_chip_widget.dart';
import 'package:hmg_patient_app_new/widgets/custom_tab_bar.dart';
import 'package:hmg_patient_app_new/widgets/date_range_selector/viewmodel/date_range_view_model.dart';
import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart';
import 'package:provider/provider.dart';

import '../../widgets/appbar/collapsing_list_view.dart';

class LabOrdersPage extends StatefulWidget {
  const LabOrdersPage({super.key});

  @override
  State createState() => _LabOrdersPageState();
}

class _LabOrdersPageState extends State {
  late LabViewModel labProvider;
  late DateRangeSelectorRangeViewModel rangeViewModel;
  late AppState _appState;
  List?> labSuggestions = [];
  int? expandedIndex;
  String? selectedFilterText = '';
  int activeIndex = 0;

  @override
  void initState() {
    scheduleMicrotask(() {
      labProvider.initLabProvider();
    });
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    labProvider = Provider.of(context, listen: false);
    rangeViewModel = Provider.of(context);
    _appState = getIt();

    return Scaffold(
        backgroundColor: AppColors.bgScaffoldColor,
        body: CollapsingListView(
          title: LocaleKeys.labResults.tr(),
          search: () async {
            final lavVM = Provider.of(context, listen: false);
            if (lavVM.isLabOrdersLoading) {
              return;
            } else {
              String? value = await Navigator.of(context).push(
                CustomPageRoute(
                  page: SearchLabResultsContent(labSuggestionsList: lavVM.labSuggestions),
                  fullScreenDialog: true,
                  direction: AxisDirection.down,
                ),
              );
              if (value != null) {
                selectedFilterText = value;
                lavVM.filterLabReports(value);
              }
            }
          },
          child: SingleChildScrollView(
            padding: EdgeInsets.all(24.h),
            physics: NeverScrollableScrollPhysics(),
            child: Consumer(
              builder: (context, model, child) {
                return Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: [
                    CustomTabBar(
                      activeTextColor: Color(0xffED1C2B),
                      activeBackgroundColor: Color(0xffED1C2B).withValues(alpha: .1),
                      tabs: [
                        CustomTabBarModel(null, "By Visit".needTranslation),
                        CustomTabBarModel(null, "By Test".needTranslation),
                        // CustomTabBarModel(null, "Completed".needTranslation),
                      ],
                      onTabChange: (index) {
                        activeIndex = index;
                        setState(() {});
                      },
                    ),
                    SizedBox(height: 8.h),
                    selectedFilterText!.isNotEmpty
                        ? CustomChipWidget(
                            chipText: selectedFilterText!,
                            chipType: ChipTypeEnum.alert,
                            isSelected: true,
                          )
                        : SizedBox(),
                    activeIndex == 0
                        ? ListView.builder(
                            shrinkWrap: true,
                            physics: NeverScrollableScrollPhysics(),
                            padding: EdgeInsets.zero,
                            itemCount: model.isLabOrdersLoading
                                ? 5
                                : model.patientLabOrders.isNotEmpty
                                    ? model.patientLabOrders.length
                                    : 1,
                            itemBuilder: (context, index) {
                              final isExpanded = expandedIndex == index;
                              return model.isLabOrdersLoading
                                  ? LabResultItemView(
                                      onTap: () {},
                                      labOrder: null,
                                      index: index,
                                      isLoading: true,
                                    )
                                  : model.patientLabOrders.isNotEmpty
                                      ? AnimationConfiguration.staggeredList(
                                          position: index,
                                          duration: const Duration(milliseconds: 500),
                                          child: SlideAnimation(
                                            verticalOffset: 100.0,
                                            child: FadeInAnimation(
                                              child: LabResultItemView(
                                                  onTap: () {
                                                    model.currentlySelectedPatientOrder = model.patientLabOrders[index];
                                                    labProvider.getPatientLabResultByHospital(model.patientLabOrders[index]);
                                                    labProvider.getPatientSpecialResult(model.patientLabOrders[index]);
                                                    Navigator.push(
                                                        context,
                                                        CustomPageRoute(
                                                          page: LabResultByClinic(labOrder: model.patientLabOrders[index]),
                                                        ));
                                                  },
                                                  labOrder: model.patientLabOrders[index],
                                                  index: index,
                                                  isExpanded: isExpanded),
                                            ),
                                          ),
                                        )
                                      : Utils.getNoDataWidget(context, noDataText: "You don't have any lab results yet.".needTranslation);
                            },
                          )
                        : ListView.builder(
                            shrinkWrap: true,
                            physics: NeverScrollableScrollPhysics(),
                            padding: EdgeInsets.zero,
                            itemCount: model.isLabOrdersLoading
                                ? 5
                                : model.uniqueTests.toList().isNotEmpty
                                    ? model.uniqueTests.toList().length
                                    : 1,
                            itemBuilder: (context, index) {
                              final isExpanded = expandedIndex == index;
                              return model.isLabOrdersLoading
                                  ? LabResultItemView(
                                      onTap: () {},
                                      labOrder: null,
                                      index: index,
                                      isLoading: true,
                                    )
                                  : model.uniqueTests.toList().isNotEmpty
                                      ? AnimationConfiguration.staggeredList(
                                          position: index,
                                          duration: const Duration(milliseconds: 500),
                                          child: SlideAnimation(
                                            verticalOffset: 100.0,
                                            child: FadeInAnimation(
                                                child: LabOrderByTest(
                                                    appState: _appState,
                                                    onTap: () {
                                                      if (model.uniqueTests.toList()[index].model != null) {
                                                        rangeViewModel.flush();
                                                        model.getPatientLabResult(
                                                            model.uniqueTests.toList()[index].model!,
                                                            model.uniqueTests.toList()[index].description!,
                                                            (_appState.isArabic()
                                                                ? model.uniqueTests.toList()[index].testDescriptionAr!
                                                                : model.uniqueTests.toList()[index].testDescriptionEn!));
                                                      }
                                                    },
                                                    tests: model.uniqueTests.toList()[index],
                                                    index: index,
                                                    isExpanded: isExpanded)),
                                          ),
                                        )
                                      : Utils.getNoDataWidget(context, noDataText: "You don't have any lab results yet.".needTranslation);
                            },
                          )
                  ],
                );
              },
            ),
          ),
        ));
  }

  Color getLabOrderStatusColor(num status) {
    switch (status) {
      case 44:
        return AppColors.warningColorYellow;
      case 45:
        return AppColors.warningColorYellow;
      case 16:
        return AppColors.successColor;
      case 17:
        return AppColors.successColor;
      default:
        return AppColors.greyColor;
    }
  }

  String getLabOrderStatusText(num status) {
    switch (status) {
      case 44:
        return LocaleKeys.resultsPending.tr(context: context);
      case 45:
        return LocaleKeys.resultsPending.tr(context: context);
      case 16:
        return LocaleKeys.resultsAvailable.tr(context: context);
      case 17:
        return LocaleKeys.resultsAvailable.tr(context: context);
      default:
        return "";
    }
  }

  getLabSuggestions(LabViewModel model) {
    if (model.patientLabOrders.isEmpty) {
      return [];
    }
    return model.patientLabOrders.map((m) => m.testDetails).toList();
  }
}
\ No newline at end of file
diff --git a/lib/presentation/symptoms_checker/organ_selector_screen.dart b/lib/presentation/symptoms_checker/organ_selector_screen.dart
index 6b9582c..d945b5b 100644
--- a/lib/presentation/symptoms_checker/organ_selector_screen.dart
+++ b/lib/presentation/symptoms_checker/organ_selector_screen.dart
@@ -5,6 +5,7 @@ import 'package:hmg_patient_app_new/core/app_state.dart';
 import 'package:hmg_patient_app_new/core/dependencies.dart';
 import 'package:hmg_patient_app_new/core/enums.dart';
 import 'package:hmg_patient_app_new/core/utils/utils.dart';
+import 'package:hmg_patient_app_new/extensions/route_extensions.dart';
 import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
 import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
 import 'package:hmg_patient_app_new/presentation/symptoms_checker/symptoms_checker_view_model.dart';
@@ -47,6 +48,7 @@ class _OrganSelectorPageState extends State {
         backgroundColor: AppColors.successColor,
       ),
     );
+    context.navigateWithName(AppRoutes.possibleConditionsScreen);
   }
 
   @override
@@ -116,7 +118,7 @@ class _OrganSelectorPageState extends State {
 
   Widget _buildBodyViewer(SymptomsCheckerViewModel viewModel) {
     return Padding(
-      padding: EdgeInsets.fromLTRB(16.h, 16.h, 16.h, 45.h),
+      padding: EdgeInsets.fromLTRB(16.h, 16.h, 16.h, 60.h),
       child: AnimatedSwitcher(
         duration: const Duration(milliseconds: 600),
         transitionBuilder: (child, animation) => _build3DFlipTransition(child, animation),
@@ -129,6 +131,7 @@ class _OrganSelectorPageState extends State {
           selectedOrganIds: viewModel.selectedOrganIds,
           onOrganTap: viewModel.toggleOrganSelection,
           isBodyHidden: viewModel.isBodyHidden,
+          tooltipOrganId: viewModel.tooltipOrganId,
         ),
       ),
     );
diff --git a/lib/presentation/symptoms_checker/possible_conditions_screen.dart b/lib/presentation/symptoms_checker/possible_conditions_screen.dart
new file mode 100644
index 0000000..0587c32
--- /dev/null
+++ b/lib/presentation/symptoms_checker/possible_conditions_screen.dart
@@ -0,0 +1,177 @@
+import 'package:easy_localization/easy_localization.dart';
+import 'package:flutter/material.dart';
+import 'package:hmg_patient_app_new/core/app_assets.dart';
+import 'package:hmg_patient_app_new/core/app_export.dart';
+import 'package:hmg_patient_app_new/core/dependencies.dart';
+import 'package:hmg_patient_app_new/core/utils/utils.dart';
+import 'package:hmg_patient_app_new/extensions/route_extensions.dart';
+import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
+import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
+import 'package:hmg_patient_app_new/features/symptoms_checker/models/conditions_model.dart';
+import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
+import 'package:hmg_patient_app_new/presentation/symptoms_checker/symptoms_checker_view_model.dart';
+import 'package:hmg_patient_app_new/presentation/symptoms_checker/widgets/condition_card.dart';
+import 'package:hmg_patient_app_new/services/navigation_service.dart';
+import 'package:hmg_patient_app_new/theme/colors.dart';
+import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart';
+import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart';
+import 'package:provider/provider.dart';
+import 'package:shimmer/shimmer.dart';
+
+class PossibleConditionsScreen extends StatelessWidget {
+  const PossibleConditionsScreen({super.key});
+
+  Widget _buildLoadingShimmer() {
+    return ListView.separated(
+      shrinkWrap: true,
+      physics: const NeverScrollableScrollPhysics(),
+      padding: EdgeInsets.all(16.w),
+      itemCount: 10,
+      separatorBuilder: (_, __) => SizedBox(height: 12.h),
+      itemBuilder: (context, index) {
+        return Shimmer.fromColors(
+          baseColor: Colors.grey[300]!,
+          highlightColor: Colors.grey[100]!,
+          child: Container(
+            height: 80.h,
+            decoration: BoxDecoration(
+              color: Colors.white,
+              borderRadius: BorderRadius.circular(10.r),
+            ),
+          ),
+        );
+      },
+    );
+  }
+
+  Widget _buildPredictionsList(List conditions) {
+    if (conditions.isEmpty) {
+      return Center(
+        child: Padding(
+          padding: EdgeInsets.all(24.h),
+          child: Text(
+            'No Predictions available'.needTranslation,
+            style: TextStyle(
+              fontSize: 16.h,
+              color: AppColors.greyTextColor,
+            ),
+          ),
+        ),
+      );
+    }
+
+    return Column(
+      crossAxisAlignment: CrossAxisAlignment.start,
+      children: [
+        SizedBox(height: 16.h),
+        ListView.separated(
+          padding: EdgeInsets.zero,
+          itemCount: conditions.length,
+          shrinkWrap: true,
+          physics: NeverScrollableScrollPhysics(),
+          separatorBuilder: (context, index) => SizedBox(height: 16.h),
+          itemBuilder: (context, index) {
+            final conditionModel = conditions[index];
+            return ConditionCard(
+              icon: conditionModel.icon,
+              title: conditionModel.title,
+              percentage: conditionModel.percentage,
+              tagText: conditionModel.tagText,
+              clinic: conditionModel.clinic,
+              symptoms: conditionModel.symptoms,
+              description: conditionModel.description,
+              possibleConditionsSeverityEnum: conditionModel.possibleConditionsSeverityEnum,
+              onActionPressed: () {
+                ScaffoldMessenger.of(context).showSnackBar(
+                  SnackBar(
+                    content: Text('We are not available for a week. May you Rest In Peace :('),
+                    backgroundColor: AppColors.primaryRedColor,
+                  ),
+                );
+              },
+            );
+          },
+        ).paddingSymmetrical(24.w, 0),
+        SizedBox(height: 24.h),
+      ],
+    );
+  }
+
+  _buildConfirmationBottomSheet({required BuildContext context, required VoidCallback onConfirm}) {
+    return showCommonBottomSheetWithoutHeight(
+      title: LocaleKeys.notice.tr(context: context),
+      context,
+      child: Utils.getWarningWidget(
+        loadingText: "Are you sure you want to restart the organ selection?".needTranslation,
+        isShowActionButtons: true,
+        onCancelTap: () => Navigator.pop(context),
+        onConfirmTap: () => onConfirm(),
+      ),
+      callBackFunc: () {},
+      isFullScreen: false,
+      isCloseButtonVisible: true,
+    );
+  }
+
+  _restartOrganSelection(BuildContext context) async {
+    final symptomsCheckerVm = context.read();
+    symptomsCheckerVm.reset();
+    context.pop();
+    await Future.delayed(Duration(seconds: 1)).whenComplete(() => context.pop());
+  }
+
+  _navigateToLandingPage() {
+    NavigationService navigationService = getIt.get();
+    navigationService.replaceAllRoutesAndNavigateToLanding();
+  }
+
+  _buildTrailingSection(BuildContext context) {
+    return Row(
+      children: [
+        Container(
+          height: 40.h,
+          padding: EdgeInsets.all(8.w),
+          child: Center(
+            child: Utils.buildSvgWithAssets(
+              icon: AppAssets.refreshIcon,
+              height: 20.h,
+              width: 20.w,
+              iconColor: AppColors.textColor,
+            ),
+          ),
+        ).onPress(() => _buildConfirmationBottomSheet(context: context, onConfirm: () => _restartOrganSelection(context))),
+        Container(
+          height: 40.h,
+          padding: EdgeInsets.all(8.w),
+          child: Center(
+            child: Utils.buildSvgWithAssets(
+              icon: AppAssets.homeBorderedIcon,
+              height: 20.h,
+              width: 20.w,
+              iconColor: AppColors.textColor,
+            ),
+          ),
+        ).onPress(() => _buildConfirmationBottomSheet(context: context, onConfirm: () => _navigateToLandingPage())),
+      ],
+    ).paddingSymmetrical(20.w, 0);
+  }
+
+  @override
+  Widget build(BuildContext context) {
+    return Scaffold(
+      backgroundColor: AppColors.bgScaffoldColor,
+      body: CollapsingListView(
+        title: "Possible Conditions".needTranslation,
+        trailing: _buildTrailingSection(context),
+        child: Consumer(
+          builder: (context, symptomsCheckerViewModel, child) {
+            if (symptomsCheckerViewModel.isPossibleConditionsLoading || symptomsCheckerViewModel.isPossibleConditionsLoading) {
+              return _buildLoadingShimmer();
+            }
+            return _buildPredictionsList(dummyConditions);
+          },
+        ),
+      ),
+    );
+  }
+}
diff --git a/lib/presentation/symptoms_checker/symptoms_checker_view_model.dart b/lib/presentation/symptoms_checker/symptoms_checker_view_model.dart
index 35a23f1..e162b67 100644
--- a/lib/presentation/symptoms_checker/symptoms_checker_view_model.dart
+++ b/lib/presentation/symptoms_checker/symptoms_checker_view_model.dart
@@ -1,3 +1,5 @@
+import 'dart:async';
+
 import 'package:flutter/cupertino.dart';
 import 'package:hmg_patient_app_new/core/enums.dart';
 import 'package:hmg_patient_app_new/features/symptoms_checker/models/organ_model.dart';
@@ -10,14 +12,22 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
   final Set _selectedOrganIds = {};
   bool _isBottomSheetExpanded = false;
 
+  // Tooltip state
+  String? _tooltipOrganId;
+  Timer? _tooltipTimer;
+
   // Getters
 
+  bool isPossibleConditionsLoading = false;
+
   BodyView get currentView => _currentView;
 
   Set get selectedOrganIds => _selectedOrganIds;
 
   bool get isBottomSheetExpanded => _isBottomSheetExpanded;
 
+  String? get tooltipOrganId => _tooltipOrganId;
+
   /// Get organs for current view
   List get currentOrgans => OrganData.getOrgansForView(_currentView);
 
@@ -56,6 +66,33 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
     } else {
       _selectedOrganIds.add(organId);
     }
+
+    // Show tooltip
+    _showTooltip(organId);
+
+    notifyListeners();
+  }
+
+  /// Show tooltip for an organ
+  void _showTooltip(String organId) {
+    // Cancel any existing timer
+    _tooltipTimer?.cancel();
+
+    // Set the tooltip organ
+    _tooltipOrganId = organId;
+    notifyListeners();
+
+    // Hide tooltip after 2 seconds
+    _tooltipTimer = Timer(const Duration(seconds: 1), () {
+      _tooltipOrganId = null;
+      notifyListeners();
+    });
+  }
+
+  /// Hide tooltip immediately
+  void hideTooltip() {
+    _tooltipTimer?.cancel();
+    _tooltipOrganId = null;
     notifyListeners();
   }
 
@@ -103,6 +140,15 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
     _currentView = BodyView.front;
     _selectedOrganIds.clear();
     _isBottomSheetExpanded = false;
+    _tooltipTimer?.cancel();
+    _tooltipOrganId = null;
     notifyListeners();
   }
+
+  @override
+  void dispose() {
+    _tooltipTimer?.cancel();
+    super.dispose();
+  }
+
 }
diff --git a/lib/presentation/symptoms_checker/widgets/condition_card.dart b/lib/presentation/symptoms_checker/widgets/condition_card.dart
new file mode 100644
index 0000000..87a8f3d
--- /dev/null
+++ b/lib/presentation/symptoms_checker/widgets/condition_card.dart
@@ -0,0 +1,199 @@
+import 'package:flutter/material.dart';
+import 'package:hmg_patient_app_new/core/app_assets.dart';
+import 'package:hmg_patient_app_new/core/app_export.dart';
+import 'package:hmg_patient_app_new/core/enums.dart';
+import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
+import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
+import 'package:hmg_patient_app_new/presentation/symptoms_checker/widgets/custom_progress_bar.dart';
+import 'package:hmg_patient_app_new/theme/colors.dart';
+import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart';
+import 'package:hmg_patient_app_new/widgets/chip/app_custom_chip_widget.dart';
+
+class ConditionCard extends StatelessWidget {
+  final IconData icon;
+  final String title;
+  final int percentage;
+  final String tagText;
+  final String clinic;
+  final List symptoms;
+  final String description;
+  final String? monitorNote;
+  final String? appointmentLabel;
+  final PossibleConditionsSeverityEnum possibleConditionsSeverityEnum;
+  final VoidCallback? onActionPressed;
+
+  const ConditionCard({
+    super.key,
+    required this.icon,
+    required this.title,
+    required this.percentage,
+    required this.tagText,
+    required this.clinic,
+    required this.symptoms,
+    required this.description,
+    this.monitorNote,
+    this.appointmentLabel,
+    required this.possibleConditionsSeverityEnum,
+    this.onActionPressed,
+  });
+
+  Color getChipColorBySeverityEnum(PossibleConditionsSeverityEnum possibleConditionsSeverityEnum) {
+    switch (possibleConditionsSeverityEnum) {
+      case PossibleConditionsSeverityEnum.seekMedicalAdvice:
+        return AppColors.chipColorSeekMedicalAdvice;
+      case PossibleConditionsSeverityEnum.monitorOnly:
+        return AppColors.chipColorMonitor;
+      case PossibleConditionsSeverityEnum.emergency:
+        return AppColors.chipColorEmergency;
+    }
+  }
+
+  Color getChipTextColorBySeverityEnum(PossibleConditionsSeverityEnum possibleConditionsSeverityEnum) {
+    switch (possibleConditionsSeverityEnum) {
+      case PossibleConditionsSeverityEnum.seekMedicalAdvice:
+        return AppColors.chipTextColorSeekMedicalAdvice;
+      case PossibleConditionsSeverityEnum.monitorOnly:
+        return AppColors.chipColorMonitor;
+      case PossibleConditionsSeverityEnum.emergency:
+        return AppColors.chipColorEmergency;
+    }
+  }
+
+  _buildSymptomsRow() {
+    return Wrap(
+      spacing: 6.w,
+      crossAxisAlignment: WrapCrossAlignment.center,
+      children: [
+        for (int i = 0; i < symptoms.length; i++) ...[
+          Text(symptoms[i], style: TextStyle(color: AppColors.greyTextColor, fontWeight: FontWeight.w500, fontSize: 12.f)),
+          if (i != symptoms.length - 1)
+            Padding(
+              padding: EdgeInsets.symmetric(horizontal: 2.w),
+              child: Icon(Icons.circle, size: 7, color: AppColors.textColor),
+            ),
+        ],
+      ],
+    );
+  }
+
+  @override
+  Widget build(BuildContext context) {
+    return Container(
+      width: double.infinity,
+      decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24.h, hasShadow: true),
+      child: Column(
+        crossAxisAlignment: CrossAxisAlignment.start,
+        children: [
+          Row(
+            crossAxisAlignment: CrossAxisAlignment.start,
+            children: [
+              Container(
+                width: 48.w,
+                height: 48.w,
+                decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
+                  color: getChipColorBySeverityEnum(possibleConditionsSeverityEnum).withValues(alpha: 0.2),
+                  borderRadius: 12.r,
+                  hasShadow: false,
+                ),
+                child: Icon(icon, color: getChipTextColorBySeverityEnum(possibleConditionsSeverityEnum), size: 24.f),
+              ),
+              SizedBox(width: 12.w),
+              Expanded(
+                child: Column(
+                  crossAxisAlignment: CrossAxisAlignment.start,
+                  children: [
+                    Row(
+                      mainAxisAlignment: MainAxisAlignment.spaceBetween,
+                      children: [
+                        Expanded(
+                          child: Text(
+                            title,
+                            style: TextStyle(fontSize: 18.f, fontWeight: FontWeight.w600, color: AppColors.textColor),
+                            overflow: TextOverflow.ellipsis,
+                          ),
+                        ),
+                        AppCustomChipWidget(
+                          labelText: tagText,
+                          backgroundColor: getChipColorBySeverityEnum(possibleConditionsSeverityEnum).withValues(alpha: 0.2),
+                          textColor: getChipTextColorBySeverityEnum(possibleConditionsSeverityEnum),
+                        ),
+                      ],
+                    ),
+                    CustomRoundedProgressBar(
+                      percentage: percentage,
+                      height: 6.h,
+                      color: getChipColorBySeverityEnum(possibleConditionsSeverityEnum),
+                      backgroundColor: AppColors.scaffoldBgColor,
+                      titleWidget: Row(
+                        children: [
+                          Text(
+                            "$percentage%",
+                            style: TextStyle(
+                              fontWeight: FontWeight.bold,
+                              fontSize: 12.f,
+                              color: getChipColorBySeverityEnum(possibleConditionsSeverityEnum),
+                            ),
+                          ),
+                        ],
+                      ).paddingSymmetrical(0, 4.h),
+                    ),
+                  ],
+                ),
+              ),
+            ],
+          ).paddingAll(16.w),
+          Divider(color: AppColors.bottomNAVBorder, height: 1, thickness: 1),
+          Column(
+            crossAxisAlignment: CrossAxisAlignment.start,
+            children: [
+              Text(
+                clinic,
+                style: TextStyle(
+                  fontWeight: FontWeight.w600,
+                  fontSize: 14.f,
+                  color: AppColors.textColor,
+                ),
+              ),
+              _buildSymptomsRow(),
+              SizedBox(height: 16.h),
+              Text("Description".needTranslation, style: TextStyle(fontWeight: FontWeight.bold, fontSize: 14.f, color: AppColors.textColor)),
+              SizedBox(height: 2.h),
+              Text(description, style: TextStyle(color: AppColors.greyTextColor, fontWeight: FontWeight.w500, fontSize: 12.f)),
+              if (possibleConditionsSeverityEnum == PossibleConditionsSeverityEnum.emergency)
+                CustomButton(
+                  text: appointmentLabel ?? "Book Appointment".needTranslation,
+                  onPressed: () {
+                    if (onActionPressed != null) {
+                      onActionPressed!();
+                    }
+                  },
+                  backgroundColor: AppColors.lightRedButtonColor,
+                  borderColor: Colors.transparent,
+                  textColor: AppColors.primaryRedColor,
+                  fontSize: 16.f,
+                  fontWeight: FontWeight.w500,
+                  borderRadius: 12.r,
+                  padding: EdgeInsets.symmetric(horizontal: 10.w),
+                  height: 48.h,
+                  icon: AppAssets.add_icon,
+                  iconColor: AppColors.primaryRedColor,
+                  iconSize: 18.h,
+                ).paddingOnly(top: 16.w),
+              if (monitorNote != null)
+                Container(
+                  margin: EdgeInsets.only(top: 12.h),
+                  child: AppCustomChipWidget(
+                    labelText: monitorNote!,
+                    backgroundColor: AppColors.whiteColor,
+                    textColor: AppColors.textColor,
+                    padding: EdgeInsets.symmetric(horizontal: 14.w, vertical: 8.h),
+                    shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12.r)),
+                  ),
+                ),
+            ],
+          ).paddingAll(16.w),
+        ],
+      ),
+    );
+  }
+}
diff --git a/lib/presentation/symptoms_checker/widgets/custom_progress_bar.dart b/lib/presentation/symptoms_checker/widgets/custom_progress_bar.dart
new file mode 100644
index 0000000..5f55395
--- /dev/null
+++ b/lib/presentation/symptoms_checker/widgets/custom_progress_bar.dart
@@ -0,0 +1,60 @@
+import 'package:flutter/material.dart';
+import 'package:hmg_patient_app_new/core/app_export.dart';
+
+class CustomRoundedProgressBar extends StatelessWidget {
+  final int percentage;
+  final Color color;
+  final Color backgroundColor;
+  final double? height;
+  final Widget? titleWidget;
+
+  const CustomRoundedProgressBar({
+    super.key,
+    this.titleWidget,
+    required this.percentage,
+    required this.color,
+    required this.backgroundColor,
+    this.height,
+  });
+
+  @override
+  Widget build(BuildContext context) {
+    final h = height ?? 8.h;
+    return Column(
+      children: [
+        if (titleWidget != null) ...[
+          titleWidget!,
+        ],
+        LayoutBuilder(
+          builder: (context, constraints) {
+            double radius = h / 2;
+            return Container(
+              height: h,
+              width: constraints.maxWidth,
+              decoration: BoxDecoration(
+                color: backgroundColor,
+                borderRadius: BorderRadius.circular(radius),
+              ),
+              child: Align(
+                alignment: Alignment.centerLeft,
+                child: FractionallySizedBox(
+                  widthFactor: (percentage.clamp(0, 100)) / 100,
+                  child: Container(
+                    height: height,
+                    decoration: BoxDecoration(
+                      color: color,
+                      borderRadius: BorderRadius.horizontal(
+                        left: Radius.circular(radius),
+                        right: Radius.circular(radius),
+                      ),
+                    ),
+                  ),
+                ),
+              ),
+            );
+          },
+        ),
+      ],
+    );
+  }
+}
diff --git a/lib/presentation/symptoms_checker/widgets/interactive_body_widget.dart b/lib/presentation/symptoms_checker/widgets/interactive_body_widget.dart
index 33663b5..4c41ddd 100644
--- a/lib/presentation/symptoms_checker/widgets/interactive_body_widget.dart
+++ b/lib/presentation/symptoms_checker/widgets/interactive_body_widget.dart
@@ -4,6 +4,7 @@ import 'package:flutter/material.dart';
 import 'package:flutter/services.dart';
 import 'package:hmg_patient_app_new/features/symptoms_checker/models/organ_model.dart';
 import 'package:hmg_patient_app_new/presentation/symptoms_checker/widgets/organ_dot_widget.dart';
+import 'package:hmg_patient_app_new/presentation/symptoms_checker/widgets/organ_tooltip_widget.dart';
 
 class InteractiveBodyWidget extends StatefulWidget {
   final String bodyImageAsset;
@@ -11,6 +12,7 @@ class InteractiveBodyWidget extends StatefulWidget {
   final Set selectedOrganIds;
   final bool isBodyHidden;
   final Function(String organId) onOrganTap;
+  final String? tooltipOrganId;
 
   const InteractiveBodyWidget({
     super.key,
@@ -19,6 +21,7 @@ class InteractiveBodyWidget extends StatefulWidget {
     required this.selectedOrganIds,
     required this.onOrganTap,
     this.isBodyHidden = false,
+    this.tooltipOrganId,
   });
 
   @override
@@ -77,13 +80,13 @@ class _InteractiveBodyWidgetState extends State {
             transformationController: _transformationController,
             minScale: 0.5,
             maxScale: 4.0,
-            boundaryMargin: const EdgeInsets.all(20),
             clipBehavior: Clip.none,
             child: AspectRatio(
               aspectRatio: _imageAspectRatio!,
               child: LayoutBuilder(
                 builder: (context, imageConstraints) {
                   return Stack(
+                    clipBehavior: Clip.none,
                     children: [
                       // Body image
                       Positioned.fill(
@@ -108,6 +111,18 @@ class _InteractiveBodyWidgetState extends State {
                           child: OrganDot(isSelected: isSelected, onTap: () => widget.onOrganTap(organ.id), size: dotSize),
                         );
                       }),
+
+                      // Tooltip
+                      if (widget.tooltipOrganId != null)
+                        ...widget.organs.where((organ) => organ.id == widget.tooltipOrganId).map((organ) {
+                          final centerX = organ.position.x * imageConstraints.maxWidth;
+                          final centerY = organ.position.y * imageConstraints.maxHeight;
+
+                          return OrganTooltipWidget(
+                            organName: organ.name,
+                            position: Offset(centerX, centerY),
+                          );
+                        }),
                     ],
                   );
                 },
diff --git a/lib/presentation/symptoms_checker/widgets/organ_tooltip_widget.dart b/lib/presentation/symptoms_checker/widgets/organ_tooltip_widget.dart
new file mode 100644
index 0000000..77e8319
--- /dev/null
+++ b/lib/presentation/symptoms_checker/widgets/organ_tooltip_widget.dart
@@ -0,0 +1,34 @@
+import 'package:flutter/material.dart';
+import 'package:hmg_patient_app_new/core/app_export.dart';
+import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
+import 'package:hmg_patient_app_new/theme/colors.dart';
+
+class OrganTooltipWidget extends StatelessWidget {
+  final String organName;
+  final Offset position;
+
+  const OrganTooltipWidget({super.key, required this.organName, required this.position});
+
+  @override
+  Widget build(BuildContext context) {
+    return Positioned(
+      left: position.dx,
+      top: position.dy,
+      child: FractionalTranslation(
+        translation: const Offset(-0.5, -1.2), // Center horizontally, position above the dot
+        child: Container(
+          padding: EdgeInsets.symmetric(horizontal: 12.w, vertical: 6.h),
+          decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.scaffoldBgColor, borderRadius: 8.h),
+          child: Text(
+            organName,
+            style: TextStyle(
+              color: AppColors.primaryRedColor,
+              fontSize: 12.f,
+              fontWeight: FontWeight.w500,
+            ),
+          ),
+        ),
+      ),
+    );
+  }
+}
diff --git a/lib/routes/app_routes.dart b/lib/routes/app_routes.dart
index a144d19..08686d3 100644
--- a/lib/routes/app_routes.dart
+++ b/lib/routes/app_routes.dart
@@ -8,6 +8,7 @@ import 'package:hmg_patient_app_new/presentation/home/navigation_screen.dart';
 import 'package:hmg_patient_app_new/presentation/home_health_care/hhc_procedures_page.dart';
 import 'package:hmg_patient_app_new/presentation/medical_file/medical_file_page.dart';
 import 'package:hmg_patient_app_new/presentation/symptoms_checker/organ_selector_screen.dart';
+import 'package:hmg_patient_app_new/presentation/symptoms_checker/possible_conditions_screen.dart';
 import 'package:hmg_patient_app_new/splashPage.dart';
 
 class AppRoutes {
@@ -23,6 +24,7 @@ class AppRoutes {
 
   // Symptoms Checker
   static const String organSelectorPage = '/organSelectorPage';
+  static const String possibleConditionsScreen = '/possibleConditionsScreen';
 
   static Map get routes => {
         initialRoute: (context) => SplashPage(),
@@ -34,6 +36,7 @@ class AppRoutes {
         eReferralPage: (context) => EReferralPage(),
         comprehensiveCheckupPage: (context) => ComprehensiveCheckupPage(),
         homeHealthCarePage: (context) => HhcProceduresPage(),
-        organSelectorPage: (context) => OrganSelectorPage()
+        organSelectorPage: (context) => OrganSelectorPage(),
+        possibleConditionsScreen: (context) => PossibleConditionsScreen()
       };
 }
diff --git a/lib/theme/colors.dart b/lib/theme/colors.dart
index ccdf030..03e889b 100644
--- a/lib/theme/colors.dart
+++ b/lib/theme/colors.dart
@@ -82,4 +82,11 @@ class AppColors {
   static const Color infoBannerBorderColor = Color(0xFFFFE5B4);
   static const Color infoBannerIconColor = Color(0xFFCC9B14);
   static const Color infoBannerTextColor = Color(0xFF856404);
+
+  // SymptomsChecker
+
+  static const Color chipColorSeekMedicalAdvice = Color(0xFFFFAF15);
+  static const Color chipTextColorSeekMedicalAdvice = Color(0xFFAB7103);
+  static const Color chipColorMonitor = Color(0xFF18C273);
+  static const Color chipColorEmergency = Color(0xFFED1C2B);
 }
-- 
2.30.2


From 1e5744cf443c03a489c2abc02ecedba67c06456c Mon Sep 17 00:00:00 2001
From: haroon amjad 
Date: Thu, 27 Nov 2025 09:49:47 +0300
Subject: [PATCH 14/39] Updates & enhancements

---
 lib/core/api_consts.dart                      |   4 +-
 .../immediate_livecare_view_model.dart        |  29 ++
 lib/features/lab/lab_view_model.dart          |   6 +-
 .../appointment_details_page.dart             |   7 +-
 .../widgets/appointment_card.dart             |   4 +-
 .../widgets/appointment_doctor_card.dart      |  22 +-
 ...mediate_livecare_pending_request_page.dart | 277 +++++++++---------
 lib/presentation/home/landing_page.dart       | 181 +++++++-----
 .../insurance_approval_details_page.dart      |   6 +-
 .../insurance/widgets/insurance_history.dart  |   2 +-
 lib/presentation/lab/lab_orders_page.dart     |   2 +-
 .../medical_file/medical_file_page.dart       |   2 +-
 .../medical_file/widgets/lab_rad_card.dart    |  38 +--
 lib/widgets/countdown_timer.dart              | 111 +++++++
 14 files changed, 433 insertions(+), 258 deletions(-)
 create mode 100644 lib/widgets/countdown_timer.dart

diff --git a/lib/core/api_consts.dart b/lib/core/api_consts.dart
index a1f4062..1146736 100644
--- a/lib/core/api_consts.dart
+++ b/lib/core/api_consts.dart
@@ -711,7 +711,7 @@ var GET_PRESCRIPTION_INSTRUCTIONS_PDF = 'Services/ChatBot_Service.svc/REST/Chatb
 class ApiConsts {
   static const maxSmallScreen = 660;
 
-  static AppEnvironmentTypeEnum appEnvironmentType = AppEnvironmentTypeEnum.uat;
+  static AppEnvironmentTypeEnum appEnvironmentType = AppEnvironmentTypeEnum.prod;
 
   // static String baseUrl = 'https://uat.hmgwebservices.com/'; // HIS API URL UAT
 
@@ -852,7 +852,7 @@ class ApiConsts {
   static final String addHHCOrder = 'api/HHC/add';
 
   // ************     static values for Api   ****************
-  static final double appVersionID = 19.3;
+  static final double appVersionID = 50.3;
   static final int appChannelId = 3;
   static final String appIpAddress = "10.20.10.20";
   static final String appGeneralId = "Cs2020@2016\$2958";
diff --git a/lib/features/immediate_livecare/immediate_livecare_view_model.dart b/lib/features/immediate_livecare/immediate_livecare_view_model.dart
index 599bc39..7e2d7c9 100644
--- a/lib/features/immediate_livecare/immediate_livecare_view_model.dart
+++ b/lib/features/immediate_livecare/immediate_livecare_view_model.dart
@@ -1,3 +1,5 @@
+import 'dart:async';
+
 import 'package:flutter/cupertino.dart';
 import 'package:hmg_patient_app_new/core/app_state.dart';
 import 'package:hmg_patient_app_new/core/cache_consts.dart';
@@ -36,6 +38,10 @@ class ImmediateLiveCareViewModel extends ChangeNotifier {
 
   late AppState _appState;
 
+  Duration countdownDuration = Duration(minutes: 1, seconds: 0);
+  late ValueNotifier durationNotifier;
+  late Timer timer;
+
   initImmediateLiveCare() {
     _appState = getIt();
     immediateLiveCareClinicsList = [];
@@ -144,12 +150,19 @@ class ImmediateLiveCareViewModel extends ChangeNotifier {
           patientLiveCareHistoryList = apiResponse.data!;
           if (patientLiveCareHistoryList.isNotEmpty) {
             if (patientLiveCareHistoryList[0].callStatus! < 4) {
+              countdownDuration = Duration(seconds: 0);
+              durationNotifier.dispose();
               patientHasPendingLiveCareRequest = true;
+              countdownDuration = Duration(minutes: patientLiveCareHistoryList.first.watingtimeInteger!, seconds: 0);
+              durationNotifier = ValueNotifier(countdownDuration);
+              startTimer();
             } else {
               patientHasPendingLiveCareRequest = false;
+              timer.cancel();
             }
           } else {
             patientHasPendingLiveCareRequest = false;
+            timer.cancel();
           }
           notifyListeners();
           if (onSuccess != null) {
@@ -159,4 +172,20 @@ class ImmediateLiveCareViewModel extends ChangeNotifier {
       },
     );
   }
+
+  void startTimer() {
+    timer = Timer.periodic(const Duration(seconds: 1), (_) => addTime());
+    notifyListeners();
+  }
+
+  void addTime() {
+    final seconds = durationNotifier.value.inSeconds - 1;
+    if (seconds < 0) {
+      timer?.cancel();
+      // Handle end of timer here
+      // showEndMessage();
+    } else {
+      durationNotifier.value = Duration(seconds: seconds);
+    }
+  }
 }
diff --git a/lib/features/lab/lab_view_model.dart b/lib/features/lab/lab_view_model.dart
index bad4f89..079471c 100644
--- a/lib/features/lab/lab_view_model.dart
+++ b/lib/features/lab/lab_view_model.dart
@@ -77,14 +77,14 @@ class LabViewModel extends ChangeNotifier {
       required this.navigationService});
 
   initLabProvider() {
-    // if (isLabNeedToLoad) {
+    if (isLabNeedToLoad) {
       patientLabOrders.clear();
       filteredLabOrders.clear();
       labOrderTests.clear();
       isLabOrdersLoading = true;
       isLabResultsLoading = true;
       getPatientLabOrders();
-    // }
+    }
     notifyListeners();
   }
 
@@ -94,7 +94,7 @@ class LabViewModel extends ChangeNotifier {
   }
 
   Future getPatientLabOrders({Function(dynamic)? onSuccess, Function(String)? onError}) async {
-    // if (!isLabNeedToLoad) return;
+    if (!isLabNeedToLoad) return;
 
     isLabOrdersLoading = true;
     patientLabOrders.clear();
diff --git a/lib/presentation/appointments/appointment_details_page.dart b/lib/presentation/appointments/appointment_details_page.dart
index 0a1eaf2..20f5538 100644
--- a/lib/presentation/appointments/appointment_details_page.dart
+++ b/lib/presentation/appointments/appointment_details_page.dart
@@ -63,10 +63,9 @@ class _AppointmentDetailsPageState extends State {
   @override
   void initState() {
     scheduleMicrotask(() {
-      // if (AppointmentType.isArrived(widget.patientAppointmentHistoryResponseModel)) {
-      // prescriptionsViewModel.setPrescriptionsDetailsLoading();
-      // prescriptionsViewModel.getPrescriptionDetails(getPrescriptionRequestModel());
-      // }
+      if (AppointmentType.isArrived(widget.patientAppointmentHistoryResponseModel)) {
+
+      }
     });
     super.initState();
   }
diff --git a/lib/presentation/appointments/widgets/appointment_card.dart b/lib/presentation/appointments/widgets/appointment_card.dart
index e301fbf..5d2ae5c 100644
--- a/lib/presentation/appointments/widgets/appointment_card.dart
+++ b/lib/presentation/appointments/widgets/appointment_card.dart
@@ -144,9 +144,7 @@ class AppointmentCard extends StatelessWidget {
           child: Column(
             crossAxisAlignment: CrossAxisAlignment.start,
             children: [
-              (isLoading
-                      ? 'https://hmgwebservices.com/Images/MobileImages/DUBAI/unkown_female.png'
-                      : patientAppointmentHistoryResponseModel.doctorNameObj!)
+              (isLoading ? 'John Doe' : "${patientAppointmentHistoryResponseModel.doctorTitle} ${patientAppointmentHistoryResponseModel.doctorNameObj!}")
                   .toText16(isBold: true, maxlines: 1)
                   .toShimmer2(isShow: isLoading),
               SizedBox(height: 8.h),
diff --git a/lib/presentation/appointments/widgets/appointment_doctor_card.dart b/lib/presentation/appointments/widgets/appointment_doctor_card.dart
index 8d0f4e7..b2d74ca 100644
--- a/lib/presentation/appointments/widgets/appointment_doctor_card.dart
+++ b/lib/presentation/appointments/widgets/appointment_doctor_card.dart
@@ -42,12 +42,18 @@ class AppointmentDoctorCard extends StatelessWidget {
             Row(
               crossAxisAlignment: CrossAxisAlignment.start,
               children: [
-                Image.network(
-                  patientAppointmentHistoryResponseModel.doctorImageURL!,
-                  width: 63.w,
-                  height: 63.h,
-                  fit: BoxFit.cover,
-                ).circle(100.r),
+                Column(
+                  children: [
+                    Image.network(
+                      patientAppointmentHistoryResponseModel.doctorImageURL!,
+                      width: 63.w,
+                      height: 63.h,
+                      fit: BoxFit.cover,
+                    ).circle(100.r),
+                    SizedBox(height: 12.h),
+                    AppCustomChipWidget(icon: AppAssets.rating_icon, iconColor: AppColors.ratingColorYellow, labelText: "Rating: ${patientAppointmentHistoryResponseModel.decimalDoctorRate}"),
+                  ],
+                ),
                 SizedBox(width: 16.w),
                 Expanded(
                   child: Column(
@@ -87,10 +93,6 @@ class AppointmentDoctorCard extends StatelessWidget {
                                 !patientAppointmentHistoryResponseModel.isLiveCareAppointment! ? AppColors.greyColor : AppColors.successColor,
                             textColor: !patientAppointmentHistoryResponseModel.isLiveCareAppointment! ? AppColors.textColor : AppColors.whiteColor,
                           ),
-                          AppCustomChipWidget(
-                              icon: AppAssets.rating_icon,
-                              iconColor: AppColors.ratingColorYellow,
-                              labelText: "Rating: ${patientAppointmentHistoryResponseModel.decimalDoctorRate}"),
                         ],
                       ),
                     ],
diff --git a/lib/presentation/book_appointment/livecare/immediate_livecare_pending_request_page.dart b/lib/presentation/book_appointment/livecare/immediate_livecare_pending_request_page.dart
index e9e5c5c..8c8b79c 100644
--- a/lib/presentation/book_appointment/livecare/immediate_livecare_pending_request_page.dart
+++ b/lib/presentation/book_appointment/livecare/immediate_livecare_pending_request_page.dart
@@ -16,6 +16,7 @@ import 'package:hmg_patient_app_new/theme/colors.dart';
 import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart';
 import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart';
 import 'package:hmg_patient_app_new/widgets/chip/app_custom_chip_widget.dart';
+import 'package:hmg_patient_app_new/widgets/countdown_timer.dart';
 import 'package:lottie/lottie.dart';
 import 'package:provider/provider.dart';
 import 'package:url_launcher/url_launcher.dart';
@@ -32,24 +33,24 @@ class _ImmediateLiveCarePendingRequestPageState extends State durationNotifier = ValueNotifier(countdownDuration);
-  Timer? timer;
+  // static Duration countdownDuration = Duration(minutes: 1, seconds: 0);
+  // late ValueNotifier durationNotifier = ValueNotifier(immediateLiveCareViewModel.countdownDuration);
+  // Timer? timer;
 
   @override
   void initState() {
     super.initState();
     scheduleMicrotask(() {
-      countdownDuration = Duration(minutes: immediateLiveCareViewModel.patientLiveCareHistoryList[0].watingtimeInteger!, seconds: 0);
-      durationNotifier = ValueNotifier(countdownDuration);
-      startTimer();
+      // countdownDuration = Duration(minutes: immediateLiveCareViewModel.patientLiveCareHistoryList[0].watingtimeInteger!, seconds: 0);
+      // durationNotifier = ValueNotifier(immediateLiveCareViewModel.countdownDuration);
+      // startTimer();
     });
   }
 
   @override
   void dispose() {
-    timer?.cancel();
-    durationNotifier.dispose();
+    // timer?.cancel();
+    // durationNotifier.dispose();
     super.dispose();
   }
 
@@ -85,7 +86,7 @@ class _ImmediateLiveCarePendingRequestPageState extends State(
-                                valueListenable: durationNotifier,
+                                valueListenable: immediateLiveCareVM.durationNotifier,
                                 builder: (context, duration, child) {
                                   return Column(
                                     mainAxisAlignment: MainAxisAlignment.center,
@@ -173,133 +174,133 @@ class _ImmediateLiveCarePendingRequestPageState extends State addTime());
-    setState(() {});
-  }
-
-  void addTime() {
-    final seconds = durationNotifier.value.inSeconds - 1;
-    if (seconds < 0) {
-      timer?.cancel();
-      // Handle end of timer here
-      // showEndMessage();
-    } else {
-      durationNotifier.value = Duration(seconds: seconds);
-    }
-  }
-
-  Future _onWillPop() async {
-    timer?.cancel();
-    Navigator.of(context).pop();
-    return true;
-  }
-
-  Widget buildTime(Duration duration) {
-    String twoDigits(int n) => n.toString().padLeft(2, '0');
-    final hours = twoDigits(duration.inHours);
-    final minutes = twoDigits(duration.inMinutes.remainder(60));
-    final seconds = twoDigits(duration.inSeconds.remainder(60));
-
-    return Row(
-      mainAxisAlignment: MainAxisAlignment.center,
-      children: [
-        buildTimeColumn(hours, "Hours".needTranslation),
-        buildTimeColumn(minutes, "Mins".needTranslation),
-        buildTimeColumn(seconds, "Secs".needTranslation, isLast: true),
-      ],
-    );
-  }
-
-  Widget buildTimeColumn(String time, String label, {bool isLast = false}) {
-    return Column(
-      mainAxisAlignment: MainAxisAlignment.center,
-      children: [
-        Row(
-          children: [
-            buildDigit(time[0]),
-            buildDigit(time[1]),
-            if (!isLast) buildTimeSeparator(),
-          ],
-        ),
-        buildLabel(label),
-      ],
-    );
-  }
-
-  Widget buildDigit(String digit) {
-    return Container(
-      padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 4),
-      // margin: const EdgeInsets.symmetric(horizontal: 2),
-      decoration: BoxDecoration(
-        color: Colors.white,
-        borderRadius: BorderRadius.circular(8),
-      ),
-      child: ClipRect(
-        child: AnimatedSwitcher(
-          duration: const Duration(milliseconds: 600),
-          switchInCurve: Curves.easeOutExpo,
-          switchOutCurve: Curves.easeInExpo,
-          transitionBuilder: (Widget child, Animation animation) {
-            return Stack(
-              children: [
-                SlideTransition(
-                  position: Tween(
-                    begin: const Offset(0, -1),
-                    end: const Offset(0, 1),
-                  ).animate(CurvedAnimation(
-                    parent: animation,
-                    curve: Curves.easeOutCubic,
-                  )),
-                  child: FadeTransition(
-                    opacity: animation,
-                    child: child,
-                  ),
-                ),
-                SlideTransition(
-                  position: Tween(
-                    begin: const Offset(0, -1),
-                    end: const Offset(0, 0),
-                  ).animate(CurvedAnimation(
-                    parent: animation,
-                    curve: Curves.bounceIn,
-                  )),
-                  child: FadeTransition(
-                    opacity: animation,
-                    child: child,
-                  ),
-                ),
-              ],
-            );
-          },
-          child: Text(
-            digit,
-            key: ValueKey(digit),
-            style: TextStyle(
-              fontWeight: FontWeight.bold,
-              color: Colors.black,
-              fontSize: 20.f,
-            ),
-          ),
-        ),
-      ),
-    );
-  }
-
-  Widget buildLabel(String label) {
-    return label.toText14(isBold: true);
-  }
-
-  Widget buildTimeSeparator() {
-    return const Padding(
-      padding: EdgeInsets.symmetric(horizontal: 2.0),
-      child: Text(
-        ":",
-        style: TextStyle(
-          color: Colors.black,
-          fontSize: 20,
-        ),
-      ),
-    );
-  }
+  // void startTimer() {
+  //   // timer = Timer.periodic(const Duration(seconds: 1), (_) => addTime());
+  //   // setState(() {});
+  // }
+  //
+  // void addTime() {
+  //   final seconds = durationNotifier.value.inSeconds - 1;
+  //   if (seconds < 0) {
+  //     timer?.cancel();
+  //     // Handle end of timer here
+  //     // showEndMessage();
+  //   } else {
+  //     durationNotifier.value = Duration(seconds: seconds);
+  //   }
+  // }
+  //
+  // Future _onWillPop() async {
+  //   timer?.cancel();
+  //   Navigator.of(context).pop();
+  //   return true;
+  // }
+  //
+  // Widget buildTime(Duration duration) {
+  //   String twoDigits(int n) => n.toString().padLeft(2, '0');
+  //   final hours = twoDigits(duration.inHours);
+  //   final minutes = twoDigits(duration.inMinutes.remainder(60));
+  //   final seconds = twoDigits(duration.inSeconds.remainder(60));
+  //
+  //   return Row(
+  //     mainAxisAlignment: MainAxisAlignment.center,
+  //     children: [
+  //       buildTimeColumn(hours, "Hours".needTranslation),
+  //       buildTimeColumn(minutes, "Mins".needTranslation),
+  //       buildTimeColumn(seconds, "Secs".needTranslation, isLast: true),
+  //     ],
+  //   );
+  // }
+  //
+  // Widget buildTimeColumn(String time, String label, {bool isLast = false}) {
+  //   return Column(
+  //     mainAxisAlignment: MainAxisAlignment.center,
+  //     children: [
+  //       Row(
+  //         children: [
+  //           buildDigit(time[0]),
+  //           buildDigit(time[1]),
+  //           if (!isLast) buildTimeSeparator(),
+  //         ],
+  //       ),
+  //       buildLabel(label),
+  //     ],
+  //   );
+  // }
+  //
+  // Widget buildDigit(String digit) {
+  //   return Container(
+  //     padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 4),
+  //     // margin: const EdgeInsets.symmetric(horizontal: 2),
+  //     decoration: BoxDecoration(
+  //       color: Colors.white,
+  //       borderRadius: BorderRadius.circular(8),
+  //     ),
+  //     child: ClipRect(
+  //       child: AnimatedSwitcher(
+  //         duration: const Duration(milliseconds: 600),
+  //         switchInCurve: Curves.easeOutExpo,
+  //         switchOutCurve: Curves.easeInExpo,
+  //         transitionBuilder: (Widget child, Animation animation) {
+  //           return Stack(
+  //             children: [
+  //               SlideTransition(
+  //                 position: Tween(
+  //                   begin: const Offset(0, -1),
+  //                   end: const Offset(0, 1),
+  //                 ).animate(CurvedAnimation(
+  //                   parent: animation,
+  //                   curve: Curves.easeOutCubic,
+  //                 )),
+  //                 child: FadeTransition(
+  //                   opacity: animation,
+  //                   child: child,
+  //                 ),
+  //               ),
+  //               SlideTransition(
+  //                 position: Tween(
+  //                   begin: const Offset(0, -1),
+  //                   end: const Offset(0, 0),
+  //                 ).animate(CurvedAnimation(
+  //                   parent: animation,
+  //                   curve: Curves.bounceIn,
+  //                 )),
+  //                 child: FadeTransition(
+  //                   opacity: animation,
+  //                   child: child,
+  //                 ),
+  //               ),
+  //             ],
+  //           );
+  //         },
+  //         child: Text(
+  //           digit,
+  //           key: ValueKey(digit),
+  //           style: TextStyle(
+  //             fontWeight: FontWeight.bold,
+  //             color: Colors.black,
+  //             fontSize: 20.f,
+  //           ),
+  //         ),
+  //       ),
+  //     ),
+  //   );
+  // }
+  //
+  // Widget buildLabel(String label) {
+  //   return label.toText14(isBold: true);
+  // }
+  //
+  // Widget buildTimeSeparator() {
+  //   return const Padding(
+  //     padding: EdgeInsets.symmetric(horizontal: 2.0),
+  //     child: Text(
+  //       ":",
+  //       style: TextStyle(
+  //         color: Colors.black,
+  //         fontSize: 20,
+  //       ),
+  //     ),
+  //   );
+  // }
 }
diff --git a/lib/presentation/home/landing_page.dart b/lib/presentation/home/landing_page.dart
index ce2e514..fe0268d 100644
--- a/lib/presentation/home/landing_page.dart
+++ b/lib/presentation/home/landing_page.dart
@@ -9,6 +9,7 @@ import 'package:hmg_patient_app_new/core/app_assets.dart';
 import 'package:hmg_patient_app_new/core/app_state.dart';
 import 'package:hmg_patient_app_new/core/cache_consts.dart';
 import 'package:hmg_patient_app_new/core/dependencies.dart';
+import 'package:hmg_patient_app_new/core/utils/date_util.dart';
 import 'package:hmg_patient_app_new/core/utils/size_utils.dart';
 import 'package:hmg_patient_app_new/core/utils/utils.dart';
 import 'package:hmg_patient_app_new/extensions/int_extensions.dart';
@@ -44,6 +45,7 @@ import 'package:hmg_patient_app_new/theme/colors.dart';
 import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart';
 import 'package:hmg_patient_app_new/widgets/chip/app_custom_chip_widget.dart';
 import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart';
+import 'package:hmg_patient_app_new/widgets/countdown_timer.dart';
 import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart';
 import 'package:hmg_patient_app_new/widgets/routes/spring_page_route_builder.dart';
 import 'package:provider/provider.dart';
@@ -253,20 +255,107 @@ class _LandingPageState extends State {
                                               builder: DotSwiperPaginationBuilder(color: Color(0xffD9D9D9), activeColor: AppColors.blackBgColor),
                                             ),
                                             itemBuilder: (BuildContext context, int index) {
-                                              return Container(
-                                                decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
-                                                  color: AppColors.whiteColor,
-                                                  borderRadius: 24.r,
-                                                  hasShadow: true,
-                                                ),
-                                                child: AppointmentCard(
-                                                  patientAppointmentHistoryResponseModel: myAppointmentsVM.patientAppointmentsHistoryList[index],
-                                                  myAppointmentsViewModel: myAppointmentsViewModel,
-                                                  bookAppointmentsViewModel: bookAppointmentsViewModel,
-                                                  isLoading: false,
-                                                  isFromHomePage: true,
-                                                ),
-                                              );
+                                              return (immediateLiveCareViewModel.patientHasPendingLiveCareRequest && index == 0)
+                                                  ? Column(
+                                                      children: [
+                                                        SizedBox(height: 12.h),
+                                                        Container(
+                                                          decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
+                                                            color: AppColors.whiteColor,
+                                                            borderRadius: 20.r,
+                                                            hasShadow: true,
+                                                            side: BorderSide(color: AppColors.ratingColorYellow, width: 3.h),
+                                                          ),
+                                                          child: Padding(
+                                                            padding: EdgeInsets.all(16.h),
+                                                            child: Column(
+                                                              crossAxisAlignment: CrossAxisAlignment.start,
+                                                              children: [
+                                                                "Immediate LiveCare Request".needTranslation.toText16(isBold: true),
+                                                                SizedBox(height: 10.h),
+                                                                Row(
+                                                                  mainAxisAlignment: MainAxisAlignment.spaceBetween,
+                                                                  children: [
+                                                                    Row(
+                                                                      children: [
+                                                                        AppCustomChipWidget(
+                                                                          labelText: immediateLiveCareViewModel.patientLiveCareHistoryList[0].stringCallStatus,
+                                                                          backgroundColor: AppColors.warningColorYellow.withValues(alpha: 0.20),
+                                                                          textColor: AppColors.alertColor,
+                                                                        ),
+                                                                        SizedBox(width: 8.w),
+                                                                        AppCustomChipWidget(
+                                                                            icon: AppAssets.appointment_calendar_icon,
+                                                                            labelText: DateUtil.formatDateToDate(
+                                                                                DateUtil.convertStringToDate(immediateLiveCareViewModel.patientLiveCareHistoryList[0].arrivalTime), false)),
+                                                                      ],
+                                                                    ),
+                                                                    Utils.buildSvgWithAssets(icon: AppAssets.waiting_icon, width: 24.h, height: 24.h),
+                                                                    // Lottie.asset(AppAnimations.pending_loading_animation, repeat: true, reverse: false, frameRate: FrameRate(60), width: 80.h, height: 80.h, fit: BoxFit.cover),
+                                                                  ],
+                                                                ),
+                                                                SizedBox(height: 10.h),
+                                                                "Hala ${appState.getAuthenticatedUser()!.firstName}!!!".needTranslation.toText16(isBold: true),
+                                                                SizedBox(height: 8.h),
+                                                                "Your turn is after ${immediateLiveCareViewModel.patientLiveCareHistoryList[0].patCount} patients.".toText14(isBold: true),
+                                                                SizedBox(height: 8.h),
+                                                                Column(
+                                                                  crossAxisAlignment: CrossAxisAlignment.start,
+                                                                  children: [
+                                                                    "Expected waiting time: ".toText12(isBold: true),
+                                                                    SizedBox(height: 8.h),
+                                                                    ValueListenableBuilder(
+                                                                      valueListenable: immediateLiveCareViewModel.durationNotifier,
+                                                                      builder: (context, duration, child) {
+                                                                        return Column(
+                                                                          mainAxisAlignment: MainAxisAlignment.center,
+                                                                          children: [
+                                                                            buildTime(duration),
+                                                                          ],
+                                                                        );
+                                                                      },
+                                                                    ),
+                                                                    SizedBox(height: 12.h),
+                                                                  ],
+                                                                ),
+                                                                // CustomButton(
+                                                                //   text: "View Details".needTranslation,
+                                                                //   onPressed: () async {
+                                                                //     Navigator.of(context).push(CustomPageRoute(page: ImmediateLiveCarePendingRequestPage()));
+                                                                //   },
+                                                                //   backgroundColor: Color(0xffFEE9EA),
+                                                                //   borderColor: Color(0xffFEE9EA),
+                                                                //   textColor: Color(0xffED1C2B),
+                                                                //   fontSize: 14.f,
+                                                                //   fontWeight: FontWeight.w500,
+                                                                //   borderRadius: 12.r,
+                                                                //   padding: EdgeInsets.fromLTRB(10.h, 0, 10.h, 0),
+                                                                //   height: 40.h,
+                                                                // ),
+                                                              ],
+                                                            ),
+                                                          ),
+                                                        ).paddingSymmetrical(0.h, 0.h).onPress(() {
+                                                          Navigator.of(context).push(CustomPageRoute(page: ImmediateLiveCarePendingRequestPage()));
+                                                        }),
+                                                        SizedBox(height: 12.h),
+                                                      ],
+                                                    )
+                                                  : Container(
+                                                      decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
+                                                        color: AppColors.whiteColor,
+                                                        borderRadius: 24.r,
+                                                        hasShadow: true,
+                                                      ),
+                                                      child: AppointmentCard(
+                                                        patientAppointmentHistoryResponseModel:
+                                                            myAppointmentsVM.patientAppointmentsHistoryList[immediateLiveCareViewModel.patientHasPendingLiveCareRequest ? --index : index],
+                                                        myAppointmentsViewModel: myAppointmentsViewModel,
+                                                        bookAppointmentsViewModel: bookAppointmentsViewModel,
+                                                        isLoading: false,
+                                                        isFromHomePage: true,
+                                                      ),
+                                                    );
                                             },
                                           )
                                     : Container(
@@ -304,64 +393,6 @@ class _LandingPageState extends State {
                                       ).paddingSymmetrical(24.h, 0.h);
                           },
                         ),
-                        // Consumer for LiveCare pending request
-                        Consumer(
-                          builder: (context, immediateLiveCareVM, child) {
-                            return immediateLiveCareVM.patientHasPendingLiveCareRequest
-                                ? Column(
-                                    children: [
-                                      SizedBox(height: 12.h),
-                                      Container(
-                                        decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
-                                          color: AppColors.whiteColor,
-                                          borderRadius: 20.r,
-                                          hasShadow: true,
-                                          side: BorderSide(color: AppColors.ratingColorYellow, width: 3.h),
-                                        ),
-                                        width: double.infinity,
-                                        child: Padding(
-                                          padding: EdgeInsets.all(16.h),
-                                          child: Column(
-                                            crossAxisAlignment: CrossAxisAlignment.start,
-                                            children: [
-                                              Row(
-                                                mainAxisAlignment: MainAxisAlignment.spaceBetween,
-                                                children: [
-                                                  AppCustomChipWidget(
-                                                    labelText: immediateLiveCareViewModel.patientLiveCareHistoryList[0].stringCallStatus,
-                                                    backgroundColor: AppColors.warningColorYellow.withValues(alpha: 0.20),
-                                                    textColor: AppColors.alertColor,
-                                                  ),
-                                                  Utils.buildSvgWithAssets(icon: AppAssets.waiting_icon, width: 24.h, height: 24.h),
-                                                  // Lottie.asset(AppAnimations.pending_loading_animation, repeat: true, reverse: false, frameRate: FrameRate(60), width: 40.h, height: 40.h, fit: BoxFit.contain),
-                                                ],
-                                              ),
-                                              SizedBox(height: 8.h),
-                                              Row(
-                                                mainAxisAlignment: MainAxisAlignment.spaceBetween,
-                                                children: [
-                                                  "You have a pending LiveCare request".needTranslation.toText12(isBold: true),
-                                                  Utils.buildSvgWithAssets(
-                                                    icon: AppAssets.forward_arrow_icon_small,
-                                                    iconColor: AppColors.blackColor,
-                                                    width: 20.h,
-                                                    height: 15.h,
-                                                    fit: BoxFit.contain,
-                                                  ),
-                                                ],
-                                              ),
-                                            ],
-                                          ),
-                                        ),
-                                      ).paddingSymmetrical(24.h, 0.h).onPress(() {
-                                        Navigator.of(context).push(CustomPageRoute(page: ImmediateLiveCarePendingRequestPage()));
-                                      }),
-                                      SizedBox(height: 12.h),
-                                    ],
-                                  )
-                                : SizedBox(height: 12.h);
-                          },
-                        ),
 
                         // Consumer for ER Online Check-In pending request
                         Consumer(
@@ -421,6 +452,7 @@ class _LandingPageState extends State {
                                 : SizedBox(height: 12.h);
                           },
                         ),
+
                         Row(
                           mainAxisAlignment: MainAxisAlignment.spaceBetween,
                           children: [
@@ -576,10 +608,13 @@ class _LandingPageState extends State {
             isDone: isDone,
             onPressed: () {
               // sharedPref.setBool(HAS_ENABLED_QUICK_LOGIN, true);
-              authVM.loginWithFingerPrintFace(() {
+              authVM.loginWithFingerPrintFace(() async {
                 isDone = true;
                 cacheService.saveBool(key: CacheConst.quickLoginEnabled, value: true);
                 setState(() {});
+                await Future.delayed(Duration(milliseconds: 3000)).then((value) {
+                  Navigator.pop(context);
+                });
               });
             },
           );
diff --git a/lib/presentation/insurance/insurance_approval_details_page.dart b/lib/presentation/insurance/insurance_approval_details_page.dart
index 437c870..150b15c 100644
--- a/lib/presentation/insurance/insurance_approval_details_page.dart
+++ b/lib/presentation/insurance/insurance_approval_details_page.dart
@@ -118,7 +118,7 @@ class InsuranceApprovalDetailsPage extends StatelessWidget {
             ),
             child: Padding(
               padding: EdgeInsets.all(16.h),
-              child: Column(
+              child: insuranceApprovalResponseModel.apporvalDetails != null ? Column(
                 crossAxisAlignment: CrossAxisAlignment.start,
                 children: [
                   "Approval Details".toText16(isBold: true),
@@ -128,7 +128,7 @@ class InsuranceApprovalDetailsPage extends StatelessWidget {
                     children: [
                       LocaleKeys.procedureName.tr(context: context).toText14(isBold: true),
                       Expanded(
-                        child: insuranceApprovalResponseModel.apporvalDetails!.procedureName!
+                        child: (insuranceApprovalResponseModel.apporvalDetails!.procedureName ?? "")
                             .toText12(fontWeight: FontWeight.w500, color: AppColors.greyTextColor, textAlignment: TextAlign.end, maxLine: 2),
                       ),
                     ],
@@ -150,7 +150,7 @@ class InsuranceApprovalDetailsPage extends StatelessWidget {
                     ],
                   ),
                 ],
-              ),
+              ) : SizedBox.shrink(),
             ),
           )
         ],
diff --git a/lib/presentation/insurance/widgets/insurance_history.dart b/lib/presentation/insurance/widgets/insurance_history.dart
index a5114dd..3e6ee86 100644
--- a/lib/presentation/insurance/widgets/insurance_history.dart
+++ b/lib/presentation/insurance/widgets/insurance_history.dart
@@ -68,7 +68,7 @@ class InsuranceHistory extends StatelessWidget {
                                     Row(
                                       children: [
                                         CustomButton(
-                                          text: insuranceVM.patientInsuranceCardHistoryList[index].statusDescription!,
+                                          text: insuranceVM.patientInsuranceCardHistoryList[index].statusDescription ?? "",
                                           onPressed: () {},
                                           backgroundColor: AppColors.primaryRedColor.withOpacity(0.1),
                                           borderColor: AppColors.primaryRedColor.withOpacity(0.0),
diff --git a/lib/presentation/lab/lab_orders_page.dart b/lib/presentation/lab/lab_orders_page.dart
index 4ffd979..184f713 100644
--- a/lib/presentation/lab/lab_orders_page.dart
+++ b/lib/presentation/lab/lab_orders_page.dart
@@ -1 +1 @@
-import 'dart:async';

import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_staggered_animations/flutter_staggered_animations.dart';
import 'package:hmg_patient_app_new/core/app_state.dart';
import 'package:hmg_patient_app_new/core/dependencies.dart';
import 'package:hmg_patient_app_new/core/enums.dart';
import 'package:hmg_patient_app_new/core/utils/size_utils.dart';
import 'package:hmg_patient_app_new/core/utils/utils.dart';
import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
import 'package:hmg_patient_app_new/features/lab/models/resp_models/patient_lab_orders_response_model.dart';
import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
import 'package:hmg_patient_app_new/features/lab/lab_view_model.dart';
import 'package:hmg_patient_app_new/presentation/lab/lab_order_by_test.dart';
import 'package:hmg_patient_app_new/presentation/lab/lab_result_item_view.dart';
import 'package:hmg_patient_app_new/presentation/lab/lab_result_via_clinic/LabResultByClinic.dart';
import 'package:hmg_patient_app_new/presentation/lab/search_lab_report.dart';
import 'package:hmg_patient_app_new/theme/colors.dart';
import 'package:hmg_patient_app_new/widgets/chip/custom_chip_widget.dart';
import 'package:hmg_patient_app_new/widgets/date_range_selector/viewmodel/date_range_view_model.dart';
import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart';
import 'package:hmg_patient_app_new/widgets/transitions/fade_page.dart';
import 'package:provider/provider.dart';
import 'package:hmg_patient_app_new/widgets/custom_tab_bar.dart';
import '../../widgets/appbar/collapsing_list_view.dart';

class LabOrdersPage extends StatefulWidget {
  const LabOrdersPage({super.key});

  @override
  State createState() => _LabOrdersPageState();
}

class _LabOrdersPageState extends State {
  late LabViewModel labProvider;
  late DateRangeSelectorRangeViewModel rangeViewModel;
  late AppState _appState;
  List?> labSuggestions = [];
  int? expandedIndex;
  String? selectedFilterText = '';
  int activeIndex = 0;

  @override
  void initState() {
    scheduleMicrotask(() {
      labProvider.initLabProvider();
    });
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    labProvider = Provider.of(context, listen: false);
    rangeViewModel = Provider.of(context);
    _appState = getIt();

    return Scaffold(
        backgroundColor: AppColors.bgScaffoldColor,
        body: CollapsingListView(
          title: LocaleKeys.labResults.tr(),
          search: () async {
            final lavVM = Provider.of(context, listen: false);
            if (lavVM.isLabOrdersLoading) {
              return;
            } else {
              String? value = await Navigator.of(context).push(
                CustomPageRoute(
                  page: SearchLabResultsContent(labSuggestionsList: lavVM.labSuggestions),
                  fullScreenDialog: true,
                  direction: AxisDirection.down,
                ),
              );
              if (value != null) {
                selectedFilterText = value;
                lavVM.filterLabReports(value);
              }
            }
          },
          child: SingleChildScrollView(
            padding: EdgeInsets.all(24.h),
            physics: NeverScrollableScrollPhysics(),
            child: Consumer(
              builder: (context, model, child) {
                return Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: [
                    CustomTabBar(
                      activeTextColor: Color(0xffED1C2B),
                      activeBackgroundColor: Color(0xffED1C2B).withValues(alpha: .1),
                      tabs: [
                        CustomTabBarModel(null, "By Visit".needTranslation),
                        CustomTabBarModel(null, "By Test".needTranslation),
                        // CustomTabBarModel(null, "Completed".needTranslation),
                      ],
                      onTabChange: (index) {
                        activeIndex = index;
                        setState(() {});
                      },
                    ),
                    SizedBox(height: 8.h),
                    selectedFilterText!.isNotEmpty
                        ? CustomChipWidget(
                            chipText: selectedFilterText!,
                            chipType: ChipTypeEnum.alert,
                            isSelected: true,
                          )
                        : SizedBox(),
                    activeIndex == 0
                        ? ListView.builder(
                            shrinkWrap: true,
                            physics: NeverScrollableScrollPhysics(),
                            padding: EdgeInsets.zero,
                            itemCount: model.isLabOrdersLoading
                                ? 5
                                : model.patientLabOrders.isNotEmpty
                                    ? model.patientLabOrders.length
                                    : 1,
                            itemBuilder: (context, index) {
                              final isExpanded = expandedIndex == index;
                              return model.isLabOrdersLoading
                                  ? LabResultItemView(
                                      onTap: () {},
                                      labOrder: null,
                                      index: index,
                                      isLoading: true,
                                    )
                                  : model.patientLabOrders.isNotEmpty
                                      ? AnimationConfiguration.staggeredList(
                                          position: index,
                                          duration: const Duration(milliseconds: 500),
                                          child: SlideAnimation(
                                            verticalOffset: 100.0,
                                            child: FadeInAnimation(
                                                child: LabResultItemView(
                                                    onTap: () {
                                                      model.currentlySelectedPatientOrder =
                                                          model.patientLabOrders[
                                                              index];
                                                    labProvider.getPatientLabResultByHospital(model.patientLabOrders[
                                                                    index]);
                                                        labProvider
                                                            .getPatientSpecialResult(
                                                                model.patientLabOrders[
                                                                    index]);
                                                      Navigator.push(
                                                          context,
                                                          CustomPageRoute(
                                                          page: LabResultByClinic(labOrder: model.patientLabOrders[index]),
                                                        ));
                                                    },
                                                    labOrder: model.patientLabOrders[index],
                                                    index: index,
                                                  isExpanded: isExpanded),
                                            ),
                                          ),
                                        )
                                      : Utils.getNoDataWidget(context, noDataText: "You don't have any lab results yet.".needTranslation);
                            },
                          )
                        : ListView.builder(
                            shrinkWrap: true,
                            physics: NeverScrollableScrollPhysics(),
                            padding: EdgeInsets.zero,
                            itemCount: model.isLabOrdersLoading
                                ? 5
                                : model.uniqueTests.toList().isNotEmpty
                                    ? model.uniqueTests.toList().length
                                    : 1,
                            itemBuilder: (context, index) {
                              final isExpanded = expandedIndex == index;
                              return model.isLabOrdersLoading
                                  ? LabResultItemView(
                                      onTap: () {},
                                      labOrder: null,
                                      index: index,
                                      isLoading: true,
                                    )
                                  : model.uniqueTests.toList().isNotEmpty
                                      ? AnimationConfiguration.staggeredList(
                                          position: index,
                                          duration: const Duration(milliseconds: 500),
                                          child: SlideAnimation(
                                            verticalOffset: 100.0,
                                            child: FadeInAnimation(
                                                child: LabOrderByTest(
                                                    appState: _appState,
                                                    onTap: () {
                                                      if (model.uniqueTests.toList()[index].model != null) {
                                                        rangeViewModel.flush();
                                                        model.getPatientLabResult(model.uniqueTests.toList()[index].model!, model.uniqueTests.toList()[index].description!,
                                                            (_appState.isArabic() ? model.uniqueTests.toList()[index].testDescriptionAr! : model.uniqueTests.toList()[index].testDescriptionEn!));
                                                      }
                                                    },
                                                    tests: model.uniqueTests.toList()[index],
                                                    index: index,
                                                isExpanded: isExpanded)),
                                      ),
                                        )
                                      : Utils.getNoDataWidget(context, noDataText: "You don't have any lab results yet.".needTranslation);
                            },
                          )
                  ],
                );
              },
            ),
          ),
        ));
  }

  Color getLabOrderStatusColor(num status) {
    switch (status) {
      case 44:
        return AppColors.warningColorYellow;
      case 45:
        return AppColors.warningColorYellow;
      case 16:
        return AppColors.successColor;
      case 17:
        return AppColors.successColor;
      default:
        return AppColors.greyColor;
    }
  }

  String getLabOrderStatusText(num status) {
    switch (status) {
      case 44:
        return LocaleKeys.resultsPending.tr(context: context);
      case 45:
        return LocaleKeys.resultsPending.tr(context: context);
      case 16:
        return LocaleKeys.resultsAvailable.tr(context: context);
      case 17:
        return LocaleKeys.resultsAvailable.tr(context: context);
      default:
        return "";
    }
  }

  getLabSuggestions(LabViewModel model) {
    if (model.patientLabOrders.isEmpty) {
      return [];
    }
    return model.patientLabOrders.map((m) => m.testDetails).toList();
  }
}
\ No newline at end of file
+import 'dart:async';

import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_staggered_animations/flutter_staggered_animations.dart';
import 'package:hmg_patient_app_new/core/app_state.dart';
import 'package:hmg_patient_app_new/core/dependencies.dart';
import 'package:hmg_patient_app_new/core/enums.dart';
import 'package:hmg_patient_app_new/core/utils/size_utils.dart';
import 'package:hmg_patient_app_new/core/utils/utils.dart';
import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
import 'package:hmg_patient_app_new/features/lab/models/resp_models/patient_lab_orders_response_model.dart';
import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
import 'package:hmg_patient_app_new/features/lab/lab_view_model.dart';
import 'package:hmg_patient_app_new/presentation/lab/lab_order_by_test.dart';
import 'package:hmg_patient_app_new/presentation/lab/lab_result_item_view.dart';
import 'package:hmg_patient_app_new/presentation/lab/lab_result_via_clinic/LabResultByClinic.dart';
import 'package:hmg_patient_app_new/presentation/lab/search_lab_report.dart';
import 'package:hmg_patient_app_new/theme/colors.dart';
import 'package:hmg_patient_app_new/widgets/chip/custom_chip_widget.dart';
import 'package:hmg_patient_app_new/widgets/date_range_selector/viewmodel/date_range_view_model.dart';
import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart';
import 'package:hmg_patient_app_new/widgets/transitions/fade_page.dart';
import 'package:provider/provider.dart';
import 'package:hmg_patient_app_new/widgets/custom_tab_bar.dart';
import '../../widgets/appbar/collapsing_list_view.dart';

class LabOrdersPage extends StatefulWidget {
  const LabOrdersPage({super.key});

  @override
  State createState() => _LabOrdersPageState();
}

class _LabOrdersPageState extends State {
  late LabViewModel labProvider;
  late DateRangeSelectorRangeViewModel rangeViewModel;
  late AppState _appState;
  List?> labSuggestions = [];
  int? expandedIndex;
  String? selectedFilterText = '';
  int activeIndex = 0;

  @override
  void initState() {
    scheduleMicrotask(() {
      // labProvider.initLabProvider();
    });
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    labProvider = Provider.of(context, listen: false);
    rangeViewModel = Provider.of(context);
    _appState = getIt();

    return Scaffold(
        backgroundColor: AppColors.bgScaffoldColor,
        body: CollapsingListView(
          title: LocaleKeys.labResults.tr(),
          search: () async {
            final lavVM = Provider.of(context, listen: false);
            if (lavVM.isLabOrdersLoading) {
              return;
            } else {
              String? value = await Navigator.of(context).push(
                CustomPageRoute(
                  page: SearchLabResultsContent(labSuggestionsList: lavVM.labSuggestions),
                  fullScreenDialog: true,
                  direction: AxisDirection.down,
                ),
              );
              if (value != null) {
                selectedFilterText = value;
                lavVM.filterLabReports(value);
              }
            }
          },
          child: SingleChildScrollView(
            padding: EdgeInsets.all(24.h),
            physics: NeverScrollableScrollPhysics(),
            child: Consumer(
              builder: (context, model, child) {
                return Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: [
                    CustomTabBar(
                      activeTextColor: Color(0xffED1C2B),
                      activeBackgroundColor: Color(0xffED1C2B).withValues(alpha: .1),
                      tabs: [
                        CustomTabBarModel(null, "By Visit".needTranslation),
                        CustomTabBarModel(null, "By Test".needTranslation),
                        // CustomTabBarModel(null, "Completed".needTranslation),
                      ],
                      onTabChange: (index) {
                        activeIndex = index;
                        setState(() {});
                      },
                    ),
                    SizedBox(height: 8.h),
                    selectedFilterText!.isNotEmpty
                        ? CustomChipWidget(
                            chipText: selectedFilterText!,
                            chipType: ChipTypeEnum.alert,
                            isSelected: true,
                          )
                        : SizedBox(),
                    activeIndex == 0
                        ? ListView.builder(
                            shrinkWrap: true,
                            physics: NeverScrollableScrollPhysics(),
                            padding: EdgeInsets.zero,
                            itemCount: model.isLabOrdersLoading
                                ? 5
                                : model.patientLabOrders.isNotEmpty
                                    ? model.patientLabOrders.length
                                    : 1,
                            itemBuilder: (context, index) {
                              final isExpanded = expandedIndex == index;
                              return model.isLabOrdersLoading
                                  ? LabResultItemView(
                                      onTap: () {},
                                      labOrder: null,
                                      index: index,
                                      isLoading: true,
                                    )
                                  : model.patientLabOrders.isNotEmpty
                                      ? AnimationConfiguration.staggeredList(
                                          position: index,
                                          duration: const Duration(milliseconds: 500),
                                          child: SlideAnimation(
                                            verticalOffset: 100.0,
                                            child: FadeInAnimation(
                                                child: LabResultItemView(
                                                    onTap: () {
                                                      model.currentlySelectedPatientOrder =
                                                          model.patientLabOrders[
                                                              index];
                                                    labProvider.getPatientLabResultByHospital(model.patientLabOrders[
                                                                    index]);
                                                        labProvider
                                                            .getPatientSpecialResult(
                                                                model.patientLabOrders[
                                                                    index]);
                                                      Navigator.push(
                                                          context,
                                                          CustomPageRoute(
                                                          page: LabResultByClinic(labOrder: model.patientLabOrders[index]),
                                                        ));
                                                    },
                                                    labOrder: model.patientLabOrders[index],
                                                    index: index,
                                                  isExpanded: isExpanded),
                                            ),
                                          ),
                                        )
                                      : Utils.getNoDataWidget(context, noDataText: "You don't have any lab results yet.".needTranslation);
                            },
                          )
                        : ListView.builder(
                            shrinkWrap: true,
                            physics: NeverScrollableScrollPhysics(),
                            padding: EdgeInsets.zero,
                            itemCount: model.isLabOrdersLoading
                                ? 5
                                : model.uniqueTests.toList().isNotEmpty
                                    ? model.uniqueTests.toList().length
                                    : 1,
                            itemBuilder: (context, index) {
                              final isExpanded = expandedIndex == index;
                              return model.isLabOrdersLoading
                                  ? LabResultItemView(
                                      onTap: () {},
                                      labOrder: null,
                                      index: index,
                                      isLoading: true,
                                    )
                                  : model.uniqueTests.toList().isNotEmpty
                                      ? AnimationConfiguration.staggeredList(
                                          position: index,
                                          duration: const Duration(milliseconds: 500),
                                          child: SlideAnimation(
                                            verticalOffset: 100.0,
                                            child: FadeInAnimation(
                                                child: LabOrderByTest(
                                                    appState: _appState,
                                                    onTap: () {
                                                      if (model.uniqueTests.toList()[index].model != null) {
                                                        rangeViewModel.flush();
                                                        model.getPatientLabResult(model.uniqueTests.toList()[index].model!, model.uniqueTests.toList()[index].description!,
                                                            (_appState.isArabic() ? model.uniqueTests.toList()[index].testDescriptionAr! : model.uniqueTests.toList()[index].testDescriptionEn!));
                                                      }
                                                    },
                                                    tests: model.uniqueTests.toList()[index],
                                                    index: index,
                                                isExpanded: isExpanded)),
                                      ),
                                        )
                                      : Utils.getNoDataWidget(context, noDataText: "You don't have any lab results yet.".needTranslation);
                            },
                          )
                  ],
                );
              },
            ),
          ),
        ));
  }

  Color getLabOrderStatusColor(num status) {
    switch (status) {
      case 44:
        return AppColors.warningColorYellow;
      case 45:
        return AppColors.warningColorYellow;
      case 16:
        return AppColors.successColor;
      case 17:
        return AppColors.successColor;
      default:
        return AppColors.greyColor;
    }
  }

  String getLabOrderStatusText(num status) {
    switch (status) {
      case 44:
        return LocaleKeys.resultsPending.tr(context: context);
      case 45:
        return LocaleKeys.resultsPending.tr(context: context);
      case 16:
        return LocaleKeys.resultsAvailable.tr(context: context);
      case 17:
        return LocaleKeys.resultsAvailable.tr(context: context);
      default:
        return "";
    }
  }

  getLabSuggestions(LabViewModel model) {
    if (model.patientLabOrders.isEmpty) {
      return [];
    }
    return model.patientLabOrders.map((m) => m.testDetails).toList();
  }
}
\ No newline at end of file
diff --git a/lib/presentation/medical_file/medical_file_page.dart b/lib/presentation/medical_file/medical_file_page.dart
index 2cf584e..1652812 100644
--- a/lib/presentation/medical_file/medical_file_page.dart
+++ b/lib/presentation/medical_file/medical_file_page.dart
@@ -85,7 +85,6 @@ class _MedicalFilePageState extends State {
     appState = getIt.get();
     scheduleMicrotask(() {
       if (appState.isAuthenticated) {
-        labViewModel.initLabProvider();
         insuranceViewModel.initInsuranceProvider();
         medicalFileViewModel.setIsPatientSickLeaveListLoading(true);
         medicalFileViewModel.getPatientSickLeaveList();
@@ -458,6 +457,7 @@ class _MedicalFilePageState extends State {
                     labOrderTests: labViewModel.isLabOrdersLoading ? [] : labViewModel.labOrderTests,
                     isLoading: labViewModel.isLabOrdersLoading,
                   ).onPress(() {
+                    labViewModel.initLabProvider();
                     Navigator.of(context).push(
                       CustomPageRoute(
                         page: LabOrdersPage(),
diff --git a/lib/presentation/medical_file/widgets/lab_rad_card.dart b/lib/presentation/medical_file/widgets/lab_rad_card.dart
index 1a56baf..696b332 100644
--- a/lib/presentation/medical_file/widgets/lab_rad_card.dart
+++ b/lib/presentation/medical_file/widgets/lab_rad_card.dart
@@ -43,29 +43,29 @@ class LabRadCard extends StatelessWidget {
               Flexible(child: labelText.toText14(isBold: true).toShimmer2(isShow: false, radius: 6.r, height: 32.h)),
             ],
           ),
-          SizedBox(height: 16.h),
-          labOrderTests.isNotEmpty
-              ? ListView.separated(
-                  scrollDirection: Axis.vertical,
-                  padding: EdgeInsets.zero,
-                  physics: NeverScrollableScrollPhysics(),
-                  shrinkWrap: true,
-                  itemBuilder: (cxt, index) {
-                    return labOrderTests[index]
-                        .toText12(isBold: true, maxLine: 1)
-                        .toShimmer2(isShow: false, radius: 6.r, height: 24.h, width: 120.w)
-                        .toShimmer2(isShow: isLoading);
-                  },
-                  separatorBuilder: (cxt, index) => SizedBox(height: 8.h),
-                  itemCount: 3,
-                )
-              : "You don't have any records yet".needTranslation.toText13(
-                    color: AppColors.greyTextColor, isCenter: true),
+          // SizedBox(height: 16.h),
+          // labOrderTests.isNotEmpty
+          //     ? ListView.separated(
+          //         scrollDirection: Axis.vertical,
+          //         padding: EdgeInsets.zero,
+          //         physics: NeverScrollableScrollPhysics(),
+          //         shrinkWrap: true,
+          //         itemBuilder: (cxt, index) {
+          //           return labOrderTests[index]
+          //               .toText12(isBold: true, maxLine: 1)
+          //               .toShimmer2(isShow: false, radius: 6.r, height: 24.h, width: 120.w)
+          //               .toShimmer2(isShow: isLoading);
+          //         },
+          //         separatorBuilder: (cxt, index) => SizedBox(height: 8.h),
+          //         itemCount: 3,
+          //       )
+          //     : "You don't have any records yet".needTranslation.toText13(
+          //           color: AppColors.greyTextColor, isCenter: true),
           SizedBox(height: 16.h),
           Row(
             mainAxisAlignment: MainAxisAlignment.spaceBetween,
             children: [
-              SizedBox.shrink(),
+              "View All".toText12(isBold: true),
               Transform.flip(
                 flipX: appState.isArabic(),
                 child: Utils.buildSvgWithAssets(
diff --git a/lib/widgets/countdown_timer.dart b/lib/widgets/countdown_timer.dart
new file mode 100644
index 0000000..165a833
--- /dev/null
+++ b/lib/widgets/countdown_timer.dart
@@ -0,0 +1,111 @@
+import 'package:flutter/material.dart';
+import 'package:hmg_patient_app_new/core/utils/size_utils.dart';
+import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
+
+Widget buildTime(Duration duration, {bool isHomePage = false}) {
+  String twoDigits(int n) => n.toString().padLeft(2, '0');
+  final hours = twoDigits(duration.inHours);
+  final minutes = twoDigits(duration.inMinutes.remainder(60));
+  final seconds = twoDigits(duration.inSeconds.remainder(60));
+
+  return Row(
+    mainAxisAlignment: MainAxisAlignment.center,
+    children: [
+      buildTimeColumn(hours, "Hours".needTranslation),
+      buildTimeColumn(minutes, "Mins".needTranslation),
+      buildTimeColumn(seconds, "Secs".needTranslation, isLast: true),
+    ],
+  );
+}
+
+Widget buildTimeColumn(String time, String label, {bool isLast = false}) {
+  return Column(
+    mainAxisAlignment: MainAxisAlignment.center,
+    children: [
+      Row(
+        children: [
+          buildDigit(time[0]),
+          buildDigit(time[1]),
+          if (!isLast) buildTimeSeparator(),
+        ],
+      ),
+      buildLabel(label),
+    ],
+  );
+}
+
+Widget buildDigit(String digit) {
+  return Container(
+    padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 4),
+    // margin: const EdgeInsets.symmetric(horizontal: 2),
+    decoration: BoxDecoration(
+      color: Colors.white,
+      borderRadius: BorderRadius.circular(8),
+    ),
+    child: ClipRect(
+      child: AnimatedSwitcher(
+        duration: const Duration(milliseconds: 600),
+        switchInCurve: Curves.easeOutExpo,
+        switchOutCurve: Curves.easeInExpo,
+        transitionBuilder: (Widget child, Animation animation) {
+          return Stack(
+            children: [
+              SlideTransition(
+                position: Tween(
+                  begin: const Offset(0, -1),
+                  end: const Offset(0, 1),
+                ).animate(CurvedAnimation(
+                  parent: animation,
+                  curve: Curves.easeOutCubic,
+                )),
+                child: FadeTransition(
+                  opacity: animation,
+                  child: child,
+                ),
+              ),
+              SlideTransition(
+                position: Tween(
+                  begin: const Offset(0, -1),
+                  end: const Offset(0, 0),
+                ).animate(CurvedAnimation(
+                  parent: animation,
+                  curve: Curves.bounceIn,
+                )),
+                child: FadeTransition(
+                  opacity: animation,
+                  child: child,
+                ),
+              ),
+            ],
+          );
+        },
+        child: Text(
+          digit,
+          key: ValueKey(digit),
+          style: TextStyle(
+            fontWeight: FontWeight.bold,
+            color: Colors.black,
+            fontSize: 14.f,
+          ),
+        ),
+      ),
+    ),
+  );
+}
+
+Widget buildLabel(String label) {
+  return label.toText12(isBold: true);
+}
+
+Widget buildTimeSeparator() {
+  return const Padding(
+    padding: EdgeInsets.symmetric(horizontal: 2.0),
+    child: Text(
+      ":",
+      style: TextStyle(
+        color: Colors.black,
+        fontSize: 20,
+      ),
+    ),
+  );
+}
-- 
2.30.2


From e0e41d19007d8677949b3c09851424a1518ac504 Mon Sep 17 00:00:00 2001
From: tahaalam 
Date: Thu, 27 Nov 2025 16:13:30 +0300
Subject: [PATCH 15/39] calender reminder added on appointment and pescription

---
 lib/core/utils/calender_utils_new.dart        | 130 +++++++++++++++---
 .../prescriptions_view_model.dart             |  15 ++
 .../appointment_details_page.dart             |   8 +-
 .../prescriptions/prescription_item_view.dart |  36 +++--
 4 files changed, 157 insertions(+), 32 deletions(-)

diff --git a/lib/core/utils/calender_utils_new.dart b/lib/core/utils/calender_utils_new.dart
index b4c4bd7..28084a9 100644
--- a/lib/core/utils/calender_utils_new.dart
+++ b/lib/core/utils/calender_utils_new.dart
@@ -1,6 +1,7 @@
 import 'dart:async';
 
 import 'package:device_calendar_plus/device_calendar_plus.dart';
+import 'package:hmg_patient_app_new/core/utils/date_util.dart';
 import 'package:jiffy/jiffy.dart' show Jiffy;
 
 class CalenderUtilsNew {
@@ -25,34 +26,86 @@ class CalenderUtilsNew {
   }
 
   FutureOr createOrUpdateEvent({required String title, required String description, required String location, DateTime? scheduleDateTime, String? eventId, int? reminderMinutes}) async {
-   print("the reminder minutes are $reminderMinutes");
     if (writableCalender.isEmpty) {
       await getCalenders();
     }
     var writableCalendars = writableCalender.first;
-
-    print("writableCalendars-name:  " + writableCalendars.name);
-    print("writableCalendars-Id:  " + writableCalendars.id);
-    print("writableCalendarsToString:  " + writableCalendars.toString());
-    print("writableCalendarsToString:  " + writableCalendars!.id!);
-
+    String eventResult = "";
     CalendarPermissionStatus result = await DeviceCalendar.instance.hasPermissions();
     if(result != CalendarPermissionStatus.granted)  await DeviceCalendar.instance.requestPermissions();
     print(result);
-    String eventResult = await DeviceCalendar.instance.createEvent(
-      calendarId: writableCalendars!.id,
-      title: title,
-      description: description,
-      startDate: scheduleDateTime!,
-      endDate: scheduleDateTime!.add(Duration(minutes: 30)),
-      reminderMinutes: reminderMinutes
-    );
-
-    print("the event Result is ${eventResult}");
-    return eventResult.isNotEmpty;
+
+    // String eventId = await getEventIdIfEventExist(title!.split("#").last);
+    // if (eventId.isEmpty) {
+      eventResult = await DeviceCalendar.instance.createEvent(
+          calendarId: writableCalendars!.id,
+          title: title,
+          description: description,
+          startDate: scheduleDateTime!,
+          endDate: scheduleDateTime!.add(Duration(minutes: 30)),
+          reminderMinutes: reminderMinutes);
+      return eventResult.isNotEmpty;
+    // }
+
+    // await DeviceCalendar.instance.updateEvent(
+    //   eventId: eventId,
+    //   title: title,
+    //   description: description,
+    //   startDate: scheduleDateTime!,
+    //   endDate: scheduleDateTime!.add(Duration(minutes: 30)),
+    // );
+
+    // return eventId.isNotEmpty;
   }
 
+  FutureOr createMultipleEvents(
+      {required int reminderMinutes,
+      int? frequencyNumber,
+      required int days,
+      required String orderDate,
+      required String itemDescriptionN,
+      required String route,
+      Function(String)? onFailure,
+      String? prescriptionNumber}) async {
+    DateTime currentDay = DateTime.now();
+    DateTime actualDate = DateTime(DateTime.now().year, DateTime.now().month, DateTime.now().day, 8, 0);
+    print("the frequency is $frequencyNumber");
+    frequencyNumber ??= 2; //Some time frequency number is null so by default will be 2
+    int interval = calculateIntervalAsPerFrequency(frequencyNumber);
+    // int remainingDays = days - (Jiffy.parseFromDateTime(DateTime.now()).diff(Jiffy.parseFromDateTime(DateUtil.convertStringToDate(orderDate)), unit: Unit.day) as int);
+    Duration difference = (actualDate.difference(DateUtil.convertStringToDate(orderDate)));
+    int remainingDays = 5;
+    // if (remainingDays.isNegative) {
+    //   onFailure?.call("Prescription date has been already passed you can not add a reminder for this prescription.");
+    //   return false;
+    // }
+
+    bool statusOfOperation = false;
+
+    for (int i = 0; i < remainingDays; i++) {
+      //event for number of days.
+      for (int j = 0; j < frequencyNumber; j++) {
+        statusOfOperation = await createOrUpdateEvent(
+          title: "$itemDescriptionN} Medication about to due for prescription , #$prescriptionNumber",
+          description: "$itemDescriptionN $frequencyNumber $route ",
+          scheduleDateTime: actualDate,
+          location: '', //event id with  varitions
+          reminderMinutes: reminderMinutes
+        );
+        if (!statusOfOperation) return false;
+
+        actualDate = actualDate.add(Duration(hours: interval));
+        // if (actualDate.difference(currentDay).inDays == 1) break;
+      }
+      // actualDate = actualDate.add(Duration(days: 1));
+    }
 
+    return statusOfOperation;
+  }
+
+  int calculateIntervalAsPerFrequency(int frequencyNumber) {
+    return 24 ~/ frequencyNumber;
+  }
 
   FutureOr> getEvents() async {
     var availableCalender = writableCalender.first;
@@ -64,24 +117,41 @@ class CalenderUtilsNew {
 
 
   FutureOr checkIfEventExist(String admissionId) async {
-    if(writableCalender.isEmpty)return false;
+    if (writableCalender.isEmpty) {
+      await getCalenders();
+    }
     List events = await getEvents();
    if(events.isEmpty) return false;
     for(var event in events){
       List title = event.title!.split("#");
-      print("the splitted admission id is ${title}");
+
       if(title.contains(admissionId)) return true;
     }
    return false;
   }
 
+  FutureOr getEventIdIfEventExist(String admissionId) async {
+    if (writableCalender.isEmpty) {
+      await getCalenders();
+    }
+    List events = await getEvents();
+    if (events.isEmpty) return "";
+    for (var event in events) {
+      List title = event.title!.split("#");
+      if (title.contains(admissionId)) return event.eventId;
+    }
+    return "";
+  }
+
   FutureOr checkAndRemove({required String id}) async {
-    if(writableCalender.isEmpty)return false;
+    if (writableCalender.isEmpty) {
+      await getCalenders();
+    }
     List events = await getEvents();
     if(events.isEmpty) return false;
     for(var event in events){
       List title = event.title!.split("#");
-      print("the splitted admission id is ${title}");
+
       if(title.contains(id)) {
         calender.deleteEvent(eventId: event.eventId);
         return true;
@@ -90,5 +160,21 @@ class CalenderUtilsNew {
     return false;
   }
 
+  FutureOr checkAndRemoveMultipleItems({required String id}) async {
+    if (writableCalender.isEmpty) {
+      await getCalenders();
+    }
+    List events = await getEvents();
+    if(events.isEmpty) return false;
+    bool statusOfOperation = false;
+    for(var event in events){
+      List title = event.title.split("#");
 
+      if(title.contains(id)) {
+        calender.deleteEvent(eventId: event.eventId);
+        statusOfOperation = true;
+      }
+    }
+    return statusOfOperation;
+  }
 }
diff --git a/lib/features/prescriptions/prescriptions_view_model.dart b/lib/features/prescriptions/prescriptions_view_model.dart
index aac25c1..0e6bce7 100644
--- a/lib/features/prescriptions/prescriptions_view_model.dart
+++ b/lib/features/prescriptions/prescriptions_view_model.dart
@@ -1,7 +1,10 @@
 import 'package:flutter/material.dart';
+import 'package:hmg_patient_app_new/core/dependencies.dart';
+import 'package:hmg_patient_app_new/core/utils/calender_utils_new.dart';
 import 'package:hmg_patient_app_new/features/prescriptions/models/resp_models/patient_prescriptions_response_model.dart';
 import 'package:hmg_patient_app_new/features/prescriptions/models/resp_models/prescription_detail_response_model.dart';
 import 'package:hmg_patient_app_new/features/prescriptions/prescriptions_repo.dart';
+import 'package:hmg_patient_app_new/services/dialog_service.dart';
 import 'package:hmg_patient_app_new/services/error_handler_service.dart';
 
 class PrescriptionsViewModel extends ChangeNotifier {
@@ -40,6 +43,11 @@ class PrescriptionsViewModel extends ChangeNotifier {
     notifyListeners();
   }
 
+
+  checkIfReminderExistForPrescription(int index) async {
+    prescriptionDetailsList[index].hasReminder = await CalenderUtilsNew.instance.checkIfEventExist(prescriptionDetailsList[index].itemID?.toString() ?? "");
+  }
+
   setPrescriptionsDetailsLoading() {
     isPrescriptionsDetailsLoading = true;
     prescriptionDetailsList.clear();
@@ -121,6 +129,9 @@ class PrescriptionsViewModel extends ChangeNotifier {
           // dialogService.showErrorDialog(message: apiResponse.errorMessage!, onOkPressed: () {});
         } else if (apiResponse.messageStatus == 1) {
           prescriptionDetailsList = apiResponse.data!;
+          prescriptionDetailsList.forEach((element) async {
+            await checkIfReminderExistForPrescription(prescriptionDetailsList.indexOf(element));
+          });
           isPrescriptionsDetailsLoading = false;
           notifyListeners();
           if (onSuccess != null) {
@@ -173,4 +184,8 @@ class PrescriptionsViewModel extends ChangeNotifier {
       },
     );
   }
+
+  showError(String errorMessage) {
+    getIt().showErrorBottomSheet(message: errorMessage);
+  }
 }
diff --git a/lib/presentation/appointments/appointment_details_page.dart b/lib/presentation/appointments/appointment_details_page.dart
index ba110a2..58958ee 100644
--- a/lib/presentation/appointments/appointment_details_page.dart
+++ b/lib/presentation/appointments/appointment_details_page.dart
@@ -73,7 +73,9 @@ class _AppointmentDetailsPageState extends State {
       var doesExist = await calendarUtils.checkIfEventExist("${widget.patientAppointmentHistoryResponseModel.appointmentNo}");
       print("the appointment reminder exist $doesExist");
       myAppointmentsViewModel.setAppointmentReminder(doesExist, widget.patientAppointmentHistoryResponseModel);
+      setState((){
 
+      });
 
     });
     super.initState();
@@ -142,6 +144,10 @@ class _AppointmentDetailsPageState extends State {
                       },
                       onCancelTap: () async {
                         myAppointmentsViewModel.setIsAppointmentDataToBeLoaded(true);
+                        var isEventAddedOrRemoved =  await CalenderUtilsNew.instance.checkAndRemove( id:"${widget.patientAppointmentHistoryResponseModel.appointmentNo}", );
+                        setState(() {
+                          myAppointmentsViewModel.setAppointmentReminder(isEventAddedOrRemoved, widget.patientAppointmentHistoryResponseModel);
+                        });
                         LoaderBottomSheet.showLoader(loadingText: "Cancelling Appointment, Please Wait...".needTranslation);
                         await myAppointmentsViewModel.cancelAppointment(
                             patientAppointmentHistoryResponseModel: widget.patientAppointmentHistoryResponseModel,
@@ -323,7 +329,7 @@ class _AppointmentDetailsPageState extends State {
                                         }else {
                                           isEventAddedOrRemoved =  await calender.checkAndRemove( id:"${widget.patientAppointmentHistoryResponseModel.appointmentNo}", );
                                           setState(() {
-                                            myAppointmentsViewModel.setAppointmentReminder(isEventAddedOrRemoved, widget.patientAppointmentHistoryResponseModel);
+                                            myAppointmentsViewModel.setAppointmentReminder(!isEventAddedOrRemoved, widget.patientAppointmentHistoryResponseModel);
                                           });
                                         }
 
diff --git a/lib/presentation/prescriptions/prescription_item_view.dart b/lib/presentation/prescriptions/prescription_item_view.dart
index acf03f5..39a0b05 100644
--- a/lib/presentation/prescriptions/prescription_item_view.dart
+++ b/lib/presentation/prescriptions/prescription_item_view.dart
@@ -3,6 +3,7 @@ import 'package:flutter/material.dart';
 import 'package:hmg_patient_app_new/core/app_assets.dart';
 import 'package:hmg_patient_app_new/core/app_export.dart';
 import 'package:hmg_patient_app_new/core/utils/calendar_utils.dart';
+import 'package:hmg_patient_app_new/core/utils/calender_utils_new.dart';
 import 'package:hmg_patient_app_new/core/utils/utils.dart';
 import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
 import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
@@ -10,6 +11,7 @@ import 'package:hmg_patient_app_new/features/prescriptions/prescriptions_view_mo
 import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
 import 'package:hmg_patient_app_new/theme/colors.dart';
 import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart';
+import 'package:hmg_patient_app_new/widgets/loader/bottomsheet_loader.dart';
 
 class PrescriptionItemView extends StatelessWidget {
   int index;
@@ -154,9 +156,14 @@ class PrescriptionItemView extends StatelessWidget {
                 activeTrackColor: AppColors.successColor.withValues(alpha: .15),
                 value: isLoading ? false : prescriptionVM.prescriptionDetailsList[index].hasReminder!,
                 onChanged: (newValue) async {
+                  CalenderUtilsNew calender =  CalenderUtilsNew.instance;
+
                   if (prescriptionVM.prescriptionDetailsList[index].hasReminder ?? false) {
-                    await checkAndRemove(prescriptionVM.prescriptionDetailsList[index].hasReminder, delete: true);
-                    prescriptionVM.notify();
+                    LoaderBottomSheet.showLoader(loadingText: "Removing Reminders");
+                    bool resultValue = await calender.checkAndRemoveMultipleItems(id:prescriptionVM.prescriptionDetailsList[index].itemID.toString());
+
+                    prescriptionVM.setPrescriptionItemReminder(newValue, prescriptionVM.prescriptionDetailsList[index]);
+                   LoaderBottomSheet.hideLoader();
                     return;
                   }
 
@@ -173,18 +180,29 @@ class PrescriptionItemView extends StatelessWidget {
                     description:
                         "${prescriptionVM.prescriptionDetailsList[index].itemDescription} ${prescriptionVM.prescriptionDetailsList[index].frequency} ${prescriptionVM.prescriptionDetailsList[index].route} ",
                     onSuccess: () {
-                      prescriptionVM.setPrescriptionItemReminder(newValue, prescriptionVM.prescriptionDetailsList[index]);
+
                     },
                     isMultiAllowed: true,
-                    onMultiDateSuccess: (int selectedIndex) {
-                      setCalender(context,
-                          eventId: prescriptionVM.prescriptionDetailsList[index].itemID.toString(),
-                          selectedMinutes: selectedIndex,
+                    onMultiDateSuccess: (int selectedIndex) async{
+                      bool isEventAdded = await calender.createMultipleEvents(
+                          reminderMinutes: selectedIndex,
                           frequencyNumber: prescriptionVM.prescriptionDetailsList[index].frequencyNumber?.toInt(),
-                          days: prescriptionVM.prescriptionDetailsList[index].days!.toInt(),
+                           days: prescriptionVM.prescriptionDetailsList[index].days!.toInt(),
                           orderDate: prescriptionVM.prescriptionDetailsList[index].orderDate!,
                           itemDescriptionN: prescriptionVM.prescriptionDetailsList[index].itemDescription!,
-                          route: prescriptionVM.prescriptionDetailsList[index].route!);
+                          route: prescriptionVM.prescriptionDetailsList[index].route!,
+                        onFailure: (errorMessage)=> prescriptionVM.showError(errorMessage),
+                        prescriptionNumber: prescriptionVM.prescriptionDetailsList[index].itemID.toString(),
+                      );
+                      prescriptionVM.setPrescriptionItemReminder(isEventAdded, prescriptionVM.prescriptionDetailsList[index]);
+                      // setCalender(context,
+                      //     eventId: prescriptionVM.prescriptionDetailsList[index].itemID.toString(),
+                      //     selectedMinutes: selectedIndex,
+                      //     frequencyNumber: prescriptionVM.prescriptionDetailsList[index].frequencyNumber?.toInt(),
+                      //     days: prescriptionVM.prescriptionDetailsList[index].days!.toInt(),
+                      //     orderDate: prescriptionVM.prescriptionDetailsList[index].orderDate!,
+                      //     itemDescriptionN: prescriptionVM.prescriptionDetailsList[index].itemDescription!,
+                      //     route: prescriptionVM.prescriptionDetailsList[index].route!);
                     },
                   );
                 },
-- 
2.30.2


From e200479332a321fc0a840c34dc8e57b2962f5518 Mon Sep 17 00:00:00 2001
From: tahaalam 
Date: Sun, 30 Nov 2025 10:27:42 +0300
Subject: [PATCH 16/39] old calender util deleted

---
 lib/core/utils/calendar_utils.dart            | 316 ------------------
 .../appointment_details_page.dart             |   3 +-
 .../prescription_detail_page.dart             |   2 -
 .../prescriptions/prescription_item_view.dart |   4 +-
 lib/widgets/common_bottom_sheet.dart          |  54 +++
 5 files changed, 57 insertions(+), 322 deletions(-)
 delete mode 100644 lib/core/utils/calendar_utils.dart

diff --git a/lib/core/utils/calendar_utils.dart b/lib/core/utils/calendar_utils.dart
deleted file mode 100644
index 2068db9..0000000
--- a/lib/core/utils/calendar_utils.dart
+++ /dev/null
@@ -1,316 +0,0 @@
-import 'dart:async';
-import 'dart:collection';
-import 'dart:convert';
-import 'dart:io';
-import 'dart:ui';
-
-import 'package:device_calendar/device_calendar.dart';
-import 'package:flutter/widgets.dart';
-import 'package:hmg_patient_app_new/core/dependencies.dart';
-import 'package:hmg_patient_app_new/core/utils/date_util.dart';
-import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
-import 'package:hmg_patient_app_new/presentation/prescriptions/prescription_reminder_view.dart';
-import 'package:hmg_patient_app_new/services/dialog_service.dart';
-import 'package:hmg_patient_app_new/services/permission_service.dart';
-import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart';
-import 'package:jiffy/jiffy.dart';
-import 'package:manage_calendar_events/manage_calendar_events.dart' as ios;
-import 'package:permission_handler/permission_handler.dart';
-import 'package:timezone/data/latest.dart' as tzl;
-
-final DeviceCalendarPlugin deviceCalendarPlugin = DeviceCalendarPlugin();
-final ios.CalendarPlugin _myPlugin = ios.CalendarPlugin();
-
-class CalendarUtils {
-  static Completer? _completer;
-
-  dynamic get writableCalendars => calendars.firstWhere((c) => !c.isReadOnly!);
-  dynamic calendars;
-
-  CalendarUtils._(this.calendars);
-
-  // static Future getInstance() async {
-  //   if (_completer == null) {
-  //     _completer = Completer();
-  //     print(_completer!.isCompleted);
-  //     try {
-  //       final dynamic calendarsResult;
-  //       if (Platform.isIOS) {
-  //         calendarsResult = await _myPlugin.getCalendars();
-  //         if (!_completer!.isCompleted) {
-  //           _completer?.complete(CalendarUtils._(await calendarsResult!));
-  //         }
-  //       } else {
-  //         calendarsResult = await deviceCalendarPlugin.retrieveCalendars();
-  //         if (!_completer!.isCompleted) {
-  //           _completer?.complete(CalendarUtils._(await calendarsResult.data!));
-  //         }
-  //       }
-  //     } on Exception catch (e) {
-  //       if (!_completer!.isCompleted) {
-  //         _completer!.completeError(e);
-  //       }
-  //     }
-  //   }
-  //   return _completer!.future;
-  // }
-
-  static Future getInstance() async {
-    tzl.initializeTimeZones();
-    if (_completer != null) {
-      return _completer!.future;
-    }
-    _completer = Completer();
-    try {
-      final dynamic calendarsResult;
-      if (Platform.isIOS) {
-        calendarsResult = await _myPlugin.getCalendars();
-        _completer!.complete(CalendarUtils._(calendarsResult));
-      } else {
-        calendarsResult = await deviceCalendarPlugin.retrieveCalendars();
-        _completer!.complete(CalendarUtils._(calendarsResult.data));
-      }
-    } catch (e) {
-      _completer!.completeError(e);
-    }
-
-    return _completer!.future;
-  }
-
-  Future createOrUpdateEvents({List? scheduleList, String? title, String? description, List? scheduleDateTime, List? daysOfWeek}) async {
-    tzl.initializeTimeZones();
-    List events = [];
-    Location _currentLocation;
-    if (DateTime.now().timeZoneName == "+04")
-      _currentLocation = getLocation('Asia/Dubai');
-    else
-      _currentLocation = getLocation('Asia/Riyadh');
-
-    scheduleDateTime!.forEach((element) {
-      RecurrenceRule recurrenceRule = RecurrenceRule(
-        // RecurrenceFrequency.Daily,
-        // daysOfWeek: daysOfWeek,
-        // endDate: element,
-        until: element, frequency: Frequency.daily,
-      );
-      //added byAamir Tz Time
-      Event event = Event(writableCalendars!.id,
-          recurrenceRule: recurrenceRule,
-          start: TZDateTime.from(element, _currentLocation),
-          end: TZDateTime.from(element.add(Duration(minutes: 30)), _currentLocation),
-          title: title,
-          description: description);
-      events.add(event);
-    });
-
-    events.forEach((element) {
-      deviceCalendarPlugin.createOrUpdateEvent(element);
-    });
-  }
-
-  Future createOrUpdateEvent({required String title, required String description, required String location, DateTime? scheduleDateTime, String? eventId}) async {
-    RecurrenceRule recurrenceRule = RecurrenceRule(
-      // RecurrenceFrequency.Daily,
-      // daysOfWeek: daysOfWeek,
-      // endDate: scheduleDateTime,
-      until: scheduleDateTime, frequency: Frequency.daily,
-    );
-
-    Location _currentLocation;
-    // if (DateTime.now().timeZoneName == "+04")
-    //   _currentLocation = getLocation('Asia/Dubai');
-    // else
-    _currentLocation = getLocation('Asia/Riyadh');
-
-    TZDateTime scheduleDateTimeUTZ = TZDateTime.from(scheduleDateTime!, _currentLocation);
-
-    print("writableCalendars-name:  " + writableCalendars.name);
-    print("writableCalendars-Id:  " + writableCalendars.id);
-    print("writableCalendarsToString:  " + writableCalendars.toString());
-    print("writableCalendarsToString:  " + writableCalendars!.id!);
-    Event event = Event(
-      writableCalendars!.id,
-      start: scheduleDateTimeUTZ,
-      end: scheduleDateTimeUTZ.add(Duration(minutes: 30)),
-      title: title,
-      description: description,
-    );
-
-    ios.CalendarEvent iosCalEvent =
-        ios.CalendarEvent(location: location, startDate: scheduleDateTimeUTZ, endDate: scheduleDateTimeUTZ.add(Duration(minutes: 30)), title: title, description: description, isAllDay: false);
-
-    if (Platform.isAndroid) {
-      Result result = await deviceCalendarPlugin.hasPermissions();
-      print(result);
-      await deviceCalendarPlugin.createOrUpdateEvent(event).catchError((e) {
-        print("catchError " + e.toString());
-      }).whenComplete(() {
-        print("whenComplete Calender ID " + eventId!);
-      });
-    } else {
-      await _myPlugin.createEvent(calendarId: writableCalendars.id!, event: iosCalEvent).catchError((e) {
-        print("catchError " + e.toString());
-      }).whenComplete(() {
-        print("whenComplete Calender ID iOS " + eventId!);
-      });
-    }
-  }
-
-  deleteEvent(String _calendarId, String _eventId) async {
-    if (Platform.isIOS) {
-      await _myPlugin.deleteEvent(calendarId: _calendarId, eventId: _eventId);
-    } else {
-      await deviceCalendarPlugin.deleteEvent(_calendarId, _eventId);
-    }
-  }
-
-  Future retrieveEvents(
-    String calendarId,
-    RetrieveEventsParams retrieveEventsParams,
-  ) async {
-    if (Platform.isIOS) {
-      return await _myPlugin.getEvents(calendarId: calendarId);
-    } else {
-      return await deviceCalendarPlugin.retrieveEvents(calendarId, retrieveEventsParams);
-    }
-  }
-
-  Future createCalendar(
-    String calendarName, {
-    Color? calendarColor,
-    String? localAccountName,
-  }) async {
-    return await deviceCalendarPlugin.createCalendar(calendarName, calendarColor: calendarColor, localAccountName: localAccountName);
-  }
-}
-
-Future> requestPermissions() async {
-  var permissionResults = [Permission.calendarFullAccess].request();
-  return permissionResults;
-}
-
-showReminderBottomSheet(BuildContext context, DateTime dateTime, String doctorName, String eventId, String appoDateFormatted, String appoTimeFormatted,
-    {required Function() onSuccess, String? title, String? description, Function(int)? onMultiDateSuccess, bool isMultiAllowed = false}) async {
-  if (Platform.isAndroid) {
-    if (await PermissionService.isCalendarPermissionEnabled()) {
-      _showReminderBottomSheet(context, dateTime, doctorName, eventId, appoDateFormatted, appoTimeFormatted,
-          onSuccess: onSuccess, title: title, description: description, onMultiDateSuccess: onMultiDateSuccess, isMultiAllowed: isMultiAllowed);
-    } else {
-      // Utils.showPermissionConsentDialog(context, TranslationBase.of(context).calendarPermission, () async {
-      //   if (await Permission.calendarFullAccess.request().isGranted) {
-      //     _showReminderDialog(context, dateTime, doctorName, eventId, appoDateFormatted, appoTimeFormatted,
-      //         onSuccess: onSuccess, title: title, description: description, onMultiDateSuccess: onMultiDateSuccess, isMultiAllowed: isMultiAllowed);
-      //   }
-      // });
-    }
-  } else {
-    if (await Permission.calendarWriteOnly.request().isGranted) {
-      if (await Permission.calendarFullAccess.request().isGranted) {
-        _showReminderBottomSheet(context, dateTime, doctorName, eventId, appoDateFormatted, appoTimeFormatted,
-            onSuccess: onSuccess, title: title, description: description, onMultiDateSuccess: onMultiDateSuccess, isMultiAllowed: isMultiAllowed);
-      }
-    }
-  }
-}
-
-Future _showReminderBottomSheet(BuildContext providedContext, DateTime dateTime, String doctorName, String eventId, String appoDateFormatted, String appoTimeFormatted,
-    {required Function onSuccess, String? title, String? description, Function(int)? onMultiDateSuccess, bool? isMultiAllowed}) async {
-  showCommonBottomSheetWithoutHeight(providedContext, title: "Set the timer of reminder".needTranslation, child: PrescriptionReminderView(
-    setReminder: (int value) async {
-      if (!isMultiAllowed!) {
-        if (onMultiDateSuccess == null) {
-          CalendarUtils calendarUtils = await CalendarUtils.getInstance();
-          await calendarUtils.createOrUpdateEvent(
-              title: title ?? "You have appointment with Dr. ".needTranslation + doctorName,
-              description: description ?? "At " + appoDateFormatted + " " + appoTimeFormatted,
-              scheduleDateTime: dateTime,
-              eventId: eventId,
-              location: '');
-          onSuccess();
-        }
-      } else {
-        onMultiDateSuccess!(value);
-      }
-    },
-  ), callBackFunc: () {}, isFullScreen: false);
-}
-
-setCalender(BuildContext context,
-    {required String eventId, required int selectedMinutes, int? frequencyNumber, required int days, required String orderDate, required String itemDescriptionN, required String route}) async {
-  DateTime actualDate = DateTime(DateTime.now().year, DateTime.now().month, DateTime.now().day, 8, 0);
-  frequencyNumber ??= 2; //Some time frequency number is null so by default will be 2
-
-  int remainingDays = days - (Jiffy.parseFromDateTime(DateTime.now()).diff(Jiffy.parseFromDateTime(DateUtil.convertStringToDate(orderDate)), unit: Unit.day) as int);
-  if (remainingDays.isNegative) {
-    getIt.get().showErrorBottomSheet(message: "Prescription date has been already passed you can not add a reminder for this prescription.");
-    return;
-  }
-  CalendarUtils calendarUtils = await CalendarUtils.getInstance();
-
-  try {
-    for (int i = 0; i < remainingDays; i++) {
-      //event for number of days.
-      for (int j = 0; j < frequencyNumber; j++) {
-        // event for number of times per day.
-        if (j != 0) {
-          actualDate.add(new Duration(hours: 8)); // 8 hours addition for daily dose.
-        }
-        //Time subtraction from actual reminder time. like before 30, or 1 hour.
-
-        actualDate = Jiffy.parseFromDateTime(actualDate).subtract(minutes: selectedMinutes).dateTime;
-
-        calendarUtils.createOrUpdateEvent(
-          title: "$itemDescriptionN} Prescription Reminder",
-          description: "$itemDescriptionN $frequencyNumber $route ",
-          scheduleDateTime: actualDate,
-          eventId: eventId + (i.toString() + j.toString()),
-          location: '', //event id with  varitions
-        );
-
-        actualDate = DateTime(actualDate.year, actualDate.month, actualDate.day, 8, 0);
-      }
-      actualDate = Jiffy.parseFromDateTime(actualDate).add(days: 1).dateTime;
-    }
-  } catch (ex) {
-    getIt.get().showErrorBottomSheet(message: "catch:$ex");
-  }
-}
-
-Future checkAndRemove(hasReminder, {bool delete = false, String itemDescriptionN = ""}) async {
-  final ios.CalendarPlugin _myPlugin = ios.CalendarPlugin();
-  CalendarUtils calendarUtils = await CalendarUtils.getInstance();
-  DateTime startEventsDate = Jiffy.parseFromDateTime(DateTime.now()).subtract(days: 30).dateTime;
-  DateTime endEventsDate = Jiffy.parseFromDateTime(DateTime.now()).add(days: 120).dateTime;
-  RetrieveEventsParams params = RetrieveEventsParams(startDate: startEventsDate, endDate: endEventsDate);
-
-  if (calendarUtils.calendars != null) {
-    if (Platform.isAndroid) {
-      await processEvents(calendarUtils.calendars, calendarUtils, params, delete, itemDescriptionN, hasReminder);
-    } else {
-      List? iosCalendars = await _myPlugin.getCalendars();
-      if (iosCalendars != null) {
-        await processEvents(iosCalendars.map((cal) => Calendar(id: cal.id, name: cal.name, accountName: cal.accountName)).toList(), calendarUtils, params, delete, itemDescriptionN, hasReminder);
-      }
-    }
-  }
-}
-
-Future processEvents(List calendars, calendarUtils, params, delete, String itemDescriptionN, hasReminder) async {
-  for (var calendar in calendars) {
-    Result> events = await calendarUtils.retrieveEvents(calendar.id!, params);
-    for (var event in events.data!) {
-      if (event.title!.contains(itemDescriptionN)) {
-        if (delete) {
-          await calendarUtils.deleteEvent(calendar, event);
-          //  AppToast.showSuccessToast(message: TranslationBase.of(context).reminderCancelSuccess);
-          hasReminder = false;
-        } else {
-          hasReminder = false;
-          // setState(() {
-          //   hasReminder = true;
-          // });
-        }
-      }
-    }
-  }
-}
diff --git a/lib/presentation/appointments/appointment_details_page.dart b/lib/presentation/appointments/appointment_details_page.dart
index 58958ee..d80d32e 100644
--- a/lib/presentation/appointments/appointment_details_page.dart
+++ b/lib/presentation/appointments/appointment_details_page.dart
@@ -8,7 +8,6 @@ import 'package:flutter/material.dart';
 import 'package:flutter_staggered_animations/flutter_staggered_animations.dart';
 import 'package:hmg_patient_app_new/core/app_assets.dart';
 import 'package:hmg_patient_app_new/core/app_state.dart';
-import 'package:hmg_patient_app_new/core/utils/calendar_utils.dart';
 import 'package:hmg_patient_app_new/core/utils/calender_utils_new.dart';
 import 'package:hmg_patient_app_new/core/utils/date_util.dart';
 import 'package:hmg_patient_app_new/core/utils/size_utils.dart';
@@ -293,7 +292,7 @@ class _AppointmentDetailsPageState extends State {
                                           DateTime startDate = DateTime.now();
                                           DateTime endDate = DateUtil.convertStringToDate(widget
                                                     .patientAppointmentHistoryResponseModel.appointmentDate);
-                                          showReminderBottomSheet(
+                                          BottomSheetUtils().showReminderBottomSheet(
                                             context,
                                             endDate,
                                             widget.patientAppointmentHistoryResponseModel.doctorNameObj??"",
diff --git a/lib/presentation/prescriptions/prescription_detail_page.dart b/lib/presentation/prescriptions/prescription_detail_page.dart
index d5e8138..a38ff92 100644
--- a/lib/presentation/prescriptions/prescription_detail_page.dart
+++ b/lib/presentation/prescriptions/prescription_detail_page.dart
@@ -4,7 +4,6 @@ import 'package:easy_localization/easy_localization.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter_staggered_animations/flutter_staggered_animations.dart';
 import 'package:hmg_patient_app_new/core/app_assets.dart';
-import 'package:hmg_patient_app_new/core/utils/calendar_utils.dart';
 import 'package:hmg_patient_app_new/core/utils/date_util.dart';
 import 'package:hmg_patient_app_new/core/utils/size_utils.dart';
 import 'package:hmg_patient_app_new/core/utils/utils.dart';
@@ -41,7 +40,6 @@ class _PrescriptionDetailPageState extends State {
 
   @override
   void initState() {
-    checkAndRemove(false);
     // locationUtils = new LocationUtils(isShowConfirmDialog: true, context: context);
     // WidgetsBinding.instance.addPostFrameCallback((_) => locationUtils.getCurrentLocation());
     if (!widget.isFromAppointments) {
diff --git a/lib/presentation/prescriptions/prescription_item_view.dart b/lib/presentation/prescriptions/prescription_item_view.dart
index 39a0b05..100d963 100644
--- a/lib/presentation/prescriptions/prescription_item_view.dart
+++ b/lib/presentation/prescriptions/prescription_item_view.dart
@@ -2,7 +2,6 @@ import 'package:easy_localization/easy_localization.dart';
 import 'package:flutter/material.dart';
 import 'package:hmg_patient_app_new/core/app_assets.dart';
 import 'package:hmg_patient_app_new/core/app_export.dart';
-import 'package:hmg_patient_app_new/core/utils/calendar_utils.dart';
 import 'package:hmg_patient_app_new/core/utils/calender_utils_new.dart';
 import 'package:hmg_patient_app_new/core/utils/utils.dart';
 import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
@@ -11,6 +10,7 @@ import 'package:hmg_patient_app_new/features/prescriptions/prescriptions_view_mo
 import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
 import 'package:hmg_patient_app_new/theme/colors.dart';
 import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart';
+import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart';
 import 'package:hmg_patient_app_new/widgets/loader/bottomsheet_loader.dart';
 
 class PrescriptionItemView extends StatelessWidget {
@@ -169,7 +169,7 @@ class PrescriptionItemView extends StatelessWidget {
 
                   DateTime startDate = DateTime.now();
                   DateTime endDate = DateTime(startDate.year, startDate.month, startDate.day + prescriptionVM.prescriptionDetailsList[index].days!.toInt());
-                  showReminderBottomSheet(
+                  BottomSheetUtils().showReminderBottomSheet(
                     context,
                     endDate,
                     "",
diff --git a/lib/widgets/common_bottom_sheet.dart b/lib/widgets/common_bottom_sheet.dart
index 99ff230..9312519 100644
--- a/lib/widgets/common_bottom_sheet.dart
+++ b/lib/widgets/common_bottom_sheet.dart
@@ -1,11 +1,65 @@
+import 'dart:io' show Platform;
+
 import 'package:flutter/material.dart';
 import 'package:hmg_patient_app_new/core/app_assets.dart';
 import 'package:hmg_patient_app_new/core/app_export.dart';
+import 'package:hmg_patient_app_new/core/utils/calender_utils_new.dart';
 import 'package:hmg_patient_app_new/core/utils/utils.dart';
 import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
 import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
+import 'package:hmg_patient_app_new/presentation/prescriptions/prescription_reminder_view.dart';
+import 'package:hmg_patient_app_new/services/permission_service.dart';
 import 'package:hmg_patient_app_new/theme/colors.dart';
+import 'package:permission_handler/permission_handler.dart';
+
 
+class BottomSheetUtils{
+   showReminderBottomSheet(BuildContext context, DateTime dateTime, String doctorName, String eventId, String appoDateFormatted, String appoTimeFormatted,
+      {required Function() onSuccess, String? title, String? description, Function(int)? onMultiDateSuccess, bool isMultiAllowed = false}) async {
+    if (Platform.isAndroid) {
+      if (await PermissionService.isCalendarPermissionEnabled()) {
+        _showReminderBottomSheet(context, dateTime, doctorName, eventId, appoDateFormatted, appoTimeFormatted,
+            onSuccess: onSuccess, title: title, description: description, onMultiDateSuccess: onMultiDateSuccess, isMultiAllowed: isMultiAllowed);
+      } else {
+        // Utils.showPermissionConsentDialog(context, TranslationBase.of(context).calendarPermission, () async {
+        //   if (await Permission.calendarFullAccess.request().isGranted) {
+        //     _showReminderDialog(context, dateTime, doctorName, eventId, appoDateFormatted, appoTimeFormatted,
+        //         onSuccess: onSuccess, title: title, description: description, onMultiDateSuccess: onMultiDateSuccess, isMultiAllowed: isMultiAllowed);
+        //   }
+        // });
+      }
+    } else {
+      if (await Permission.calendarWriteOnly.request().isGranted) {
+        if (await Permission.calendarFullAccess.request().isGranted) {
+          _showReminderBottomSheet(context, dateTime, doctorName, eventId, appoDateFormatted, appoTimeFormatted,
+              onSuccess: onSuccess, title: title, description: description, onMultiDateSuccess: onMultiDateSuccess, isMultiAllowed: isMultiAllowed);
+        }
+      }
+    }
+  }
+
+  Future _showReminderBottomSheet(BuildContext providedContext, DateTime dateTime, String doctorName, String eventId, String appoDateFormatted, String appoTimeFormatted,
+      {required Function onSuccess, String? title, String? description, Function(int)? onMultiDateSuccess, bool? isMultiAllowed}) async {
+    showCommonBottomSheetWithoutHeight(providedContext, title: "Set the timer of reminder".needTranslation, child: PrescriptionReminderView(
+      setReminder: (int value) async {
+        if (!isMultiAllowed!) {
+          if (onMultiDateSuccess == null) {
+            CalenderUtilsNew calendarUtils =  CalenderUtilsNew.instance;
+            await calendarUtils.createOrUpdateEvent(
+                title: title ?? "You have appointment with Dr. ".needTranslation + doctorName,
+                description: description ?? "At " + appoDateFormatted + " " + appoTimeFormatted,
+                scheduleDateTime: dateTime,
+                eventId: eventId,
+                location: '');
+            onSuccess();
+          }
+        } else {
+          onMultiDateSuccess!(value);
+        }
+      },
+    ), callBackFunc: () {}, isFullScreen: false);
+  }
+}
 void showCommonBottomSheet(BuildContext context,
     {required Widget child,
     Function(String?)? callBackFunc,
-- 
2.30.2


From ddac155a6a256152910a96d756578421a2a366fa Mon Sep 17 00:00:00 2001
From: Sultan khan 
Date: Sun, 30 Nov 2025 11:11:32 +0300
Subject: [PATCH 17/39] silent login case handled.

---
 lib/core/api_consts.dart                             | 2 +-
 lib/features/authentication/authentication_repo.dart | 6 ++++++
 lib/presentation/e_referral/new_e_referral.dart      | 7 ++++++-
 3 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/lib/core/api_consts.dart b/lib/core/api_consts.dart
index 2be40d0..3ae8d4c 100644
--- a/lib/core/api_consts.dart
+++ b/lib/core/api_consts.dart
@@ -710,7 +710,7 @@ var GET_PRESCRIPTION_INSTRUCTIONS_PDF = 'Services/ChatBot_Service.svc/REST/Chatb
 class ApiConsts {
   static const maxSmallScreen = 660;
 
-  static AppEnvironmentTypeEnum appEnvironmentType = AppEnvironmentTypeEnum.prod;
+  static AppEnvironmentTypeEnum appEnvironmentType = AppEnvironmentTypeEnum.uat;
 
   // static String baseUrl = 'https://uat.hmgwebservices.com/'; // HIS API URL UAT
 
diff --git a/lib/features/authentication/authentication_repo.dart b/lib/features/authentication/authentication_repo.dart
index d566996..6ecf4b1 100644
--- a/lib/features/authentication/authentication_repo.dart
+++ b/lib/features/authentication/authentication_repo.dart
@@ -265,6 +265,12 @@ class AuthenticationRepoImp implements AuthenticationRepo {
       newRequest.isDentalAllowedBackend = false;
       newRequest.forRegisteration = newRequest.isRegister ?? false;
       newRequest.isRegister = false;
+      //silent login case removed token and login token
+      if(newRequest.logInTokenID.isEmpty && newRequest.isSilentLogin == true) {
+        newRequest.logInTokenID = null;
+        newRequest.deviceToken = null;
+      }
+
     }
 
     Map familyRequest = {};
diff --git a/lib/presentation/e_referral/new_e_referral.dart b/lib/presentation/e_referral/new_e_referral.dart
index c736216..b28b8df 100644
--- a/lib/presentation/e_referral/new_e_referral.dart
+++ b/lib/presentation/e_referral/new_e_referral.dart
@@ -47,7 +47,9 @@ class _NewReferralPageState extends State {
   @override
   void initState() {
     super.initState();
-    _loadData();
+    WidgetsBinding.instance.addPostFrameCallback((_) {
+      _loadData();
+    });
   }
 
   void _handleNextStep() {
@@ -144,6 +146,9 @@ class _NewReferralPageState extends State {
   }
 
   void _loadData() {
+
+
+
     final authVM = context.read();
     final habibWalletVM = context.read();
     final hmgServicesVM = context.read();
-- 
2.30.2


From ac84d268e94442d191c7f4900c60e06c94f6ae97 Mon Sep 17 00:00:00 2001
From: faizatflutter 
Date: Wed, 3 Dec 2025 15:17:13 +0300
Subject: [PATCH 18/39] triage design

---
 .../data/triage_questions_data.dart           | 209 +++++++++++++
 .../models/triage_question_model.dart         |  85 +++++
 .../organ_selector_screen.dart                |  47 ++-
 .../triage_progress_screen.dart               | 292 ++++++++++++++++++
 .../widgets/custom_progress_bar.dart          |   6 +
 lib/routes/app_routes.dart                    |   5 +-
 lib/theme/app_theme.dart                      |   2 +-
 lib/widgets/appbar/collapsing_list_view.dart  |  11 +-
 8 files changed, 629 insertions(+), 28 deletions(-)
 create mode 100644 lib/features/symptoms_checker/data/triage_questions_data.dart
 create mode 100644 lib/features/symptoms_checker/models/triage_question_model.dart
 create mode 100644 lib/presentation/symptoms_checker/triage_progress_screen.dart

diff --git a/lib/features/symptoms_checker/data/triage_questions_data.dart b/lib/features/symptoms_checker/data/triage_questions_data.dart
new file mode 100644
index 0000000..ffaef92
--- /dev/null
+++ b/lib/features/symptoms_checker/data/triage_questions_data.dart
@@ -0,0 +1,209 @@
+import 'package:hmg_patient_app_new/features/symptoms_checker/models/triage_question_model.dart';
+
+class TriageQuestionsData {
+  static List getSampleTriageQuestions() {
+    return [
+      // Question 1: Pain Location
+      TriageQuestionModel(
+        id: 'q1',
+        question: 'Where do you feel the chest pain, and where does the pain spread or move to?',
+        options: [
+          TriageOptionModel(
+            id: 'q1_opt1',
+            text: 'It is all over',
+            severityScore: 3,
+          ),
+          TriageOptionModel(
+            id: 'q1_opt2',
+            text: 'It is behind the breast bone',
+            severityScore: 5,
+          ),
+          TriageOptionModel(
+            id: 'q1_opt3',
+            text: 'Moves or spread to the upper limb; for example the shoulder, arm, or fingers',
+            severityScore: 7,
+          ),
+          TriageOptionModel(
+            id: 'q1_opt4',
+            text: 'Moves or spread to the upper back; between the shoulder blades',
+            severityScore: 6,
+          ),
+          TriageOptionModel(
+            id: 'q1_opt5',
+            text: 'Moves or spread to the neck or jaw',
+            severityScore: 8,
+          ),
+        ],
+      ),
+
+      // Question 2: Pain Intensity
+      TriageQuestionModel(
+        id: 'q2',
+        question: 'How would you describe the intensity of your chest pain?',
+        options: [
+          TriageOptionModel(
+            id: 'q2_opt1',
+            text: 'Mild - Barely noticeable, does not interfere with daily activities',
+            severityScore: 2,
+          ),
+          TriageOptionModel(
+            id: 'q2_opt2',
+            text: 'Moderate - Noticeable but manageable, some interference with activities',
+            severityScore: 4,
+          ),
+          TriageOptionModel(
+            id: 'q2_opt3',
+            text: 'Severe - Significantly interferes with activities, difficult to ignore',
+            severityScore: 7,
+          ),
+          TriageOptionModel(
+            id: 'q2_opt4',
+            text: 'Very severe - Unbearable, cannot perform any activities',
+            severityScore: 9,
+          ),
+        ],
+      ),
+
+      // Question 3: Pain Duration
+      TriageQuestionModel(
+        id: 'q3',
+        question: 'How long have you been experiencing this chest pain?',
+        options: [
+          TriageOptionModel(
+            id: 'q3_opt1',
+            text: 'Less than 5 minutes',
+            severityScore: 3,
+          ),
+          TriageOptionModel(
+            id: 'q3_opt2',
+            text: 'Between 5 to 15 minutes',
+            severityScore: 5,
+          ),
+          TriageOptionModel(
+            id: 'q3_opt3',
+            text: 'Between 15 to 30 minutes',
+            severityScore: 7,
+          ),
+          TriageOptionModel(
+            id: 'q3_opt4',
+            text: 'More than 30 minutes',
+            severityScore: 8,
+          ),
+          TriageOptionModel(
+            id: 'q3_opt5',
+            text: 'Comes and goes (intermittent)',
+            severityScore: 4,
+          ),
+        ],
+      ),
+
+      // Question 4: Associated Symptoms
+      TriageQuestionModel(
+        id: 'q4',
+        question: 'Are you experiencing any of these symptoms along with chest pain?',
+        options: [
+          TriageOptionModel(
+            id: 'q4_opt1',
+            text: 'Shortness of breath or difficulty breathing',
+            severityScore: 8,
+          ),
+          TriageOptionModel(
+            id: 'q4_opt2',
+            text: 'Sweating, nausea, or vomiting',
+            severityScore: 7,
+          ),
+          TriageOptionModel(
+            id: 'q4_opt3',
+            text: 'Dizziness or lightheadedness',
+            severityScore: 7,
+          ),
+          TriageOptionModel(
+            id: 'q4_opt4',
+            text: 'Rapid or irregular heartbeat',
+            severityScore: 6,
+          ),
+          TriageOptionModel(
+            id: 'q4_opt5',
+            text: 'None of the above',
+            severityScore: 2,
+          ),
+        ],
+      ),
+
+      // Question 5: Triggering Factors
+      TriageQuestionModel(
+        id: 'q5',
+        question: 'What triggers or worsens your chest pain?',
+        options: [
+          TriageOptionModel(
+            id: 'q5_opt1',
+            text: 'Physical activity or exertion',
+            severityScore: 6,
+          ),
+          TriageOptionModel(
+            id: 'q5_opt2',
+            text: 'Emotional stress or anxiety',
+            severityScore: 4,
+          ),
+          TriageOptionModel(
+            id: 'q5_opt3',
+            text: 'Deep breathing or coughing',
+            severityScore: 3,
+          ),
+          TriageOptionModel(
+            id: 'q5_opt4',
+            text: 'Eating or lying down',
+            severityScore: 3,
+          ),
+          TriageOptionModel(
+            id: 'q5_opt5',
+            text: 'Nothing specific, pain is constant',
+            severityScore: 7,
+          ),
+        ],
+      ),
+    ];
+  }
+
+  /// Calculate total severity score from answered questions
+  static int calculateTotalScore(List questions) {
+    int totalScore = 0;
+    int answeredCount = 0;
+
+    for (var question in questions) {
+      if (question.isConfirmed && question.confirmedOption != null) {
+        totalScore += question.confirmedOption!.severityScore ?? 0;
+        answeredCount++;
+      }
+    }
+
+    // Return average score or 0 if no questions answered
+    return answeredCount > 0 ? (totalScore / answeredCount * 10).round() : 0;
+  }
+
+  /// Get risk level based on score
+  static String getRiskLevel(int score) {
+    if (score >= 70) {
+      return 'High Risk - Seek immediate medical attention';
+    } else if (score >= 50) {
+      return 'Moderate Risk - Consult a doctor soon';
+    } else if (score >= 30) {
+      return 'Low to Moderate Risk - Monitor symptoms';
+    } else {
+      return 'Low Risk - Self-care may be sufficient';
+    }
+  }
+
+  /// Get suggested condition based on score
+  static String getSuggestedCondition(int score) {
+    if (score >= 70) {
+      return 'Acute Coronary Syndrome';
+    } else if (score >= 50) {
+      return 'Angina or Cardiac concern';
+    } else if (score >= 30) {
+      return 'Non-cardiac chest pain';
+    } else {
+      return 'Musculoskeletal chest pain';
+    }
+  }
+}
diff --git a/lib/features/symptoms_checker/models/triage_question_model.dart b/lib/features/symptoms_checker/models/triage_question_model.dart
new file mode 100644
index 0000000..fb8ab20
--- /dev/null
+++ b/lib/features/symptoms_checker/models/triage_question_model.dart
@@ -0,0 +1,85 @@
+class TriageQuestionModel {
+  final String id;
+  final String question;
+  final List options;
+  int? selectedOptionIndex;
+  int? confirmedOptionIndex; // Confirmed answer when user presses Next
+
+  TriageQuestionModel({
+    required this.id,
+    required this.question,
+    required this.options,
+    this.selectedOptionIndex,
+    this.confirmedOptionIndex,
+  });
+
+  bool get isAnswered => selectedOptionIndex != null;
+
+  bool get isConfirmed => confirmedOptionIndex != null;
+
+  void selectOption(int index) {
+    selectedOptionIndex = index;
+  }
+
+  void confirmSelection() {
+    confirmedOptionIndex = selectedOptionIndex;
+  }
+
+  void clearSelection() {
+    selectedOptionIndex = null;
+  }
+
+  TriageOptionModel? get selectedOption {
+    if (selectedOptionIndex != null && selectedOptionIndex! < options.length) {
+      return options[selectedOptionIndex!];
+    }
+    return null;
+  }
+
+  TriageOptionModel? get confirmedOption {
+    if (confirmedOptionIndex != null && confirmedOptionIndex! < options.length) {
+      return options[confirmedOptionIndex!];
+    }
+    return null;
+  }
+
+  TriageQuestionModel copyWith({
+    String? id,
+    String? question,
+    List? options,
+    int? selectedOptionIndex,
+    int? confirmedOptionIndex,
+  }) {
+    return TriageQuestionModel(
+      id: id ?? this.id,
+      question: question ?? this.question,
+      options: options ?? this.options,
+      selectedOptionIndex: selectedOptionIndex ?? this.selectedOptionIndex,
+      confirmedOptionIndex: confirmedOptionIndex ?? this.confirmedOptionIndex,
+    );
+  }
+}
+
+class TriageOptionModel {
+  final String id;
+  final String text;
+  final int? severityScore; // Optional: for calculating risk scores
+
+  TriageOptionModel({
+    required this.id,
+    required this.text,
+    this.severityScore,
+  });
+
+  TriageOptionModel copyWith({
+    String? id,
+    String? text,
+    int? severityScore,
+  }) {
+    return TriageOptionModel(
+      id: id ?? this.id,
+      text: text ?? this.text,
+      severityScore: severityScore ?? this.severityScore,
+    );
+  }
+}
diff --git a/lib/presentation/symptoms_checker/organ_selector_screen.dart b/lib/presentation/symptoms_checker/organ_selector_screen.dart
index d945b5b..738adff 100644
--- a/lib/presentation/symptoms_checker/organ_selector_screen.dart
+++ b/lib/presentation/symptoms_checker/organ_selector_screen.dart
@@ -48,36 +48,33 @@ class _OrganSelectorPageState extends State {
         backgroundColor: AppColors.successColor,
       ),
     );
-    context.navigateWithName(AppRoutes.possibleConditionsScreen);
+    context.navigateWithName(AppRoutes.triageProgressScreen);
   }
 
   @override
   Widget build(BuildContext context) {
-    return ChangeNotifierProvider(
-      create: (_) => SymptomsCheckerViewModel(),
-      child: Scaffold(
-        backgroundColor: AppColors.bgScaffoldColor,
-        appBar: _buildAppBar(),
-        body: Consumer(
-          builder: (context, viewModel, _) {
-            return Column(
-              crossAxisAlignment: CrossAxisAlignment.start,
-              children: [
-                _buildTitle(),
-                SizedBox(height: 8.h),
-                Expanded(
-                  child: Stack(
-                    children: [
-                      _buildBodyViewer(viewModel),
-                      _buildViewToggleButtons(viewModel),
-                      _buildBottomSheet(viewModel),
-                    ],
-                  ),
+    return Scaffold(
+      backgroundColor: AppColors.bgScaffoldColor,
+      appBar: _buildAppBar(),
+      body: Consumer(
+        builder: (context, viewModel, _) {
+          return Column(
+            crossAxisAlignment: CrossAxisAlignment.start,
+            children: [
+              _buildTitle(),
+              SizedBox(height: 8.h),
+              Expanded(
+                child: Stack(
+                  children: [
+                    _buildBodyViewer(viewModel),
+                    _buildViewToggleButtons(viewModel),
+                    _buildBottomSheet(viewModel),
+                  ],
                 ),
-              ],
-            );
-          },
-        ),
+              ),
+            ],
+          );
+        },
       ),
     );
   }
diff --git a/lib/presentation/symptoms_checker/triage_progress_screen.dart b/lib/presentation/symptoms_checker/triage_progress_screen.dart
new file mode 100644
index 0000000..a3d0c1a
--- /dev/null
+++ b/lib/presentation/symptoms_checker/triage_progress_screen.dart
@@ -0,0 +1,292 @@
+import 'package:easy_localization/easy_localization.dart';
+import 'package:flutter/material.dart';
+import 'package:hmg_patient_app_new/core/app_export.dart';
+import 'package:hmg_patient_app_new/core/utils/utils.dart';
+import 'package:hmg_patient_app_new/extensions/route_extensions.dart';
+import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
+import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
+import 'package:hmg_patient_app_new/features/symptoms_checker/data/triage_questions_data.dart';
+import 'package:hmg_patient_app_new/features/symptoms_checker/models/triage_question_model.dart';
+import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
+import 'package:hmg_patient_app_new/presentation/symptoms_checker/widgets/custom_progress_bar.dart';
+import 'package:hmg_patient_app_new/theme/colors.dart';
+import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart';
+import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart';
+import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart';
+
+class TriageProgressScreen extends StatefulWidget {
+  const TriageProgressScreen({super.key});
+
+  @override
+  State createState() => _TriageProgressScreenState();
+}
+
+class _TriageProgressScreenState extends State {
+  late List triageQuestions;
+  int currentQuestionIndex = 0;
+
+  @override
+  void initState() {
+    super.initState();
+    triageQuestions = TriageQuestionsData.getSampleTriageQuestions();
+  }
+
+  TriageQuestionModel get currentQuestion => triageQuestions[currentQuestionIndex];
+
+  bool get isFirstQuestion => currentQuestionIndex == 0;
+
+  bool get isLastQuestion => currentQuestionIndex == triageQuestions.length - 1;
+
+  void _onOptionSelected(int optionIndex) {
+    setState(() {
+      currentQuestion.selectOption(optionIndex);
+    });
+  }
+
+  void _onPreviousPressed() {
+    if (!isFirstQuestion) {
+      setState(() {
+        currentQuestionIndex--;
+      });
+    }
+  }
+
+  void _onNextPressed() {
+    if (currentQuestion.isAnswered) {
+      currentQuestion.confirmSelection();
+      if (isLastQuestion) {
+        context.navigateWithName(AppRoutes.possibleConditionsScreen);
+      } else {
+        setState(() {
+          currentQuestionIndex++;
+        });
+      }
+    } else {
+      ScaffoldMessenger.of(context).showSnackBar(
+        SnackBar(
+          content: Text('Please select an option before proceeding'.needTranslation),
+          backgroundColor: AppColors.errorColor,
+        ),
+      );
+    }
+  }
+
+  _buildConfirmationBottomSheet({required BuildContext context, required VoidCallback onConfirm}) {
+    return showCommonBottomSheetWithoutHeight(
+      title: LocaleKeys.notice.tr(context: context),
+      context,
+      child: Utils.getWarningWidget(
+        loadingText: "Are you sure you want to restart the organ selection?".needTranslation,
+        isShowActionButtons: true,
+        onCancelTap: () => Navigator.pop(context),
+        onConfirmTap: () => onConfirm(),
+      ),
+      callBackFunc: () {},
+      isFullScreen: false,
+      isCloseButtonVisible: true,
+    );
+  }
+
+  @override
+  Widget build(BuildContext context) {
+    return Scaffold(
+      backgroundColor: AppColors.bgScaffoldColor,
+      body: Column(
+        children: [
+          Expanded(
+            child: CollapsingListView(
+              title: "Triage".needTranslation,
+              onLeadingTapped: () => _buildConfirmationBottomSheet(
+                  context: context,
+                  onConfirm: () => {
+                        context.pop(),
+                        context.pop(),
+                      }),
+              child: Column(
+                crossAxisAlignment: CrossAxisAlignment.start,
+                children: [
+                  SizedBox(height: 16.h),
+                  _buildQuestionCard(),
+                ],
+              ),
+            ),
+          ),
+          _buildStickyBottomCard(context),
+        ],
+      ),
+    );
+  }
+
+  Widget _buildQuestionCard() {
+    return AnimatedSwitcher(
+      duration: const Duration(milliseconds: 400),
+      transitionBuilder: (Widget child, Animation animation) {
+        final offsetAnimation = Tween(
+          begin: const Offset(1.0, 0.0),
+          end: Offset.zero,
+        ).animate(CurvedAnimation(
+          parent: animation,
+          curve: Curves.easeInOut,
+        ));
+
+        return SlideTransition(
+          position: offsetAnimation,
+          child: FadeTransition(
+            opacity: animation,
+            child: child,
+          ),
+        );
+      },
+      child: Container(
+        key: ValueKey(currentQuestionIndex),
+        width: double.infinity,
+        margin: EdgeInsets.symmetric(horizontal: 24.w),
+        decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24.r),
+        padding: EdgeInsets.symmetric(vertical: 24.h, horizontal: 20.w),
+        child: Column(
+          crossAxisAlignment: CrossAxisAlignment.start,
+          children: [
+            Text(
+              currentQuestion.question,
+              style: TextStyle(fontSize: 16.f, fontWeight: FontWeight.w500, color: AppColors.textColor),
+            ),
+            SizedBox(height: 24.h),
+            ...List.generate(currentQuestion.options.length, (index) {
+              bool selected = currentQuestion.selectedOptionIndex == index;
+              return _buildOptionItem(index, selected, currentQuestion.options[index].text);
+            }),
+          ],
+        ),
+      ),
+    );
+  }
+
+  Widget _buildOptionItem(int index, bool selected, String optionText) {
+    return GestureDetector(
+      onTap: () => _onOptionSelected(index),
+      child: Container(
+        margin: EdgeInsets.only(bottom: 12.h),
+        child: Row(
+          crossAxisAlignment: CrossAxisAlignment.start,
+          children: [
+            AnimatedContainer(
+              duration: const Duration(milliseconds: 300),
+              curve: Curves.easeInOut,
+              width: 24.w,
+              height: 24.w,
+              decoration: BoxDecoration(
+                color: selected ? AppColors.primaryRedColor : Colors.transparent,
+                borderRadius: BorderRadius.circular(8.r),
+                border: Border.all(color: selected ? AppColors.primaryRedColor : AppColors.borderGrayColor, width: 2.w),
+              ),
+              child: selected ? Icon(Icons.check, size: 16.f, color: AppColors.whiteColor) : null,
+            ),
+            SizedBox(width: 12.w),
+            Expanded(
+              child: Text(
+                optionText,
+                style: TextStyle(fontSize: 14.f, color: AppColors.textColor, fontWeight: FontWeight.w500),
+              ),
+            ),
+          ],
+        ),
+      ),
+    );
+  }
+
+  Widget _buildStickyBottomCard(BuildContext context) {
+    final currentScore = TriageQuestionsData.calculateTotalScore(triageQuestions);
+    final suggestedCondition = TriageQuestionsData.getSuggestedCondition(currentScore);
+
+    return Container(
+      decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24.r),
+      child: Column(
+        mainAxisSize: MainAxisSize.min,
+        children: [
+          SizedBox(height: 16.h),
+          Column(
+            crossAxisAlignment: CrossAxisAlignment.start,
+            children: [
+              RichText(
+                text: TextSpan(
+                  text: "Possible symptom: ".needTranslation,
+                  style: TextStyle(
+                    color: AppColors.greyTextColor,
+                    fontWeight: FontWeight.w600,
+                    fontSize: 14.f,
+                  ),
+                  children: [
+                    TextSpan(
+                      text: suggestedCondition,
+                      style: TextStyle(
+                        color: AppColors.textColor,
+                        fontWeight: FontWeight.w600,
+                        fontSize: 14.f,
+                      ),
+                    ),
+                  ],
+                ),
+              ),
+              SizedBox(height: 16.h),
+              CustomRoundedProgressBar(
+                percentage: currentScore,
+                paddingBetween: 5.h,
+                color: AppColors.primaryRedColor,
+                backgroundColor: AppColors.primaryRedColor.withValues(alpha: 0.17),
+                height: 8.h,
+                titleWidget: RichText(
+                  text: TextSpan(
+                    text: "$currentScore% ",
+                    style: TextStyle(
+                      color: AppColors.primaryRedColor,
+                      fontWeight: FontWeight.w600,
+                      fontSize: 14.f,
+                    ),
+                    children: [
+                      TextSpan(
+                        text: "- Symptoms checker finding score".needTranslation,
+                        style: TextStyle(
+                          color: AppColors.textColor,
+                          fontWeight: FontWeight.w500,
+                          fontSize: 13.f,
+                        ),
+                      ),
+                    ],
+                  ),
+                ),
+              ),
+              SizedBox(height: 12.h),
+              Row(
+                children: [
+                  Expanded(
+                    child: CustomButton(
+                      text: "Previous".needTranslation,
+                      onPressed: isFirstQuestion ? () {} : _onPreviousPressed,
+                      isDisabled: isFirstQuestion,
+                      backgroundColor: AppColors.primaryRedColor.withValues(alpha: 0.11),
+                      borderColor: Colors.transparent,
+                      textColor: AppColors.primaryRedColor,
+                      fontSize: 16.f,
+                    ),
+                  ),
+                  SizedBox(width: 12.w),
+                  Expanded(
+                    child: CustomButton(
+                      text: isLastQuestion ? "Finish".needTranslation : "Next".needTranslation,
+                      onPressed: _onNextPressed,
+                      backgroundColor: AppColors.primaryRedColor,
+                      borderColor: AppColors.primaryRedColor,
+                      textColor: AppColors.whiteColor,
+                      fontSize: 16.f,
+                    ),
+                  ),
+                ],
+              ),
+            ],
+          ),
+          SizedBox(height: 24.h),
+        ],
+      ).paddingSymmetrical(24.w, 0),
+    );
+  }
+}
diff --git a/lib/presentation/symptoms_checker/widgets/custom_progress_bar.dart b/lib/presentation/symptoms_checker/widgets/custom_progress_bar.dart
index 5f55395..d09c244 100644
--- a/lib/presentation/symptoms_checker/widgets/custom_progress_bar.dart
+++ b/lib/presentation/symptoms_checker/widgets/custom_progress_bar.dart
@@ -6,12 +6,14 @@ class CustomRoundedProgressBar extends StatelessWidget {
   final Color color;
   final Color backgroundColor;
   final double? height;
+  final double? paddingBetween;
   final Widget? titleWidget;
 
   const CustomRoundedProgressBar({
     super.key,
     this.titleWidget,
     required this.percentage,
+    this.paddingBetween,
     required this.color,
     required this.backgroundColor,
     this.height,
@@ -21,9 +23,13 @@ class CustomRoundedProgressBar extends StatelessWidget {
   Widget build(BuildContext context) {
     final h = height ?? 8.h;
     return Column(
+      crossAxisAlignment: CrossAxisAlignment.start,
       children: [
         if (titleWidget != null) ...[
           titleWidget!,
+          if (paddingBetween != null) ...[
+            SizedBox(height: paddingBetween),
+          ]
         ],
         LayoutBuilder(
           builder: (context, constraints) {
diff --git a/lib/routes/app_routes.dart b/lib/routes/app_routes.dart
index 08686d3..0e6ec4d 100644
--- a/lib/routes/app_routes.dart
+++ b/lib/routes/app_routes.dart
@@ -9,6 +9,7 @@ import 'package:hmg_patient_app_new/presentation/home_health_care/hhc_procedures
 import 'package:hmg_patient_app_new/presentation/medical_file/medical_file_page.dart';
 import 'package:hmg_patient_app_new/presentation/symptoms_checker/organ_selector_screen.dart';
 import 'package:hmg_patient_app_new/presentation/symptoms_checker/possible_conditions_screen.dart';
+import 'package:hmg_patient_app_new/presentation/symptoms_checker/triage_progress_screen.dart';
 import 'package:hmg_patient_app_new/splashPage.dart';
 
 class AppRoutes {
@@ -25,6 +26,7 @@ class AppRoutes {
   // Symptoms Checker
   static const String organSelectorPage = '/organSelectorPage';
   static const String possibleConditionsScreen = '/possibleConditionsScreen';
+  static const String triageProgressScreen = '/triageProgressScreen';
 
   static Map get routes => {
         initialRoute: (context) => SplashPage(),
@@ -37,6 +39,7 @@ class AppRoutes {
         comprehensiveCheckupPage: (context) => ComprehensiveCheckupPage(),
         homeHealthCarePage: (context) => HhcProceduresPage(),
         organSelectorPage: (context) => OrganSelectorPage(),
-        possibleConditionsScreen: (context) => PossibleConditionsScreen()
+        possibleConditionsScreen: (context) => PossibleConditionsScreen(),
+        triageProgressScreen: (context) => TriageProgressScreen()
       };
 }
diff --git a/lib/theme/app_theme.dart b/lib/theme/app_theme.dart
index f185479..c09d537 100644
--- a/lib/theme/app_theme.dart
+++ b/lib/theme/app_theme.dart
@@ -10,7 +10,7 @@ class AppTheme {
         pageTransitionsTheme: const PageTransitionsTheme(
           builders: {
             TargetPlatform.android: ZoomPageTransitionsBuilder(),
-            TargetPlatform.iOS: CupertinoPageTransitionsBuilder(),
+            TargetPlatform.iOS: CupertinoPageTransitionsBuilder()
           },
         ),
         hintColor: Colors.grey[400],
diff --git a/lib/widgets/appbar/collapsing_list_view.dart b/lib/widgets/appbar/collapsing_list_view.dart
index e124f02..919e787 100644
--- a/lib/widgets/appbar/collapsing_list_view.dart
+++ b/lib/widgets/appbar/collapsing_list_view.dart
@@ -6,6 +6,7 @@ import 'package:hmg_patient_app_new/core/app_assets.dart';
 import 'package:hmg_patient_app_new/core/app_export.dart';
 import 'package:hmg_patient_app_new/core/app_state.dart';
 import 'package:hmg_patient_app_new/core/utils/utils.dart';
+import 'package:hmg_patient_app_new/extensions/route_extensions.dart';
 import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
 import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
 import 'package:hmg_patient_app_new/theme/colors.dart';
@@ -25,6 +26,7 @@ class CollapsingListView extends StatelessWidget {
   Widget? trailing;
   bool isClose;
   bool isLeading;
+  VoidCallback? onLeadingTapped;
 
   CollapsingListView({
     super.key,
@@ -40,6 +42,7 @@ class CollapsingListView extends StatelessWidget {
     this.requests,
     this.isLeading = true,
     this.trailing,
+    this.onLeadingTapped,
   });
 
   @override
@@ -65,7 +68,13 @@ class CollapsingListView extends StatelessWidget {
                         child: IconButton(
                           icon: Utils.buildSvgWithAssets(icon: isClose ? AppAssets.closeBottomNav : AppAssets.arrow_back, width: 32.h, height: 32.h),
                           padding: EdgeInsets.only(left: 12),
-                          onPressed: () => Navigator.pop(context),
+                          onPressed: () {
+                            if (onLeadingTapped != null) {
+                              onLeadingTapped!();
+                            } else {
+                              context.pop();
+                            }
+                          },
                           highlightColor: Colors.transparent,
                         ),
                       )
-- 
2.30.2


From 36bf63dcde06aba07d09adb01da4d3b5c0f38c0d Mon Sep 17 00:00:00 2001
From: haroon amjad 
Date: Thu, 4 Dec 2025 12:18:15 +0300
Subject: [PATCH 19/39] Incoming call updates

---
 android/app/src/main/AndroidManifest.xml      |   10 +-
 assets/images/png/zoom/chat-send@2x.png       |  Bin 0 -> 1407 bytes
 assets/images/png/zoom/chat-send@3x.png       |  Bin 0 -> 1981 bytes
 assets/images/png/zoom/default-avatar.png     |  Bin 0 -> 2770 bytes
 assets/images/png/zoom/hamburger@2x.png       |  Bin 0 -> 222 bytes
 assets/images/png/zoom/hamburger@3x.png       |  Bin 0 -> 412 bytes
 assets/images/png/zoom/index.ts               |   22 +
 assets/images/png/zoom/locked@2x.png          |  Bin 0 -> 376 bytes
 assets/images/png/zoom/locked@3x.png          |  Bin 0 -> 567 bytes
 assets/images/png/zoom/more@2x.png            |  Bin 0 -> 5529 bytes
 assets/images/png/zoom/more@3x.png            |  Bin 0 -> 10541 bytes
 assets/images/png/zoom/mute@2x.png            |  Bin 0 -> 5853 bytes
 assets/images/png/zoom/mute@3x.png            |  Bin 0 -> 11098 bytes
 assets/images/png/zoom/muted@2x.png           |  Bin 0 -> 2031 bytes
 assets/images/png/zoom/muted@3x.png           |  Bin 0 -> 2083 bytes
 assets/images/png/zoom/question-ballon@2x.png |  Bin 0 -> 877 bytes
 assets/images/png/zoom/question-ballon@3x.png |  Bin 0 -> 1247 bytes
 assets/images/png/zoom/share-off@2x.png       |  Bin 0 -> 12954 bytes
 assets/images/png/zoom/share-off@3x.png       |  Bin 0 -> 24051 bytes
 assets/images/png/zoom/share-on@2x.png        |  Bin 0 -> 9493 bytes
 assets/images/png/zoom/share-on@3x.png        |  Bin 0 -> 17857 bytes
 assets/images/png/zoom/speaker-off.png        |  Bin 0 -> 2022 bytes
 assets/images/png/zoom/speaker-on.png         |  Bin 0 -> 1642 bytes
 assets/images/png/zoom/switch-camera.png      |  Bin 0 -> 2187 bytes
 assets/images/png/zoom/talking@2x.png         |  Bin 0 -> 2063 bytes
 assets/images/png/zoom/talking@3x.png         |  Bin 0 -> 2179 bytes
 assets/images/png/zoom/unlocked@2x.png        |  Bin 0 -> 384 bytes
 assets/images/png/zoom/unlocked@3x.png        |  Bin 0 -> 634 bytes
 assets/images/png/zoom/unmute@2x.png          |  Bin 0 -> 7451 bytes
 assets/images/png/zoom/unmute@3x.png          |  Bin 0 -> 13799 bytes
 assets/images/png/zoom/video-off@2x.png       |  Bin 0 -> 12830 bytes
 assets/images/png/zoom/video-off@3x.png       |  Bin 0 -> 24545 bytes
 assets/images/png/zoom/video-on@2x.png        |  Bin 0 -> 13948 bytes
 assets/images/png/zoom/video-on@3x.png        |  Bin 0 -> 27205 bytes
 lib/core/api/api_client.dart                  |    8 +-
 lib/core/api_consts.dart                      |   10 +-
 lib/core/app_assets.dart                      |    2 +
 lib/core/cache_consts.dart                    |    3 +
 lib/core/utils/jwt.dart                       |   38 +
 lib/core/utils/push_notification_handler.dart |   89 +-
 lib/core/utils/utils.dart                     |    6 +-
 lib/core/utils/zoom_config.dart               |    4 +
 lib/extensions/string_extensions.dart         |    4 +-
 .../book_appointments_view_model.dart         |    2 +-
 .../immediate_livecare_view_model.dart        |    3 -
 .../insurance/insurance_view_model.dart       |    2 +
 lib/features/lab/lab_view_model.dart          |    9 +-
 .../widgets/appointment_card.dart             |   57 +-
 .../ask_doctor_request_type_select.dart       |   27 +-
 lib/presentation/authentication/login.dart    |    3 +-
 .../book_appointment_page.dart                |  110 +
 .../book_appointment/doctor_profile_page.dart |   51 +-
 .../immediate_livecare_payment_details.dart   |  157 +-
 ...select_immediate_livecare_clinic_page.dart |   29 -
 .../widgets/livecare_clinic_card.dart         |   21 +-
 .../widgets/select_livecare_call_type.dart    |   91 +-
 lib/presentation/home/landing_page.dart       |   43 +-
 lib/presentation/lab/lab_orders_page.dart     |    2 +-
 .../lab_result_via_clinic/LabResultList.dart  |    2 +-
 .../lab/lab_results/lab_result_details.dart   |  137 +-
 .../medical_file/medical_file_page.dart       |   17 +-
 .../medical_file_appointment_card.dart        |    2 +-
 .../widgets/medical_file_card.dart            |    2 +-
 .../tele_consultation/zoom/call_screen.dart   | 1840 +++++++++++++++++
 .../tele_consultation/zoom/video_view.dart    |  258 +++
 lib/routes/app_routes.dart                    |    5 +-
 lib/splashPage.dart                           |  148 +-
 lib/widgets/chip/app_custom_chip_widget.dart  |    8 +-
 pubspec.yaml                                  |    5 +-
 69 files changed, 2907 insertions(+), 320 deletions(-)
 create mode 100644 assets/images/png/zoom/chat-send@2x.png
 create mode 100644 assets/images/png/zoom/chat-send@3x.png
 create mode 100644 assets/images/png/zoom/default-avatar.png
 create mode 100644 assets/images/png/zoom/hamburger@2x.png
 create mode 100644 assets/images/png/zoom/hamburger@3x.png
 create mode 100644 assets/images/png/zoom/index.ts
 create mode 100644 assets/images/png/zoom/locked@2x.png
 create mode 100644 assets/images/png/zoom/locked@3x.png
 create mode 100644 assets/images/png/zoom/more@2x.png
 create mode 100644 assets/images/png/zoom/more@3x.png
 create mode 100644 assets/images/png/zoom/mute@2x.png
 create mode 100644 assets/images/png/zoom/mute@3x.png
 create mode 100644 assets/images/png/zoom/muted@2x.png
 create mode 100644 assets/images/png/zoom/muted@3x.png
 create mode 100644 assets/images/png/zoom/question-ballon@2x.png
 create mode 100644 assets/images/png/zoom/question-ballon@3x.png
 create mode 100644 assets/images/png/zoom/share-off@2x.png
 create mode 100644 assets/images/png/zoom/share-off@3x.png
 create mode 100644 assets/images/png/zoom/share-on@2x.png
 create mode 100644 assets/images/png/zoom/share-on@3x.png
 create mode 100644 assets/images/png/zoom/speaker-off.png
 create mode 100644 assets/images/png/zoom/speaker-on.png
 create mode 100644 assets/images/png/zoom/switch-camera.png
 create mode 100644 assets/images/png/zoom/talking@2x.png
 create mode 100644 assets/images/png/zoom/talking@3x.png
 create mode 100644 assets/images/png/zoom/unlocked@2x.png
 create mode 100644 assets/images/png/zoom/unlocked@3x.png
 create mode 100644 assets/images/png/zoom/unmute@2x.png
 create mode 100644 assets/images/png/zoom/unmute@3x.png
 create mode 100644 assets/images/png/zoom/video-off@2x.png
 create mode 100644 assets/images/png/zoom/video-off@3x.png
 create mode 100644 assets/images/png/zoom/video-on@2x.png
 create mode 100644 assets/images/png/zoom/video-on@3x.png
 create mode 100644 lib/core/utils/jwt.dart
 create mode 100644 lib/core/utils/zoom_config.dart
 create mode 100644 lib/presentation/tele_consultation/zoom/call_screen.dart
 create mode 100644 lib/presentation/tele_consultation/zoom/video_view.dart

diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index 6a1c47e..4f7ef74 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -30,9 +30,6 @@
     
-    
     
@@ -91,6 +88,12 @@
     
     
 
+    
+    
+    
+    
+    
+
     
@@ -115,6 +118,7 @@
     
 
     #@0OuK
zQkg=kguPM55@!S}4FfF21k&`Cw*`~0A_XllTOQk{mH;g8BVjSolXHZ#mOvtBX9w+u
zelhBXeVHc{@?hV{9Y%4Ck;2`Qr+s7d+G{^W*}kqo$;{(X&afz(X>=Br0J~C8s8E5(
zl^kB2k&WIgC^*QzDmH~r*OYIqjJ*aaAB5N`d)%9*PG!vSPQ8{|b4yQLUx
z7}ADw2qRDk9Hn6ygN#672=KF9Fn$JxKp4azhantkJhCP-_0J)sj0M$!1kyBqd@M*A
zfey#GSUnO@#K?OmF!fO{26`h;lqhHQuRW}+@8W*Jfht)4^kab|GXDNcSi0DccHsWg
z5=O4t*m!>A({fSbVqbjtGTMdHulC^5xn8KEBV!P`yDF3jv?6`KQ&A$&(%oIm-TV*j
z!qOi*P=zuVo0kHOd|!}3Qe6gVhM({5xED+nN@LLa!xF}?+uB5;hQ6
z1+1>CyNXenT-;E8abn40RD(<|ZZ;g3Xuse8d4Ws6Y+?ODv7vqGSnCf;P>r%mItVg%
zD%|ELlA#qgiSp;eq71CNvJ&2{6nF!&l$k%3jB=P*T+1g`fd~qiccfLUPNifK=NW96
zC_Yo?PU7+>uSEKN+Lz*9T*NLAL05R_yQdg>yT^Mk`$|Dwfq|0@3+Iy1Rfr0u^o85c5hpDbC=7C`xru1;#wX6WQ;k-EPRluih4Xz)
z^_?y+Z?&Y}(k2jzv-^*gc_A>ZXa~fHSAG0YflCSTY8&91MXlIBVQ70)^tBC&y{I1{eY%Z8$yQ
z>n+z{sD?BlZM-^2upeNkf!%Qb`fvNEALZrSGz=1ve|GJScd1pWq#eP&g26?A&-(3(
zK<;zm0>;%KvehfX?CXnhB(BJpF3xHq&&Bp^^(XrTa-+5=ekM1x&~=FXo+y26XW!Y^
zH$Bjsx3h0qT$IMTOC)iR#MzPOUi(epaEB+-i4VFUCJBl;(yao;A?nTndyAf6ro&1A
z62_95`=Y;yNf-?*@unSVGQ5-)iQzJr9ufh3oGyCRplpPzsiy)QBr;11pbH>jK
z;Vu)Hc7KRf9u7|7=ua^=JJ(~w9{?1vg%?L{hMqMCv`pYut~LnQ<9|fTEqd)Zrf>iN
N002ovPDHLkV1nfGkT(DT

literal 0
HcmV?d00001

diff --git a/assets/images/png/zoom/chat-send@3x.png b/assets/images/png/zoom/chat-send@3x.png
new file mode 100644
index 0000000000000000000000000000000000000000..2c18a6b91d774eee78daab249cfd58d66bd2d366
GIT binary patch
literal 1981
zcmV;u2SWIXP)~5JqFYzBoW+jTuX-o4SRoNibL0IS*^
z!-*H)*_3^3#B!C`0m?iM$N!C2dq7nd7LLCd0om7JXdZ-Xt2d90R^F`w;VaMYK!^bt
znvNhEU%Pp9aIby#6wHX_J(WZ&8^atoXvFdylIJ{pWoe}B`=vH=f+5FONf`V?WD~2&
z_lqC9s7V!8F3SM9naQX@(hx=|$97m|jF%-~*9^gh-n!YY9E)$x9o4;;CT0pR{85
zt2XCRXD0tx$Mw7a;mNZ1;!!xUB;WzvABOPo`%VOfl{W(YzpP;HX$D^6Sq!^Z_sl$2n5>Eu3Fb}3I~nJN9*tsPb(caq+q>2E&D$BbPH!J7E}w%G50i!{#$A7MdQE!
zh7TUYms%o!+1{U*F+KMdI^qnPZ>8Y}z7>D@OJBINre$2aI`zso58->Yp4|$c0A14l
zUuBXp`N%)dphSCxGe~xkZvWT*{`aPHg5CODzv5Oto)v$q;p7nulY`-g%2+HC$HwWo
zjqPfB@5il}{x*U};bQMY`T2gLRDo|R8A;>%xpoYlIaKv=Ig!{^m2|BxRK_^g`Yjft
zWJPv(>a}y?hrezsyH7=t-qHW*frdK;D!9TNO1Z>B*hOBIqOpsN9I`O?&n6!JwOLUl
zhP&Fs-?ZU!4VGGt?jK(&Gj3G6=fNjw=(ks>m6M$^7G4Uw($cvqtzD%-e&Cu^LuU?3
zt890rrNbHK?FVn55`huSO&7?h6u0sTgkU^hgk2zafZc-IK`PcewHM4y7ntLgbc23Y
zGxkDT!Po`fK7Sbf-S5Fo*s6F~p(@%6#+8d^OziQi3STW+PSqZMH#Tz{KN^y?qNQLL
zPP^*{8LphDm=zYHonT!3a5EcZwg%{H&;hf01?r~orO-|=w;P>)HzaFiUkj#s3SSB>
zU7}l}aSE^7jO2YQm<}m?DKr(Vu@kLoVYeFgorU>1r_c?w6l`HRi+a)373SDi<1iH)
zlC`3xVD(st&T%WBeUo%tmZhg4teVkOu$p#PW=^3SuwdGyOtn~8P+VaSJq25@KCRa|
zg)c!$)1;%iv|hD2g>DeofpZX2_+m(3!FbAcIf53qb`WVx{;#H>A$u(X^mBz|Gm+mm
zZGlM3sLYGoc@ZGHJ{FFDcwPpt;hO$)13{&Q?Cc6i&k9v;vBVH+UofF1LU5L-r-kiD
zh_J$@m4ZPJgq@N}hn0ds3k0>yTOn-D!k`5qVJ|pKKEjEmWtcles7`uy?AX@La%6sQ
ztW0ro8g1RQRNy`gN<+eSG;#!!HGvrzltxxKrucDt*`kbNe5ctS7!*XzuZ|u6h@b70
zIE0vhK}qD$Yc%)V+IiAC4h@@`!AH!mjUC-KrftE}$RuIgVpoo$GJQy724P&I3M_Ak?3aZbiv&w2KS;?0WE2K}5#on+)}nxtjj+|^@uYN~
zMl`=5d(_dO)LVNU7fvjW%Uv$Q;2~mM#;w6}?^e9tj}gsF_7;n&I5$9kz<_a&O-DFx
zu!2}j)mPLC#~0(WM?C`5hH;x^PB6;FtU_wK1X?uyEM`;ao;)lDL!-z#1!gvpxl}3}
zEJt0}tm}v`4iI6)2v-+8nKCVXU?RWdR4ol%WY7p#6D-s$gf(Gdbt0YYs;fBR%2grT
z;byf<rt=kli`%la&44)wrrey81+-wri0BlM?UH|V
zBxi-hV$v=_V`v_3Uo|C-g0h|bZYiGg&f9t3AVer7AQm>UIa^C?s+Ru&>4Y61w>xgF
P00000NkvXXu0mjfTrZ#N

literal 0
HcmV?d00001

diff --git a/assets/images/png/zoom/default-avatar.png b/assets/images/png/zoom/default-avatar.png
new file mode 100644
index 0000000000000000000000000000000000000000..c5fd1e71ed2f00f24296dcfac3b371e4ea4cadb8
GIT binary patch
literal 2770
zcmai0do&aL8y{I_lKZvBV!dTUOd=(-TqcsRxh+{z?kz)dnKf!6T10Y7C9<_4cOjxo
zB+F&T{70qpU8?~cxzu~37{7HFw0+(GlXiTe
zKcOw*-Nc6>net^`k-i7XQ2Qw2wCSbGyv-3w#~EX?5~-16LS_q_v{f$DJ#`{>G&V?ST!FF9l+4nvOw~08BY5o?PEpdA`
z*1=ensmcpUU-vR*1*V7RHc?VG(xwxRsEr$tB)A(4!#u}}RcraOsie$}5PLs_aN*;l
zB*l|`z^?e$@Vrr?MFQ+r9vIVjf&OnmMA>fRGD&1yp4|NB!6>_3CaQFp<93f{4mKay
zK9stfUoY^8lx?Y28^)pXtRrmmzI1^?RlA0izJzmg+JC1i;?Jg5B>vo7e|IMGsHTD_oyaJo#-o*@CCo7e+7ZgGT4V
zdW6)67WW4KjPfn7mcM=$`Qsoa@9?NMimuWh+&hL6vhw0LSv{oc+O(CtS^b+EA+5tp
zsV0Bzc(Uh~G&MN7YrCGBa`_OOh-BEPdh)koL4-*9#M8{WVJ7L)4yDcDTk8p;Xymb)
z(Ki1yIP$DUf5C_O8ybO@&=0t;6gbikeqj@O;a8UL1K1g$=iq5<@35Y+4xKwjc38tUg;zlwV8*d)F)u1Z7RA2{N0!b@%~6SO32V#zV3IbssdJMt9M}i--gv#g
zb|`5F9N)Y9T3ui>Lt04dNO0RP(@dj{H>A77d15y;RLRS`boyqdA3J4Nd`tX}twe))9cd=hJEPbe1Amqu<=$PYYc=F>LwVN5*bQ?~Ne_O;-VrF$Wa
zH1QN(d&BAK-m!}MiTnCv18_z-N_0?jjAqpY^iH3iaJPz!DV4Ne9;z9Svl_bHzyHjV
z#e*RvR4Y@xMl@myGJh2BK9Wd%alybaJi{;Dx9H|lvkLwd1wX;}x&M6x;h5z%@x-)G
zLo2Ond@2{n2*89W(+BKf$sOr-wAlleheNm4+qgk3zH{HZYFtx~k5s-k1p4uFAO<^=
z4_rUu!z@vg&}@*!SB3qH72CT+#QAB43+nXlO^HgX^uIK3nute1fu89UQD)}k())q3
z`{x~g7aeHUT2E@Ijbb>l5+TKviGuSWn}5zRxgq&wy`yed^V$4`Ag6y1Nwe)Ra2>kt
zrQLJxw1=gic*!Zl@Hc1uHfy|tyH;u6PkGtp$Z>)mB_n1|368@EF89HVi>Nn_w1&pT
zn|svINK18gB-}jtj#1>M?(<@BajshhIBWf7hW-A#wsd0TY=1d1dj(wKfr7_8M6eYc
zxar?^eNB7rjC$khVzIRElTiu$Wc+?fC4uD|S3jN60dmZS54=Pqp~-sexqjqWVGxL}rZk5Npv5q9&07x)yV4kaoyD=!P
zR<7Gv4@R$}Dj1kxN%VUAwfzj;KnB!9z7TO*Ro@Qv=Jdzs+W*)%GBDn7j;REB$f#2g
zH!acA-?Y{SHc#xN78Mn#k~4AB5;6@RRX&5ONxp7X$Xc&m3yp4#YgK$g>i{JsTS>Fu
zB=hbpdR&O!kyRG#OED1ve1ZzFL8z!-2V1&r7Y)@%FR7~0xl7nU!QGUZ(z8RkR24P4
zy^7-QIi;iG0+rH6wce&~$+;Szp)vwNVzvLQ4V~Ap(5qfTr(AT{F)#1DPoGcm!Juw+
z?wfA+$bG^uR@qL$9MLFaR{bB>_H3N{y3Lpg;RRuTC`UUNTQ=IC`XBrc4$lAp

literal 0
HcmV?d00001

diff --git a/assets/images/png/zoom/hamburger@2x.png b/assets/images/png/zoom/hamburger@2x.png
new file mode 100644
index 0000000000000000000000000000000000000000..9b490c25b08664b424f8089290a444b7ae8a5e1f
GIT binary patch
literal 222
zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTC&H|6fVg?2=RS;(M3{v?36l5$8
za(7}_cTVOdki(Mh=_q^keENoYnybgM~p)%~~$NQV7+hws%dQ|D%
zzm=)|d63M_Vs3^8O^M`nmd9f9BYP|v4w&>9UYAK;w_WF$3`2s8`~%N(0{LOTq=D8m
Nc)I$ztaD0e0swXLN7MiS

literal 0
HcmV?d00001

diff --git a/assets/images/png/zoom/hamburger@3x.png b/assets/images/png/zoom/hamburger@3x.png
new file mode 100644
index 0000000000000000000000000000000000000000..434601f96553adf27780028ff7e2d1d4352a7ca6
GIT binary patch
literal 412
zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@ZgvM!oCO|{#S9FJ79h;%I?XTvD9BhG
z|B0D_s7n`Znh*-c@}U
z{4V%0NN>rx;L9a_fTgElM#F7|oPrv`JqinN>=FF@-}4&hNt-!~?`Tdt3pAF2VTYlw
z%F1iM)}$_~*eFxh6?)mETK}T%gs#h3k=jwGmulSGt7JRl{rOL#%dg)m%x_j=t=hWh
z-kuhZ#%pYkIve0-1k7{gjcWvZ6rP40fCt}PX(-Y==G5x>zMV6fP
z(fpM66YDO7oZkQR%i3wji!>B31_CGWE^?h^PhI%z{>}W_HM{=ryl(hlQG}+|dXN5RD^4D7IGf2~#P%kE
x=f**a4UglFH~fCRM#D~$d0!7WBpD7=$TFCP%Jk;%`F0HCEKgTImvv4FO#qKGs7(L>

literal 0
HcmV?d00001

diff --git a/assets/images/png/zoom/index.ts b/assets/images/png/zoom/index.ts
new file mode 100644
index 0000000..fce1d50
--- /dev/null
+++ b/assets/images/png/zoom/index.ts
@@ -0,0 +1,22 @@
+export const icons = {
+  chatSend: require('./chat-send.png'),
+  defaultAvatar: require('./default-avatar.png'),
+  locked: require('./locked.png'),
+  more: require('./more.png'),
+  mute: require('./mute.png'),
+  muted: require('./muted.png'),
+  shareOn: require('./share-on.png'),
+  shareOff: require('./share-off.png'),
+  speakerOn: require('./speaker-on.png'),
+  speakerOff: require('./speaker-off.png'),
+  switchCamera: require('./switch-camera.png'),
+  hamburger: require('./hamburger.png'),
+  questionBalloon: require('./question-ballon.png'),
+  talking: require('./talking.png'),
+  unmute: require('./unmute.png'),
+  unlocked: require('./unlocked.png'),
+  videoOn: require('./video-on.png'),
+  videoOff: require('./video-off.png'),
+};
+
+export type IconTypes = keyof typeof icons;
diff --git a/assets/images/png/zoom/locked@2x.png b/assets/images/png/zoom/locked@2x.png
new file mode 100644
index 0000000000000000000000000000000000000000..c6d9806098aabaa3b532d1bc8f2d35f149a5d6f9
GIT binary patch
literal 376
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
MWmRMh(*gih#p0{&dIWfFd!F?0ko{ke}u7Jm*7
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

literal 0
HcmV?d00001

diff --git a/assets/images/png/zoom/muted@2x.png b/assets/images/png/zoom/muted@2x.png
new file mode 100644
index 0000000000000000000000000000000000000000..3504363215daffb7fb1efa511727f642476b49a6
GIT binary patch
literal 2031
zcmbVN3v3f*94|25ZcbQWvVq492m`Kn-?hEACuNVetPOO`t-w&k-Q#O_^l``Ct?STW
zV&;H=A_0651Rn`17zBwxBuX4Q5+s@t!y_^Bm;?#xmRkbTsX3(iXpbvGdp7oeYx;P
zT~}C=Y;JBgH(SiI8YY3$=_Dzdq-g>n2(2Zqb4enumGm-rpeCr2qDyidGZ;BuZqi*i
zQkr%lreta3S|&^=U}Tb0NMNQ6mr_7c$l{bHHJUOm3M7oe7>w&0!h$STX_R$YYn1On
zon5}m019m&khRgTmRKxnLesqoClCvya9r;5x^3pEk@pK^mNL}QdAlmkVPrf
z(idtcXiE@SSO8dHy9P#?chUJf#4~-g|P5e
zns7LHn&2!DP=W{;hRUj$r%LEZa?!r5hAI&;QWnNy<)BDdtRO^K0RspJ03uxohMwK)a9{MZrM^DH;~V%y$}z9py5AN%ImI@sBR!uez?hRUHS0(_g{-VbM4z|Zo$%OyK&q4%61NPrf;8&iVyix%!^M3rBkL>yop5hpXM~1^atO&*{0jVp7$LI(uc2
z`%dQ>dWurz>l*m7@A#=4DYRhO_#0QI9nBl=rPp3!K7Xrj!_WI)d8279KZ@LNtF-vb
zk}c7Z8@fvJzQZohJ~+_6$$o9pzRpW$!r>P?ib|iDVBPg;d(+hqmWsD5H`mS?RNQS_
zwRijNUyt9J|M3ZBNVi(NaAHwwVDVR79%duA&3od=LmjQ}mA`%N!lJ>K4@};2;bie)
dzHFO%$Ml@
z83=49BFJK78kvwtAQ6UUxRAh-0TPLU$O%zEAqFshi!g=FF+g8$w{w_*#3pTD-}}Aa
z|M&lR|GrwXylB#d*%J^1ndB|@l*0FXc+X8wgU`Xd=ydoRuNFV6BS?sA>cm
z+b@+@8kN3foS=j(yr|RwOEjcHG=k(UimJR&2Mn|Z)Jn1oyWV{SLnYCLRoH!`Pj!QU
zRNSb6vc~1*LSvo4irAusXkL_q1R-GXXfza*buQ|{;=CLjo6`h_#vw+X3(GeRqLsc9
z)U9X$Wh^8vkR**dSPRA2Yz&!;(j-k1q@AE>oMJfA#!(J5abeJ!Ci=Nj&ys{K_~pU^
zhM{r<5s5@B5vxVfY6*&ES%Rbqn#Lgl*BfMmkK(dEXPChQbU~9;LsDeaWaMj
z(jgZ@YLZsg6Jde@Bci-YP!`g3DGn5cBu))$!MJfzAV3g=fNbaxOC_;tKrs|Opge#&
zxqP1i7+Rk%X=79^p-|FvKm5nF(VH-HO+d82UBj#Jih+G^&_PA?!?jwFYmK1G!L
z4I`lroVJ!z5bEIQ`=PLCMBd>46D$gxU(rH5bXf}VwSZ9NS`1AFl5;CTMT3T+I_t=J
zuiIUsDSjyk7xdDi0@PdRW+;|naN0t}<@$V_SJn+)7J%2|!eDqTk|c7p6$o|*OW`~%
zh`5bmS)3&q9%mdZN%6du=N;nkevcxA%_1=O51j{55g^Au@|-mAlcd##gBp^;0crE&
zH4a|Ht-PHAj9s*gqcT+TPUd#m$*V$2*a+B_+q7Xc}`V=giwR{!be_
z1tHc^cB6RTtXR*EyT80#-*eEq{j=x&tGd%Fcb}fSZs%aMdESM?gYC0^y*lZ%nz>as
z8tp~%e!Nna`_a=yY5l#v6z9QH)ia3CV+991+aK$jdZ6olU#{gvsqEI{eW~5q2XEa7
zzlnS}u`L`~a=^2#b^qj(AN#1|$KL53N8KxGdF$jF?)C5L_T`MDGEPjBx4pObrsB`Y*@=WF_X`)Zvbs~m
zZ2Fihvg4CQhi_({t4hfp|JBB=olVm&{?Ik?D0e9*JH2nyHN7=7hPiS!b>XHX(&E*0
zdnU8~rPUjk&R&Bw?2cv2(~;X7Vx0?vN8hy!#47GgUD8)|XK%CnbQe-xB^C6fTcoUS
zt6Ot>c6EGNWpuoo41)aaR?2EFzRTqBGTHsxIO2@-fT5@BDo@}4cwxT(vT-S`R2mWdaFTI;q
Xu)nIasq@}u^Ed7-T<-axpnAjKgIm$S

literal 0
HcmV?d00001

diff --git a/assets/images/png/zoom/question-ballon@2x.png b/assets/images/png/zoom/question-ballon@2x.png
new file mode 100644
index 0000000000000000000000000000000000000000..ba79fd3f69cc04edc6d1cc7ca6f10397d919eb90
GIT binary patch
literal 877
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
Qk^lez07*qoM6N<$g1%ET>i_@%

literal 0
HcmV?d00001

diff --git a/assets/images/png/zoom/share-off@3x.png b/assets/images/png/zoom/share-off@3x.png
new file mode 100644
index 0000000000000000000000000000000000000000..46989fea832a1a1887951c15bce7192b49ab0f22
GIT binary patch
literal 24051
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
Ef+few^#A|>

literal 0
HcmV?d00001

diff --git a/assets/images/png/zoom/speaker-on.png b/assets/images/png/zoom/speaker-on.png
new file mode 100644
index 0000000000000000000000000000000000000000..f3355ba06447cf851a60838598ab248bf30cd48d
GIT binary patch
literal 1642
zcmV-w29^1VP)hlD&(*LG}Us07W<58EDsi10!8@=j^&lS4B}E
zUKL4zD5#ydzDV*Vx{&PrBFCjEUd5q?BJ}|S*%D<*zt5TZ=WsYuNG=L%71m0um08p5
zMvhyK$=b-i)$N}LtPSn^q@d7j;eu6JTcSykrUimR%nSQ=W`fR2K#2BY>NNXE=O8kBWJRS;DUiko%YtxjARZ#JM}iUk0c)%^NL=408Xl1sBnVLg
zLa-IG`nY-EBWqm}kk%puM5;C@JLwt~gDepfMPrgwgJ4av`n!1(58yq+N~x4!w4U~Z
zL-^}tncqABGk#1{r1Ufqi07=5HG9Yl_)LgK^o_Ahcw7Owcv&4~lYmr?En*xY@+=-F
zwun*1D1vyLSRzIhByW9Q7!VPjHq_!o5fD~oiHZlbflKL!9TWtgniUm9Aq@A>?*KL6
z$q=_m3j*i%K>|X&d7NR01{$pdJ?I5ew@M2*NadQ>1AYP)x!?1{vtXk799RUu7Z+$!
zci&m^IH*P$q0zXreB;L26Gc%U8wR~RJZyj0>;2m$c|gE3au{rPNJ6|7$^fm_SC1-{
z+E47qWqzM&8ZTbI{_`7>3o6>D{1{DrNA95OrCEFAy+Gjyr_1zW(JyO%WAF0`Z*3Q!+GR>8mJ;#94xAzXxgsiO9ucKen9DOF&sz3R_l14rgZ{*!w3#__xCze8Ktj5cofRk3mBFy4U3j|DM`M(UjM%(lA
z?nao!Nq~`?2=ucmdwYNX9>ph4i7qe#4WXTL9Kw8Fm`_Z=I08o`0Mn!nNg|5R^AnMh
zp$ijG*Yy`94QoytW>qFFPU5++xD?j)!463RqKrnvttdW^i^z|sWDH=AAmS|&0IRWm
z&&oup)&yU@`r{5|hkb~L1%yJP@aX8DEz>l1sTe>rliQe&Bmk^iIXGx2-%3oUQ7{EFFZcp+oEiMH8MJ%Fd`Cfl7!04
z-MbIIEtf0obb!)|a(ssRzo_4z@C+~L}jn%fM
zY4@FjkFJk?Wsf~4xnPCt6?vV%Q|qKtgt0;a|i~Fz!_SUvvT+&LdyPg
z27)JaFpaXX2x$!S%6IuG0znV4g*c
zEgqO=aU~ZK_9ibPV!%M3HGE(2cApeabYyceT0{%eTFd0XjHA)|Dv)~d^uW8EoGJ>k3iHb}VJ0KeT90rKoeHlT}>*Lx3q&oj941WEd
o`@QjskWT-99R@!~E3NSRA0w|k&45_Ni~s-t07*qoM6N<$g7ir8`Tzg`

literal 0
HcmV?d00001

diff --git a/assets/images/png/zoom/switch-camera.png b/assets/images/png/zoom/switch-camera.png
new file mode 100644
index 0000000000000000000000000000000000000000..5927b7b7c04840c44f8edc5c71d1f0501eacc12d
GIT binary patch
literal 2187
zcmV;62z2*}P)JNc95#p1OR;mh36m^yCqtbmv_Nc5wMc0XvbyH>CMC_9`i&kAwbga!
z3S*ZVj7DAz{x(SKB=wdq0Lx60X_W>w0FAh?W+1K@AP*LqB*~C{fdL*tk{8=#Ls(>r
zBtaH|AS^;=j5`e2;gKK-ZY_gAxN4A^$6aehj!Y8kvc`H`4TOcsjCY5PJOG~=rIb!}
zWNW7v4&uAWEPh)7D8@I)flE8FK%CP}X7|u4z%{`d5gTn4;dTiW
zz03>Sq299#aMD?P&|Bg~0aA$5r_c5W0+Bnqt`GCWkeze$`P^JKo4Nb)<&y`b1|V>Y
zECqJ4rJ>$CPKwam``+;JhX9-BatY*dGqfqH6Czbke3z*id|S~
z>bn6pfE4+j3PL0PNfugdGQUekQ2e|T$&k-eY;|?vN;0{YAURkUt(!FE1+AIi-#JZ=kx#JO{cIT7?+j!2K`xh>
z;R~PRXp_)1gc{B9XXW$5et*y(k1zj1a*#$ZEH(B80%3=imrrD~*{|2vm+n=v5R^bZ
zUkAU3<|q+)y`HgPu;;cUEA+vI;l9$!m~-bo`ju>E*<3C=v$ponq_`+E`E-4vX`Vhj
zX3-$FwYB|7#4jcwbmBzsl-KK>GoF=i^M`7i1G&uP!UGc|o3Q+Fw4Oj|uXSwOL$v
zSc*IWJQs;{Jw}qk>z&qOZHdvI+S>h2!u8yGl0#wE{9sU3-
zW-s)R)FX!&h%fCa6I5B+8sV6?=Vl_7nbs2+ExaU7HI_3hppHbNgO3Xj-B5iDL7*~l
zF+7T4?t7pQjwh2Fv1l|n=CHqYQ!X=HOCkV>#6%F>cXxMtl57Iu;Q904dO3E=7E5bI
z8U&`vMX&^a6LE|chQkJ{i>O?Xi5H}FIW`&4jJw5$s<0uw;
zI4~y(<5AXi6k+eyUqK+;SQde}K-+;GmdJha
zPodC-dx=EyenGN2P+XhDot)r;d4k+cATYXpB?hh>B?-z5Thh0fpQSp1SvAb4@m_*u
zuLQ(Z?sG?E%`v>8c6>GSHXOGzC-B}xAcxwtA?69F8Q^+->Z6EWKTJ9ALT%X(wA
zJ_+BGee1UVHUpAI#SX2OSvmX>rLupM0LD`_nby*&!;OW|;P$N`s(_MZog^+gfj@)>
zx*bS7&}~$L9j&MxNVG*BU{`EwWfEy5j}G&lsKp|
zQ0wK$0qWJuk)82hgEbzu6+U1Dkh$to;$4t_SF2pRPM&tZr;TGxc%{{RXKqjGOGweJ7`
N002ovPDHLkV1j)V@V5W}

literal 0
HcmV?d00001

diff --git a/assets/images/png/zoom/talking@2x.png b/assets/images/png/zoom/talking@2x.png
new file mode 100644
index 0000000000000000000000000000000000000000..676d61dd40db7350ad48a1c4e08462df482eb1b6
GIT binary patch
literal 2063
zcmbVNdrT8|9ItVbA!9n2lg+uE2b(&*-m4tFn^m!`QlSXgNr^_eSKAA1?{;_4QX^qZ
z@DY<`f6PaiaSrBV_=r)*f>F#CXN+W-MyE?uj4o^ubvol?7-hdJrNafC*(G=PyWj8g
z`+Ps&$M1V|#JFh^gYjSh0tXRq?a{&zcF%h%$g6B{{#y>upt@{8yW{94h?z-MJYrHLGc%jFSB3v8z*ZHh$4qiE!BuGOss!8akoFjov^`gEx@5
zt}-)tx)q1AZnvcN_O*UXviCY(xp}c_Y1WSyB0ZmP(EL4J!h6RX=Q=yzsT>#B@Mqb{
zZ=84A=$?}g)}Ppwy35pi^o3iKm8rz#=}K&47jtde!&4ui<9pmYW}Wqae5Lj6^t-LG
z`4iI~ZHpB?y3(DM)6_R*UH8oS!QvGyk4N8FemXXC<(J+i`!iiX6ad~+$f^6}Z6Tk6I;vo{wVTUtJLE%#g3xt-gOwD-5KSk!)I!lzZH@r9c|t6Mj6
z`BB^D3}y1`%U>=UnU`I9w`BZn%lY2a`_%bgI*#3|pLn_GyBjI*SF~r<&z||N4!aOI(l>px6tIr1jgyQO?ySK*nO-;eL^Y^(F^{c3Ulq}tNm
z4c)&swvW0ns^g<&DckBNA6;eH?{!|PIK1TG^}YL=uZ_9W*S9R~_EoH|)4J&XIPx_j
zhEFNpG@)bXo*d3ry%pQOwYcr-_iNK1P2T}Gb+qpJ`UX+A>8;W-

literal 0
HcmV?d00001

diff --git a/assets/images/png/zoom/talking@3x.png b/assets/images/png/zoom/talking@3x.png
new file mode 100644
index 0000000000000000000000000000000000000000..7028a357f81b95ee98df9ce61c0ba48e6acac7ed
GIT binary patch
literal 2179
zcmbVO3s4kg9A6Mp@r727uX0(me6+WZd#_vycZkFm%DveL<@huz|IciQjv%BAZ-|zeXe*ee!
zpDjyCP8t$5CJKU}A@*6eRPdez?g;~)0?)3vz)0{K=$kcPhM*XedWR*hB{Cr>@;2|x
zP%<2^QjF-;(5&d^tqUxwoX6fofB6dDeAJ%UUHEJ(Lq3XIih41v2LN{$7IR|(+^M+$5e
zB@Q-daFoGu5;mGOgh8h>;4i@>PU0A@#|RQ73>2=T2qPT45Wps}ZYtF_Gsp$LEJ(JZ
z_$UnX`~4cfRwGJT7-2S>F`UFm5(NlUE)WztfC_SKuLTFI!YZIa_>$
z>Cp1O2ta5Zju6K~wRpWD3Ry|a2W|ud@=&zwEbwtyDkqD162m3t1DUa^H$KWLakL^z
zPEqvqCMu;@GE5R05}xFs8D3DGnA~RzXQLI)f`GgcD6U5dt&`NMdDD|qaWjSEJy3_p
z^6rAZP$NoeorIPmhzFsdXjodI{}aqIlv|X%G;o>s(penl6S5FE6iCV{dPE5j19jTI
z^LDE>MH1b-2Q0{`NeQq$(P|*f1_MfJh;F$K2W1yzg%%jjZnGdDJQ|*7Db`>h8QiQ#
z4MvhfbtZ;EX_woK>WnmllUmYc()YLv_S-}zPb~sanmOj9L#Iiv*|nhs5KF
zn1lQM*&HzXm@4UEmqoYYrzI{v3&idT>JWRBe3{OFy!aCix;ZBR(-P>_j&VOVLr^$rx5Ya%
zmVJ|Pb?%`V(N)KH7O#n(iqFfuR6MjkYI{E>G9!Fm+s=~A$dn~tMSZ&TM*p$W*2+;A
zCz98GIM?pJo!{EkR=?`-#Mpac*v6&pC2TzT%jlw(gs2sE&HUJ5G1sS5)JDt*g9j4p
z-<`fKe)S+|Y}MqI>{+wI!M9o9}w_Op}BgKnU&MRsn_tP3C56;sh()qX1a
z!@!@~v})7)OO8Ajx%$NZgQueRj;PrlF%yyo``#*O4R3Ayy`?SPr5)3d9ML8~bCOIQ
zx1irF!#}!s<}?3IXG7Ac-Gv92@7lkhp{cTUtmB=6%7WpQW6sa>Y$_unYmOW}y5L-T
z)zC4HYFX$w@IrY_ZAQbQ`^)llOD+#SKa~=
z-~YU9Kx&<9yL~Hcjh4BPPG2>Ww)IOAE`3oW}6$gPGjY63@z4
z>TS6Y{=u1DR5=8#Qj+nL&f}%E{c$2<;l{<4TTU-&Kf5a`aI>kXvE%iO>CV6I)~z^D
z9XW0B-Mk%BHpF$Tzjor-ceAV0uXYX#Piq$WpEvkv%h(-jh1}N6H!C2xctm|#Gm-qQ
zvvciaaclKq&RJLXM_f`-PQ~ui@Q>@Hw6?wIvGhg7lf{|KqrSK?a!uWZ1n0>-`@K(U
c?+m(PY+1aiseWBVk@}lpPfWJeBxIKS4WWz%;Q#;t

literal 0
HcmV?d00001

diff --git a/assets/images/png/zoom/unlocked@2x.png b/assets/images/png/zoom/unlocked@2x.png
new file mode 100644
index 0000000000000000000000000000000000000000..aa5403e233d941318773bff2b4f94e0a4ec7952a
GIT binary patch
literal 384
zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTC&H|6fVg?2=RS;(M3{v?36l5$8
za(7}_cTVOdki(Mh=ZP~I_o#8?s3W8Xntj>@2h=&pWc34_icXAr?uZMmVF3%Co7S8a+`+l#X~H*
zQ^f583k;5)Fl;bq`*2O8AZ>4v(<9MtK9WWOu4sPwf?hl$>UYWPu>Z-
zpwjU3%GM2X9d}yyfHfUsxF>Poc0AjTMb^*G=LsdWzmvJhe)4^Z&i0F;MwylNE-o%6
aUgnAXNt(V<^J;+s#^CAd=d#Wzp$Py)*`5;s

literal 0
HcmV?d00001

diff --git a/assets/images/png/zoom/unlocked@3x.png b/assets/images/png/zoom/unlocked@3x.png
new file mode 100644
index 0000000000000000000000000000000000000000..25f9390fcfb33174c7b8bbd47706043f9f201db4
GIT binary patch
literal 634
zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@ZgvM!oCO|{#S9FJ79h;%I?XTvD9BhG
z6tp*KIv9g&Xab#IiERK?$ogUZH(l?>w&*P1YFUW|V2s}MM@qWJUw}qt>JvKE6*t?t$h!u-0>vIWWyV9)_
zy=YNE?6)786W@nws}%J}wZltOrlnc3
z-CbmP%pmDzv&^hyW!o1#Y`3H)?4MzJ(@gG}D38a%1`#5NX^b=X{Jv~5jWM*Y`b+?u
z^0exY4EvMf|K!z@)<9>FVdQ&MBb@0DCtGssI20

literal 0
HcmV?d00001

diff --git a/assets/images/png/zoom/unmute@2x.png b/assets/images/png/zoom/unmute@2x.png
new file mode 100644
index 0000000000000000000000000000000000000000..4c6d2393f3c69bb2466ca712cb59e961ffbaea21
GIT binary patch
literal 7451
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
Z{|7JK0PZ%-DvbaD002ovPDHLkV1jxkFu?!-

literal 0
HcmV?d00001

diff --git a/assets/images/png/zoom/unmute@3x.png b/assets/images/png/zoom/unmute@3x.png
new file mode 100644
index 0000000000000000000000000000000000000000..dad68fac22ed2751d3848544478b3030571b5e02
GIT binary patch
literal 13799
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%0D^vJ$camn!Z503^UXK^FY5`2
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 value == null);
-    log("uri: ${Uri.parse(url.trim())}");
-
-    log("body: ${json.encode(body)}");
 
     final bool networkStatus = await Utils.checkConnection(bypassConnectionCheck: bypassConnectionCheck);
 
@@ -204,7 +200,7 @@ class ApiClientImp implements ApiClient {
     final int statusCode = response.statusCode;
     log("uri: ${Uri.parse(url.trim())}");
     log("body: ${json.encode(body)}");
-    log("response.body: ${response.body}");
+    // log("response.body: ${response.body}");
     // log("response.body: ${response.body}");
     if (statusCode < 200 || statusCode >= 400) {
       onFailure('Error While Fetching data', statusCode, failureType: StatusCodeFailure("Error While Fetching data"));
diff --git a/lib/core/api_consts.dart b/lib/core/api_consts.dart
index 417519f..b92461e 100644
--- a/lib/core/api_consts.dart
+++ b/lib/core/api_consts.dart
@@ -710,7 +710,7 @@ var GET_PRESCRIPTION_INSTRUCTIONS_PDF = 'Services/ChatBot_Service.svc/REST/Chatb
 class ApiConsts {
   static const maxSmallScreen = 660;
 
-  static AppEnvironmentTypeEnum appEnvironmentType = AppEnvironmentTypeEnum.prod;
+  static AppEnvironmentTypeEnum appEnvironmentType = AppEnvironmentTypeEnum.uat;
 
   // static String baseUrl = 'https://uat.hmgwebservices.com/'; // HIS API URL UAT
 
@@ -749,7 +749,7 @@ class ApiConsts {
         baseUrl = "https://uat.hmgwebservices.com/";
         payFortEnvironment = FortEnvironment.test;
         applePayMerchantId = "merchant.com.hmgwebservices.uat";
-        SERVICE_URL = 'https://hmgwebservices.com/PayFortWeb/pages/SendPayFortRequest.aspx';
+        SERVICE_URL = 'https://uat.hmgwebservices.com/HMGPayment/pages/SendPayFortRequest.aspx';
         TAMARA_URL = "https://epharmacy.hmg.com/tamara/Home/Checkout";
         GET_TAMARA_INSTALLMENTS_URL = "https://epharmacy.hmg.com/tamara/Home/getinstallments";
         GET_TAMARA_PAYMENT_STATUS = 'https://epharmacy.hmg.com/tamara/api/OnlineTamara/order_status?orderid=';
@@ -759,7 +759,7 @@ class ApiConsts {
         baseUrl = "https://uat.hmgwebservices.com/";
         payFortEnvironment = FortEnvironment.test;
         applePayMerchantId = "merchant.com.hmgwebservices.uat";
-        SERVICE_URL = 'https://hmgwebservices.com/PayFortWeb/pages/SendPayFortRequest.aspx';
+        SERVICE_URL = 'https://uat.hmgwebservices.com/HMGPayment/pages/SendPayFortRequest.aspx';
         TAMARA_URL = "https://epharmacy.hmg.com/tamara/Home/Checkout";
         GET_TAMARA_INSTALLMENTS_URL = "https://epharmacy.hmg.com/tamara/Home/getinstallments";
         GET_TAMARA_PAYMENT_STATUS = 'https://epharmacy.hmg.com/tamara/api/OnlineTamara/order_status?orderid=';
@@ -779,7 +779,7 @@ class ApiConsts {
         baseUrl = "https://uat.hmgwebservices.com/";
         payFortEnvironment = FortEnvironment.test;
         applePayMerchantId = "merchant.com.hmgwebservices.uat";
-        SERVICE_URL = 'https://hmgwebservices.com/PayFortWeb/pages/SendPayFortRequest.aspx';
+        SERVICE_URL = 'https://uat.hmgwebservices.com/HMGPayment/pages/SendPayFortRequest.aspx';
         TAMARA_URL = "https://epharmacy.hmg.com/tamara/Home/Checkout";
         GET_TAMARA_INSTALLMENTS_URL = "https://epharmacy.hmg.com/tamara/Home/getinstallments";
         GET_TAMARA_PAYMENT_STATUS = 'https://epharmacy.hmg.com/tamara/api/OnlineTamara/order_status?orderid=';
@@ -789,7 +789,7 @@ class ApiConsts {
         baseUrl = "https://uat.hmgwebservices.com/";
         payFortEnvironment = FortEnvironment.test;
         applePayMerchantId = "merchant.com.hmgwebservices.uat";
-        SERVICE_URL = 'https://hmgwebservices.com/PayFortWeb/pages/SendPayFortRequest.aspx';
+        SERVICE_URL = 'https://uat.hmgwebservices.com/HMGPayment/pages/SendPayFortRequest.aspx';
         TAMARA_URL = "https://epharmacy.hmg.com/tamara/Home/Checkout";
         GET_TAMARA_INSTALLMENTS_URL = "https://epharmacy.hmg.com/tamara/Home/getinstallments";
         GET_TAMARA_PAYMENT_STATUS = 'https://epharmacy.hmg.com/tamara/api/OnlineTamara/order_status?orderid=';
diff --git a/lib/core/app_assets.dart b/lib/core/app_assets.dart
index 5fccc6e..613fba1 100644
--- a/lib/core/app_assets.dart
+++ b/lib/core/app_assets.dart
@@ -175,6 +175,8 @@ class AppAssets {
   static const String comprehensiveCheckup = '$svgBasePath/comprehensive_checkup.svg';
   static const String all_payment_method = '$svgBasePath/all_payment_method.svg';
   static const String ic_rrt_vehicle = '$svgBasePath/ic_rrt_vehicle.svg';
+  static const String doctor_profile_rating_icon = '$svgBasePath/doctor_profile_rating_icon.svg';
+  static const String doctor_profile_reviews_icon = '$svgBasePath/doctor_profile_reviews_icon.svg';
 
 
   //bottom navigation//
diff --git a/lib/core/cache_consts.dart b/lib/core/cache_consts.dart
index 66b38d4..bcbb185 100644
--- a/lib/core/cache_consts.dart
+++ b/lib/core/cache_consts.dart
@@ -74,4 +74,7 @@ class CacheConst {
   static const String patientOccupationList = 'patient-occupation-list';
   static const String hasEnabledQuickLogin = 'has-enabled-quick-login';
   static const String quickLoginEnabled = 'quick-login-enabled';
+
+  static const String zoomRoomID = 'zoom-room-id';
+  static String isAppOpenedFromCall = "is_app_opened_from_call";
 }
diff --git a/lib/core/utils/jwt.dart b/lib/core/utils/jwt.dart
new file mode 100644
index 0000000..f82c4e1
--- /dev/null
+++ b/lib/core/utils/jwt.dart
@@ -0,0 +1,38 @@
+import 'dart:math';
+
+import 'package:dart_jsonwebtoken/dart_jsonwebtoken.dart';
+import 'package:hmg_patient_app_new/core/utils/zoom_config.dart';
+
+String makeId(int length) {
+  String result = "";
+  String characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
+  int charactersLength = characters.length;
+  for (var i = 0; i < length; i++) {
+    result += characters[Random().nextInt(charactersLength)];
+  }
+  return result;
+}
+
+String generateJwt(String sessionName, String roleType) {
+  try {
+    var iat = DateTime.now();
+    var exp = DateTime.now().add(Duration(days: 2));
+    final jwt = JWT(
+      {
+        'app_key': configs["ZOOM_SDK_KEY"],
+        'version': 1,
+        'user_identity': makeId(10),
+        'iat': (iat.millisecondsSinceEpoch / 1000).round(),
+        'exp': (exp.millisecondsSinceEpoch / 1000).round(),
+        'tpc': sessionName,
+        'role_type': int.parse(roleType),
+        'cloud_recording_option': 1,
+      },
+    );
+    var token = jwt.sign(SecretKey(configs["ZOOM_SDK_SECRET"]));
+    return token;
+  } catch (e) {
+    print(e);
+    return '';
+  }
+}
diff --git a/lib/core/utils/push_notification_handler.dart b/lib/core/utils/push_notification_handler.dart
index 2e0d7c3..ee05335 100644
--- a/lib/core/utils/push_notification_handler.dart
+++ b/lib/core/utils/push_notification_handler.dart
@@ -8,14 +8,22 @@ import 'package:firebase_messaging/firebase_messaging.dart' as fir;
 import 'package:firebase_messaging/firebase_messaging.dart';
 import 'package:flutter/cupertino.dart';
 import 'package:flutter/material.dart';
+import 'package:flutter_callkit_incoming/entities/android_params.dart';
+import 'package:flutter_callkit_incoming/entities/call_kit_params.dart';
+import 'package:flutter_callkit_incoming/entities/ios_params.dart';
+import 'package:flutter_callkit_incoming/entities/notification_params.dart';
+import 'package:flutter_callkit_incoming/flutter_callkit_incoming.dart';
 import 'package:flutter_ios_voip_kit_karmm/call_state_type.dart';
 import 'package:flutter_ios_voip_kit_karmm/flutter_ios_voip_kit.dart';
 // import 'package:flutter_callkit_incoming/flutter_callkit_incoming.dart';
 
 import 'package:flutter_local_notifications/flutter_local_notifications.dart';
+import 'package:get_it/get_it.dart';
 import 'package:hmg_patient_app_new/core/utils/local_notifications.dart';
 import 'package:hmg_patient_app_new/core/utils/utils.dart';
+import 'package:hmg_patient_app_new/services/cache_service.dart';
 import 'package:permission_handler/permission_handler.dart';
+import 'package:uuid/uuid.dart';
 
 import '../cache_consts.dart';
 
@@ -36,16 +44,83 @@ Future backgroundMessageHandler(dynamic message) async {
 callPage(String sessionID, String token) async {}
 
 _incomingCall(Map data) async {
+  print('the value of the _incomingCall remote message is $data');
+
   // LandingPage.incomingCallData = IncomingCallData.fromJson(data);
   // var dataItem = await AppSharedPreferences().getObject('call_data');
   // if(dataItem != null ) return; // to stop repeated attempt to invoke the call
   // if (LandingPage.isOpenCallPage == false) {
   //   LandingPage.isOpenCallPage = true;
+
+  String roomID = data['session_id'] ?? '';
+
+  // GetIt.instance().saveString(key: CacheConst.zoomRoomID, value: roomID);
+  // GetIt.instance().saveBool(key: CacheConst.isAppOpenedFromCall, value: true);
+
+  Utils.saveStringFromPrefs(CacheConst.zoomRoomID, roomID);
+  Utils.saveBoolFromPrefs(CacheConst.isAppOpenedFromCall, true);
+
   WidgetsFlutterBinding.ensureInitialized();
-  // var _currentUuid = Uuid().v4();
-  // await FlutterCallkitIncoming.showCallkitIncoming(callKitParams);
-  // }
-  // LandingPage.isOpenCallPage = false;
+
+  var _currentUuid = Uuid().v4();
+  CallKitParams callKitParams = CallKitParams(
+    id: _currentUuid,
+    nameCaller: "Dr Al Habib",
+    appName: 'Dr Al Habib',
+    avatar: 'https://play-lh.googleusercontent.com/FBNNpxb7m6eM6wtW7MV1Ffp6OXOGLI38q47zcvP29OCYA1yhYH5mZzl5itZi0TgOyZpG',
+    // handle: LandingPage.incomingCallData.name,
+    type: 1,
+    textAccept: 'Accept',
+    textDecline: 'Decline',
+    missedCallNotification: NotificationParams(
+      showNotification: true,
+      isShowCallback: false,
+      subtitle: 'Missed call',
+      callbackText: '',
+    ),
+    callingNotification: const NotificationParams(
+      showNotification: false,
+      isShowCallback: true,
+      subtitle: 'Calling...',
+      callbackText: 'Hang Up',
+    ),
+    duration: 30000,
+    extra: {'userId': '1a2b3c4d'},
+    headers: {'apiKey': 'Abc@123!', 'platform': 'flutter'},
+    android: const AndroidParams(
+        isImportant: true,
+        isShowFullLockedScreen: true,
+        isCustomNotification: true,
+        isShowLogo: false,
+        logoUrl: "https://play-lh.googleusercontent.com/FBNNpxb7m6eM6wtW7MV1Ffp6OXOGLI38q47zcvP29OCYA1yhYH5mZzl5itZi0TgOyZpG",
+        ringtonePath: 'system_ringtone_default',
+        backgroundColor: '#ED1C2B',
+        backgroundUrl: 'https://saudipedia.com/en/saudipediaen/uploads/images/2024/08/02/97358.jpg',
+        actionColor: '#4CAF50',
+        textColor: '#000000',
+        incomingCallNotificationChannelName: "Incoming Call",
+        missedCallNotificationChannelName: "Missed Call",
+        isShowCallID: false),
+    ios: IOSParams(
+      iconName: 'Meena Health',
+      handleType: 'generic',
+      supportsVideo: true,
+      maximumCallGroups: 2,
+      maximumCallsPerCallGroup: 1,
+      audioSessionMode: 'default',
+      audioSessionActive: true,
+      audioSessionPreferredSampleRate: 44100.0,
+      audioSessionPreferredIOBufferDuration: 0.005,
+      supportsDTMF: true,
+      supportsHolding: true,
+      supportsGrouping: false,
+      supportsUngrouping: false,
+      ringtonePath: 'system_ringtone_default',
+    ),
+  );
+  FlutterCallkitIncoming.unsilenceEvents();
+  await FlutterCallkitIncoming.showCallkitIncoming(callKitParams);
+
   await Future.delayed(Duration(milliseconds: 500));
 }
 
@@ -224,7 +299,9 @@ class PushNotificationHandler {
         print('🎈 example: onDidAcceptIncomingCall $uuid - $callerId');
         await voIPKit.acceptIncomingCall(callerState: CallStateType.calling);
         await voIPKit.callConnected();
-        await Future.delayed(Duration(seconds: 1));
+        await Future.delayed(Duration(seconds: 2)).then((val) async {
+          await voIPKit.endCall();
+        });
 
         // Navigator.pushNamed(
         //   locator().navigatorKey.currentContext!,
@@ -232,8 +309,6 @@ class PushNotificationHandler {
         //   arguments: CallArguments("hoover-dam", "123", "Patient", "40", "1", false),
         // );
 
-        await voIPKit.endCall();
-
         // Navigator.pushNamed(navigatorKey.currentContext!, VIDEO_CALL_SCREEN,
         //     arguments: VideoArgus(
         //         reservationId: int.parse(callerId), token: null, isVideo: true));
diff --git a/lib/core/utils/utils.dart b/lib/core/utils/utils.dart
index e2c11d4..f1e1593 100644
--- a/lib/core/utils/utils.dart
+++ b/lib/core/utils/utils.dart
@@ -807,7 +807,11 @@ class Utils {
   static Future checkConnection({bool bypassConnectionCheck = false}) async {
     if (bypassConnectionCheck) return true;
     List connectivityResult = await (Connectivity().checkConnectivity());
-    if (connectivityResult.contains(ConnectivityResult.mobile) || connectivityResult.contains(ConnectivityResult.wifi)) {
+    if (connectivityResult.contains(ConnectivityResult.mobile) ||
+        connectivityResult.contains(ConnectivityResult.wifi) ||
+        connectivityResult.contains(ConnectivityResult.ethernet) ||
+        connectivityResult.contains(ConnectivityResult.bluetooth) ||
+        connectivityResult.contains(ConnectivityResult.vpn)) {
       return true;
     } else {
       return false;
diff --git a/lib/core/utils/zoom_config.dart b/lib/core/utils/zoom_config.dart
new file mode 100644
index 0000000..09370c0
--- /dev/null
+++ b/lib/core/utils/zoom_config.dart
@@ -0,0 +1,4 @@
+const Map configs = {
+  'ZOOM_SDK_KEY': 'b9T74nhfTg-ioP9urm970A',
+  'ZOOM_SDK_SECRET': 'KOzmjBNXQ1f4IPHpnngfL29uZvJMufSy2Fk8',
+};
diff --git a/lib/extensions/string_extensions.dart b/lib/extensions/string_extensions.dart
index 250453d..c2a4a87 100644
--- a/lib/extensions/string_extensions.dart
+++ b/lib/extensions/string_extensions.dart
@@ -301,14 +301,14 @@ extension EmailValidator on String {
             fontWeight: weight ?? (isBold ? FontWeight.bold : FontWeight.normal)),
       );
 
-  Widget toText28({Color? color, bool isBold = false, double? height, bool isCenter = false}) => Text(
+  Widget toText28({Color? color, bool isBold = false, double? height, bool isCenter = false, double? letterSpacing}) => Text(
         this,
         textAlign: isCenter ? TextAlign.center : null,
         style: TextStyle(
             height: height ?? 23 / 28,
             color: color ?? AppColors.blackColor,
             fontSize: 28.f,
-            letterSpacing: -1,
+            letterSpacing: letterSpacing ?? -1,
             fontWeight: isBold ? FontWeight.bold : FontWeight.normal),
       );
 
diff --git a/lib/features/book_appointments/book_appointments_view_model.dart b/lib/features/book_appointments/book_appointments_view_model.dart
index 5d5fc71..bcc88ff 100644
--- a/lib/features/book_appointments/book_appointments_view_model.dart
+++ b/lib/features/book_appointments/book_appointments_view_model.dart
@@ -349,8 +349,8 @@ class BookAppointmentsViewModel extends ChangeNotifier {
     result.fold(
       (failure) async {
         isDoctorsListLoading = false;
+        if (onError != null) onError("No doctors found for the search criteria".needTranslation);
 
-        onError!("No doctors found for the search criteria".needTranslation);
         notifyListeners();
       },
       (apiResponse) {
diff --git a/lib/features/immediate_livecare/immediate_livecare_view_model.dart b/lib/features/immediate_livecare/immediate_livecare_view_model.dart
index 7e2d7c9..1baa81b 100644
--- a/lib/features/immediate_livecare/immediate_livecare_view_model.dart
+++ b/lib/features/immediate_livecare/immediate_livecare_view_model.dart
@@ -151,18 +151,15 @@ class ImmediateLiveCareViewModel extends ChangeNotifier {
           if (patientLiveCareHistoryList.isNotEmpty) {
             if (patientLiveCareHistoryList[0].callStatus! < 4) {
               countdownDuration = Duration(seconds: 0);
-              durationNotifier.dispose();
               patientHasPendingLiveCareRequest = true;
               countdownDuration = Duration(minutes: patientLiveCareHistoryList.first.watingtimeInteger!, seconds: 0);
               durationNotifier = ValueNotifier(countdownDuration);
               startTimer();
             } else {
               patientHasPendingLiveCareRequest = false;
-              timer.cancel();
             }
           } else {
             patientHasPendingLiveCareRequest = false;
-            timer.cancel();
           }
           notifyListeners();
           if (onSuccess != null) {
diff --git a/lib/features/insurance/insurance_view_model.dart b/lib/features/insurance/insurance_view_model.dart
index 8460bd4..30f4c26 100644
--- a/lib/features/insurance/insurance_view_model.dart
+++ b/lib/features/insurance/insurance_view_model.dart
@@ -78,10 +78,12 @@ class InsuranceViewModel extends ChangeNotifier {
       // (failure) async => await errorHandlerService.handleError(failure: failure),
       (failure) async {
         isInsuranceLoading = false;
+        isInsuranceDataToBeLoaded = false;
         notifyListeners();
       },
       (apiResponse) {
         if (apiResponse.messageStatus == 2) {
+          isInsuranceDataToBeLoaded = false;
           // dialogService.showErrorDialog(message: apiResponse.errorMessage!, onOkPressed: () {});
         } else if (apiResponse.messageStatus == 1) {
           patientInsuranceList = apiResponse.data!;
diff --git a/lib/features/lab/lab_view_model.dart b/lib/features/lab/lab_view_model.dart
index 079471c..24aa244 100644
--- a/lib/features/lab/lab_view_model.dart
+++ b/lib/features/lab/lab_view_model.dart
@@ -77,14 +77,14 @@ class LabViewModel extends ChangeNotifier {
       required this.navigationService});
 
   initLabProvider() {
-    if (isLabNeedToLoad) {
+    // if (isLabNeedToLoad) {
       patientLabOrders.clear();
       filteredLabOrders.clear();
       labOrderTests.clear();
       isLabOrdersLoading = true;
       isLabResultsLoading = true;
       getPatientLabOrders();
-    }
+    // }
     notifyListeners();
   }
 
@@ -94,7 +94,7 @@ class LabViewModel extends ChangeNotifier {
   }
 
   Future getPatientLabOrders({Function(dynamic)? onSuccess, Function(String)? onError}) async {
-    if (!isLabNeedToLoad) return;
+    // if (!isLabNeedToLoad) return;
 
     isLabOrdersLoading = true;
     patientLabOrders.clear();
@@ -289,7 +289,7 @@ class LabViewModel extends ChangeNotifier {
     );
   }
 
-  Future getPatientLabResult(PatientLabOrdersResponseModel laborder, String procedureName, String testDescription) async {
+  Future getPatientLabResult(PatientLabOrdersResponseModel laborder, String procedureName, String testDescription, String unitOfMeasure) async {
     LoaderBottomSheet.showLoader();
     mainLabResults.clear();
     filteredGraphValues.clear();
@@ -339,6 +339,7 @@ class LabViewModel extends ChangeNotifier {
             } catch (e) {}
           });
           LabResult recentResult = recentThree.first;
+          recentResult.uOM = unitOfMeasure;
           checkIfGraphShouldBeDisplayed(recentResult);
           recentResult.verifiedOn = resultDate(DateUtil.convertStringToDate(recentResult.verifiedOnDateTime!));
           // filteredGraphValues = [filteredGraphValues.first];
diff --git a/lib/presentation/appointments/widgets/appointment_card.dart b/lib/presentation/appointments/widgets/appointment_card.dart
index 5d2ae5c..7bc9c62 100644
--- a/lib/presentation/appointments/widgets/appointment_card.dart
+++ b/lib/presentation/appointments/widgets/appointment_card.dart
@@ -124,19 +124,47 @@ class AppointmentCard extends StatelessWidget {
       crossAxisAlignment: CrossAxisAlignment.start,
       children: [
         Column(
+          crossAxisAlignment: CrossAxisAlignment.start,
           children: [
-            Image.network(
-              isLoading ? 'https://hmgwebservices.com/Images/MobileImages/DUBAI/unkown_female.png' : patientAppointmentHistoryResponseModel.doctorImageURL!,
-              width: 63.h,
-              height: 63.h,
-              fit: BoxFit.cover,
+            Stack(
+              children: [
+                Image.network(
+                  isLoading ? 'https://hmgwebservices.com/Images/MobileImages/DUBAI/unkown_female.png' : patientAppointmentHistoryResponseModel.doctorImageURL!,
+                  width: 63.w,
+                  height: 63.h,
+                  fit: BoxFit.cover,
+                ),
+                Positioned(
+                  bottom: 0,
+                  left: 0,
+                  right: 0,
+                  child: Container(
+                    width: 63.w,
+                    height: 20,
+                    color: AppColors.textColorLight.withValues(alpha: 0.25),
+                    child: Row(
+                      mainAxisAlignment: MainAxisAlignment.center,
+                      children: [
+                        Utils.buildSvgWithAssets(
+                          icon: AppAssets.rating_icon,
+                          width: 12.w,
+                          height: 12.h,
+                          fit: BoxFit.contain,
+                        ),
+                        SizedBox(width: 4.w),
+                        isLoading ? "Rating".toText12() : patientAppointmentHistoryResponseModel.decimalDoctorRate.toString().toText12(),
+                      ],
+                    ),
+                  ),
+                )
+              ],
             ).circle(100).toShimmer2(isShow: isLoading),
-            SizedBox(height: 12.h),
-            AppCustomChipWidget(
-                    icon: AppAssets.rating_icon,
-                    iconColor: AppColors.ratingColorYellow,
-                    labelText: isLoading ? "Rating" : "Rating: ${patientAppointmentHistoryResponseModel.decimalDoctorRate}".needTranslation)
-                .toShimmer2(isShow: isLoading),
+            // SizedBox(height: 12.h),
+            // AppCustomChipWidget(
+            //         icon: AppAssets.rating_icon,
+            //         iconColor: AppColors.ratingColorYellow,
+            //         labelText: isLoading ? "Rating" : "Rating: ${patientAppointmentHistoryResponseModel.decimalDoctorRate}".needTranslation)
+            //     .toShimmer2(isShow: isLoading),
           ],
         ),
         SizedBox(width: 16.h),
@@ -163,6 +191,12 @@ class AppointmentCard extends StatelessWidget {
                         ? 'Cardiology'
                         : "${DateUtil.formatDateToDate(DateUtil.convertStringToDate(patientAppointmentHistoryResponseModel.appointmentDate), false)} ${DateUtil.formatDateToTimeLang(DateUtil.convertStringToDate(patientAppointmentHistoryResponseModel.appointmentDate), false)}",
                   ).toShimmer2(isShow: isLoading),
+                  AppCustomChipWidget(
+                    isIconPNG: true,
+                    icon: getIt.get().getAuthenticatedUser()?.gender == 1 ? AppAssets.male_img : AppAssets.femaleImg,
+                    iconSize: 18.h,
+                    labelText: isLoading ? 'Cardiology' : "Patient: ${getIt.get().getAuthenticatedUser()!.firstName!}",
+                  ).toShimmer2(isShow: isLoading),
                   // if (!isFromMedicalReport)
                   //   AppCustomChipWidget(
                   //     icon: AppAssets.appointment_time_icon,
@@ -278,7 +312,6 @@ class AppointmentCard extends StatelessWidget {
               clinicId: patientAppointmentHistoryResponseModel.clinicID,
               onSuccess: (value) async {
                 if (value) {
-                  print("Doctor is available");
                   await myAppointmentsViewModel.getAskDoctorRequestTypes(onSuccess: (val) {
                     LoaderBottomSheet.hideLoader();
                     showCommonBottomSheetWithoutHeight(
diff --git a/lib/presentation/appointments/widgets/ask_doctor_request_type_select.dart b/lib/presentation/appointments/widgets/ask_doctor_request_type_select.dart
index 9f06a4d..69cdca3 100644
--- a/lib/presentation/appointments/widgets/ask_doctor_request_type_select.dart
+++ b/lib/presentation/appointments/widgets/ask_doctor_request_type_select.dart
@@ -79,15 +79,15 @@ class AskDoctorRequestTypeSelect extends StatelessWidget {
                 onPressed: () {
                   Navigator.pop(context);
                 },
-                backgroundColor: AppColors.primaryRedColor,
-                borderColor: AppColors.primaryRedColor,
-                textColor: AppColors.whiteColor,
+                backgroundColor: AppColors.secondaryLightRedColor,
+                borderColor: AppColors.secondaryLightRedColor,
+                textColor: AppColors.primaryRedColor,
                 icon: AppAssets.cancel,
-                iconColor: AppColors.whiteColor,
+                iconColor: AppColors.primaryRedColor,
                 borderRadius: 12.r,
-                iconSize: 14.h,
-                fontSize: 14.f,
-                height: 40.h,
+                iconSize: 16.5.h,
+                fontSize: 16.f,
+                height: 56.h,
               ),
             ),
             SizedBox(width: 8.h),
@@ -120,14 +120,15 @@ class AskDoctorRequestTypeSelect extends StatelessWidget {
                         LoaderBottomSheet.hideLoader();
                       });
                 },
-                backgroundColor: AppColors.bgGreenColor,
-                borderColor: AppColors.bgGreenColor,
-                textColor: Colors.white,
+                backgroundColor: AppColors.bgGreenColor.withValues(alpha: 0.20),
+                borderColor: AppColors.bgGreenColor.withValues(alpha: 0.0),
+                textColor: AppColors.bgGreenColor,
+                iconColor: AppColors.bgGreenColor,
                 icon: AppAssets.confirm,
-                iconSize: 14.h,
+                iconSize: 16.5.h,
                 borderRadius: 12.r,
-                fontSize: 14.f,
-                height: 40.h,
+                fontSize: 16.f,
+                height: 56.h,
               ),
             ),
           ],
diff --git a/lib/presentation/authentication/login.dart b/lib/presentation/authentication/login.dart
index 7e5f4a1..0fa995d 100644
--- a/lib/presentation/authentication/login.dart
+++ b/lib/presentation/authentication/login.dart
@@ -1,6 +1,7 @@
 import 'package:easy_localization/easy_localization.dart';
 import 'package:flutter/gestures.dart';
 import 'package:flutter/material.dart';
+import 'package:flutter/services.dart';
 import 'package:hmg_patient_app_new/core/app_assets.dart';
 import 'package:hmg_patient_app_new/core/app_state.dart';
 import 'package:hmg_patient_app_new/core/dependencies.dart';
@@ -154,7 +155,7 @@ class LoginScreenState extends State {
     required BuildContext context,
     required TextEditingController? phoneNumberController,
     required AuthenticationViewModel authViewModel,
-  }) {
+  }) async {
     AppState appState = getIt();
     context.showBottomSheet(
         isScrollControlled: true,
diff --git a/lib/presentation/book_appointment/book_appointment_page.dart b/lib/presentation/book_appointment/book_appointment_page.dart
index a66ea4d..8a0f7e7 100644
--- a/lib/presentation/book_appointment/book_appointment_page.dart
+++ b/lib/presentation/book_appointment/book_appointment_page.dart
@@ -2,20 +2,25 @@ import 'dart:async';
 
 import 'package:easy_localization/easy_localization.dart';
 import 'package:flutter/material.dart';
+import 'package:flutter_staggered_animations/flutter_staggered_animations.dart';
 import 'package:hmg_patient_app_new/core/app_assets.dart';
 import 'package:hmg_patient_app_new/core/app_state.dart';
 import 'package:hmg_patient_app_new/core/dependencies.dart';
+import 'package:hmg_patient_app_new/core/utils/size_config.dart';
 import 'package:hmg_patient_app_new/core/utils/size_utils.dart';
 import 'package:hmg_patient_app_new/core/utils/utils.dart';
 import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
 import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
 import 'package:hmg_patient_app_new/features/authentication/authentication_view_model.dart';
 import 'package:hmg_patient_app_new/features/book_appointments/book_appointments_view_model.dart';
+import 'package:hmg_patient_app_new/features/book_appointments/models/resp_models/doctors_list_response_model.dart';
 import 'package:hmg_patient_app_new/features/immediate_livecare/immediate_livecare_view_model.dart';
 import 'package:hmg_patient_app_new/features/my_appointments/appointment_via_region_viewmodel.dart';
+import 'package:hmg_patient_app_new/features/my_appointments/my_appointments_view_model.dart';
 import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
 import 'package:hmg_patient_app_new/presentation/appointments/widgets/faculity_selection/facility_type_selection_widget.dart';
 import 'package:hmg_patient_app_new/presentation/appointments/widgets/region_bottomsheet/region_list_widget.dart' show RegionBottomSheetBody;
+import 'package:hmg_patient_app_new/presentation/book_appointment/doctor_profile_page.dart';
 import 'package:hmg_patient_app_new/presentation/book_appointment/livecare/immediate_livecare_pending_request_page.dart';
 import 'package:hmg_patient_app_new/presentation/book_appointment/livecare/select_immediate_livecare_clinic_page.dart';
 import 'package:hmg_patient_app_new/presentation/book_appointment/search_doctor_by_name.dart';
@@ -86,6 +91,111 @@ class _BookAppointmentPageState extends State {
                 ).paddingSymmetrical(24.h, 0.h),
                 SizedBox(height: 24.h),
                 getSelectedTabData(bookAppointmentsVM.selectedTabIndex),
+                SizedBox(height: 24.h),
+                "Recent Visits".needTranslation.toText18(isBold: true).paddingSymmetrical(24.w, 0.h),
+                SizedBox(height: 16.h),
+                Consumer(builder: (context, myAppointmentsVM, child) {
+                  return myAppointmentsVM.isPatientMyDoctorsLoading
+                      ? Column(
+                    crossAxisAlignment: CrossAxisAlignment.center,
+                    children: [
+                      Image.network(
+                        "https://hmgwebservices.com/Images/MobileImages/DUBAI/unkown_female.png",
+                        width: 64.w,
+                        height: 64.h,
+                        fit: BoxFit.cover,
+                      ).circle(100).toShimmer2(isShow: true, radius: 50.r),
+                      SizedBox(height: 8.h),
+                      ("Dr. John Smith Smith Smith")
+                          .toString()
+                          .toText12(fontWeight: FontWeight.w500, isCenter: true, maxLine: 2)
+                          .toShimmer2(isShow: true),
+                    ],
+                  )
+                      : myAppointmentsVM.patientMyDoctorsList.isEmpty
+                      ? Container(
+                    width: SizeConfig.screenWidth,
+                    decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
+                      color: AppColors.whiteColor,
+                      borderRadius: 12.r,
+                      hasShadow: false,
+                    ),
+                    child: Utils.getNoDataWidget(
+                      context,
+                      noDataText: "You don't have any completed visits yet".needTranslation,
+                      isSmallWidget: true,
+                      width: 62.w,
+                      height: 62.h,
+                    ),
+                  ).paddingSymmetrical(24.w, 0.h)
+                      : SizedBox(
+                    height: 110.h,
+                    child: ListView.separated(
+                      scrollDirection: Axis.horizontal,
+                      itemCount: myAppointmentsVM.patientMyDoctorsList.length,
+                      shrinkWrap: true,
+                      padding: EdgeInsets.only(left: 24.w, right: 24.w),
+                      itemBuilder: (context, index) {
+                        return AnimationConfiguration.staggeredList(
+                          position: index,
+                          duration: const Duration(milliseconds: 1000),
+                          child: SlideAnimation(
+                            horizontalOffset: 100.0,
+                            child: FadeInAnimation(
+                              child: SizedBox(
+                                // width: 80.w,
+                                child: Column(
+                                  crossAxisAlignment: CrossAxisAlignment.center,
+                                  children: [
+                                    Image.network(
+                                      myAppointmentsVM.patientMyDoctorsList[index].doctorImageURL!,
+                                      width: 64.w,
+                                      height: 64.h,
+                                      fit: BoxFit.cover,
+                                    ).circle(100).toShimmer2(isShow: false, radius: 50.r),
+                                    SizedBox(height: 8.h),
+                                    SizedBox(
+                                      width: 80.w,
+                                      child: (myAppointmentsVM.patientMyDoctorsList[index].doctorName)
+                                          .toString()
+                                          .toText12(fontWeight: FontWeight.w500, isCenter: true, maxLine: 2)
+                                          .toShimmer2(isShow: false),
+                                    ),
+                                  ],
+                                ),
+                              ).onPress(() async {
+                                bookAppointmentsViewModel.setSelectedDoctor(DoctorsListResponseModel(
+                                  clinicID: myAppointmentsVM.patientMyDoctorsList[index].clinicID,
+                                  projectID: myAppointmentsVM.patientMyDoctorsList[index].projectID,
+                                  doctorID: myAppointmentsVM.patientMyDoctorsList[index].doctorID,
+                                ));
+                                LoaderBottomSheet.showLoader();
+                                await bookAppointmentsViewModel.getDoctorProfile(onSuccess: (dynamic respData) {
+                                  LoaderBottomSheet.hideLoader();
+                                  Navigator.of(context).push(
+                                    CustomPageRoute(
+                                      page: DoctorProfilePage(),
+                                    ),
+                                  );
+                                }, onError: (err) {
+                                  LoaderBottomSheet.hideLoader();
+                                  showCommonBottomSheetWithoutHeight(
+                                    context,
+                                    child: Utils.getErrorWidget(loadingText: err),
+                                    callBackFunc: () {},
+                                    isFullScreen: false,
+                                    isCloseButtonVisible: true,
+                                  );
+                                });
+                              }),
+                            ),
+                          ),
+                        );
+                      },
+                      separatorBuilder: (BuildContext cxt, int index) => SizedBox(width: 8.h),
+                    ),
+                  );
+                }),
               ],
             );
           }),
diff --git a/lib/presentation/book_appointment/doctor_profile_page.dart b/lib/presentation/book_appointment/doctor_profile_page.dart
index 1223842..c3f4ad9 100644
--- a/lib/presentation/book_appointment/doctor_profile_page.dart
+++ b/lib/presentation/book_appointment/doctor_profile_page.dart
@@ -48,6 +48,7 @@ class DoctorProfilePage extends StatelessWidget {
                       mainAxisAlignment: MainAxisAlignment.spaceBetween,
                       children: [
                         Row(
+                          crossAxisAlignment: CrossAxisAlignment.start,
                           children: [
                             Image.network(
                               bookAppointmentsViewModel.doctorsProfileResponseModel.doctorImageURL!,
@@ -59,9 +60,12 @@ class DoctorProfilePage extends StatelessWidget {
                             Column(
                               crossAxisAlignment: CrossAxisAlignment.start,
                               children: [
-                                ("${bookAppointmentsViewModel.doctorsProfileResponseModel.doctorTitleForProfile} ${bookAppointmentsViewModel.doctorsProfileResponseModel.doctorName}")
-                                    .toString()
-                                    .toText28(isBold: true),
+                                SizedBox(
+                                  width: 220.h,
+                                  child: ("${bookAppointmentsViewModel.doctorsProfileResponseModel.doctorTitleForProfile} ${bookAppointmentsViewModel.doctorsProfileResponseModel.doctorName}")
+                                      .toString()
+                                      .toText24(isBold: true),
+                                ),
                                 (bookAppointmentsViewModel.doctorsProfileResponseModel.specialty!.isNotEmpty ? bookAppointmentsViewModel.doctorsProfileResponseModel.specialty!.first : "")
                                     .toString()
                                     .toText18(weight: FontWeight.w500, color: AppColors.primaryRedColor),
@@ -80,18 +84,49 @@ class DoctorProfilePage extends StatelessWidget {
                     SizedBox(height: 12.h),
                     Wrap(
                       direction: Axis.horizontal,
-                      spacing: 3.h,
+                      spacing: 4.h,
                       runSpacing: 4.h,
                       children: [
                         AppCustomChipWidget(
-                          icon: AppAssets.rating_icon,
                           iconColor: AppColors.ratingColorYellow,
-                          labelText: "Rating: ${bookAppointmentsViewModel.doctorsProfileResponseModel.decimalDoctorRate}".needTranslation,
+                          labelText: "Branch: ${bookAppointmentsViewModel.doctorsProfileResponseModel.projectName}".needTranslation,
                         ),
                         AppCustomChipWidget(
-                          icon: AppAssets.rating_icon,
                           iconColor: AppColors.ratingColorYellow,
-                          labelText: "Reviews: ${bookAppointmentsViewModel.doctorsProfileResponseModel.noOfPatientsRate}".needTranslation,
+                          labelText: "Clinic: ${bookAppointmentsViewModel.doctorsProfileResponseModel.clinicDescription}".needTranslation,
+                        ),
+                      ],
+                    ),
+                    SizedBox(height: 24.h),
+                    Row(
+                      mainAxisAlignment: MainAxisAlignment.center,
+                      children: [
+                        Column(
+                          children: [
+                            Utils.buildSvgWithAssets(
+                              icon: AppAssets.doctor_profile_rating_icon,
+                              width: 48.w,
+                              height: 48.h,
+                              fit: BoxFit.contain,
+                            ),
+                            SizedBox(height: 16.h),
+                            "Ratings".toText12(fontWeight: FontWeight.w500, color: AppColors.greyTextColor),
+                            bookAppointmentsViewModel.doctorsProfileResponseModel.decimalDoctorRate.toString().toText16(isBold: true, color: AppColors.textColor),
+                          ],
+                        ),
+                        SizedBox(width: 36.w),
+                        Column(
+                          children: [
+                            Utils.buildSvgWithAssets(
+                              icon: AppAssets.doctor_profile_reviews_icon,
+                              width: 48.w,
+                              height: 48.h,
+                              fit: BoxFit.contain,
+                            ),
+                            SizedBox(height: 16.h),
+                            "Reviews".toText12(fontWeight: FontWeight.w500, color: AppColors.greyTextColor),
+                            bookAppointmentsViewModel.doctorsProfileResponseModel.noOfPatientsRate.toString().toText16(isBold: true, color: AppColors.textColor),
+                          ],
                         ),
                       ],
                     ),
diff --git a/lib/presentation/book_appointment/livecare/immediate_livecare_payment_details.dart b/lib/presentation/book_appointment/livecare/immediate_livecare_payment_details.dart
index af7d053..b586da1 100644
--- a/lib/presentation/book_appointment/livecare/immediate_livecare_payment_details.dart
+++ b/lib/presentation/book_appointment/livecare/immediate_livecare_payment_details.dart
@@ -13,13 +13,16 @@ import 'package:hmg_patient_app_new/features/book_appointments/book_appointments
 import 'package:hmg_patient_app_new/features/immediate_livecare/immediate_livecare_view_model.dart';
 import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
 import 'package:hmg_patient_app_new/presentation/book_appointment/livecare/immediate_livecare_payment_page.dart';
+import 'package:hmg_patient_app_new/presentation/book_appointment/livecare/immediate_livecare_pending_request_page.dart';
 import 'package:hmg_patient_app_new/presentation/book_appointment/livecare/widgets/select_livecare_call_type.dart';
+import 'package:hmg_patient_app_new/presentation/home/navigation_screen.dart';
 import 'package:hmg_patient_app_new/presentation/insurance/insurance_home_page.dart';
 import 'package:hmg_patient_app_new/theme/colors.dart';
 import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart';
 import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart';
 import 'package:hmg_patient_app_new/widgets/chip/app_custom_chip_widget.dart';
 import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart';
+import 'package:hmg_patient_app_new/widgets/loader/bottomsheet_loader.dart';
 import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart';
 import 'package:permission_handler/permission_handler.dart';
 import 'package:provider/provider.dart';
@@ -71,37 +74,17 @@ class ImmediateLiveCarePaymentDetails extends StatelessWidget {
                               children: [
                                 "${appState.getAuthenticatedUser()!.firstName} ${appState.getAuthenticatedUser()!.lastName}".toText16(isBold: true),
                                 SizedBox(height: 8.h),
-                                AppCustomChipWidget(labelText: "${appState.getAuthenticatedUser()!.age} Years Old"),
-                              ],
-                            ),
-                          ],
-                        ),
-                      ),
-                    ),
-                    SizedBox(height: 24.h),
-                    "Clinic Information".needTranslation.toText16(isBold: true),
-                    SizedBox(height: 16.h),
-                    Container(
-                      decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
-                        color: AppColors.whiteColor,
-                        borderRadius: 24.h,
-                        hasShadow: false,
-                      ),
-                      child: Padding(
-                        padding: EdgeInsets.all(16.h),
-                        child: Row(
-                          children: [
-                            Utils.buildSvgWithAssets(icon: AppAssets.generic_clinic_icon, width: 32.h, height: 32.h, fit: BoxFit.contain),
-                            SizedBox(width: 8.h),
-                            Column(
-                              crossAxisAlignment: CrossAxisAlignment.start,
-                              children: [
-                                (appState.isArabic()
-                                        ? immediateLiveCareViewModel.immediateLiveCareSelectedClinic.serviceNameN
-                                        : immediateLiveCareViewModel.immediateLiveCareSelectedClinic.serviceName)!
-                                    .toText16(isBold: true),
-                                // SizedBox(height: 8.h),
-                                // AppCustomChipWidget(labelText: "${appState.getAuthenticatedUser()!.age} Years Old"),
+                                Wrap(
+                                  direction: Axis.horizontal,
+                                  spacing: 3.h,
+                                  runSpacing: 4.h,
+                                  children: [
+                                    AppCustomChipWidget(labelText: "${appState.getAuthenticatedUser()!.age} Years Old".needTranslation),
+                                    AppCustomChipWidget(
+                                        labelText:
+                                            "${LocaleKeys.clinic.tr()}: ${(appState.isArabic() ? immediateLiveCareViewModel.immediateLiveCareSelectedClinic.serviceNameN : immediateLiveCareViewModel.immediateLiveCareSelectedClinic.serviceName)!}"),
+                                  ],
+                                ),
                               ],
                             ),
                           ],
@@ -220,15 +203,81 @@ class ImmediateLiveCarePaymentDetails extends StatelessWidget {
                         isSaudiCurrency: immediateLiveCareViewModel.liveCareImmediateAppointmentFeesList.currency!.toLowerCase() == "sar"),
                   ],
                 ).paddingSymmetrical(24.h, 0.h),
-                CustomButton(
-                  text: LocaleKeys.payNow.tr(context: context),
-                  onPressed: () async {
-                    await askVideoCallPermission().then((val) {
-                      if (val) {
-                        Navigator.of(context).push(
-                          CustomPageRoute(
-                            page: ImmediateLiveCarePaymentPage(),
-                          ),
+                (immediateLiveCareViewModel.liveCareImmediateAppointmentFeesList.total == "0" || immediateLiveCareViewModel.liveCareImmediateAppointmentFeesList.total == "0.0")
+                    ? CustomButton(
+                        text: LocaleKeys.confirmLiveCare.tr(context: context),
+                        onPressed: () async {
+                          await askVideoCallPermission().then((val) async {
+                            if (val) {
+                              LoaderBottomSheet.showLoader(loadingText: "Confirming LiveCare request, Please wait...".needTranslation);
+
+                              await immediateLiveCareViewModel.addNewCallRequestForImmediateLiveCare("${appState.getAuthenticatedUser()!.patientId}${DateTime.now().millisecondsSinceEpoch}");
+                              await immediateLiveCareViewModel.getPatientLiveCareHistory();
+                              LoaderBottomSheet.hideLoader();
+                              if (immediateLiveCareViewModel.patientHasPendingLiveCareRequest) {
+                                Navigator.pushAndRemoveUntil(
+                                    context,
+                                    CustomPageRoute(
+                                      page: LandingNavigation(),
+                                    ),
+                                    (r) => false);
+                                Navigator.of(context).push(
+                                  CustomPageRoute(
+                                    page: ImmediateLiveCarePendingRequestPage(),
+                                  ),
+                                );
+                              } else {
+                                showCommonBottomSheetWithoutHeight(
+                                  context,
+                                  child: Utils.getErrorWidget(loadingText: "Unknown error occurred...".needTranslation),
+                                  callBackFunc: () {},
+                                  isFullScreen: false,
+                                  isCloseButtonVisible: true,
+                                );
+                              }
+                            } else {
+                              showCommonBottomSheetWithoutHeight(
+                                title: LocaleKeys.notice.tr(context: context),
+                                context,
+                                child: Utils.getWarningWidget(
+                                    loadingText:
+                                        "LiveCare requires Camera, Microphone, Location & Notifications permissions to enable virtual consultation between patient & doctor, Please allow these to proceed."
+                                            .needTranslation,
+                                    isShowActionButtons: true,
+                                    onCancelTap: () {
+                                      Navigator.pop(context);
+                                    },
+                                    onConfirmTap: () async {
+                                      openAppSettings();
+                                    }),
+                                callBackFunc: () {},
+                                isFullScreen: false,
+                                isCloseButtonVisible: true,
+                              );
+                            }
+                          });
+                        },
+                        backgroundColor: AppColors.successColor,
+                        borderColor: AppColors.successColor,
+                        textColor: AppColors.whiteColor,
+                        fontSize: 16,
+                        fontWeight: FontWeight.w500,
+                        borderRadius: 12,
+                        padding: EdgeInsets.fromLTRB(10, 0, 10, 0),
+                        height: 50.h,
+                        icon: AppAssets.livecare_book_icon,
+                        iconColor: AppColors.whiteColor,
+                        iconSize: 18.h,
+                      ).paddingSymmetrical(24.h, 24.h)
+                    : CustomButton(
+                        text: LocaleKeys.payNow.tr(context: context),
+                        onPressed: () async {
+                          await askVideoCallPermission().then((val) {
+                            if (val) {
+                              Navigator.of(context).push(
+                                CustomPageRoute(
+                                  page: ImmediateLiveCarePaymentPage(),
+                                ),
                         );
                       } else {
                         showCommonBottomSheetWithoutHeight(
@@ -236,16 +285,17 @@ class ImmediateLiveCarePaymentDetails extends StatelessWidget {
                           context,
                           child: Utils.getWarningWidget(
                               loadingText:
-                                  "LiveCare requires Camera, Microphone & Location permissions to enable virtual consultation between patient & doctor, Please allow these to proceed.".needTranslation,
-                              isShowActionButtons: true,
-                              onCancelTap: () {
-                                Navigator.pop(context);
-                              },
-                              onConfirmTap: () async {
-                                openAppSettings();
-                              }),
-                          callBackFunc: () {},
-                          isFullScreen: false,
+                                        "LiveCare requires Camera, Microphone, Location & Notifications permissions to enable virtual consultation between patient & doctor, Please allow these to proceed."
+                                            .needTranslation,
+                                    isShowActionButtons: true,
+                                    onCancelTap: () {
+                                      Navigator.pop(context);
+                                    },
+                                    onConfirmTap: () async {
+                                      openAppSettings();
+                                    }),
+                                callBackFunc: () {},
+                                isFullScreen: false,
                           isCloseButtonVisible: true,
                         );
                       }
@@ -272,12 +322,9 @@ class ImmediateLiveCarePaymentDetails extends StatelessWidget {
   }
 
   Future askVideoCallPermission() async {
-    Map statuses = await [
-      Permission.camera,
-      Permission.microphone,
-    ].request();
+    Map statuses = await [Permission.camera, Permission.microphone, Permission.notification].request();
 
-    if (statuses[Permission.camera] == PermissionStatus.granted && statuses[Permission.microphone] == PermissionStatus.granted) {
+    if (statuses[Permission.camera] == PermissionStatus.granted && statuses[Permission.microphone] == PermissionStatus.granted && statuses[Permission.notification] == PermissionStatus.granted) {
       // Camera permission granted
       return true;
     } else {
diff --git a/lib/presentation/book_appointment/livecare/select_immediate_livecare_clinic_page.dart b/lib/presentation/book_appointment/livecare/select_immediate_livecare_clinic_page.dart
index 8181d25..15598f3 100644
--- a/lib/presentation/book_appointment/livecare/select_immediate_livecare_clinic_page.dart
+++ b/lib/presentation/book_appointment/livecare/select_immediate_livecare_clinic_page.dart
@@ -66,35 +66,6 @@ class _SelectImmediateLiveCareClinicPageState extends State(builder: (context, immediateLiveCareVM, child) {
               return Column(
                 children: [
-                  // SizedBox(height: 16.h),
-                  // TextInputWidget(
-                  //   labelText: LocaleKeys.search.tr(context: context),
-                  //   hintText: LocaleKeys.clinicName.tr(context: context),
-                  //   controller: searchEditingController,
-                  //   isEnable: true,
-                  //   prefix: null,
-                  //   autoFocus: false,
-                  //   isBorderAllowed: false,
-                  //   keyboardType: TextInputType.text,
-                  //   focusNode: textFocusNode,
-                  //   suffix: searchEditingController.text.isNotEmpty
-                  //       ? GestureDetector(
-                  //           onTap: () {
-                  //             searchEditingController.clear();
-                  //             bookAppointmentsViewModel.filterClinics("");
-                  //             textFocusNode.unfocus();
-                  //           },
-                  //           child: Utils.buildSvgWithAssets(icon: AppAssets.close_bottom_sheet_icon, width: 20.h, height: 20.h, fit: BoxFit.scaleDown),
-                  //         )
-                  //       : null,
-                  //   onChange: (value) {
-                  //     bookAppointmentsViewModel.filterClinics(value!);
-                  //   },
-                  //   padding: EdgeInsets.symmetric(
-                  //     vertical: ResponsiveExtension(10).h,
-                  //     horizontal: ResponsiveExtension(15).h,
-                  //   ),
-                  // ),
                   ListView.separated(
                     padding: EdgeInsets.only(top: 16.h),
                     shrinkWrap: true,
diff --git a/lib/presentation/book_appointment/livecare/widgets/livecare_clinic_card.dart b/lib/presentation/book_appointment/livecare/widgets/livecare_clinic_card.dart
index 7385c6b..3913f10 100644
--- a/lib/presentation/book_appointment/livecare/widgets/livecare_clinic_card.dart
+++ b/lib/presentation/book_appointment/livecare/widgets/livecare_clinic_card.dart
@@ -12,6 +12,7 @@ import 'package:hmg_patient_app_new/features/immediate_livecare/models/resp_mode
 import 'package:hmg_patient_app_new/features/immediate_livecare/immediate_livecare_view_model.dart';
 import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
 import 'package:hmg_patient_app_new/theme/colors.dart';
+import 'package:hmg_patient_app_new/widgets/chip/app_custom_chip_widget.dart';
 
 class LiveCareClinicCard extends StatelessWidget {
   LiveCareClinicCard({super.key, required this.liveCareClinicListResponseModel, required this.isLoading, required this.immediateLiveCareViewModel});
@@ -34,20 +35,12 @@ class LiveCareClinicCard extends StatelessWidget {
         children: [
           Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [
             Utils.buildSvgWithAssets(icon: AppAssets.generic_clinic_icon, width: 24.h, height: 24.h, fit: BoxFit.contain).toShimmer2(isShow: isLoading),
-            Column(
-              children: [
-                Utils.buildSvgWithAssets(
-                        icon: AppAssets.livecare_online_icon,
-                        width: 16.h,
-                        height: 16.h,
-                        fit: BoxFit.contain,
-                        iconColor: liveCareClinicListResponseModel.isOnline == 1 ? AppColors.successColor : AppColors.primaryRedColor)
-                    .toShimmer2(isShow: isLoading),
-                SizedBox(height: 4.h),
-                liveCareClinicListResponseModel.isOnline == 1
-                    ? LocaleKeys.online.tr(context: context).toText10(isBold: true, color: AppColors.successColor).toShimmer2(isShow: isLoading)
-                    : "Offline".toText10(isBold: true, color: AppColors.primaryRedColor).toShimmer2(isShow: isLoading),
-              ],
+            AppCustomChipWidget(
+              icon: AppAssets.livecare_online_icon,
+              iconColor: AppColors.whiteColor,
+              richText: (liveCareClinicListResponseModel.isOnline == 1 ? LocaleKeys.online.tr(context: context) : "Offline".needTranslation).toText10(isBold: true, color: AppColors.whiteColor),
+              backgroundColor: liveCareClinicListResponseModel.isOnline == 1 ? AppColors.successColor : AppColors.primaryRedColor,
+              textColor: AppColors.whiteColor,
             ),
           ]),
           SizedBox(height: 8.h),
diff --git a/lib/presentation/book_appointment/livecare/widgets/select_livecare_call_type.dart b/lib/presentation/book_appointment/livecare/widgets/select_livecare_call_type.dart
index 226ac50..e4d69b1 100644
--- a/lib/presentation/book_appointment/livecare/widgets/select_livecare_call_type.dart
+++ b/lib/presentation/book_appointment/livecare/widgets/select_livecare_call_type.dart
@@ -1,10 +1,14 @@
 import 'package:flutter/cupertino.dart';
 import 'package:hmg_patient_app_new/core/app_assets.dart';
+import 'package:hmg_patient_app_new/core/app_state.dart';
+import 'package:hmg_patient_app_new/core/dependencies.dart';
 import 'package:hmg_patient_app_new/core/utils/size_utils.dart';
+import 'package:hmg_patient_app_new/core/utils/utils.dart';
 import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
 import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
 import 'package:hmg_patient_app_new/features/book_appointments/book_appointments_view_model.dart';
 import 'package:hmg_patient_app_new/features/immediate_livecare/immediate_livecare_view_model.dart';
+import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
 import 'package:hmg_patient_app_new/presentation/medical_file/widgets/medical_file_card.dart';
 import 'package:hmg_patient_app_new/theme/colors.dart';
 
@@ -16,46 +20,30 @@ class SelectLiveCareCallType extends StatelessWidget {
   @override
   Widget build(BuildContext context) {
     //TODO: Replace with actual icons
-    return GridView(
-      gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
-        crossAxisCount: 3,
-        crossAxisSpacing: 16,
-        mainAxisSpacing: 16,
-        mainAxisExtent: 130,
-      ),
-      physics: NeverScrollableScrollPhysics(),
-      padding: EdgeInsets.zero,
-      shrinkWrap: true,
+    return Column(
       children: [
-        MedicalFileCard(
-          label: "Video     Call".needTranslation,
-          textColor: AppColors.blackColor,
-          backgroundColor: AppColors.whiteColor,
-          svgIcon: AppAssets.eye_result_icon,
-          isLargeText: true,
-          iconSize: 36.h,
+        checkInOptionCard(
+          AppAssets.checkin_location_icon,
+          "Video Call".needTranslation,
+          "View your nearest HMG locations".needTranslation,
         ).onPress(() {
           Navigator.of(context).pop();
           immediateLiveCareViewModel.setLiveCareSelectedCallType(1);
         }),
-        MedicalFileCard(
-          label: "Audio        Call".needTranslation,
-          textColor: AppColors.blackColor,
-          backgroundColor: AppColors.whiteColor,
-          svgIcon: AppAssets.allergy_info_icon,
-          isLargeText: true,
-          iconSize: 36.h,
+        SizedBox(height: 16.h),
+        checkInOptionCard(
+          AppAssets.checkin_location_icon,
+          "Audio Call".needTranslation,
+          "Provide your feedback on our services".needTranslation,
         ).onPress(() {
           Navigator.of(context).pop();
           immediateLiveCareViewModel.setLiveCareSelectedCallType(2);
         }),
-        MedicalFileCard(
-          label: "Phone       Call".needTranslation,
-          textColor: AppColors.blackColor,
-          backgroundColor: AppColors.whiteColor,
-          svgIcon: AppAssets.vaccine_info_icon,
-          isLargeText: true,
-          iconSize: 36.h,
+        SizedBox(height: 16.h),
+        checkInOptionCard(
+          AppAssets.checkin_location_icon,
+          "Phone Call".needTranslation,
+          "Live chat option with HMG".needTranslation,
         ).onPress(() {
           Navigator.of(context).pop();
           immediateLiveCareViewModel.setLiveCareSelectedCallType(3);
@@ -63,4 +51,45 @@ class SelectLiveCareCallType extends StatelessWidget {
       ],
     );
   }
+
+  Widget checkInOptionCard(String icon, String title, String subTitle) {
+    return Container(
+      decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
+        color: AppColors.whiteColor,
+        borderRadius: 20.r,
+        hasShadow: false,
+      ),
+      child: Column(
+        crossAxisAlignment: CrossAxisAlignment.start,
+        children: [
+          Utils.buildSvgWithAssets(icon: icon, width: 40.h, height: 40.h, fit: BoxFit.fill),
+          SizedBox(height: 16.h),
+          Row(
+            mainAxisAlignment: MainAxisAlignment.spaceBetween,
+            children: [
+              Expanded(
+                child: Column(
+                  crossAxisAlignment: CrossAxisAlignment.start,
+                  children: [
+                    title.toText16(isBold: true, color: AppColors.textColor),
+                    subTitle.toText12(fontWeight: FontWeight.w500, color: AppColors.greyTextColor),
+                  ],
+                ),
+              ),
+              Transform.flip(
+                flipX: getIt.get().isArabic(),
+                child: Utils.buildSvgWithAssets(
+                  icon: AppAssets.forward_arrow_icon_small,
+                  iconColor: AppColors.blackColor,
+                  width: 18.h,
+                  height: 13.h,
+                  fit: BoxFit.contain,
+                ),
+              ),
+            ],
+          ),
+        ],
+      ).paddingAll(16.h),
+    );
+  }
 }
diff --git a/lib/presentation/home/landing_page.dart b/lib/presentation/home/landing_page.dart
index fe0268d..47f8118 100644
--- a/lib/presentation/home/landing_page.dart
+++ b/lib/presentation/home/landing_page.dart
@@ -40,6 +40,8 @@ import 'package:hmg_patient_app_new/presentation/home/widgets/small_service_card
 import 'package:hmg_patient_app_new/presentation/home/widgets/welcome_widget.dart';
 import 'package:hmg_patient_app_new/presentation/medical_file/medical_file_page.dart';
 import 'package:hmg_patient_app_new/presentation/profile_settings/profile_settings.dart';
+import 'package:hmg_patient_app_new/presentation/tele_consultation/zoom/call_screen.dart';
+import 'package:hmg_patient_app_new/routes/app_routes.dart';
 import 'package:hmg_patient_app_new/services/cache_service.dart';
 import 'package:hmg_patient_app_new/theme/colors.dart';
 import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart';
@@ -93,13 +95,13 @@ class _LandingPageState extends State {
       if (appState.isAuthenticated) {
         habibWalletVM.initHabibWalletProvider();
         habibWalletVM.getPatientBalanceAmount();
+        immediateLiveCareViewModel.initImmediateLiveCare();
+        immediateLiveCareViewModel.getPatientLiveCareHistory();
         myAppointmentsViewModel.initAppointmentsViewModel();
         myAppointmentsViewModel.getPatientAppointments(true, false);
         myAppointmentsViewModel.getPatientMyDoctors();
         prescriptionsViewModel.initPrescriptionsViewModel();
         insuranceViewModel.initInsuranceProvider();
-        immediateLiveCareViewModel.initImmediateLiveCare();
-        immediateLiveCareViewModel.getPatientLiveCareHistory();
         emergencyServicesViewModel.checkPatientERAdvanceBalance();
       }
     });
@@ -140,10 +142,19 @@ class _LandingPageState extends State {
                           text: LocaleKeys.loginOrRegister.tr(context: context),
                           onPressed: () async {
                             await authVM.onLoginPressed();
+
+                            // Navigator.pushReplacementNamed(
+                            //   // context,
+                            //   context,
+                            //   AppRoutes.zoomCallPage,
+                            //   // arguments: CallArguments(appointmentID, "111", "Patient", "40", "1", true, 1),
+                            //   arguments: CallArguments("test123", "123", "Patient", "40", "0", true, 1),
+                            //   // arguments: CallArguments("SmallDailyStandup9875", "123", "Patient", "40", "0", false, int.parse(widget.incomingCallData!.appointmentNo!)),
+                            // );
                           },
-                          backgroundColor: Color(0xffFEE9EA),
-                          borderColor: Color(0xffFEE9EA),
-                          textColor: Color(0xffED1C2B),
+                          backgroundColor: AppColors.secondaryLightRedColor,
+                          borderColor: AppColors.secondaryLightRedColor,
+                          textColor: AppColors.primaryRedColor,
                           fontSize: 14.f,
                           fontWeight: FontWeight.w500,
                           borderRadius: 12.r,
@@ -203,8 +214,8 @@ class _LandingPageState extends State {
                           Navigator.of(context).push(CustomPageRoute(page: MyAppointmentsPage()));
                         }),
                         SizedBox(height: 16.h),
-                        Consumer(
-                          builder: (context, myAppointmentsVM, child) {
+                        Consumer2(
+                          builder: (context, myAppointmentsVM, immediateLiveCareVM, child) {
                             return myAppointmentsVM.isMyAppointmentsLoading
                                 ? Container(
                                     decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
@@ -248,14 +259,14 @@ class _LandingPageState extends State {
                                             indicatorLayout: PageIndicatorLayout.COLOR,
                                             axisDirection: AxisDirection.right,
                                             controller: _controller,
-                                            itemHeight: 270.h,
+                                            itemHeight: 255.h,
                                             pagination: SwiperPagination(
                                               alignment: Alignment.bottomCenter,
-                                              margin: EdgeInsets.only(top: 250.h + 8 + 24),
+                                              margin: EdgeInsets.only(top: 240.h + 8 + 24),
                                               builder: DotSwiperPaginationBuilder(color: Color(0xffD9D9D9), activeColor: AppColors.blackBgColor),
                                             ),
                                             itemBuilder: (BuildContext context, int index) {
-                                              return (immediateLiveCareViewModel.patientHasPendingLiveCareRequest && index == 0)
+                                              return (immediateLiveCareVM.patientHasPendingLiveCareRequest && index == 0)
                                                   ? Column(
                                                       children: [
                                                         SizedBox(height: 12.h),
@@ -279,7 +290,7 @@ class _LandingPageState extends State {
                                                                     Row(
                                                                       children: [
                                                                         AppCustomChipWidget(
-                                                                          labelText: immediateLiveCareViewModel.patientLiveCareHistoryList[0].stringCallStatus,
+                                                                          labelText: immediateLiveCareVM.patientLiveCareHistoryList[0].stringCallStatus,
                                                                           backgroundColor: AppColors.warningColorYellow.withValues(alpha: 0.20),
                                                                           textColor: AppColors.alertColor,
                                                                         ),
@@ -287,7 +298,7 @@ class _LandingPageState extends State {
                                                                         AppCustomChipWidget(
                                                                             icon: AppAssets.appointment_calendar_icon,
                                                                             labelText: DateUtil.formatDateToDate(
-                                                                                DateUtil.convertStringToDate(immediateLiveCareViewModel.patientLiveCareHistoryList[0].arrivalTime), false)),
+                                                                                DateUtil.convertStringToDate(immediateLiveCareVM.patientLiveCareHistoryList[0].arrivalTime), false)),
                                                                       ],
                                                                     ),
                                                                     Utils.buildSvgWithAssets(icon: AppAssets.waiting_icon, width: 24.h, height: 24.h),
@@ -297,7 +308,7 @@ class _LandingPageState extends State {
                                                                 SizedBox(height: 10.h),
                                                                 "Hala ${appState.getAuthenticatedUser()!.firstName}!!!".needTranslation.toText16(isBold: true),
                                                                 SizedBox(height: 8.h),
-                                                                "Your turn is after ${immediateLiveCareViewModel.patientLiveCareHistoryList[0].patCount} patients.".toText14(isBold: true),
+                                                                "Your turn is after ${immediateLiveCareVM.patientLiveCareHistoryList[0].patCount} patients.".toText14(isBold: true),
                                                                 SizedBox(height: 8.h),
                                                                 Column(
                                                                   crossAxisAlignment: CrossAxisAlignment.start,
@@ -305,7 +316,7 @@ class _LandingPageState extends State {
                                                                     "Expected waiting time: ".toText12(isBold: true),
                                                                     SizedBox(height: 8.h),
                                                                     ValueListenableBuilder(
-                                                                      valueListenable: immediateLiveCareViewModel.durationNotifier,
+                                                                      valueListenable: immediateLiveCareVM.durationNotifier,
                                                                       builder: (context, duration, child) {
                                                                         return Column(
                                                                           mainAxisAlignment: MainAxisAlignment.center,
@@ -561,7 +572,7 @@ class _LandingPageState extends State {
                     Navigator.of(context).push(CustomPageRoute(page: ServicesPage()));
                   }),
                 ],
-              ).paddingSymmetrical(24.h, 0.h),
+              ).paddingSymmetrical(24.w, 0.h),
               SizedBox(
                 height: 340.h,
                 child: ListView.separated(
@@ -613,7 +624,7 @@ class _LandingPageState extends State {
                 cacheService.saveBool(key: CacheConst.quickLoginEnabled, value: true);
                 setState(() {});
                 await Future.delayed(Duration(milliseconds: 3000)).then((value) {
-                  Navigator.pop(context);
+                  if (mounted) Navigator.pop(context);
                 });
               });
             },
diff --git a/lib/presentation/lab/lab_orders_page.dart b/lib/presentation/lab/lab_orders_page.dart
index 184f713..81c507f 100644
--- a/lib/presentation/lab/lab_orders_page.dart
+++ b/lib/presentation/lab/lab_orders_page.dart
@@ -1 +1 @@
-import 'dart:async';

import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_staggered_animations/flutter_staggered_animations.dart';
import 'package:hmg_patient_app_new/core/app_state.dart';
import 'package:hmg_patient_app_new/core/dependencies.dart';
import 'package:hmg_patient_app_new/core/enums.dart';
import 'package:hmg_patient_app_new/core/utils/size_utils.dart';
import 'package:hmg_patient_app_new/core/utils/utils.dart';
import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
import 'package:hmg_patient_app_new/features/lab/models/resp_models/patient_lab_orders_response_model.dart';
import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
import 'package:hmg_patient_app_new/features/lab/lab_view_model.dart';
import 'package:hmg_patient_app_new/presentation/lab/lab_order_by_test.dart';
import 'package:hmg_patient_app_new/presentation/lab/lab_result_item_view.dart';
import 'package:hmg_patient_app_new/presentation/lab/lab_result_via_clinic/LabResultByClinic.dart';
import 'package:hmg_patient_app_new/presentation/lab/search_lab_report.dart';
import 'package:hmg_patient_app_new/theme/colors.dart';
import 'package:hmg_patient_app_new/widgets/chip/custom_chip_widget.dart';
import 'package:hmg_patient_app_new/widgets/date_range_selector/viewmodel/date_range_view_model.dart';
import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart';
import 'package:hmg_patient_app_new/widgets/transitions/fade_page.dart';
import 'package:provider/provider.dart';
import 'package:hmg_patient_app_new/widgets/custom_tab_bar.dart';
import '../../widgets/appbar/collapsing_list_view.dart';

class LabOrdersPage extends StatefulWidget {
  const LabOrdersPage({super.key});

  @override
  State createState() => _LabOrdersPageState();
}

class _LabOrdersPageState extends State {
  late LabViewModel labProvider;
  late DateRangeSelectorRangeViewModel rangeViewModel;
  late AppState _appState;
  List?> labSuggestions = [];
  int? expandedIndex;
  String? selectedFilterText = '';
  int activeIndex = 0;

  @override
  void initState() {
    scheduleMicrotask(() {
      // labProvider.initLabProvider();
    });
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    labProvider = Provider.of(context, listen: false);
    rangeViewModel = Provider.of(context);
    _appState = getIt();

    return Scaffold(
        backgroundColor: AppColors.bgScaffoldColor,
        body: CollapsingListView(
          title: LocaleKeys.labResults.tr(),
          search: () async {
            final lavVM = Provider.of(context, listen: false);
            if (lavVM.isLabOrdersLoading) {
              return;
            } else {
              String? value = await Navigator.of(context).push(
                CustomPageRoute(
                  page: SearchLabResultsContent(labSuggestionsList: lavVM.labSuggestions),
                  fullScreenDialog: true,
                  direction: AxisDirection.down,
                ),
              );
              if (value != null) {
                selectedFilterText = value;
                lavVM.filterLabReports(value);
              }
            }
          },
          child: SingleChildScrollView(
            padding: EdgeInsets.all(24.h),
            physics: NeverScrollableScrollPhysics(),
            child: Consumer(
              builder: (context, model, child) {
                return Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: [
                    CustomTabBar(
                      activeTextColor: Color(0xffED1C2B),
                      activeBackgroundColor: Color(0xffED1C2B).withValues(alpha: .1),
                      tabs: [
                        CustomTabBarModel(null, "By Visit".needTranslation),
                        CustomTabBarModel(null, "By Test".needTranslation),
                        // CustomTabBarModel(null, "Completed".needTranslation),
                      ],
                      onTabChange: (index) {
                        activeIndex = index;
                        setState(() {});
                      },
                    ),
                    SizedBox(height: 8.h),
                    selectedFilterText!.isNotEmpty
                        ? CustomChipWidget(
                            chipText: selectedFilterText!,
                            chipType: ChipTypeEnum.alert,
                            isSelected: true,
                          )
                        : SizedBox(),
                    activeIndex == 0
                        ? ListView.builder(
                            shrinkWrap: true,
                            physics: NeverScrollableScrollPhysics(),
                            padding: EdgeInsets.zero,
                            itemCount: model.isLabOrdersLoading
                                ? 5
                                : model.patientLabOrders.isNotEmpty
                                    ? model.patientLabOrders.length
                                    : 1,
                            itemBuilder: (context, index) {
                              final isExpanded = expandedIndex == index;
                              return model.isLabOrdersLoading
                                  ? LabResultItemView(
                                      onTap: () {},
                                      labOrder: null,
                                      index: index,
                                      isLoading: true,
                                    )
                                  : model.patientLabOrders.isNotEmpty
                                      ? AnimationConfiguration.staggeredList(
                                          position: index,
                                          duration: const Duration(milliseconds: 500),
                                          child: SlideAnimation(
                                            verticalOffset: 100.0,
                                            child: FadeInAnimation(
                                                child: LabResultItemView(
                                                    onTap: () {
                                                      model.currentlySelectedPatientOrder =
                                                          model.patientLabOrders[
                                                              index];
                                                    labProvider.getPatientLabResultByHospital(model.patientLabOrders[
                                                                    index]);
                                                        labProvider
                                                            .getPatientSpecialResult(
                                                                model.patientLabOrders[
                                                                    index]);
                                                      Navigator.push(
                                                          context,
                                                          CustomPageRoute(
                                                          page: LabResultByClinic(labOrder: model.patientLabOrders[index]),
                                                        ));
                                                    },
                                                    labOrder: model.patientLabOrders[index],
                                                    index: index,
                                                  isExpanded: isExpanded),
                                            ),
                                          ),
                                        )
                                      : Utils.getNoDataWidget(context, noDataText: "You don't have any lab results yet.".needTranslation);
                            },
                          )
                        : ListView.builder(
                            shrinkWrap: true,
                            physics: NeverScrollableScrollPhysics(),
                            padding: EdgeInsets.zero,
                            itemCount: model.isLabOrdersLoading
                                ? 5
                                : model.uniqueTests.toList().isNotEmpty
                                    ? model.uniqueTests.toList().length
                                    : 1,
                            itemBuilder: (context, index) {
                              final isExpanded = expandedIndex == index;
                              return model.isLabOrdersLoading
                                  ? LabResultItemView(
                                      onTap: () {},
                                      labOrder: null,
                                      index: index,
                                      isLoading: true,
                                    )
                                  : model.uniqueTests.toList().isNotEmpty
                                      ? AnimationConfiguration.staggeredList(
                                          position: index,
                                          duration: const Duration(milliseconds: 500),
                                          child: SlideAnimation(
                                            verticalOffset: 100.0,
                                            child: FadeInAnimation(
                                                child: LabOrderByTest(
                                                    appState: _appState,
                                                    onTap: () {
                                                      if (model.uniqueTests.toList()[index].model != null) {
                                                        rangeViewModel.flush();
                                                        model.getPatientLabResult(model.uniqueTests.toList()[index].model!, model.uniqueTests.toList()[index].description!,
                                                            (_appState.isArabic() ? model.uniqueTests.toList()[index].testDescriptionAr! : model.uniqueTests.toList()[index].testDescriptionEn!));
                                                      }
                                                    },
                                                    tests: model.uniqueTests.toList()[index],
                                                    index: index,
                                                isExpanded: isExpanded)),
                                      ),
                                        )
                                      : Utils.getNoDataWidget(context, noDataText: "You don't have any lab results yet.".needTranslation);
                            },
                          )
                  ],
                );
              },
            ),
          ),
        ));
  }

  Color getLabOrderStatusColor(num status) {
    switch (status) {
      case 44:
        return AppColors.warningColorYellow;
      case 45:
        return AppColors.warningColorYellow;
      case 16:
        return AppColors.successColor;
      case 17:
        return AppColors.successColor;
      default:
        return AppColors.greyColor;
    }
  }

  String getLabOrderStatusText(num status) {
    switch (status) {
      case 44:
        return LocaleKeys.resultsPending.tr(context: context);
      case 45:
        return LocaleKeys.resultsPending.tr(context: context);
      case 16:
        return LocaleKeys.resultsAvailable.tr(context: context);
      case 17:
        return LocaleKeys.resultsAvailable.tr(context: context);
      default:
        return "";
    }
  }

  getLabSuggestions(LabViewModel model) {
    if (model.patientLabOrders.isEmpty) {
      return [];
    }
    return model.patientLabOrders.map((m) => m.testDetails).toList();
  }
}
\ No newline at end of file
+import 'dart:async';

import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_staggered_animations/flutter_staggered_animations.dart';
import 'package:hmg_patient_app_new/core/app_state.dart';
import 'package:hmg_patient_app_new/core/dependencies.dart';
import 'package:hmg_patient_app_new/core/enums.dart';
import 'package:hmg_patient_app_new/core/utils/size_utils.dart';
import 'package:hmg_patient_app_new/core/utils/utils.dart';
import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
import 'package:hmg_patient_app_new/features/lab/models/resp_models/patient_lab_orders_response_model.dart';
import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
import 'package:hmg_patient_app_new/features/lab/lab_view_model.dart';
import 'package:hmg_patient_app_new/presentation/lab/lab_order_by_test.dart';
import 'package:hmg_patient_app_new/presentation/lab/lab_result_item_view.dart';
import 'package:hmg_patient_app_new/presentation/lab/lab_result_via_clinic/LabResultByClinic.dart';
import 'package:hmg_patient_app_new/presentation/lab/search_lab_report.dart';
import 'package:hmg_patient_app_new/theme/colors.dart';
import 'package:hmg_patient_app_new/widgets/chip/custom_chip_widget.dart';
import 'package:hmg_patient_app_new/widgets/date_range_selector/viewmodel/date_range_view_model.dart';
import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart';
import 'package:hmg_patient_app_new/widgets/transitions/fade_page.dart';
import 'package:provider/provider.dart';
import 'package:hmg_patient_app_new/widgets/custom_tab_bar.dart';
import '../../widgets/appbar/collapsing_list_view.dart';

class LabOrdersPage extends StatefulWidget {
  const LabOrdersPage({super.key});

  @override
  State createState() => _LabOrdersPageState();
}

class _LabOrdersPageState extends State {
  late LabViewModel labProvider;
  late DateRangeSelectorRangeViewModel rangeViewModel;
  late AppState _appState;
  List?> labSuggestions = [];
  int? expandedIndex;
  String? selectedFilterText = '';
  int activeIndex = 0;

  @override
  void initState() {
    scheduleMicrotask(() {
      labProvider.initLabProvider();
    });
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    labProvider = Provider.of(context, listen: false);
    rangeViewModel = Provider.of(context);
    _appState = getIt();

    return Scaffold(
        backgroundColor: AppColors.bgScaffoldColor,
        body: CollapsingListView(
          title: LocaleKeys.labResults.tr(),
          search: () async {
            final lavVM = Provider.of(context, listen: false);
            if (lavVM.isLabOrdersLoading) {
              return;
            } else {
              String? value = await Navigator.of(context).push(
                CustomPageRoute(
                  page: SearchLabResultsContent(labSuggestionsList: lavVM.labSuggestions),
                  fullScreenDialog: true,
                  direction: AxisDirection.down,
                ),
              );
              if (value != null) {
                selectedFilterText = value;
                lavVM.filterLabReports(value);
              }
            }
          },
          child: SingleChildScrollView(
            padding: EdgeInsets.all(24.h),
            physics: NeverScrollableScrollPhysics(),
            child: Consumer(
              builder: (context, model, child) {
                return Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: [
                    CustomTabBar(
                      activeTextColor: Color(0xffED1C2B),
                      activeBackgroundColor: Color(0xffED1C2B).withValues(alpha: .1),
                      tabs: [
                        CustomTabBarModel(null, "By Visit".needTranslation),
                        CustomTabBarModel(null, "By Test".needTranslation),
                        // CustomTabBarModel(null, "Completed".needTranslation),
                      ],
                      onTabChange: (index) {
                        activeIndex = index;
                        setState(() {});
                      },
                    ),
                    SizedBox(height: 8.h),
                    selectedFilterText!.isNotEmpty
                        ? CustomChipWidget(
                            chipText: selectedFilterText!,
                            chipType: ChipTypeEnum.alert,
                            isSelected: true,
                          )
                        : SizedBox(),
                    activeIndex == 0
                        ? ListView.builder(
                            shrinkWrap: true,
                            physics: NeverScrollableScrollPhysics(),
                            padding: EdgeInsets.zero,
                            itemCount: model.isLabOrdersLoading
                                ? 5
                                : model.patientLabOrders.isNotEmpty
                                    ? model.patientLabOrders.length
                                    : 1,
                            itemBuilder: (context, index) {
                              final isExpanded = expandedIndex == index;
                              return model.isLabOrdersLoading
                                  ? LabResultItemView(
                                      onTap: () {},
                                      labOrder: null,
                                      index: index,
                                      isLoading: true,
                                    )
                                  : model.patientLabOrders.isNotEmpty
                                      ? AnimationConfiguration.staggeredList(
                                          position: index,
                                          duration: const Duration(milliseconds: 500),
                                          child: SlideAnimation(
                                            verticalOffset: 100.0,
                                            child: FadeInAnimation(
                                                child: LabResultItemView(
                                                    onTap: () {
                                                      model.currentlySelectedPatientOrder =
                                                          model.patientLabOrders[
                                                              index];
                                                    labProvider.getPatientLabResultByHospital(model.patientLabOrders[
                                                                    index]);
                                                        labProvider
                                                            .getPatientSpecialResult(
                                                                model.patientLabOrders[
                                                                    index]);
                                                      Navigator.push(
                                                          context,
                                                          CustomPageRoute(
                                                          page: LabResultByClinic(labOrder: model.patientLabOrders[index]),
                                                        ));
                                                    },
                                                    labOrder: model.patientLabOrders[index],
                                                    index: index,
                                                  isExpanded: isExpanded),
                                            ),
                                          ),
                                        )
                                      : Utils.getNoDataWidget(context, noDataText: "You don't have any lab results yet.".needTranslation);
                            },
                          )
                        : ListView.builder(
                            shrinkWrap: true,
                            physics: NeverScrollableScrollPhysics(),
                            padding: EdgeInsets.zero,
                            itemCount: model.isLabOrdersLoading
                                ? 5
                                : model.uniqueTests.toList().isNotEmpty
                                    ? model.uniqueTests.toList().length
                                    : 1,
                            itemBuilder: (context, index) {
                              final isExpanded = expandedIndex == index;
                              return model.isLabOrdersLoading
                                  ? LabResultItemView(
                                      onTap: () {},
                                      labOrder: null,
                                      index: index,
                                      isLoading: true,
                                    )
                                  : model.uniqueTests.toList().isNotEmpty
                                      ? AnimationConfiguration.staggeredList(
                                          position: index,
                                          duration: const Duration(milliseconds: 500),
                                          child: SlideAnimation(
                                            verticalOffset: 100.0,
                                            child: FadeInAnimation(
                                                child: LabOrderByTest(
                                                    appState: _appState,
                                                    onTap: () {
                                                      if (model.uniqueTests.toList()[index].model != null) {
                                                        rangeViewModel.flush();
                                                        model.getPatientLabResult(model.uniqueTests.toList()[index].model!, model.uniqueTests.toList()[index].description!,
                                                            (_appState.isArabic() ? model.uniqueTests.toList()[index].testDescriptionAr! : model.uniqueTests.toList()[index].testDescriptionEn!), "");
                                                      }
                                                    },
                                                    tests: model.uniqueTests.toList()[index],
                                                    index: index,
                                                isExpanded: isExpanded)),
                                      ),
                                        )
                                      : Utils.getNoDataWidget(context, noDataText: "You don't have any lab results yet.".needTranslation);
                            },
                          )
                  ],
                );
              },
            ),
          ),
        ));
  }

  Color getLabOrderStatusColor(num status) {
    switch (status) {
      case 44:
        return AppColors.warningColorYellow;
      case 45:
        return AppColors.warningColorYellow;
      case 16:
        return AppColors.successColor;
      case 17:
        return AppColors.successColor;
      default:
        return AppColors.greyColor;
    }
  }

  String getLabOrderStatusText(num status) {
    switch (status) {
      case 44:
        return LocaleKeys.resultsPending.tr(context: context);
      case 45:
        return LocaleKeys.resultsPending.tr(context: context);
      case 16:
        return LocaleKeys.resultsAvailable.tr(context: context);
      case 17:
        return LocaleKeys.resultsAvailable.tr(context: context);
      default:
        return "";
    }
  }

  getLabSuggestions(LabViewModel model) {
    if (model.patientLabOrders.isEmpty) {
      return [];
    }
    return model.patientLabOrders.map((m) => m.testDetails).toList();
  }
}
\ No newline at end of file
diff --git a/lib/presentation/lab/lab_result_via_clinic/LabResultList.dart b/lib/presentation/lab/lab_result_via_clinic/LabResultList.dart
index 8893ffd..3f05443 100644
--- a/lib/presentation/lab/lab_result_via_clinic/LabResultList.dart
+++ b/lib/presentation/lab/lab_result_via_clinic/LabResultList.dart
@@ -26,7 +26,7 @@ class LabResultList extends StatelessWidget {
               shrinkWrap: true,itemCount: list.length,itemBuilder: (____, index) {
             var labItem = list[index];
             return LabOrderResultItem(onTap: () {
-                      model.getPatientLabResult(model.currentlySelectedPatientOrder!, labItem.description ?? "", labItem.packageShortDescription!);
+                      model.getPatientLabResult(model.currentlySelectedPatientOrder!, labItem.description ?? "", labItem.packageShortDescription!, labItem.uOM ?? "");
                     },
                 tests: labItem,
                 index: index,
diff --git a/lib/presentation/lab/lab_results/lab_result_details.dart b/lib/presentation/lab/lab_results/lab_result_details.dart
index 2330d0d..67eae63 100644
--- a/lib/presentation/lab/lab_results/lab_result_details.dart
+++ b/lib/presentation/lab/lab_results/lab_result_details.dart
@@ -59,115 +59,72 @@ class LabResultDetails extends StatelessWidget {
           Column(
             crossAxisAlignment: CrossAxisAlignment.start,
             children: [
-              Text(
-                recentLabResult.testCode ?? "",
-                style: TextStyle(
-                    fontSize: 32,
-                    fontFamily: 'Poppins',
-                    fontWeight: FontWeight.w600,
-                    color: AppColors.textColor,
-                    letterSpacing: -2),
-              ),
-              Text(
-                "Result of ${recentLabResult.verifiedOn ?? ""}".needTranslation,
-                style: TextStyle(
-                  fontSize: 12,
-                  fontFamily: 'Poppins',
-                  fontWeight: FontWeight.w500,
-                  color: AppColors.greyTextColor,
-                ),
+              Row(
+                mainAxisAlignment: MainAxisAlignment.spaceBetween,
+                children: [
+                  (recentLabResult.testCode ?? "").toText28(isBold: true, color: AppColors.textColor, letterSpacing: -2),
+                  Visibility(
+                    visible: recentLabResult.checkIfGraphShouldBeDisplayed() == true,
+                    child: Column(
+                      spacing: 6.h,
+                      children: [
+                        context
+                            .read()
+                            .getSeverityText(
+                              recentLabResult.calculatedResultFlag ?? "",
+                            )
+                            .tr()
+                            .toText10(weight: FontWeight.w500, color: AppColors.greyTextColor),
+                        Utils.buildSvgWithAssets(
+                            icon: AppAssets.lab_result_indicator,
+                            width: 21,
+                            height: 23,
+                            iconColor: context.read().getColor(
+                                  recentLabResult.calculatedResultFlag ?? "",
+                                )),
+                      ],
+                    ),
+                  ),
+                ],
               ),
+              SizedBox(height: 4.h),
+              ("Result of ${recentLabResult.verifiedOn ?? ""}".needTranslation).toText11(weight: FontWeight.w500, color: AppColors.greyTextColor),
             ],
           ),
-          //todo change the text color according to the provided test values
           Row(
             crossAxisAlignment: CrossAxisAlignment.center,
-
             children: [
               Expanded(
                 child: Row(
-
                   mainAxisSize: MainAxisSize.max,
                   children: [
                     Flexible(
-                      child: Text(
-                        "${recentLabResult.resultValue} ${recentLabResult.uOM}" ??
-                            "",
-                        style: TextStyle(
-                          fontSize: 24.f,
-                          fontWeight: FontWeight.w600,
-                          fontFamily: 'Poppins',
+                      child: ("${recentLabResult.resultValue} ${recentLabResult.uOM}" ?? "").toText28(
+                          isBold: true,
                           color: context.read().getColor(
                                 recentLabResult.calculatedResultFlag ?? "",
-                          ),
-                          letterSpacing: -2,
-                        ),
-                        overflow: TextOverflow.ellipsis, // prevent overflow
-                        maxLines: 1,
-                        softWrap: false,
-                      ),
+                              ),
+                          letterSpacing: -2),
                     ),
                     SizedBox(width: 4.h,),
-                    Expanded(
-                      flex: 2,
-                      child: Visibility(
-                        visible: recentLabResult.referanceRange != null,
-                        child: Text(
-                          "(Reference range ${recentLabResult.referanceRange})".needTranslation,
-                          style: TextStyle(
-                            fontSize: 12.f,
-                            fontWeight: FontWeight.w500,
-                            fontFamily: 'Poppins',
-                            color: AppColors.greyTextColor,
-                          ),
-                          // overflow: TextOverflow.ellipsis,
-                          // maxLines: 2,
-                          softWrap: true,
-                        ),
-                      ),
-                    ),
-                  ],
-                ),
-              ),
-              Visibility(
-                visible:
-                    recentLabResult.checkIfGraphShouldBeDisplayed() == true,
-                child: Column(
-                  spacing: 6.h,
-                  children: [
-                    context
-                        .read()
-                        .getSeverityText(
-                          recentLabResult.calculatedResultFlag ?? "",
-                        )
-                        .tr()
-                        .toText10(
-                            weight: FontWeight.w500,
-                            color: AppColors.greyTextColor),
-                    Utils.buildSvgWithAssets(
-                        icon: AppAssets.lab_result_indicator,
-                        width: 21,
-                        height: 23,
-                        iconColor: context.read().getColor(
-                              recentLabResult.calculatedResultFlag ?? "",
-                            )),
                   ],
                 ),
               ),
-              // SizedBox(
-              //   width: 21,
-              //   child: Utils.buildSvgWithAssets(
-              //     icon: AppAssets.lab_result_indicator,
-              //     width: 21,
-              //     height: 23,
-              //     iconColor: context.read().getColor(
-              //           recentLabResult.calculatedResultFlag ?? "",
-              //     ),
-              //   ),
-              // ),
             ],
-          )
-
+          ),
+          Visibility(
+            visible: recentLabResult.referanceRange != null,
+            child: Text(
+              "Reference range: \n${recentLabResult.referanceRange!.trim()}".needTranslation,
+              style: TextStyle(
+                fontSize: 12.f,
+                fontWeight: FontWeight.w500,
+                fontFamily: 'Poppins',
+                color: AppColors.greyTextColor,
+              ),
+              softWrap: true,
+            ),
+          ),
         ],
       ));
 
diff --git a/lib/presentation/medical_file/medical_file_page.dart b/lib/presentation/medical_file/medical_file_page.dart
index 1652812..7b5341c 100644
--- a/lib/presentation/medical_file/medical_file_page.dart
+++ b/lib/presentation/medical_file/medical_file_page.dart
@@ -225,9 +225,9 @@ class _MedicalFilePageState extends State {
                       ),
                       AppCustomChipWidget(
                         icon: AppAssets.blood_icon,
-                        labelText: "Blood: ${appState.getUserBloodGroup.isEmpty ? "N/A" : appState.getUserBloodGroup.isEmpty}",
+                        labelText: "Blood: ${appState.getUserBloodGroup.isEmpty ? "N/A" : appState.getUserBloodGroup.isEmpty}".needTranslation,
                         iconColor: AppColors.primaryRedColor,
-                        labelPadding: EdgeInsetsDirectional.only(end: 8.w),
+                        labelPadding: EdgeInsetsDirectional.only(end: 4.w, start: 0.w),
                       ),
                       Consumer(builder: (context, insuranceVM, child) {
                         return AppCustomChipWidget(
@@ -390,6 +390,7 @@ class _MedicalFilePageState extends State {
                         : ListView.separated(
                             scrollDirection: Axis.horizontal,
                             shrinkWrap: true,
+                            padding: EdgeInsets.only(left: 24.w, right: 24.w),
                             itemCount: myAppointmentsVM.patientAppointmentsHistoryList.length,
                             itemBuilder: (context, index) {
                               return AnimationConfiguration.staggeredList(
@@ -440,9 +441,9 @@ class _MedicalFilePageState extends State {
                                 ),
                               );
                             },
-                            separatorBuilder: (BuildContext cxt, int index) => SizedBox(width: 12.h),
+                            separatorBuilder: (BuildContext cxt, int index) => SizedBox(width: 16.w),
                           ),
-              ).paddingSymmetrical(24.w, 0);
+              );
             }),
             SizedBox(height: 24.h),
             "Lab & Radiology".needTranslation.toText18(isBold: true).paddingSymmetrical(24.w, 0.h),
@@ -695,11 +696,12 @@ class _MedicalFilePageState extends State {
                           ),
                         ).paddingSymmetrical(24.w, 0.h)
                       : SizedBox(
-                          height: 100.h,
+                          height: 110.h,
                           child: ListView.separated(
                             scrollDirection: Axis.horizontal,
                             itemCount: myAppointmentsVM.patientMyDoctorsList.length,
                             shrinkWrap: true,
+                            padding: EdgeInsets.only(left: 24.w, right: 24.w),
                             itemBuilder: (context, index) {
                               return AnimationConfiguration.staggeredList(
                                 position: index,
@@ -719,7 +721,8 @@ class _MedicalFilePageState extends State {
                                             fit: BoxFit.cover,
                                           ).circle(100).toShimmer2(isShow: false, radius: 50.r),
                                           SizedBox(height: 8.h),
-                                          Expanded(
+                                          SizedBox(
+                                            width: 80.w,
                                             child: (myAppointmentsVM.patientMyDoctorsList[index].doctorName)
                                                 .toString()
                                                 .toText12(fontWeight: FontWeight.w500, isCenter: true, maxLine: 2)
@@ -758,7 +761,7 @@ class _MedicalFilePageState extends State {
                             },
                             separatorBuilder: (BuildContext cxt, int index) => SizedBox(width: 8.h),
                           ),
-                        ).paddingSymmetrical(24.w, 0);
+                        );
             }),
             SizedBox(height: 24.h),
             "Others".needTranslation.toText18(isBold: true).paddingSymmetrical(24.w, 0.h),
diff --git a/lib/presentation/medical_file/widgets/medical_file_appointment_card.dart b/lib/presentation/medical_file/widgets/medical_file_appointment_card.dart
index 037860f..1b09dd5 100644
--- a/lib/presentation/medical_file/widgets/medical_file_appointment_card.dart
+++ b/lib/presentation/medical_file/widgets/medical_file_appointment_card.dart
@@ -53,7 +53,7 @@ class MedicalFileAppointmentCard extends StatelessWidget {
         ).toShimmer2(isShow: myAppointmentsViewModel.isMyAppointmentsLoading),
         SizedBox(height: 16.h),
         Container(
-          decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24.r, hasShadow: true),
+          decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24.r, hasShadow: false),
           width: 200.w,
           child: Column(
             crossAxisAlignment: CrossAxisAlignment.start,
diff --git a/lib/presentation/medical_file/widgets/medical_file_card.dart b/lib/presentation/medical_file/widgets/medical_file_card.dart
index 8c38363..6343e2a 100644
--- a/lib/presentation/medical_file/widgets/medical_file_card.dart
+++ b/lib/presentation/medical_file/widgets/medical_file_card.dart
@@ -29,7 +29,7 @@ class MedicalFileCard extends StatelessWidget {
       decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
         color: backgroundColor,
         borderRadius: 12.r,
-        hasShadow: true
+        hasShadow: false
       ),
       padding: EdgeInsets.all(12.w),
       child: Column(
diff --git a/lib/presentation/tele_consultation/zoom/call_screen.dart b/lib/presentation/tele_consultation/zoom/call_screen.dart
new file mode 100644
index 0000000..21ad42f
--- /dev/null
+++ b/lib/presentation/tele_consultation/zoom/call_screen.dart
@@ -0,0 +1,1840 @@
+import 'dart:async';
+import 'dart:convert';
+import 'dart:io';
+
+import 'package:flutter/cupertino.dart';
+import 'package:flutter/foundation.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter/services.dart';
+import 'package:flutter_hooks/flutter_hooks.dart';
+import 'package:flutter_ios_voip_kit_karmm/flutter_ios_voip_kit.dart';
+import 'package:flutter_zoom_videosdk/flutter_zoom_view.dart';
+import 'package:flutter_zoom_videosdk/native/zoom_videosdk.dart';
+import 'package:flutter_zoom_videosdk/native/zoom_videosdk_camera_device.dart';
+import 'package:flutter_zoom_videosdk/native/zoom_videosdk_cmd_channel.dart';
+import 'package:flutter_zoom_videosdk/native/zoom_videosdk_event_listener.dart';
+import 'package:flutter_zoom_videosdk/native/zoom_videosdk_live_transcription_message_info.dart';
+import 'package:flutter_zoom_videosdk/native/zoom_videosdk_share_action.dart';
+import 'package:flutter_zoom_videosdk/native/zoom_videosdk_user.dart';
+import 'package:get_it/get_it.dart';
+import 'package:hmg_patient_app_new/core/app_export.dart';
+import 'package:hmg_patient_app_new/core/cache_consts.dart';
+import 'package:hmg_patient_app_new/core/utils/jwt.dart';
+import 'package:hmg_patient_app_new/core/utils/utils.dart';
+import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
+import 'package:hmg_patient_app_new/presentation/home/navigation_screen.dart';
+import 'package:hmg_patient_app_new/presentation/tele_consultation/zoom/video_view.dart';
+import 'package:hmg_patient_app_new/services/cache_service.dart';
+import 'package:hmg_patient_app_new/theme/colors.dart';
+import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart';
+import 'package:image_picker/image_picker.dart';
+
+class CallScreen extends StatefulHookWidget {
+  const CallScreen({Key? key}) : super(key: key);
+
+  @override
+  State createState() => _CallScreenState();
+}
+
+class _CallScreenState extends State {
+  static TextEditingController changeNameController = TextEditingController();
+  double opacityLevel = 1.0;
+
+  final voIPKit = FlutterIOSVoIPKit.instance;
+
+  bool isScreenBeingShared = false;
+
+  void _changeOpacity() {
+    setState(() => opacityLevel = opacityLevel == 0 ? 1.0 : 0.0);
+  }
+
+  @override
+  Widget build(BuildContext context) {
+    var zoom = ZoomVideoSdk();
+    var eventListener = ZoomVideoSdkEventListener();
+    var isInSession = useState(false);
+    var sessionName = useState('');
+    var sessionPassword = useState('');
+    var users = useState([]);
+    var fullScreenUser = useState(null);
+    var sharingUser = useState(null);
+    var videoInfo = useState('');
+    var isSharing = useState(false);
+    var isMuted = useState(true);
+    var isVideoOn = useState(false);
+    var isSpeakerOn = useState(false);
+    var isRenameModalVisible = useState(false);
+    var isRecordingStarted = useState(false);
+    var isMicOriginalOn = useState(false);
+    var isMounted = useIsMounted();
+    var audioStatusFlag = useState(false);
+    var videoStatusFlag = useState(false);
+    var userNameFlag = useState(false);
+    var userShareStatusFlag = useState(false);
+    var isReceiveSpokenLanguageContentEnabled = useState(false);
+    var isVideoMirrored = useState(false);
+    var isOriginalAspectRatio = useState(false);
+    var isPiPView = useState(false);
+    var isSharedCamera = useState(false);
+    CameraShareView cameraShareView = const CameraShareView(creationParams: {});
+
+    //hide status bar
+    SystemChrome.setEnabledSystemUIMode(SystemUiMode.leanBack);
+    var circleButtonSize = 65.0;
+    Color backgroundColor = const Color(0xFF232323);
+    Color buttonBackgroundColor = const Color.fromRGBO(0, 0, 0, 0.6);
+    Color chatTextColor = const Color(0xFFAAAAAA);
+    Widget changeNamePopup;
+    final args = ModalRoute.of(context)!.settings.arguments as CallArguments;
+
+    useEffect(() {
+      Future.microtask(() async {
+        var token = generateJwt(args.sessionName, args.role);
+
+        Utils.removeFromPrefs(CacheConst.isAppOpenedFromCall);
+
+        try {
+          Map SDKaudioOptions = {"connect": true, "mute": false, "autoAdjustSpeakerVolume": false};
+          Map SDKvideoOptions = {
+            "localVideoOn": true,
+          };
+          JoinSessionConfig joinSession = JoinSessionConfig(
+            sessionName: args.sessionName,
+            sessionPassword: args.sessionPwd,
+            token: token,
+            userName: args.displayName,
+            audioOptions: SDKaudioOptions,
+            videoOptions: SDKvideoOptions,
+            sessionIdleTimeoutMins: int.parse(args.sessionIdleTimeoutMins),
+          );
+          await zoom.joinSession(joinSession);
+        } catch (e) {
+          const AlertDialog(
+            title: Text("Error"),
+            content: Text("Failed to join the session"),
+          );
+          Future.delayed(const Duration(milliseconds: 1000)).asStream().listen((event) {
+            Navigator.pushAndRemoveUntil(
+                context,
+                CustomPageRoute(
+                  page: LandingNavigation(),
+                ),
+                (r) => false);
+          });
+        }
+      });
+      return null;
+    }, []);
+
+    useEffect(() {
+      final sessionJoinListener = eventListener.addListener(EventType.onSessionJoin, (data) async {
+        data = data as Map;
+        isInSession.value = true;
+        zoom.session.getSessionName().then((value) => sessionName.value = value!);
+        sessionPassword.value = await zoom.session.getSessionPassword();
+        debugPrint("sessionPhonePasscode: ${await zoom.session.getSessionPhonePasscode()}");
+        ZoomVideoSdkUser mySelf = ZoomVideoSdkUser.fromJson(jsonDecode(data['sessionUser']));
+        List? remoteUsers = await zoom.session.getRemoteUsers();
+        var muted = await mySelf.audioStatus?.isMuted();
+        var videoOn = await mySelf.videoStatus?.isOn();
+        var speakerOn = await zoom.audioHelper.getSpeakerStatus();
+        fullScreenUser.value = mySelf;
+        remoteUsers?.insert(0, mySelf);
+        isMuted.value = muted!;
+        isSpeakerOn.value = speakerOn;
+        isVideoOn.value = videoOn!;
+        users.value = remoteUsers!;
+        isReceiveSpokenLanguageContentEnabled.value = await zoom.liveTranscriptionHelper.isReceiveSpokenLanguageContentEnabled();
+      });
+
+      final sessionLeaveListener = eventListener.addListener(EventType.onSessionLeave, (data) async {
+        data = data as Map;
+        debugPrint("onSessionLeave: ${data['reason']}");
+        isInSession.value = false;
+        users.value = [];
+        fullScreenUser.value = null;
+        // Navigator.popAndPushNamed(
+        //   context,
+        //   "Join",
+        //   arguments: JoinArguments(args.isJoin, sessionName.value, sessionPassword.value, args.displayName, args.sessionIdleTimeoutMins, args.role),
+        // );
+        Navigator.pushAndRemoveUntil(
+            context,
+            CustomPageRoute(
+              page: LandingNavigation(),
+            ),
+            (r) => false);
+      });
+
+      final sessionNeedPasswordListener = eventListener.addListener(EventType.onSessionNeedPassword, (data) async {
+        showDialog(
+          context: context,
+          builder: (BuildContext context) => AlertDialog(
+            title: const Text('Session Need Password'),
+            content: const Text('Password is required'),
+            actions: [
+              TextButton(
+                onPressed: () async => {
+                  Navigator.pushAndRemoveUntil(
+                      context,
+                      CustomPageRoute(
+                        page: LandingNavigation(),
+                      ),
+                      (r) => false),
+                  await zoom.leaveSession(false),
+                },
+                child: const Text('OK'),
+              ),
+            ],
+          ),
+        );
+      });
+
+      final sessionPasswordWrongListener = eventListener.addListener(EventType.onSessionPasswordWrong, (data) async {
+        showDialog(
+          context: context,
+          builder: (BuildContext context) => AlertDialog(
+            title: const Text('Session Password Incorrect'),
+            content: const Text('Password is wrong'),
+            actions: [
+              TextButton(
+                onPressed: () async => {
+                  Navigator.popAndPushNamed(context, 'Join', arguments: JoinArguments(args.isJoin, args.sessionName, "", args.displayName, args.sessionIdleTimeoutMins, args.role)),
+                  await zoom.leaveSession(false),
+                },
+                child: const Text('OK'),
+              ),
+            ],
+          ),
+        );
+      });
+
+      final userVideoStatusChangedListener = eventListener.addListener(EventType.onUserVideoStatusChanged, (data) async {
+        data = data as Map;
+        ZoomVideoSdkUser? mySelf = await zoom.session.getMySelf();
+        var userListJson = jsonDecode(data['changedUsers']) as List;
+        List userList = userListJson.map((userJson) => ZoomVideoSdkUser.fromJson(userJson)).toList();
+        for (var user in userList) {
+          {
+            if (user.userId == mySelf?.userId) {
+              mySelf?.videoStatus?.isOn().then((on) => isVideoOn.value = on);
+            }
+          }
+        }
+        videoStatusFlag.value = !videoStatusFlag.value;
+      });
+
+      final userAudioStatusChangedListener = eventListener.addListener(EventType.onUserAudioStatusChanged, (data) async {
+        data = data as Map;
+        ZoomVideoSdkUser? mySelf = await zoom.session.getMySelf();
+        var userListJson = jsonDecode(data['changedUsers']) as List;
+        List userList = userListJson.map((userJson) => ZoomVideoSdkUser.fromJson(userJson)).toList();
+        for (var user in userList) {
+          {
+            if (user.userId == mySelf?.userId) {
+              mySelf?.audioStatus?.isMuted().then((muted) => isMuted.value = muted);
+            }
+          }
+        }
+        audioStatusFlag.value = !audioStatusFlag.value;
+      });
+
+      final userShareStatusChangeListener = eventListener.addListener(EventType.onUserShareStatusChanged, (data) async {
+        data = data as Map;
+        ZoomVideoSdkUser? mySelf = await zoom.session.getMySelf();
+        ZoomVideoSdkUser shareUser = ZoomVideoSdkUser.fromJson(jsonDecode(data['user'].toString()));
+        ZoomVideoSdkShareAction? shareAction = ZoomVideoSdkShareAction.fromJson(jsonDecode(data['shareAction']));
+
+        if (shareAction.shareStatus == ShareStatus.Start || shareAction.shareStatus == ShareStatus.Resume) {
+          sharingUser.value = shareUser;
+          fullScreenUser.value = shareUser;
+          isSharing.value = (shareUser.userId == mySelf?.userId);
+
+          setState(() {
+            isScreenBeingShared = true;
+          });
+          Future.delayed(const Duration(seconds: 2), () {
+            setState(() {
+              isScreenBeingShared = false;
+            });
+          });
+        } else {
+          sharingUser.value = null;
+          isSharing.value = false;
+          isSharedCamera.value = false;
+          fullScreenUser.value = mySelf;
+          isScreenBeingShared = false;
+          setState(() {
+            isScreenBeingShared = true;
+          });
+          Future.delayed(const Duration(seconds: 2), () {
+            setState(() {
+              isScreenBeingShared = false;
+            });
+          });
+        }
+        userShareStatusFlag.value = !userShareStatusFlag.value;
+      });
+
+      final shareContentChangedListener = eventListener.addListener(EventType.onShareContentChanged, (data) async {
+        data = data as Map;
+        ZoomVideoSdkUser? mySelf = await zoom.session.getMySelf();
+        ZoomVideoSdkUser shareUser = ZoomVideoSdkUser.fromJson(jsonDecode(data['user'].toString()));
+        ZoomVideoSdkShareAction? shareAction = ZoomVideoSdkShareAction.fromJson(jsonDecode(data['shareAction']));
+        if (shareAction.shareType == ShareType.Camera) {
+          debugPrint("Camera share started");
+          isSharedCamera.value = (shareUser.userId == mySelf?.userId);
+        }
+      });
+
+      final userJoinListener = eventListener.addListener(EventType.onUserJoin, (data) async {
+        if (!isMounted()) return;
+        data = data as Map;
+        ZoomVideoSdkUser? mySelf = await zoom.session.getMySelf();
+        var userListJson = jsonDecode(data['remoteUsers']) as List;
+        List remoteUserList = userListJson.map((userJson) => ZoomVideoSdkUser.fromJson(userJson)).toList();
+        remoteUserList.insert(0, mySelf!);
+        users.value = remoteUserList;
+      });
+
+      final userLeaveListener = eventListener.addListener(EventType.onUserLeave, (data) async {
+        if (!isMounted()) return;
+        ZoomVideoSdkUser? mySelf = await zoom.session.getMySelf();
+        data = data as Map;
+        List? remoteUserList = await zoom.session.getRemoteUsers();
+        var leftUserListJson = jsonDecode(data['leftUsers']) as List;
+        List leftUserLis = leftUserListJson.map((userJson) => ZoomVideoSdkUser.fromJson(userJson)).toList();
+        if (fullScreenUser.value != null) {
+          for (var user in leftUserLis) {
+            {
+              if (fullScreenUser.value?.userId == user.userId) {
+                fullScreenUser.value = mySelf;
+              }
+            }
+          }
+        } else {
+          fullScreenUser.value = mySelf;
+        }
+        remoteUserList?.add(mySelf!);
+        users.value = remoteUserList!;
+      });
+
+      final userNameChangedListener = eventListener.addListener(EventType.onUserNameChanged, (data) async {
+        if (!isMounted()) return;
+        data = data as Map;
+        ZoomVideoSdkUser? changedUser = ZoomVideoSdkUser.fromJson(jsonDecode(data['changedUser']));
+        int index;
+        for (var user in users.value) {
+          if (user.userId == changedUser.userId) {
+            index = users.value.indexOf(user);
+            users.value[index] = changedUser;
+          }
+        }
+        userNameFlag.value = !userNameFlag.value;
+      });
+
+      final commandReceived = eventListener.addListener(EventType.onCommandReceived, (data) async {
+        data = data as Map;
+        debugPrint("sender: ${ZoomVideoSdkUser.fromJson(jsonDecode(data['sender']))}, command: ${data['command']}");
+      });
+
+      final liveStreamStatusChangeListener = eventListener.addListener(EventType.onLiveStreamStatusChanged, (data) async {
+        data = data as Map;
+        debugPrint("onLiveStreamStatusChanged: status: ${data['status']}");
+      });
+
+      final liveTranscriptionStatusChangeListener = eventListener.addListener(EventType.onLiveTranscriptionStatus, (data) async {
+        data = data as Map;
+        debugPrint("onLiveTranscriptionStatus: status: ${data['status']}");
+      });
+
+      final cloudRecordingStatusListener = eventListener.addListener(EventType.onCloudRecordingStatus, (data) async {
+        data = data as Map;
+        debugPrint("onCloudRecordingStatus: status: ${data['status']}");
+        ZoomVideoSdkUser? mySelf = await zoom.session.getMySelf();
+        if (data['status'] == RecordingStatus.Start) {
+          if (mySelf != null && !mySelf.isHost!) {
+            showDialog(
+              context: context,
+              builder: (BuildContext context) => AlertDialog(
+                content: const Text('The session is being recorded.'),
+                actions: [
+                  TextButton(
+                    onPressed: () async {
+                      await zoom.acceptRecordingConsent();
+                      if (context.mounted) {
+                        Navigator.pop(context);
+                      }
+                      ;
+                    },
+                    child: const Text('accept'),
+                  ),
+                  TextButton(
+                    onPressed: () async {
+                      String currentConsentType = await zoom.getRecordingConsentType();
+                      if (currentConsentType == ConsentType.ConsentType_Individual) {
+                        await zoom.declineRecordingConsent();
+                        Navigator.pop(context);
+                      } else {
+                        await zoom.declineRecordingConsent();
+                        zoom.leaveSession(false);
+                        if (!context.mounted) return;
+                        Navigator.popAndPushNamed(
+                          context,
+                          "Join",
+                          arguments: JoinArguments(args.isJoin, sessionName.value, sessionPassword.value, args.displayName, args.sessionIdleTimeoutMins, args.role),
+                        );
+                      }
+                    },
+                    child: const Text('decline'),
+                  ),
+                ],
+              ),
+            );
+          }
+          isRecordingStarted.value = true;
+        } else {
+          isRecordingStarted.value = false;
+        }
+      });
+
+      final liveTranscriptionMsgInfoReceivedListener = eventListener.addListener(EventType.onLiveTranscriptionMsgInfoReceived, (data) async {
+        data = data as Map;
+        ZoomVideoSdkLiveTranscriptionMessageInfo? messageInfo = ZoomVideoSdkLiveTranscriptionMessageInfo.fromJson(jsonDecode(data['messageInfo']));
+        debugPrint("onLiveTranscriptionMsgInfoReceived: content: ${messageInfo.messageContent}");
+      });
+
+      final inviteByPhoneStatusListener = eventListener.addListener(EventType.onInviteByPhoneStatus, (data) async {
+        data = data as Map;
+        debugPrint("onInviteByPhoneStatus: status: ${data['status']}, reason: ${data['reason']}");
+      });
+
+      final multiCameraStreamStatusChangedListener = eventListener.addListener(EventType.onMultiCameraStreamStatusChanged, (data) async {
+        data = data as Map;
+        ZoomVideoSdkUser? changedUser = ZoomVideoSdkUser.fromJson(jsonDecode(data['changedUser']));
+        var status = data['status'];
+        for (var user in users.value) {
+          {
+            if (changedUser.userId == user.userId) {
+              if (status == MultiCameraStreamStatus.Joined) {
+                user.hasMultiCamera = true;
+              } else if (status == MultiCameraStreamStatus.Left) {
+                user.hasMultiCamera = false;
+              }
+            }
+          }
+        }
+      });
+
+      final requireSystemPermission = eventListener.addListener(EventType.onRequireSystemPermission, (data) async {
+        data = data as Map;
+        ZoomVideoSdkUser? changedUser = ZoomVideoSdkUser.fromJson(jsonDecode(data['changedUser']));
+        var permissionType = data['permissionType'];
+        switch (permissionType) {
+          case SystemPermissionType.Camera:
+            showDialog(
+              context: context,
+              builder: (BuildContext context) => AlertDialog(
+                title: const Text("Can't Access Camera"),
+                content: const Text("please turn on the toggle in system settings to grant permission"),
+                actions: [
+                  TextButton(
+                    onPressed: () => Navigator.pop(context, 'OK'),
+                    child: const Text('OK'),
+                  ),
+                ],
+              ),
+            );
+            break;
+          case SystemPermissionType.Microphone:
+            showDialog(
+              context: context,
+              builder: (BuildContext context) => AlertDialog(
+                title: const Text("Can't Access Microphone"),
+                content: const Text("please turn on the toggle in system settings to grant permission"),
+                actions: [
+                  TextButton(
+                    onPressed: () => Navigator.pop(context, 'OK'),
+                    child: const Text('OK'),
+                  ),
+                ],
+              ),
+            );
+            break;
+        }
+      });
+
+      final networkStatusChangeListener = eventListener.addListener(EventType.onUserVideoNetworkStatusChanged, (data) async {
+        data = data as Map;
+        ZoomVideoSdkUser? networkUser = ZoomVideoSdkUser.fromJson(jsonDecode(data['user']));
+
+        if (data['status'] == NetworkStatus.Bad) {
+          debugPrint("onUserVideoNetworkStatusChanged: status: ${data['status']}, user: ${networkUser.userName}");
+        }
+      });
+
+      final eventErrorListener = eventListener.addListener(EventType.onError, (data) async {
+        data = data as Map;
+        String errorType = data['errorType'];
+        showDialog(
+          context: context,
+          builder: (BuildContext context) => AlertDialog(
+            title: const Text("Error"),
+            content: Text(errorType),
+            actions: [
+              TextButton(
+                onPressed: () => Navigator.pop(context, 'OK'),
+                child: const Text('OK'),
+              ),
+            ],
+          ),
+        );
+        if (errorType == Errors.SessionJoinFailed || errorType == Errors.SessionDisconnecting) {
+          Timer(
+              const Duration(milliseconds: 1000),
+              () => {
+                    Navigator.popAndPushNamed(
+                      context,
+                      "Join",
+                      arguments: JoinArguments(args.isJoin, sessionName.value, sessionPassword.value, args.displayName, args.sessionIdleTimeoutMins, args.role),
+                    ),
+                  });
+        }
+      });
+
+      final userRecordingConsentListener = eventListener.addListener(EventType.onUserRecordingConsent, (data) async {
+        data = data as Map;
+        ZoomVideoSdkUser? user = ZoomVideoSdkUser.fromJson(jsonDecode(data['user']));
+        debugPrint('userRecordingConsentListener: user= ${user.userName}');
+      });
+
+      final callCRCDeviceStatusListener = eventListener.addListener(EventType.onCallCRCDeviceStatusChanged, (data) async {
+        data = data as Map;
+        debugPrint('onCallCRCDeviceStatusChanged: status = ${data['status']}');
+      });
+
+      final originalLanguageMsgReceivedListener = eventListener.addListener(EventType.onOriginalLanguageMsgReceived, (data) async {
+        data = data as Map;
+        ZoomVideoSdkLiveTranscriptionMessageInfo? messageInfo = ZoomVideoSdkLiveTranscriptionMessageInfo.fromJson(jsonDecode(data['messageInfo']));
+        debugPrint("onOriginalLanguageMsgReceived: content: ${messageInfo.messageContent}");
+      });
+
+      final chatPrivilegeChangedListener = eventListener.addListener(EventType.onChatPrivilegeChanged, (data) async {
+        data = data as Map;
+        String type = data['privilege'];
+        debugPrint('chatPrivilegeChangedListener: type= $type');
+      });
+
+      final testMicStatusListener = eventListener.addListener(EventType.onTestMicStatusChanged, (data) async {
+        data = data as Map;
+        String status = data['status'];
+        debugPrint('testMicStatusListener: status= $status');
+      });
+
+      final micSpeakerVolumeChangedListener = eventListener.addListener(EventType.onMicSpeakerVolumeChanged, (data) async {
+        data = data as Map;
+        int type = data['micVolume'];
+        debugPrint('onMicSpeakerVolumeChanged: micVolume= $type, speakerVolume');
+      });
+
+      final cameraControlRequestResultListener = eventListener.addListener(EventType.onCameraControlRequestResult, (data) async {
+        data = data as Map;
+        bool approved = data['approved'];
+        debugPrint('onCameraControlRequestResult: approved= $approved');
+      });
+
+      final callOutUserJoinListener = eventListener.addListener(EventType.onCalloutJoinSuccess, (data) async {
+        data = data as Map;
+        String phoneNumber = data['phoneNumber'];
+        ZoomVideoSdkUser? user = ZoomVideoSdkUser.fromJson(jsonDecode(data['user']));
+        debugPrint('onCalloutJoinSuccess: phoneNumber= $phoneNumber, user= ${user.userName}');
+      });
+
+      return () => {
+            sessionJoinListener.cancel(),
+            sessionLeaveListener.cancel(),
+            sessionPasswordWrongListener.cancel(),
+            sessionNeedPasswordListener.cancel(),
+            userVideoStatusChangedListener.cancel(),
+            userAudioStatusChangedListener.cancel(),
+            userJoinListener.cancel(),
+            userLeaveListener.cancel(),
+            userNameChangedListener.cancel(),
+            userShareStatusChangeListener.cancel(),
+            liveStreamStatusChangeListener.cancel(),
+            cloudRecordingStatusListener.cancel(),
+            inviteByPhoneStatusListener.cancel(),
+            eventErrorListener.cancel(),
+            commandReceived.cancel(),
+            liveTranscriptionStatusChangeListener.cancel(),
+            liveTranscriptionMsgInfoReceivedListener.cancel(),
+            multiCameraStreamStatusChangedListener.cancel(),
+            requireSystemPermission.cancel(),
+            userRecordingConsentListener.cancel(),
+            networkStatusChangeListener.cancel(),
+            callCRCDeviceStatusListener.cancel(),
+            originalLanguageMsgReceivedListener.cancel(),
+            chatPrivilegeChangedListener.cancel(),
+            testMicStatusListener.cancel(),
+            micSpeakerVolumeChangedListener.cancel(),
+            cameraControlRequestResultListener.cancel(),
+            callOutUserJoinListener.cancel(),
+            shareContentChangedListener.cancel(),
+          };
+    }, [zoom, users.value, isMounted]);
+
+    void selectVirtualBackgroundItem() async {
+      final ImagePicker picker = ImagePicker();
+      // Pick an image.
+      final XFile? image = await picker.pickImage(source: ImageSource.gallery);
+      await zoom.virtualBackgroundHelper.addVirtualBackgroundItem(image!.path);
+    }
+
+    void onPressAudio() async {
+      ZoomVideoSdkUser? mySelf = await zoom.session.getMySelf();
+      if (mySelf != null) {
+        final audioStatus = mySelf.audioStatus;
+        if (audioStatus != null) {
+          var muted = await audioStatus.isMuted();
+          if (muted) {
+            await zoom.audioHelper.unMuteAudio(mySelf.userId);
+          } else {
+            await zoom.audioHelper.muteAudio(mySelf.userId);
+          }
+        }
+      }
+    }
+
+    void onPressVideo() async {
+      ZoomVideoSdkUser? mySelf = await zoom.session.getMySelf();
+      if (mySelf != null) {
+        final videoStatus = mySelf.videoStatus;
+        if (videoStatus != null) {
+          var videoOn = await videoStatus.isOn();
+          if (videoOn) {
+            await zoom.videoHelper.stopVideo();
+          } else {
+            await zoom.videoHelper.startVideo();
+          }
+        }
+      }
+    }
+
+    void onPressShare() async {
+      var isOtherSharing = await zoom.shareHelper.isOtherSharing();
+      var isShareLocked = await zoom.shareHelper.isShareLocked();
+      String? shareCameraViewResult = Errors.InternalError;
+
+      if (isOtherSharing) {
+        showDialog(
+          context: context,
+          builder: (BuildContext context) => AlertDialog(
+            title: const Text("Error"),
+            content: const Text('Other is sharing'),
+            actions: [
+              TextButton(
+                onPressed: () => Navigator.pop(context, 'OK'),
+                child: const Text('OK'),
+              ),
+            ],
+          ),
+        );
+      } else if (isShareLocked) {
+        showDialog(
+          context: context,
+          builder: (BuildContext context) => AlertDialog(
+            title: const Text("Error"),
+            content: const Text('Share is locked by host'),
+            actions: [
+              TextButton(
+                onPressed: () => Navigator.pop(context, 'OK'),
+                child: const Text('OK'),
+              ),
+            ],
+          ),
+        );
+      } else if (isSharing.value) {
+        zoom.shareHelper.stopShare();
+      } else {
+        List options = [
+          ListTile(
+            title: Text(
+              'Share Device Screen',
+              style: TextStyle(
+                fontSize: 14,
+                fontWeight: FontWeight.normal,
+                color: Colors.black,
+              ),
+            ),
+            onTap: () async => {
+              zoom.shareHelper.shareScreen(),
+              Navigator.of(context).pop(),
+            },
+          ),
+          ListTile(
+            title: Text(
+              'Share Camera',
+              style: TextStyle(
+                fontSize: 14,
+                fontWeight: FontWeight.normal,
+                color: Colors.black,
+              ),
+            ),
+            onTap: () async => {
+              shareCameraViewResult = await zoom.shareHelper.startShareCamera(cameraShareView),
+              debugPrint('start camera: $shareCameraViewResult'),
+              Navigator.of(context).pop(),
+            },
+          ),
+        ];
+        showDialog(
+            context: context,
+            builder: (context) {
+              return Dialog(
+                elevation: 0.0,
+                insetPadding: const EdgeInsets.symmetric(horizontal: 40),
+                shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(20)),
+                child: SizedBox(
+                  height: options.length * 60,
+                  child: Scrollbar(
+                    child: ListView(
+                      shrinkWrap: true,
+                      scrollDirection: Axis.vertical,
+                      children: ListTile.divideTiles(
+                        context: context,
+                        tiles: options,
+                      ).toList(),
+                    ),
+                  ),
+                ),
+              );
+            });
+      }
+    }
+
+    void onSelectedUserVolume(ZoomVideoSdkUser user) async {
+      var isShareAudio = user.isSharing;
+      bool canSetVolume = await user.canSetUserVolume(user.userId, isShareAudio);
+      num userVolume;
+
+      List options = [
+        ListTile(
+          title: Text(
+            'Adjust Volume',
+            style: const TextStyle(
+              fontSize: 18,
+              fontWeight: FontWeight.w600,
+              color: Colors.black,
+            ),
+          ),
+        ),
+        ListTile(
+          title: Text(
+            'Current volume',
+            style: const TextStyle(
+              fontSize: 14,
+              fontWeight: FontWeight.normal,
+              color: Colors.black,
+            ),
+          ),
+          onTap: () async => {
+            debugPrint('user volume'),
+            userVolume = await user.getUserVolume(user.userId, isShareAudio),
+            debugPrint('user ${user.userName}\'s volume is ${userVolume!}'),
+          },
+        ),
+      ];
+      if (canSetVolume) {
+        options.add(
+          ListTile(
+            title: Text(
+              'Volume up',
+              style: const TextStyle(
+                fontSize: 14,
+                fontWeight: FontWeight.normal,
+                color: Colors.black,
+              ),
+            ),
+            onTap: () async => {
+              userVolume = await user.getUserVolume(user.userId, isShareAudio),
+              if (userVolume < 10)
+                {
+                  await user.setUserVolume(user.userId, userVolume + 1, isShareAudio),
+                }
+              else
+                {
+                  debugPrint("Cannot volume up."),
+                }
+            },
+          ),
+        );
+        options.add(
+          ListTile(
+            title: Text(
+              'Volume down',
+              style: const TextStyle(
+                fontSize: 14,
+                fontWeight: FontWeight.normal,
+                color: Colors.black,
+              ),
+            ),
+            onTap: () async => {
+              userVolume = await user.getUserVolume(user.userId, isShareAudio),
+              if (userVolume > 0)
+                {
+                  await user.setUserVolume(user.userId, userVolume - 1, isShareAudio),
+                }
+              else
+                {
+                  debugPrint("Cannot volume down."),
+                }
+            },
+          ),
+        );
+      }
+      showDialog(
+          context: context,
+          builder: (context) {
+            return Dialog(
+                elevation: 0.0,
+                insetPadding: const EdgeInsets.symmetric(horizontal: 40),
+                shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(20)),
+                child: SizedBox(
+                  height: options.length * 58,
+                  child: Column(
+                    crossAxisAlignment: CrossAxisAlignment.stretch,
+                    children: [
+                      ListView(
+                        shrinkWrap: true,
+                        children: ListTile.divideTiles(
+                          context: context,
+                          tiles: options,
+                        ).toList(),
+                      ),
+                    ],
+                  ),
+                ));
+          });
+    }
+
+    void onPressCameraList() async {
+      List options = [];
+      List cameraList = await zoom.videoHelper.getCameraList();
+      for (var camera in cameraList) {
+        options.add(
+          ListTile(
+            title: Text(
+              camera.deviceName,
+              style: const TextStyle(
+                fontSize: 14,
+                fontWeight: FontWeight.normal,
+                color: Colors.black,
+              ),
+            ),
+            onTap: () async => {
+              await zoom.videoHelper.switchCamera(camera.deviceId),
+              Navigator.of(context).pop(),
+            },
+          ),
+        );
+      }
+      options.add(
+        ListTile(
+          title: Text(
+            "Cancel",
+            style: const TextStyle(
+              fontSize: 14,
+              fontWeight: FontWeight.normal,
+              color: Colors.black,
+            ),
+          ),
+          onTap: () async => {
+            Navigator.of(context).pop(),
+          },
+        ),
+      );
+      showDialog(
+          context: context,
+          builder: (context) {
+            return Dialog(
+              elevation: 0.0,
+              insetPadding: const EdgeInsets.symmetric(horizontal: 40),
+              shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(20)),
+              child: SizedBox(
+                height: options.length * 60,
+                child: Scrollbar(
+                  child: ListView(
+                    shrinkWrap: true,
+                    scrollDirection: Axis.vertical,
+                    children: ListTile.divideTiles(
+                      context: context,
+                      tiles: options,
+                    ).toList(),
+                  ),
+                ),
+              ),
+            );
+          });
+    }
+
+    // Future onPressMore() async {
+    //   ZoomVideoSdkUser? mySelf = await zoom.session.getMySelf();
+    //   bool isShareLocked = await zoom.shareHelper.isShareLocked();
+    //   bool canSwitchSpeaker = await zoom.audioHelper.canSwitchSpeaker();
+    //   bool canStartRecording = (await zoom.recordingHelper.canStartRecording()) == Errors.Success;
+    //   debugPrint("canStartRecording ${await zoom.recordingHelper.canStartRecording()}");
+    //   var startLiveTranscription = (await zoom.liveTranscriptionHelper.getLiveTranscriptionStatus()) == LiveTranscriptionStatus.Start;
+    //   bool canStartLiveTranscription = await zoom.liveTranscriptionHelper.canStartLiveTranscription();
+    //   bool isHost = (mySelf != null) ? (await mySelf.getIsHost()) : false;
+    //   isOriginalAspectRatio.value = await zoom.videoHelper.isOriginalAspectRatioEnabled();
+    //   bool canCallOutToCRC = await zoom.CRCHelper.isCRCEnabled();
+    //   bool supportVB = await zoom.virtualBackgroundHelper.isSupportVirtualBackground();
+    //   List? shareActionList = await mySelf?.getShareActionList();
+    //
+    //   List options = [
+    //     ListTile(
+    //       title: Text(
+    //         'More',
+    //         style: GoogleFonts.lato(
+    //           textStyle: const TextStyle(
+    //             fontSize: 18,
+    //             fontWeight: FontWeight.w600,
+    //             color: Colors.black,
+    //           ),
+    //         ),
+    //       ),
+    //     ),
+    //     ListTile(
+    //       title: Text(
+    //         'Get Chat Privilege',
+    //         style: GoogleFonts.lato(
+    //           textStyle: const TextStyle(
+    //             fontSize: 14,
+    //             fontWeight: FontWeight.normal,
+    //             color: Colors.black,
+    //           ),
+    //         ),
+    //       ),
+    //       onTap: () async => {
+    //         debugPrint("Chat Privilege = ${await zoom.chatHelper.getChatPrivilege()}"),
+    //         Navigator.of(context).pop(),
+    //       },
+    //     ),
+    //     ListTile(
+    //       title: Text(
+    //         'Get Session Dial-in Number infos',
+    //         style: GoogleFonts.lato(
+    //           textStyle: const TextStyle(
+    //             fontSize: 14,
+    //             fontWeight: FontWeight.normal,
+    //             color: Colors.black,
+    //           ),
+    //         ),
+    //       ),
+    //       onTap: () async => {
+    //         debugPrint("session number = ${await zoom.session.getSessionNumber()}"),
+    //         Navigator.of(context).pop(),
+    //       },
+    //     ),
+    //     ListTile(
+    //       title: Text(
+    //         'Get Camera List',
+    //         style: GoogleFonts.lato(
+    //           textStyle: const TextStyle(
+    //             fontSize: 14,
+    //             fontWeight: FontWeight.normal,
+    //             color: Colors.black,
+    //           ),
+    //         ),
+    //       ),
+    //       onTap: () async => {
+    //         debugPrint("camera list= ${await zoom.videoHelper.getCameraList()}"),
+    //         onPressCameraList(),
+    //         Navigator.of(context).pop(),
+    //       },
+    //     ),
+    //     ListTile(
+    //       title: Text(
+    //         '${isMicOriginalOn.value ? 'Disable' : 'Enable'} Original Sound',
+    //         style: GoogleFonts.lato(
+    //           textStyle: const TextStyle(
+    //             fontSize: 14,
+    //             fontWeight: FontWeight.normal,
+    //             color: Colors.black,
+    //           ),
+    //         ),
+    //       ),
+    //       onTap: () async => {
+    //         debugPrint("${isMicOriginalOn.value}"),
+    //         await zoom.audioSettingHelper.enableMicOriginalInput(!isMicOriginalOn.value),
+    //         isMicOriginalOn.value = await zoom.audioSettingHelper.isMicOriginalInputEnable(),
+    //         debugPrint("Original sound ${isMicOriginalOn.value ? 'Enabled' : 'Disabled'}"),
+    //         Navigator.of(context).pop(),
+    //       },
+    //     )
+    //   ];
+    //
+    //   if (supportVB) {
+    //     options.add(
+    //       ListTile(
+    //         title: Text(
+    //           'Add Virtual Background',
+    //           style: GoogleFonts.lato(
+    //             textStyle: const TextStyle(
+    //               fontSize: 14,
+    //               fontWeight: FontWeight.normal,
+    //               color: Colors.black,
+    //             ),
+    //           ),
+    //         ),
+    //         onTap: () async => {
+    //           selectVirtualBackgroundItem(),
+    //           Navigator.of(context).pop(),
+    //         },
+    //       ),
+    //     );
+    //   }
+    //
+    //   if (canCallOutToCRC) {
+    //     options.add(ListTile(
+    //       title: Text(
+    //         'Call-out to CRC devices',
+    //         style: GoogleFonts.lato(
+    //           textStyle: const TextStyle(
+    //             fontSize: 14,
+    //             fontWeight: FontWeight.normal,
+    //             color: Colors.black,
+    //           ),
+    //         ),
+    //       ),
+    //       onTap: () async => {
+    //         debugPrint('CRC result = ${await zoom.CRCHelper.callCRCDevice("bjn.vc", ZoomVideoSdkCRCProtocolType.SIP)}'),
+    //         Navigator.of(context).pop(),
+    //       },
+    //     ));
+    //     options.add(ListTile(
+    //       title: Text(
+    //         'Cancel call-out to CRC devices',
+    //         style: GoogleFonts.lato(
+    //           textStyle: const TextStyle(
+    //             fontSize: 14,
+    //             fontWeight: FontWeight.normal,
+    //             color: Colors.black,
+    //           ),
+    //         ),
+    //       ),
+    //       onTap: () async => {
+    //         debugPrint('cancel result= ${await zoom.CRCHelper.cancelCallCRCDevice()}'),
+    //         Navigator.of(context).pop(),
+    //       },
+    //     ));
+    //   }
+    //
+    //   if (canSwitchSpeaker) {
+    //     options.add(ListTile(
+    //       title: Text(
+    //         'Turn ${isSpeakerOn.value ? 'off' : 'on'} Speaker',
+    //         style: GoogleFonts.lato(
+    //           textStyle: const TextStyle(
+    //             fontSize: 14,
+    //             fontWeight: FontWeight.normal,
+    //             color: Colors.black,
+    //           ),
+    //         ),
+    //       ),
+    //       onTap: () async => {
+    //         await zoom.audioHelper.setSpeaker(!isSpeakerOn.value),
+    //         isSpeakerOn.value = await zoom.audioHelper.getSpeakerStatus(),
+    //         debugPrint('Turned ${isSpeakerOn.value ? 'on' : 'off'} Speaker'),
+    //         Navigator.of(context).pop(),
+    //       },
+    //     ));
+    //   }
+    //
+    //   if (isHost) {
+    //     options.add(ListTile(
+    //         title: Text(
+    //           '${isShareLocked ? 'Unlock' : 'Lock'} Share',
+    //           style: GoogleFonts.lato(
+    //             textStyle: const TextStyle(
+    //               fontSize: 14,
+    //               fontWeight: FontWeight.normal,
+    //               color: Colors.black,
+    //             ),
+    //           ),
+    //         ),
+    //         onTap: () async => {
+    //               debugPrint("isShareLocked = ${await zoom.shareHelper.lockShare(!isShareLocked)}"),
+    //               Navigator.of(context).pop(),
+    //             }));
+    //     options.add(ListTile(
+    //       title: Text(
+    //         'Change Name',
+    //         style: GoogleFonts.lato(
+    //           textStyle: const TextStyle(
+    //             fontSize: 14,
+    //             fontWeight: FontWeight.normal,
+    //             color: Colors.black,
+    //           ),
+    //         ),
+    //       ),
+    //       onTap: () => {
+    //         isRenameModalVisible.value = true,
+    //         Navigator.of(context).pop(),
+    //       },
+    //     ));
+    //   }
+    //
+    //   if (canStartLiveTranscription) {
+    //     options.add(ListTile(
+    //       title: Text(
+    //         "${startLiveTranscription ? 'Stop' : 'Start'} Live Transcription",
+    //         style: GoogleFonts.lato(
+    //           textStyle: const TextStyle(
+    //             fontSize: 14,
+    //             fontWeight: FontWeight.normal,
+    //             color: Colors.black,
+    //           ),
+    //         ),
+    //       ),
+    //       onTap: () async => {
+    //         if (startLiveTranscription)
+    //           {
+    //             debugPrint('stopLiveTranscription= ${await zoom.liveTranscriptionHelper.stopLiveTranscription()}'),
+    //           }
+    //         else
+    //           {
+    //             debugPrint('startLiveTranscription= ${await zoom.liveTranscriptionHelper.startLiveTranscription()}'),
+    //           },
+    //         Navigator.of(context).pop(),
+    //       },
+    //     ));
+    //     options.add(ListTile(
+    //         title: Text(
+    //           '${isReceiveSpokenLanguageContentEnabled.value ? 'Disable' : 'Enable'} receiving original caption',
+    //           style: GoogleFonts.lato(
+    //             textStyle: const TextStyle(
+    //               fontSize: 14,
+    //               fontWeight: FontWeight.normal,
+    //               color: Colors.black,
+    //             ),
+    //           ),
+    //         ),
+    //         onTap: () async => {
+    //               await zoom.liveTranscriptionHelper.enableReceiveSpokenLanguageContent(!isReceiveSpokenLanguageContentEnabled.value),
+    //               isReceiveSpokenLanguageContentEnabled.value = await zoom.liveTranscriptionHelper.isReceiveSpokenLanguageContentEnabled(),
+    //               debugPrint("isReceiveSpokenLanguageContentEnabled = ${isReceiveSpokenLanguageContentEnabled.value}"),
+    //               Navigator.of(context).pop(),
+    //             }));
+    //   }
+    //
+    //   if (canStartRecording) {
+    //     options.add(ListTile(
+    //         title: Text(
+    //           '${isRecordingStarted.value ? 'Stop' : 'Start'} Recording',
+    //           style: GoogleFonts.lato(
+    //             textStyle: const TextStyle(
+    //               fontSize: 14,
+    //               fontWeight: FontWeight.normal,
+    //               color: Colors.black,
+    //             ),
+    //           ),
+    //         ),
+    //         onTap: () async => {
+    //               if (!isRecordingStarted.value)
+    //                 {
+    //                   debugPrint('isRecordingStarted = ${await zoom.recordingHelper.startCloudRecording()}'),
+    //                 }
+    //               else
+    //                 {
+    //                   debugPrint('isRecordingStarted = ${await zoom.recordingHelper.stopCloudRecording()}'),
+    //                 },
+    //               Navigator.of(context).pop(),
+    //             }));
+    //   }
+    //
+    //   if (Platform.isAndroid) {
+    //     bool isFlashlightSupported = await zoom.videoHelper.isSupportFlashlight();
+    //     bool isFlashlightOn = await zoom.videoHelper.isFlashlightOn();
+    //     if (isFlashlightSupported) {
+    //       options.add(ListTile(
+    //           title: Text(
+    //             '${isFlashlightOn ? 'Turn Off' : 'Turn On'} Flashlight',
+    //             style: GoogleFonts.lato(
+    //               textStyle: const TextStyle(
+    //                 fontSize: 14,
+    //                 fontWeight: FontWeight.normal,
+    //                 color: Colors.black,
+    //               ),
+    //             ),
+    //           ),
+    //           onTap: () async => {
+    //                 if (!isFlashlightOn)
+    //                   {
+    //                     await zoom.videoHelper.turnOnOrOffFlashlight(true),
+    //                   }
+    //                 else
+    //                   {
+    //                     await zoom.videoHelper.turnOnOrOffFlashlight(false),
+    //                   },
+    //                 Navigator.of(context).pop(),
+    //               }));
+    //     }
+    //   }
+    //
+    //   if (Platform.isIOS) {
+    //     options.add(ListTile(
+    //         title: Text(
+    //           '${isPiPView.value ? 'Disable' : 'Enable'} picture in picture view',
+    //           style: GoogleFonts.lato(
+    //             textStyle: const TextStyle(
+    //               fontSize: 14,
+    //               fontWeight: FontWeight.normal,
+    //               color: Colors.black,
+    //             ),
+    //           ),
+    //         ),
+    //         onTap: () async => {
+    //               isPiPView.value = !isPiPView.value,
+    //               Navigator.of(context).pop(),
+    //             }));
+    //   }
+    //
+    //   if (isVideoOn.value) {
+    //     options.add(ListTile(
+    //         title: Text(
+    //           'Mirror the video',
+    //           style: GoogleFonts.lato(
+    //             textStyle: const TextStyle(
+    //               fontSize: 14,
+    //               fontWeight: FontWeight.normal,
+    //               color: Colors.black,
+    //             ),
+    //           ),
+    //         ),
+    //         onTap: () async => {
+    //               await zoom.videoHelper.mirrorMyVideo(!isVideoMirrored.value),
+    //               isVideoMirrored.value = await zoom.videoHelper.isMyVideoMirrored(),
+    //               Navigator.of(context).pop(),
+    //             }));
+    //     options.add(ListTile(
+    //         title: Text(
+    //           '${isOriginalAspectRatio.value ? 'Enable' : 'Disable'} original aspect ratio',
+    //           style: GoogleFonts.lato(
+    //             textStyle: const TextStyle(
+    //               fontSize: 14,
+    //               fontWeight: FontWeight.normal,
+    //               color: Colors.black,
+    //             ),
+    //           ),
+    //         ),
+    //         onTap: () async => {
+    //               await zoom.videoHelper.enableOriginalAspectRatio(!isOriginalAspectRatio.value),
+    //               isOriginalAspectRatio.value = await zoom.videoHelper.isOriginalAspectRatioEnabled(),
+    //               debugPrint("isOriginalAspectRatio= ${isOriginalAspectRatio.value}"),
+    //               Navigator.of(context).pop(),
+    //             }));
+    //   }
+    //
+    //   showDialog(
+    //       context: context,
+    //       builder: (context) {
+    //         return Dialog(
+    //           elevation: 0.0,
+    //           insetPadding: const EdgeInsets.symmetric(horizontal: 40),
+    //           shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(20)),
+    //           child: SizedBox(
+    //             height: 500,
+    //             child: Scrollbar(
+    //               child: ListView(
+    //                 shrinkWrap: true,
+    //                 scrollDirection: Axis.vertical,
+    //                 children: ListTile.divideTiles(
+    //                   context: context,
+    //                   tiles: options,
+    //                 ).toList(),
+    //               ),
+    //             ),
+    //           ),
+    //         );
+    //       });
+    // }
+
+    void onLeaveSession(bool isEndSession) async {
+      await zoom.leaveSession(isEndSession);
+      Navigator.pushAndRemoveUntil(
+          context,
+          CustomPageRoute(
+            page: LandingNavigation(),
+          ),
+          (r) => false);
+    }
+
+    void showLeaveOptions() async {
+      ZoomVideoSdkUser? mySelf = await zoom.session.getMySelf();
+      bool isHost = await mySelf!.getIsHost();
+
+      Widget endSession;
+      Widget leaveSession;
+      Widget cancel = TextButton(
+        child: const Text('Cancel'),
+        onPressed: () {
+          Navigator.pop(context); //close Dialog
+        },
+      );
+
+      switch (defaultTargetPlatform) {
+        case TargetPlatform.android:
+          endSession = TextButton(
+            child: const Text('End Session'),
+            onPressed: () => onLeaveSession(true),
+          );
+          leaveSession = TextButton(
+            child: const Text('Leave Session'),
+            onPressed: () => onLeaveSession(false),
+          );
+          break;
+        default:
+          endSession = CupertinoActionSheetAction(
+            isDestructiveAction: true,
+            child: const Text('End Session'),
+            onPressed: () => onLeaveSession(true),
+          );
+          leaveSession = CupertinoActionSheetAction(
+            child: const Text('Leave Session'),
+            onPressed: () => onLeaveSession(false),
+          );
+          break;
+      }
+
+      List options = [
+        leaveSession,
+        cancel,
+      ];
+
+      if (Platform.isAndroid) {
+        if (isHost) {
+          options.removeAt(1);
+          options.insert(0, endSession);
+        }
+        showDialog(
+            context: context,
+            builder: (context) {
+              return AlertDialog(
+                content: const Text("Do you want to leave this session?"),
+                shape: const RoundedRectangleBorder(borderRadius: BorderRadius.all(Radius.circular(2.0))),
+                actions: options,
+              );
+            });
+      } else {
+        options.removeAt(1);
+        if (isHost) {
+          options.insert(1, endSession);
+        }
+        showCupertinoModalPopup(
+          context: context,
+          builder: (context) => CupertinoActionSheet(
+            message: const Text('Are you sure that you want to leave the session?'),
+            actions: options,
+            cancelButton: cancel,
+          ),
+        );
+      }
+    }
+
+    final chatMessageController = TextEditingController();
+
+    void sendChatMessage(String message) async {
+      await zoom.chatHelper.sendChatToAll(message);
+      ZoomVideoSdkUser? self = await zoom.session.getMySelf();
+      ZoomVideoSdkCmdChannel cmdChannel = zoom.cmdChannel;
+      for (var user in users.value) {
+        if (user.userId != self?.userId) {
+          await zoom.cmdChannel.sendCommand(user.userId, message);
+        }
+      }
+      chatMessageController.clear();
+      // send the chat as a command
+    }
+
+    void onSelectedUser(ZoomVideoSdkUser user) async {
+      setState(() {
+        fullScreenUser.value = user;
+      });
+    }
+
+    changeNamePopup = Center(
+      child: Stack(
+        children: [
+          Visibility(
+              visible: isRenameModalVisible.value,
+              child: Row(
+                mainAxisSize: MainAxisSize.min,
+                children: [
+                  Container(
+                    alignment: Alignment.bottomLeft,
+                    decoration: const BoxDecoration(
+                      borderRadius: BorderRadius.all(Radius.circular(10)),
+                      color: Colors.white,
+                    ),
+                    width: MediaQuery.of(context).size.width - 130,
+                    height: MediaQuery.of(context).size.height * 0.2,
+                    child: Center(
+                      child: (Column(
+                        crossAxisAlignment: CrossAxisAlignment.start,
+                        children: [
+                          Padding(
+                            padding: const EdgeInsets.only(top: 20, left: 20),
+                            child: Text(
+                              'Change Name',
+                              style: const TextStyle(
+                                fontSize: 18,
+                                fontWeight: FontWeight.w500,
+                              ),
+                            ),
+                          ),
+                          Padding(
+                            padding: const EdgeInsets.only(top: 10, left: 20),
+                            child: SizedBox(
+                              width: MediaQuery.of(context).size.width - 230,
+                              child: TextField(
+                                onEditingComplete: () {},
+                                autofocus: true,
+                                cursorColor: Colors.black,
+                                controller: changeNameController,
+                                decoration: InputDecoration(
+                                  isDense: true,
+                                  hintText: 'New name',
+                                  hintStyle: TextStyle(
+                                    fontSize: 14.0,
+                                    color: chatTextColor,
+                                  ),
+                                ),
+                              ),
+                            ),
+                          ),
+                          Padding(
+                            padding: const EdgeInsets.only(top: 15),
+                            child: Row(
+                              children: [
+                                Padding(
+                                  padding: const EdgeInsets.only(left: 40),
+                                  child: InkWell(
+                                    child: Text(
+                                      'Apply',
+                                      style: const TextStyle(
+                                        fontSize: 16,
+                                      ),
+                                    ),
+                                    onTap: () async {
+                                      if (fullScreenUser.value != null) {
+                                        ZoomVideoSdkUser? mySelf = await zoom.session.getMySelf();
+                                        await zoom.userHelper.changeName((mySelf?.userId)!, changeNameController.text);
+                                        changeNameController.clear();
+                                      }
+                                      isRenameModalVisible.value = false;
+                                    },
+                                  ),
+                                ),
+                                Padding(
+                                  padding: const EdgeInsets.only(left: 40),
+                                  child: InkWell(
+                                    child: Text(
+                                      'Cancel',
+                                      style: const TextStyle(
+                                        fontSize: 16,
+                                      ),
+                                    ),
+                                    onTap: () async {
+                                      isRenameModalVisible.value = false;
+                                    },
+                                  ),
+                                )
+                              ],
+                            ),
+                          )
+                        ],
+                      )),
+                    ),
+                  ),
+                ],
+              )),
+        ],
+      ),
+    );
+
+    Widget fullScreenView;
+    Widget smallView;
+    Widget cameraView;
+
+    if (isInSession.value && fullScreenUser.value != null && users.value.isNotEmpty) {
+      fullScreenView = AnimatedOpacity(
+        opacity: opacityLevel,
+        duration: const Duration(seconds: 3),
+        child: VideoView(
+          user: users.value.length > 1 ? users.value[1] : users.value[0],
+          hasMultiCamera: false,
+          isPiPView: isPiPView.value,
+          sharing: sharingUser.value == null ? false : (sharingUser.value?.userId == fullScreenUser.value?.userId),
+          preview: false,
+          focused: false,
+          multiCameraIndex: "0",
+          videoAspect: VideoAspect.Original,
+          fullScreen: true,
+          resolution: VideoResolution.Resolution360,
+        ),
+      );
+
+      smallView = Container(
+        height: 110,
+        margin: const EdgeInsets.only(left: 20, right: 20),
+        alignment: Alignment.center,
+        child: ListView.separated(
+          scrollDirection: Axis.horizontal,
+          itemCount: users.value.length,
+          itemBuilder: (BuildContext context, int index) {
+            return InkWell(
+              onTap: () async {
+                onSelectedUser(users.value[index]);
+              },
+              onDoubleTap: () async {
+                onSelectedUserVolume(users.value[index]);
+              },
+              child: Center(
+                child: VideoView(
+                  user: users.value[index],
+                  hasMultiCamera: false,
+                  isPiPView: false,
+                  sharing: false,
+                  preview: false,
+                  focused: false,
+                  multiCameraIndex: "0",
+                  videoAspect: VideoAspect.Original,
+                  fullScreen: false,
+                  resolution: VideoResolution.Resolution180,
+                ),
+              ),
+            );
+          },
+          separatorBuilder: (BuildContext context, int index) => const Divider(),
+        ),
+      );
+    } else {
+      fullScreenView = Container(
+          color: Colors.black,
+          child: const Center(
+            child: Text(
+              "Connecting...",
+              style: TextStyle(
+                fontSize: 20,
+                color: Colors.white,
+              ),
+            ),
+          ));
+      smallView = Container(
+        height: 110,
+        color: Colors.transparent,
+      );
+    }
+
+    cameraView = Offstage(
+      offstage: !isSharedCamera.value,
+      child: AnimatedOpacity(
+        opacity: isSharedCamera.value ? 1.0 : 0.0,
+        duration: const Duration(milliseconds: 300),
+        child: cameraShareView,
+      ),
+    );
+
+    _changeOpacity;
+    return Scaffold(
+        resizeToAvoidBottomInset: false,
+        backgroundColor: backgroundColor,
+        body: Stack(
+          children: [
+            // isScreenBeingShared ? fullScreenView : SizedBox.shrink(),
+            isScreenBeingShared ? SizedBox.shrink() : fullScreenView,
+            cameraView,
+            Container(
+                padding: const EdgeInsets.only(top: 35),
+                child: Stack(
+                  children: [
+                    Row(
+                      crossAxisAlignment: CrossAxisAlignment.start,
+                      mainAxisAlignment: MainAxisAlignment.spaceBetween,
+                      children: [
+                        Container(
+                          height: 80,
+                          width: 180,
+                          margin: const EdgeInsets.only(top: 16, left: 8),
+                          padding: const EdgeInsets.all(8),
+                          alignment: Alignment.topLeft,
+                          decoration: BoxDecoration(
+                            borderRadius: const BorderRadius.all(Radius.circular(8.0)),
+                            // color: buttonBackgroundColor,
+                          ),
+                          // child: InkWell(
+                          //   onTap: () async {
+                          //     showDialog(
+                          //         context: context,
+                          //         builder: (context) {
+                          //           return Dialog(
+                          //               elevation: 0.0,
+                          //               insetPadding: const EdgeInsets.symmetric(horizontal: 40),
+                          //               shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(20)),
+                          //               child: FractionallySizedBox(
+                          //                 heightFactor: 0.2,
+                          //                 widthFactor: 0.3,
+                          //                 child: Column(
+                          //                   crossAxisAlignment: CrossAxisAlignment.stretch,
+                          //                   children: [
+                          //                     ListView(
+                          //                       shrinkWrap: true,
+                          //                       children: ListTile.divideTiles(
+                          //                         context: context,
+                          //                         tiles: [
+                          //                           ListTile(
+                          //                             title: Text(
+                          //                               'Session Information',
+                          //                               style: GoogleFonts.lato(
+                          //                                 textStyle: const TextStyle(
+                          //                                   fontSize: 18,
+                          //                                   fontWeight: FontWeight.w600,
+                          //                                 ),
+                          //                               ),
+                          //                             ),
+                          //                           ),
+                          //                           ListTile(
+                          //                             title: Text(
+                          //                               'Session Name',
+                          //                               style: GoogleFonts.lato(
+                          //                                 textStyle: const TextStyle(
+                          //                                   fontSize: 14,
+                          //                                 ),
+                          //                               ),
+                          //                             ),
+                          //                             subtitle: Text(
+                          //                               sessionName.value,
+                          //                               style: GoogleFonts.lato(
+                          //                                 textStyle: const TextStyle(
+                          //                                   fontSize: 12,
+                          //                                 ),
+                          //                               ),
+                          //                             ),
+                          //                           ),
+                          //                           ListTile(
+                          //                             title: Text(
+                          //                               'Session Password',
+                          //                               style: GoogleFonts.lato(
+                          //                                 textStyle: const TextStyle(
+                          //                                   fontSize: 14,
+                          //                                 ),
+                          //                               ),
+                          //                             ),
+                          //                             subtitle: Text(
+                          //                               sessionPassword.value,
+                          //                               style: GoogleFonts.lato(
+                          //                                 textStyle: const TextStyle(
+                          //                                   fontSize: 12,
+                          //                                 ),
+                          //                               ),
+                          //                             ),
+                          //                           ),
+                          //                           ListTile(
+                          //                             title: Text(
+                          //                               'Participants',
+                          //                               style: GoogleFonts.lato(
+                          //                                 textStyle: const TextStyle(
+                          //                                   fontSize: 14,
+                          //                                 ),
+                          //                               ),
+                          //                             ),
+                          //                             subtitle: Text(
+                          //                               '${users.value.length}',
+                          //                               style: GoogleFonts.lato(
+                          //                                 textStyle: const TextStyle(
+                          //                                   fontSize: 12,
+                          //                                 ),
+                          //                               ),
+                          //                             ),
+                          //                           ),
+                          //                         ],
+                          //                       ).toList(),
+                          //                     ),
+                          //                   ],
+                          //                 ),
+                          //               ));
+                          //         });
+                          //   },
+                          //   child: Stack(
+                          //     children: [
+                          //       Column(
+                          //         children: [
+                          //           const Padding(padding: EdgeInsets.symmetric(vertical: 4)),
+                          //           Align(
+                          //             alignment: Alignment.centerLeft,
+                          //             child: Text(
+                          //               sessionName.value,
+                          //               overflow: TextOverflow.ellipsis,
+                          //               style: GoogleFonts.lato(
+                          //                 textStyle: const TextStyle(
+                          //                   fontSize: 14,
+                          //                   fontWeight: FontWeight.w600,
+                          //                   color: Colors.white,
+                          //                 ),
+                          //               ),
+                          //             ),
+                          //           ),
+                          //           const Padding(padding: EdgeInsets.symmetric(vertical: 5)),
+                          //           Align(
+                          //             alignment: Alignment.centerLeft,
+                          //             child: Text(
+                          //               "Participants: ${users.value.length}",
+                          //               style: GoogleFonts.lato(
+                          //                 textStyle: const TextStyle(
+                          //                   fontSize: 14,
+                          //                   fontWeight: FontWeight.w600,
+                          //                   color: Colors.white,
+                          //                 ),
+                          //               ),
+                          //             ),
+                          //           )
+                          //         ],
+                          //       ),
+                          //       Container(
+                          //           alignment: Alignment.centerRight,
+                          //           child: Image.asset(
+                          //             "assets/icons/unlocked@2x.png",
+                          //             height: 22,
+                          //           )),
+                          //     ],
+                          //   ),
+                          // ),
+                        ),
+                        TextButton(
+                            onPressed: (showLeaveOptions),
+                            child: Container(
+                              alignment: Alignment.topRight,
+                              margin: const EdgeInsets.only(top: 16, right: 8),
+                              padding: const EdgeInsets.only(top: 5, bottom: 5, left: 16, right: 16),
+                              height: 28,
+                              decoration: BoxDecoration(
+                                borderRadius: const BorderRadius.all(Radius.circular(20.0)),
+                                color: buttonBackgroundColor,
+                              ),
+                              child: const Text(
+                                "LEAVE",
+                                style: TextStyle(
+                                  fontSize: 14,
+                                  fontWeight: FontWeight.bold,
+                                  color: Color(0xFFE02828),
+                                ),
+                              ),
+                            )),
+                      ],
+                    ),
+                    Align(
+                        alignment: Alignment.centerRight,
+                        child: FractionallySizedBox(
+                          widthFactor: 0.2,
+                          heightFactor: 0.6,
+                          child: Column(
+                            mainAxisAlignment: MainAxisAlignment.center,
+                            children: [
+                              IconButton(
+                                onPressed: onPressAudio,
+                                icon: isMuted.value ? Image.asset("assets/images/png/zoom/unmute@2x.png") : Image.asset("assets/images/png/zoom/mute@2x.png"),
+                                iconSize: circleButtonSize,
+                                tooltip: isMuted.value == true ? "Unmute" : "Mute",
+                              ),
+                              IconButton(
+                                onPressed: onPressShare,
+                                icon: isSharing.value ? Image.asset("assets/images/png/zoom/share-off@2x.png") : Image.asset("assets/images/png/zoom/share-on@2x.png"),
+                                iconSize: circleButtonSize,
+                              ),
+                              IconButton(
+                                onPressed: onPressVideo,
+                                iconSize: circleButtonSize,
+                                icon: isVideoOn.value ? Image.asset("assets/images/png/zoom/video-off@2x.png") : Image.asset("assets/images/png/zoom/video-on@2x.png"),
+                              ),
+                              Column(
+                                children: [
+                                  IconButton(
+                                    onPressed: () async {
+                                      onPressCameraList();
+                                    },
+                                    icon: Icon(Icons.cameraswitch, color: Colors.white),
+                                    color: Colors.white,
+                                    iconSize: 40.h,
+                                  ),
+                                  "Switch Camera".toText12(color: AppColors.whiteColor, isCenter: true, isBold: true)
+                                ],
+                              ),
+                            ],
+                          ),
+                        )),
+                    Container(
+                      margin: const EdgeInsets.only(left: 16, right: 16, bottom: 40, top: 10),
+                      alignment: Alignment.bottomCenter,
+                      child: SizedBox(
+                        height: MediaQuery.of(context).viewInsets.bottom == 0 ? 65 : MediaQuery.of(context).viewInsets.bottom + 18,
+                        child: TextField(
+                          maxLines: 1,
+                          textAlign: TextAlign.left,
+                          style: TextStyle(color: chatTextColor),
+                          cursorColor: chatTextColor,
+                          textAlignVertical: TextAlignVertical.center,
+                          controller: chatMessageController,
+                          decoration: InputDecoration(
+                            contentPadding: const EdgeInsets.only(left: 16, top: 10, bottom: 10, right: 16),
+                            enabledBorder: OutlineInputBorder(
+                              borderSide: BorderSide(width: 1, color: chatTextColor), //<-- SEE HERE
+                            ),
+                            hintText: 'Type your message here...',
+                            hintStyle: TextStyle(
+                              fontSize: 14.0,
+                              color: chatTextColor,
+                            ),
+                          ),
+                          onSubmitted: (String str) {
+                            sendChatMessage(str);
+                          },
+                        ),
+                      ),
+                    ),
+                    Container(
+                      alignment: Alignment.bottomLeft,
+                      margin: const EdgeInsets.only(bottom: 120),
+                      child: smallView,
+                    ),
+                    // CommentList(zoom: zoom, eventListener: eventListener),
+                    changeNamePopup,
+                  ],
+                )),
+          ],
+        ));
+  }
+}
+
+class CallArguments {
+  final bool isJoin;
+  final String sessionName;
+  final String sessionPwd;
+  final String displayName;
+  final String sessionIdleTimeoutMins;
+  final String role;
+  final int callType;
+
+  CallArguments(this.sessionName, this.sessionPwd, this.displayName, this.sessionIdleTimeoutMins, this.role, this.isJoin, this.callType);
+}
+
+class JoinArguments {
+  final bool isJoin;
+  final String sessionName;
+  final String sessionPwd;
+  final String displayName;
+  final String sessionTimeout;
+  final String roleType;
+
+  JoinArguments(this.isJoin, this.sessionName, this.sessionPwd, this.displayName, this.sessionTimeout, this.roleType);
+}
diff --git a/lib/presentation/tele_consultation/zoom/video_view.dart b/lib/presentation/tele_consultation/zoom/video_view.dart
new file mode 100644
index 0000000..4c1e049
--- /dev/null
+++ b/lib/presentation/tele_consultation/zoom/video_view.dart
@@ -0,0 +1,258 @@
+import 'dart:async';
+
+import 'package:flutter/material.dart';
+import 'package:flutter_hooks/flutter_hooks.dart';
+import 'package:flutter_zoom_videosdk/flutter_zoom_view.dart' as FlutterZoomView;
+import 'package:flutter_zoom_videosdk/native/zoom_videosdk.dart';
+
+const SHOW_TALKING_ICON_DURATION = 2000;
+
+class VideoView extends FlutterZoomView.ZoomView {
+  const VideoView({
+    super.key,
+    required super.user,
+    required super.sharing,
+    required super.preview,
+    required super.focused,
+    required super.hasMultiCamera,
+    required super.multiCameraIndex,
+    required super.videoAspect,
+    required super.fullScreen,
+    required super.resolution,
+    required super.isPiPView,
+  });
+
+  @override
+  Widget build(BuildContext context) {
+    var isVideoOn = useState(false);
+    var isTalking = useState(false);
+    var isMuted = useState(false);
+    var isMounted = useIsMounted();
+    var zoom = ZoomVideoSdk();
+    var isSharing = useState(false);
+    user?.audioStatus?.isMuted().then((muted) => isMuted.value = muted);
+
+    useEffect(() {
+      updateVideoStatus() {
+        if (user == null) return;
+        Future.microtask(() async {
+          if (isMounted()) {
+            isVideoOn.value = (await user!.videoStatus!.isOn());
+            isSharing.value = sharing;
+          }
+        });
+      }
+
+      resetAudioStatus() {
+        isTalking.value = false;
+        isMuted.value = false;
+      }
+
+      updateAudioStatus() async {
+        if (!isMounted()) return;
+        var talking = await user?.audioStatus?.isTalking();
+        var muted = await user?.audioStatus?.isMuted();
+        isMuted.value = muted!;
+        isTalking.value = talking!;
+        if (talking) {
+          Timer(
+              const Duration(milliseconds: SHOW_TALKING_ICON_DURATION),
+              () => {
+                    if (isMounted())
+                      {
+                        isTalking.value = false,
+                      }
+                  });
+        }
+      }
+
+      updateVideoStatus();
+      return null;
+    }, [zoom, user]);
+
+    ImageIcon audioStatusIcon;
+    if (isTalking.value) {
+      audioStatusIcon = const ImageIcon(
+        AssetImage("assets/images/png/zoom/talking@2x.png"),
+      );
+    } else if (isMuted.value) {
+      audioStatusIcon = const ImageIcon(
+        AssetImage("assets/images/png/zoom/muted@2x.png"),
+      );
+    }
+    // Pass parameters to the platform side.
+    final Map creationParams = {};
+    creationParams.putIfAbsent("userId", () => user?.userId);
+    creationParams.putIfAbsent("sharing", () => sharing);
+    creationParams.putIfAbsent("preview", () => preview);
+    creationParams.putIfAbsent("focused", () => focused);
+    creationParams.putIfAbsent("hasMultiCamera", () => hasMultiCamera);
+    if (videoAspect.isEmpty) {
+      creationParams.putIfAbsent("videoAspect", () => VideoAspect.PanAndScan);
+    } else {
+      creationParams.putIfAbsent("videoAspect", () => videoAspect);
+    }
+    creationParams.putIfAbsent("fullScreen", () => fullScreen);
+    if (resolution.isNotEmpty) {
+      creationParams.putIfAbsent("videoAspect", () => videoAspect);
+    }
+
+    if (fullScreen) {
+      if (sharing) {
+        return Container(
+          height: MediaQuery.of(context).size.height,
+          width: MediaQuery.of(context).size.width,
+          alignment: Alignment.center,
+          child: FlutterZoomView.View(creationParams: creationParams),
+        );
+      } else if (isVideoOn.value) {
+        return Container(
+          height: MediaQuery.of(context).size.height,
+          width: MediaQuery.of(context).size.width,
+          alignment: Alignment.center,
+          child: FlutterZoomView.View(creationParams: creationParams),
+        );
+      } else {
+        return Container(
+          margin: const EdgeInsets.symmetric(vertical: 0),
+          child: Container(
+              alignment: Alignment.center,
+              child: const Image(
+                image: AssetImage("assets/images/png/zoom/default-avatar.png"),
+              )),
+        );
+      }
+    } else {
+      if (isVideoOn.value || sharing) {
+        return Container(
+          padding: const EdgeInsets.symmetric(horizontal: 8),
+          height: 110,
+          width: 110,
+          child: Stack(
+            children: [
+              Container(
+                height: 110,
+                width: 110,
+                decoration: BoxDecoration(
+                  color: const Color(0xff232323),
+                  border: Border.all(
+                    color: const Color(0xff666666),
+                    width: 1,
+                  ),
+                  borderRadius: const BorderRadius.all(Radius.circular(8)),
+                ),
+                alignment: Alignment.center,
+                child: FlutterZoomView.View(creationParams: creationParams),
+              ),
+              Container(
+                height: 110,
+                width: 110,
+                decoration: const BoxDecoration(
+                  borderRadius: BorderRadius.all(Radius.circular(8)),
+                ),
+              ),
+              Container(
+                alignment: Alignment.bottomCenter,
+                child: Container(
+                  height: 20,
+                  width: 110,
+                  decoration: const BoxDecoration(
+                    color: Colors.black26,
+                    borderRadius: BorderRadius.all(Radius.circular(8)),
+                  ),
+                ),
+              ),
+              Container(
+                alignment: Alignment.bottomLeft,
+                margin: const EdgeInsets.only(left: 5),
+                child: Text(
+                  user!.userName,
+                  textAlign: TextAlign.left,
+                  style: const TextStyle(
+                    color: Colors.white,
+                    fontSize: 12,
+                  ),
+                ),
+              ),
+              Container(
+                alignment: Alignment.bottomRight,
+                margin: const EdgeInsets.only(right: 5, bottom: 5),
+                // height: 110,
+                // width: 110,
+                child: Image(
+                  height: 12,
+                  width: 12,
+                  image: isMuted.value ? const AssetImage("assets/images/png/zoom/muted@2x.png") : const AssetImage("assets/images/png/zoom/talking@2x.png"),
+                  fit: BoxFit.cover,
+                ),
+              )
+            ],
+          ),
+        );
+      } else {
+        return Container(
+          padding: const EdgeInsets.symmetric(horizontal: 8),
+          height: 110,
+          width: 110,
+          child: Stack(
+            children: [
+              Container(
+                height: 110,
+                width: 110,
+                decoration: BoxDecoration(
+                  color: const Color(0xff232323),
+                  border: Border.all(
+                    color: const Color(0xff666666),
+                    width: 1,
+                  ),
+                  borderRadius: const BorderRadius.all(Radius.circular(8)),
+                ),
+                alignment: Alignment.center,
+                child: Container(
+                    alignment: Alignment.center,
+                    child: const Image(
+                      height: 60,
+                      width: 60,
+                      image: AssetImage("assets/images/png/zoom/default-avatar.png"),
+                    )),
+              ),
+              Align(
+                alignment: Alignment.bottomCenter,
+                child: Container(
+                  height: 20,
+                  width: 110,
+                  decoration: const BoxDecoration(
+                    color: Colors.black26,
+                    borderRadius: BorderRadius.all(Radius.circular(8)),
+                  ),
+                ),
+              ),
+              Container(
+                alignment: Alignment.bottomLeft,
+                margin: const EdgeInsets.only(left: 5),
+                child: Text(
+                  user!.userName,
+                  textAlign: TextAlign.left,
+                  style: const TextStyle(
+                    color: Colors.white,
+                    fontSize: 12,
+                  ),
+                ),
+              ),
+              Container(
+                alignment: Alignment.bottomRight,
+                margin: const EdgeInsets.only(right: 5, bottom: 5),
+                child: Image(
+                  height: 12,
+                  width: 12,
+                  image: isMuted.value ? const AssetImage("assets/images/png/zoom/muted@2x.png") : const AssetImage("assets/images/png/zoom/talking@2x.png"),
+                  fit: BoxFit.cover,
+                ),
+              ),
+            ],
+          ),
+        );
+      }
+    }
+  }
+}
diff --git a/lib/routes/app_routes.dart b/lib/routes/app_routes.dart
index b37ebfa..ed5c0db 100644
--- a/lib/routes/app_routes.dart
+++ b/lib/routes/app_routes.dart
@@ -7,6 +7,7 @@ import 'package:hmg_patient_app_new/presentation/e_referral/new_e_referral.dart'
 import 'package:hmg_patient_app_new/presentation/home/navigation_screen.dart';
 import 'package:hmg_patient_app_new/presentation/home_health_care/hhc_procedures_page.dart';
 import 'package:hmg_patient_app_new/presentation/medical_file/medical_file_page.dart';
+import 'package:hmg_patient_app_new/presentation/tele_consultation/zoom/call_screen.dart';
 import 'package:hmg_patient_app_new/splashPage.dart';
 
 class AppRoutes {
@@ -19,6 +20,7 @@ class AppRoutes {
   static const String eReferralPage = '/erReferralPage';
   static const String comprehensiveCheckupPage = '/comprehensiveCheckupPage';
   static const String homeHealthCarePage = '/homeHealthCarePage';
+  static const String zoomCallPage = '/zoomCallPage';
 
   static Map get routes => {
         initialRoute: (context) => SplashPage(),
@@ -29,6 +31,7 @@ class AppRoutes {
         medicalFilePage: (context) => MedicalFilePage(),
         eReferralPage: (context) => NewReferralPage(),
         comprehensiveCheckupPage: (context) => ComprehensiveCheckupPage(),
-        homeHealthCarePage: (context) => HhcProceduresPage()
+        homeHealthCarePage: (context) => HhcProceduresPage(),
+        zoomCallPage: (context) => CallScreen()
       };
 }
diff --git a/lib/splashPage.dart b/lib/splashPage.dart
index ba7cefd..b5b752b 100644
--- a/lib/splashPage.dart
+++ b/lib/splashPage.dart
@@ -4,8 +4,11 @@ import 'dart:io';
 
 import 'package:flutter/foundation.dart';
 import 'package:flutter/material.dart';
+import 'package:flutter_callkit_incoming/entities/call_event.dart';
+import 'package:flutter_callkit_incoming/flutter_callkit_incoming.dart';
 import 'package:flutter_svg/flutter_svg.dart';
 import 'package:flutter_zoom_videosdk/native/zoom_videosdk.dart';
+import 'package:get_it/get_it.dart';
 import 'package:hmg_patient_app_new/presentation/lab/lab_orders_page.dart';
 import 'package:hmg_patient_app_new/presentation/onboarding/onboarding_screen.dart';
 import 'package:hmg_patient_app_new/presentation/onboarding/splash_animation_screen.dart';
@@ -19,6 +22,9 @@ import 'package:hmg_patient_app_new/features/authentication/authentication_view_
 // import 'package:hmg_patient_app_new/presentation/authantication/login.dart';
 import 'package:hmg_patient_app_new/presentation/home/landing_page.dart';
 import 'package:hmg_patient_app_new/presentation/home/navigation_screen.dart';
+import 'package:hmg_patient_app_new/presentation/tele_consultation/zoom/call_screen.dart';
+import 'package:hmg_patient_app_new/services/cache_service.dart';
+import 'package:hmg_patient_app_new/services/navigation_service.dart';
 import 'package:hmg_patient_app_new/theme/colors.dart';
 import 'package:hmg_patient_app_new/widgets/transitions/fade_page.dart';
 import 'package:lottie/lottie.dart';
@@ -38,6 +44,7 @@ class _SplashScreenState extends State {
   late AuthenticationViewModel authVm;
 
   Future initializeStuff() async {
+    listenerEvent();
     Timer(
       Duration(milliseconds: 500),
       () async {
@@ -47,22 +54,155 @@ class _SplashScreenState extends State {
     );
     await authVm.getServicePrivilege();
     Timer(Duration(seconds: 2, milliseconds: 500), () async {
+      bool isAppOpenedFromCall = await GetIt.instance().getBool(key: CacheConst.isAppOpenedFromCall) ?? false;
+
       LocalNotification.init(onNotificationClick: (payload) {});
 
-      if (await Utils.getBoolFromPrefs(CacheConst.firstLaunch)) {
-        Navigator.of(context).pushReplacement(FadePage(page: SplashAnimationScreen(routeWidget: OnboardingScreen())));
+      if (isAppOpenedFromCall) {
+        navigateToTeleConsult();
       } else {
-        Navigator.of(context).pushReplacement(FadePage(page: SplashAnimationScreen(routeWidget: LandingNavigation())));
+        if (await Utils.getBoolFromPrefs(CacheConst.firstLaunch)) {
+          // Navigator.of(context).pushReplacement(FadePage(page: SplashAnimationScreen(routeWidget: OnboardingScreen())));
+          Navigator.of(context).pushReplacement(FadePage(page: OnboardingScreen()));
+        } else {
+          // Navigator.of(context).pushReplacement(FadePage(page: SplashAnimationScreen(routeWidget: LandingNavigation())));
+          Navigator.of(context).pushReplacement(FadePage(page: LandingNavigation()));
+        }
       }
     });
     var zoom = ZoomVideoSdk();
     InitConfig initConfig = InitConfig(
       domain: "zoom.us",
-      enableLog: true,
+      enableLog: false,
     );
     zoom.initSdk(initConfig);
   }
 
+  navigateToTeleConsult() async {
+    String roomID = await Utils.getStringFromPrefs(CacheConst.zoomRoomID);
+    print('RoomID: $roomID');
+
+    // GetIt.instance().remove(key: CacheConst.isAppOpenedFromCall);
+    Utils.removeFromPrefs(CacheConst.isAppOpenedFromCall);
+
+    Navigator.of(GetIt.instance().navigatorKey.currentContext!).pushReplacement(FadePage(page: SplashAnimationScreen(routeWidget: LandingNavigation())));
+    Navigator.pushReplacementNamed(
+      // context,
+      GetIt.instance().navigatorKey.currentContext!,
+      AppRoutes.zoomCallPage,
+      // arguments: CallArguments(appointmentID, "111", "Patient", "40", "1", true, 1),
+      arguments: CallArguments(roomID, "123", "Patient", "40", "0", true, 1),
+      // arguments: CallArguments("SmallDailyStandup9875", "123", "Patient", "40", "0", false, int.parse(widget.incomingCallData!.appointmentNo!)),
+    );
+  }
+
+  Future listenerEvent() async {
+    print('Call Canceled : ------->');
+
+    try {
+      FlutterCallkitIncoming.onEvent.listen((event) async {
+        switch (event!.event) {
+          case Event.actionCallIncoming:
+            print('actionCallIncoming Event Received: ------->');
+            break;
+          case Event.actionCallStart:
+            print('actionCallStart Event Received: ------->');
+            break;
+          case Event.actionCallAccept:
+            print('actionCallAccept Event Received: ------->');
+            FlutterCallkitIncoming.endAllCalls();
+            try {
+              navigateToTeleConsult();
+              // String roomID = await Utils.getStringFromPrefs(SharedPrefsConsts.ZOOM_ROOM_ID);
+              // String roomPass = await Utils.getStringFromPrefs(SharedPrefsConsts.ZOOM_ROOM_PASS);
+
+              // print('RoomID: $roomID');
+              // print('RoomPass: $roomPass');
+
+              // Future.delayed(const Duration(milliseconds: 3000), () async {
+              //   // try {
+              //   // String teleConsultURL = "https://teleconsult.meena-health.com/api/videocall/doVideoCall?roomid=";
+              //   // await Utils.getStringFromPrefs(SharedPrefsConsts.PATIENT_MRN).then((value) {
+              //   //   teleConsultURL = teleConsultURL + value;
+              //   //   print("TeleConsult URL: $teleConsultURL");
+              //     //   Uri uri = Uri.parse(teleConsultURL);
+              //     //   launchUrl(uri, mode: LaunchMode.externalApplication, webOnlyWindowName: "TeleConsult");
+              //     // });
+              //
+              //     // var cameraStatus = await Permission.camera.request();
+              //     // var micStatus = await Permission.microphone.request();
+              //   // var permissionStatus = await [Permission.microphone, Permission.camera, Permission.notification].request();
+              //   // if (permissionStatus[1]?.isDenied == true) {
+              //   //   await Permission.camera.request();
+              //   // }
+              //   // if (permissionStatus[0]?.isDenied == true) {
+              //   //   await Permission.microphone.request();
+              //   // }
+              //
+              //   Navigator.pushNamed(
+              //     // context,
+              //       navigatorKey.currentContext!,
+              //       AppRoutes.zoomCallPage,
+              //       // arguments: CallArguments(appointmentID, "111", "Patient", "40", "1", true, 1),
+              //       arguments: CallArguments(roomID, roomPass, "Patient", "40", "0", true, 1),
+              //       // arguments: CallArguments("SmallDailyStandup9875", "123", "Patient", "40", "0", false, int.parse(widget.incomingCallData!.appointmentNo!)),
+              //     );
+              //   // } catch (err) {
+              //   //   print(err);
+              //   // }
+              // });
+              // String teleConsultURL = "https://teleconsult.meena-health.com/api/videocall/doVideoCall?roomid=";
+              // await Utils.getStringFromPrefs(SharedPrefsConsts.PATIENT_MRN).then((value) {
+              //   teleConsultURL = teleConsultURL + value;
+              //   print("TeleConsult URL: $teleConsultURL");
+              //   Uri uri = Uri.parse(teleConsultURL);
+              //   launchUrl(uri, mode: LaunchMode.inAppBrowserView, webOnlyWindowName: "Test");
+              // });
+              // navigatorKey.currentState!.pushNamed(AppRoutes.incomingCallScreenRoute);
+              // await Navigator.pushNamed(context, AppRoutes.incomingCallScreenRoute).then((value) {});
+            } catch (e) {
+              print("ERRORRRR!!! ${e.toString()}");
+              // await AppSharedPreferences().setObject('call_data', data);
+              // var data1 = await AppSharedPreferences().getObject('call_data');
+            }
+            break;
+          case Event.actionCallDecline:
+            print('actionCallConnected Event Received: ------->');
+            await FlutterCallkitIncoming.endAllCalls();
+            GetIt.instance().remove(key: CacheConst.isAppOpenedFromCall);
+            break;
+          case Event.actionCallEnded:
+            break;
+          case Event.actionCallTimeout:
+            break;
+          case Event.actionCallCallback:
+            break;
+          case Event.actionCallToggleHold:
+            break;
+          case Event.actionCallToggleMute:
+            break;
+          case Event.actionCallToggleDmtf:
+            break;
+          case Event.actionCallToggleGroup:
+            break;
+          case Event.actionCallToggleAudioSession:
+            break;
+          case Event.actionDidUpdateDevicePushTokenVoip:
+            break;
+          case Event.actionCallCustom:
+            break;
+          case Event.actionCallConnected:
+            print('actionCallConnected Event Received: ------->');
+            await FlutterCallkitIncoming.endAllCalls();
+            break;
+        }
+      });
+    } on Exception catch (e) {
+      print(e);
+      print("ERRORRRR!!! ${e.toString()}");
+    }
+  }
+
   /// load the Privilege from service
   Future loadPrivilege() async {
     // ProjectViewModel projectProvider = Provider.of(context, listen: false);
diff --git a/lib/widgets/chip/app_custom_chip_widget.dart b/lib/widgets/chip/app_custom_chip_widget.dart
index 6904edc..8be16b7 100644
--- a/lib/widgets/chip/app_custom_chip_widget.dart
+++ b/lib/widgets/chip/app_custom_chip_widget.dart
@@ -22,6 +22,7 @@ class AppCustomChipWidget extends StatelessWidget {
     this.deleteIconColor = AppColors.textColor,
     this.deleteIconHasColor = false,
     this.padding = EdgeInsets.zero,
+    this.isIconPNG = false,
     this.onChipTap,
     this.labelPadding,
     this.onDeleteTap,
@@ -42,6 +43,7 @@ class AppCustomChipWidget extends StatelessWidget {
   final OutlinedBorder? shape;
   final EdgeInsets? padding;
   final EdgeInsetsDirectional? labelPadding;
+  final bool isIconPNG;
   final void Function()? onChipTap;
   final void Function()? onDeleteTap;
 
@@ -66,8 +68,10 @@ class AppCustomChipWidget extends StatelessWidget {
           child: icon.isNotEmpty
               ? Chip(
                   avatar: icon.isNotEmpty
-                      ? Utils.buildSvgWithAssets(
-                          icon: icon,
+                      ? isIconPNG
+                          ? Image.asset(icon, width: iconS, height: iconS)
+                          : Utils.buildSvgWithAssets(
+                              icon: icon,
                           width: iconS,
                           height: iconS,
                           iconColor: iconHasColor ? iconColor : null,
diff --git a/pubspec.yaml b/pubspec.yaml
index 3d6604c..6f014cb 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -59,7 +59,8 @@ dependencies:
   geolocator: ^14.0.2
   dropdown_search: ^6.0.2
   google_maps_flutter: ^2.13.1
-  flutter_zoom_videosdk: ^2.1.10
+  flutter_zoom_videosdk: 2.1.10
+  dart_jsonwebtoken: ^3.2.0
   dartz: ^0.10.1
   equatable: ^2.0.7
   google_api_availability: ^5.0.1
@@ -79,6 +80,7 @@ dependencies:
   path_provider: ^2.0.8
   open_filex: ^4.7.0
   flutter_swiper_view: ^1.1.8
+  flutter_callkit_incoming: ^3.0.0
 
   location: ^8.0.1
   gms_check: ^1.0.4
@@ -108,6 +110,7 @@ flutter:
     - assets/images/png/body_parts/female/
     - assets/images/svg/
     - assets/images/png/
+    - assets/images/png/zoom/
     - assets/animations/
     - assets/animations/lottie/
 
-- 
2.30.2


From 2b7379c1c3d140d20246586c473beaca7f30e381 Mon Sep 17 00:00:00 2001
From: haroon amjad 
Date: Sun, 7 Dec 2025 09:14:17 +0300
Subject: [PATCH 20/39] Waiting appointment implementation in progress

---
 android/app/proguard-rules.pro                |  5 +-
 .../images/svg/doctor_profile_rating_icon.svg |  4 +
 .../svg/doctor_profile_reviews_icon.svg       |  7 ++
 assets/images/svg/waitingAppo.svg             |  6 ++
 lib/core/app_assets.dart                      |  1 +
 .../book_appointments_view_model.dart         |  4 +
 .../waiting_appointment_info.dart             | 74 +++++++++++++++++++
 .../widgets/appointment_calendar.dart         | 53 +++++++++----
 8 files changed, 139 insertions(+), 15 deletions(-)
 create mode 100644 assets/images/svg/doctor_profile_rating_icon.svg
 create mode 100644 assets/images/svg/doctor_profile_reviews_icon.svg
 create mode 100644 assets/images/svg/waitingAppo.svg
 create mode 100644 lib/presentation/book_appointment/waiting_appointment/waiting_appointment_info.dart

diff --git a/android/app/proguard-rules.pro b/android/app/proguard-rules.pro
index ab7b2ca..9c1827a 100644
--- a/android/app/proguard-rules.pro
+++ b/android/app/proguard-rules.pro
@@ -69,4 +69,7 @@
 
 # Penguin classes
 -keep class com.peng.pennavmap.models.** { *; }
--keep class com.peng.pennavmap.db.** { *; }
\ No newline at end of file
+-keep class com.peng.pennavmap.db.** { *; }
+
+-keep class com.hiennv.flutter_callkit_incoming.** { *; }
+-keepattributes Signature, Annotation, InnerClasses, EnclosingMethod
\ No newline at end of file
diff --git a/assets/images/svg/doctor_profile_rating_icon.svg b/assets/images/svg/doctor_profile_rating_icon.svg
new file mode 100644
index 0000000..f658411
--- /dev/null
+++ b/assets/images/svg/doctor_profile_rating_icon.svg
@@ -0,0 +1,4 @@
+
+    
+    
+
diff --git a/assets/images/svg/doctor_profile_reviews_icon.svg b/assets/images/svg/doctor_profile_reviews_icon.svg
new file mode 100644
index 0000000..9ef9f71
--- /dev/null
+++ b/assets/images/svg/doctor_profile_reviews_icon.svg
@@ -0,0 +1,7 @@
+
+    
+    
+    
+    
+    
+
diff --git a/assets/images/svg/waitingAppo.svg b/assets/images/svg/waitingAppo.svg
new file mode 100644
index 0000000..c9bd009
--- /dev/null
+++ b/assets/images/svg/waitingAppo.svg
@@ -0,0 +1,6 @@
+
+  
+    
+    
+  
+
diff --git a/lib/core/app_assets.dart b/lib/core/app_assets.dart
index 613fba1..f3ff8fd 100644
--- a/lib/core/app_assets.dart
+++ b/lib/core/app_assets.dart
@@ -177,6 +177,7 @@ class AppAssets {
   static const String ic_rrt_vehicle = '$svgBasePath/ic_rrt_vehicle.svg';
   static const String doctor_profile_rating_icon = '$svgBasePath/doctor_profile_rating_icon.svg';
   static const String doctor_profile_reviews_icon = '$svgBasePath/doctor_profile_reviews_icon.svg';
+  static const String waiting_appointment_icon = '$svgBasePath/waitingAppo.svg';
 
 
   //bottom navigation//
diff --git a/lib/features/book_appointments/book_appointments_view_model.dart b/lib/features/book_appointments/book_appointments_view_model.dart
index bcc88ff..a97cb82 100644
--- a/lib/features/book_appointments/book_appointments_view_model.dart
+++ b/lib/features/book_appointments/book_appointments_view_model.dart
@@ -112,6 +112,8 @@ class BookAppointmentsViewModel extends ChangeNotifier {
   String? selectedClinicForFilters;
   bool applyFilters = false;
 
+  bool isWaitingAppointmentAvailable = false;
+
   ///variables for laser clinic
   List femaleLaserCategory = [
     LaserCategoryType(1, 'bodyString'),
@@ -466,6 +468,8 @@ class BookAppointmentsViewModel extends ChangeNotifier {
           }
           initialSlotDuration = apiResponse.data["InitialSlotDuration"];
           freeSlotsResponse = apiResponse.data['FreeTimeSlots'];
+          // isWaitingAppointmentAvailable = apiResponse.data["IsAllowToBookWaitingAppointment"];
+          isWaitingAppointmentAvailable = true;
           freeSlotsResponse.forEach((element) {
             // date = (isLiveCareSchedule != null && isLiveCareSchedule)
             //     ? DateUtil.convertStringToDate(element)
diff --git a/lib/presentation/book_appointment/waiting_appointment/waiting_appointment_info.dart b/lib/presentation/book_appointment/waiting_appointment/waiting_appointment_info.dart
new file mode 100644
index 0000000..d41937d
--- /dev/null
+++ b/lib/presentation/book_appointment/waiting_appointment/waiting_appointment_info.dart
@@ -0,0 +1,74 @@
+import 'package:easy_localization/easy_localization.dart';
+import 'package:flutter/material.dart';
+import 'package:hmg_patient_app_new/core/app_assets.dart';
+import 'package:hmg_patient_app_new/core/utils/size_utils.dart';
+import 'package:hmg_patient_app_new/core/utils/utils.dart';
+import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
+import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
+import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
+import 'package:hmg_patient_app_new/theme/colors.dart';
+import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart';
+import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart';
+
+class WaitingAppointmentInfo extends StatelessWidget {
+  const WaitingAppointmentInfo({super.key});
+
+  @override
+  Widget build(BuildContext context) {
+    return Scaffold(
+      backgroundColor: AppColors.bgScaffoldColor,
+      body: Column(
+        children: [
+          Expanded(
+            child: CollapsingListView(
+              title: "Waiting Appointment".needTranslation,
+              child: SingleChildScrollView(
+                child: Column(
+                  crossAxisAlignment: CrossAxisAlignment.start,
+                  children: [
+                    SizedBox(height: 24.h),
+                    Container(
+                      decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
+                        color: AppColors.whiteColor,
+                        borderRadius: 24.h,
+                        hasShadow: true,
+                      ),
+                      child: Column(
+                        crossAxisAlignment: CrossAxisAlignment.start,
+                        children: [
+                          Utils.buildSvgWithAssets(icon: AppAssets.waiting_appointment_icon, width: 48.h, height: 48.h, fit: BoxFit.contain)
+                        ],
+                      ),
+                    ),
+                  ],
+                ).paddingSymmetrical(24.w, 0),
+              ),
+            ),
+          ),
+          Container(
+            decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
+              color: AppColors.whiteColor,
+              borderRadius: 24.h,
+              hasShadow: true,
+            ),
+            child: CustomButton(
+              text: "Continue".needTranslation,
+              onPressed: () async {},
+              backgroundColor: AppColors.primaryRedColor,
+              borderColor: AppColors.primaryRedColor,
+              textColor: AppColors.whiteColor,
+              fontSize: 16,
+              fontWeight: FontWeight.w500,
+              borderRadius: 12,
+              padding: EdgeInsets.fromLTRB(10, 0, 10, 0),
+              height: 50.h,
+              icon: AppAssets.calendar,
+              iconColor: AppColors.whiteColor,
+              iconSize: 20.h,
+            ).paddingSymmetrical(24.h, 24.h),
+          ),
+        ],
+      ),
+    );
+  }
+}
diff --git a/lib/presentation/book_appointment/widgets/appointment_calendar.dart b/lib/presentation/book_appointment/widgets/appointment_calendar.dart
index 54ff282..7e2e7ba 100644
--- a/lib/presentation/book_appointment/widgets/appointment_calendar.dart
+++ b/lib/presentation/book_appointment/widgets/appointment_calendar.dart
@@ -15,6 +15,7 @@ import 'package:hmg_patient_app_new/features/book_appointments/book_appointments
 import 'package:hmg_patient_app_new/features/book_appointments/models/timeslots.dart';
 import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
 import 'package:hmg_patient_app_new/presentation/book_appointment/review_appointment_page.dart';
+import 'package:hmg_patient_app_new/presentation/book_appointment/waiting_appointment/waiting_appointment_info.dart';
 import 'package:hmg_patient_app_new/presentation/home/navigation_screen.dart';
 import 'package:hmg_patient_app_new/theme/colors.dart';
 import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart';
@@ -27,7 +28,7 @@ import 'package:smooth_corner/smooth_corner.dart';
 import 'package:syncfusion_flutter_calendar/calendar.dart';
 
 class AppointmentCalendar extends StatefulWidget {
-  const AppointmentCalendar({super.key});
+  AppointmentCalendar({super.key});
 
   @override
   State createState() => _AppointmentCalendarState();
@@ -54,7 +55,6 @@ class _AppointmentCalendarState extends State {
 
   String selectedTime = "";
 
-  bool isWaitingAppointmentAvailable = false;
   final _selectedDay = DateTime.now();
 
   @override
@@ -176,13 +176,22 @@ class _AppointmentCalendarState extends State {
             text: "Select".needTranslation,
             onPressed: () async {
               if (appState.isAuthenticated) {
-                bookAppointmentsViewModel.setSelectedAppointmentDateTime(selectedDate, selectedTime);
-                Navigator.of(context).pop();
-                Navigator.of(context).push(
-                  CustomPageRoute(
-                    page: ReviewAppointmentPage(),
-                  ),
-                );
+                if(selectedTime == "Waiting Appointment".needTranslation){
+                  Navigator.of(context).pop();
+                  Navigator.of(context).push(
+                    CustomPageRoute(
+                      page: WaitingAppointmentInfo(),
+                    ),
+                  );
+                } else {
+                  bookAppointmentsViewModel.setSelectedAppointmentDateTime(selectedDate, selectedTime);
+                  Navigator.of(context).pop();
+                  Navigator.of(context).push(
+                    CustomPageRoute(
+                      page: ReviewAppointmentPage(),
+                    ),
+                  );
+                }
               } else {
                 showCommonBottomSheetWithoutHeight(
                   context,
@@ -281,8 +290,8 @@ class _AppointmentCalendarState extends State {
   openTimeSlotsPickerForDate(DateTime dateStart, List freeSlots) {
     dayEvents.clear();
     DateTime dateStartObj = new DateTime(dateStart.year, dateStart.month, dateStart.day, 0, 0, 0, 0, 0);
-    if (isWaitingAppointmentAvailable && DateUtils.isSameDay(dateStart, DateTime.now())) {
-      dayEvents.add(TimeSlot(isoTime: "Waiting Appointment", start: DateTime.now(), end: DateTime.now(), vidaDate: ""));
+    if (bookAppointmentsViewModel.isWaitingAppointmentAvailable && DateUtils.isSameDay(dateStart, DateTime.now())) {
+      dayEvents.add(TimeSlot(isoTime: "Waiting Appointment".needTranslation, start: DateTime.now(), end: DateTime.now(), vidaDate: ""));
     }
     freeSlots.forEach((v) {
       if (v.start == dateStartObj) dayEvents.add(v);
@@ -321,9 +330,25 @@ class TimeSlotChip extends StatelessWidget {
   Widget build(BuildContext context) {
     return GestureDetector(
       onTap: onTap,
-      child: Container(
-        padding: EdgeInsets.symmetric(horizontal: 14.h, vertical: 8.h),
-        decoration: ShapeDecoration(
+      child: label == "Waiting Appointment".needTranslation
+          ? Container(
+              padding: EdgeInsets.symmetric(horizontal: 14.h, vertical: 8.h),
+              decoration: ShapeDecoration(
+                color: isSelected ? AppColors.warningColorYellow : AppColors.whiteColor,
+                shape: SmoothRectangleBorder(
+                  borderRadius: BorderRadius.circular(8.h),
+                  smoothness: 1,
+                  side: BorderSide(color: isSelected ? AppColors.warningColorYellow : AppColors.borderOnlyColor.withOpacity(0.2), width: 1),
+                ),
+              ),
+              child: label.toText12(
+                color: isSelected ? AppColors.whiteColor : Colors.black87,
+                fontWeight: FontWeight.w500,
+              ),
+            )
+          : Container(
+              padding: EdgeInsets.symmetric(horizontal: 14.h, vertical: 8.h),
+              decoration: ShapeDecoration(
           color: AppColors.whiteColor,
           shape: SmoothRectangleBorder(
             borderRadius: BorderRadius.circular(8.h),
-- 
2.30.2


From 581a4a5a74fcf12afad01a4a64bdf5da437badca Mon Sep 17 00:00:00 2001
From: haroon amjad 
Date: Sun, 7 Dec 2025 12:30:15 +0300
Subject: [PATCH 21/39] WalkIn Appointment implementation done

---
 .../book_appointments_repo.dart               | 157 +++++
 .../book_appointments_view_model.dart         | 121 ++++
 ...ient_appointment_share_response_model.dart |   2 +-
 .../review_appointment_page.dart              |  42 +-
 .../waiting_appointment_info.dart             |  58 +-
 ...ting_appointment_online_checkin_sheet.dart | 161 +++++
 .../waiting_appointment_payment_page.dart     | 644 ++++++++++++++++++
 .../widgets/appointment_calendar.dart         |   3 +
 lib/presentation/home/landing_page.dart       |   2 +-
 9 files changed, 1177 insertions(+), 13 deletions(-)
 create mode 100644 lib/presentation/book_appointment/waiting_appointment/waiting_appointment_online_checkin_sheet.dart
 create mode 100644 lib/presentation/book_appointment/waiting_appointment/waiting_appointment_payment_page.dart

diff --git a/lib/features/book_appointments/book_appointments_repo.dart b/lib/features/book_appointments/book_appointments_repo.dart
index 8aafc9b..3683d57 100644
--- a/lib/features/book_appointments/book_appointments_repo.dart
+++ b/lib/features/book_appointments/book_appointments_repo.dart
@@ -14,6 +14,7 @@ import 'package:hmg_patient_app_new/features/book_appointments/models/resp_model
 import 'package:hmg_patient_app_new/features/book_appointments/models/resp_models/get_patient_dental_plan_response_model.dart';
 import 'package:hmg_patient_app_new/features/my_appointments/models/resp_models/hospital_model.dart';
 import 'package:hmg_patient_app_new/features/my_appointments/models/resp_models/patient_appointment_history_response_model.dart';
+import 'package:hmg_patient_app_new/features/my_appointments/models/resp_models/patient_appointment_share_response_model.dart';
 import 'package:hmg_patient_app_new/services/logger_service.dart';
 
 import 'models/resp_models/laser_body_parts.dart';
@@ -84,6 +85,22 @@ abstract class BookAppointmentsRepo {
 
   Future>>> getLaserClinics(int laserCategoryID, int projectID, int languageID,
       {Function(dynamic)? onSuccess, Function(String)? onError});
+
+  Future>> checkScannedNFCAndQRCode(String nfcCode, int projectId, {Function(dynamic)? onSuccess, Function(String)? onError});
+
+  Future>> getPatientShareWalkInAppointment({required int projectID, required int clinicID, required int doctorID});
+
+  Future>> insertSpecificAppointmentForWalkIn(
+      {required int docID,
+      required int clinicID,
+      required int projectID,
+      required String selectedTime,
+      required String selectedDate,
+      required int initialSlotDuration,
+      required int genderID,
+      required int userAge,
+      Function(dynamic)? onSuccess,
+      Function(String)? onError});
 }
 
 class BookAppointmentsRepoImp implements BookAppointmentsRepo {
@@ -848,4 +865,144 @@ class BookAppointmentsRepoImp implements BookAppointmentsRepo {
       return Left(UnknownFailure(e.toString()));
     }
   }
+
+  @override
+  Future> checkScannedNFCAndQRCode(String nfcCode, int projectId, {Function(dynamic)? onSuccess, Function(String)? onError}) async {
+    Map mapDevice = {"NFC_Code": nfcCode, "ProjectID": projectId};
+
+    try {
+      GenericApiModel? apiResponse;
+      Failure? failure;
+      await apiClient.post(
+        CHECK_SCANNED_NFC_QR_CODE,
+        body: mapDevice,
+        onFailure: (error, statusCode, {messageStatus, failureType}) {
+          failure = failureType;
+        },
+        onSuccess: (response, statusCode, {messageStatus, errorMessage}) {
+          try {
+            apiResponse = GenericApiModel(
+              messageStatus: messageStatus,
+              statusCode: statusCode,
+              errorMessage: null,
+              data: response,
+            );
+          } catch (e) {
+            failure = DataParsingFailure(e.toString());
+          }
+        },
+      );
+      if (failure != null) return Left(failure!);
+      if (apiResponse == null) return Left(ServerFailure("Unknown error"));
+      return Right(apiResponse!);
+    } catch (e) {
+      return Left(UnknownFailure(e.toString()));
+    }
+  }
+
+  @override
+  Future>> getPatientShareWalkInAppointment({required int projectID, required int clinicID, required int doctorID}) async {
+    Map mapRequest = {"ProjectID": projectID, "ClinicID": clinicID, "DoctorID": doctorID};
+
+    try {
+      GenericApiModel? apiResponse;
+      Failure? failure;
+      await apiClient.post(
+        GET_PATIENT_SHARE_FOR_WALKIN_APPOINTMENT,
+        body: mapRequest,
+        onFailure: (error, statusCode, {messageStatus, failureType}) {
+          failure = failureType;
+        },
+        onSuccess: (response, statusCode, {messageStatus, errorMessage}) {
+          try {
+            final list = response['OnlineCheckInAppointmentsWalkInModel'];
+            if (list == null || list.isEmpty) {
+              throw Exception("patient share list is empty");
+            }
+
+            final patientShareObj = PatientAppointmentShareResponseModel.fromJson(list);
+            patientShareObj.isCash = response["IsCash"];
+            patientShareObj.isEligible = response["IsEligible"];
+            patientShareObj.isInsured = response["IsInsured"];
+
+            apiResponse = GenericApiModel(
+              messageStatus: messageStatus,
+              statusCode: statusCode,
+              errorMessage: null,
+              data: patientShareObj,
+            );
+          } catch (e) {
+            failure = DataParsingFailure(e.toString());
+          }
+        },
+      );
+      if (failure != null) return Left(failure!);
+      if (apiResponse == null) return Left(ServerFailure("Unknown error"));
+      return Right(apiResponse!);
+    } catch (e) {
+      return Left(UnknownFailure(e.toString()));
+    }
+  }
+
+  @override
+  Future> insertSpecificAppointmentForWalkIn(
+      {required int docID,
+      required int clinicID,
+      required int projectID,
+      required String selectedTime,
+      required String selectedDate,
+      required int initialSlotDuration,
+      required int genderID,
+      required int userAge,
+      Function(dynamic)? onSuccess,
+      Function(String)? onError}) async {
+    Map mapDevice = {
+      "IsForLiveCare": true,
+      "ProjectID": projectID,
+      "ClinicID": clinicID,
+      "DoctorID": docID,
+      "StartTime": selectedTime,
+      "SelectedTime": selectedTime,
+      "EndTime": selectedTime,
+      "InitialSlotDuration": initialSlotDuration,
+      "StrAppointmentDate": selectedDate,
+      "IsVirtual": false,
+      "BookedBy": 102,
+      "VisitType": 1,
+      "VisitFor": 1,
+      "GenderID": genderID,
+      "Age": userAge
+    };
+
+    try {
+      GenericApiModel? apiResponse;
+      Failure? failure;
+      await apiClient.post(
+        INSERT_WALKIN_APPOINTMENT,
+        body: mapDevice,
+        onFailure: (error, statusCode, {messageStatus, failureType}) {
+          failure = failureType;
+        },
+        onSuccess: (response, statusCode, {messageStatus, errorMessage}) {
+          try {
+            final appointmentNo = response['AppointmentNo'];
+
+            apiResponse = GenericApiModel(
+              messageStatus: messageStatus,
+              statusCode: statusCode,
+              errorMessage: response["ErrorEndUserMessage"],
+              data: response,
+            );
+          } catch (e) {
+            failure = DataParsingFailure(e.toString());
+          }
+        },
+      );
+      if (failure != null) return Left(failure!);
+      if (apiResponse == null) return Left(ServerFailure("Unknown error"));
+      return Right(apiResponse!);
+    } catch (e) {
+      return Left(UnknownFailure(e.toString()));
+    }
+  }
 }
diff --git a/lib/features/book_appointments/book_appointments_view_model.dart b/lib/features/book_appointments/book_appointments_view_model.dart
index a97cb82..2413827 100644
--- a/lib/features/book_appointments/book_appointments_view_model.dart
+++ b/lib/features/book_appointments/book_appointments_view_model.dart
@@ -24,6 +24,7 @@ import 'package:hmg_patient_app_new/features/book_appointments/models/timeslots.
 import 'package:hmg_patient_app_new/features/my_appointments/models/facility_selection.dart';
 import 'package:hmg_patient_app_new/features/my_appointments/models/resp_models/doctor_list_api_response.dart';
 import 'package:hmg_patient_app_new/features/my_appointments/models/resp_models/patient_appointment_history_response_model.dart';
+import 'package:hmg_patient_app_new/features/my_appointments/models/resp_models/patient_appointment_share_response_model.dart';
 import 'package:hmg_patient_app_new/features/my_appointments/my_appointments_view_model.dart';
 import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
 import 'package:hmg_patient_app_new/presentation/home/navigation_screen.dart';
@@ -114,6 +115,13 @@ class BookAppointmentsViewModel extends ChangeNotifier {
 
   bool isWaitingAppointmentAvailable = false;
 
+  bool isWaitingAppointmentSelected = false;
+  int waitingAppointmentProjectID = 0;
+  DoctorsListResponseModel? waitingAppointmentDoctor;
+  String waitingAppointmentNFCCode = "";
+
+  PatientAppointmentShareResponseModel? patientWalkInAppointmentShareResponseModel;
+
   ///variables for laser clinic
   List femaleLaserCategory = [
     LaserCategoryType(1, 'bodyString'),
@@ -173,11 +181,32 @@ class BookAppointmentsViewModel extends ChangeNotifier {
     dentalChiefComplaintsList.clear();
     isContinueDentalPlan = false;
     isChiefComplaintsListLoading = true;
+    isWaitingAppointmentSelected = false;
     bodyTypes = [maleLaserCategory, femaleLaserCategory];
     // getLocation();
     notifyListeners();
   }
 
+  setIsWaitingAppointmentSelected(bool isWaitingAppointmentSelected) {
+    this.isWaitingAppointmentSelected = isWaitingAppointmentSelected;
+    notifyListeners();
+  }
+
+  setWaitingAppointmentDoctor(DoctorsListResponseModel waitingAppointmentDoctor) {
+    this.waitingAppointmentDoctor = waitingAppointmentDoctor;
+    notifyListeners();
+  }
+
+  setWaitingAppointmentNFCCode(String waitingAppointmentNFCCode) {
+    this.waitingAppointmentNFCCode = waitingAppointmentNFCCode;
+    notifyListeners();
+  }
+
+  setWaitingAppointmentProjectID(int projectID) {
+    waitingAppointmentProjectID = projectID;
+    notifyListeners();
+  }
+
   setIsDoctorsListLoading(bool value) {
     if (value) {
       doctorsList.clear();
@@ -470,6 +499,7 @@ class BookAppointmentsViewModel extends ChangeNotifier {
           freeSlotsResponse = apiResponse.data['FreeTimeSlots'];
           // isWaitingAppointmentAvailable = apiResponse.data["IsAllowToBookWaitingAppointment"];
           isWaitingAppointmentAvailable = true;
+
           freeSlotsResponse.forEach((element) {
             // date = (isLiveCareSchedule != null && isLiveCareSchedule)
             //     ? DateUtil.convertStringToDate(element)
@@ -1167,4 +1197,95 @@ class BookAppointmentsViewModel extends ChangeNotifier {
     laserBodyPartsList = [];
     duration = 0;
   }
+
+  Future checkScannedNFCAndQRCode(String nfcCode, int projectId, {Function(dynamic)? onSuccess, Function(String)? onError}) async {
+    final result = await bookAppointmentsRepo.checkScannedNFCAndQRCode(nfcCode, projectId);
+
+    result.fold(
+      (failure) async {
+        onError!("Invalid verification point scanned.".needTranslation);
+      },
+      (apiResponse) {
+        // if (apiResponse.data['returnValue'] == 0) {
+        //   onError!("Invalid verification point scanned.".needTranslation);
+        // } else if (apiResponse.data['returnValue'] == 1) {
+        notifyListeners();
+        if (onSuccess != null) {
+          onSuccess(apiResponse);
+        }
+        // }
+      },
+    );
+  }
+
+  Future getWalkInPatientShareAppointment({Function(dynamic)? onSuccess, Function(String)? onError}) async {
+    final result = await bookAppointmentsRepo.getPatientShareWalkInAppointment(projectID: waitingAppointmentProjectID, clinicID: selectedDoctor.clinicID!, doctorID: selectedDoctor.doctorID!);
+
+    result.fold(
+      (failure) async {
+        if (onError != null) {
+          onError(failure.message);
+        }
+        // await errorHandlerService.handleError(
+        //     failure: failure,
+        //     onOkPressed: () {
+        //       onError!(failure.message);
+        //     });
+      },
+      (apiResponse) {
+        if (apiResponse.messageStatus == 2) {
+          onError!(apiResponse.errorMessage!);
+          // dialogService.showErrorDialog(message: apiResponse.errorMessage!, onOkPressed: () {});
+        } else if (apiResponse.messageStatus == 1) {
+          patientWalkInAppointmentShareResponseModel = apiResponse.data!;
+          notifyListeners();
+          if (onSuccess != null) {
+            onSuccess(apiResponse);
+          }
+        }
+      },
+    );
+  }
+
+  Future insertSpecificAppointmentForWalkIn({Function(dynamic p1)? onSuccess, Function(dynamic p1)? onError}) async {
+    _appState = getIt();
+    final result = await bookAppointmentsRepo.insertSpecificAppointmentForWalkIn(
+        docID: selectedDoctor.doctorID!,
+        clinicID: selectedDoctor.clinicID!,
+        projectID: selectedDoctor.projectID!,
+        selectedDate: selectedAppointmentDate,
+        selectedTime: selectedAppointmentTime,
+        initialSlotDuration: initialSlotDuration,
+        genderID: _appState.getAuthenticatedUser()!.gender!,
+        userAge: _appState.getAuthenticatedUser()!.age!,
+        onError: onError);
+
+    result.fold(
+      (failure) async {
+        print(failure);
+      },
+      (apiResponse) {
+        if (apiResponse.messageStatus == 2) {
+          LoadingUtils.hideFullScreenLoader();
+          showCommonBottomSheetWithoutHeight(
+            title: LocaleKeys.notice.tr(context: navigationService.navigatorKey.currentContext!),
+            navigationService.navigatorKey.currentContext!,
+            child: Utils.getErrorWidget(loadingText: apiResponse.errorMessage),
+            callBackFunc: () {},
+            isFullScreen: false,
+            isCloseButtonVisible: true,
+          );
+        } else if (apiResponse.messageStatus == 1) {
+          if (apiResponse.data == null || apiResponse.data!.isEmpty) {
+            onError!("Unexpected Error Occurred".needTranslation);
+            return;
+          }
+          notifyListeners();
+          if (onSuccess != null) {
+            onSuccess(apiResponse);
+          }
+        }
+      },
+    );
+  }
 }
diff --git a/lib/features/my_appointments/models/resp_models/patient_appointment_share_response_model.dart b/lib/features/my_appointments/models/resp_models/patient_appointment_share_response_model.dart
index 2021fff..1dc1cbe 100644
--- a/lib/features/my_appointments/models/resp_models/patient_appointment_share_response_model.dart
+++ b/lib/features/my_appointments/models/resp_models/patient_appointment_share_response_model.dart
@@ -141,7 +141,7 @@ class PatientAppointmentShareResponseModel {
     doctorID = json['DoctorID'];
     doctorImageURL = json['DoctorImageURL'];
     doctorNameObj = json['DoctorNameObj'];
-    doctorSpeciality = json['DoctorSpeciality'].cast();
+    // doctorSpeciality = json['DoctorSpeciality'].cast();
     errCode = json['ErrCode'];
     groupID = json['GroupID'];
     iSAllowOnlineCheckedIN = json['ISAllowOnlineCheckedIN'];
diff --git a/lib/presentation/book_appointment/review_appointment_page.dart b/lib/presentation/book_appointment/review_appointment_page.dart
index 0cb4b2d..415d342 100644
--- a/lib/presentation/book_appointment/review_appointment_page.dart
+++ b/lib/presentation/book_appointment/review_appointment_page.dart
@@ -3,6 +3,7 @@ import 'package:flutter/material.dart';
 import 'package:hmg_patient_app_new/core/app_assets.dart';
 import 'package:hmg_patient_app_new/core/app_state.dart';
 import 'package:hmg_patient_app_new/core/dependencies.dart';
+import 'package:hmg_patient_app_new/core/utils/date_util.dart';
 import 'package:hmg_patient_app_new/core/utils/loading_utils.dart';
 import 'package:hmg_patient_app_new/core/utils/size_utils.dart';
 import 'package:hmg_patient_app_new/core/utils/utils.dart';
@@ -12,11 +13,15 @@ import 'package:hmg_patient_app_new/features/authentication/authentication_view_
 import 'package:hmg_patient_app_new/features/book_appointments/book_appointments_view_model.dart';
 import 'package:hmg_patient_app_new/features/my_appointments/my_appointments_view_model.dart';
 import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
+import 'package:hmg_patient_app_new/presentation/book_appointment/waiting_appointment/waiting_appointment_payment_page.dart';
 import 'package:hmg_patient_app_new/presentation/home/navigation_screen.dart';
 import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart';
 import 'package:hmg_patient_app_new/theme/colors.dart';
 import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart';
 import 'package:hmg_patient_app_new/widgets/chip/app_custom_chip_widget.dart';
+import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart';
+import 'package:hmg_patient_app_new/widgets/loader/bottomsheet_loader.dart';
+import 'package:hmg_patient_app_new/widgets/loading_dialog.dart';
 import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart';
 import 'package:provider/provider.dart';
 
@@ -113,10 +118,14 @@ class _ReviewAppointmentPageState extends State {
                                   labelText: "${LocaleKeys.branch.tr(context: context)} ${bookAppointmentsViewModel.selectedDoctor.projectName}".needTranslation,
                                 ),
                                 AppCustomChipWidget(
-                                  labelText: "${LocaleKeys.date.tr(context: context)}: ${bookAppointmentsViewModel.selectedAppointmentDate}".needTranslation,
+                                  labelText:
+                                      "${LocaleKeys.date.tr(context: context)}: ${bookAppointmentsViewModel.isWaitingAppointmentSelected ? DateUtil.formatDateToDate(DateTime.now(), false) : bookAppointmentsViewModel.selectedAppointmentDate}"
+                                          .needTranslation,
                                 ),
                                 AppCustomChipWidget(
-                                  labelText: "${LocaleKeys.time.tr(context: context)}: ${bookAppointmentsViewModel.selectedAppointmentTime}".needTranslation,
+                                  labelText:
+                                      "${LocaleKeys.time.tr(context: context)}: ${bookAppointmentsViewModel.isWaitingAppointmentSelected ? "Waiting Appointment".needTranslation : bookAppointmentsViewModel.selectedAppointmentTime}"
+                                          .needTranslation,
                                 ),
                               ],
                             ),
@@ -185,9 +194,13 @@ class _ReviewAppointmentPageState extends State {
               hasShadow: true,
             ),
             child: CustomButton(
-              text: LocaleKeys.bookAppo.tr(context: context),
+              text: bookAppointmentsViewModel.isWaitingAppointmentSelected ? "Add to waiting list" : LocaleKeys.bookAppo.tr(context: context),
               onPressed: () async {
-                initiateBookAppointment();
+                if (bookAppointmentsViewModel.isWaitingAppointmentSelected) {
+                  getWalkInAppointmentPatientShare();
+                } else {
+                  initiateBookAppointment();
+                }
               },
               backgroundColor: AppColors.primaryRedColor,
               borderColor: AppColors.primaryRedColor,
@@ -204,6 +217,27 @@ class _ReviewAppointmentPageState extends State {
     );
   }
 
+  void getWalkInAppointmentPatientShare() async {
+    LoaderBottomSheet.showLoader(loadingText: "Fetching Appointment Share...".needTranslation);
+    await bookAppointmentsViewModel.getWalkInPatientShareAppointment(onSuccess: (val) {
+      LoaderBottomSheet.hideLoader();
+      Navigator.of(context).push(
+        CustomPageRoute(
+          page: WaitingAppointmentPaymentPage(),
+        ),
+      );
+    }, onError: (err) {
+      LoaderBottomSheet.hideLoader();
+      showCommonBottomSheetWithoutHeight(
+        context,
+        child: Utils.getErrorWidget(loadingText: err),
+        callBackFunc: () {},
+        isFullScreen: false,
+        isCloseButtonVisible: true,
+      );
+    });
+  }
+
   void initiateBookAppointment() async {
     LoadingUtils.showFullScreenLoader(barrierDismissible: true, isSuccessDialog: false, loadingText: "Booking your appointment...".needTranslation);
     myAppointmentsViewModel.setIsAppointmentDataToBeLoaded(true);
diff --git a/lib/presentation/book_appointment/waiting_appointment/waiting_appointment_info.dart b/lib/presentation/book_appointment/waiting_appointment/waiting_appointment_info.dart
index d41937d..f832db6 100644
--- a/lib/presentation/book_appointment/waiting_appointment/waiting_appointment_info.dart
+++ b/lib/presentation/book_appointment/waiting_appointment/waiting_appointment_info.dart
@@ -5,16 +5,23 @@ import 'package:hmg_patient_app_new/core/utils/size_utils.dart';
 import 'package:hmg_patient_app_new/core/utils/utils.dart';
 import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
 import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
+import 'package:hmg_patient_app_new/features/book_appointments/book_appointments_view_model.dart';
 import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
+import 'package:hmg_patient_app_new/presentation/book_appointment/waiting_appointment/waiting_appointment_online_checkin_sheet.dart';
 import 'package:hmg_patient_app_new/theme/colors.dart';
 import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart';
 import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart';
+import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart';
+import 'package:provider/provider.dart';
 
 class WaitingAppointmentInfo extends StatelessWidget {
-  const WaitingAppointmentInfo({super.key});
+  WaitingAppointmentInfo({super.key});
+
+  late BookAppointmentsViewModel bookAppointmentsViewModel;
 
   @override
   Widget build(BuildContext context) {
+    bookAppointmentsViewModel = Provider.of(context, listen: false);
     return Scaffold(
       backgroundColor: AppColors.bgScaffoldColor,
       body: Column(
@@ -33,11 +40,40 @@ class WaitingAppointmentInfo extends StatelessWidget {
                         borderRadius: 24.h,
                         hasShadow: true,
                       ),
-                      child: Column(
-                        crossAxisAlignment: CrossAxisAlignment.start,
-                        children: [
-                          Utils.buildSvgWithAssets(icon: AppAssets.waiting_appointment_icon, width: 48.h, height: 48.h, fit: BoxFit.contain)
-                        ],
+                      child: Padding(
+                        padding: EdgeInsets.all(16.h),
+                        child: Column(
+                          crossAxisAlignment: CrossAxisAlignment.start,
+                          children: [
+                            Utils.buildSvgWithAssets(icon: AppAssets.waiting_appointment_icon, width: 48.h, height: 48.h, fit: BoxFit.contain),
+                            SizedBox(height: 16.h),
+                            "What is Waiting Appointment?".needTranslation.toText16(isBold: true),
+                            SizedBox(height: 16.h),
+                            "The waiting appointments feature allows you to book an appointment while you are inside the hospital building, and in case there is no available slot in the doctor’s schedule."
+                                .needTranslation
+                                .toText14(isBold: false),
+                            SizedBox(height: 16.h),
+                            "The appointment with the doctor is confirmed, but the time of entry is uncertain.".needTranslation.toText14(isBold: false),
+                            SizedBox(height: 24.h),
+                            Row(
+                              crossAxisAlignment: CrossAxisAlignment.start,
+                              children: [
+                                Icon(
+                                  Icons.warning,
+                                  size: 20,
+                                  color: AppColors.warningColorYellow,
+                                ),
+                                SizedBox(width: 10.w),
+                                SizedBox(
+                                  width: MediaQuery.of(context).size.width * 0.7,
+                                  child: "Note: You must have to pay within 10 minutes of booking, otherwise your appointment will be cancelled automatically"
+                                      .needTranslation
+                                      .toText14(isBold: true, color: AppColors.warningColorYellow),
+                                ),
+                              ],
+                            ),
+                          ],
+                        ),
                       ),
                     ),
                   ],
@@ -53,7 +89,15 @@ class WaitingAppointmentInfo extends StatelessWidget {
             ),
             child: CustomButton(
               text: "Continue".needTranslation,
-              onPressed: () async {},
+              onPressed: () async {
+                showCommonBottomSheetWithoutHeight(context,
+                    title: LocaleKeys.onlineCheckIn.tr(),
+                    child: WaitingAppointmentOnlineCheckinSheet(
+                      bookAppointmentsViewModel: bookAppointmentsViewModel,
+                    ),
+                    callBackFunc: () {},
+                    isFullScreen: false);
+              },
               backgroundColor: AppColors.primaryRedColor,
               borderColor: AppColors.primaryRedColor,
               textColor: AppColors.whiteColor,
diff --git a/lib/presentation/book_appointment/waiting_appointment/waiting_appointment_online_checkin_sheet.dart b/lib/presentation/book_appointment/waiting_appointment/waiting_appointment_online_checkin_sheet.dart
new file mode 100644
index 0000000..965844a
--- /dev/null
+++ b/lib/presentation/book_appointment/waiting_appointment/waiting_appointment_online_checkin_sheet.dart
@@ -0,0 +1,161 @@
+import 'package:easy_localization/easy_localization.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_nfc_kit/flutter_nfc_kit.dart';
+import 'package:hmg_patient_app_new/core/app_assets.dart';
+import 'package:hmg_patient_app_new/core/app_state.dart';
+import 'package:hmg_patient_app_new/core/common_models/privilege/ProjectDetailListModel.dart';
+import 'package:hmg_patient_app_new/core/dependencies.dart';
+import 'package:hmg_patient_app_new/core/location_util.dart';
+import 'package:hmg_patient_app_new/core/utils/size_utils.dart';
+import 'package:hmg_patient_app_new/core/utils/utils.dart';
+import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
+import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
+import 'package:hmg_patient_app_new/features/book_appointments/book_appointments_view_model.dart';
+import 'package:hmg_patient_app_new/presentation/book_appointment/review_appointment_page.dart';
+import 'package:hmg_patient_app_new/theme/colors.dart';
+import 'package:barcode_scan2/barcode_scan2.dart';
+import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart';
+import 'package:hmg_patient_app_new/widgets/loader/bottomsheet_loader.dart';
+import 'package:hmg_patient_app_new/widgets/nfc/nfc_reader_sheet.dart';
+import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart';
+
+class WaitingAppointmentOnlineCheckinSheet extends StatelessWidget {
+  WaitingAppointmentOnlineCheckinSheet({super.key, required this.bookAppointmentsViewModel});
+
+  BookAppointmentsViewModel bookAppointmentsViewModel;
+
+  bool _supportsNFC = false;
+
+  late LocationUtils locationUtils;
+  late AppState appState;
+  ProjectDetailListModel projectDetailListModel = ProjectDetailListModel();
+
+  @override
+  Widget build(BuildContext context) {
+    appState = getIt.get();
+    locationUtils = getIt.get();
+    locationUtils.isShowConfirmDialog = true;
+    FlutterNfcKit.nfcAvailability.then((value) {
+      _supportsNFC = (value == NFCAvailability.available);
+    });
+    return Column(
+      crossAxisAlignment: CrossAxisAlignment.start,
+      children: [
+        checkInOptionCard(
+          AppAssets.checkin_location_icon,
+          "Live Location".needTranslation,
+          "Verify your location to be at hospital to check in".needTranslation,
+        ).onPress(() {
+          // locationUtils = LocationUtils(
+          //   isShowConfirmDialog: false,
+          //   navigationService: myAppointmentsViewModel.navigationService,
+          //   appState: myAppointmentsViewModel.appState,
+          // );
+          locationUtils.getCurrentLocation(onSuccess: (value) {
+            projectDetailListModel = Utils.getProjectDetailObj(appState, bookAppointmentsViewModel.waitingAppointmentProjectID);
+            double dist = Utils.distance(value.latitude, value.longitude, double.parse(projectDetailListModel.latitude!), double.parse(projectDetailListModel.longitude!)).ceilToDouble() * 1000;
+            print(dist);
+            if (dist <= projectDetailListModel.geofenceRadius!) {
+              checkScannedNFCAndQRCode(projectDetailListModel.checkInQrCode!, context);
+            } else {
+              showCommonBottomSheetWithoutHeight(context,
+                  title: "Error".needTranslation,
+                  child: Utils.getErrorWidget(loadingText: "Please ensure you're within the hospital location to perform online check-in.".needTranslation), callBackFunc: () {
+                Navigator.of(context).pop();
+              }, isFullScreen: false);
+            }
+          });
+        }),
+        SizedBox(height: 16.h),
+        checkInOptionCard(
+          AppAssets.checkin_nfc_icon,
+          "NFC (Near Field Communication)".needTranslation,
+          "Scan your phone via NFC board to check in".needTranslation,
+        ).onPress(() {
+          Future.delayed(const Duration(milliseconds: 500), () {
+            showNfcReader(context, onNcfScan: (String nfcId) {
+              Future.delayed(const Duration(milliseconds: 100), () {
+                checkScannedNFCAndQRCode(nfcId, context);
+              });
+            }, onCancel: () {});
+          });
+        }),
+        SizedBox(height: 16.h),
+        checkInOptionCard(
+          AppAssets.checkin_qr_icon,
+          "QR Code".needTranslation,
+          "Scan QR code with your camera to check in".needTranslation,
+        ).onPress(() async {
+          String onlineCheckInQRCode = (await BarcodeScanner.scan().then((value) => value.rawContent));
+          if (onlineCheckInQRCode != "") {
+            checkScannedNFCAndQRCode(onlineCheckInQRCode, context);
+          } else {}
+        }),
+      ],
+    );
+  }
+
+  Widget checkInOptionCard(String icon, String title, String subTitle) {
+    return Container(
+      decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
+        color: AppColors.whiteColor,
+        borderRadius: 20.h,
+        hasShadow: false,
+      ),
+      child: Column(
+        crossAxisAlignment: CrossAxisAlignment.start,
+        children: [
+          Utils.buildSvgWithAssets(icon: icon, width: 40.h, height: 40.h, fit: BoxFit.fill),
+          SizedBox(height: 16.h),
+          Row(
+            mainAxisAlignment: MainAxisAlignment.spaceBetween,
+            children: [
+              Expanded(
+                child: Column(
+                  crossAxisAlignment: CrossAxisAlignment.start,
+                  children: [
+                    title.toText16(isBold: true, color: AppColors.textColor),
+                    subTitle.toText12(fontWeight: FontWeight.w500, color: AppColors.greyTextColor),
+                  ],
+                ),
+              ),
+              Transform.flip(
+                flipX: appState.isArabic(),
+                child: Utils.buildSvgWithAssets(
+                  icon: AppAssets.forward_arrow_icon_small,
+                  iconColor: AppColors.blackColor,
+                  width: 18.h,
+                  height: 13.h,
+                  fit: BoxFit.contain,
+                ),
+              ),
+            ],
+          ),
+        ],
+      ).paddingAll(16.h),
+    );
+  }
+
+  void checkScannedNFCAndQRCode(String scannedCode, BuildContext context) async {
+    LoaderBottomSheet.showLoader(loadingText: "Processing Check-In...".needTranslation);
+    bookAppointmentsViewModel.checkScannedNFCAndQRCode(
+      scannedCode,
+      bookAppointmentsViewModel.waitingAppointmentProjectID,
+      onSuccess: (value) {
+        LoaderBottomSheet.hideLoader();
+        bookAppointmentsViewModel.setIsWaitingAppointmentSelected(true);
+        Navigator.of(context).push(
+          CustomPageRoute(
+            page: ReviewAppointmentPage(),
+          ),
+        );
+      },
+      onError: (err) {
+        LoaderBottomSheet.hideLoader();
+        showCommonBottomSheetWithoutHeight(context, title: "Error".needTranslation, child: Utils.getErrorWidget(loadingText: err), callBackFunc: () {
+          // Navigator.of(context).pop();
+        }, isFullScreen: false);
+      },
+    );
+  }
+}
diff --git a/lib/presentation/book_appointment/waiting_appointment/waiting_appointment_payment_page.dart b/lib/presentation/book_appointment/waiting_appointment/waiting_appointment_payment_page.dart
new file mode 100644
index 0000000..8f9943c
--- /dev/null
+++ b/lib/presentation/book_appointment/waiting_appointment/waiting_appointment_payment_page.dart
@@ -0,0 +1,644 @@
+import 'dart:async';
+import 'dart:developer';
+import 'dart:io';
+
+import 'package:easy_localization/easy_localization.dart';
+import 'package:flutter/material.dart';
+import 'package:hmg_patient_app_new/core/app_assets.dart';
+import 'package:hmg_patient_app_new/core/app_state.dart';
+import 'package:hmg_patient_app_new/core/cache_consts.dart';
+import 'package:hmg_patient_app_new/core/dependencies.dart';
+import 'package:hmg_patient_app_new/core/enums.dart';
+import 'package:hmg_patient_app_new/core/utils/date_util.dart';
+import 'package:hmg_patient_app_new/core/utils/size_utils.dart';
+import 'package:hmg_patient_app_new/core/utils/utils.dart';
+import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
+import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
+import 'package:hmg_patient_app_new/features/book_appointments/book_appointments_view_model.dart';
+import 'package:hmg_patient_app_new/features/my_appointments/models/resp_models/patient_appointment_history_response_model.dart';
+import 'package:hmg_patient_app_new/features/my_appointments/my_appointments_view_model.dart';
+import 'package:hmg_patient_app_new/features/payfort/models/apple_pay_request_insert_model.dart';
+import 'package:hmg_patient_app_new/features/payfort/payfort_view_model.dart';
+import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
+import 'package:hmg_patient_app_new/presentation/home/navigation_screen.dart';
+import 'package:hmg_patient_app_new/presentation/insurance/insurance_home_page.dart';
+import 'package:hmg_patient_app_new/theme/colors.dart';
+import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart';
+import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart';
+import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart';
+import 'package:hmg_patient_app_new/widgets/in_app_browser/InAppBrowser.dart';
+import 'package:hmg_patient_app_new/widgets/loader/bottomsheet_loader.dart';
+import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart';
+import 'package:provider/provider.dart';
+import 'package:smooth_corner/smooth_corner.dart';
+
+class WaitingAppointmentPaymentPage extends StatefulWidget {
+  WaitingAppointmentPaymentPage({super.key});
+
+  // PatientAppointmentHistoryResponseModel patientAppointmentHistoryResponseModel;
+
+  @override
+  State createState() => _WaitingAppointmentPaymentPageState();
+}
+
+class _WaitingAppointmentPaymentPageState extends State {
+  late BookAppointmentsViewModel bookAppointmentsViewModel;
+  late MyAppointmentsViewModel myAppointmentsViewModel;
+  late PayfortViewModel payfortViewModel;
+  late AppState appState;
+
+  MyInAppBrowser? browser;
+  String selectedPaymentMethod = "";
+
+  String transID = "";
+
+  bool isShowTamara = false;
+  String tamaraPaymentStatus = "";
+  String tamaraOrderID = "";
+
+  @override
+  void initState() {
+    scheduleMicrotask(() {
+      payfortViewModel.initPayfortViewModel();
+      payfortViewModel.setIsApplePayConfigurationLoading(false);
+      // myAppointmentsViewModel.getPatientShareAppointment(
+      //     widget.patientAppointmentHistoryResponseModel.projectID,
+      //     widget.patientAppointmentHistoryResponseModel.clinicID,
+      //     widget.patientAppointmentHistoryResponseModel.appointmentNo.toString(), widget.patientAppointmentHistoryResponseModel.isLiveCareAppointment ?? false, onSuccess: (val) {
+      //   myAppointmentsViewModel.getTamaraInstallmentsDetails().then((val) {
+      //     if (myAppointmentsViewModel.patientAppointmentShareResponseModel!.patientShareWithTax! >= myAppointmentsViewModel.getTamaraInstallmentsDetailsResponseModel!.minLimit!.amount! &&
+      //         myAppointmentsViewModel.patientAppointmentShareResponseModel!.patientShareWithTax! <= myAppointmentsViewModel.getTamaraInstallmentsDetailsResponseModel!.maxLimit!.amount!) {
+      //       setState(() {
+      //         isShowTamara = true;
+      //       });
+      //     }
+      //   });
+      // }, onError: (err) {
+      //   Navigator.of(context).pop();
+      //   Navigator.of(context).pop();
+      // });
+    });
+    super.initState();
+  }
+
+  @override
+  Widget build(BuildContext context) {
+    appState = getIt.get();
+    bookAppointmentsViewModel = Provider.of(context);
+    myAppointmentsViewModel = Provider.of(context);
+    payfortViewModel = Provider.of(context);
+    return Scaffold(
+      backgroundColor: AppColors.bgScaffoldColor,
+      body: Consumer(builder: (context, bookAppointmentsVM, child) {
+        return Column(
+          children: [
+            Expanded(
+              child: CollapsingListView(
+                title: "Appointment Payment".needTranslation,
+                child: SingleChildScrollView(
+                  child: Column(
+                    crossAxisAlignment: CrossAxisAlignment.start,
+                    children: [
+                      SizedBox(height: 24.h),
+                      Container(
+                        decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
+                          color: AppColors.whiteColor,
+                          borderRadius: 20.h,
+                          hasShadow: false,
+                        ),
+                        child: Row(
+                          mainAxisSize: MainAxisSize.max,
+                          children: [
+                            Column(
+                              crossAxisAlignment: CrossAxisAlignment.start,
+                              children: [
+                                Image.asset(AppAssets.mada, width: 72.h, height: 25.h),
+                                SizedBox(height: 16.h),
+                                "Mada".needTranslation.toText16(isBold: true),
+                              ],
+                            ),
+                            SizedBox(width: 8.h),
+                            const Spacer(),
+                            Transform.flip(
+                              flipX: appState.isArabic(),
+                              child: Utils.buildSvgWithAssets(
+                                icon: AppAssets.forward_arrow_icon_small,
+                                iconColor: AppColors.blackColor,
+                                width: 18.h,
+                                height: 13.h,
+                                fit: BoxFit.contain,
+                              ),
+                            ),
+                          ],
+                        ).paddingSymmetrical(16.h, 16.h),
+                      ).paddingSymmetrical(24.h, 0.h).onPress(() {
+                        selectedPaymentMethod = "MADA";
+                        openPaymentURL("mada");
+                      }),
+                      SizedBox(height: 16.h),
+                      Container(
+                        decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
+                          color: AppColors.whiteColor,
+                          borderRadius: 20.h,
+                          hasShadow: false,
+                        ),
+                        child: Row(
+                          mainAxisSize: MainAxisSize.max,
+                          children: [
+                            Column(
+                              crossAxisAlignment: CrossAxisAlignment.start,
+                              children: [
+                                Row(
+                                  children: [
+                                    Image.asset(AppAssets.visa, width: 50.h, height: 50.h),
+                                    SizedBox(width: 8.h),
+                                    Image.asset(AppAssets.Mastercard, width: 40.h, height: 40.h),
+                                  ],
+                                ),
+                                SizedBox(height: 16.h),
+                                "Visa or Mastercard".needTranslation.toText16(isBold: true),
+                              ],
+                            ),
+                            SizedBox(width: 8.h),
+                            const Spacer(),
+                            Transform.flip(
+                              flipX: appState.isArabic(),
+                              child: Utils.buildSvgWithAssets(
+                                icon: AppAssets.forward_arrow_icon_small,
+                                iconColor: AppColors.blackColor,
+                                width: 18.h,
+                                height: 13.h,
+                                fit: BoxFit.contain,
+                              ),
+                            ),
+                          ],
+                        ).paddingSymmetrical(16.h, 16.h),
+                      ).paddingSymmetrical(24.h, 0.h).onPress(() {
+                        selectedPaymentMethod = "VISA";
+                        openPaymentURL("visa");
+                      }),
+                      SizedBox(height: 16.h),
+                      isShowTamara
+                          ? Container(
+                              decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
+                                color: AppColors.whiteColor,
+                                borderRadius: 20.h,
+                                hasShadow: false,
+                              ),
+                              child: Row(
+                                mainAxisSize: MainAxisSize.max,
+                                children: [
+                                  Column(
+                                    crossAxisAlignment: CrossAxisAlignment.start,
+                                    children: [
+                                      Image.asset(AppAssets.tamara_en, width: 72.h, height: 25.h),
+                                      SizedBox(height: 16.h),
+                                      "Tamara".needTranslation.toText16(isBold: true),
+                                    ],
+                                  ),
+                                  SizedBox(width: 8.h),
+                                  const Spacer(),
+                                  Transform.flip(
+                                    flipX: appState.isArabic(),
+                                    child: Utils.buildSvgWithAssets(
+                                      icon: AppAssets.forward_arrow_icon_small,
+                                      iconColor: AppColors.blackColor,
+                                      width: 18.h,
+                                      height: 13.h,
+                                      fit: BoxFit.contain,
+                                    ),
+                                  ),
+                                ],
+                              ).paddingSymmetrical(16.h, 16.h),
+                            ).paddingSymmetrical(24.h, 0.h).onPress(() {
+                              selectedPaymentMethod = "TAMARA";
+                              openPaymentURL("tamara");
+                            })
+                          : SizedBox.shrink(),
+                    ],
+                  ),
+                ),
+              ),
+            ),
+            Container(
+              decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
+                color: AppColors.whiteColor,
+                borderRadius: 24.h,
+                hasShadow: false,
+              ),
+              child: Consumer(builder: (context, payfortVM, child) {
+                //TODO: Need to add loading state & animation for Apple Pay Configuration
+                return Column(
+                  crossAxisAlignment: CrossAxisAlignment.start,
+                  children: [
+                    (bookAppointmentsVM.patientWalkInAppointmentShareResponseModel!.isCash ?? true)
+                        ? Container(
+                            height: 50.h,
+                            decoration: ShapeDecoration(
+                              color: AppColors.secondaryLightRedBorderColor,
+                              shape: SmoothRectangleBorder(
+                                borderRadius: BorderRadius.only(topLeft: Radius.circular(24), topRight: Radius.circular(24)),
+                                smoothness: 1,
+                              ),
+                            ),
+                            child: Row(
+                              mainAxisAlignment: MainAxisAlignment.spaceBetween,
+                              children: [
+                                "Insurance expired or inactive".needTranslation.toText14(color: AppColors.primaryRedColor, weight: FontWeight.w500).paddingSymmetrical(24.h, 0.h),
+                                CustomButton(
+                                  text: LocaleKeys.updateInsurance.tr(context: context),
+                                  onPressed: () {
+                                    Navigator.of(context).push(
+                                      CustomPageRoute(
+                                        page: InsuranceHomePage(),
+                                      ),
+                                    );
+                                  },
+                                  backgroundColor: AppColors.primaryRedColor,
+                                  borderColor: AppColors.secondaryLightRedBorderColor,
+                                  textColor: AppColors.whiteColor,
+                                  fontSize: 10.f,
+                                  fontWeight: FontWeight.w500,
+                                  borderRadius: 8,
+                                  padding: EdgeInsets.fromLTRB(15, 0, 15, 0),
+                                  height: 30.h,
+                                ).paddingSymmetrical(24.h, 0.h),
+                              ],
+                            ),
+                          )
+                        : const SizedBox(),
+                    SizedBox(height: 24.h),
+                    "Total amount to pay".needTranslation.toText18(isBold: true).paddingSymmetrical(24.h, 0.h),
+                    SizedBox(height: 17.h),
+                    Row(
+                      mainAxisAlignment: MainAxisAlignment.spaceBetween,
+                      children: [
+                        "Amount before tax".needTranslation.toText14(isBold: true),
+                        Utils.getPaymentAmountWithSymbol(bookAppointmentsVM.patientWalkInAppointmentShareResponseModel!.patientShare!.toString().toText16(isBold: true), AppColors.blackColor, 13,
+                            isSaudiCurrency: true),
+                      ],
+                    ).paddingSymmetrical(24.h, 0.h),
+                    Row(
+                      mainAxisAlignment: MainAxisAlignment.spaceBetween,
+                      children: [
+                        "VAT 15%".needTranslation.toText14(isBold: true, color: AppColors.greyTextColor),
+                        Utils.getPaymentAmountWithSymbol(
+                            bookAppointmentsVM.patientWalkInAppointmentShareResponseModel!.patientTaxAmount!.toString().toText14(isBold: true, color: AppColors.greyTextColor),
+                            AppColors.greyTextColor,
+                            13,
+                            isSaudiCurrency: true),
+                      ],
+                    ).paddingSymmetrical(24.h, 0.h),
+                    SizedBox(height: 17.h),
+                    Row(
+                      mainAxisAlignment: MainAxisAlignment.spaceBetween,
+                      children: [
+                        "".needTranslation.toText14(isBold: true),
+                        Utils.getPaymentAmountWithSymbol(
+                            bookAppointmentsVM.patientWalkInAppointmentShareResponseModel!.patientShareWithTax!.toString().toText24(isBold: true), AppColors.blackColor, 17,
+                            isSaudiCurrency: true),
+                      ],
+                    ).paddingSymmetrical(24.h, 0.h),
+                    Platform.isIOS
+                        ? Utils.buildSvgWithAssets(
+                            icon: AppAssets.apple_pay_button,
+                            width: 200.h,
+                            height: 80.h,
+                            fit: BoxFit.contain,
+                          ).paddingSymmetrical(24.h, 0.h).onPress(() {
+                            // payfortVM.setIsApplePayConfigurationLoading(true);
+                            if (Utils.havePrivilege(103)) {
+                              startApplePay();
+                            } else {
+                              openPaymentURL("ApplePay");
+                            }
+                          })
+                        : SizedBox(height: 12.h),
+                    SizedBox(height: 12.h),
+                  ],
+                );
+              }),
+            ),
+          ],
+        );
+      }),
+    );
+  }
+
+  onBrowserLoadStart(String url) {
+    print("onBrowserLoadStart");
+    print(url);
+
+    if (selectedPaymentMethod == "tamara") {
+      if (Platform.isAndroid) {
+        Uri uri = new Uri.dataFromString(url);
+        tamaraPaymentStatus = uri.queryParameters['status']!;
+        tamaraOrderID = uri.queryParameters['AuthorizePaymentId']!;
+      } else {
+        Uri uri = new Uri.dataFromString(url);
+        tamaraPaymentStatus = uri.queryParameters['paymentStatus']!;
+        tamaraOrderID = uri.queryParameters['orderId']!;
+      }
+    }
+
+    // if(selectedPaymentMethod != "TAMARA") {
+    MyInAppBrowser.successURLS.forEach((element) {
+      if (url.contains(element)) {
+        browser?.close();
+        MyInAppBrowser.isPaymentDone = true;
+        return;
+      }
+    });
+    // }
+
+    // if(selectedPaymentMethod != "TAMARA") {
+    MyInAppBrowser.errorURLS.forEach((element) {
+      if (url.contains(element)) {
+        browser?.close();
+        MyInAppBrowser.isPaymentDone = false;
+        return;
+      }
+    });
+    // }
+  }
+
+  onBrowserExit(bool isPaymentMade) async {
+    checkPaymentStatus();
+  }
+
+  void checkPaymentStatus() async {
+    LoaderBottomSheet.showLoader(loadingText: "Checking payment status, Please wait...".needTranslation);
+    if (selectedPaymentMethod == "TAMARA") {
+      await payfortViewModel.checkTamaraPaymentStatus(
+          transactionID: transID,
+          onSuccess: (apiResponse) async {
+            if (apiResponse.data["status"].toString().toLowerCase() == "success") {
+              tamaraOrderID = apiResponse.data["tamara_order_id"].toString();
+              await payfortViewModel.updateTamaraRequestStatus(responseMessage: "success", status: "14", clientRequestID: transID, tamaraOrderID: tamaraOrderID);
+              await payfortViewModel.markAppointmentAsTamaraPaid(projectID: bookAppointmentsViewModel.selectedDoctor.projectID!, appointmentNo: DateTime.now().millisecondsSinceEpoch);
+              // await myAppointmentsViewModel.addAdvanceNumberRequest(
+              //     advanceNumber: "Tamara-Advance-0000",
+              //     paymentReference: tamaraOrderID,
+              //     appointmentNo: widget.patientAppointmentHistoryResponseModel.appointmentNo.toString(),
+              //     onSuccess: (value) async {
+              //       if (widget.patientAppointmentHistoryResponseModel.isLiveCareAppointment!) {
+              //         //TODO: Implement LiveCare Check-In API Call
+              //         await myAppointmentsViewModel.insertLiveCareVIDARequest(
+              //             clientRequestID: tamaraOrderID,
+              //             patientAppointmentHistoryResponseModel: widget.patientAppointmentHistoryResponseModel,
+              //             onSuccess: (apiResponse) {
+              //               Future.delayed(Duration(milliseconds: 500), () {
+              //                 LoaderBottomSheet.hideLoader();
+              //                 Navigator.pushAndRemoveUntil(
+              //                     context,
+              //                     CustomPageRoute(
+              //                       page: LandingNavigation(),
+              //                     ),
+              //                         (r) => false);
+              //               });
+              //             },
+              //             onError: (error) {});
+              //       } else {
+              //         await myAppointmentsViewModel.generateAppointmentQR(
+              //             clinicID: widget.patientAppointmentHistoryResponseModel.clinicID,
+              //             projectID: widget.patientAppointmentHistoryResponseModel.projectID,
+              //             appointmentNo: widget.patientAppointmentHistoryResponseModel.appointmentNo.toString(),
+              //             isFollowUp: myAppointmentsViewModel.patientAppointmentShareResponseModel!.isFollowup!,
+              //             onSuccess: (apiResponse) {
+              //               Future.delayed(Duration(milliseconds: 500), () {
+              //                 LoaderBottomSheet.hideLoader();
+              //                 Navigator.pushAndRemoveUntil(
+              //                     context,
+              //                     CustomPageRoute(
+              //                       page: LandingNavigation(),
+              //                     ),
+              //                         (r) => false);
+              //               });
+              //             });
+              //       }
+              //     });
+            } else {
+              await payfortViewModel.updateTamaraRequestStatus(responseMessage: "Failed", status: "00", clientRequestID: transID, tamaraOrderID: tamaraOrderID);
+              LoaderBottomSheet.hideLoader();
+              showCommonBottomSheetWithoutHeight(
+                context,
+                child: Utils.getErrorWidget(loadingText: "Payment Failed! Please try again.".needTranslation),
+                callBackFunc: () {},
+                isFullScreen: false,
+                isCloseButtonVisible: true,
+              );
+            }
+          },
+          onError: (err) {
+            LoaderBottomSheet.hideLoader();
+            showCommonBottomSheetWithoutHeight(
+              context,
+              child: Utils.getErrorWidget(loadingText: err),
+              callBackFunc: () {},
+              isFullScreen: false,
+              isCloseButtonVisible: true,
+            );
+          });
+    } else {
+      await payfortViewModel.checkPaymentStatus(
+          transactionID: transID,
+          onSuccess: (apiResponse) async {
+            print(apiResponse.data);
+            if (payfortViewModel.payfortCheckPaymentStatusResponseModel!.responseMessage!.toLowerCase() == "success") {
+              LoaderBottomSheet.hideLoader();
+              LoaderBottomSheet.showLoader(loadingText: "Booking Waiting Appointment, Please wait...".needTranslation);
+              await bookAppointmentsViewModel.insertSpecificAppointmentForWalkIn(onSuccess: (val) async {
+                String appointmentNo = val.data['AppointmentNo'].toString();
+                await myAppointmentsViewModel.createAdvancePayment(
+                    paymentMethodName: selectedPaymentMethod,
+                    projectID: bookAppointmentsViewModel.waitingAppointmentProjectID,
+                    clinicID: bookAppointmentsViewModel.selectedDoctor.clinicID!,
+                    appointmentNo: appointmentNo,
+                    payedAmount: payfortViewModel.payfortCheckPaymentStatusResponseModel!.amount!,
+                    paymentReference: payfortViewModel.payfortCheckPaymentStatusResponseModel!.fortId!,
+                    patientID: appState.getAuthenticatedUser()!.patientId.toString(),
+                    patientType: appState.getAuthenticatedUser()!.patientType!,
+                    onSuccess: (value) async {
+                      print(value);
+                      await myAppointmentsViewModel.addAdvanceNumberRequest(
+                          advanceNumber: Utils.isVidaPlusProject(bookAppointmentsViewModel.waitingAppointmentProjectID)
+                              ? value.data['OnlineCheckInAppointments'][0]['AdvanceNumber_VP'].toString()
+                              : value.data['OnlineCheckInAppointments'][0]['AdvanceNumber'].toString(),
+                          paymentReference: payfortViewModel.payfortCheckPaymentStatusResponseModel!.fortId!,
+                          appointmentNo: appointmentNo,
+                          onSuccess: (value) async {
+                            LoaderBottomSheet.hideLoader();
+                            sendCheckInRequest(bookAppointmentsViewModel.waitingAppointmentNFCCode, appointmentNo, context);
+                          });
+                    });
+              });
+            } else {
+              showCommonBottomSheetWithoutHeight(
+                context,
+                child: Utils.getErrorWidget(loadingText: "Payment Failed! Please try again.".needTranslation),
+                callBackFunc: () {},
+                isFullScreen: false,
+                isCloseButtonVisible: true,
+              );
+            }
+          });
+    }
+  }
+
+  openPaymentURL(String paymentMethod) {
+    browser = MyInAppBrowser(onExitCallback: onBrowserExit, onLoadStartCallback: onBrowserLoadStart, context: context);
+    transID = Utils.getAppointmentTransID(
+      bookAppointmentsViewModel.selectedDoctor.projectID!,
+      bookAppointmentsViewModel.selectedDoctor.clinicID!,
+      bookAppointmentsViewModel.selectedDoctor.doctorID!,
+    );
+
+    //TODO: Need to pass dynamic params to the payment request instead of static values
+    browser?.openPaymentBrowser(
+        bookAppointmentsViewModel.patientWalkInAppointmentShareResponseModel!.patientShareWithTax!,
+        "Appointment check in",
+        transID,
+        bookAppointmentsViewModel.selectedDoctor.projectID.toString(),
+        "CustID_${appState.getAuthenticatedUser()!.patientId.toString()}@HMG.com",
+        selectedPaymentMethod,
+        appState.getAuthenticatedUser()!.patientType.toString(),
+        "${appState.getAuthenticatedUser()!.firstName} ${appState.getAuthenticatedUser()!.lastName}",
+        appState.getAuthenticatedUser()!.patientId.toString(),
+        appState.getAuthenticatedUser()!,
+        browser!,
+        false,
+        "2",
+        "",
+        context,
+        "",
+        "",
+        "",
+        "",
+        "3");
+  }
+
+  startApplePay() async {
+    showCommonBottomSheet(context,
+        child: Utils.getLoadingWidget(), callBackFunc: (str) {}, title: "", height: ResponsiveExtension.screenHeight * 0.3, isCloseButtonVisible: false, isDismissible: false, isFullScreen: false);
+    transID = Utils.getAppointmentTransID(
+      bookAppointmentsViewModel.selectedDoctor.projectID!,
+      bookAppointmentsViewModel.selectedDoctor.clinicID!,
+      bookAppointmentsViewModel.selectedDoctor.doctorID!,
+    );
+
+    ApplePayInsertRequest applePayInsertRequest = ApplePayInsertRequest();
+
+    await payfortViewModel.getPayfortConfigurations(
+        serviceId: ServiceTypeEnum.appointmentPayment.getIdFromServiceEnum(), projectId: bookAppointmentsViewModel.selectedDoctor.projectID!, integrationId: 2);
+
+    applePayInsertRequest.clientRequestID = transID;
+    applePayInsertRequest.clinicID = bookAppointmentsViewModel.selectedDoctor.clinicID!;
+
+    applePayInsertRequest.currency = appState.getAuthenticatedUser()!.outSa! == 0 ? "SAR" : "AED";
+    applePayInsertRequest.customerEmail = "CustID_${appState.getAuthenticatedUser()!.patientId.toString()}@HMG.com";
+    applePayInsertRequest.customerID = appState.getAuthenticatedUser()!.patientId.toString();
+    applePayInsertRequest.customerName = "${appState.getAuthenticatedUser()!.firstName} ${appState.getAuthenticatedUser()!.lastName}";
+
+    applePayInsertRequest.deviceToken = await Utils.getStringFromPrefs(CacheConst.pushToken);
+    applePayInsertRequest.voipToken = await Utils.getStringFromPrefs(CacheConst.voipToken);
+    applePayInsertRequest.doctorID = bookAppointmentsViewModel.selectedDoctor.doctorID;
+    applePayInsertRequest.projectID = bookAppointmentsViewModel.selectedDoctor.projectID.toString();
+    applePayInsertRequest.serviceID = ServiceTypeEnum.appointmentPayment.getIdFromServiceEnum().toString();
+    applePayInsertRequest.channelID = 3;
+    applePayInsertRequest.patientID = appState.getAuthenticatedUser()!.patientId.toString();
+    applePayInsertRequest.patientTypeID = appState.getAuthenticatedUser()!.patientType;
+    applePayInsertRequest.patientOutSA = appState.getAuthenticatedUser()!.outSa;
+    applePayInsertRequest.appointmentDate = DateUtil.convertDateToString(DateTime.now());
+    applePayInsertRequest.appointmentNo = DateTime.now().millisecondsSinceEpoch;
+    applePayInsertRequest.orderDescription = "Appointment Payment";
+    applePayInsertRequest.liveServiceID = "0";
+    applePayInsertRequest.latitude = "0.0";
+    applePayInsertRequest.longitude = "0.0";
+    applePayInsertRequest.amount = bookAppointmentsViewModel.patientWalkInAppointmentShareResponseModel!.patientShareWithTax!.toString();
+    applePayInsertRequest.isSchedule = "0";
+    applePayInsertRequest.language = appState.isArabic() ? 'ar' : 'en';
+    applePayInsertRequest.languageID = appState.isArabic() ? 1 : 2;
+    applePayInsertRequest.userName = appState.getAuthenticatedUser()!.patientId;
+    applePayInsertRequest.responseContinueURL = "http://hmg.com/Documents/success.html";
+    applePayInsertRequest.backClickUrl = "http://hmg.com/Documents/success.html";
+    applePayInsertRequest.paymentOption = "ApplePay";
+
+    applePayInsertRequest.isMobSDK = true;
+    applePayInsertRequest.merchantReference = transID;
+    applePayInsertRequest.merchantIdentifier = payfortViewModel.payfortProjectDetailsRespModel!.merchantIdentifier;
+    applePayInsertRequest.commandType = "PURCHASE";
+    applePayInsertRequest.signature = payfortViewModel.payfortProjectDetailsRespModel!.signature;
+    applePayInsertRequest.accessCode = payfortViewModel.payfortProjectDetailsRespModel!.accessCode;
+    applePayInsertRequest.shaRequestPhrase = payfortViewModel.payfortProjectDetailsRespModel!.shaRequest;
+    applePayInsertRequest.shaResponsePhrase = payfortViewModel.payfortProjectDetailsRespModel!.shaResponse;
+    applePayInsertRequest.returnURL = "";
+
+    //TODO: Need to pass dynamic params to the Apple Pay instead of static values
+    await payfortViewModel.applePayRequestInsert(applePayInsertRequest: applePayInsertRequest).then((value) {
+      payfortViewModel.paymentWithApplePay(
+        customerName: "${appState.getAuthenticatedUser()!.firstName} ${appState.getAuthenticatedUser()!.lastName}",
+        // customerEmail: projectViewModel.authenticatedUserObject.user.emailAddress,
+        customerEmail: "CustID_${appState.getAuthenticatedUser()!.patientId.toString()}@HMG.com",
+        orderDescription: "Appointment Payment",
+        orderAmount: double.parse(bookAppointmentsViewModel.patientWalkInAppointmentShareResponseModel!.patientShareWithTax!.toString()),
+        merchantReference: transID,
+        merchantIdentifier: payfortViewModel.payfortProjectDetailsRespModel!.merchantIdentifier,
+        applePayAccessCode: payfortViewModel.payfortProjectDetailsRespModel!.accessCode,
+        applePayShaRequestPhrase: payfortViewModel.payfortProjectDetailsRespModel!.shaRequest,
+        currency: appState.getAuthenticatedUser()!.outSa! == 0 ? "SAR" : "AED",
+        onFailed: (failureResult) async {
+          log("failureResult: ${failureResult.message.toString()}");
+          Navigator.of(context).pop();
+          showCommonBottomSheetWithoutHeight(
+            context,
+            child: Utils.getErrorWidget(loadingText: failureResult.message.toString()),
+            callBackFunc: () {},
+            isFullScreen: false,
+            isCloseButtonVisible: true,
+          );
+        },
+        onSucceeded: (successResult) async {
+          log("successResult: ${successResult.responseMessage.toString()}");
+          selectedPaymentMethod = successResult.paymentOption ?? "VISA";
+          checkPaymentStatus();
+        },
+        // projectId: appo.projectID,
+        // serviceTypeEnum: ServiceTypeEnum.appointmentPayment,
+      );
+    });
+  }
+
+  void sendCheckInRequest(String scannedCode, String appointmentNo, BuildContext context) async {
+    LoaderBottomSheet.showLoader(loadingText: "Processing Check-In...".needTranslation);
+    PatientAppointmentHistoryResponseModel patientAppointmentHistoryResponseModel = PatientAppointmentHistoryResponseModel(
+      appointmentNo: appointmentNo,
+      clinicID: bookAppointmentsViewModel.selectedDoctor.clinicID,
+      projectID: bookAppointmentsViewModel.selectedDoctor.projectID,
+    );
+    await myAppointmentsViewModel.sendCheckInNfcRequest(
+      patientAppointmentHistoryResponseModel: patientAppointmentHistoryResponseModel,
+      scannedCode: scannedCode,
+      checkInType: 2,
+      onSuccess: (apiResponse) {
+        LoaderBottomSheet.hideLoader();
+        showCommonBottomSheetWithoutHeight(context, title: "Success".needTranslation, child: Utils.getSuccessWidget(loadingText: apiResponse.data["SuccessMsg"]), callBackFunc: () {
+          Navigator.of(context).pop();
+          Navigator.pushAndRemoveUntil(
+              context,
+              CustomPageRoute(
+                page: LandingNavigation(),
+              ),
+              (r) => false);
+        }, isFullScreen: false);
+      },
+      onError: (error) {
+        LoaderBottomSheet.hideLoader();
+        showCommonBottomSheetWithoutHeight(context, title: "Error".needTranslation, child: Utils.getErrorWidget(loadingText: error), callBackFunc: () {
+          Navigator.of(context).pop();
+        }, isFullScreen: false);
+      },
+    );
+  }
+
+  void insertWalkInAppointment() async {}
+}
diff --git a/lib/presentation/book_appointment/widgets/appointment_calendar.dart b/lib/presentation/book_appointment/widgets/appointment_calendar.dart
index 7e2e7ba..7c4226c 100644
--- a/lib/presentation/book_appointment/widgets/appointment_calendar.dart
+++ b/lib/presentation/book_appointment/widgets/appointment_calendar.dart
@@ -177,6 +177,9 @@ class _AppointmentCalendarState extends State {
             onPressed: () async {
               if (appState.isAuthenticated) {
                 if(selectedTime == "Waiting Appointment".needTranslation){
+                  bookAppointmentsViewModel.setWaitingAppointmentProjectID(bookAppointmentsViewModel.selectedDoctor.projectID!);
+                  bookAppointmentsViewModel.setWaitingAppointmentDoctor(bookAppointmentsViewModel.selectedDoctor);
+
                   Navigator.of(context).pop();
                   Navigator.of(context).push(
                     CustomPageRoute(
diff --git a/lib/presentation/home/landing_page.dart b/lib/presentation/home/landing_page.dart
index 47f8118..1b2ce9a 100644
--- a/lib/presentation/home/landing_page.dart
+++ b/lib/presentation/home/landing_page.dart
@@ -623,7 +623,7 @@ class _LandingPageState extends State {
                 isDone = true;
                 cacheService.saveBool(key: CacheConst.quickLoginEnabled, value: true);
                 setState(() {});
-                await Future.delayed(Duration(milliseconds: 3000)).then((value) {
+                await Future.delayed(Duration(milliseconds: 2000)).then((value) {
                   if (mounted) Navigator.pop(context);
                 });
               });
-- 
2.30.2


From 5c0d3144d6b6a025727dfb40132c326f1c8490a2 Mon Sep 17 00:00:00 2001
From: haroon amjad 
Date: Sun, 7 Dec 2025 12:32:28 +0300
Subject: [PATCH 22/39] iOS App Icons Added

---
 .../AppIcon.appiconset/Contents.json          | 124 +++++++++---------
 .../Icon-App-1024x1024@1x.png                 | Bin 10932 -> 0 bytes
 .../AppIcon.appiconset/Icon-App-20x20@1x.png  | Bin 295 -> 815 bytes
 .../AppIcon.appiconset/Icon-App-20x20@2x.png  | Bin 406 -> 1980 bytes
 .../AppIcon.appiconset/Icon-App-20x20@3x.png  | Bin 450 -> 3664 bytes
 .../AppIcon.appiconset/Icon-App-29x29@1x.png  | Bin 282 -> 1297 bytes
 .../AppIcon.appiconset/Icon-App-29x29@2x.png  | Bin 462 -> 3517 bytes
 .../AppIcon.appiconset/Icon-App-29x29@3x.png  | Bin 704 -> 5549 bytes
 .../AppIcon.appiconset/Icon-App-40x40@1x.png  | Bin 406 -> 1980 bytes
 .../AppIcon.appiconset/Icon-App-40x40@2x.png  | Bin 586 -> 5858 bytes
 .../AppIcon.appiconset/Icon-App-40x40@3x.png  | Bin 862 -> 11154 bytes
 .../AppIcon.appiconset/Icon-App-60x60@2x.png  | Bin 862 -> 11154 bytes
 .../AppIcon.appiconset/Icon-App-60x60@3x.png  | Bin 1674 -> 20412 bytes
 .../AppIcon.appiconset/Icon-App-76x76@1x.png  | Bin 762 -> 5152 bytes
 .../AppIcon.appiconset/Icon-App-76x76@2x.png  | Bin 1226 -> 16469 bytes
 .../Icon-App-83.5x83.5@2x.png                 | Bin 1418 -> 16408 bytes
 16 files changed, 65 insertions(+), 59 deletions(-)
 delete mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png

diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
index d36b1fa..08f3422 100644
--- a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
+++ b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
@@ -1,122 +1,128 @@
 {
   "images" : [
     {
-      "size" : "20x20",
-      "idiom" : "iphone",
       "filename" : "Icon-App-20x20@2x.png",
-      "scale" : "2x"
+      "idiom" : "iphone",
+      "scale" : "2x",
+      "size" : "20x20"
     },
     {
-      "size" : "20x20",
-      "idiom" : "iphone",
       "filename" : "Icon-App-20x20@3x.png",
-      "scale" : "3x"
+      "idiom" : "iphone",
+      "scale" : "3x",
+      "size" : "20x20"
     },
     {
-      "size" : "29x29",
-      "idiom" : "iphone",
       "filename" : "Icon-App-29x29@1x.png",
-      "scale" : "1x"
+      "idiom" : "iphone",
+      "scale" : "1x",
+      "size" : "29x29"
     },
     {
-      "size" : "29x29",
-      "idiom" : "iphone",
       "filename" : "Icon-App-29x29@2x.png",
-      "scale" : "2x"
+      "idiom" : "iphone",
+      "scale" : "2x",
+      "size" : "29x29"
     },
     {
-      "size" : "29x29",
-      "idiom" : "iphone",
       "filename" : "Icon-App-29x29@3x.png",
-      "scale" : "3x"
+      "idiom" : "iphone",
+      "scale" : "3x",
+      "size" : "29x29"
     },
     {
-      "size" : "40x40",
-      "idiom" : "iphone",
       "filename" : "Icon-App-40x40@2x.png",
-      "scale" : "2x"
+      "idiom" : "iphone",
+      "scale" : "2x",
+      "size" : "40x40"
     },
     {
-      "size" : "40x40",
-      "idiom" : "iphone",
       "filename" : "Icon-App-40x40@3x.png",
-      "scale" : "3x"
+      "idiom" : "iphone",
+      "scale" : "3x",
+      "size" : "40x40"
     },
     {
-      "size" : "60x60",
-      "idiom" : "iphone",
       "filename" : "Icon-App-60x60@2x.png",
-      "scale" : "2x"
+      "idiom" : "iphone",
+      "scale" : "2x",
+      "size" : "60x60"
     },
     {
-      "size" : "60x60",
-      "idiom" : "iphone",
       "filename" : "Icon-App-60x60@3x.png",
-      "scale" : "3x"
+      "idiom" : "iphone",
+      "scale" : "3x",
+      "size" : "60x60"
     },
     {
-      "size" : "20x20",
-      "idiom" : "ipad",
       "filename" : "Icon-App-20x20@1x.png",
-      "scale" : "1x"
+      "idiom" : "ipad",
+      "scale" : "1x",
+      "size" : "20x20"
     },
     {
-      "size" : "20x20",
-      "idiom" : "ipad",
       "filename" : "Icon-App-20x20@2x.png",
-      "scale" : "2x"
+      "idiom" : "ipad",
+      "scale" : "2x",
+      "size" : "20x20"
     },
     {
-      "size" : "29x29",
-      "idiom" : "ipad",
       "filename" : "Icon-App-29x29@1x.png",
-      "scale" : "1x"
+      "idiom" : "ipad",
+      "scale" : "1x",
+      "size" : "29x29"
     },
     {
-      "size" : "29x29",
-      "idiom" : "ipad",
       "filename" : "Icon-App-29x29@2x.png",
-      "scale" : "2x"
+      "idiom" : "ipad",
+      "scale" : "2x",
+      "size" : "29x29"
     },
     {
-      "size" : "40x40",
-      "idiom" : "ipad",
       "filename" : "Icon-App-40x40@1x.png",
-      "scale" : "1x"
+      "idiom" : "ipad",
+      "scale" : "1x",
+      "size" : "40x40"
     },
     {
-      "size" : "40x40",
-      "idiom" : "ipad",
       "filename" : "Icon-App-40x40@2x.png",
-      "scale" : "2x"
+      "idiom" : "ipad",
+      "scale" : "2x",
+      "size" : "40x40"
     },
     {
-      "size" : "76x76",
-      "idiom" : "ipad",
       "filename" : "Icon-App-76x76@1x.png",
-      "scale" : "1x"
+      "idiom" : "ipad",
+      "scale" : "1x",
+      "size" : "76x76"
     },
     {
-      "size" : "76x76",
-      "idiom" : "ipad",
       "filename" : "Icon-App-76x76@2x.png",
-      "scale" : "2x"
+      "idiom" : "ipad",
+      "scale" : "2x",
+      "size" : "76x76"
     },
     {
-      "size" : "83.5x83.5",
-      "idiom" : "ipad",
       "filename" : "Icon-App-83.5x83.5@2x.png",
-      "scale" : "2x"
+      "idiom" : "ipad",
+      "scale" : "2x",
+      "size" : "83.5x83.5"
     },
     {
-      "size" : "1024x1024",
+      "filename" : "icon 1.jpg",
       "idiom" : "ios-marketing",
-      "filename" : "Icon-App-1024x1024@1x.png",
-      "scale" : "1x"
+      "scale" : "1x",
+      "size" : "1024x1024"
+    },
+    {
+      "filename" : "Icon-App-76x76@2x.png",
+      "idiom" : "iphone",
+      "scale" : "2x",
+      "size" : "76x76"
     }
   ],
   "info" : {
-    "version" : 1,
-    "author" : "xcode"
+    "author" : "xcode",
+    "version" : 1
   }
 }
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
deleted file mode 100644
index dc9ada4725e9b0ddb1deab583e5b5102493aa332..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 10932
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

delta 279
zcmV+y0qFj(2B!j$8Gi!+006pI?LPnj0Blf9R7L;)|5U~J`u_j-{Qm)0oAmqtj@kOz
z^8J|I`-|B6ht~R5kG+%I`zf~eztraM`u^bc{`dO)zUlmg)%x%C`E}6wSI77~z4s`y
z^XT{f(eM4n?EUff`e@AgO~UxV*5*r_%Uhbj5N)LaQj!wdIe!-b004GLL_t&-)18pX
z4udcZ1u-#g(~z+5JN*AY5?>Gw7hsN~k)CYt4dQDFxbs5*_&e@Hj)wtt(&JE<3Eq*D
z;_gQLvqXoKv=I*gWqM9C(Tvu0>=?hTbOp9!6k6AF;>f6|S5%jGEE}TA9h)e`Yuiu8
d7)l?o1NFcJg%EAfM$P~L002ovPDHLkV1g)Onvnni

diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
index 797d452e458972bab9d994556c8305db4c827017..2e4c79638b62611653dde1e4c3a83e3db156c2ce 100644
GIT binary patch
delta 1977
zcmV;q2S)go1H2EA8Gi-<004~sxNQIc010qNS#tmY4#WTe4#WYKD-Ig~00(YKL_t(o
zg?*UIZy#3`$3N%J%+Ge~#J@Ok?ACD}EhIE;fv8jn6;XsL)GoSW1smw9e-}amA%R!`
z3lI_rfrN^p0wqYEYG60x
zA)(np73U>sTC}bawV8`W1gZ)ti--uB2TXxkTfsbY34eR*Hth$S&@_qp6-3e`=`ui!
zAZJcfedA@!>RB+EXx*(|AIqL|;*)vSue4X;kSD^?DQeY9V7Q4N}p$JF6`5n}ab5mg`
zuU=u{M}I%SJbTffPtzAD3e5aG?VT+s%gnF2iz5*CQlP4kQ&Y^!3Q`skcBB{NW_ptH
z`7crb{*P$WI4mzpipyW1c;PwBbcth^wTKB&+y^B0T)GTOa4z2JXnqWqDUkVj@QfTi
z0}Jy=`B;$1R|@3GUD?N@5fsQu-@uZwI7kA5UVq3jVm+BOheQuY664V1@{)x~_;Rdp
z*}fER)w3AXy%E~ULwci5_%iit>;sZR+Q(2y%ixG!np}tAIyj>N*!xlD!QZ%h=@l^r
zYoWDSlaLD8d()lts2s1V@o!v8>v)Y*b6Gq{2dn6#&#=4q;cx~E-fAMAaj!1TO^Aj-AwP}Fbp2Bs5-TMT6@URmyD_}zD_-c;Tso#`hKC~?$=)nQaJJ)GHx`noF
z7h;JWqny2gI`sk4G6wYMsvD&upO6ithM_BqUsd_UMLe1W%!3(*j^0;TUF
zqe){k;Wv%+As{aJQ^@IBgSHGqGa1&Zfv9ZqNdv8))*l-q_%u&2}mFnBy#NPY>t!t-9
z)1Z6%*u6byTE6w5X1o?jO
z)mNxq`8v$aC7XPHh4`};d-opt$v)JzBmU@-6Si)gfFj6bLUHjtT--pyh|sji(g~XD
z|HSU@Ig1V~n3^r-ySNxyo_|6$NqV+pR#UsO7`&j0HcdBU1Z6ywX@Im!kfkZIwB$w$
znha_H$}n5xOI*2R0er={1lijBR<2&8;~+BFUeR!m|rE!?2bsZN;2e(36nM!
z{U&2vS?9_SMzP&`OanE#LK7QYI=cP1)+~KDXd5-VH*w(XZ4CBEX@3O^63O+6?^9{&3o^|QQbvP(_;U-N&DUn^uqZL1+vLP5LNWvj_WylGKL{j
zw%4xcz*0t#)2Aq3x_^dQIpZXczh5L*b#rm^?!VA`yNMtC3x(UD}+03I|?HtmCd;^N-7lyNL~QLuh-^Wo(An=oRhhhhLn
zyi1AuE#hJ+xJ~H>7T2@3sFfaPL(azsH29EX1{Qak!C$L>fz(2Q*-0ZWHwcdno0F
z=n0m_n)tyT5i&$mX8CW@<5Ae{k2|s;mMEyu%^KrIPNKB;^UD7LX~LPuV~ccd00000
LNkvXXu0mjffbZC^

delta 390
zcmV;10eSws50(Rv8Gi!+006rnNM8T|0E$pdR7L;)|5U~J0au$Tw)XJ){%+3s=lA~6
z@BMVp`S<<*VaoaP`~U3u{%g(ou*=|m)B4`@{`33)?ezIj#Q6OF|6IuUF}e2O>+>eB
z?J{?+FLkYu+4_Uk`r_>LHF~flZm0oBf#vr8%vJ>#p~!KNvqGG3)|f1T_)ydeh8$vDceZ>oNbH^|*hJ*t?Yc*1`WB&W>VYVEzu)
zq#7;;VjO)t*nbgf(!`OXJBr45rP>>AQr$6c7slJWvbpNW@KTwna6d?PP>hvXCcp=4
zF;=GR@R4E7{4VU^0p4F>v^#A|>07*qoM6N<$f}@SsdjJ3c

diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
index 6ed2d933e1120817fe9182483a228007b18ab6ae..59435c76664e6178fd0e1bcaf87e0e2a77d36371 100644
GIT binary patch
literal 3664
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
Q00000NkvXXt^-0~g7j^LjQ{`u

diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
index fe730945a01f64a61e2235dbe3f45b08f7729182..11d35da468554cb49a405a1811c69a89a8781895 100644
GIT binary patch
literal 3517
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

delta 447
zcmV;w0YLt}8_ole8Gi!+007oyx*7lg0G3cpR7L;)|5U~J0au$Tw)URh`@-w}Xw3Np
zS)Ix4{k7)&ujKrh-TO(x_}20L&+q+}+xr1ilg8}*yXgGl_5RcF{f*iBEV%Z~-t4>5
ziGV;=={^-
z?sLQGb)?A{hr$_!z8HbH7kH=vM0x-*R~t>;jsO4v^GQTOR7l6|(&r9>FcgO2dg?%>
z;=sK?5%;?Pn^T7LL?Y$@5u?06NuIR*0?Yf$Hf5Afk+lM<^ch*jvO$sU*m9J?JI7eI
zGFV6+q|w~e;JI~C4Vf^@d>Wvj=fl`^u9x9wd9R%3*Q+)t%S!MU_`id^@&
zY{y7-r98lZX0?YrHlfmwb?#}^1b{8g&KzmkE(L>Z&p6kME1_Z%?`+u)^el0!1<0sd
p?Eyu!OMLDifi)An*I;?S-wj=m4RYIt!kPd8002ovPDHLkV1i7_^hp2!

diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
index 321773cd857a8a0f0c9c7d3dc3f5ff4fb298dc10..93523cbe1016ba4a69395cbe51089848aea46ade 100644
GIT binary patch
literal 5549
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

delta 691
zcmV;k0!;m_E5HSi8Gi!+002f7DP8~o0Jl&~R7L;)|5U~JDYo_jSDX9(|M~s@SH}2N
z#rS{J`h3&+@cRDr`1>4br2|=<_Wb|z`~RBV`-<24{r>;E==`tb{CU#(0alua*7{P!
z_>|iF0Z@&o;`@Zw`ed2Hv*!Fwin#$(m7w4Ij@kM+yZ0`*_J0?7s{u=e0YGxN=lnXn
z_j;$xb)?A|hr(Z#!1DV3H@o+7qQ_N_ycmMI0acg)Gg|cf|J(EaqTu_A!rvTerUFQQ
z05n|zFjFP9FmM0>0mMl}K~z}7?bK^if#bc3@hBPX@I$58-z}(ZZE!t-aOGpjNkbau@>yEzH(5Yj4kZ
ziMH32XI!4~gVXNnjAvRx;Sdg^`>2DpUEwoMhTs_stABAHe$v|ToifVv60B@podBTcIqVcr1w`hG7HeY|fvLid#^Ok4NAXIXSt1
Zxpx7IC@PekH?;r&002ovPDHLkV1gyaYiIxf

diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
index 797d452e458972bab9d994556c8305db4c827017..2e4c79638b62611653dde1e4c3a83e3db156c2ce 100644
GIT binary patch
delta 1977
zcmV;q2S)go1H2EA8Gi-<004~sxNQIc010qNS#tmY4#WTe4#WYKD-Ig~00(YKL_t(o
zg?*UIZy#3`$3N%J%+Ge~#J@Ok?ACD}EhIE;fv8jn6;XsL)GoSW1smw9e-}amA%R!`
z3lI_rfrN^p0wqYEYG60x
zA)(np73U>sTC}bawV8`W1gZ)ti--uB2TXxkTfsbY34eR*Hth$S&@_qp6-3e`=`ui!
zAZJcfedA@!>RB+EXx*(|AIqL|;*)vSue4X;kSD^?DQeY9V7Q4N}p$JF6`5n}ab5mg`
zuU=u{M}I%SJbTffPtzAD3e5aG?VT+s%gnF2iz5*CQlP4kQ&Y^!3Q`skcBB{NW_ptH
z`7crb{*P$WI4mzpipyW1c;PwBbcth^wTKB&+y^B0T)GTOa4z2JXnqWqDUkVj@QfTi
z0}Jy=`B;$1R|@3GUD?N@5fsQu-@uZwI7kA5UVq3jVm+BOheQuY664V1@{)x~_;Rdp
z*}fER)w3AXy%E~ULwci5_%iit>;sZR+Q(2y%ixG!np}tAIyj>N*!xlD!QZ%h=@l^r
zYoWDSlaLD8d()lts2s1V@o!v8>v)Y*b6Gq{2dn6#&#=4q;cx~E-fAMAaj!1TO^Aj-AwP}Fbp2Bs5-TMT6@URmyD_}zD_-c;Tso#`hKC~?$=)nQaJJ)GHx`noF
z7h;JWqny2gI`sk4G6wYMsvD&upO6ithM_BqUsd_UMLe1W%!3(*j^0;TUF
zqe){k;Wv%+As{aJQ^@IBgSHGqGa1&Zfv9ZqNdv8))*l-q_%u&2}mFnBy#NPY>t!t-9
z)1Z6%*u6byTE6w5X1o?jO
z)mNxq`8v$aC7XPHh4`};d-opt$v)JzBmU@-6Si)gfFj6bLUHjtT--pyh|sji(g~XD
z|HSU@Ig1V~n3^r-ySNxyo_|6$NqV+pR#UsO7`&j0HcdBU1Z6ywX@Im!kfkZIwB$w$
znha_H$}n5xOI*2R0er={1lijBR<2&8;~+BFUeR!m|rE!?2bsZN;2e(36nM!
z{U&2vS?9_SMzP&`OanE#LK7QYI=cP1)+~KDXd5-VH*w(XZ4CBEX@3O^63O+6?^9{&3o^|QQbvP(_;U-N&DUn^uqZL1+vLP5LNWvj_WylGKL{j
zw%4xcz*0t#)2Aq3x_^dQIpZXczh5L*b#rm^?!VA`yNMtC3x(UD}+03I|?HtmCd;^N-7lyNL~QLuh-^Wo(An=oRhhhhLn
zyi1AuE#hJ+xJ~H>7T2@3sFfaPL(azsH29EX1{Qak!C$L>fz(2Q*-0ZWHwcdno0F
z=n0m_n)tyT5i&$mX8CW@<5Ae{k2|s;mMEyu%^KrIPNKB;^UD7LX~LPuV~ccd00000
LNkvXXu0mjffbZC^

delta 390
zcmV;10eSws50(Rv8Gi!+006rnNM8T|0E$pdR7L;)|5U~J0au$Tw)XJ){%+3s=lA~6
z@BMVp`S<<*VaoaP`~U3u{%g(ou*=|m)B4`@{`33)?ezIj#Q6OF|6IuUF}e2O>+>eB
z?J{?+FLkYu+4_Uk`r_>LHF~flZm0oBf#vr8%vJ>#p~!KNvqGG3)|f1T_)ydeh8$vDceZ>oNbH^|*hJ*t?Yc*1`WB&W>VYVEzu)
zq#7;;VjO)t*nbgf(!`OXJBr45rP>>AQr$6c7slJWvbpNW@KTwna6d?PP>hvXCcp=4
zF;=GR@R4E7{4VU^0p4F>v^#A|>07*qoM6N<$f}@SsdjJ3c

diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
index 502f463a9bc882b461c96aadf492d1729e49e725..00bb8dbd033bc6a2854e3272011ec7b56a1e190a 100644
GIT binary patch
literal 5858
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

delta 572
zcmV-C0>k~{Ey@It8Gi!+006nq0-pc?0H{z*R7L;)|5U~JDYo_jSDXF*|5nEMy6F5^
z$M}8I`uzU?*Yf=uXr;5|{0m;6_Wb|A>ik^D_|)+I$?g3CSDK^3+eX0mD!2CP`2NN0
z{dLg!a?km&%iyTt`yiax0acdp`~T(l{$a`ZF1YpsRg(cvjDG_-U$Er-fz#Bw>2W$eUI#iU
z)Wdgs8Y3U+A$Gd&{+j)d)BmGKx+43U_!tik_YlN)>$7G!hkE!s;%oku3;IwG3U^2k
zw?z+HM)jB{@zFhK8P#KMSytSthr+4!c(5c%+^UBn_j%}l|2+O?a>_7qq7W
zmx(qtA2nV^tZlLpy_#$U%ZNx5;$`0L&dZ!@e7rFXPGAOup%q`|03hpdtXsPP0000<
KMNUMnLSTZxLp6*5

diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
index 0ec303439225b78712f49115768196d8d76f6790..3eaa1fb65a92fe5fed88b2ffbd811a6c51bcd8ad 100644
GIT binary patch
literal 11154
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

diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
index 0ec303439225b78712f49115768196d8d76f6790..3eaa1fb65a92fe5fed88b2ffbd811a6c51bcd8ad 100644
GIT binary patch
literal 11154
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

diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
index e9f5fea27c705180eb716271f41b582e76dcbd90..fd80aa4170174408dbd3cc3f8eeacec3c652bba6 100644
GIT binary patch
literal 20412
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

diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
index 8953cba09064923c5daf2d37e7c3c836ccdd794b..47a96a438ff102bec5f5d55dc14f6394bde15af2 100644
GIT binary patch
literal 16469
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

diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
index 0467bf12aa4d28f374bb26596605a46dcbb3e7c8..8c4ca7b08ff5f5b2a52c7e99c2aa901581025340 100644
GIT binary patch
literal 16408
zcmV+zKP?p|xAyQin8r@QB|)}m)_y_aE<+!9(zBM`{oFf%|s
z>{Cb#TLA+gm+4_T=rsTXv_xx>O1tim|54;|n0zT0y7GWlZZ-o<5pJixNNuznBm97N
z;eoNXgft$56!82@RsDc&5t}~sJhLtl;zKFHG0nowb)*Yo1vl43LQ1WYM~RBqx^RxHzR>LonnMb%jqCWV6gJ5p1kT!B;LNzMXxp+0
zJS!C^MEL_3-O0Z~NHgS=jFfh^MabP!olIxuPIUEG_m06xA;7U>dRkGP(B8ohkUnoG
z@hBup)vG3yhr87B9ARh_Cev*v8p#Uk}Dy>3qrt
znCAA9S84_&3r{czv*l0l6*^tiZ{<^v2dllFYmgL0Zd{tM?7rpPL#k5Ljf^fa7N_SuC6CrZc7$P
zf1@f>=TU{ra2Ww^?jUAEKYN*gC&>?KqK+gYx${7osV}Th{Ahz0$7e;uI~E_Y47Q=q
zW6Y;qt{G|642FN4dM%?cJ69fedo}7K02R*IkyadNvylo<6pNBjC>KPC&Ywh`kn^Jv
z0HwrjzPuIk;O5>JL`hq-COpNkgi78%de|z&h=&;ffHjfg(9BT1q{-wl
zl#=F&kW*6MfEKe+ro*Lm??Us;jLA|wko0B)LPo9iW`01kCDyP&f3$`Q+Zz!P
ziBf-_^jU&k{K3%A!SrQW42JF)3*hICZPt*{Sn$4f=Bh>-pMp
z!BLb=F!5Z?z-&J_ORZ6FKw*v>6<;RcRGnsa12i>(3F;=VK5n#!14{>U6gGzqT+LI7
zGb5$5F*0k#N~2*m8c~c;cqVSOi5-fQdS#I`kEzTXNa2O8j7#6y0C+}GI7&yvNU-h`
zvn(f*D7UY)x9fF$nc_e8gx=fKJXYPS+ZqPK9FSsr6}BPqs%GXPpUjvz0WR(2
zolf#rW-PIp#_Cb4MyIMm@6wR$$7gKH=GnM-M_yt|nbprOiG?UAWa;}nX+8P{TMQ}VKLS)usUQH*5*3M){TbsQ-)N^y#eVP
zz6I}P)_utILk!o*a|U19t6|Djk_TH@&$FR7pm0;UjI}*%nXkBEA%e?hBG*GBIF>+Q
zm1`}p;a&Ws%j?)%Ul|j-+cH`U)^|Y{X{kctFY40>JSa2#_)ub@`YvF{a%O`=m`WD~
zvpvUDYiVegerXPvMP-hZD7kDki;CPTIpVe*fzXqC6~z-c!85A{`BayUWl63{T(*ie
zm{2Q&6F`C|UB4@{wuH)`Nq)4l2*E`%I!sZFCXcQDRyUK*F9P+%!~~H>!QtW_
zy%BEA6|y7BhiMecGKp}LLz4dTCzcwl%89Ge6>6Q9RKuB3Pey7L&I{am98oz~V!{e`
ze6~#047WxLOh$OJ7;&sI!(~I#@C*i1F&c!C&HI@c<%V%mqP(Y@aa?FXwJtEqpyy22
zVun#diZ@BF1CF`UcxzE@dqNUnWRjJ|Cr(ORX}@$|F(@V0EnwWuELPj_nibFK1e-fc
zqBS7f+38f0%Pe%1V(K*twe#QJzn-Z?{Q5eOtedf(p`}R}ijPWBRBwhMr&4a8r?YscV{b3bvZ-Fobkxc9WN)3s)e+u@+?`Gr!KQQ@@|4GKxQx=U)9XeyZ`29b)8oq
zW)A2ZHYKDPbpDY=ZE&W@52V_%b;F1yx(z-fBPPGOtBqo!ZUmP(bVC?mDuKT@7*#vWKDzgMoSTq0j`TQcoWRjMRV!qQu{_{8
z$*!Vb^Q%3BH_QYs*0PeF;OYkmxv{l6%eazPWO<{og4%p)F;-O@<40L01XwKc;u!xl$4LmMWdV&@s>G{)7-1x
zGU(qLUux=5Z4EE)#-nAH9ekQMz6Q;ED0SaG>ejMWdO{%`C5l}QjB456TM`c*CRX$_
zy0exQMR(3Jr?f0&`RehhGR0HIYyy;&vv&Jj8WAX3NU)_0T;l|ytVlTLzeqpd${L22
zidPQ59w_Tzy{*Sc`Lu9-?>5*SZ~}vHJ@ed>aJulT6LRfkDK#CO#p=#GKxfa?owT^s
z(~55v61#OyTWKS|Lrf};T*nAMUHDxNmI@8?jC&@e{I+CO4!2mBXb(EN-uaZUr?iyo
zVVnh9pkT-L7@q`yrU_?0^kZ0m|2u&FeM@iPKt^=RbW}`}0A|O!u;-c=S6fL;Zr$Iz
zF;~Ip_^ueg(l3>*jdTvSy>S&J*9_yN+{VW7QY&tVF1fX97r5O;#+HO`BTWK8dwbaX
z!S~_JPk$KGjjuIe#?p3_Jr1Zi$g7bi>#FD8_SV903Cdk>08%e7&jgz6*?=hET@;Ty
z+iSi4idYwRdl72WK8|YbF4|3@-3h}Vy%ac~a@w_GC&w$Uz~24u!ND*5E3EIly^lV)
ztt}CSl$c3mfVdVcJ*8*%OA(d=L#&sD(kI(`JM|sCa~wL?m4_=CD1gd2Xi|H`Ji8TE
z>rC;1=r}0yiW
z?PY$6$jGjUBr-0#QiaD2H%>5f8W~QEq@2w)F(VXZox08|BvLx*;4Ien-h(^=
z9$R~T`4ew8;1^!R=ITyN
z$8_~o0JRrUB8R^uA1~7kf9A}rn77}C^*!H?>5kh#YDV6oHG3yLkX74A=eRY{NH%VO
zYWOvRRB)YoWOoUhA4DN>BG8prV(*9U$Jr14*b->Xt>i}<-J>(c9C*70zwjcC{_=~s
z^uK=xhoAZk_#5Y&%o+U)>v6s`a`V@p!~Q>hFZMrhKUQzP3)59s%_klro_A4Q%rkNPsE1b@b~@zeDP8&?-{%NOA_uSdR{E~
zHt~GzwK(&^2XOYM{{^NuydJb#nYKiVV$Ty$Sk{x%h#VqZgI&4iVkrfH4Xna;Tee1B
zUAdm8%#|>6VBQe&NuH7SbZLJddvEy;ocZvNV|DkN
z4E^lZ9FE*eyvS~Ye(vCu#{i}k_TKT`a~-$emKD>~wa})h+$(fXW+So)pP^zG0q5@K
z_)jTZ(bY0toJFM`4^N{!1vh#;BMZ31RY8&>O1^$1@L>QnfmZs3%CUgGkVn(vQ-z~x
zy~5tx--f;Ke<$dwD?5O8ATkn5umKZs1Uu9YD?wwwQ@(Ua4BWn
zg9Gfn`<<9>z6oVP+<6YYRb|`_tkCt=+C*60btm@T`MscZ81{!L@+PCOBY3SRGHV&v
zv2*TtA)$3c%^l~shtbq#701WZLRCZST(RObQIx-4+&?x2N7B;cy}b}S>o!Vx#;M
zrG|3u;9hbNQHD*4v?4B#pR`5vdD_B`2LB@=z;x~$rkidAsTpliK&|vrz{xl?XcI8K
z<{GTtbccyETfBIy-{Si?mU5SrDTtiazfD-L1q~JrZ3WX%&Ia+te6$ZoRDp@d8x!Ej
zglK8!gRy+z@A?Ji{cmS;-ba1oOk7wv%)tl`cfz}5>t9SO?#Jka|k{a
zYme@)S~+E}UF2EjIprk0c87UUz>Bd^hjz>&aOBM
zTIq2tt{f0S&LO9CWJd@9u(t+Xam6A(yTp_|B^vP%BUZUJJtiXwQ{YyP(t(s}=_pw)
zk^#&BQBh7a(i<~0MKYBybh_iVHvo5;sQCNiE}JZ+LeF=Lc5TR$B^#3JNrN8vNdcy!
z?ESa=EvH@9cv~{6meYLfE@gqYsI$Zp%FE5>JWAn?>qX6lS`yFCt(TF(iMXhzc|9L-
zo)?IA6SOc%{#PBR*l;o#5vq34$C;h((s3==y#6LLcAmvp1X)^KUKBRp8QHLizYMBg
zteMwM8%m=G<#A=>%bT(~+@!fL)$f5%`K{26Xi|e5P$zRry%3cyA<-m~*WcR_<*(u<
zKeMVvA(y=94_3&#&YX8qvJspSizSC1W`GiBI!r}FUj+30yjRIEa;v=%b{q0gimK$zqtZV?Z+Nosk=m8?kU&
zkgblX*ms>4!H+E6RCKGkP9u8Ku6)iYG&=Picdgf_r85Xo-JYjN*`pfe7#tg&aqcD1
zC#yD|-#M6^3K9jTxw5AyvsB0Jh+sn|`*Z4s{IAb3UhXdCbJDbE-EMr8VYqnp)PQ
z`r}B`BEx`>z*>T@=+UQJ`c^}SydG`0t`qOLQJyyub&dVbUav(lTT0H3lvJ0kBF*
zeL73+KB*i$t&y3%%hWeJ)zt#0j&RqaVAVtvKy3kQMJDnkEk$kHpD4)J*C(}xr!n~%
zGXNz7DtV5Mx^H=nk(G&E_}|6#M+^JR{tZZgmPoBZR-3vZgrlXe%l0KHEzSaTYE7jP
zqa!EJ2VCXeT~sr}V<_gX>vg-pQ*{xP`M5uVA6Tr8LYvFE4(aP^({T4$4a9>=b^zD9
ztwO(&>^tFwK5K9tL^wq?v$BfggyI!BR=VEE9_^T(^=-kAF5)+#NJr^WCH;)v5|UpI
z>doGF*}m*4doMPv43+n&Nf1GcDl}uXG#yoidsk9IB$a16T2W`t@ozC0Dh4Hm%C2Ey
z!)?-vGa8tCya@M1iS)0VRCvI_Dtl{{l0U-#aVCws^g&@r3ej$6Co~nsWK|x%RU3pg
zr$W|Kt7Hi|DWPdZ^^Wj>a8kw`fm97Fm
z+t|82y*10${ZjbT8q~YGef##3q99E21f>tO?Rl?!h?dfbs~?G*J>K!WM;ktC
z5GOCJw2+cPllN8;73WKus#a2-;nt%0lp31+m9@;0Z(cznv{dX_#V2HGC}vt)Y^}VR
z-08+%5&h;uGa!y7=dh8J@<5HR2b(jX13Wi(sdiAVUBdtkSMQD?SWhYVcFOV!}4o)k%i9jJ(wh=7RW!qx<)rX49Q%*}^!Euzg
z7daXzQu6}UFCmbH-Wc
z5gk;Nbxe3t%FBw+pp^+yNzSn)nRkovb`myn4O=9ucXUot9
z@-TKru5T~|uckXyu9q}`WXN8za!*;+5?Ztj5?tYE1Dt=gyM8yih`wuDqSbVTy^JUX
z>(mi>vt4)-xm}L)20odcyYuG(ZB(ebz-bS-sRRuYC|iI$@fO|8F3K^I@`~V`*+sI%
z7cXJ^>~lNEOvBrZr>M++5=S~*G4o9sw2d;?fxAqKdVKAgmJWI}({_vPv(JN%juaCm
zXrZvZ9l2;7Y4Jk9+SoTEd?3$AQDP;^mDrTy&Q83~4AA-W*gW(I_|hS;zt@1{>Uy+8
zPBL3>&TM5;V;1F{v##px@Ij=$I(j@FPa~!r#o50261Go1J$pTq8nc~T=9MAz8BIPX
zqup$+T+FOg5;v~bWFi3D4YrRzfz4OG+JXH0m8Pq%1g2FSrVQP?w7&<|hM-N38;J?`240&brc&*LHZ?0;vj_f$d{Y;OLJ(Yu&^`
z`c_y@Nz=_Y0S9L+EFzU0sCy#Nwbx)$FVFpE?hfsm`0x;i|M%0_KK(56?qMlyC`ywW
zvVKVx`LZ&>nwlmuVbgG6byQI~fw_|$E
zwZ@%95tF@-W=ag4*~j#{Tg{uDFXy4+6D4MBzW8Mve)_ZES6&97=RpfR>Ii5FuJK^y
zB&$p&Y*pG^j}>Q+!^+)haK|q;8*KjU3%K~JAH(*^r>do;Z&l~C>YZM93s!Hw3$(wt
zAnS#hD-ovGT#LQ8eV2V}olE^=YwdKJ7MQnNY#x0a7k=fV*!=BR0ynWx*C5*|st?Q7
zY5rZ@erTzE;7j%va1(}}gPU=;FT9A0ANvgejQt;eKUQzN9dvLuo&OZNd1X}9nHY>Z
zjV91~Rp*~D(ZK=sfAD@Be)_Z6KK4XrFB&Qcg^aNB
z4>N;by@1VEzKTm9`%N5v{P(~wf1|^o;QC482)}&|Ub6zqADCySYr1Z|oaAQr!l%Y<
z?pHHo``DAX@IQVHM_>3NR`=YE>6)v-@(OAVDi_%OT)de2LpK!Vl|C{_HCjQKUi)o0^Ur?-)6F-Vx=zDW
zY@dGtN1yu(Y`^vh_|l~@r1iQQytKRei
zh%HAWMX=-m#L(%bCnEJanl#i&;XsrzAVtzYW@IV^WfL;>c9U*9RBVffG=E79St?Q
zwK-CBpsZI06?sM)$w41$YAWdka<@h9;q^geMW9$tgQ7dH_p#7w^F83f*njog8c{NH
zEAQDebV}&p6imC=X~OF6J8{Lo{WsXZ|2=VhdV<6+zk
za|U$74OriPTXWOl*nGTt0q6hSf5gRK`c?2NowyKQQGA(+!<+|n(Cp8oD*Z5h>IXys
zr`>Xp)`g3inCuc29#7h_Ws+3XYa~VW67-wN%)wTp7+Y)~dIXn#>l0Xi&s#BFd(G}_
z_c*)yDy;AMb{mxY&eZ`paOwjD0FFNY1ss0zQ?p{4Nuu+g`h2N|3zg9Ik0V9e5?2=1
z87lz!6l>_xgL_r|G?&jYCn<*WPLP;+3gn#ogA`+`oZ^$;d7+8ZuN-E8oFEtCjPyEO
zko+b5ym=tJxrXw^3)p<=Z?O5&mum(xd&gH8A_7e*W+R&4R6I>{-ZaheoZO$Vo-iF9
z;qZ?>gYDywt3kr%XEq4#Rf976Dyrx(0!2x*$ly&C
zZkT3*No`#$#xNC1TS>hs+=M`+=#>}EvimazQ4M-#!Bm5k)wN=4`@~Z?`hQ=x7EXhl
za5rh>6#q$1_4n|%FMS=GFaIr|-MP1NC^EA&i*aXz%Pmo5f|b4sE!}5QdC~rwM+Z97
zDh*JtKui@Ffe9wR$N71%!mp1_X^2^vh{3!Us#khiRVLIu8
z`S$TA=aWKa5~)H8j2N93bDew%S9-YquX5c4J!;~&iLiR9Ld%rv3afY|upEjYkrh@A
zsO^8+-bEhaBQ&(8Rd-4*cjB1`D6evY?7c^H;_%kI>V7%zB1*bkF0VITF`I-qO?&=(eN<|J~H;Lbka9&
zX!w&pD<9!jG_)pZF=#j~H{Tb8N;b^F$9n?jr@dpHr*azJFrV1SZ6FJfs7)rG^RBj0
z?MTtFQ-dZ~H=1cTh+1LDHzDovsPl<%S1a533^8A2MZ;MlJ26q#zzjeI8?JFH3smWz
z4m9U`^8FG{4m{qR=A|TKwiAna)aesOEh|z79yzw?Sfom+j3CuDb1etkI?RIb@;bi7
zI<2(R!Hu0~@HIT8a?UPLCLIdEcwHYuHzx?g*%lht7Pw*>cOHXE56Me)U?oXeP1kILGHYoJr`Um5b&BA*{;kZIJOMX8-^n
zzDYzuR7AFTN_aA=Mdg=9o_%pf;F{1l@ucM}i{p*`^wP8$={T>$@#inYCsFeO5v#mC
ze)MF_<7Z4R-YwVDP>}jN9|2$j$tTn(nTe$MX0GLMx{ivK7N`)UFerQ$a%&SzXZKk?
zqh~O=IQsI&FjtAOh@^P%f>C@?Ia68&zx$9uh%1!^JP1-6?X80zOG`sbO5K9(;YEtt
z<0phqCyGjrl~oo&5@-=g@-$ku>?x#ZQEgM&4_wVPNVzdqsa$HLsDD&cEclg8LufgD
z%41SF+J?2_f|0|3F6o5i8)=BjrR81)AinycG!oxkj#t~XU`C%K&)3rgru1>1R{sYq
zw0cA<#XRJTbO~HMuu@X5t|iZ^IkSgPhA15(vEQaIwNILkgowpz&T#=}a*2%vK{iz~
zL?hP}O{4r}zR2SEUtI?i0jm{=+MktQI&>^6y}Vj}h^WorBTpmXOy2M09=Cs=z7>+DQ|&U9f-PQUToHYW9H=6EBq*?q`tzD`wIbrmvf-Zbn;w`1g@FxVbB03XjB47z#hH6{@;BYyzx7chw4cFv}Fum?(tlx6ai6%C?
zq|m*0c72xk>Md{46$e<~cQ5F=Yb)`P;Ck}LjjC;H)y=Z`lGSb413FOckt6;zh~JP&
zWShZQe#LfDRszbCnXoR#^GY%>YyKORsS%s%VCc@9rAH1{a7jJLl-=GnS7ZJ5w_&>d
z^*im-EG1?JE?mI&`4@l-7hU_g{0V!j73k`#G2L)3wBRGLs$UzO*D?uv?|vuNzwvP#
zJ^MU(lVYsCz>Z^=;HLF9e?$m}U-
zMMp~@vH%Lt^Rl;x_1o^l*`NI|)^EP6!FaJoyC~@9;YV@dKm8Y6_{gv4XV<%!sTrHU
z_$wTK`cH813qOZ5AAA6G#lg-4BMbpn6V80_0c;<80vA8>>)@xKsUopzzSO9)%Jy^|
zU^Y79xxmgG2Sk&>%huK}rMVlkLnO1V@(l>e1QkGDLXgA6;)3I#IcOlVlb-1u9ALWf
z+kmUCjGwt-29Bb~hAsK&>Z`DN^Ih2g;rC2+EX>Yb;oYh2oN>Yl&EDQN%iza@Z0cBTj
zmXfl&=Ax)M##8`h*&(YijD;JTe=x9KV}19Vu=n0~WA&CdgRZ@HR!&EQx3kbnFj`2+
zgpvT@>Z{93w{%UNNr}GiEe9R`@t@+-Z+)VAn?@MgD1l{}s&@~qzw2I1H{H0%;|PBM
zK&KW&W57p8;OAe!(O-TMN1y$(`R#HJHhbPc
zcf9$tdXw_3ty4X(-UM>NY!%zCR#?6DKAip8pTz#V-wC?*n$VhD
zuE!yK>h2W1dI6Vy`xDqc`+OYAG(wh&^}|DKzVu}re&%yH^T7v>&0i>&^$P2|?*#6?
zb0@kvNe3~5FI~d+(I;@}w?Bakzw%LRzxD{KMoRl+k{#)K5MscCH*Ff1$27`b3zZ5z
zH^#IBb_u{CRf=ZmOt;^LvmgEt_TTrO`L!{fZNFVlq93QMm$r{Tfz4n4EpT{A8V&&E
zqqAx^gz{1a)!_*Me&Hn?{pshy>Xk7k;dw+p(NVqtDF4!#Gg#euJI?&XKbzm}bi+B-
zOf@ITvXHhqJs?F}ubHw118P(t@2%_EMLh&4P*~2jq(3S&G|zQn(7{>kecwB<_XGbh
z+`XAeyGMlw({YZxEv3za4`KVliz%prGKnSZnGZ+IG9c1&Nqv)MvbcBwn};8rAG|vu
zUxK^qQNYpqrt8n)%#VK%tNY#ptk$VT9O_h}9IpJNN|myjg6c{Rs!z*P&V=UH?;23$
zw*xxeaufF6^Da!++1T(T7V>f~v~M4OGEFinE@t-z&Uy<{5tsg7mhs%
z8d0uYJWlTr_3GA}vH!mJV!HmiJl>2;mcgOpHZi7!;S68>xy=F@*UVx$4PR6QT6k!+
z%6PA;c^;8woavUEuzuTp*$s}K_E|ddv#WBC9-HGAznd$K7wm82xzYcCKn6rZY<_zx2yle7hySo43{qUnhfYS`uyCiKgMJBqvIYg8C
z7_{AhFC7k9Mjzg^RvuciYsqc24ra!5+pU;xxoLheue@$X{pm1NJL$X~o?}oK23Cvo
z5;)BH!MaU}Ut0>-D_aZ`t~kKzb+?u!qlI*u6QZR$y0~FTuKkfrgdAGnJ(eEV^SqsQ
zYFW(|EbZ-Ky6tt~{e6gM)q16u!9@m{+MJmH-J~UJGh3W=GgWgPv9KKjs^uLS`mmic
zc=pzy*IW}?fR_7et?@0+KnKc3QW(dFfPG6WgIXSM7;)GBewT2hg%`=QwU;mV)4A(F
z>ve5-s_?J;OR|RPfpuu=C)p~kGa=-Cp9)GJ;wZaE`d`zOY?i}DOsnR8_pUST$S5wR3<@@dw@2IN?t&D_38p!lOV}z
zy`o)`A06RB)h=lqZ&$^+9Ef)`9e(;+;Yn|Ym>pJr8A^WzEpf!
z24tH^u2st}MYiM0+GSX4cF?Hl`x5+}H34y{hEt!#2czoRV&;~zcv&$4
zZVGB-@%?glXuESpm0VfYnPT~6%sWe+35dSlWj%NF@bYNPTEm%HjLNI9n{*@SmQ*Jn
zly+$k&3rC@@=CkwjDCr3?Y;rdH$WM<(MDQ$?#
z_OCO6BuLEJgrOWqWeoXk&B!Sk?~Zi^mu8htv$EgI?K8oMz{%u`#3=z
z_6;;vbjl+$xz}z-d!c$APey^55Z10u{|RdC-kG=HqxROF;qMsRlS?qCHJKv&j~U~}
z!b06x)4NzlYtm>aAG1BjSwof6Y59~I=NDtzNjhM3#1B$$jB9xzSy#~L822{rV_}X3
z*ijezc=FU-?`gS2cJRrocvmhT8`F8JGM7_gX&_dp)3$)e-Tsu6BR_o)JJ{f^2`cm?
zpiICiM|`5IRtMBu<|4MsAh1DkbHwUj5~~2;OEKU3Va7_r-Yzl<+kKig~4y
zSK_IHXz&&+<8e<}_3}rS&{{Oy^r%{rpOKLjkpnL(*v#cAPBs&=nLv3RO%*sajd+|W
zI0!}o<5FZMNq>J_c$hX@HR4lJN+{ODZ_DLN-GkNS;Pm6e%XJ=Mo@!9lhPK91U8b+~
zWZM@q+xK&pA^(5b4mT~I3In?$>YPBy|VBcl^?Q*6?cj~>3
zn+%Ze1uaB&QIaQ3_UPKT(z2Sm(+W+F8!^=TP9|xV4wRR#S4>29$m-^_uxH1X>3K}3LlCzOv_;iAI88?#ct
zS(2pRLpvw!>WQ(=lGAia6uP`L#QGML&G&|fVYViJ)%8OKPzg|=;
zxHX^0Jz%`l?&FpT-T5^(+U%E)Ocdp+G_z43KxPV$LRTrMd3mgsb6MvMMq2)NTpf3V
z9#1DZExvnY_S!6=q~s>%L+w7vX`)v9Pb*$G^j-Dj@`H~PdSWxM`O@5MMM=&kD0*u^
zSyDwl8Ur#)tU#*izAbW!|1F-{EG8cdS8a7MSBastk5SeUwfFHdxLhZzPJN&@Cq6*!
zAxbHScVw=-cbV5YC5+O;K*dD1CaRRp+@)!}?6{WGOaapaBYT%av8TCkU(w3VbDo6f
zlS$=UA8t7HhH~k(>Ta9#95R>S^
zmGfmbKdvMrLHy{xbfg4+*(OZeEw-V4S#d(Qi5g8g?8ZtHH*iXdv3XMZApD6?4qbk
zowt4BDIEUcXRv+dxenB99m@K%5<(HIiPd<^*!{i{6CCdlU~ZI7@Cm
zg7Gx9y~-!yWpXnkKwg@wFpH*m*=SrK$%?a%FthzgmW?2S%Pe!(SW?#B6xsO1A2`ls
zrx?ti*4p0oe-pn!%7_?f=pL^ya0@JqiDVcCqyV+p-)H68x)6e75$A2H&
z2fu0>;m4=r%#`PkRT(9*ylkI)9v6S@e_{L7Gg!at?U-)88FcoHrYKTVH3@ynZPA{r
zypGMsjH0v?u$q)S#T|0t&opw*+dlR5++S+VS~z5eQLEBqQZZ#MwA{j~d~O9jbL+j%
z*9sOZNjn+!lD5>0xM&uksZRH)3Mr&LN?>A1y=RFFm2*zz^L25xgz6QD-t@5*9_QTom(~7}SK=VC
zyVLN#lRT_%RhCQTzvfJ<>}-3ZX2z1&C=1rd?uPjG)USigGu=Q&TEXqmg=0o3hvQMJ
zo{6y7b6fayk(h5ym{ep05JzES&1a%3Yonr!y3KjL7L;B`Lp3W+C(7|{b5ci*@+x`D
z3lmR8j8!C6r<+ZUh_6m!4YmZ|5|r{-%az#dTpZEnhAab9n=&}FGDg2KAnZKF}`<8$(ox0&@oJ2>l6)T{q+pKN}}k!DYviB
zz%*P#Ja*h?!CQ3oVH+;JExblyON&;uY2skYQbN#&`KI9ME+xgMXuUQZo=>dkoii?{IEm
zX1C?gv@5omC2w9CP;@kp-Pux_9kAlJ0ZT$FjS$XyN6HF&#_eD+wnEr)JCAKnWqi#8
zHTd2NDR=5HE70=Rh7iOLavj_lt4VeIs6o^S)E$)nNZEe9F_7_#Sgmo4;s~GR8P_S9
z18tld%Ru=xi3+V+0}b({M2*7gpasK9L=~q-d&P?Q%oY(eyV_8hngL(=NS5I|YNIO4
z-i#8T1>U_YDY3$&On$%wkQAjllcTNz_v6OQhKX@nWcx0S0iZ82qKEa?b@bzy~VFB5M|6O(46JH2V-R$KRh
zu+{LB_r*~ZC3mn||6@O}wVR83A4Lu|16h~-z{|f%e$losii0UJYa*m~8nwKFEYqE&
zK56Z{peNY6i&QMp2uZT*P>s=LEfugL>?n?eTC89>!FWF;4P=C5TgfzS5XazaD^0L5
zZ_5h1%-FC|edS4~`9UXStZ4|J0UsH#;aM66xI(S^UCCu_T9Z3Yk!_sm^lDS6#5OT9
z@wv>;HoG0KhqPR`d~?fM25_v)TYPF%k&nk|)2N!II#OfVhl#y52#zvu%5SsoPowea
zksFF+W_cbNciAB2HrV4QmQP1HxrXLCZi)-mB~P95(I*_FM|=#^2;!=P5Q`}Wj;NQs
zhH?RD2MY+?K{IZt+3RUmhNa@k3~qtVE*oS;8+bg+2fIFjbD^F+=bB8M0Hx5Bq8`1mW4*d#5Ot
zqRFm$07>Xqp*?sTgSjkUI
z(!pj@PX#YVcibA|)Q0czWxrK|mgf?bTbA
zdHHI3ay>kL8uBN{Rb+%!_Hr0zA8@Pma8d99c7ab0aJL^D{^H`J-S5z8Ao&UlM@=UN?J&huk@N$#Zb$d!jyq|Wk>mE@{j-RxmK
z4?#T?l`rvWD##WmZNsLUOrPvYco3PG)4w`~Ap5Rdgr<92ot!q$lBCM?Y4p&QwAMRE
z++2oj#9XQF<#VM9$FQ{E1%N6-3Zjs7O{lavbTx#0i7>0zocgWijU}>
zPJUcuUcynQc+}Rg^+H(nP@I-USz+V(Q4eKU=I7Q8a5=f0k2>W)@8W@K_a!&pDrROt
z`HP*FcG6JqM|Vp!j)Sn3GebAA~xuxWDX9jmxfm2`QZUMOp3`o7AtKdPJt7Hb2FclH-Z%
zym@D@^m94wo~b!=Bz{-Nd8cjx%U8F*AMxwlnXlI&jduz;N54
zp&FnKY~M@BLYz66tqEyB&-j9^g6ClSjL%FKtWN=
zwU(m>sORg-ON6~u>Q->oxa%ppPuesF?aS8BccSLmdm)n_nrN3tHJ`o>gkp+J`-AqF
z?(zmf2DsAlY`s)nt<)NU(hkLb`$^RNXfRxd7qe|P7xi3
z(XOU4SrsJBZ^cq%qKpq}@LN@r`Hhx+d;PQw*vWTg<>;M1O|RsdaCDdTs?Oai-Z22q
z;u`F7ZAF)IYujaY}?nW
zv=VCiRdx7zQs69Vm#Y+nf
zyaJILu6J40GIW;d(lCll3^y!Xz(8)OqZM{qCoMFrTDA&04g^$R*nl0++Db)jsaY)p
z((AwZ6?(}zxG19{88sk0@a=iz8q>6GXyB{sZr>;+rTmesR6|81URfk}XAIsFA6bYh
zhS9t=5Dk1oj}5FDYa`m~xa9lX#v2694&$9L!4g`(OVmU=&bl(I|RrxhL%Rv1pg2?C%nc^t6F^jfZAc5`4
z%QX>%ZbR1x&4a*14hp9+KxCOw^BO4@WuxF=J-0MwAV?|Lj6)!HxZYCc!6Tlt?lHTY
zq-0kqDCw1=kWcGmN-vuJRC1ZB1vKaPP1^`=eKJ$4fdd)_Ys8poJZFX2mNwE{iG781
z&h6k9e^tevCX$$Kz`QX~$|C8I>!nO)#B5H7Xn%J
m?J}SKvFXIkjOzy~0skLuA0S%=eI^|M0000AJ3O2PMD
z$oLqr^>U%d=l1<#%J_z@&PKrZF1Ysc`u@@H{E623uH*YZz4w1BzW*n(@|xWGCA9Sc
zMt*e9`2kdxPQ&&>|-UCa7_51w+LUsW@ZzZSW0y$)Hp~e9%
zPvP|a03ks1`~K?q{u;6NC8*{AOqIUq{CL&;p56Lf$oQGq^={4hPQv)y=I|4n+?>7F
zim=dxt#sqj!A8000D1Nkl*v&^&=|+Hd{KUTbfjFY149`B9Z?JA;JODI|1Ri*a+Z
z^#PDGc`IecWa-9LVrC5Yc`M^4C1>fnVoIQkNbF4J1hZR{8AI(*G83SSi04gDEzE4O
znmIHdWbzu!0o~cerl;1X52(&2GX1Df7)YyS+AHMCK%#EC)SIp+C1-jvkP=@8QulHV
zB+{lQHJX3Uvyw@D_1H_9IT`uctkHDlK-0asdie7--IsyHF3&)stx&Ct9Qmeua`m`$
z1IdA=`>~o{yoG8o-KdZ+Zz1OT4Jo{ZAiRanxq1w|8A$TNPqy$Da<=K7F#WlDSeV?8
zf#lB(>8dy1Ep~k%aVIKtnSU;n%Nh~QzJ<8n^qPMH(P-24A5=>a*R9#QvjzF8n%@1N
zw@?CG@6(%>+-0ASK~jEmCV|&a*7-GKT72W<(TbSjf)&Eme6nGE>Gkj4Sq&2e+-G%|
z+NM8OOm5zVl9{Z8Dd8A5z3y8mZ=4Bv4%>as_{9cN#bm~;h>62(dqY93Zy}v&c4n($
zVv&CoG~?z9=}cy1a%8Rynx7Bl=Qq8Hv#GCWpDl%I%)DgQtB?d}0E$dW)pQ*y)z&k{
zb*A3**JaZQm{=yp%~uZ`NX<0e4n?NaRx{%bH(iIajGNvnpxOy0%)jxXEG1&U%R}*0(7v|MOC;<~=
zXCjn3}VQ-`MO)Jy?KTrtggxbyx9Bv2-SZ99MS
z!MEEWV<3%y54UX0x5MHm2wJEBcyw!R)65*VuiPVt3L{i8$K!SsxdDB13e}h|#znim
zfX4XFr-+nlMNQ0I1?^Q(${4-OViN1!6d
z)+2K|9S)V#DX6HR$b2@N72{Kia9!*mQDq&n2{r`j};V|
zuV%_wsP!zB?m%;FeaRe+X47K0e+KE!8C{gAWF8)lCd1u1%~|M!XNRvwvtqy3iz0WS
zpWdhn6$hP8PaRBmp)q`#PCA`Vd#Tc$@f1tAcM>f_I@bC)hkI9|o(Iqvo}PPwx_d@r
z;T5#w0aR`MiTh`C0rj9v-ax%+eePZBBRe#A0@~{sqCR=@13&;#uuS&+c?p6TD&YIC
z+e`8i|D*o={t84pkFEFN*8wW1NMd^gIaE
Date: Sun, 7 Dec 2025 16:25:52 +0300
Subject: [PATCH 23/39] Allergies list implemented

---
 .../authentication/authentication_repo.dart   |   8 +-
 .../get_allergies_response_model.dart         |  37 +++++
 .../medical_file/medical_file_repo.dart       |  41 ++++++
 .../medical_file/medical_file_view_model.dart |  32 ++++
 .../allergies/allergies_list_page.dart        | 138 ++++++++++++++++++
 .../medical_file/medical_file_page.dart       |  10 +-
 6 files changed, 261 insertions(+), 5 deletions(-)
 create mode 100644 lib/features/book_appointments/models/resp_models/get_allergies_response_model.dart
 create mode 100644 lib/presentation/allergies/allergies_list_page.dart

diff --git a/lib/features/authentication/authentication_repo.dart b/lib/features/authentication/authentication_repo.dart
index 6ecf4b1..3194ad7 100644
--- a/lib/features/authentication/authentication_repo.dart
+++ b/lib/features/authentication/authentication_repo.dart
@@ -266,10 +266,10 @@ class AuthenticationRepoImp implements AuthenticationRepo {
       newRequest.forRegisteration = newRequest.isRegister ?? false;
       newRequest.isRegister = false;
       //silent login case removed token and login token
-      if(newRequest.logInTokenID.isEmpty && newRequest.isSilentLogin == true) {
-        newRequest.logInTokenID = null;
-        newRequest.deviceToken = null;
-      }
+      // if(newRequest.logInTokenID.isEmpty && newRequest.isSilentLogin == true) {
+      //   newRequest.logInTokenID = null;
+      //   newRequest.deviceToken = null;
+      // }
 
     }
 
diff --git a/lib/features/book_appointments/models/resp_models/get_allergies_response_model.dart b/lib/features/book_appointments/models/resp_models/get_allergies_response_model.dart
new file mode 100644
index 0000000..cd4802f
--- /dev/null
+++ b/lib/features/book_appointments/models/resp_models/get_allergies_response_model.dart
@@ -0,0 +1,37 @@
+class GetAllergiesResponseModel {
+  int? patientID;
+  int? allergyDiseaseType;
+  int? allergyDiseaseID;
+  String? description;
+  String? descriptionN;
+  String? remarks;
+
+  GetAllergiesResponseModel({
+    this.patientID,
+    this.allergyDiseaseType,
+    this.allergyDiseaseID,
+    this.description,
+    this.descriptionN,
+    this.remarks,
+  });
+
+  GetAllergiesResponseModel.fromJson(Map json) {
+    patientID = json['PatientID'];
+    allergyDiseaseType = json['AllergyDiseaseType'];
+    allergyDiseaseID = json['AllergyDiseaseID'];
+    description = json['Description'];
+    descriptionN = json['DescriptionN'];
+    remarks = json['Remarks'];
+  }
+
+  Map toJson() {
+    final Map data = new Map();
+    data['PatientID'] = this.patientID;
+    data['AllergyDiseaseType'] = this.allergyDiseaseType;
+    data['AllergyDiseaseID'] = this.allergyDiseaseID;
+    data['Description'] = this.description;
+    data['DescriptionN'] = this.descriptionN;
+    data['Remarks'] = this.remarks;
+    return data;
+  }
+}
diff --git a/lib/features/medical_file/medical_file_repo.dart b/lib/features/medical_file/medical_file_repo.dart
index ab09ca6..bf10e9e 100644
--- a/lib/features/medical_file/medical_file_repo.dart
+++ b/lib/features/medical_file/medical_file_repo.dart
@@ -5,6 +5,7 @@ import 'package:hmg_patient_app_new/core/common_models/generic_api_model.dart';
 import 'package:hmg_patient_app_new/core/exceptions/api_failure.dart';
 import 'package:hmg_patient_app_new/core/utils/date_util.dart';
 import 'package:hmg_patient_app_new/core/utils/utils.dart';
+import 'package:hmg_patient_app_new/features/book_appointments/models/resp_models/get_allergies_response_model.dart';
 import 'package:hmg_patient_app_new/features/medical_file/models/patient_medical_response_model.dart';
 import 'package:hmg_patient_app_new/features/medical_file/models/patient_sickleave_response_model.dart';
 import 'package:hmg_patient_app_new/features/medical_file/models/patient_vaccine_response_model.dart';
@@ -38,6 +39,8 @@ abstract class MedicalFileRepo {
   Future>> removeFamilyFile({required int? id});
 
   Future>> acceptRejectFamilyFile({required int? id, required int? status});
+
+  Future>>> getPatientAllergiesList({Function(dynamic)? onSuccess, Function(String)? onError});
 }
 
 class MedicalFileRepoImp implements MedicalFileRepo {
@@ -549,4 +552,42 @@ class MedicalFileRepoImp implements MedicalFileRepo {
       return Left(UnknownFailure(e.toString()));
     }
   }
+
+  @override
+  Future>>> getPatientAllergiesList({Function(dynamic)? onSuccess, Function(String)? onError}) async {
+    Map mapDevice = {"isDentalAllowedBackend": false, "OutSA": 0};
+
+    try {
+      GenericApiModel>? apiResponse;
+      Failure? failure;
+      await apiClient.post(
+        GET_PATIENT_ALLERGIES,
+        body: mapDevice,
+        onFailure: (error, statusCode, {messageStatus, failureType}) {
+          failure = failureType;
+        },
+        onSuccess: (response, statusCode, {messageStatus, errorMessage}) {
+          try {
+            final list = response['Patient_Allergies'];
+
+            final vaccinesList = list.map((item) => GetAllergiesResponseModel.fromJson(item as Map)).toList().cast();
+
+            apiResponse = GenericApiModel>(
+              messageStatus: messageStatus,
+              statusCode: statusCode,
+              errorMessage: null,
+              data: vaccinesList,
+            );
+          } catch (e) {
+            failure = DataParsingFailure(e.toString());
+          }
+        },
+      );
+      if (failure != null) return Left(failure!);
+      if (apiResponse == null) return Left(ServerFailure("Unknown error"));
+      return Right(apiResponse!);
+    } catch (e) {
+      return Left(UnknownFailure(e.toString()));
+    }
+  }
 }
diff --git a/lib/features/medical_file/medical_file_view_model.dart b/lib/features/medical_file/medical_file_view_model.dart
index 4b5a14c..9ccc735 100644
--- a/lib/features/medical_file/medical_file_view_model.dart
+++ b/lib/features/medical_file/medical_file_view_model.dart
@@ -9,6 +9,7 @@ import 'package:hmg_patient_app_new/core/utils/request_utils.dart';
 import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
 import 'package:hmg_patient_app_new/features/authentication/authentication_view_model.dart';
 import 'package:hmg_patient_app_new/features/authentication/models/resp_models/authenticated_user_resp_model.dart';
+import 'package:hmg_patient_app_new/features/book_appointments/models/resp_models/get_allergies_response_model.dart';
 import 'package:hmg_patient_app_new/features/common/models/family_file_request.dart';
 import 'package:hmg_patient_app_new/features/medical_file/medical_file_repo.dart';
 import 'package:hmg_patient_app_new/features/medical_file/models/family_file_response_model.dart';
@@ -27,6 +28,7 @@ class MedicalFileViewModel extends ChangeNotifier {
   bool isPatientSickLeaveListLoading = false;
   bool isPatientSickLeavePDFLoading = false;
   bool isPatientMedicalReportsListLoading = false;
+  bool isPatientAllergiesListLoading = false;
 
   MedicalFileRepo medicalFileRepo;
   ErrorHandlerService errorHandlerService;
@@ -34,6 +36,8 @@ class MedicalFileViewModel extends ChangeNotifier {
   List patientVaccineList = [];
   List patientSickLeaveList = [];
 
+  List patientAllergiesList = [];
+
   List patientMedicalReportList = [];
 
   List patientMedicalReportRequestedList = [];
@@ -69,8 +73,10 @@ class MedicalFileViewModel extends ChangeNotifier {
 
   initMedicalFileProvider() {
     patientMedicalReportAppointmentHistoryList.clear();
+    patientAllergiesList.clear();
     isPatientVaccineListLoading = true;
     isPatientMedicalReportsListLoading = true;
+    isPatientAllergiesListLoading = true;
     notifyListeners();
   }
 
@@ -162,6 +168,32 @@ class MedicalFileViewModel extends ChangeNotifier {
     );
   }
 
+  Future getPatientAllergiesList({Function(dynamic)? onSuccess, Function(String)? onError}) async {
+    isPatientAllergiesListLoading = true;
+    patientAllergiesList.clear();
+    notifyListeners();
+    final result = await medicalFileRepo.getPatientAllergiesList();
+
+    result.fold(
+      (failure) async {
+        isPatientAllergiesListLoading = false;
+        notifyListeners();
+      },
+      (apiResponse) {
+        if (apiResponse.messageStatus == 2) {
+          // dialogService.showErrorDialog(message: apiResponse.errorMessage!, onOkPressed: () {});
+        } else if (apiResponse.messageStatus == 1) {
+          patientAllergiesList = apiResponse.data!;
+          isPatientAllergiesListLoading = false;
+          notifyListeners();
+          if (onSuccess != null) {
+            onSuccess(apiResponse);
+          }
+        }
+      },
+    );
+  }
+
   Future getPatientSickLeaveList({Function(dynamic)? onSuccess, Function(String)? onError}) async {
     patientSickLeaveList.clear();
     final result = await medicalFileRepo.getPatientSickLeavesList();
diff --git a/lib/presentation/allergies/allergies_list_page.dart b/lib/presentation/allergies/allergies_list_page.dart
new file mode 100644
index 0000000..efcdd0a
--- /dev/null
+++ b/lib/presentation/allergies/allergies_list_page.dart
@@ -0,0 +1,138 @@
+import 'package:easy_localization/easy_localization.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_staggered_animations/flutter_staggered_animations.dart';
+import 'package:hmg_patient_app_new/core/app_assets.dart';
+import 'package:hmg_patient_app_new/core/utils/size_utils.dart';
+import 'package:hmg_patient_app_new/core/utils/utils.dart';
+import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
+import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
+import 'package:hmg_patient_app_new/features/medical_file/medical_file_view_model.dart';
+import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
+import 'package:hmg_patient_app_new/theme/colors.dart';
+import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart';
+import 'package:provider/provider.dart';
+
+class AllergiesListPage extends StatelessWidget {
+  AllergiesListPage({super.key});
+
+  late MedicalFileViewModel medicalFileViewModel;
+
+  @override
+  Widget build(BuildContext context) {
+    medicalFileViewModel = Provider.of(context, listen: false);
+    return Scaffold(
+      backgroundColor: AppColors.bgScaffoldColor,
+      body: CollapsingListView(
+        title: LocaleKeys.allergies.tr(),
+        child: SingleChildScrollView(
+          child: Consumer(builder: (context, medicalFileVM, child) {
+            return Column(
+              crossAxisAlignment: CrossAxisAlignment.start,
+              children: [
+                SizedBox(height: 16.h),
+                ListView.separated(
+                  scrollDirection: Axis.vertical,
+                  itemCount: medicalFileVM.isPatientAllergiesListLoading
+                      ? 5
+                      : medicalFileVM.patientAllergiesList.isNotEmpty
+                          ? medicalFileVM.patientAllergiesList.length
+                          : 1,
+                  shrinkWrap: true,
+                  physics: NeverScrollableScrollPhysics(),
+                  padding: EdgeInsets.only(left: 24.h, right: 24.h),
+                  itemBuilder: (context, index) {
+                    return medicalFileVM.isPatientAllergiesListLoading
+                        ? Container(
+                            decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
+                              color: AppColors.whiteColor,
+                              borderRadius: 20.h,
+                              hasShadow: true,
+                            ),
+                            child: Padding(
+                              padding: EdgeInsets.all(14.h),
+                              child: Column(
+                                crossAxisAlignment: CrossAxisAlignment.start,
+                                children: [
+                                  Row(
+                                    crossAxisAlignment: CrossAxisAlignment.start,
+                                    children: [
+                                      Utils.buildSvgWithAssets(icon: AppAssets.allergy_info_icon, width: 36.w, height: 36.h, fit: BoxFit.contain).toShimmer2(isShow: true),
+                                      SizedBox(width: 16.h),
+                                      Expanded(
+                                        child: Column(
+                                          crossAxisAlignment: CrossAxisAlignment.start,
+                                          children: [
+                                            "Dr John Smith".toText16(isBold: true).toShimmer2(isShow: true),
+                                            SizedBox(height: 8.h),
+                                            Wrap(
+                                              direction: Axis.horizontal,
+                                              spacing: 3.h,
+                                              runSpacing: 4.h,
+                                              children: [
+                                                // AppCustomChipWidget(labelText: "").toShimmer2(isShow: true, width: 16.h),
+                                                // AppCustomChipWidget(labelText: "").toShimmer2(isShow: true, width: 16.h),
+                                              ],
+                                            ),
+                                          ],
+                                        ),
+                                      ),
+                                    ],
+                                  ),
+                                ],
+                              ),
+                            ),
+                          )
+                        : medicalFileVM.patientAllergiesList.isNotEmpty
+                            ? AnimationConfiguration.staggeredList(
+                                position: index,
+                                duration: const Duration(milliseconds: 1000),
+                                child: SlideAnimation(
+                                  verticalOffset: 100.0,
+                                  child: FadeInAnimation(
+                                    child: Container(
+                                      decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
+                                        color: AppColors.whiteColor,
+                                        borderRadius: 20.h,
+                                        hasShadow: false,
+                                      ),
+                                      child: Padding(
+                                        padding: EdgeInsets.all(16.h),
+                                        child: Column(
+                                          crossAxisAlignment: CrossAxisAlignment.start,
+                                          children: [
+                                            Utils.buildSvgWithAssets(icon: AppAssets.allergy_info_icon, width: 36.w, height: 36.h, fit: BoxFit.contain),
+                                            SizedBox(height: 16.h),
+                                            Row(
+                                              crossAxisAlignment: CrossAxisAlignment.start,
+                                              children: [
+                                                Expanded(
+                                                  child: Column(
+                                                    crossAxisAlignment: CrossAxisAlignment.start,
+                                                    children: [
+                                                      (medicalFileVM.patientAllergiesList[index].description).toString().toText16(isBold: true).toShimmer2(isShow: false),
+                                                      (medicalFileVM.patientAllergiesList[index].remarks).toString().toText12(),
+                                                    ],
+                                                  ),
+                                                ),
+                                              ],
+                                            ),
+                                          ],
+                                        ),
+                                      ),
+                                    ),
+                                  ),
+                                ),
+                              )
+                            : Utils.getNoDataWidget(context, noDataText: "No allergies data found...".needTranslation);
+                  },
+                  separatorBuilder: (BuildContext cxt, int index) => SizedBox(height: 16.h),
+                ),
+                SizedBox(height: 60.h),
+              ],
+            );
+          }),
+        ),
+      ),
+    );
+  }
+}
diff --git a/lib/presentation/medical_file/medical_file_page.dart b/lib/presentation/medical_file/medical_file_page.dart
index 7b5341c..a21e848 100644
--- a/lib/presentation/medical_file/medical_file_page.dart
+++ b/lib/presentation/medical_file/medical_file_page.dart
@@ -24,6 +24,7 @@ import 'package:hmg_patient_app_new/features/my_appointments/models/resp_models/
 import 'package:hmg_patient_app_new/features/my_appointments/my_appointments_view_model.dart';
 import 'package:hmg_patient_app_new/features/prescriptions/prescriptions_view_model.dart';
 import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
+import 'package:hmg_patient_app_new/presentation/allergies/allergies_list_page.dart';
 import 'package:hmg_patient_app_new/presentation/appointments/my_appointments_page.dart';
 import 'package:hmg_patient_app_new/presentation/appointments/my_doctors_page.dart';
 import 'package:hmg_patient_app_new/presentation/appointments/widgets/ask_doctor_request_type_select.dart';
@@ -801,7 +802,14 @@ class _MedicalFilePageState extends State {
                   svgIcon: AppAssets.allergy_info_icon,
                   isLargeText: true,
                   iconSize: 36.w,
-                ),
+                ).onPress(() {
+                  medicalFileViewModel.getPatientAllergiesList();
+                  Navigator.of(context).push(
+                    CustomPageRoute(
+                      page: AllergiesListPage(),
+                    ),
+                  );
+                }),
                 MedicalFileCard(
                   label: "Vaccine Info".needTranslation,
                   textColor: AppColors.blackColor,
-- 
2.30.2


From ac15ab26f54f32391bc1b05c614f14dd5229a3a7 Mon Sep 17 00:00:00 2001
From: tahaalam 
Date: Sun, 7 Dec 2025 16:35:59 +0300
Subject: [PATCH 24/39] graph changes for high and low

---
 lib/core/api_consts.dart                      |   2 +-
 lib/features/lab/lab_view_model.dart          |  50 +++-
 .../patient_lab_orders_response_model.dart    |   3 +
 lib/presentation/lab/alphabeticScroll.dart    | 235 ++++++++++++++++++
 lib/presentation/lab/lab_order_by_test.dart   |   1 +
 lib/presentation/lab/lab_orders_page.dart     |   2 +-
 .../lab/lab_results/lab_result_details.dart   |  50 +++-
 lib/widgets/appbar/collapsing_toolbar.dart    | 205 +++++++++++++++
 lib/widgets/graph/custom_graph.dart           |  19 +-
 pubspec.yaml                                  |   2 +
 10 files changed, 548 insertions(+), 21 deletions(-)
 create mode 100644 lib/presentation/lab/alphabeticScroll.dart
 create mode 100644 lib/widgets/appbar/collapsing_toolbar.dart

diff --git a/lib/core/api_consts.dart b/lib/core/api_consts.dart
index 2be40d0..417519f 100644
--- a/lib/core/api_consts.dart
+++ b/lib/core/api_consts.dart
@@ -862,7 +862,7 @@ class ApiConsts {
 
 
   // ************     static values for Api   ****************
-  static final double appVersionID = 19.3;
+  static final double appVersionID = 50.3;
   static final int appChannelId = 3;
   static final String appIpAddress = "10.20.10.20";
   static final String appGeneralId = "Cs2020@2016\$2958";
diff --git a/lib/features/lab/lab_view_model.dart b/lib/features/lab/lab_view_model.dart
index bad4f89..27ba643 100644
--- a/lib/features/lab/lab_view_model.dart
+++ b/lib/features/lab/lab_view_model.dart
@@ -1,3 +1,4 @@
+import 'dart:collection';
 import 'dart:core';
 import 'dart:math';
 
@@ -39,6 +40,13 @@ class LabViewModel extends ChangeNotifier {
   String labSpecialResult = "";
   List labOrderTests = [];
   String patientLabResultReportPDFBase64 = "";
+  String? flagForHighReferenceRange;
+  double highRefrenceValue = double.negativeInfinity;
+  double lowRefenceValue = double.infinity;
+
+  double highTransformedReferenceValue = double.negativeInfinity;
+  double lowTransformedReferenceValue = double.infinity;
+  String? flagForLowReferenceRange;
 
   PatientLabOrdersResponseModel? currentlySelectedPatientOrder;
 
@@ -67,6 +75,8 @@ class LabViewModel extends ChangeNotifier {
   List get labSuggestions => _labSuggestionsList;
 
   Set uniqueTests = {};
+  List uniqueTestsList = [];
+  List indexedCharacterForUniqueTest = [];
 
   double maxY = 0.0;
   double maxX = double.infinity;
@@ -195,6 +205,19 @@ class LabViewModel extends ChangeNotifier {
               createdOn: item.createdOn,
               model: item))
     };
+    var sortedResult = SplayTreeSet.from(uniqueTests, (a, b) => a.description?[0].toUpperCase().compareTo(b.description?[0] ?? "") ?? -1);
+    uniqueTestsList = uniqueTests.toList();
+    uniqueTestsList.sort((a, b) {
+      return a.description!.toLowerCase().compareTo(b.description!.toLowerCase());
+    });
+    indexedCharacterForUniqueTest.clear();
+    for (var test in uniqueTestsList) {
+      String label = test.description ?? "";
+      if (label.isEmpty) continue;
+      if (indexedCharacterForUniqueTest.contains(label[0].toLowerCase())) continue;
+      indexedCharacterForUniqueTest.add(label[0].toLowerCase());
+    }
+
     for (var element in uniqueTests) {
       labOrderTests.add(element.description ?? "");
     }
@@ -313,7 +336,12 @@ class LabViewModel extends ChangeNotifier {
           var recentThree = sort(sortedResponse);
           mainLabResults = recentThree;
 
-          double counter = 1;
+
+          double highRefrenceValue = double.negativeInfinity;
+          String? flagForHighReferenceRange;
+          double lowRefenceValue = double.infinity;
+          String? flagForLowReferenceRange;
+
           recentThree.reversed.forEach((element) {
             try {
               var dateTime =
@@ -324,6 +352,14 @@ class LabViewModel extends ChangeNotifier {
                 maxY = resultValue;
                 maxX = maxY;
               }
+              if (highRefrenceValue < double.parse(element.referenceHigh ?? "0.0")) {
+                highRefrenceValue = double.parse(element.referenceHigh ?? "0.0");
+                flagForHighReferenceRange = element.calculatedResultFlag;
+              }
+              if (lowRefenceValue > double.parse(element.referenceLow ?? "0.0")) {
+                lowRefenceValue = double.parse(element.referenceLow ?? "0.0");
+                flagForLowReferenceRange = element.calculatedResultFlag;
+              }
 
               filteredGraphValues.add(DataPoint(
                   value: transformedValue,
@@ -335,9 +371,19 @@ class LabViewModel extends ChangeNotifier {
                   referenceValue: element.calculatedResultFlag ?? "",
 
               ));
-              counter++;
             } catch (e) {}
           });
+          maxY += transformValueInRange(50, "H");
+          //todo handle the value if flags are null
+          if(flagForLowReferenceRange != null &&  flagForHighReferenceRange!= null){
+            this.flagForHighReferenceRange = flagForHighReferenceRange;
+            this.flagForLowReferenceRange = flagForLowReferenceRange;
+            highTransformedReferenceValue = transformValueInRange(highRefrenceValue, flagForHighReferenceRange??"");
+            lowTransformedReferenceValue = transformValueInRange(lowRefenceValue, flagForLowReferenceRange??"");
+            this.highRefrenceValue = highRefrenceValue;
+            this.lowRefenceValue = lowRefenceValue;
+          }
+
           LabResult recentResult = recentThree.first;
           checkIfGraphShouldBeDisplayed(recentResult);
           recentResult.verifiedOn = resultDate(DateUtil.convertStringToDate(recentResult.verifiedOnDateTime!));
diff --git a/lib/features/lab/models/resp_models/patient_lab_orders_response_model.dart b/lib/features/lab/models/resp_models/patient_lab_orders_response_model.dart
index 8bef76a..1c437a4 100644
--- a/lib/features/lab/models/resp_models/patient_lab_orders_response_model.dart
+++ b/lib/features/lab/models/resp_models/patient_lab_orders_response_model.dart
@@ -250,4 +250,7 @@ class TestDetails {
     data['CreatedOn'] = this.createdOn;
     return data;
   }
+
+  @override
+  String toString() { return description??"";}
 }
diff --git a/lib/presentation/lab/alphabeticScroll.dart b/lib/presentation/lab/alphabeticScroll.dart
new file mode 100644
index 0000000..3f82ba4
--- /dev/null
+++ b/lib/presentation/lab/alphabeticScroll.dart
@@ -0,0 +1,235 @@
+import 'dart:async';
+
+import 'package:flutter/material.dart';
+import 'package:flutter_staggered_animations/flutter_staggered_animations.dart' show AnimationConfiguration, SlideAnimation, FadeInAnimation;
+import 'package:hmg_patient_app_new/core/app_export.dart';
+import 'package:hmg_patient_app_new/core/app_state.dart';
+import 'package:hmg_patient_app_new/core/dependencies.dart';
+import 'package:hmg_patient_app_new/core/utils/debouncer.dart';
+import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
+import 'package:hmg_patient_app_new/features/lab/lab_view_model.dart';
+import 'package:hmg_patient_app_new/features/lab/models/resp_models/patient_lab_orders_response_model.dart';
+import 'package:hmg_patient_app_new/theme/colors.dart';
+import 'package:hmg_patient_app_new/widgets/date_range_selector/viewmodel/date_range_view_model.dart';
+import 'package:scrollable_positioned_list/scrollable_positioned_list.dart';
+
+import 'lab_order_by_test.dart';
+
+class AlphabeticScroll extends StatefulWidget{
+  final  List alpahbetsAvailable;
+  final List details;
+  final AppState appState;
+  final LabViewModel labViewModel;
+  final DateRangeSelectorRangeViewModel rangeViewModel;
+
+  const AlphabeticScroll({super.key, required this.alpahbetsAvailable, required this.details, required this.appState, required this.labViewModel, required this.rangeViewModel});
+
+  @override
+  State createState() => _AlphabetScrollPageState();
+}
+
+class _AlphabetScrollPageState extends State {
+  final ItemScrollController itemScrollController = ItemScrollController();
+  final ScrollOffsetController scrollOffsetController = ScrollOffsetController();
+  final ItemPositionsListener itemPositionsListener = ItemPositionsListener.create();
+  final ScrollOffsetListener scrollOffsetListener = ScrollOffsetListener.create();
+  final ScrollController _scrollController = ScrollController();
+
+  Map> data = {};
+  Map density = {};
+
+  Map _offsetMap = {};
+  Map  _offsetKeys = {};
+  int _activeIndex = 0; // <-- Highlighted letter
+
+  @override
+  void initState() {
+    super.initState();
+    scheduleMicrotask((){
+      for(var char in widget.alpahbetsAvailable){
+        data[char] = widget.details.where((element)=>element.description?.toLowerCase().startsWith(char.toLowerCase()) == true).toList();
+
+      }
+      setState((){});
+
+    });
+    itemPositionsListener.itemPositions.addListener((){
+
+      final positions = itemPositionsListener.itemPositions.value;
+
+      if (positions.isEmpty) return;
+
+      // Get FIRST visible item (top-most)
+      final firstVisible = positions
+          .where((p) => p.itemTrailingEdge > 0) // visible
+          .reduce((min, p) =>
+      p.itemLeadingEdge < min.itemLeadingEdge ? p : min);
+
+      if(_activeIndex == firstVisible.index) return ;
+      setState(() {
+        _activeIndex = firstVisible.index;
+      });
+
+      print("Active index = $_activeIndex");
+    });
+  }
+
+  @override
+  void dispose() {
+    itemPositionsListener.itemPositions.removeListener((){
+
+    });
+    super.dispose();
+
+  }
+
+  void _scrollToLetter(String letter) async {
+
+    // itemScrollController.jumpTo(index:density[letter]?.toInt()??0, );
+    itemScrollController.scrollTo(
+        index: data.keys.toList().indexOf(letter).toInt()??0,
+        duration: Duration(seconds: 2),
+        curve: Curves.easeInOutCubic);
+    // final key = _offsetKeys[letter];
+    // if (key == null) return;
+    //
+    // BuildContext? ctx = key.currentContext;
+    //
+    // // Retry until built (max 100ms)
+    // int retry = 0;
+    // while (ctx == null && retry < 5) {
+    //   await Future.delayed(Duration(milliseconds: 20));
+    //   ctx = key.currentContext;
+    //   retry++;
+    // }
+    //
+    // if (ctx == null) {
+    //   print("❌ $letter still not built");
+    //   return;
+    // }
+    //
+    // final renderBox = ctx.findRenderObject() as RenderBox;
+    // final yOffset = renderBox.localToGlobal(Offset.zero).dy;
+    //
+    // _scrollController.animateTo(
+    //   _scrollController.offset + yOffset - 80,
+    //   duration: Duration(milliseconds: 400),
+    //   curve: Curves.easeInOut,
+    // );
+  }
+
+  @override
+  Widget build(BuildContext context) {
+
+    return
+
+      SizedBox(
+        width: MediaQuery.sizeOf(context).width,
+        child: Row(
+          crossAxisAlignment: CrossAxisAlignment.start, // Add this
+          children: [
+            Expanded(
+              child: Column(
+                children: [
+                  SizedBox(
+                      height: (MediaQuery.sizeOf(context).height),
+                      child: _buildList(widget.alpahbetsAvailable)
+                  ),
+                ],
+              ),
+            ),
+
+              SizedBox(
+                width: 24.w,
+                height: MediaQuery.sizeOf(context).height-(70.h+ kToolbarHeight+100.h),
+                child: Column(
+                  mainAxisSize: MainAxisSize.max, // Add this
+                  mainAxisAlignment: MainAxisAlignment.center, // Changed from center to start
+                  crossAxisAlignment: CrossAxisAlignment.center,
+                  children:List.generate(widget.alpahbetsAvailable.length, (i) {
+                    final isActive = (i == _activeIndex);
+
+                    return GestureDetector(
+                      onTap: () {
+                        setState(() => _activeIndex = i);
+                        _scrollToLetter(widget.alpahbetsAvailable[i]);
+                      },
+                      child: TweenAnimationBuilder(
+                        tween: Tween(begin: 1.0, end: isActive ? 1.8 : 1.0),
+                        duration: Duration(milliseconds: 120),
+                        curve: Curves.easeOut,
+                        builder: (_, scale, child) {
+                          return Transform.scale(
+                            scale: scale,
+                            child: Opacity(
+                              opacity: isActive ? 1.0 : 0.5,
+                              child: widget.alpahbetsAvailable[i].toUpperCase().toText14(
+                                  color: !isActive ? AppColors.greyTextColor : AppColors.primaryRedColor
+                              ),
+                            ),
+                          );
+                        },
+                      ),
+                    );
+                  }
+                  ),
+                ),
+              ),
+          ],
+        ),
+      );
+    // );
+  }
+
+  Widget _buildList(List alphabet) {
+    return ScrollablePositionedList.builder(
+      shrinkWrap: true,
+      padding: EdgeInsets.zero,
+      itemScrollController: itemScrollController,
+      scrollOffsetController: scrollOffsetController,
+      itemPositionsListener: itemPositionsListener,
+      scrollOffsetListener: scrollOffsetListener,
+      itemCount: data.length,
+      itemBuilder: (_, index) {
+        final letter = alphabet[index].toLowerCase();
+        print("the letter is $letter");
+        final items = data[letter]!;
+        return Container(
+          key: _offsetKeys[letter],
+          child: Column(
+              crossAxisAlignment: CrossAxisAlignment.start,
+            children:
+             List.generate(items.length,(itemIndex)=>
+                 AnimationConfiguration.staggeredList(
+                   position: index,
+                   duration: const Duration(milliseconds: 500),
+                   child: SlideAnimation(
+                     verticalOffset: 100.0,
+                     child: FadeInAnimation(
+                         child: LabOrderByTest(
+
+                             appState: getIt(),
+                             onTap: () {
+                               if (items[itemIndex].model != null) {
+                                 widget.rangeViewModel.flush();
+                                 widget.labViewModel.getPatientLabResult(items[itemIndex].model!, items[itemIndex].description!,
+                                     (widget.appState.isArabic() ? items[itemIndex].testDescriptionAr! : items[itemIndex].testDescriptionEn!));
+                               }
+                             },
+                             tests: items[itemIndex],
+                             index: itemIndex,
+                             isExpanded: true)),
+                   ),
+                 ))
+              // ...items.indexed((item) =>
+              //
+              //
+              //
+              // )
+
+          ),
+        );
+      },
+    );
+  }
+}
diff --git a/lib/presentation/lab/lab_order_by_test.dart b/lib/presentation/lab/lab_order_by_test.dart
index 2b791ae..bd56df6 100644
--- a/lib/presentation/lab/lab_order_by_test.dart
+++ b/lib/presentation/lab/lab_order_by_test.dart
@@ -27,6 +27,7 @@ class LabOrderByTest extends StatelessWidget {
   @override
   build(BuildContext context) {
     return AnimatedContainer(
+      key:key,
         duration: Duration(milliseconds: 300),
         curve: Curves.easeInOut,
         margin: EdgeInsets.symmetric(vertical: 8.h),
diff --git a/lib/presentation/lab/lab_orders_page.dart b/lib/presentation/lab/lab_orders_page.dart
index 4ffd979..76b502a 100644
--- a/lib/presentation/lab/lab_orders_page.dart
+++ b/lib/presentation/lab/lab_orders_page.dart
@@ -1 +1 @@
-import 'dart:async';

import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_staggered_animations/flutter_staggered_animations.dart';
import 'package:hmg_patient_app_new/core/app_state.dart';
import 'package:hmg_patient_app_new/core/dependencies.dart';
import 'package:hmg_patient_app_new/core/enums.dart';
import 'package:hmg_patient_app_new/core/utils/size_utils.dart';
import 'package:hmg_patient_app_new/core/utils/utils.dart';
import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
import 'package:hmg_patient_app_new/features/lab/models/resp_models/patient_lab_orders_response_model.dart';
import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
import 'package:hmg_patient_app_new/features/lab/lab_view_model.dart';
import 'package:hmg_patient_app_new/presentation/lab/lab_order_by_test.dart';
import 'package:hmg_patient_app_new/presentation/lab/lab_result_item_view.dart';
import 'package:hmg_patient_app_new/presentation/lab/lab_result_via_clinic/LabResultByClinic.dart';
import 'package:hmg_patient_app_new/presentation/lab/search_lab_report.dart';
import 'package:hmg_patient_app_new/theme/colors.dart';
import 'package:hmg_patient_app_new/widgets/chip/custom_chip_widget.dart';
import 'package:hmg_patient_app_new/widgets/date_range_selector/viewmodel/date_range_view_model.dart';
import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart';
import 'package:hmg_patient_app_new/widgets/transitions/fade_page.dart';
import 'package:provider/provider.dart';
import 'package:hmg_patient_app_new/widgets/custom_tab_bar.dart';
import '../../widgets/appbar/collapsing_list_view.dart';

class LabOrdersPage extends StatefulWidget {
  const LabOrdersPage({super.key});

  @override
  State createState() => _LabOrdersPageState();
}

class _LabOrdersPageState extends State {
  late LabViewModel labProvider;
  late DateRangeSelectorRangeViewModel rangeViewModel;
  late AppState _appState;
  List?> labSuggestions = [];
  int? expandedIndex;
  String? selectedFilterText = '';
  int activeIndex = 0;

  @override
  void initState() {
    scheduleMicrotask(() {
      labProvider.initLabProvider();
    });
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    labProvider = Provider.of(context, listen: false);
    rangeViewModel = Provider.of(context);
    _appState = getIt();

    return Scaffold(
        backgroundColor: AppColors.bgScaffoldColor,
        body: CollapsingListView(
          title: LocaleKeys.labResults.tr(),
          search: () async {
            final lavVM = Provider.of(context, listen: false);
            if (lavVM.isLabOrdersLoading) {
              return;
            } else {
              String? value = await Navigator.of(context).push(
                CustomPageRoute(
                  page: SearchLabResultsContent(labSuggestionsList: lavVM.labSuggestions),
                  fullScreenDialog: true,
                  direction: AxisDirection.down,
                ),
              );
              if (value != null) {
                selectedFilterText = value;
                lavVM.filterLabReports(value);
              }
            }
          },
          child: SingleChildScrollView(
            padding: EdgeInsets.all(24.h),
            physics: NeverScrollableScrollPhysics(),
            child: Consumer(
              builder: (context, model, child) {
                return Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: [
                    CustomTabBar(
                      activeTextColor: Color(0xffED1C2B),
                      activeBackgroundColor: Color(0xffED1C2B).withValues(alpha: .1),
                      tabs: [
                        CustomTabBarModel(null, "By Visit".needTranslation),
                        CustomTabBarModel(null, "By Test".needTranslation),
                        // CustomTabBarModel(null, "Completed".needTranslation),
                      ],
                      onTabChange: (index) {
                        activeIndex = index;
                        setState(() {});
                      },
                    ),
                    SizedBox(height: 8.h),
                    selectedFilterText!.isNotEmpty
                        ? CustomChipWidget(
                            chipText: selectedFilterText!,
                            chipType: ChipTypeEnum.alert,
                            isSelected: true,
                          )
                        : SizedBox(),
                    activeIndex == 0
                        ? ListView.builder(
                            shrinkWrap: true,
                            physics: NeverScrollableScrollPhysics(),
                            padding: EdgeInsets.zero,
                            itemCount: model.isLabOrdersLoading
                                ? 5
                                : model.patientLabOrders.isNotEmpty
                                    ? model.patientLabOrders.length
                                    : 1,
                            itemBuilder: (context, index) {
                              final isExpanded = expandedIndex == index;
                              return model.isLabOrdersLoading
                                  ? LabResultItemView(
                                      onTap: () {},
                                      labOrder: null,
                                      index: index,
                                      isLoading: true,
                                    )
                                  : model.patientLabOrders.isNotEmpty
                                      ? AnimationConfiguration.staggeredList(
                                          position: index,
                                          duration: const Duration(milliseconds: 500),
                                          child: SlideAnimation(
                                            verticalOffset: 100.0,
                                            child: FadeInAnimation(
                                                child: LabResultItemView(
                                                    onTap: () {
                                                      model.currentlySelectedPatientOrder =
                                                          model.patientLabOrders[
                                                              index];
                                                    labProvider.getPatientLabResultByHospital(model.patientLabOrders[
                                                                    index]);
                                                        labProvider
                                                            .getPatientSpecialResult(
                                                                model.patientLabOrders[
                                                                    index]);
                                                      Navigator.push(
                                                          context,
                                                          CustomPageRoute(
                                                          page: LabResultByClinic(labOrder: model.patientLabOrders[index]),
                                                        ));
                                                    },
                                                    labOrder: model.patientLabOrders[index],
                                                    index: index,
                                                  isExpanded: isExpanded),
                                            ),
                                          ),
                                        )
                                      : Utils.getNoDataWidget(context, noDataText: "You don't have any lab results yet.".needTranslation);
                            },
                          )
                        : ListView.builder(
                            shrinkWrap: true,
                            physics: NeverScrollableScrollPhysics(),
                            padding: EdgeInsets.zero,
                            itemCount: model.isLabOrdersLoading
                                ? 5
                                : model.uniqueTests.toList().isNotEmpty
                                    ? model.uniqueTests.toList().length
                                    : 1,
                            itemBuilder: (context, index) {
                              final isExpanded = expandedIndex == index;
                              return model.isLabOrdersLoading
                                  ? LabResultItemView(
                                      onTap: () {},
                                      labOrder: null,
                                      index: index,
                                      isLoading: true,
                                    )
                                  : model.uniqueTests.toList().isNotEmpty
                                      ? AnimationConfiguration.staggeredList(
                                          position: index,
                                          duration: const Duration(milliseconds: 500),
                                          child: SlideAnimation(
                                            verticalOffset: 100.0,
                                            child: FadeInAnimation(
                                                child: LabOrderByTest(
                                                    appState: _appState,
                                                    onTap: () {
                                                      if (model.uniqueTests.toList()[index].model != null) {
                                                        rangeViewModel.flush();
                                                        model.getPatientLabResult(model.uniqueTests.toList()[index].model!, model.uniqueTests.toList()[index].description!,
                                                            (_appState.isArabic() ? model.uniqueTests.toList()[index].testDescriptionAr! : model.uniqueTests.toList()[index].testDescriptionEn!));
                                                      }
                                                    },
                                                    tests: model.uniqueTests.toList()[index],
                                                    index: index,
                                                isExpanded: isExpanded)),
                                      ),
                                        )
                                      : Utils.getNoDataWidget(context, noDataText: "You don't have any lab results yet.".needTranslation);
                            },
                          )
                  ],
                );
              },
            ),
          ),
        ));
  }

  Color getLabOrderStatusColor(num status) {
    switch (status) {
      case 44:
        return AppColors.warningColorYellow;
      case 45:
        return AppColors.warningColorYellow;
      case 16:
        return AppColors.successColor;
      case 17:
        return AppColors.successColor;
      default:
        return AppColors.greyColor;
    }
  }

  String getLabOrderStatusText(num status) {
    switch (status) {
      case 44:
        return LocaleKeys.resultsPending.tr(context: context);
      case 45:
        return LocaleKeys.resultsPending.tr(context: context);
      case 16:
        return LocaleKeys.resultsAvailable.tr(context: context);
      case 17:
        return LocaleKeys.resultsAvailable.tr(context: context);
      default:
        return "";
    }
  }

  getLabSuggestions(LabViewModel model) {
    if (model.patientLabOrders.isEmpty) {
      return [];
    }
    return model.patientLabOrders.map((m) => m.testDetails).toList();
  }
}
\ No newline at end of file
+import 'dart:async';

import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_staggered_animations/flutter_staggered_animations.dart';
import 'package:hmg_patient_app_new/core/app_state.dart';
import 'package:hmg_patient_app_new/core/dependencies.dart';
import 'package:hmg_patient_app_new/core/enums.dart';
import 'package:hmg_patient_app_new/core/utils/size_utils.dart';
import 'package:hmg_patient_app_new/core/utils/utils.dart';
import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
import 'package:hmg_patient_app_new/features/lab/models/resp_models/patient_lab_orders_response_model.dart';
import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
import 'package:hmg_patient_app_new/features/lab/lab_view_model.dart';
import 'package:hmg_patient_app_new/presentation/lab/lab_order_by_test.dart';
import 'package:hmg_patient_app_new/presentation/lab/lab_result_item_view.dart';
import 'package:hmg_patient_app_new/presentation/lab/lab_result_via_clinic/LabResultByClinic.dart';
import 'package:hmg_patient_app_new/presentation/lab/search_lab_report.dart';
import 'package:hmg_patient_app_new/theme/colors.dart';
import 'package:hmg_patient_app_new/widgets/appbar/collapsing_toolbar.dart';
import 'package:hmg_patient_app_new/widgets/chip/custom_chip_widget.dart';
import 'package:hmg_patient_app_new/widgets/date_range_selector/viewmodel/date_range_view_model.dart';
import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart';
import 'package:hmg_patient_app_new/widgets/transitions/fade_page.dart';
import 'package:provider/provider.dart';
import 'package:hmg_patient_app_new/widgets/custom_tab_bar.dart';
import '../../widgets/appbar/collapsing_list_view.dart';
import 'alphabeticScroll.dart';

class LabOrdersPage extends StatefulWidget {
  const LabOrdersPage({super.key});

  @override
  State createState() => _LabOrdersPageState();
}

class _LabOrdersPageState extends State {
  late LabViewModel labProvider;
  late DateRangeSelectorRangeViewModel rangeViewModel;
  late AppState _appState;
  List?> labSuggestions = [];
  int? expandedIndex;
  String? selectedFilterText = '';
  int activeIndex = 0;

  @override
  void initState() {
    scheduleMicrotask(() {
      labProvider.initLabProvider();
    });
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    labProvider = Provider.of(context, listen: false);
    rangeViewModel = Provider.of(context);
    _appState = getIt();

    return Scaffold(
        backgroundColor: AppColors.bgScaffoldColor,
        body: CollapsingToolbar(
          title: LocaleKeys.labResults.tr(),
          search: () async {
            final lavVM = Provider.of(context, listen: false);
            if (lavVM.isLabOrdersLoading) {
              return;
            } else {
              String? value = await Navigator.of(context).push(
                CustomPageRoute(
                  page: SearchLabResultsContent(labSuggestionsList: lavVM.labSuggestions),
                  fullScreenDialog: true,
                  direction: AxisDirection.down,
                ),
              );
              if (value != null) {
                selectedFilterText = value;
                lavVM.filterLabReports(value);
              }
            }
          },
          child: SingleChildScrollView(
            padding: EdgeInsets.all(24.h),
            physics: NeverScrollableScrollPhysics(),
            child: Consumer(
              builder: (context, model, child) {
                return Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: [
                    CustomTabBar(
                      activeTextColor: Color(0xffED1C2B),
                      activeBackgroundColor: Color(0xffED1C2B).withValues(alpha: .1),
                      tabs: [
                        CustomTabBarModel(null, "By Visit".needTranslation),
                        CustomTabBarModel(null, "By Test".needTranslation),
                        // CustomTabBarModel(null, "Completed".needTranslation),
                      ],
                      onTabChange: (index) {
                        activeIndex = index;
                        setState(() {});
                      },
                    ),
                    SizedBox(height: 8.h),
                    selectedFilterText!.isNotEmpty
                        ? CustomChipWidget(
                            chipText: selectedFilterText!,
                            chipType: ChipTypeEnum.alert,
                            isSelected: true,
                          )
                        : SizedBox(),
                    activeIndex == 0
                        ? ListView.builder(
                            shrinkWrap: true,
                            physics: NeverScrollableScrollPhysics(),
                            padding: EdgeInsets.zero,
                            itemCount: model.isLabOrdersLoading
                                ? 5
                                : model.patientLabOrders.isNotEmpty
                                    ? model.patientLabOrders.length
                                    : 1,
                            itemBuilder: (context, index) {
                              final isExpanded = expandedIndex == index;
                              return model.isLabOrdersLoading
                                  ? LabResultItemView(
                                      onTap: () {},
                                      labOrder: null,
                                      index: index,
                                      isLoading: true,
                                    )
                                  : model.patientLabOrders.isNotEmpty
                                      ? AnimationConfiguration.staggeredList(
                                          position: index,
                                          duration: const Duration(milliseconds: 500),
                                          child: SlideAnimation(
                                            verticalOffset: 100.0,
                                            child: FadeInAnimation(
                                                child: LabResultItemView(
                                                    onTap: () {
                                                      model.currentlySelectedPatientOrder =
                                                          model.patientLabOrders[
                                                              index];
                                                    labProvider.getPatientLabResultByHospital(model.patientLabOrders[
                                                                    index]);
                                                        labProvider
                                                            .getPatientSpecialResult(
                                                                model.patientLabOrders[
                                                                    index]);
                                                      Navigator.push(
                                                          context,
                                                          CustomPageRoute(
                                                          page: LabResultByClinic(labOrder: model.patientLabOrders[index]),
                                                        ));
                                                    },
                                                    labOrder: model.patientLabOrders[index],
                                                    index: index,
                                                  isExpanded: isExpanded),
                                            ),
                                          ),
                                        )
                                      : Utils.getNoDataWidget(context, noDataText: "You don't have any lab results yet.".needTranslation);
                            },
                          )
                        // : ListView.builder(
                        //     shrinkWrap: true,
                        //     physics: NeverScrollableScrollPhysics(),
                        //     padding: EdgeInsets.zero,
                        //     itemCount: model.isLabOrdersLoading
                        //         ? 5
                        //         : model.uniqueTests.toList().isNotEmpty
                        //             ? model.uniqueTests.toList().length
                        //             : 1,
                        //     itemBuilder: (context, index) {
                        //       final isExpanded = expandedIndex == index;
                        //       return model.isLabOrdersLoading
                        //           ? LabResultItemView(
                        //               onTap: () {},
                        //               labOrder: null,
                        //               index: index,
                        //               isLoading: true,
                        //             )
                        //           : model.uniqueTests.toList().isNotEmpty
                        //               ? AnimationConfiguration.staggeredList(
                        //                   position: index,
                        //                   duration: const Duration(milliseconds: 500),
                        //                   child: SlideAnimation(
                        //                     verticalOffset: 100.0,
                        //                     child: FadeInAnimation(
                        //                         child: LabOrderByTest(
                        //                             appState: _appState,
                        //                             onTap: () {
                        //                               if (model.uniqueTests.toList()[index].model != null) {
                        //                                 rangeViewModel.flush();
                        //                                 model.getPatientLabResult(model.uniqueTests.toList()[index].model!, model.uniqueTests.toList()[index].description!,
                        //                                     (_appState.isArabic() ? model.uniqueTests.toList()[index].testDescriptionAr! : model.uniqueTests.toList()[index].testDescriptionEn!));
                        //                               }
                        //                             },
                        //                             tests: model.uniqueTests.toList()[index],
                        //                             index: index,
                        //                         isExpanded: isExpanded)),
                        //               ),
                        //                 )
                        //               : Utils.getNoDataWidget(context, noDataText: "You don't have any lab results yet.".needTranslation);
                        //     },
                        //   )
                    :AlphabeticScroll(
                      alpahbetsAvailable: model.indexedCharacterForUniqueTest,
                      details: model.uniqueTestsList,
                      labViewModel: model,
                      rangeViewModel: rangeViewModel,
                      appState: _appState,
                    )
                  ],
                );
              },
            ),
          ),
        ));
  }

  Color getLabOrderStatusColor(num status) {
    switch (status) {
      case 44:
        return AppColors.warningColorYellow;
      case 45:
        return AppColors.warningColorYellow;
      case 16:
        return AppColors.successColor;
      case 17:
        return AppColors.successColor;
      default:
        return AppColors.greyColor;
    }
  }

  String getLabOrderStatusText(num status) {
    switch (status) {
      case 44:
        return LocaleKeys.resultsPending.tr(context: context);
      case 45:
        return LocaleKeys.resultsPending.tr(context: context);
      case 16:
        return LocaleKeys.resultsAvailable.tr(context: context);
      case 17:
        return LocaleKeys.resultsAvailable.tr(context: context);
      default:
        return "";
    }
  }

  getLabSuggestions(LabViewModel model) {
    if (model.patientLabOrders.isEmpty) {
      return [];
    }
    return model.patientLabOrders.map((m) => m.testDetails).toList();
  }
}
\ No newline at end of file
diff --git a/lib/presentation/lab/lab_results/lab_result_details.dart b/lib/presentation/lab/lab_results/lab_result_details.dart
index 2330d0d..1cbad59 100644
--- a/lib/presentation/lab/lab_results/lab_result_details.dart
+++ b/lib/presentation/lab/lab_results/lab_result_details.dart
@@ -1,5 +1,6 @@
 
 import 'package:easy_localization/easy_localization.dart';
+import 'package:fl_chart/fl_chart.dart';
 import 'package:flutter/material.dart';
 import 'package:hmg_patient_app_new/core/app_assets.dart';
 import 'package:hmg_patient_app_new/core/utils/size_utils.dart';
@@ -279,11 +280,37 @@ class LabResultDetails extends StatelessWidget {
           dataPoints: labmodel.filteredGraphValues,
           makeGraphBasedOnActualValue: true,
           leftLabelReservedSize: 40,
+          showGridLines: true,
           leftLabelInterval: getInterval(labmodel),
-          maxY: (labmodel.maxY)+(getInterval(labmodel)??0)/2,
+          // maxY: (labmodel.maxY)+(getInterval(labmodel)??0)/2,
+          maxY: (labmodel.maxY),
           maxX: labmodel.filteredGraphValues.length.toDouble()-.75,
+          horizontalInterval: .1,
+          getDrawingHorizontalLine: (value){
+            print("the FLline transformed line is $value");
+            print("the labmodel.highTransformedReferenceValue is ${labmodel.highTransformedReferenceValue}");
+            print("thelabmodel.lowTransformedReferenceValue is ${labmodel.lowTransformedReferenceValue}");
+            if(value == labmodel.highRefrenceValue ||value== labmodel.highRefrenceValue) {
+              return FlLine(
+                color: AppColors.greyTextColor,
+                strokeWidth: 1,
+                // dashArray: [5, 5],
+              );
+            }
+            return FlLine(
+              color: Colors.transparent,
+              strokeWidth: 1,
+              // dashArray: [5, 5],
+            );;
+          },
           leftLabelFormatter: (value) {
-            return leftLabels(value.toStringAsFixed(2));
+            // return leftLabels(value.toStringAsFixed(2));
+            if(value == labmodel.highTransformedReferenceValue)
+              return leftLabels("High".needTranslation);
+
+            if(value== labmodel.lowTransformedReferenceValue)
+              return leftLabels("Low".needTranslation);
+
             // switch (value.toInt()) {
             //   case 10:
             //     return leftLabels("Critical Low".needTranslation);
@@ -297,7 +324,7 @@ class LabResultDetails extends StatelessWidget {
             //     return leftLabels(
             //         "Critical High".needTranslation);
             //   default:
-            //     return SizedBox.shrink();
+                return SizedBox.shrink();
             // }
           },
           graphColor:graphColor ,
@@ -347,14 +374,15 @@ class LabResultDetails extends StatelessWidget {
   }
 
   double? getInterval(LabViewModel labmodel) {
-    var maxX = labmodel.maxY;
-    if(maxX<1) return .5;
-    if(maxX >1 && maxX < 5) return 1;
-    if(maxX >5 && maxX < 10) return 5;
-    if(maxX >10 && maxX < 50) return 10;
-    if(maxX >50 && maxX < 100) return 20;
-    if(maxX >100 && maxX < 200) return 30;
-    return 50;
+    return .1;
+    // var maxX = labmodel.maxY;
+    // if(maxX<1) return .5;
+    // if(maxX >1 && maxX < 5) return 1;
+    // if(maxX >5 && maxX < 10) return 5;
+    // if(maxX >10 && maxX < 50) return 10;
+    // if(maxX >50 && maxX < 100) return 20;
+    // if(maxX >100 && maxX < 200) return 30;
+    // return 50;
   }
 
   Widget getLabDescription(BuildContext context) {
diff --git a/lib/widgets/appbar/collapsing_toolbar.dart b/lib/widgets/appbar/collapsing_toolbar.dart
new file mode 100644
index 0000000..87cf15a
--- /dev/null
+++ b/lib/widgets/appbar/collapsing_toolbar.dart
@@ -0,0 +1,205 @@
+import 'dart:ui';
+
+import 'package:flutter/material.dart';
+import 'package:flutter/services.dart';
+import 'package:hmg_patient_app_new/core/app_assets.dart';
+import 'package:hmg_patient_app_new/core/app_export.dart';
+import 'package:hmg_patient_app_new/core/app_state.dart';
+import 'package:hmg_patient_app_new/core/utils/utils.dart';
+import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
+import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
+import 'package:hmg_patient_app_new/theme/colors.dart';
+
+import '../../core/dependencies.dart';
+
+class CollapsingToolbar extends StatefulWidget {
+  final String title;
+  Widget child;
+  VoidCallback? search;
+  VoidCallback? report;
+  VoidCallback? logout;
+  VoidCallback? history;
+  VoidCallback? instructions;
+  VoidCallback? requests;
+  Widget? bottomChild;
+  Widget? trailing;
+  bool isClose;
+  bool isLeading;
+
+  CollapsingToolbar({
+    super.key,
+    required this.title,
+    required this.child,
+    this.search,
+    this.isClose = false,
+    this.bottomChild,
+    this.report,
+    this.logout,
+    this.history,
+    this.instructions,
+    this.requests,
+    this.isLeading = true,
+    this.trailing,
+  });
+
+  @override
+  State createState() => _CollapsingToolbarState();
+}
+
+class _CollapsingToolbarState extends State {
+  bool isCollapsed = false;
+
+  final ScrollController _controller = ScrollController();
+  double expandedHeight = 0;
+
+  double get maxCollapseOffset => expandedHeight - kToolbarHeight;
+  @override
+  void initState() {
+    super.initState();
+
+
+    _controller.addListener(() {
+      // If scrolling UP beyond collapsed point → force stop
+      print("the height is $maxCollapseOffset");
+      if (_controller.offset > maxCollapseOffset) {
+        _controller.jumpTo(maxCollapseOffset);
+      }
+    });
+  }
+
+  @override
+  Widget build(BuildContext context) {
+    expandedHeight = MediaQuery.of(context).size.height * 0.11.h;
+    AppState appState = getIt.get();
+    return Scaffold(
+      backgroundColor: AppColors.bgScaffoldColor,
+      body:
+          // Column(
+          //   children: [
+      NestedScrollView(
+        controller: _controller,
+            floatHeaderSlivers: true,
+                  physics: isCollapsed?NeverScrollableScrollPhysics():BouncingScrollPhysics(),
+                  headerSliverBuilder: (context, innerBoxIsScrolled) {
+          return [
+            SliverAppBar(
+              automaticallyImplyLeading: false,
+              pinned: true,
+              expandedHeight: MediaQuery.of(context).size.height * 0.11.h,
+              stretch: true,
+              systemOverlayStyle: SystemUiOverlayStyle(statusBarBrightness: Brightness.light),
+              surfaceTintColor: Colors.transparent,
+              backgroundColor: AppColors.bgScaffoldColor,
+              leading: widget.isLeading
+                  ? Transform.flip(
+                      flipX: appState.isArabic(),
+                      child: IconButton(
+                        icon: Utils.buildSvgWithAssets(icon: widget.isClose ? AppAssets.closeBottomNav : AppAssets.arrow_back, width: 32.h, height: 32.h),
+                        padding: EdgeInsets.only(left: 12),
+                        onPressed: () => Navigator.pop(context),
+                        highlightColor: Colors.transparent,
+                      ),
+                    )
+                  : SizedBox.shrink(),
+              flexibleSpace: LayoutBuilder(
+                builder: (context, constraints) {
+                  final double maxHeight = 100.h;
+                  final double minHeight = kToolbarHeight;
+                  double t = (constraints.maxHeight - minHeight) / (maxHeight - minHeight);
+                  t = t - 1;
+                  if (t < 0.7) t = 0.7;
+                  t = t.clamp(0.0, 1.0);
+
+                  final double fontSize = lerpDouble(14, 18, t)!;
+                  final double bottomPadding = lerpDouble(0, 0, t)!;
+                  final double leftPadding = lerpDouble(150, 24, t)!;
+
+                  return Stack(
+                    children: [
+                      Align(
+                        alignment: Alignment.lerp(
+                          Alignment.center,
+                          Alignment.bottomLeft,
+                          t,
+                        )!,
+                        child: Padding(
+                            padding: EdgeInsets.only(left: appState.isArabic() ? 0 : leftPadding, right: appState.isArabic() ? leftPadding : 0, bottom: bottomPadding),
+                            child: Row(
+                              spacing: 4.h,
+                              children: [
+                                Text(
+                                  widget.title,
+                                  maxLines: 1,
+                                  style: TextStyle(
+                                      fontSize: (27 - (5 * (2 - t))).f,
+                                      fontWeight: FontWeight.lerp(
+                                        FontWeight.w300,
+                                        FontWeight.w600,
+                                        t,
+                                      )!,
+                                      color: AppColors.blackColor,
+                                      letterSpacing: -0.5),
+                                ).expanded,
+                                if (widget.logout != null) actionButton(context, t, title: "Logout".needTranslation, icon: AppAssets.logout).onPress(widget.logout!),
+                                if (widget.report != null) actionButton(context, t, title: "Report".needTranslation, icon: AppAssets.report_icon).onPress(widget.report!),
+                                if (widget.history != null) actionButton(context, t, title: "History".needTranslation, icon: AppAssets.insurance_history_icon).onPress(widget.history!),
+                                if (widget.instructions != null) actionButton(context, t, title: "Instructions".needTranslation, icon: AppAssets.requests).onPress(widget.instructions!),
+                                if (widget.requests != null) actionButton(context, t, title: "Requests".needTranslation, icon: AppAssets.insurance_history_icon).onPress(widget.requests!),
+                                if (widget.search != null) Utils.buildSvgWithAssets(icon: AppAssets.search_icon).onPress(widget.search!).paddingOnly(right: 24),
+                                if (widget.trailing != null) widget.trailing!,
+                              ],
+                            )),
+                      ),
+                    ],
+                  );
+                },
+              ),
+            ),
+          ];
+                  },
+                  body: widget.child,
+                ),
+
+      //   ],
+      // ),
+    );
+  }
+
+  Widget actionButton(BuildContext context, double t, {required String title, required String icon}) {
+    return AnimatedSize(
+      duration: Duration(milliseconds: 150),
+      child: Container(
+        height: 40.h,
+        padding: EdgeInsets.all(8.w),
+        margin: EdgeInsets.only(right: 24.w),
+        decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
+          color: AppColors.secondaryLightRedColor,
+          borderRadius: 10.r,
+        ),
+        child: Row(
+          crossAxisAlignment: CrossAxisAlignment.center,
+          mainAxisAlignment: MainAxisAlignment.center,
+          mainAxisSize: MainAxisSize.min,
+          spacing: 8.h,
+          children: [
+            Utils.buildSvgWithAssets(icon: icon, iconColor: AppColors.primaryRedColor),
+            if (t == 1)
+              Text(
+                title,
+                style: context.dynamicTextStyle(
+                  color: AppColors.primaryRedColor,
+                  letterSpacing: -0.4,
+                  fontSize: (14 - (2 * (1 - t))).f,
+                  fontWeight: FontWeight.lerp(
+                    FontWeight.w300,
+                    FontWeight.w500,
+                    t,
+                  )!,
+                ),
+              ),
+          ],
+        ),
+      ),
+    );
+  }
+}
diff --git a/lib/widgets/graph/custom_graph.dart b/lib/widgets/graph/custom_graph.dart
index 7fc1f2a..afa3c55 100644
--- a/lib/widgets/graph/custom_graph.dart
+++ b/lib/widgets/graph/custom_graph.dart
@@ -56,6 +56,9 @@ class CustomGraph extends StatelessWidget {
   final FontWeight? bottomLabelFontWeight;
   final double? leftLabelInterval;
   final double? leftLabelReservedSize;
+  final bool? showGridLines;
+  final GetDrawingGridLine? getDrawingHorizontalLine;
+  final double? horizontalInterval;
 
   ///creates the left label and provide it to the chart as it will be used  by other part of the application so the label will be different for every chart
   final Widget Function(double) leftLabelFormatter;
@@ -89,13 +92,17 @@ class CustomGraph extends StatelessWidget {
     this.leftLabelReservedSize,
     this.makeGraphBasedOnActualValue =  false,
     required this.bottomLabelFormatter,
-  this.minX,
+    this.minX,
+    this.showGridLines = false,
+    this.getDrawingHorizontalLine,
+    this.horizontalInterval,
   });
 
   @override
   Widget build(BuildContext context) {
     // var maxY = 0.0;
     double interval = 20;
+    print("the maxY is $maxY");
 
     return Material(
         color: Colors.white,
@@ -190,12 +197,12 @@ class CustomGraph extends StatelessWidget {
               ),
               lineBarsData: _buildColoredLineSegments(dataPoints),
               gridData: FlGridData(
-                show: true,
+                show: showGridLines??true,
                 drawVerticalLine: false,
-                // horizontalInterval: 40,
-                checkToShowHorizontalLine: (value) =>
-                    value >= 0 && value <= 100,
-                getDrawingHorizontalLine: (value) {
+                horizontalInterval:horizontalInterval,
+                // checkToShowHorizontalLine: (value) =>
+                //     value >= 0 && value <= 100,
+                getDrawingHorizontalLine: getDrawingHorizontalLine??(value) {
                   return FlLine(
                     color: graphGridColor,
                     strokeWidth: 1,
diff --git a/pubspec.yaml b/pubspec.yaml
index 23e3ea9..79f5ca7 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -91,6 +91,8 @@ dependencies:
       url: https://github.com/fleoparra/hms-flutter-plugin.git
       path: flutter-hms-map
 
+  scrollable_positioned_list: ^0.3.8
+
 dev_dependencies:
   flutter_test:
     sdk: flutter
-- 
2.30.2


From 19365375f610de991decc1e205f12a9a3e2dce15 Mon Sep 17 00:00:00 2001
From: aamir-csol 
Date: Mon, 8 Dec 2025 10:11:13 +0300
Subject: [PATCH 25/39] medical file changes

---
 .../medical_file/medical_file_page.dart       | 223 ++++++++-----
 .../medical_file/widgets/lab_rad_card.dart    |  73 +++--
 lib/widgets/expandable_list_widget.dart       | 301 ++++++++++++++++++
 3 files changed, 478 insertions(+), 119 deletions(-)
 create mode 100644 lib/widgets/expandable_list_widget.dart

diff --git a/lib/presentation/medical_file/medical_file_page.dart b/lib/presentation/medical_file/medical_file_page.dart
index 883ca37..e1d4ce7 100644
--- a/lib/presentation/medical_file/medical_file_page.dart
+++ b/lib/presentation/medical_file/medical_file_page.dart
@@ -53,6 +53,7 @@ import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart';
 import 'package:hmg_patient_app_new/widgets/chip/app_custom_chip_widget.dart';
 import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart';
 import 'package:hmg_patient_app_new/widgets/custom_tab_bar.dart';
+import 'package:hmg_patient_app_new/widgets/expandable_list_widget.dart';
 import 'package:hmg_patient_app_new/widgets/input_widget.dart';
 import 'package:hmg_patient_app_new/widgets/loader/bottomsheet_loader.dart';
 import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart';
@@ -148,20 +149,6 @@ class _MedicalFilePageState extends State {
       child: Column(
         crossAxisAlignment: CrossAxisAlignment.start,
         children: [
-          SizedBox(height: 16.h),
-          TextInputWidget(
-            labelText: LocaleKeys.search.tr(context: context),
-            hintText: "Type any record".needTranslation,
-            controller: TextEditingController(),
-            keyboardType: TextInputType.number,
-            isEnable: true,
-            prefix: null,
-            autoFocus: false,
-            isBorderAllowed: false,
-            isAllowLeadingIcon: true,
-            padding: EdgeInsets.symmetric(vertical: 8.h, horizontal: 8.h),
-            leadingIcon: AppAssets.student_card,
-          ).paddingSymmetrical(24.w, 0.0),
           SizedBox(height: 16.h),
           Container(
             width: double.infinity,
@@ -236,8 +223,7 @@ class _MedicalFilePageState extends State {
                           iconColor: insuranceVM.isInsuranceExpired ? AppColors.primaryRedColor : AppColors.successColor,
                           textColor: insuranceVM.isInsuranceExpired ? AppColors.primaryRedColor : AppColors.successColor,
                           iconSize: 12.w,
-                          backgroundColor:
-                              insuranceVM.isInsuranceExpired ? AppColors.primaryRedColor.withOpacity(0.1) : AppColors.successColor.withOpacity(0.1),
+                          backgroundColor: insuranceVM.isInsuranceExpired ? AppColors.primaryRedColor.withOpacity(0.1) : AppColors.successColor.withOpacity(0.1),
                           labelPadding: EdgeInsetsDirectional.only(end: 8.w),
                         );
                       }),
@@ -248,27 +234,108 @@ class _MedicalFilePageState extends State {
             ),
           ).paddingSymmetrical(24.w, 0.0),
           SizedBox(height: 16.h),
-          Consumer(builder: (context, medicalFileVM, child) {
-            return Column(
-              children: [
-                CustomTabBar(
-                  activeTextColor: AppColors.primaryRedColor,
-                  activeBackgroundColor: AppColors.primaryRedColor.withValues(alpha: .1),
-                  tabs: [
-                    CustomTabBarModel(AppAssets.myFilesBottom, LocaleKeys.general.tr(context: context).needTranslation),
-                    CustomTabBarModel(AppAssets.insurance, LocaleKeys.insurance.tr(context: context)),
-                    CustomTabBarModel(AppAssets.requests, LocaleKeys.request.tr(context: context).needTranslation),
-                    CustomTabBarModel(AppAssets.more, "More".needTranslation),
-                  ],
-                  onTabChange: (index) {
-                    medicalFileVM.onTabChanged(index);
-                  },
-                ).paddingSymmetrical(24.w, 0.0),
-                SizedBox(height: 24.h),
-                getSelectedTabData(medicalFileVM.selectedTabIndex),
-              ],
-            );
-          }),
+          TextInputWidget(
+            labelText: LocaleKeys.search.tr(context: context),
+            hintText: "Type any record".needTranslation,
+            controller: TextEditingController(),
+            keyboardType: TextInputType.number,
+            isEnable: true,
+            prefix: null,
+            autoFocus: false,
+            isBorderAllowed: false,
+            isAllowLeadingIcon: true,
+            padding: EdgeInsets.symmetric(vertical: 8.h, horizontal: 8.h),
+            leadingIcon: AppAssets.student_card,
+          ).paddingSymmetrical(24.w, 0.0),
+          SizedBox(height: 16.h),
+          // Using CustomExpandableList
+          CustomExpandableList(
+            expansionMode: ExpansionMode.exactlyOne,
+            dividerColor: Color(0xFF2B353E1A),
+
+            items: [
+              ExpandableListItem(
+                title: "Medical Services".toText20(weight: FontWeight.w500),
+                children: [
+                  SizedBox(height: 10.h),
+                  getSelectedTabData(0),
+                ],
+              ),
+              ExpandableListItem(
+                  title: "Medical Reports".toText20(
+                    weight: FontWeight.w500,
+                  ),
+                  children: [
+                    SizedBox(height: 10.h),
+                    getSelectedTabData(2),
+                  ]),
+              ExpandableListItem(
+                title: "Insurance & Payments".toText20(weight: FontWeight.w500),
+                children: [
+                  SizedBox(height: 10.h),
+                  getSelectedTabData(1),
+                ],
+              ),
+              ExpandableListItem(
+                title: "Tracker & Others".toText20(weight: FontWeight.w500),
+                children: [
+                  Text("Blood Report"),
+                  SizedBox(height: 8),
+                  Text("X-Ray Report"),
+                ],
+              ),
+            ],
+            theme: ExpandableListTheme.custom(
+              defaultTrailingIcon: Utils.buildSvgWithAssets(icon: AppAssets.arrow_down, height: 22.h, width: 22.w, iconColor: AppColors.textColor),
+            ),
+          ).paddingSymmetrical(16.w, 0.0),
+
+          // ExpansionTileList(
+          //   shrinkWrap: true,
+          //   trailing: Icon(Icons.arrow_drop_down),
+          //   expansionMode: ExpansionMode.exactlyOne,
+          //   children: [
+          //     ExpansionTile(
+          //       title: "Medical Services".toText20(weight: FontWeight.w600, color: AppColors.textColor),
+          //       iconColor: Color(0xFF2E3039),
+          //       trailing: Utils.buildSvgWithAssets(icon: AppAssets.arrow_down, height: 22.h, width: 22.w),
+          //       children: [Text('Child 1')],
+          //     ),
+          //     ExpansionTile(
+          //       title: "Medical Reports".toText20(weight: FontWeight.w600, color: AppColors.textColor),
+          //       children: [Text('Child 2')],
+          //     ),
+          //     ExpansionTile(
+          //       title: "Insurance & Payments".toText20(weight: FontWeight.w600, color: AppColors.textColor),
+          //       children: [Text('Child 3')],
+          //     ),
+          //     ExpansionTile(
+          //       title: "Tracker & Others".toText20(weight: FontWeight.w600, color: AppColors.textColor),
+          //       children: [Text('Child 4')],
+          //     ),
+          //   ],
+          // ),
+          // Consumer(builder: (context, medicalFileVM, child) {
+          //   return Column(
+          //     children: [
+          //       CustomTabBar(
+          //         activeTextColor: AppColors.primaryRedColor,
+          //         activeBackgroundColor: AppColors.primaryRedColor.withValues(alpha: .1),
+          //         tabs: [
+          //           CustomTabBarModel(AppAssets.myFilesBottom, LocaleKeys.general.tr(context: context).needTranslation),
+          //           CustomTabBarModel(AppAssets.insurance, LocaleKeys.insurance.tr(context: context)),
+          //           CustomTabBarModel(AppAssets.requests, LocaleKeys.request.tr(context: context).needTranslation),
+          //           CustomTabBarModel(AppAssets.more, "More".needTranslation),
+          //         ],
+          //         onTabChange: (index) {
+          //           medicalFileVM.onTabChanged(index);
+          //         },
+          //       ).paddingSymmetrical(24.w, 0.0),
+          //       SizedBox(height: 24.h),
+          //       getSelectedTabData(medicalFileVM.selectedTabIndex),
+          //     ],
+          //   );
+          // }),
         ],
       ),
     );
@@ -324,7 +391,7 @@ class _MedicalFilePageState extends State {
             Row(
               mainAxisAlignment: MainAxisAlignment.spaceBetween,
               children: [
-                "Appointments & visits".needTranslation.toText18(isBold: true),
+                "Appointments & visits".needTranslation.toText16(weight: FontWeight.w500, letterSpacing: -0.2),
                 Row(
                   children: [
                     LocaleKeys.viewAll.tr().toText12(color: AppColors.primaryRedColor, fontWeight: FontWeight.w500),
@@ -333,7 +400,7 @@ class _MedicalFilePageState extends State {
                   ],
                 ),
               ],
-            ).paddingSymmetrical(24.w, 0.h).onPress(() {
+            ).paddingSymmetrical(0.w, 0.h).onPress(() {
               Navigator.of(context).push(
                 CustomPageRoute(
                   page: MyAppointmentsPage(),
@@ -356,8 +423,7 @@ class _MedicalFilePageState extends State {
                         ? Container(
                             padding: EdgeInsets.all(12.w),
                             width: MediaQuery.of(context).size.width,
-                            decoration:
-                                RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 12.r, hasShadow: true),
+                            decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 12.r, hasShadow: true),
                             child: Column(
                               children: [
                                 Utils.buildSvgWithAssets(icon: AppAssets.home_calendar_icon, width: 32.h, height: 32.h),
@@ -415,10 +481,10 @@ class _MedicalFilePageState extends State {
                             },
                             separatorBuilder: (BuildContext cxt, int index) => SizedBox(width: 12.h),
                           ),
-              ).paddingSymmetrical(24.w, 0);
+              ).paddingSymmetrical(0.w, 0);
             }),
             SizedBox(height: 24.h),
-            "Lab & Radiology".needTranslation.toText18(isBold: true).paddingSymmetrical(24.w, 0.h),
+            "Lab & Radiology".needTranslation.toText16(weight: FontWeight.w500, letterSpacing: -0.2),
             SizedBox(height: 16.h),
             Row(
               children: [
@@ -437,11 +503,12 @@ class _MedicalFilePageState extends State {
                     );
                   }),
                 ),
-                SizedBox(width: 16.h),
+                SizedBox(width: 8.w),
                 Expanded(
                   child: LabRadCard(
                     icon: AppAssets.radiology_icon,
-                    labelText: LocaleKeys.radiology.tr(context: context),
+                    labelText: "${LocaleKeys.radiology.tr(context: context)} Results".needTranslation,
+                    // labOrderTests: ["Complete blood count", "Creatinine", "Blood Sugar",
                     // labOrderTests: ["Chest X-ray", "Abdominal Ultrasound", "Dental X-ray"],
                     labOrderTests: [],
                     isLoading: false,
@@ -454,13 +521,13 @@ class _MedicalFilePageState extends State {
                   }),
                 ),
               ],
-            ).paddingSymmetrical(24.w, 0.h),
+            ).paddingSymmetrical(0.w, 0.h),
             SizedBox(height: 24.h),
-            "Active Medications & Prescriptions".needTranslation.toText18(isBold: true).paddingSymmetrical(24.w, 0.h),
+            "Active Medications & Prescriptions".needTranslation.toText16(weight: FontWeight.w500, letterSpacing: -0.2),
             SizedBox(height: 16.h),
             Consumer(builder: (context, prescriptionVM, child) {
               return prescriptionVM.isPrescriptionsOrdersLoading
-                  ? const CommonShimmerWidget().paddingSymmetrical(24.w, 0.h)
+                  ? const CommonShimmerWidget().paddingSymmetrical(0.w, 0.h)
                   : prescriptionVM.patientPrescriptionOrders.isNotEmpty
                       ? Container(
                           decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
@@ -503,13 +570,11 @@ class _MedicalFilePageState extends State {
                                                       spacing: 3.w,
                                                       runSpacing: 4.w,
                                                       children: [
-                                                        AppCustomChipWidget(
-                                                            labelText: prescriptionVM.patientPrescriptionOrders[index].clinicDescription!),
+                                                        AppCustomChipWidget(labelText: prescriptionVM.patientPrescriptionOrders[index].clinicDescription!),
                                                         AppCustomChipWidget(
                                                           icon: AppAssets.doctor_calendar_icon,
                                                           labelText: DateUtil.formatDateToDate(
-                                                            DateUtil.convertStringToDate(
-                                                                prescriptionVM.patientPrescriptionOrders[index].appointmentDate),
+                                                            DateUtil.convertStringToDate(prescriptionVM.patientPrescriptionOrders[index].appointmentDate),
                                                             false,
                                                           ),
                                                         ),
@@ -522,19 +587,13 @@ class _MedicalFilePageState extends State {
                                               Transform.flip(
                                                   flipX: appState.isArabic(),
                                                   child: Utils.buildSvgWithAssets(
-                                                      icon: AppAssets.forward_arrow_icon_small,
-                                                      width: 15.w,
-                                                      height: 15.h,
-                                                      fit: BoxFit.contain,
-                                                      iconColor: AppColors.textColor)),
+                                                      icon: AppAssets.forward_arrow_icon_small, width: 15.w, height: 15.h, fit: BoxFit.contain, iconColor: AppColors.textColor)),
                                             ],
                                           ).onPress(() {
                                             prescriptionVM.setPrescriptionsDetailsLoading();
                                             Navigator.of(context).push(
                                               CustomPageRoute(
-                                                page: PrescriptionDetailPage(
-                                                  isFromAppointments: false,
-                                                    prescriptionsResponseModel: prescriptionVM.patientPrescriptionOrders[index]),
+                                                page: PrescriptionDetailPage(isFromAppointments: false, prescriptionsResponseModel: prescriptionVM.patientPrescriptionOrders[index]),
                                               ),
                                             );
                                           }),
@@ -607,14 +666,14 @@ class _MedicalFilePageState extends State {
                             width: 62.w,
                             height: 62.h,
                           ),
-                        ).paddingSymmetrical(24.w, 0.h);
+                        ).paddingSymmetrical(0.w, 0.h);
             }),
             SizedBox(height: 24.h),
             //My Doctor Section
             Row(
               mainAxisAlignment: MainAxisAlignment.spaceBetween,
               children: [
-                LocaleKeys.myDoctor.tr(context: context).toText18(isBold: true),
+                LocaleKeys.myDoctor.tr(context: context).toText16(weight: FontWeight.w500, letterSpacing: -0.2),
                 Row(
                   children: [
                     LocaleKeys.viewAll.tr().toText12(color: AppColors.primaryRedColor, fontWeight: FontWeight.w500),
@@ -630,7 +689,7 @@ class _MedicalFilePageState extends State {
                   );
                 }),
               ],
-            ).paddingSymmetrical(24.w, 0.h),
+            ).paddingSymmetrical(0.w, 0.h),
             SizedBox(height: 16.h),
             Consumer(builder: (context, myAppointmentsVM, child) {
               return myAppointmentsVM.isPatientMyDoctorsLoading
@@ -644,10 +703,7 @@ class _MedicalFilePageState extends State {
                           fit: BoxFit.cover,
                         ).circle(100).toShimmer2(isShow: true, radius: 50.r),
                         SizedBox(height: 8.h),
-                        ("Dr. John Smith Smith Smith")
-                            .toString()
-                            .toText12(fontWeight: FontWeight.w500, isCenter: true, maxLine: 2)
-                            .toShimmer2(isShow: true),
+                        ("Dr. John Smith Smith Smith").toString().toText12(fontWeight: FontWeight.w500, isCenter: true, maxLine: 2).toShimmer2(isShow: true),
                       ],
                     )
                   : myAppointmentsVM.patientMyDoctorsList.isEmpty
@@ -665,7 +721,7 @@ class _MedicalFilePageState extends State {
                             width: 62.w,
                             height: 62.h,
                           ),
-                        ).paddingSymmetrical(24.w, 0.h)
+                        ).paddingSymmetrical(0.w, 0.h)
                       : SizedBox(
                           height: 100.h,
                           child: ListView.separated(
@@ -730,10 +786,10 @@ class _MedicalFilePageState extends State {
                             },
                             separatorBuilder: (BuildContext cxt, int index) => SizedBox(width: 8.h),
                           ),
-                        ).paddingSymmetrical(24.w, 0);
+                        ).paddingSymmetrical(0.w, 0);
             }),
             SizedBox(height: 24.h),
-            "Others".needTranslation.toText18(isBold: true).paddingSymmetrical(24.w, 0.h),
+            "Others".needTranslation.toText16(weight: FontWeight.w500, letterSpacing: -0.2),
             SizedBox(height: 16.h),
             GridView(
               gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
@@ -786,7 +842,7 @@ class _MedicalFilePageState extends State {
                   );
                 }),
               ],
-            ).paddingSymmetrical(24.w, 0.0),
+            ).paddingSymmetrical(0.w, 0.0),
             SizedBox(height: 24.h),
           ],
         );
@@ -801,7 +857,7 @@ class _MedicalFilePageState extends State {
                       labOrder: null,
                       index: index,
                       isLoading: true,
-                    ).paddingSymmetrical(24.w, 0.0)
+                    ).paddingSymmetrical(0.w, 0.0)
                   : insuranceVM.patientInsuranceList.isNotEmpty
                       ? PatientInsuranceCard(
                           insuranceCardDetailsModel: insuranceVM.patientInsuranceList.first,
@@ -828,14 +884,9 @@ class _MedicalFilePageState extends State {
                               text: "${LocaleKeys.updateInsurance.tr(context: context)} ${LocaleKeys.updateInsuranceSubtitle.tr(context: context)}",
                               onPressed: () {
                                 insuranceViewModel.setIsInsuranceUpdateDetailsLoading(true);
-                                insuranceViewModel.getPatientInsuranceDetailsForUpdate(appState.getAuthenticatedUser()!.patientId.toString(),
-                                    appState.getAuthenticatedUser()!.patientIdentificationNo.toString());
-                                showCommonBottomSheetWithoutHeight(context,
-                                    child: PatientInsuranceCardUpdateCard(),
-                                    callBackFunc: () {},
-                                    title: "",
-                                    isCloseButtonVisible: false,
-                                    isFullScreen: false);
+                                insuranceViewModel.getPatientInsuranceDetailsForUpdate(
+                                    appState.getAuthenticatedUser()!.patientId.toString(), appState.getAuthenticatedUser()!.patientIdentificationNo.toString());
+                                showCommonBottomSheetWithoutHeight(context, child: PatientInsuranceCardUpdateCard(), callBackFunc: () {}, title: "", isCloseButtonVisible: false, isFullScreen: false);
                               },
                               backgroundColor: AppColors.bgGreenColor.withOpacity(0.20),
                               borderColor: AppColors.bgGreenColor.withOpacity(0.0),
@@ -847,7 +898,7 @@ class _MedicalFilePageState extends State {
                               height: isFoldable ? 50.h : 40.h,
                             ).paddingOnly(left: 12.w, right: 12.w, bottom: 12.h),
                           ),
-                        ).paddingSymmetrical(24.w, 0.h);
+                        ).paddingSymmetrical(0.w, 0.h);
             }),
             SizedBox(height: 10.h),
             GridView(
@@ -902,7 +953,7 @@ class _MedicalFilePageState extends State {
                   iconSize: 36.w,
                 ),
               ],
-            ).paddingSymmetrical(24.w, 0.0),
+            ).paddingSymmetrical(0.w, 0.0),
             SizedBox(height: 16.h),
           ],
         );
@@ -915,12 +966,12 @@ class _MedicalFilePageState extends State {
                   ? PatientSickLeaveCard(
                       patientSickLeavesResponseModel: PatientSickLeavesResponseModel(),
                       isLoading: true,
-                    ).paddingSymmetrical(24.w, 0.0)
+                    ).paddingSymmetrical(0.w, 0.0)
                   : medicalFileVM.patientSickLeaveList.isNotEmpty
                       ? PatientSickLeaveCard(
                           patientSickLeavesResponseModel: medicalFileVM.patientSickLeaveList.first,
                           isLoading: false,
-                        ).paddingSymmetrical(24.w, 0.0)
+                        ).paddingSymmetrical(0.w, 0.0)
                       : Container(
                           decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
                             color: AppColors.whiteColor,
@@ -934,7 +985,7 @@ class _MedicalFilePageState extends State {
                             width: 62.w,
                             height: 62.h,
                           ),
-                        ).paddingSymmetrical(24.w, 0.h);
+                        ).paddingSymmetrical(0.w, 0.h);
             }),
             SizedBox(height: 16.h),
             GridView(
@@ -987,7 +1038,7 @@ class _MedicalFilePageState extends State {
                   );
                 }),
               ],
-            ).paddingSymmetrical(24.w, 0.0),
+            ).paddingSymmetrical(0.w, 0.0),
             SizedBox(height: 24.h),
           ],
         );
diff --git a/lib/presentation/medical_file/widgets/lab_rad_card.dart b/lib/presentation/medical_file/widgets/lab_rad_card.dart
index 1a56baf..eef73eb 100644
--- a/lib/presentation/medical_file/widgets/lab_rad_card.dart
+++ b/lib/presentation/medical_file/widgets/lab_rad_card.dart
@@ -27,55 +27,62 @@ class LabRadCard extends StatelessWidget {
   Widget build(BuildContext context) {
     AppState appState = getIt.get();
     return Container(
-      decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 12.r, hasShadow: false),
+      decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 18.r, hasShadow: false),
       child: Column(
         crossAxisAlignment: CrossAxisAlignment.start,
         children: [
           Row(
+            mainAxisAlignment: MainAxisAlignment.start,
             children: [
               Utils.buildSvgWithAssets(
                 icon: icon,
                 width: 40.w,
                 height: 40.h,
-                fit: BoxFit.contain,
+                fit: BoxFit.cover,
               ).toShimmer2(isShow: false, radius: 12.r),
               SizedBox(width: 8.w),
-              Flexible(child: labelText.toText14(isBold: true).toShimmer2(isShow: false, radius: 6.r, height: 32.h)),
-            ],
-          ),
-          SizedBox(height: 16.h),
-          labOrderTests.isNotEmpty
-              ? ListView.separated(
-                  scrollDirection: Axis.vertical,
-                  padding: EdgeInsets.zero,
-                  physics: NeverScrollableScrollPhysics(),
-                  shrinkWrap: true,
-                  itemBuilder: (cxt, index) {
-                    return labOrderTests[index]
-                        .toText12(isBold: true, maxLine: 1)
-                        .toShimmer2(isShow: false, radius: 6.r, height: 24.h, width: 120.w)
-                        .toShimmer2(isShow: isLoading);
-                  },
-                  separatorBuilder: (cxt, index) => SizedBox(height: 8.h),
-                  itemCount: 3,
-                )
-              : "You don't have any records yet".needTranslation.toText13(
-                    color: AppColors.greyTextColor, isCenter: true),
-          SizedBox(height: 16.h),
-          Row(
-            mainAxisAlignment: MainAxisAlignment.spaceBetween,
-            children: [
-              SizedBox.shrink(),
+              Flexible(
+                child: labelText.toText12(isBold: true, maxLine: 2),
+              ),
               Transform.flip(
                 flipX: appState.isArabic(),
-                child: Utils.buildSvgWithAssets(
-                        icon: AppAssets.forward_arrow_icon_small, width: 15.w, height: 15.h, fit: BoxFit.contain, iconColor: AppColors.textColor)
-                    .toShimmer2(isShow: false, radius: 12.r),
+                child: Utils.buildSvgWithAssets(icon: AppAssets.forward_arrow_icon_small, width: 10.w, height: 10.h, fit: BoxFit.contain, iconColor: AppColors.textColor),
               ),
             ],
-          )
+          ),
+          // SizedBox(height: 16.h),
+          // labOrderTests.isNotEmpty
+          //     ? ListView.separated(
+          //         scrollDirection: Axis.vertical,
+          //         padding: EdgeInsets.zero,
+          //         physics: NeverScrollableScrollPhysics(),
+          //         shrinkWrap: true,
+          //         itemBuilder: (cxt, index) {
+          //           return labOrderTests[index]
+          //               .toText12(isBold: true, maxLine: 1)
+          //               .toShimmer2(isShow: false, radius: 6.r, height: 24.h, width: 120.w)
+          //               .toShimmer2(isShow: isLoading);
+          //         },
+          //         separatorBuilder: (cxt, index) => SizedBox(height: 8.h),
+          //         itemCount: 3,
+          //       )
+          //     : "You don't have any records yet".needTranslation.toText13(
+          //           color: AppColors.greyTextColor, isCenter: true),
+          // SizedBox(height: 16.h),
+          // Row(
+          //   mainAxisAlignment: MainAxisAlignment.spaceBetween,
+          //   children: [
+          //     SizedBox.shrink(),
+          //     Transform.flip(
+          //       flipX: appState.isArabic(),
+          //       child: Utils.buildSvgWithAssets(
+          //               icon: AppAssets.forward_arrow_icon_small, width: 15.w, height: 15.h, fit: BoxFit.contain, iconColor: AppColors.textColor)
+          //           .toShimmer2(isShow: false, radius: 12.r),
+          //     ),
+          //   ],
+          // )
         ],
-      ).paddingAll(16.w),
+      ).paddingAll(12.w),
     );
   }
 }
diff --git a/lib/widgets/expandable_list_widget.dart b/lib/widgets/expandable_list_widget.dart
new file mode 100644
index 0000000..21bbdf6
--- /dev/null
+++ b/lib/widgets/expandable_list_widget.dart
@@ -0,0 +1,301 @@
+import 'package:flutter/material.dart';
+import 'package:hmg_patient_app_new/core/utils/size_utils.dart';
+import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
+
+// ==================== MAIN CUSTOM WIDGET ====================
+
+class CustomExpandableList extends StatefulWidget {
+  final List items;
+  final ExpansionMode expansionMode;
+  final EdgeInsetsGeometry? itemPadding;
+  final EdgeInsetsGeometry? contentPadding;
+  final Color? dividerColor;
+  final double dividerHeight;
+  final bool showDividers;
+  final Duration animationDuration;
+  final Curve animationCurve;
+  final ExpandableListTheme? theme;
+  final Function(int index, bool isExpanded)? onItemToggled;
+
+  const CustomExpandableList({
+    Key? key,
+    required this.items,
+    this.expansionMode = ExpansionMode.multiple,
+    this.itemPadding,
+    this.contentPadding,
+    this.dividerColor,
+    this.dividerHeight = 1.0,
+    this.showDividers = true,
+    this.animationDuration = const Duration(milliseconds: 300),
+    this.animationCurve = Curves.easeInOut,
+    this.theme,
+    this.onItemToggled,
+  }) : super(key: key);
+
+  @override
+  _CustomExpandableListState createState() => _CustomExpandableListState();
+}
+
+class _CustomExpandableListState extends State {
+  late List _expandedStates;
+
+  @override
+  void initState() {
+    super.initState();
+    _expandedStates = List.generate(
+      widget.items.length,
+          (index) => widget.items[index].initiallyExpanded,
+    );
+  }
+
+  void _toggleItem(int index) {
+    setState(() {
+      if (widget.expansionMode == ExpansionMode.exactlyOne) {
+        // Close all others, open this one
+        for (int i = 0; i < _expandedStates.length; i++) {
+          _expandedStates[i] = (i == index) ? !_expandedStates[i] : false;
+        }
+      } else if (widget.expansionMode == ExpansionMode.atMostOne) {
+        // Toggle this one, close if opening another
+        bool wasExpanded = _expandedStates[index];
+        for (int i = 0; i < _expandedStates.length; i++) {
+          if (i == index) {
+            _expandedStates[i] = !wasExpanded;
+          } else if (!wasExpanded) {
+            _expandedStates[i] = false;
+          }
+        }
+      } else {
+        // Multiple - just toggle the clicked item
+        _expandedStates[index] = !_expandedStates[index];
+      }
+    });
+
+    widget.onItemToggled?.call(index, _expandedStates[index]);
+  }
+
+  @override
+  Widget build(BuildContext context) {
+    final theme = widget.theme ?? ExpandableListTheme.defaultTheme(context);
+
+    return Column(
+      children: List.generate(widget.items.length, (index) {
+        final item = widget.items[index];
+        final isExpanded = _expandedStates[index];
+        final isLast = index == widget.items.length - 1;
+
+        return Column(
+          children: [
+            _ExpandableListItemWidget(
+              title: item.title,
+              isExpanded: isExpanded,
+              onTap: () => _toggleItem(index),
+              padding: widget.itemPadding,
+              contentPadding: widget.contentPadding,
+              theme: theme,
+              leading: item.leading,
+              trailing: item.trailing,
+              backgroundColor: item.backgroundColor,
+              expandedBackgroundColor: item.expandedBackgroundColor,
+              animationDuration: widget.animationDuration,
+              animationCurve: widget.animationCurve,
+              children: item.children,
+            ),
+            if (widget.showDividers && !isLast)
+              Divider(
+                height: widget.dividerHeight,
+                color: widget.dividerColor ?? theme.dividerColor,
+              ).paddingSymmetrical(12.h,0),
+          ],
+        );
+      }),
+    );
+  }
+}
+
+// ==================== SUPPORTING WIDGETS ====================
+
+class _ExpandableListItemWidget extends StatelessWidget {
+  final Widget title;
+  final List children;
+  final bool isExpanded;
+  final VoidCallback onTap;
+  final EdgeInsetsGeometry? padding;
+  final EdgeInsetsGeometry? contentPadding;
+  final ExpandableListTheme theme;
+  final Widget? leading;
+  final Widget? trailing;
+  final Color? backgroundColor;
+  final Color? expandedBackgroundColor;
+  final Duration animationDuration;
+  final Curve animationCurve;
+
+  const _ExpandableListItemWidget({
+    super.key,
+    required this.title,
+    required this.children,
+    required this.isExpanded,
+    required this.onTap,
+    this.padding,
+    this.contentPadding,
+    required this.theme,
+    this.leading,
+    this.trailing,
+    this.backgroundColor,
+    this.expandedBackgroundColor,
+    required this.animationDuration,
+    required this.animationCurve,
+  });
+
+  @override
+  Widget build(BuildContext context) {
+    return Container(
+      color: isExpanded
+          ? (expandedBackgroundColor ?? theme.expandedBackgroundColor)
+          : (backgroundColor ?? theme.backgroundColor),
+      child: Column(
+        children: [
+          // Header
+          InkWell(
+            onTap: onTap,
+            child: Padding(
+              padding: padding ?? theme.itemPadding,
+              child: Row(
+                children: [
+                  if (leading != null) ...[
+                    leading!,
+                    SizedBox(width: theme.leadingSpacing),
+                  ],
+                  Expanded(child: title),
+                  if (trailing != null)
+                    trailing!
+                  else
+                    AnimatedRotation(
+                      turns: isExpanded ? 0.5 : 0.0,
+                      duration: animationDuration,
+                      curve: animationCurve,
+                      child: theme.defaultTrailingIcon,
+                    ),
+                ],
+              ),
+            ),
+          ),
+
+          // Content
+          AnimatedSize(
+            duration: animationDuration,
+            curve: animationCurve,
+            child: Container(
+              constraints: BoxConstraints(
+                minHeight: isExpanded ? 0.0 : 0.0,
+                maxHeight: isExpanded ? double.infinity : 0.0,
+              ),
+              child: isExpanded
+                  ? Padding(
+                padding: contentPadding ?? theme.contentPadding,
+                child: Column(
+                  crossAxisAlignment: CrossAxisAlignment.start,
+                  children: children,
+                ),
+              )
+                  : SizedBox.shrink(),
+            ),
+          ),
+        ],
+      ),
+    );
+  }
+}
+
+// ==================== DATA MODELS ====================
+
+class ExpandableListItem {
+  final Widget title;
+  final List children;
+  final Widget? leading;
+  final Widget? trailing;
+  final bool initiallyExpanded;
+  final Color? backgroundColor;
+  final Color? expandedBackgroundColor;
+
+  const ExpandableListItem({
+    required this.title,
+    required this.children,
+    this.leading,
+    this.trailing,
+    this.initiallyExpanded = false,
+    this.backgroundColor,
+    this.expandedBackgroundColor,
+  });
+}
+
+// ==================== THEME ====================
+
+class ExpandableListTheme {
+  final Color backgroundColor;
+  final Color expandedBackgroundColor;
+  final Color dividerColor;
+  final Widget defaultTrailingIcon;
+  final EdgeInsetsGeometry itemPadding;
+  final EdgeInsetsGeometry contentPadding;
+  final double leadingSpacing;
+
+  const ExpandableListTheme({
+    required this.backgroundColor,
+    required this.expandedBackgroundColor,
+    required this.dividerColor,
+    required this.defaultTrailingIcon,
+    required this.itemPadding,
+    required this.contentPadding,
+    this.leadingSpacing = 12.0,
+  });
+
+  factory ExpandableListTheme.defaultTheme(BuildContext context) {
+    final textColor = Theme.of(context).textTheme.bodyLarge?.color ?? Colors.black;
+
+    return ExpandableListTheme(
+      backgroundColor: Colors.transparent,
+      expandedBackgroundColor: Colors.grey.shade50,
+      dividerColor: Colors.grey.shade300,
+      defaultTrailingIcon: Icon(
+        Icons.keyboard_arrow_down,
+        color: textColor,
+        size: 24,
+      ),
+      itemPadding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 12.0),
+      contentPadding: const EdgeInsets.only(left: 16.0, right: 16.0, bottom: 16.0),
+    );
+  }
+
+  factory ExpandableListTheme.custom({
+    Color? backgroundColor,
+    Color? expandedBackgroundColor,
+    Color? dividerColor,
+    Widget? defaultTrailingIcon,
+    EdgeInsetsGeometry? itemPadding,
+    EdgeInsetsGeometry? contentPadding,
+    double? leadingSpacing,
+  }) {
+    return ExpandableListTheme(
+      backgroundColor: backgroundColor ?? Colors.transparent,
+      expandedBackgroundColor: expandedBackgroundColor ?? Colors.grey.shade50,
+      dividerColor: dividerColor ?? Colors.grey.shade300,
+      defaultTrailingIcon: defaultTrailingIcon ??
+          Icon(Icons.keyboard_arrow_down, color: Colors.black, size: 24),
+      itemPadding: itemPadding ?? const EdgeInsets.symmetric(horizontal: 16.0, vertical: 12.0),
+      contentPadding: contentPadding ?? const EdgeInsets.only(left: 16.0, right: 16.0, bottom: 16.0),
+      leadingSpacing: leadingSpacing ?? 12.0,
+    );
+  }
+}
+
+// ==================== ENUMS ====================
+
+enum ExpansionMode {
+  multiple,       // Multiple items can be expanded
+  exactlyOne,     // Exactly one item expanded at a time
+  atMostOne,      // Zero or one item expanded at a time
+}
+
+
+
-- 
2.30.2


From 2173d091ed0797ad0b93c32459b954771090eeab Mon Sep 17 00:00:00 2001
From: faizatflutter 
Date: Mon, 8 Dec 2025 10:27:57 +0300
Subject: [PATCH 26/39] Added symptoms selector

---
 .../data/symptoms_mapping_data.dart           | 323 ++++++++++++++++++
 .../models/symptom_model.dart                 |  55 +++
 .../organ_selector_screen.dart                |   8 +-
 .../symptoms_checker_view_model.dart          |  86 +++++
 .../symptoms_selector_screen.dart             | 224 ++++++++++++
 ...rogress_screen.dart => triage_screen.dart} |  26 +-
 .../widgets/interactive_body_widget.dart      |  16 +-
 .../widgets/organ_tooltip_widget.dart         |   8 +-
 lib/routes/app_routes.dart                    |   9 +-
 lib/widgets/chip/custom_chip_widget.dart      |   7 +-
 lib/widgets/chip/custom_selectable_chip.dart  |  55 +++
 11 files changed, 783 insertions(+), 34 deletions(-)
 create mode 100644 lib/features/symptoms_checker/data/symptoms_mapping_data.dart
 create mode 100644 lib/features/symptoms_checker/models/symptom_model.dart
 create mode 100644 lib/presentation/symptoms_checker/symptoms_selector_screen.dart
 rename lib/presentation/symptoms_checker/{triage_progress_screen.dart => triage_screen.dart} (94%)
 create mode 100644 lib/widgets/chip/custom_selectable_chip.dart

diff --git a/lib/features/symptoms_checker/data/symptoms_mapping_data.dart b/lib/features/symptoms_checker/data/symptoms_mapping_data.dart
new file mode 100644
index 0000000..65aa152
--- /dev/null
+++ b/lib/features/symptoms_checker/data/symptoms_mapping_data.dart
@@ -0,0 +1,323 @@
+import 'package:hmg_patient_app_new/features/symptoms_checker/models/symptom_model.dart';
+
+class SymptomsMappingData {
+  // Map of organ IDs to their possible symptoms
+  static final Map> organSymptomsMap = {
+    // HEAD & FACE
+    'head': [
+      SymptomModel(id: 'head_s1', name: 'Headache', organId: 'head'),
+      SymptomModel(id: 'head_s2', name: 'Dizziness', organId: 'head'),
+      SymptomModel(id: 'head_s3', name: 'Migraine', organId: 'head'),
+      SymptomModel(id: 'head_s4', name: 'Head pressure', organId: 'head'),
+      SymptomModel(id: 'head_s5', name: 'Vertigo', organId: 'head'),
+      SymptomModel(id: 'head_s6', name: 'Confusion', organId: 'head'),
+      SymptomModel(id: 'head_s7', name: 'Memory problems', organId: 'head'),
+    ],
+    'left_eye': [
+      SymptomModel(id: 'left_eye_s1', name: 'Blurred vision', organId: 'left_eye'),
+      SymptomModel(id: 'left_eye_s2', name: 'Eye pain', organId: 'left_eye'),
+      SymptomModel(id: 'left_eye_s3', name: 'Redness', organId: 'left_eye'),
+      SymptomModel(id: 'left_eye_s4', name: 'Itching', organId: 'left_eye'),
+      SymptomModel(id: 'left_eye_s5', name: 'Watering', organId: 'left_eye'),
+      SymptomModel(id: 'left_eye_s6', name: 'Sensitivity to light', organId: 'left_eye'),
+      SymptomModel(id: 'left_eye_s7', name: 'Double vision', organId: 'left_eye'),
+    ],
+    'right_eye': [
+      SymptomModel(id: 'right_eye_s1', name: 'Blurred vision', organId: 'right_eye'),
+      SymptomModel(id: 'right_eye_s2', name: 'Eye pain', organId: 'right_eye'),
+      SymptomModel(id: 'right_eye_s3', name: 'Redness', organId: 'right_eye'),
+      SymptomModel(id: 'right_eye_s4', name: 'Itching', organId: 'right_eye'),
+      SymptomModel(id: 'right_eye_s5', name: 'Watering', organId: 'right_eye'),
+      SymptomModel(id: 'right_eye_s6', name: 'Sensitivity to light', organId: 'right_eye'),
+      SymptomModel(id: 'right_eye_s7', name: 'Double vision', organId: 'right_eye'),
+    ],
+    'nose_mouth': [
+      SymptomModel(id: 'nose_mouth_s1', name: 'Nasal congestion', organId: 'nose_mouth'),
+      SymptomModel(id: 'nose_mouth_s2', name: 'Runny nose', organId: 'nose_mouth'),
+      SymptomModel(id: 'nose_mouth_s3', name: 'Nosebleed', organId: 'nose_mouth'),
+      SymptomModel(id: 'nose_mouth_s4', name: 'Loss of smell', organId: 'nose_mouth'),
+      SymptomModel(id: 'nose_mouth_s5', name: 'Mouth pain', organId: 'nose_mouth'),
+      SymptomModel(id: 'nose_mouth_s6', name: 'Dry mouth', organId: 'nose_mouth'),
+      SymptomModel(id: 'nose_mouth_s7', name: 'Difficulty swallowing', organId: 'nose_mouth'),
+    ],
+
+    // NECK & THROAT
+    'throat': [
+      SymptomModel(id: 'throat_s1', name: 'Sore throat', organId: 'throat'),
+      SymptomModel(id: 'throat_s2', name: 'Difficulty swallowing', organId: 'throat'),
+      SymptomModel(id: 'throat_s3', name: 'Hoarseness', organId: 'throat'),
+      SymptomModel(id: 'throat_s4', name: 'Throat pain', organId: 'throat'),
+      SymptomModel(id: 'throat_s5', name: 'Swollen glands', organId: 'throat'),
+      SymptomModel(id: 'throat_s6', name: 'Cough', organId: 'throat'),
+      SymptomModel(id: 'throat_s7', name: 'Difficulty breathing', organId: 'throat'),
+    ],
+
+    // SHOULDERS
+    'left_shoulder': [
+      SymptomModel(id: 'left_shoulder_s1', name: 'Shoulder pain', organId: 'left_shoulder'),
+      SymptomModel(id: 'left_shoulder_s2', name: 'Stiffness', organId: 'left_shoulder'),
+      SymptomModel(id: 'left_shoulder_s3', name: 'Limited mobility', organId: 'left_shoulder'),
+      SymptomModel(id: 'left_shoulder_s4', name: 'Swelling', organId: 'left_shoulder'),
+      SymptomModel(id: 'left_shoulder_s5', name: 'Weakness', organId: 'left_shoulder'),
+      SymptomModel(id: 'left_shoulder_s6', name: 'Clicking sound', organId: 'left_shoulder'),
+    ],
+    'right_shoulder': [
+      SymptomModel(id: 'right_shoulder_s1', name: 'Shoulder pain', organId: 'right_shoulder'),
+      SymptomModel(id: 'right_shoulder_s2', name: 'Stiffness', organId: 'right_shoulder'),
+      SymptomModel(id: 'right_shoulder_s3', name: 'Limited mobility', organId: 'right_shoulder'),
+      SymptomModel(id: 'right_shoulder_s4', name: 'Swelling', organId: 'right_shoulder'),
+      SymptomModel(id: 'right_shoulder_s5', name: 'Weakness', organId: 'right_shoulder'),
+      SymptomModel(id: 'right_shoulder_s6', name: 'Clicking sound', organId: 'right_shoulder'),
+    ],
+
+    // CHEST
+    'left_chest': [
+      SymptomModel(id: 'left_chest_s1', name: 'Chest pain', organId: 'left_chest'),
+      SymptomModel(id: 'left_chest_s2', name: 'Tightness', organId: 'left_chest'),
+      SymptomModel(id: 'left_chest_s3', name: 'Pressure', organId: 'left_chest'),
+      SymptomModel(id: 'left_chest_s4', name: 'Sharp pain', organId: 'left_chest'),
+      SymptomModel(id: 'left_chest_s5', name: 'Burning sensation', organId: 'left_chest'),
+      SymptomModel(id: 'left_chest_s6', name: 'Palpitations', organId: 'left_chest'),
+      SymptomModel(id: 'left_chest_s7', name: 'Shortness of breath', organId: 'left_chest'),
+    ],
+    'center_chest': [
+      SymptomModel(id: 'center_chest_s1', name: 'Chest pain', organId: 'center_chest'),
+      SymptomModel(id: 'center_chest_s2', name: 'Tightness', organId: 'center_chest'),
+      SymptomModel(id: 'center_chest_s3', name: 'Pressure', organId: 'center_chest'),
+      SymptomModel(id: 'center_chest_s4', name: 'Sharp pain', organId: 'center_chest'),
+      SymptomModel(id: 'center_chest_s5', name: 'Burning sensation', organId: 'center_chest'),
+      SymptomModel(id: 'center_chest_s6', name: 'Heartburn', organId: 'center_chest'),
+      SymptomModel(id: 'center_chest_s7', name: 'Difficulty breathing', organId: 'center_chest'),
+      SymptomModel(id: 'center_chest_s8', name: 'Palpitations', organId: 'center_chest'),
+    ],
+    'right_chest': [
+      SymptomModel(id: 'right_chest_s1', name: 'Chest pain', organId: 'right_chest'),
+      SymptomModel(id: 'right_chest_s2', name: 'Tightness', organId: 'right_chest'),
+      SymptomModel(id: 'right_chest_s3', name: 'Pressure', organId: 'right_chest'),
+      SymptomModel(id: 'right_chest_s4', name: 'Sharp pain', organId: 'right_chest'),
+      SymptomModel(id: 'right_chest_s5', name: 'Burning sensation', organId: 'right_chest'),
+      SymptomModel(id: 'right_chest_s6', name: 'Shortness of breath', organId: 'right_chest'),
+    ],
+
+    // RIBS
+    'left_ribs': [
+      SymptomModel(id: 'left_ribs_s1', name: 'Rib pain', organId: 'left_ribs'),
+      SymptomModel(id: 'left_ribs_s2', name: 'Pain when breathing', organId: 'left_ribs'),
+      SymptomModel(id: 'left_ribs_s3', name: 'Tenderness', organId: 'left_ribs'),
+      SymptomModel(id: 'left_ribs_s4', name: 'Bruising', organId: 'left_ribs'),
+      SymptomModel(id: 'left_ribs_s5', name: 'Difficulty moving', organId: 'left_ribs'),
+    ],
+    'right_ribs': [
+      SymptomModel(id: 'right_ribs_s1', name: 'Rib pain', organId: 'right_ribs'),
+      SymptomModel(id: 'right_ribs_s2', name: 'Pain when breathing', organId: 'right_ribs'),
+      SymptomModel(id: 'right_ribs_s3', name: 'Tenderness', organId: 'right_ribs'),
+      SymptomModel(id: 'right_ribs_s4', name: 'Bruising', organId: 'right_ribs'),
+      SymptomModel(id: 'right_ribs_s5', name: 'Difficulty moving', organId: 'right_ribs'),
+    ],
+
+    // ABDOMEN
+    'upper_abdomen': [
+      SymptomModel(id: 'upper_abdomen_s1', name: 'Abdominal pain', organId: 'upper_abdomen'),
+      SymptomModel(id: 'upper_abdomen_s2', name: 'Bloating', organId: 'upper_abdomen'),
+      SymptomModel(id: 'upper_abdomen_s3', name: 'Nausea', organId: 'upper_abdomen'),
+      SymptomModel(id: 'upper_abdomen_s4', name: 'Vomiting', organId: 'upper_abdomen'),
+      SymptomModel(id: 'upper_abdomen_s5', name: 'Heartburn', organId: 'upper_abdomen'),
+      SymptomModel(id: 'upper_abdomen_s6', name: 'Loss of appetite', organId: 'upper_abdomen'),
+      SymptomModel(id: 'upper_abdomen_s7', name: 'Indigestion', organId: 'upper_abdomen'),
+    ],
+    'navel': [
+      SymptomModel(id: 'navel_s1', name: 'Abdominal pain', organId: 'navel'),
+      SymptomModel(id: 'navel_s2', name: 'Cramping', organId: 'navel'),
+      SymptomModel(id: 'navel_s3', name: 'Bloating', organId: 'navel'),
+      SymptomModel(id: 'navel_s4', name: 'Gas', organId: 'navel'),
+      SymptomModel(id: 'navel_s5', name: 'Tenderness', organId: 'navel'),
+    ],
+    'lower_abdomen': [
+      SymptomModel(id: 'lower_abdomen_s1', name: 'Lower abdominal pain', organId: 'lower_abdomen'),
+      SymptomModel(id: 'lower_abdomen_s2', name: 'Cramping', organId: 'lower_abdomen'),
+      SymptomModel(id: 'lower_abdomen_s3', name: 'Bloating', organId: 'lower_abdomen'),
+      SymptomModel(id: 'lower_abdomen_s4', name: 'Constipation', organId: 'lower_abdomen'),
+      SymptomModel(id: 'lower_abdomen_s5', name: 'Diarrhea', organId: 'lower_abdomen'),
+      SymptomModel(id: 'lower_abdomen_s6', name: 'Urinary discomfort', organId: 'lower_abdomen'),
+    ],
+
+    // PELVIS & GROIN
+    'left_groin': [
+      SymptomModel(id: 'left_groin_s1', name: 'Groin pain', organId: 'left_groin'),
+      SymptomModel(id: 'left_groin_s2', name: 'Swelling', organId: 'left_groin'),
+      SymptomModel(id: 'left_groin_s3', name: 'Tenderness', organId: 'left_groin'),
+      SymptomModel(id: 'left_groin_s4', name: 'Limited mobility', organId: 'left_groin'),
+    ],
+    'right_groin': [
+      SymptomModel(id: 'right_groin_s1', name: 'Groin pain', organId: 'right_groin'),
+      SymptomModel(id: 'right_groin_s2', name: 'Swelling', organId: 'right_groin'),
+      SymptomModel(id: 'right_groin_s3', name: 'Tenderness', organId: 'right_groin'),
+      SymptomModel(id: 'right_groin_s4', name: 'Limited mobility', organId: 'right_groin'),
+    ],
+
+    // ARMS - LEFT
+    'left_elbow': [
+      SymptomModel(id: 'left_elbow_s1', name: 'Elbow pain', organId: 'left_elbow'),
+      SymptomModel(id: 'left_elbow_s2', name: 'Stiffness', organId: 'left_elbow'),
+      SymptomModel(id: 'left_elbow_s3', name: 'Swelling', organId: 'left_elbow'),
+      SymptomModel(id: 'left_elbow_s4', name: 'Limited mobility', organId: 'left_elbow'),
+      SymptomModel(id: 'left_elbow_s5', name: 'Tingling', organId: 'left_elbow'),
+    ],
+    'left_forearm': [
+      SymptomModel(id: 'left_forearm_s1', name: 'Forearm pain', organId: 'left_forearm'),
+      SymptomModel(id: 'left_forearm_s2', name: 'Weakness', organId: 'left_forearm'),
+      SymptomModel(id: 'left_forearm_s3', name: 'Numbness', organId: 'left_forearm'),
+      SymptomModel(id: 'left_forearm_s4', name: 'Tingling', organId: 'left_forearm'),
+      SymptomModel(id: 'left_forearm_s5', name: 'Swelling', organId: 'left_forearm'),
+    ],
+    'left_wrist': [
+      SymptomModel(id: 'left_wrist_s1', name: 'Wrist pain', organId: 'left_wrist'),
+      SymptomModel(id: 'left_wrist_s2', name: 'Stiffness', organId: 'left_wrist'),
+      SymptomModel(id: 'left_wrist_s3', name: 'Swelling', organId: 'left_wrist'),
+      SymptomModel(id: 'left_wrist_s4', name: 'Limited mobility', organId: 'left_wrist'),
+      SymptomModel(id: 'left_wrist_s5', name: 'Tingling', organId: 'left_wrist'),
+      SymptomModel(id: 'left_wrist_s6', name: 'Numbness', organId: 'left_wrist'),
+    ],
+
+    // ARMS - RIGHT
+    'right_elbow': [
+      SymptomModel(id: 'right_elbow_s1', name: 'Elbow pain', organId: 'right_elbow'),
+      SymptomModel(id: 'right_elbow_s2', name: 'Stiffness', organId: 'right_elbow'),
+      SymptomModel(id: 'right_elbow_s3', name: 'Swelling', organId: 'right_elbow'),
+      SymptomModel(id: 'right_elbow_s4', name: 'Limited mobility', organId: 'right_elbow'),
+      SymptomModel(id: 'right_elbow_s5', name: 'Tingling', organId: 'right_elbow'),
+    ],
+    'right_forearm': [
+      SymptomModel(id: 'right_forearm_s1', name: 'Forearm pain', organId: 'right_forearm'),
+      SymptomModel(id: 'right_forearm_s2', name: 'Weakness', organId: 'right_forearm'),
+      SymptomModel(id: 'right_forearm_s3', name: 'Numbness', organId: 'right_forearm'),
+      SymptomModel(id: 'right_forearm_s4', name: 'Tingling', organId: 'right_forearm'),
+      SymptomModel(id: 'right_forearm_s5', name: 'Swelling', organId: 'right_forearm'),
+    ],
+    'right_wrist': [
+      SymptomModel(id: 'right_wrist_s1', name: 'Wrist pain', organId: 'right_wrist'),
+      SymptomModel(id: 'right_wrist_s2', name: 'Stiffness', organId: 'right_wrist'),
+      SymptomModel(id: 'right_wrist_s3', name: 'Swelling', organId: 'right_wrist'),
+      SymptomModel(id: 'right_wrist_s4', name: 'Limited mobility', organId: 'right_wrist'),
+      SymptomModel(id: 'right_wrist_s5', name: 'Tingling', organId: 'right_wrist'),
+      SymptomModel(id: 'right_wrist_s6', name: 'Numbness', organId: 'right_wrist'),
+    ],
+
+    // LEGS - LEFT
+    'left_thigh': [
+      SymptomModel(id: 'left_thigh_s1', name: 'Thigh pain', organId: 'left_thigh'),
+      SymptomModel(id: 'left_thigh_s2', name: 'Muscle cramps', organId: 'left_thigh'),
+      SymptomModel(id: 'left_thigh_s3', name: 'Weakness', organId: 'left_thigh'),
+      SymptomModel(id: 'left_thigh_s4', name: 'Numbness', organId: 'left_thigh'),
+      SymptomModel(id: 'left_thigh_s5', name: 'Swelling', organId: 'left_thigh'),
+    ],
+    'left_knee': [
+      SymptomModel(id: 'left_knee_s1', name: 'Knee pain', organId: 'left_knee'),
+      SymptomModel(id: 'left_knee_s2', name: 'Stiffness', organId: 'left_knee'),
+      SymptomModel(id: 'left_knee_s3', name: 'Swelling', organId: 'left_knee'),
+      SymptomModel(id: 'left_knee_s4', name: 'Limited mobility', organId: 'left_knee'),
+      SymptomModel(id: 'left_knee_s5', name: 'Clicking sound', organId: 'left_knee'),
+      SymptomModel(id: 'left_knee_s6', name: 'Instability', organId: 'left_knee'),
+    ],
+    'left_shin': [
+      SymptomModel(id: 'left_shin_s1', name: 'Shin pain', organId: 'left_shin'),
+      SymptomModel(id: 'left_shin_s2', name: 'Tenderness', organId: 'left_shin'),
+      SymptomModel(id: 'left_shin_s3', name: 'Swelling', organId: 'left_shin'),
+      SymptomModel(id: 'left_shin_s4', name: 'Numbness', organId: 'left_shin'),
+    ],
+    'left_ankle': [
+      SymptomModel(id: 'left_ankle_s1', name: 'Ankle pain', organId: 'left_ankle'),
+      SymptomModel(id: 'left_ankle_s2', name: 'Stiffness', organId: 'left_ankle'),
+      SymptomModel(id: 'left_ankle_s3', name: 'Swelling', organId: 'left_ankle'),
+      SymptomModel(id: 'left_ankle_s4', name: 'Limited mobility', organId: 'left_ankle'),
+      SymptomModel(id: 'left_ankle_s5', name: 'Instability', organId: 'left_ankle'),
+    ],
+
+    // LEGS - RIGHT
+    'right_thigh': [
+      SymptomModel(id: 'right_thigh_s1', name: 'Thigh pain', organId: 'right_thigh'),
+      SymptomModel(id: 'right_thigh_s2', name: 'Muscle cramps', organId: 'right_thigh'),
+      SymptomModel(id: 'right_thigh_s3', name: 'Weakness', organId: 'right_thigh'),
+      SymptomModel(id: 'right_thigh_s4', name: 'Numbness', organId: 'right_thigh'),
+      SymptomModel(id: 'right_thigh_s5', name: 'Swelling', organId: 'right_thigh'),
+    ],
+    'right_knee': [
+      SymptomModel(id: 'right_knee_s1', name: 'Knee pain', organId: 'right_knee'),
+      SymptomModel(id: 'right_knee_s2', name: 'Stiffness', organId: 'right_knee'),
+      SymptomModel(id: 'right_knee_s3', name: 'Swelling', organId: 'right_knee'),
+      SymptomModel(id: 'right_knee_s4', name: 'Limited mobility', organId: 'right_knee'),
+      SymptomModel(id: 'right_knee_s5', name: 'Clicking sound', organId: 'right_knee'),
+      SymptomModel(id: 'right_knee_s6', name: 'Instability', organId: 'right_knee'),
+    ],
+    'right_shin': [
+      SymptomModel(id: 'right_shin_s1', name: 'Shin pain', organId: 'right_shin'),
+      SymptomModel(id: 'right_shin_s2', name: 'Tenderness', organId: 'right_shin'),
+      SymptomModel(id: 'right_shin_s3', name: 'Swelling', organId: 'right_shin'),
+      SymptomModel(id: 'right_shin_s4', name: 'Numbness', organId: 'right_shin'),
+    ],
+    'right_ankle': [
+      SymptomModel(id: 'right_ankle_s1', name: 'Ankle pain', organId: 'right_ankle'),
+      SymptomModel(id: 'right_ankle_s2', name: 'Stiffness', organId: 'right_ankle'),
+      SymptomModel(id: 'right_ankle_s3', name: 'Swelling', organId: 'right_ankle'),
+      SymptomModel(id: 'right_ankle_s4', name: 'Limited mobility', organId: 'right_ankle'),
+      SymptomModel(id: 'right_ankle_s5', name: 'Instability', organId: 'right_ankle'),
+    ],
+
+    // BACK VIEW ORGANS
+    'back_head': [
+      SymptomModel(id: 'back_head_s1', name: 'Back of head pain', organId: 'back_head'),
+      SymptomModel(id: 'back_head_s2', name: 'Neck stiffness', organId: 'back_head'),
+      SymptomModel(id: 'back_head_s3', name: 'Tension headache', organId: 'back_head'),
+    ],
+    'neck': [
+      SymptomModel(id: 'neck_s1', name: 'Neck pain', organId: 'neck'),
+      SymptomModel(id: 'neck_s2', name: 'Stiffness', organId: 'neck'),
+      SymptomModel(id: 'neck_s3', name: 'Limited mobility', organId: 'neck'),
+      SymptomModel(id: 'neck_s4', name: 'Muscle spasm', organId: 'neck'),
+      SymptomModel(id: 'neck_s5', name: 'Tingling', organId: 'neck'),
+    ],
+    'upper_back': [
+      SymptomModel(id: 'upper_back_s1', name: 'Upper back pain', organId: 'upper_back'),
+      SymptomModel(id: 'upper_back_s2', name: 'Stiffness', organId: 'upper_back'),
+      SymptomModel(id: 'upper_back_s3', name: 'Muscle tension', organId: 'upper_back'),
+      SymptomModel(id: 'upper_back_s4', name: 'Sharp pain', organId: 'upper_back'),
+      SymptomModel(id: 'upper_back_s5', name: 'Difficulty breathing', organId: 'upper_back'),
+    ],
+    'mid_back': [
+      SymptomModel(id: 'mid_back_s1', name: 'Mid back pain', organId: 'mid_back'),
+      SymptomModel(id: 'mid_back_s2', name: 'Stiffness', organId: 'mid_back'),
+      SymptomModel(id: 'mid_back_s3', name: 'Muscle spasm', organId: 'mid_back'),
+      SymptomModel(id: 'mid_back_s4', name: 'Tenderness', organId: 'mid_back'),
+    ],
+    'lower_back': [
+      SymptomModel(id: 'lower_back_s1', name: 'Lower back pain', organId: 'lower_back'),
+      SymptomModel(id: 'lower_back_s2', name: 'Stiffness', organId: 'lower_back'),
+      SymptomModel(id: 'lower_back_s3', name: 'Sharp pain', organId: 'lower_back'),
+      SymptomModel(id: 'lower_back_s4', name: 'Sciatica', organId: 'lower_back'),
+      SymptomModel(id: 'lower_back_s5', name: 'Limited mobility', organId: 'lower_back'),
+      SymptomModel(id: 'lower_back_s6', name: 'Muscle spasm', organId: 'lower_back'),
+    ],
+  };
+
+  /// Get symptoms for a specific organ ID
+  static List getSymptomsForOrgan(String organId) {
+    return organSymptomsMap[organId] ?? [];
+  }
+
+  /// Get symptoms for multiple organ IDs
+  static Map> getSymptomsForOrgans(List organIds) {
+    Map> result = {};
+    for (String organId in organIds) {
+      List symptoms = getSymptomsForOrgan(organId);
+      if (symptoms.isNotEmpty) {
+        result[organId] = symptoms;
+      }
+    }
+    return result;
+  }
+
+  /// Check if an organ has symptoms mapped
+  static bool hasSymptoms(String organId) {
+    return organSymptomsMap.containsKey(organId) && organSymptomsMap[organId]!.isNotEmpty;
+  }
+}
diff --git a/lib/features/symptoms_checker/models/symptom_model.dart b/lib/features/symptoms_checker/models/symptom_model.dart
new file mode 100644
index 0000000..d35b11a
--- /dev/null
+++ b/lib/features/symptoms_checker/models/symptom_model.dart
@@ -0,0 +1,55 @@
+class SymptomModel {
+  final String id;
+  final String name;
+  final String organId;
+
+  const SymptomModel({
+    required this.id,
+    required this.name,
+    required this.organId,
+  });
+
+  SymptomModel copyWith({
+    String? id,
+    String? name,
+    String? organId,
+  }) {
+    return SymptomModel(
+      id: id ?? this.id,
+      name: name ?? this.name,
+      organId: organId ?? this.organId,
+    );
+  }
+}
+
+class OrganSymptomsGroup {
+  final String organId;
+  final String organName;
+  final List symptoms;
+  final Set selectedSymptomIds;
+
+  OrganSymptomsGroup({
+    required this.organId,
+    required this.organName,
+    required this.symptoms,
+    Set? selectedSymptomIds,
+  }) : selectedSymptomIds = selectedSymptomIds ?? {};
+
+  bool get hasSelectedSymptoms => selectedSymptomIds.isNotEmpty;
+
+  int get selectedCount => selectedSymptomIds.length;
+
+  OrganSymptomsGroup copyWith({
+    String? organId,
+    String? organName,
+    List? symptoms,
+    Set? selectedSymptomIds,
+  }) {
+    return OrganSymptomsGroup(
+      organId: organId ?? this.organId,
+      organName: organName ?? this.organName,
+      symptoms: symptoms ?? this.symptoms,
+      selectedSymptomIds: selectedSymptomIds ?? this.selectedSymptomIds,
+    );
+  }
+}
diff --git a/lib/presentation/symptoms_checker/organ_selector_screen.dart b/lib/presentation/symptoms_checker/organ_selector_screen.dart
index 738adff..e47032c 100644
--- a/lib/presentation/symptoms_checker/organ_selector_screen.dart
+++ b/lib/presentation/symptoms_checker/organ_selector_screen.dart
@@ -42,13 +42,7 @@ class _OrganSelectorPageState extends State {
       return;
     }
 
-    ScaffoldMessenger.of(context).showSnackBar(
-      SnackBar(
-        content: Text('Selected organs:\n\n ${viewModel.getSelectedOrganIds()}'),
-        backgroundColor: AppColors.successColor,
-      ),
-    );
-    context.navigateWithName(AppRoutes.triageProgressScreen);
+    context.navigateWithName(AppRoutes.symptomsCheckerScreen);
   }
 
   @override
diff --git a/lib/presentation/symptoms_checker/symptoms_checker_view_model.dart b/lib/presentation/symptoms_checker/symptoms_checker_view_model.dart
index e162b67..9d42dc7 100644
--- a/lib/presentation/symptoms_checker/symptoms_checker_view_model.dart
+++ b/lib/presentation/symptoms_checker/symptoms_checker_view_model.dart
@@ -2,7 +2,9 @@ import 'dart:async';
 
 import 'package:flutter/cupertino.dart';
 import 'package:hmg_patient_app_new/core/enums.dart';
+import 'package:hmg_patient_app_new/features/symptoms_checker/data/symptoms_mapping_data.dart';
 import 'package:hmg_patient_app_new/features/symptoms_checker/models/organ_model.dart';
+import 'package:hmg_patient_app_new/features/symptoms_checker/models/symptom_model.dart';
 import 'package:hmg_patient_app_new/features/symptoms_checker/organ_mapping_data.dart';
 
 class SymptomsCheckerViewModel extends ChangeNotifier {
@@ -12,6 +14,9 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
   final Set _selectedOrganIds = {};
   bool _isBottomSheetExpanded = false;
 
+  // Symptom selection state
+  final Map _organSymptomsGroups = {};
+
   // Tooltip state
   String? _tooltipOrganId;
   Timer? _tooltipTimer;
@@ -46,6 +51,21 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
   /// Get count of selected organs
   int get selectedOrgansCount => _selectedOrganIds.length;
 
+  /// Get organ symptoms groups for selected organs
+  List get organSymptomsGroups {
+    return _organSymptomsGroups.values.toList();
+  }
+
+  /// Get total selected symptoms count across all organs
+  int get totalSelectedSymptomsCount {
+    return _organSymptomsGroups.values.fold(0, (sum, group) => sum + group.selectedCount);
+  }
+
+  /// Check if at least one symptom is selected
+  bool get hasSelectedSymptoms {
+    return _organSymptomsGroups.values.any((group) => group.hasSelectedSymptoms);
+  }
+
   // Methods
 
   /// Toggle between front and back body view
@@ -135,10 +155,76 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
     return selectedOrgans.map((organ) => organ.name).toList();
   }
 
+  /// Initialize symptom groups based on selected organs
+  void initializeSymptomGroups() {
+    _organSymptomsGroups.clear();
+
+    for (String organId in _selectedOrganIds) {
+      List symptoms = SymptomsMappingData.getSymptomsForOrgan(organId);
+      if (symptoms.isNotEmpty) {
+        // Find organ name from selectedOrgans
+        String organName = selectedOrgans
+            .firstWhere((organ) => organ.id == organId, orElse: () => OrganModel(id: organId, name: organId, bodyView: BodyView.front, position: OrganPosition(x: 0, y: 0)))
+            .name;
+
+        _organSymptomsGroups[organId] = OrganSymptomsGroup(
+          organId: organId,
+          organName: organName,
+          symptoms: symptoms,
+        );
+      }
+    }
+    notifyListeners();
+  }
+
+  /// Toggle symptom selection for a specific organ
+  void toggleSymptomSelection(String organId, String symptomId) {
+    if (_organSymptomsGroups.containsKey(organId)) {
+      final group = _organSymptomsGroups[organId]!;
+      final selectedIds = Set.from(group.selectedSymptomIds);
+
+      if (selectedIds.contains(symptomId)) {
+        selectedIds.remove(symptomId);
+      } else {
+        selectedIds.add(symptomId);
+      }
+
+      _organSymptomsGroups[organId] = group.copyWith(selectedSymptomIds: selectedIds);
+      notifyListeners();
+    }
+  }
+
+  /// Check if a symptom is selected
+  bool isSymptomSelected(String organId, String symptomId) {
+    return _organSymptomsGroups[organId]?.selectedSymptomIds.contains(symptomId) ?? false;
+  }
+
+  /// Get all selected symptoms across all organs
+  List getAllSelectedSymptoms() {
+    List allSymptoms = [];
+    for (var group in _organSymptomsGroups.values) {
+      for (var symptom in group.symptoms) {
+        if (group.selectedSymptomIds.contains(symptom.id)) {
+          allSymptoms.add(symptom);
+        }
+      }
+    }
+    return allSymptoms;
+  }
+
+  /// Clear all symptom selections
+  void clearAllSymptomSelections() {
+    for (var organId in _organSymptomsGroups.keys) {
+      _organSymptomsGroups[organId] = _organSymptomsGroups[organId]!.copyWith(selectedSymptomIds: {});
+    }
+    notifyListeners();
+  }
+
   /// Reset the view model to initial state
   void reset() {
     _currentView = BodyView.front;
     _selectedOrganIds.clear();
+    _organSymptomsGroups.clear();
     _isBottomSheetExpanded = false;
     _tooltipTimer?.cancel();
     _tooltipOrganId = null;
diff --git a/lib/presentation/symptoms_checker/symptoms_selector_screen.dart b/lib/presentation/symptoms_checker/symptoms_selector_screen.dart
new file mode 100644
index 0000000..b1c3234
--- /dev/null
+++ b/lib/presentation/symptoms_checker/symptoms_selector_screen.dart
@@ -0,0 +1,224 @@
+import 'package:easy_localization/easy_localization.dart';
+import 'package:flutter/material.dart';
+import 'package:hmg_patient_app_new/core/app_export.dart';
+import 'package:hmg_patient_app_new/core/utils/utils.dart';
+import 'package:hmg_patient_app_new/extensions/route_extensions.dart';
+import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
+import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
+import 'package:hmg_patient_app_new/features/symptoms_checker/models/symptom_model.dart';
+import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
+import 'package:hmg_patient_app_new/presentation/symptoms_checker/symptoms_checker_view_model.dart';
+import 'package:hmg_patient_app_new/theme/colors.dart';
+import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart';
+import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart';
+import 'package:hmg_patient_app_new/widgets/chip/custom_selectable_chip.dart';
+import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart';
+import 'package:provider/provider.dart';
+
+class SymptomsSelectorScreen extends StatefulWidget {
+  const SymptomsSelectorScreen({super.key});
+
+  @override
+  State createState() => _SymptomsSelectorScreenState();
+}
+
+class _SymptomsSelectorScreenState extends State {
+  @override
+  void initState() {
+    super.initState();
+    // Initialize symptom groups based on selected organs
+    WidgetsBinding.instance.addPostFrameCallback((_) {
+      final viewModel = context.read();
+      viewModel.initializeSymptomGroups();
+    });
+  }
+
+  void _onNextPressed(SymptomsCheckerViewModel viewModel) {
+    if (viewModel.hasSelectedSymptoms) {
+      // Navigate to triage screen
+      context.navigateWithName(AppRoutes.triageScreen);
+    } else {
+      ScaffoldMessenger.of(context).showSnackBar(
+        SnackBar(
+          content: Text('Please select at least one symptom before proceeding'.needTranslation),
+          backgroundColor: AppColors.errorColor,
+        ),
+      );
+    }
+  }
+
+  void _onPreviousPressed() {
+    context.pop();
+  }
+
+  _buildConfirmationBottomSheet({required BuildContext context, required VoidCallback onConfirm}) {
+    return showCommonBottomSheetWithoutHeight(
+      title: LocaleKeys.notice.tr(context: context),
+      context,
+      child: Utils.getWarningWidget(
+        loadingText: "Are you sure you want to restart the organ selection?".needTranslation,
+        isShowActionButtons: true,
+        onCancelTap: () => Navigator.pop(context),
+        onConfirmTap: () => onConfirm(),
+      ),
+      callBackFunc: () {},
+      isFullScreen: false,
+      isCloseButtonVisible: true,
+    );
+  }
+
+  @override
+  Widget build(BuildContext context) {
+    return Scaffold(
+      backgroundColor: AppColors.bgScaffoldColor,
+      body: Consumer(
+        builder: (context, viewModel, _) {
+          return Column(
+            children: [
+              Expanded(
+                child: CollapsingListView(
+                  title: "Symptoms Selector".needTranslation,
+                  onLeadingTapped: () => _buildConfirmationBottomSheet(
+                      context: context,
+                      onConfirm: () => {
+                            context.pop(),
+                            context.pop(),
+                          }),
+                  child: viewModel.organSymptomsGroups.isEmpty
+                      ? _buildEmptyState()
+                      : Column(
+                          crossAxisAlignment: CrossAxisAlignment.start,
+                          children: [
+                            SizedBox(height: 16.h),
+                            ...viewModel.organSymptomsGroups.map((group) {
+                              return Padding(
+                                padding: EdgeInsets.only(bottom: 16.h),
+                                child: _buildSymptomsSelectionCard(viewModel, group),
+                              );
+                            }),
+                          ],
+                        ),
+                ),
+              ),
+              _buildStickyBottomCard(context, viewModel),
+            ],
+          );
+        },
+      ),
+    );
+  }
+
+  Widget _buildSymptomsSelectionCard(SymptomsCheckerViewModel viewModel, OrganSymptomsGroup group) {
+    return Container(
+      width: double.infinity,
+      margin: EdgeInsets.symmetric(horizontal: 24.w),
+      decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24.r),
+      padding: EdgeInsets.symmetric(vertical: 24.h, horizontal: 16.w),
+      child: Column(
+        crossAxisAlignment: CrossAxisAlignment.start,
+        children: [
+          Row(
+            mainAxisAlignment: MainAxisAlignment.spaceBetween,
+            children: [
+              Expanded(
+                child: Text(
+                  'Possible symptoms related to "${group.organName}"',
+                  style: TextStyle(fontSize: 18.f, fontWeight: FontWeight.w600, color: AppColors.textColor),
+                ),
+              ),
+            ],
+          ),
+          SizedBox(height: 24.h),
+          Wrap(
+            runSpacing: 12.h,
+            spacing: 8.w,
+            children: group.symptoms.map((symptom) {
+              bool isSelected = viewModel.isSymptomSelected(group.organId, symptom.id);
+              return GestureDetector(
+                onTap: () => viewModel.toggleSymptomSelection(group.organId, symptom.id),
+                child: CustomSelectableChip(
+                  label: symptom.name,
+                  selected: isSelected,
+                  activeColor: AppColors.primaryRedBorderColor,
+                  activeTextColor: AppColors.primaryRedBorderColor,
+                  inactiveBorderColor: AppColors.bottomNAVBorder,
+                  inactiveTextColor: AppColors.textColor,
+                ),
+              );
+            }).toList(),
+          ),
+        ],
+      ),
+    );
+  }
+
+  Widget _buildEmptyState() {
+    return Center(
+      child: Padding(
+        padding: EdgeInsets.all(24.h),
+        child: Column(
+          mainAxisAlignment: MainAxisAlignment.center,
+          children: [
+            Icon(Icons.info_outline, size: 64.h, color: AppColors.greyTextColor),
+            SizedBox(height: 16.h),
+            Text(
+              'No organs selected'.needTranslation,
+              style: TextStyle(
+                fontSize: 18.f,
+                fontWeight: FontWeight.w600,
+                color: AppColors.textColor,
+              ),
+            ),
+            SizedBox(height: 8.h),
+            Text(
+              'Please go back and select organs first'.needTranslation,
+              textAlign: TextAlign.center,
+              style: TextStyle(
+                fontSize: 14.f,
+                color: AppColors.greyTextColor,
+              ),
+            ),
+          ],
+        ),
+      ),
+    );
+  }
+
+  Widget _buildStickyBottomCard(BuildContext context, SymptomsCheckerViewModel viewModel) {
+    return Container(
+      decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24.r),
+      child: Column(
+        mainAxisSize: MainAxisSize.min,
+        children: [
+          SizedBox(height: 16.h),
+          Row(
+            children: [
+              Expanded(
+                child: CustomButton(
+                  text: "Previous".needTranslation,
+                  onPressed: _onPreviousPressed,
+                  backgroundColor: AppColors.primaryRedColor.withValues(alpha: 0.11),
+                  borderColor: Colors.transparent,
+                  textColor: AppColors.primaryRedColor,
+                  fontSize: 16.f,
+                ),
+              ),
+              SizedBox(width: 12.w),
+              Expanded(
+                child: CustomButton(
+                  text: "Next".needTranslation,
+                  onPressed: () => _onNextPressed(viewModel),
+                  backgroundColor: AppColors.primaryRedColor,
+                  borderColor: AppColors.primaryRedColor,
+                  textColor: AppColors.whiteColor,
+                  fontSize: 16.f,
+                ),
+              ),
+            ],
+          ),
+          SizedBox(height: 24.h),
+        ],
+      ).paddingSymmetrical(24.w, 0),
+    );
+  }
+}
diff --git a/lib/presentation/symptoms_checker/triage_progress_screen.dart b/lib/presentation/symptoms_checker/triage_screen.dart
similarity index 94%
rename from lib/presentation/symptoms_checker/triage_progress_screen.dart
rename to lib/presentation/symptoms_checker/triage_screen.dart
index a3d0c1a..4dbe0ca 100644
--- a/lib/presentation/symptoms_checker/triage_progress_screen.dart
+++ b/lib/presentation/symptoms_checker/triage_screen.dart
@@ -14,14 +14,14 @@ import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart';
 import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart';
 import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart';
 
-class TriageProgressScreen extends StatefulWidget {
-  const TriageProgressScreen({super.key});
+class TriageScreen extends StatefulWidget {
+  const TriageScreen({super.key});
 
   @override
-  State createState() => _TriageProgressScreenState();
+  State createState() => _TriageScreenState();
 }
 
-class _TriageProgressScreenState extends State {
+class _TriageScreenState extends State {
   late List triageQuestions;
   int currentQuestionIndex = 0;
 
@@ -96,12 +96,14 @@ class _TriageProgressScreenState extends State {
           Expanded(
             child: CollapsingListView(
               title: "Triage".needTranslation,
-              onLeadingTapped: () => _buildConfirmationBottomSheet(
-                  context: context,
-                  onConfirm: () => {
-                        context.pop(),
-                        context.pop(),
-                      }),
+              // onLeadingTapped: () => _buildConfirmationBottomSheet(
+              //     context: context,
+              //     onConfirm: () => {
+              //           context.pop(),
+              //           context.pop(),
+              //         }),
+
+              onLeadingTapped: () => context.pop(),
               child: Column(
                 crossAxisAlignment: CrossAxisAlignment.start,
                 children: [
@@ -176,8 +178,8 @@ class _TriageProgressScreenState extends State {
               height: 24.w,
               decoration: BoxDecoration(
                 color: selected ? AppColors.primaryRedColor : Colors.transparent,
-                borderRadius: BorderRadius.circular(8.r),
-                border: Border.all(color: selected ? AppColors.primaryRedColor : AppColors.borderGrayColor, width: 2.w),
+                borderRadius: BorderRadius.circular(5.r),
+                border: Border.all(color: selected ? AppColors.primaryRedColor : AppColors.borderGrayColor, width: 1.w),
               ),
               child: selected ? Icon(Icons.check, size: 16.f, color: AppColors.whiteColor) : null,
             ),
diff --git a/lib/presentation/symptoms_checker/widgets/interactive_body_widget.dart b/lib/presentation/symptoms_checker/widgets/interactive_body_widget.dart
index 4c41ddd..34cc049 100644
--- a/lib/presentation/symptoms_checker/widgets/interactive_body_widget.dart
+++ b/lib/presentation/symptoms_checker/widgets/interactive_body_widget.dart
@@ -114,15 +114,13 @@ class _InteractiveBodyWidgetState extends State {
 
                       // Tooltip
                       if (widget.tooltipOrganId != null)
-                        ...widget.organs.where((organ) => organ.id == widget.tooltipOrganId).map((organ) {
-                          final centerX = organ.position.x * imageConstraints.maxWidth;
-                          final centerY = organ.position.y * imageConstraints.maxHeight;
-
-                          return OrganTooltipWidget(
-                            organName: organ.name,
-                            position: Offset(centerX, centerY),
-                          );
-                        }),
+                        ...widget.organs.where((organ) => organ.id == widget.tooltipOrganId).map(
+                          (organ) {
+                            final centerX = organ.position.x * imageConstraints.maxWidth;
+                            final centerY = organ.position.y * imageConstraints.maxHeight;
+                            return OrganTooltipWidget(organName: organ.name, position: Offset(centerX, centerY));
+                          },
+                        ),
                     ],
                   );
                 },
diff --git a/lib/presentation/symptoms_checker/widgets/organ_tooltip_widget.dart b/lib/presentation/symptoms_checker/widgets/organ_tooltip_widget.dart
index 77e8319..6c2625b 100644
--- a/lib/presentation/symptoms_checker/widgets/organ_tooltip_widget.dart
+++ b/lib/presentation/symptoms_checker/widgets/organ_tooltip_widget.dart
@@ -18,11 +18,15 @@ class OrganTooltipWidget extends StatelessWidget {
         translation: const Offset(-0.5, -1.2), // Center horizontally, position above the dot
         child: Container(
           padding: EdgeInsets.symmetric(horizontal: 12.w, vertical: 6.h),
-          decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.scaffoldBgColor, borderRadius: 8.h),
+          decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
+            color: AppColors.scaffoldBgColor,
+            borderRadius: 8.h,
+            hasShadow: true,
+          ),
           child: Text(
             organName,
             style: TextStyle(
-              color: AppColors.primaryRedColor,
+              color: AppColors.textColor,
               fontSize: 12.f,
               fontWeight: FontWeight.w500,
             ),
diff --git a/lib/routes/app_routes.dart b/lib/routes/app_routes.dart
index 0e6ec4d..36869f6 100644
--- a/lib/routes/app_routes.dart
+++ b/lib/routes/app_routes.dart
@@ -9,7 +9,8 @@ import 'package:hmg_patient_app_new/presentation/home_health_care/hhc_procedures
 import 'package:hmg_patient_app_new/presentation/medical_file/medical_file_page.dart';
 import 'package:hmg_patient_app_new/presentation/symptoms_checker/organ_selector_screen.dart';
 import 'package:hmg_patient_app_new/presentation/symptoms_checker/possible_conditions_screen.dart';
-import 'package:hmg_patient_app_new/presentation/symptoms_checker/triage_progress_screen.dart';
+import 'package:hmg_patient_app_new/presentation/symptoms_checker/symptoms_selector_screen.dart';
+import 'package:hmg_patient_app_new/presentation/symptoms_checker/triage_screen.dart';
 import 'package:hmg_patient_app_new/splashPage.dart';
 
 class AppRoutes {
@@ -25,8 +26,9 @@ class AppRoutes {
 
   // Symptoms Checker
   static const String organSelectorPage = '/organSelectorPage';
+  static const String symptomsCheckerScreen = '/symptomsCheckerScreen';
   static const String possibleConditionsScreen = '/possibleConditionsScreen';
-  static const String triageProgressScreen = '/triageProgressScreen';
+  static const String triageScreen = '/triageProgressScreen';
 
   static Map get routes => {
         initialRoute: (context) => SplashPage(),
@@ -39,7 +41,8 @@ class AppRoutes {
         comprehensiveCheckupPage: (context) => ComprehensiveCheckupPage(),
         homeHealthCarePage: (context) => HhcProceduresPage(),
         organSelectorPage: (context) => OrganSelectorPage(),
+        symptomsCheckerScreen: (context) => SymptomsSelectorScreen(),
         possibleConditionsScreen: (context) => PossibleConditionsScreen(),
-        triageProgressScreen: (context) => TriageProgressScreen()
+        triageScreen: (context) => TriageScreen()
       };
 }
diff --git a/lib/widgets/chip/custom_chip_widget.dart b/lib/widgets/chip/custom_chip_widget.dart
index 5dee4f0..b60db57 100644
--- a/lib/widgets/chip/custom_chip_widget.dart
+++ b/lib/widgets/chip/custom_chip_widget.dart
@@ -67,7 +67,12 @@ class CustomChipWidget extends StatelessWidget {
                 Utils.buildSvgWithAssets(icon: iconAsset!),
                 SizedBox(width: 4.h),
               ],
-              chipText.toText10(isBold: true, color: isSelected ? Colors.white : textColor ?? chipType.color, maxlines: 1, weight: FontWeight.w500, letterSpacing: -0.5),
+              chipText.toText10(
+                  isBold: true,
+                  color: isSelected ? Colors.white : textColor ?? chipType.color,
+                  maxlines: 1,
+                  weight: FontWeight.w500,
+                  letterSpacing: -0.5),
             ],
           ),
         ),
diff --git a/lib/widgets/chip/custom_selectable_chip.dart b/lib/widgets/chip/custom_selectable_chip.dart
new file mode 100644
index 0000000..be42bfd
--- /dev/null
+++ b/lib/widgets/chip/custom_selectable_chip.dart
@@ -0,0 +1,55 @@
+import 'package:flutter/material.dart';
+import 'package:hmg_patient_app_new/core/app_export.dart';
+import 'package:hmg_patient_app_new/theme/colors.dart';
+
+class CustomSelectableChip extends StatelessWidget {
+  final String label;
+  final bool selected;
+  final VoidCallback? onTap;
+  final Color activeColor;
+  final Color activeTextColor;
+  final Color inactiveBorderColor;
+  final Color inactiveTextColor;
+
+  const CustomSelectableChip({
+    super.key,
+    required this.label,
+    required this.selected,
+    this.onTap,
+    this.activeColor = const Color(0xFFD03C32), // red accent
+    this.activeTextColor = Colors.white,
+    this.inactiveBorderColor = const Color(0xFFE8E8E8),
+    this.inactiveTextColor = const Color(0xFF222222),
+  });
+
+  @override
+  Widget build(BuildContext context) {
+    final double radius = 8.0;
+    return AnimatedContainer(
+      duration: const Duration(milliseconds: 180),
+      padding: EdgeInsets.symmetric(horizontal: 14.w, vertical: 8.h),
+      decoration: BoxDecoration(
+        color: selected ? activeColor.withValues(alpha: 0.12) : AppColors.whiteColor,
+        borderRadius: BorderRadius.circular(radius),
+        border: Border.all(
+          color: selected ? activeColor : inactiveBorderColor,
+          width: 1,
+        ),
+      ),
+      child: InkWell(
+        borderRadius: BorderRadius.circular(radius),
+        onTap: onTap,
+        child: Text(
+          label,
+          style: TextStyle(
+            fontSize: 12.f,
+            fontWeight: FontWeight.w500,
+            color: selected ? activeTextColor : inactiveTextColor,
+            letterSpacing: -0.02 * 18,
+            height: 1.0,
+          ),
+        ),
+      ),
+    );
+  }
+}
-- 
2.30.2


From d256eec3929ddeee5354c80be95cb96f957bf5a4 Mon Sep 17 00:00:00 2001
From: aamir-csol 
Date: Mon, 8 Dec 2025 10:50:33 +0300
Subject: [PATCH 27/39] medical file changes

---
 lib/core/utils/utils.dart                     |  2 +-
 lib/extensions/string_extensions.dart         |  2 +-
 .../medical_file/medical_file_page.dart       | 22 ++++---
 lib/widgets/expandable_list_widget.dart       |  2 +-
 lib/widgets/input_widget.dart                 | 58 ++++++++++---------
 5 files changed, 46 insertions(+), 40 deletions(-)

diff --git a/lib/core/utils/utils.dart b/lib/core/utils/utils.dart
index e2c11d4..0125f00 100644
--- a/lib/core/utils/utils.dart
+++ b/lib/core/utils/utils.dart
@@ -330,7 +330,7 @@ class Utils {
             repeat: false, reverse: false, frameRate: FrameRate(60), width: width.h, height: height.h, fit: BoxFit.fill),
         SizedBox(height: 16.h),
         (noDataText ?? LocaleKeys.noDataAvailable.tr())
-            .toText16(weight: FontWeight.w500, color: AppColors.greyTextColor, isCenter: true)
+            .toText14(weight: FontWeight.w500, color: AppColors.greyTextColor, isCenter: true)
             .paddingSymmetrical(64.w, 0.h),
         SizedBox(height: 16.h),
         callToActionButton
diff --git a/lib/extensions/string_extensions.dart b/lib/extensions/string_extensions.dart
index 250453d..328ced5 100644
--- a/lib/extensions/string_extensions.dart
+++ b/lib/extensions/string_extensions.dart
@@ -263,7 +263,7 @@ extension EmailValidator on String {
         style: TextStyle(fontSize: 19.f, fontWeight: isBold ? FontWeight.bold : FontWeight.normal, color: color ?? AppColors.blackColor, letterSpacing: -0.4),
       );
 
-  Widget toText20({Color? color, FontWeight? weight, bool isBold = false}) => Text(
+  Widget toText20({Color? color, FontWeight? weight, bool isBold = false, }) => Text(
         this,
         style: TextStyle(
             fontSize: 20.f, fontWeight: weight ?? (isBold ? FontWeight.bold : FontWeight.normal), color: color ?? AppColors.blackColor, letterSpacing: -0.4),
diff --git a/lib/presentation/medical_file/medical_file_page.dart b/lib/presentation/medical_file/medical_file_page.dart
index e1d4ce7..538687c 100644
--- a/lib/presentation/medical_file/medical_file_page.dart
+++ b/lib/presentation/medical_file/medical_file_page.dart
@@ -245,39 +245,43 @@ class _MedicalFilePageState extends State {
             isBorderAllowed: false,
             isAllowLeadingIcon: true,
             padding: EdgeInsets.symmetric(vertical: 8.h, horizontal: 8.h),
-            leadingIcon: AppAssets.student_card,
+            leadingIcon: AppAssets.search_icon,
+            hintColor: AppColors.textColor,
           ).paddingSymmetrical(24.w, 0.0),
           SizedBox(height: 16.h),
           // Using CustomExpandableList
           CustomExpandableList(
             expansionMode: ExpansionMode.exactlyOne,
             dividerColor: Color(0xFF2B353E1A),
-
+            itemPadding: EdgeInsets.symmetric(vertical: 16.h, horizontal: 14.h),
             items: [
               ExpandableListItem(
-                title: "Medical Services".toText20(weight: FontWeight.w500),
+                title: "Medical Services".toText18(weight: FontWeight.w600),
                 children: [
                   SizedBox(height: 10.h),
                   getSelectedTabData(0),
                 ],
               ),
               ExpandableListItem(
-                  title: "Medical Reports".toText20(
-                    weight: FontWeight.w500,
+                  title: "Medical Reports".toText18(
+                    weight: FontWeight.w600,
                   ),
+                  expandedBackgroundColor: Colors.transparent,
                   children: [
                     SizedBox(height: 10.h),
                     getSelectedTabData(2),
                   ]),
               ExpandableListItem(
-                title: "Insurance & Payments".toText20(weight: FontWeight.w500),
+                title: "Insurance & Payments".toText18(weight: FontWeight.w600),
+                expandedBackgroundColor: Colors.transparent,
                 children: [
                   SizedBox(height: 10.h),
                   getSelectedTabData(1),
                 ],
               ),
               ExpandableListItem(
-                title: "Tracker & Others".toText20(weight: FontWeight.w500),
+                title: "Tracker & Others".toText18(weight: FontWeight.w600),
+                expandedBackgroundColor: Colors.transparent,
                 children: [
                   Text("Blood Report"),
                   SizedBox(height: 8),
@@ -481,9 +485,9 @@ class _MedicalFilePageState extends State {
                             },
                             separatorBuilder: (BuildContext cxt, int index) => SizedBox(width: 12.h),
                           ),
-              ).paddingSymmetrical(0.w, 0);
+              ).paddingSymmetrical(0.w, 0.h);
             }),
-            SizedBox(height: 24.h),
+            SizedBox(height: 10.h),
             "Lab & Radiology".needTranslation.toText16(weight: FontWeight.w500, letterSpacing: -0.2),
             SizedBox(height: 16.h),
             Row(
diff --git a/lib/widgets/expandable_list_widget.dart b/lib/widgets/expandable_list_widget.dart
index 21bbdf6..b948299 100644
--- a/lib/widgets/expandable_list_widget.dart
+++ b/lib/widgets/expandable_list_widget.dart
@@ -255,7 +255,7 @@ class ExpandableListTheme {
 
     return ExpandableListTheme(
       backgroundColor: Colors.transparent,
-      expandedBackgroundColor: Colors.grey.shade50,
+      expandedBackgroundColor: Colors.transparent,
       dividerColor: Colors.grey.shade300,
       defaultTrailingIcon: Icon(
         Icons.keyboard_arrow_down,
diff --git a/lib/widgets/input_widget.dart b/lib/widgets/input_widget.dart
index 4b3f091..c1a38ab 100644
--- a/lib/widgets/input_widget.dart
+++ b/lib/widgets/input_widget.dart
@@ -47,38 +47,40 @@ class TextInputWidget extends StatelessWidget {
   final bool isMultiline;
   final int minLines;
   final int maxLines;
+  final Color? hintColor;
 
   // final List countryList;
   // final Function(Country)? onCountryChange;
 
-  TextInputWidget(
-      {super.key,
-      required this.labelText,
-      required this.hintText,
-      this.controller,
-      this.onChange,
-      this.onCalendarTypeChanged,
-      this.prefix,
-      this.isEnable = true,
-      this.isBorderAllowed = true,
-      this.isAllowRadius = true,
-      this.isReadOnly = false,
-      this.keyboardType = TextInputType.number,
-      this.focusNode,
-      this.autoFocus = false,
-      this.padding,
-      this.isAllowLeadingIcon = false,
-      this.leadingIcon,
-      this.isCountryDropDown = false,
-      this.hasError = false,
-      this.errorMessage,
-      this.onCountryChange,
-      this.selectionType,
-      this.fontSize,
-      this.isWalletAmountInput = false,
-      this.suffix,
-      this.labelColor,
+  TextInputWidget({
+    super.key,
+    required this.labelText,
+    required this.hintText,
+    this.controller,
+    this.onChange,
+    this.onCalendarTypeChanged,
+    this.prefix,
+    this.isEnable = true,
+    this.isBorderAllowed = true,
+    this.isAllowRadius = true,
+    this.isReadOnly = false,
+    this.keyboardType = TextInputType.number,
+    this.focusNode,
+    this.autoFocus = false,
+    this.padding,
+    this.isAllowLeadingIcon = false,
+    this.leadingIcon,
+    this.isCountryDropDown = false,
+    this.hasError = false,
+    this.errorMessage,
+    this.onCountryChange,
+    this.selectionType,
+    this.fontSize,
+    this.isWalletAmountInput = false,
+    this.suffix,
+    this.labelColor,
     this.onSubmitted,
+    this.hintColor,
     // multiline defaults
     this.isMultiline = false,
     this.minLines = 3,
@@ -274,7 +276,7 @@ class TextInputWidget extends StatelessWidget {
       decoration: InputDecoration(
         isDense: true,
         hintText: hintText,
-        hintStyle: TextStyle(fontSize: 14.f, height: 21 / 16, fontWeight: FontWeight.w500, color: Color(0xff898A8D), letterSpacing: -0.75),
+        hintStyle: TextStyle(fontSize: 14.f, height: 21 / 16, fontWeight: FontWeight.w500, color: hintColor != null ? AppColors.textColor : Color(0xff898A8D), letterSpacing: -0.75),
         prefixIconConstraints: BoxConstraints(minWidth: 30.h),
         prefixIcon: prefix == null ? null : "+${prefix!}".toText14(letterSpacing: -1, color: AppColors.textColor, weight: FontWeight.w500),
         contentPadding: EdgeInsets.zero,
-- 
2.30.2


From 634a138c7f91d701f89b927bc46334ea7c5071d5 Mon Sep 17 00:00:00 2001
From: haroon amjad 
Date: Mon, 8 Dec 2025 17:22:56 +0300
Subject: [PATCH 28/39] Queueing system screen implementation contd.

---
 assets/images/svg/bulb_icon.svg               |   5 +
 assets/images/svg/call_for_doctor.svg         |   4 +
 assets/images/svg/call_for_vitals.svg         |   4 +
 lib/core/app_assets.dart                      |   3 +
 .../appointments/appointment_queue_page.dart  | 266 ++++++++++++++++++
 .../widgets/appointment_card.dart             | 127 ++++-----
 .../book_appointment_page.dart                |  10 +
 .../widgets/patient_insurance_card.dart       |   4 +-
 .../medical_file/medical_file_page.dart       |  46 +--
 lib/widgets/appbar/collapsing_list_view.dart  |  11 +-
 10 files changed, 393 insertions(+), 87 deletions(-)
 create mode 100644 assets/images/svg/bulb_icon.svg
 create mode 100644 assets/images/svg/call_for_doctor.svg
 create mode 100644 assets/images/svg/call_for_vitals.svg
 create mode 100644 lib/presentation/appointments/appointment_queue_page.dart

diff --git a/assets/images/svg/bulb_icon.svg b/assets/images/svg/bulb_icon.svg
new file mode 100644
index 0000000..62afc17
--- /dev/null
+++ b/assets/images/svg/bulb_icon.svg
@@ -0,0 +1,5 @@
+
+    
+    
+    
+
diff --git a/assets/images/svg/call_for_doctor.svg b/assets/images/svg/call_for_doctor.svg
new file mode 100644
index 0000000..9644d3a
--- /dev/null
+++ b/assets/images/svg/call_for_doctor.svg
@@ -0,0 +1,4 @@
+
+    
+    
+
diff --git a/assets/images/svg/call_for_vitals.svg b/assets/images/svg/call_for_vitals.svg
new file mode 100644
index 0000000..ceacdf5
--- /dev/null
+++ b/assets/images/svg/call_for_vitals.svg
@@ -0,0 +1,4 @@
+
+    
+    
+
diff --git a/lib/core/app_assets.dart b/lib/core/app_assets.dart
index f3ff8fd..5bc984a 100644
--- a/lib/core/app_assets.dart
+++ b/lib/core/app_assets.dart
@@ -178,6 +178,9 @@ class AppAssets {
   static const String doctor_profile_rating_icon = '$svgBasePath/doctor_profile_rating_icon.svg';
   static const String doctor_profile_reviews_icon = '$svgBasePath/doctor_profile_reviews_icon.svg';
   static const String waiting_appointment_icon = '$svgBasePath/waitingAppo.svg';
+  static const String call_for_vitals = '$svgBasePath/call_for_vitals.svg';
+  static const String call_for_doctor = '$svgBasePath/call_for_doctor.svg';
+  static const String bulb_icon = '$svgBasePath/bulb_icon.svg';
 
 
   //bottom navigation//
diff --git a/lib/presentation/appointments/appointment_queue_page.dart b/lib/presentation/appointments/appointment_queue_page.dart
new file mode 100644
index 0000000..c2765a2
--- /dev/null
+++ b/lib/presentation/appointments/appointment_queue_page.dart
@@ -0,0 +1,266 @@
+import 'package:flutter/material.dart';
+import 'package:hmg_patient_app_new/core/app_assets.dart';
+import 'package:hmg_patient_app_new/core/app_state.dart';
+import 'package:hmg_patient_app_new/core/dependencies.dart';
+import 'package:hmg_patient_app_new/core/utils/size_utils.dart';
+import 'package:hmg_patient_app_new/core/utils/utils.dart';
+import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
+import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
+import 'package:hmg_patient_app_new/presentation/home/navigation_screen.dart';
+import 'package:hmg_patient_app_new/theme/colors.dart';
+import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart';
+import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart';
+import 'package:hmg_patient_app_new/widgets/chip/app_custom_chip_widget.dart';
+import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart';
+
+class AppointmentQueuePage extends StatelessWidget {
+  AppointmentQueuePage({super.key});
+
+  AppState? appState;
+  int currentQueueStatus = 0;
+
+  @override
+  Widget build(BuildContext context) {
+    currentQueueStatus = 1;
+    appState = getIt.get();
+    return Scaffold(
+      backgroundColor: AppColors.bgScaffoldColor,
+      body: Column(
+        children: [
+          Expanded(
+            child: CollapsingListView(
+              title: "Queueing".needTranslation,
+              child: SingleChildScrollView(
+                child: Padding(
+                  padding: EdgeInsets.all(24.0),
+                  child: Column(
+                    crossAxisAlignment: CrossAxisAlignment.start,
+                    children: [
+                      Container(
+                        decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
+                          color: AppColors.whiteColor,
+                          borderRadius: 20.h,
+                          hasShadow: false,
+                          side: BorderSide(color: getCardBorderColor(), width: 2.w),
+                        ),
+                        child: Padding(
+                          padding: EdgeInsets.all(16.h),
+                          child: Column(
+                            crossAxisAlignment: CrossAxisAlignment.start,
+                            children: [
+                              Row(
+                                mainAxisAlignment: MainAxisAlignment.spaceBetween,
+                                children: [
+                                  AppCustomChipWidget(
+                                    labelText: currentQueueStatus == 0 ? "In Queue".needTranslation : "Your Turn".needTranslation,
+                                    backgroundColor: getCardBorderColor().withValues(alpha: 0.20),
+                                    textColor: getCardBorderColor(),
+                                  ),
+                                  Utils.buildSvgWithAssets(icon: AppAssets.waiting_icon, width: 24.h, height: 24.h),
+                                ],
+                              ),
+                              SizedBox(height: 10.h),
+                              "Hala ${appState!.getAuthenticatedUser()!.firstName}!!!".needTranslation.toText16(isBold: true),
+                              SizedBox(height: 8.h),
+                              "Thank you for your patience, here is your queue number.".needTranslation.toText12(fontWeight: FontWeight.w500, color: AppColors.textColorLight),
+                              SizedBox(height: 8.h),
+                              "IMD W-A-2".needTranslation.toText32(isBold: true),
+                              SizedBox(height: 8.h),
+                              CustomButton(
+                                text: getCardButtonText(),
+                                onPressed: () {},
+                                backgroundColor: getCardButtonColor(),
+                                borderColor: getCardButtonColor().withValues(alpha: 0.01),
+                                textColor: getCardButtonTextColor(),
+                                fontSize: 12.f,
+                                fontWeight: FontWeight.w600,
+                                borderRadius: 12.r,
+                                padding: EdgeInsets.symmetric(horizontal: 10.w),
+                                height: 40.h,
+                                iconColor: AppColors.whiteColor,
+                                iconSize: 18.h,
+                              ),
+                            ],
+                          ),
+                        ),
+                      ),
+                      SizedBox(height: 16.h),
+                      Container(
+                        decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
+                          color: AppColors.whiteColor,
+                          borderRadius: 20.h,
+                          hasShadow: true,
+                        ),
+                        child: Padding(
+                          padding: EdgeInsets.all(16.h),
+                          child: Column(
+                            crossAxisAlignment: CrossAxisAlignment.start,
+                            children: [
+                              "Serving Now".needTranslation.toText16(isBold: true),
+                              SizedBox(height: 18.h),
+                              ListView.separated(
+                                padding: EdgeInsets.zero,
+                                shrinkWrap: true,
+                                itemCount: 3,
+                                physics: NeverScrollableScrollPhysics(),
+                                itemBuilder: (BuildContext context, int index) {
+                                  return Row(
+                                    mainAxisAlignment: MainAxisAlignment.spaceBetween,
+                                    crossAxisAlignment: CrossAxisAlignment.start,
+                                    children: [
+                                      "IMD W-A-2".needTranslation.toText17(isBold: true),
+                                      Row(
+                                        crossAxisAlignment: CrossAxisAlignment.center,
+                                        children: [
+                                          "Room: S2".toText12(fontWeight: FontWeight.w500),
+                                          SizedBox(width: 8.w),
+                                          AppCustomChipWidget(
+                                            deleteIcon: AppAssets.call_for_vitals,
+                                            labelText: "Call for vital signs".needTranslation,
+                                            iconColor: AppColors.primaryRedColor,
+                                            textColor: AppColors.primaryRedColor,
+                                            iconSize: 14.w,
+                                            backgroundColor: AppColors.primaryRedColor.withValues(alpha: 0.1),
+                                            labelPadding: EdgeInsetsDirectional.only(start: 8.h, end: -2.h),
+                                          ),
+                                        ],
+                                      ),
+                                    ],
+                                  );
+                                },
+                                separatorBuilder: (BuildContext cxt, int index) => SizedBox(height: 8.h),
+                              ),
+                            ],
+                          ),
+                        ),
+                      ),
+                      SizedBox(height: 16.h),
+                      Container(
+                        decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
+                          color: AppColors.whiteColor,
+                          borderRadius: 20.h,
+                          hasShadow: true,
+                        ),
+                        child: Padding(
+                          padding: EdgeInsets.all(16.h),
+                          child: Column(
+                            crossAxisAlignment: CrossAxisAlignment.start,
+                            children: [
+                              Row(
+                                children: [
+                                  Utils.buildSvgWithAssets(icon: AppAssets.bulb_icon, width: 24.w, height: 24.h),
+                                  SizedBox(width: 8.w),
+                                  "Things to ask your doctor today".needTranslation.toText16(isBold: true),
+                                ],
+                              ),
+                              SizedBox(height: 8.h),
+
+                              //     What can I do to improve my overall health?
+                              // Are there any routine screenings I should get?
+                              // What is this medication for?
+                              // Are there any side effects I should know about?
+                              // When should I come back for a follow-up?
+
+                              "•  ${"What can I do to improve my overall health?"}".needTranslation.toText12(fontWeight: FontWeight.w500, color: AppColors.textColorLight),
+                              SizedBox(height: 4.h),
+                              "•  ${"Are there any routine screenings I should get?"}".needTranslation.toText12(fontWeight: FontWeight.w500, color: AppColors.textColorLight),
+                              SizedBox(height: 4.h),
+                              "•  ${"What is this medication for?"}".needTranslation.toText12(fontWeight: FontWeight.w500, color: AppColors.textColorLight),
+                              SizedBox(height: 4.h),
+                              "•  ${"Are there any side effects I should know about?"}".needTranslation.toText12(fontWeight: FontWeight.w500, color: AppColors.textColorLight),
+                              SizedBox(height: 4.h),
+                              "•  ${"When should I come back for a follow-up?"}".needTranslation.toText12(fontWeight: FontWeight.w500, color: AppColors.textColorLight),
+
+                              SizedBox(height: 16.h),
+                            ],
+                          ),
+                        ),
+                      ),
+                    ],
+                  ),
+                ),
+              ),
+            ),
+          ),
+          Container(
+            decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
+              color: AppColors.whiteColor,
+              borderRadius: 24.r,
+              hasShadow: true,
+            ),
+            child: CustomButton(
+              text: "Go to homepage".needTranslation,
+              onPressed: () {
+                Navigator.pushAndRemoveUntil(
+                    context,
+                    CustomPageRoute(
+                      page: LandingNavigation(),
+                    ),
+                    (r) => false);
+              },
+              backgroundColor: AppColors.primaryRedColor,
+              borderColor: AppColors.primaryRedColor,
+              textColor: AppColors.whiteColor,
+              fontSize: 16.f,
+              fontWeight: FontWeight.w500,
+              borderRadius: 12.r,
+              padding: EdgeInsets.symmetric(horizontal: 10.w),
+              height: 50.h,
+              icon: AppAssets.homeBottom,
+              iconColor: AppColors.whiteColor,
+              iconSize: 18.h,
+            ).paddingSymmetrical(16.h, 24.h),
+          )
+        ],
+      ),
+    );
+  }
+
+  Color getCardBorderColor() {
+    switch (currentQueueStatus) {
+      case 0:
+        return AppColors.ratingColorYellow;
+      case 1:
+        return AppColors.primaryRedColor;
+      case 2:
+        return AppColors.successColor;
+    }
+    return AppColors.textColor;
+  }
+
+  Color getCardButtonColor() {
+    switch (currentQueueStatus) {
+      case 0:
+        return AppColors.textColor.withValues(alpha: 0.08);
+      case 1:
+        return AppColors.primaryRedColor;
+      case 2:
+        return AppColors.successColor;
+    }
+    return AppColors.primaryRedColor;
+  }
+
+  Color getCardButtonTextColor() {
+    switch (currentQueueStatus) {
+      case 0:
+        return Color(0xFFA2A2A2);
+      case 1:
+        return AppColors.whiteColor;
+      case 2:
+        return AppColors.whiteColor;
+    }
+    return AppColors.primaryRedColor;
+  }
+
+  String getCardButtonText() {
+    switch (currentQueueStatus) {
+      case 0:
+        return "Please wait! you will be called for vital signs".needTranslation;
+      case 1:
+        return "Please visit Room S5 for vital signs".needTranslation;
+      case 2:
+        return "Please visit Room S5 to the Doctor".needTranslation;
+    }
+    return "";
+  }
+}
diff --git a/lib/presentation/appointments/widgets/appointment_card.dart b/lib/presentation/appointments/widgets/appointment_card.dart
index 7bc9c62..a629944 100644
--- a/lib/presentation/appointments/widgets/appointment_card.dart
+++ b/lib/presentation/appointments/widgets/appointment_card.dart
@@ -17,6 +17,7 @@ import 'package:hmg_patient_app_new/features/my_appointments/my_appointments_vie
 import 'package:hmg_patient_app_new/features/my_appointments/utils/appointment_type.dart';
 import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
 import 'package:hmg_patient_app_new/presentation/appointments/appointment_details_page.dart';
+import 'package:hmg_patient_app_new/presentation/appointments/appointment_queue_page.dart';
 import 'package:hmg_patient_app_new/presentation/appointments/widgets/ask_doctor_request_type_select.dart';
 import 'package:hmg_patient_app_new/presentation/book_appointment/widgets/appointment_calendar.dart';
 import 'package:hmg_patient_app_new/presentation/medical_file/eye_measurement_details_page.dart';
@@ -26,6 +27,7 @@ import 'package:hmg_patient_app_new/widgets/chip/app_custom_chip_widget.dart';
 import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart';
 import 'package:hmg_patient_app_new/widgets/loader/bottomsheet_loader.dart';
 import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart';
+import 'package:smooth_corner/smooth_corner.dart';
 
 class AppointmentCard extends StatelessWidget {
   final PatientAppointmentHistoryResponseModel patientAppointmentHistoryResponseModel;
@@ -124,47 +126,33 @@ class AppointmentCard extends StatelessWidget {
       crossAxisAlignment: CrossAxisAlignment.start,
       children: [
         Column(
-          crossAxisAlignment: CrossAxisAlignment.start,
+          crossAxisAlignment: CrossAxisAlignment.center,
           children: [
-            Stack(
-              children: [
-                Image.network(
-                  isLoading ? 'https://hmgwebservices.com/Images/MobileImages/DUBAI/unkown_female.png' : patientAppointmentHistoryResponseModel.doctorImageURL!,
-                  width: 63.w,
-                  height: 63.h,
-                  fit: BoxFit.cover,
-                ),
-                Positioned(
-                  bottom: 0,
-                  left: 0,
-                  right: 0,
-                  child: Container(
-                    width: 63.w,
-                    height: 20,
-                    color: AppColors.textColorLight.withValues(alpha: 0.25),
-                    child: Row(
-                      mainAxisAlignment: MainAxisAlignment.center,
-                      children: [
-                        Utils.buildSvgWithAssets(
-                          icon: AppAssets.rating_icon,
-                          width: 12.w,
-                          height: 12.h,
-                          fit: BoxFit.contain,
-                        ),
-                        SizedBox(width: 4.w),
-                        isLoading ? "Rating".toText12() : patientAppointmentHistoryResponseModel.decimalDoctorRate.toString().toText12(),
-                      ],
-                    ),
-                  ),
-                )
-              ],
+            Image.network(
+              isLoading ? 'https://hmgwebservices.com/Images/MobileImages/DUBAI/unkown_female.png' : patientAppointmentHistoryResponseModel.doctorImageURL!,
+              width: 63.w,
+              height: 63.h,
+              fit: BoxFit.cover,
             ).circle(100).toShimmer2(isShow: isLoading),
-            // SizedBox(height: 12.h),
-            // AppCustomChipWidget(
-            //         icon: AppAssets.rating_icon,
-            //         iconColor: AppColors.ratingColorYellow,
-            //         labelText: isLoading ? "Rating" : "Rating: ${patientAppointmentHistoryResponseModel.decimalDoctorRate}".needTranslation)
-            //     .toShimmer2(isShow: isLoading),
+            Transform.translate(
+              offset: Offset(0.0, -20.h),
+              child: Container(
+                width: 40.w,
+                height: 40.h,
+                decoration: BoxDecoration(
+                  color: AppColors.whiteColor,
+                  shape: BoxShape.circle, // Makes the container circular
+                  border: Border.all(
+                    color: AppColors.scaffoldBgColor, // Color of the border
+                    width: 1.5.w, // Width of the border
+                  ),
+                ),
+                child: Column(
+                  mainAxisAlignment: MainAxisAlignment.center,
+                  children: [Utils.buildSvgWithAssets(icon: AppAssets.rating_icon, width: 15.w, height: 15.h), SizedBox(height: 2.h), "4.7".toText11(isBold: true, color: AppColors.textColor)],
+                ),
+              ).circle(100).toShimmer2(isShow: isLoading),
+            ),
           ],
         ),
         SizedBox(width: 16.h),
@@ -304,34 +292,41 @@ class AppointmentCard extends StatelessWidget {
     if (isRecent) {
       return CustomButton(
         text: LocaleKeys.askDoctor.tr(context: context),
-        onPressed: () async {
-          LoaderBottomSheet.showLoader(loadingText: "Checking doctor availability...".needTranslation);
-          await myAppointmentsViewModel.isDoctorAvailable(
-              projectID: patientAppointmentHistoryResponseModel.projectID,
-              doctorId: patientAppointmentHistoryResponseModel.doctorID,
-              clinicId: patientAppointmentHistoryResponseModel.clinicID,
-              onSuccess: (value) async {
-                if (value) {
-                  await myAppointmentsViewModel.getAskDoctorRequestTypes(onSuccess: (val) {
-                    LoaderBottomSheet.hideLoader();
-                    showCommonBottomSheetWithoutHeight(
-                      context,
-                      title: LocaleKeys.askDoctor.tr(context: context),
-                      child: AskDoctorRequestTypeSelect(
-                        askDoctorRequestTypeList: myAppointmentsViewModel.askDoctorRequestTypeList,
-                        myAppointmentsViewModel: myAppointmentsViewModel,
-                        patientAppointmentHistoryResponseModel: patientAppointmentHistoryResponseModel,
-                      ),
-                      callBackFunc: () {},
-                      isFullScreen: false,
-                      isCloseButtonVisible: true,
-                    );
-                  });
-                } else {
-                  print("Doctor is not available");
-                }
-              });
+        onPressed: () {
+          Navigator.of(context).push(
+            CustomPageRoute(
+              page: AppointmentQueuePage(),
+            ),
+          );
         },
+        // onPressed: () async {
+        //   LoaderBottomSheet.showLoader(loadingText: "Checking doctor availability...".needTranslation);
+        //   await myAppointmentsViewModel.isDoctorAvailable(
+        //       projectID: patientAppointmentHistoryResponseModel.projectID,
+        //       doctorId: patientAppointmentHistoryResponseModel.doctorID,
+        //       clinicId: patientAppointmentHistoryResponseModel.clinicID,
+        //       onSuccess: (value) async {
+        //         if (value) {
+        //           await myAppointmentsViewModel.getAskDoctorRequestTypes(onSuccess: (val) {
+        //             LoaderBottomSheet.hideLoader();
+        //             showCommonBottomSheetWithoutHeight(
+        //               context,
+        //               title: LocaleKeys.askDoctor.tr(context: context),
+        //               child: AskDoctorRequestTypeSelect(
+        //                 askDoctorRequestTypeList: myAppointmentsViewModel.askDoctorRequestTypeList,
+        //                 myAppointmentsViewModel: myAppointmentsViewModel,
+        //                 patientAppointmentHistoryResponseModel: patientAppointmentHistoryResponseModel,
+        //               ),
+        //               callBackFunc: () {},
+        //               isFullScreen: false,
+        //               isCloseButtonVisible: true,
+        //             );
+        //           });
+        //         } else {
+        //           print("Doctor is not available");
+        //         }
+        //       });
+        // },
         backgroundColor: AppColors.secondaryLightRedColor,
         borderColor: AppColors.secondaryLightRedColor,
         textColor: AppColors.primaryRedColor,
diff --git a/lib/presentation/book_appointment/book_appointment_page.dart b/lib/presentation/book_appointment/book_appointment_page.dart
index 8a0f7e7..0ad58cc 100644
--- a/lib/presentation/book_appointment/book_appointment_page.dart
+++ b/lib/presentation/book_appointment/book_appointment_page.dart
@@ -25,6 +25,7 @@ import 'package:hmg_patient_app_new/presentation/book_appointment/livecare/immed
 import 'package:hmg_patient_app_new/presentation/book_appointment/livecare/select_immediate_livecare_clinic_page.dart';
 import 'package:hmg_patient_app_new/presentation/book_appointment/search_doctor_by_name.dart';
 import 'package:hmg_patient_app_new/presentation/book_appointment/select_clinic_page.dart';
+import 'package:hmg_patient_app_new/presentation/home/navigation_screen.dart';
 import 'package:hmg_patient_app_new/theme/colors.dart';
 import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart';
 import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart';
@@ -72,6 +73,15 @@ class _BookAppointmentPageState extends State {
       backgroundColor: AppColors.bgScaffoldColor,
       body: CollapsingListView(
         title: LocaleKeys.bookAppo.tr(context: context),
+        isLeading: true,
+        leadingCallback: () {
+          Navigator.pushAndRemoveUntil(
+              context,
+              CustomPageRoute(
+                page: LandingNavigation(),
+              ),
+              (r) => false);
+        },
         child: SingleChildScrollView(
           child: Consumer(builder: (context, bookAppointmentsVM, child) {
             return Column(
diff --git a/lib/presentation/insurance/widgets/patient_insurance_card.dart b/lib/presentation/insurance/widgets/patient_insurance_card.dart
index 5190e5b..3d774d3 100644
--- a/lib/presentation/insurance/widgets/patient_insurance_card.dart
+++ b/lib/presentation/insurance/widgets/patient_insurance_card.dart
@@ -34,7 +34,7 @@ class PatientInsuranceCard extends StatelessWidget {
       width: double.infinity,
       decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
         color: AppColors.whiteColor,
-        borderRadius: 24,
+        borderRadius: 24.r,
       ),
       child: Padding(
         padding: EdgeInsets.all(16.h),
@@ -112,6 +112,6 @@ class PatientInsuranceCard extends StatelessWidget {
           ],
         ),
       ),
-    ).paddingSymmetrical(24.h, 0.h);
+    ).paddingSymmetrical(0.h, 0.h);
   }
 }
diff --git a/lib/presentation/medical_file/medical_file_page.dart b/lib/presentation/medical_file/medical_file_page.dart
index 4dbc659..5cfbcb9 100644
--- a/lib/presentation/medical_file/medical_file_page.dart
+++ b/lib/presentation/medical_file/medical_file_page.dart
@@ -30,6 +30,7 @@ import 'package:hmg_patient_app_new/presentation/appointments/my_doctors_page.da
 import 'package:hmg_patient_app_new/presentation/book_appointment/book_appointment_page.dart';
 import 'package:hmg_patient_app_new/presentation/book_appointment/doctor_profile_page.dart';
 import 'package:hmg_patient_app_new/presentation/book_appointment/widgets/appointment_calendar.dart';
+import 'package:hmg_patient_app_new/presentation/home/navigation_screen.dart';
 import 'package:hmg_patient_app_new/presentation/insurance/insurance_approvals_page.dart';
 import 'package:hmg_patient_app_new/presentation/insurance/insurance_home_page.dart';
 import 'package:hmg_patient_app_new/presentation/insurance/widgets/insurance_update_details_card.dart';
@@ -109,25 +110,30 @@ class _MedicalFilePageState extends State {
       trailing: Row(
         children: [
           Wrap(
+            spacing: -8.h,
+            // runSpacing: 0.h,
             children: [
               Utils.buildImgWithAssets(
                 icon: AppAssets.babyGirlImg,
-                height: 32.h,
-                border: 1.5,
+                height: 28.h,
+                width: 28.w,
+                border: 1,
                 fit: BoxFit.contain,
                 borderRadius: 50.r,
               ),
               Utils.buildImgWithAssets(
                 icon: AppAssets.femaleImg,
-                height: 32.h,
-                border: 1.5,
+                height: 28.h,
+                width: 28.w,
+                border: 1,
                 borderRadius: 50.r,
                 fit: BoxFit.contain,
               ),
               Utils.buildImgWithAssets(
                 icon: AppAssets.male_img,
-                height: 32.h,
-                border: 1.5,
+                height: 28.h,
+                width: 28.w,
+                border: 1,
                 borderRadius: 50.r,
                 fit: BoxFit.contain,
               ),
@@ -146,7 +152,15 @@ class _MedicalFilePageState extends State {
             },
             profiles: medicalFileViewModel.patientFamilyFiles);
       }),
-      isLeading: false,
+      isLeading: true,
+      leadingCallback: () {
+        Navigator.pushAndRemoveUntil(
+            navigationService.navigatorKey.currentContext!,
+            CustomPageRoute(
+              page: LandingNavigation(),
+            ),
+            (r) => false);
+      },
       child: Column(
         crossAxisAlignment: CrossAxisAlignment.start,
         children: [
@@ -177,7 +191,7 @@ class _MedicalFilePageState extends State {
                             children: [
                               AppCustomChipWidget(
                                 icon: AppAssets.file_icon,
-                                labelText: "${LocaleKeys.fileNo.tr(context: context)}: ${appState.getAuthenticatedUser()!.patientId}",
+                                labelText: "${LocaleKeys.fileno.tr(context: context)}: ${appState.getAuthenticatedUser()!.patientId}",
                                 labelPadding: EdgeInsetsDirectional.only(end: 6.w),
                                 onChipTap: () {
                                   navigationService.pushPage(
@@ -215,7 +229,8 @@ class _MedicalFilePageState extends State {
                         icon: AppAssets.blood_icon,
                         labelText: "Blood: ${appState.getUserBloodGroup.isEmpty ? "N/A" : appState.getUserBloodGroup.isEmpty}",
                         iconColor: AppColors.primaryRedColor,
-                        labelPadding: EdgeInsetsDirectional.only(end: 8.w),
+                        labelPadding: EdgeInsetsDirectional.only(end: 4.w),
+                        padding: EdgeInsets.zero,
                       ),
                       Consumer(builder: (context, insuranceVM, child) {
                         return AppCustomChipWidget(
@@ -535,10 +550,7 @@ class _MedicalFilePageState extends State {
                   ? const CommonShimmerWidget().paddingSymmetrical(0.w, 0.h)
                   : prescriptionVM.patientPrescriptionOrders.isNotEmpty
                       ? Container(
-                          decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
-                            color: Colors.white,
-                            borderRadius: 12.r,
-                          ),
+                          decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: Colors.white, borderRadius: 20.r, hasShadow: false),
                           child: Padding(
                             padding: EdgeInsets.all(16.w),
                             child: Column(
@@ -608,9 +620,9 @@ class _MedicalFilePageState extends State {
                                   },
                                   separatorBuilder: (BuildContext cxt, int index) => SizedBox(height: 16.h),
                                 ),
-                                SizedBox(height: 24.h),
+                                SizedBox(height: 16.h),
                                 const Divider(color: AppColors.dividerColor),
-                                SizedBox(height: 24.h),
+                                SizedBox(height: 16.h),
                                 Row(
                                   children: [
                                     Expanded(
@@ -635,7 +647,7 @@ class _MedicalFilePageState extends State {
                                         iconSize: 16.w,
                                       ),
                                     ),
-                                    SizedBox(width: 10.w),
+                                    SizedBox(width: 6.w),
                                     Expanded(
                                       child: CustomButton(
                                         text: "All Medications".needTranslation,
@@ -657,7 +669,7 @@ class _MedicalFilePageState extends State {
                               ],
                             ),
                           ),
-                        ).paddingSymmetrical(24.w, 0.h)
+                        ).paddingSymmetrical(0.w, 0.h)
                       : Container(
                           decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
                             color: AppColors.whiteColor,
diff --git a/lib/widgets/appbar/collapsing_list_view.dart b/lib/widgets/appbar/collapsing_list_view.dart
index 734fe0f..cf711a0 100644
--- a/lib/widgets/appbar/collapsing_list_view.dart
+++ b/lib/widgets/appbar/collapsing_list_view.dart
@@ -25,6 +25,7 @@ class CollapsingListView extends StatelessWidget {
   Widget? trailing;
   bool isClose;
   bool isLeading;
+  VoidCallback? leadingCallback;
 
   CollapsingListView({
     super.key,
@@ -40,7 +41,7 @@ class CollapsingListView extends StatelessWidget {
     this.requests,
     this.isLeading = true,
     this.trailing,
-  });
+      this.leadingCallback});
 
   @override
   Widget build(BuildContext context) {
@@ -65,7 +66,13 @@ class CollapsingListView extends StatelessWidget {
                         child: IconButton(
                           icon: Utils.buildSvgWithAssets(icon: isClose ? AppAssets.closeBottomNav : AppAssets.arrow_back, width: 32.h, height: 32.h),
                           padding: EdgeInsets.only(left: 12),
-                          onPressed: () => Navigator.pop(context),
+                          onPressed: () {
+                            if(leadingCallback != null) {
+                              leadingCallback!();
+                            } else {
+                              Navigator.pop(context);
+                            }
+                          },
                           highlightColor: Colors.transparent,
                         ),
                       )
-- 
2.30.2


From 2ffd4cc1aec8f9c6a592d2e22f80dca056dda71b Mon Sep 17 00:00:00 2001
From: faizatflutter 
Date: Tue, 9 Dec 2025 16:14:47 +0300
Subject: [PATCH 29/39] Integrated the API for Symptoms Checker

---
 assets/json/body_symptoms_data.json           | 22117 ++++++++++++++++
 convert_json.dart                             |    73 +
 lib/core/api_consts.dart                      |    16 +-
 lib/core/dependencies.dart                    |    16 +-
 lib/core/utils/calender_utils_new.dart        |    22 +-
 lib/core/utils/utils.dart                     |     4 +-
 .../{ => data}/organ_mapping_data.dart        |   153 +-
 .../symptoms_checker/models/organ_model.dart  |     6 +-
 .../body_symptom_response_model.dart          |   151 +
 .../models/symptom_model.dart                 |    56 +-
 .../symptoms_checker_repo.dart                |    86 +
 .../symptoms_checker_view_model.dart          |   326 +
 lib/main.dart                                 |     2 +-
 .../widgets/appointment_card.dart             |     2 +-
 .../waiting_appointment_payment_page.dart     |    49 +-
 lib/presentation/home/landing_page.dart       |   596 +-
 .../organ_selector_screen.dart                |     4 +-
 .../possible_conditions_screen.dart           |     2 +-
 .../symptoms_checker/risk_factors_screen.dart |   291 +
 .../symptoms_checker/suggestions_screen.dart  |   292 +
 .../symptoms_checker_view_model.dart          |   240 -
 .../symptoms_selector_screen.dart             |   137 +-
 .../widgets/interactive_body_widget.dart      |     2 +-
 .../widgets/selected_organs_section.dart      |     2 +-
 lib/routes/app_routes.dart                    |     9 +-
 25 files changed, 23933 insertions(+), 721 deletions(-)
 create mode 100644 assets/json/body_symptoms_data.json
 create mode 100644 convert_json.dart
 rename lib/features/symptoms_checker/{ => data}/organ_mapping_data.dart (73%)
 create mode 100644 lib/features/symptoms_checker/models/resp_models/body_symptom_response_model.dart
 create mode 100644 lib/features/symptoms_checker/symptoms_checker_repo.dart
 create mode 100644 lib/features/symptoms_checker/symptoms_checker_view_model.dart
 create mode 100644 lib/presentation/symptoms_checker/risk_factors_screen.dart
 create mode 100644 lib/presentation/symptoms_checker/suggestions_screen.dart
 delete mode 100644 lib/presentation/symptoms_checker/symptoms_checker_view_model.dart

diff --git a/assets/json/body_symptoms_data.json b/assets/json/body_symptoms_data.json
new file mode 100644
index 0000000..f38aa96
--- /dev/null
+++ b/assets/json/body_symptoms_data.json
@@ -0,0 +1,22117 @@
+export const BodySymptomsData = {
+  halfneck: {
+    both: [
+      "s_36",
+      "s_363",
+      "s_418",
+      "s_671",
+      "s_758",
+      "s_965",
+      "s_1388",
+      "s_1483",
+      "s_2465",
+      "s_2971",
+      "s_2954",
+      "s_2953",
+      "s_2941",
+      "s_2940",
+      "s_2939",
+      "s_2481",
+      "s_2467",
+      "s_2248",
+      "s_2247",
+      "s_2173",
+      "s_2163",
+      "s_2060"
+    ]
+  },
+  whole_head: {
+    both: [
+      "s_21",
+      "s_22",
+      "s_23",
+      "s_24",
+      "s_25",
+      "s_60",
+      "s_85",
+      "s_191",
+      "s_214",
+      "s_433",
+      "s_541",
+      "s_604",
+      "s_605",
+      "s_625",
+      "s_799",
+      "s_970",
+      "s_1193",
+      "s_1230",
+      "s_1349",
+      "s_1479",
+      "s_1535",
+      "s_1762",
+      "s_2189",
+      "s_2148",
+      "s_1912",
+      "s_1911",
+      "s_1907",
+      "s_1905",
+      "s_1901",
+      "s_1871",
+      "s_1870",
+      "s_1868",
+      "s_1864",
+      "s_1792",
+      "s_1781",
+      "s_1780",
+      "s_2673",
+      "s_2566",
+      "s_2520",
+      "s_2516",
+      "s_2366",
+      "s_2191",
+      "s_2190",
+      "s_2914",
+      "s_3034",
+      "s_2971"
+    ]
+  },
+  thighs: {
+    both: [
+      "s_73",
+      "s_757",
+      "s_734",
+      "s_1893",
+      "s_2238",
+      "s_2267",
+      "s_2552",
+      "s_38"
+    ]
+  },
+  upperleg: {
+    both: [
+      "s_734",
+      "s_313",
+      "s_273",
+      "s_175",
+      "s_2638",
+      "s_2611",
+      "s_2608",
+      "s_2262",
+      "s_2140",
+      "s_1927",
+      "s_1725",
+      "s_1463",
+      "s_1447",
+      "s_1066"
+    ]
+  },
+  breasts: {
+    female: [
+      "s_1480",
+      "s_609",
+      "s_219",
+      "s_1422",
+      "s_547",
+      "s_300",
+      "s_194",
+      "s_343"
+    ],
+    both: [
+      "s_219",
+      "s_300",
+      "s_342",
+      "s_547",
+      "s_609",
+      "s_1480",
+      "s_1509",
+      "s_2234",
+      "s_3144"
+    ]
+  },
+  lowerleg: {
+    both: [
+      "s_175",
+      "s_2840",
+      "s_2696",
+      "s_2647",
+      "s_2638",
+      "s_2611",
+      "s_2262",
+      "s_2140",
+      "s_1927"
+    ]
+  },
+  buttocks: {
+    both: [
+      "s_11",
+      "s_579",
+      "s_1453",
+      "s_38",
+      "s_436",
+      "s_115",
+      "s_351",
+      "s_355",
+      "s_249",
+      "s_112",
+      "s_71"
+    ]
+  },
+  lower_back: {
+    both: [
+      "s_53",
+      "s_1190",
+      "s_159",
+      "s_663",
+      "s_1339",
+      "s_257",
+      "s_186"
+    ]
+  },
+  skin: {
+    both: [
+      "s_43",
+      "s_254",
+      "s_332",
+      "s_9",
+      "s_388",
+      "s_229",
+      "s_437",
+      "s_224",
+      "s_180",
+      "s_393",
+      "s_234",
+      "s_248",
+      "s_362"
+    ]
+  },
+  lower_limb: {
+    both: [
+      "s_1081",
+      "s_232",
+      "s_273",
+      "s_1063",
+      "s_579",
+      "s_1453",
+      "s_581",
+      "s_11",
+      "s_175",
+      "s_117",
+      "s_743",
+      "s_40",
+      "s_1463",
+      "s_173",
+      "s_1343",
+      "s_313"
+    ]
+  },
+  lower_leg: {
+    both: [
+      "s_581",
+      "s_579",
+      "s_1453",
+      "s_11",
+      "s_38",
+      "s_175",
+      "s_173",
+      "s_148",
+      "s_743",
+      "s_766",
+      "s_83",
+      "s_503",
+      "s_1463"
+    ]
+  },
+  forearm: {
+    both: [
+      "s_580",
+      "s_1447",
+      "s_40",
+      "s_650",
+      "s_268",
+      "s_973",
+      "s_83",
+      "s_1452",
+      "s_972",
+      "s_1426",
+      "s_87"
+    ]
+  },
+  neck_or_throat: {
+    both: [
+      "s_20",
+      "s_509",
+      "s_1367",
+      "s_68",
+      "s_88",
+      "s_102",
+      "s_962",
+      "s_220",
+      "s_363",
+      "s_298",
+      "s_1483",
+      "s_418"
+    ]
+  },
+  ears: {
+    both: [
+      "s_47",
+      "s_208",
+      "s_297",
+      "s_276",
+      "s_255",
+      "s_407"
+    ]
+  },
+  back: {
+    both: [
+      "s_1190",
+      "s_1772",
+      "s_159",
+      "s_257",
+      "s_186"
+    ]
+  },
+  head: {
+    both: [
+      "s_21",
+      "s_370",
+      "p_74",
+      "s_121",
+      "s_478",
+      "s_616",
+      "s_177",
+      "s_1435",
+      "s_388",
+      "s_188",
+      "s_316",
+      "s_156",
+      "s_1543",
+      "s_438"
+    ]
+  },
+  oral_cavity: {
+    both: [
+      "s_551",
+      "s_228",
+      "s_19",
+      "s_172",
+      "s_111",
+      "s_607",
+      "s_200",
+      "s_1",
+      "s_65",
+      "s_247",
+      "s_266",
+      "s_102",
+      "s_67",
+      "s_305"
+    ]
+  },
+  eyes: {
+    both: [
+      "s_493",
+      "s_492",
+      "s_72",
+      "s_1563",
+      "s_122",
+      "s_1492",
+      "s_54",
+      "s_320",
+      "s_207",
+      "s_1465",
+      "s_479",
+      "s_497",
+      "s_235",
+      "s_483",
+      "s_591",
+      "s_621",
+      "s_192",
+      "s_489",
+      "s_606"
+    ]
+  },
+  chest: {
+    both: [
+      "s_50",
+      "s_110",
+      "s_261",
+      "s_534",
+      "s_102",
+      "s_88",
+      "s_1462",
+      "s_474",
+      "s_338"
+    ]
+  },
+  thigh: {
+    both: [
+      "s_579",
+      "s_1453",
+      "s_11",
+      "s_38",
+      "s_175",
+      "s_173",
+      "s_148",
+      "s_581",
+      "s_743",
+      "s_83",
+      "s_503"
+    ]
+  },
+  sexual_organs: {
+    both: [
+      "s_215",
+      "s_39",
+      "s_368",
+      "s_611",
+      "s_113",
+      "s_367",
+      "s_369",
+      "s_153",
+      "s_182",
+      "s_28"
+    ],
+    female: [
+      "s_328",
+      "s_152",
+      "s_32",
+      "s_324",
+      "s_253",
+      "s_59",
+      "s_158",
+      "s_1217",
+      "s_1457",
+      "s_1440",
+      "s_151"
+    ],
+    male: [
+      "s_52",
+      "s_176",
+      "s_349",
+      "s_733"
+    ]
+  },
+  upper_arm: {
+    both: [
+      "s_580",
+      "s_1447",
+      "s_40",
+      "s_650",
+      "s_268",
+      "s_973",
+      "s_83",
+      "s_1452",
+      "s_972",
+      "s_1426",
+      "s_1654",
+      "s_87"
+    ]
+  },
+  upper_limb: {
+    both: [
+      "s_1447",
+      "s_268",
+      "s_973",
+      "s_1452",
+      "s_580",
+      "s_1426",
+      "s_313"
+    ]
+  },
+  elbow: {
+    both: [
+      "s_1632",
+      "s_40",
+      "s_575",
+      "s_174",
+      "s_1447",
+      "s_580",
+      "s_1452"
+    ]
+  },
+  problem_concerning_behavior_or_thoughts: {
+    both: [
+      "s_119",
+      "s_540",
+      "s_143",
+      "s_236",
+      "s_421",
+      "s_169",
+      "s_633",
+      "s_646",
+      "s_145",
+      "s_316",
+      "s_631",
+      "s_348",
+      "s_127",
+      "s_4",
+      "s_198",
+      "s_222",
+      "s_120",
+      "s_660",
+      "s_716"
+    ]
+  },
+  knee: {
+    both: [
+      "s_38",
+      "s_170",
+      "s_581",
+      "s_323",
+      "s_1610",
+      "s_1744",
+      "s_1745",
+      "s_2267",
+      "s_2309",
+      "s_2552",
+      "s_2591",
+      "s_2592",
+      "s_2610",
+      "s_3046",
+      "s_3059"
+    ]
+  },
+  nose: {
+    both: [
+      "s_107",
+      "s_331",
+      "s_252",
+      "s_1095",
+      "s_1435",
+      "s_1429",
+      "s_1303",
+      "s_1471",
+      "s_715",
+      "s_67",
+      "s_505",
+      "s_88"
+    ]
+  },
+  hand: {
+    both: [
+      "s_1430",
+      "s_1639",
+      "s_554",
+      "s_1449",
+      "s_557",
+      "s_1464",
+      "s_1431",
+      "s_1311",
+      "s_258",
+      "s_553",
+      "s_405",
+      "s_1125",
+      "s_555",
+      "s_87",
+      "s_86",
+      "s_564"
+    ]
+  },
+  nape_of_neck: {
+    both: [
+      "s_1483",
+      "s_363",
+      "s_298",
+      "s_418",
+      "s_186"
+    ]
+  },
+  foot: {
+    both: [
+      "s_1621",
+      "s_79",
+      "s_578",
+      "s_26",
+      "s_405",
+      "s_125"
+    ]
+  },
+  abdomin: {
+    both: [
+      "s_1922",
+      "s_1860",
+      "s_1859",
+      "s_1856",
+      "s_1855",
+      "s_1193",
+      "s_1853",
+      "s_1851",
+      "s_1848",
+      "s_1840"
+    ]
+  },
+  upper_abdomen: {
+    both: [
+      "s_13",
+      "s_1387",
+      "s_16",
+      "s_57",
+      "s_299",
+      "s_277",
+      "s_1514",
+      "s_309",
+      "s_329",
+      "s_8",
+      "s_156",
+      "s_305",
+      "s_338"
+    ]
+  },
+  mid_abdomen: {
+    both: [
+      "s_13",
+      "s_1532",
+      "s_14",
+      "s_299",
+      "s_277",
+      "s_1514",
+      "s_309",
+      "s_329",
+      "s_8",
+      "s_156",
+      "s_305",
+      "s_71",
+      "s_112"
+    ],
+    female: [
+      "s_17"
+    ]
+  },
+  lower_abdomen: {
+    both: [
+      "s_13",
+      "s_1598",
+      "s_15",
+      "s_299",
+      "s_277",
+      "s_1514",
+      "s_309",
+      "s_329",
+      "s_8",
+      "s_156",
+      "s_305",
+      "s_71",
+      "s_112"
+    ],
+    female: [
+      "s_17"
+    ]
+  },
+  anus: {
+    both: [
+      "s_436",
+      "s_115",
+      "s_351",
+      "s_355",
+      "s_249",
+      "s_112",
+      "s_71"
+    ]
+  },
+  COMBINATIONS: {
+    whole_head: [
+      "head",
+      "eyes",
+      "nose",
+      "ears",
+      "oral_cavity"
+    ]
+  }
+};
+
+export const SymptomsData = [
+{
+id: "s_1",
+type: "symptom",
+name: "Mouth ulcer",
+common_name: "Mouth sores",
+},
+{
+id: "s_3",
+type: "symptom",
+name: "Sexual dysfunction, sexual activity despite adverse outcomes",
+common_name: "Activity related to sex despite negative consequences",
+},
+{
+id: "s_4",
+type: "symptom",
+name: "Apathy",
+common_name: "Lack of interest, enthusiasm, or concern",
+},
+{
+id: "s_6",
+type: "symptom",
+name: "Appetite for salty foods",
+common_name: "Appetite for salty foods",
+},
+{
+id: "s_7",
+type: "symptom",
+name: "Female infertility",
+common_name: "Female infertility",
+},
+{
+id: "s_8",
+type: "symptom",
+name: "Diarrhea",
+common_name: "Diarrhea",
+},
+{
+id: "s_9",
+type: "symptom",
+name: "Skin pallor",
+common_name: "Pale skin",
+},
+{
+id: "s_10",
+type: "symptom",
+name: "Pale and brittle nails",
+common_name: "Pale and brittle nails",
+},
+{
+id: "s_11",
+type: "symptom",
+name: "Joint pain, hip",
+common_name: "Hip pain",
+},
+{
+id: "s_13",
+type: "symptom",
+name: "Abdominal pain",
+common_name: "Stomach pain",
+},
+{
+id: "s_14",
+type: "symptom",
+name: "Abdominal pain, exacerbating on an empty stomach",
+common_name: "Abdominal pain on empty stomach",
+},
+{
+id: "s_15",
+type: "symptom",
+name: "Abdominal pain, exacerbating during coughing or movement",
+common_name: "Abdominal pain worsens when coughing or moving",
+},
+{
+id: "s_16",
+type: "symptom",
+name: "Abdominal pain, postprandial",
+common_name: "Abdominal pain after eating",
+},
+{
+id: "s_17",
+type: "symptom",
+name: "Abdominal pain, premenstrual",
+common_name: "Cramps before period",
+},
+{
+id: "s_19",
+type: "symptom",
+name: "Gum pain",
+common_name: "Gum pain",
+},
+{
+id: "s_20",
+type: "symptom",
+name: "Pharyngeal pain",
+common_name: "Sore throat",
+},
+{
+id: "s_21",
+type: "symptom",
+name: "Headache",
+common_name: "Headache",
+},
+{
+id: "s_22",
+type: "symptom",
+name: "Headache, unilateral",
+common_name: "Headache located on only one side",
+},
+{
+id: "s_23",
+type: "symptom",
+name: "Headache, pressing",
+common_name: "Pressing or squeezing headache",
+},
+{
+id: "s_24",
+type: "symptom",
+name: "Headache, generalized",
+common_name: "Headache located all over head",
+},
+{
+id: "s_25",
+type: "symptom",
+name: "Headache, pulsating",
+common_name: "Pulsing headache",
+},
+{
+id: "s_28",
+type: "symptom",
+name: "Crotch pain",
+common_name: "Pain in groin or genital area",
+},
+{
+id: "s_30",
+type: "symptom",
+name: "Chest pain, exacerbating with deep breath or cough",
+common_name: "Chest pain worsening with deep breath or cough",
+},
+{
+id: "s_31",
+type: "symptom",
+name: "Chest pain, continuing during rest",
+common_name: "Chest pain continuing after rest",
+},
+{
+id: "s_32",
+type: "symptom",
+name: "Painful vaginal intercourse",
+common_name: "Painful sex",
+},
+{
+id: "s_33",
+type: "symptom",
+name: "Painful ejaculation",
+common_name: "Pain when ejaculating",
+},
+{
+id: "s_34",
+type: "symptom",
+name: "Crotch pain, sudden",
+common_name: "Sudden pain in crotch",
+},
+{
+id: "s_35",
+type: "symptom",
+name: "Chest pain, during physical activity",
+common_name: "Chest pain during physical activity",
+},
+{
+id: "s_36",
+type: "symptom",
+name: "Chest pain, radiating to the neck",
+common_name: "Chest pain spreading to the neck",
+},
+{
+id: "s_37",
+type: "symptom",
+name: "Chest pain, radiating between shoulder blades",
+common_name: "Chest pain spreading to between the shoulder blades",
+},
+{
+id: "s_38",
+type: "symptom",
+name: "Back pain, lumbar, radiates to back of the thigh",
+common_name: "Lower back pain spreading to the back of the thigh or knee",
+},
+{
+id: "s_39",
+type: "symptom",
+name: "Painful urination",
+common_name: "Pain when urinating",
+},
+{
+id: "s_41",
+type: "symptom",
+name: "Joint pain, severe, after trauma",
+common_name: "Severe joint pain after an injury",
+},
+{
+id: "s_43",
+type: "symptom",
+name: "Skin pain, severe",
+common_name: "Severe skin pain",
+},
+{
+id: "s_44",
+type: "symptom",
+name: "Joint pain",
+common_name: "Joint pain",
+},
+{
+id: "s_47",
+type: "symptom",
+name: "Earache",
+common_name: "Earache",
+},
+{
+id: "s_50",
+type: "symptom",
+name: "Chest pain",
+common_name: "Chest pain",
+},
+{
+id: "s_51",
+type: "symptom",
+name: "Chest pain, diffuse",
+common_name: "Widespread chest pain",
+},
+{
+id: "s_52",
+type: "symptom",
+name: "Crotch pain, testicular or scrotal",
+common_name: "Pain in scrotum or testicle",
+},
+{
+id: "s_53",
+type: "symptom",
+name: "Back pain, lumbar",
+common_name: "Lower back pain",
+},
+{
+id: "s_54",
+type: "symptom",
+name: "Pain near eye socket",
+common_name: "Pain around or behind eye",
+},
+{
+id: "s_56",
+type: "symptom",
+name: "Toothache, associated with chewing",
+common_name: "Toothache when chewing",
+},
+{
+id: "s_57",
+type: "symptom",
+name: "Abdominal pain, reduced by defecation or relieving flatulence",
+common_name: "Abdominal pain improves after bowel movement or passing gas",
+},
+{
+id: "s_60",
+type: "symptom",
+name: "Crotch pain, glans penis",
+common_name: "Pain in head of penis",
+},
+{
+id: "s_64",
+type: "symptom",
+name: "Vaginal discharge, unpleasant odour",
+common_name: "Vaginal discharge with unpleasant odour",
+},
+{
+id: "s_65",
+type: "symptom",
+name: "Halitosis",
+common_name: "Bad breath",
+},
+{
+id: "s_67",
+type: "symptom",
+name: "Snoring",
+common_name: "Hoarse or harsh sounds when sleeping",
+},
+{
+id: "s_68",
+type: "symptom",
+name: "Dysphonia",
+common_name: "Hoarse voice",
+},
+{
+id: "s_69",
+type: "symptom",
+name: "Preoccupation with food",
+common_name: "Preoccupation with food",
+},
+{
+id: "s_71",
+type: "symptom",
+name: "Black-coloured stool",
+common_name: "Black stool",
+},
+{
+id: "s_72",
+type: "symptom",
+name: "Red and stinging conjunctivae",
+common_name: "Red and stinging eyes",
+},
+{
+id: "s_73",
+type: "symptom",
+name: "Red stretch marks on abdomen, hips, or thighs",
+common_name: "Red stretch marks on stomach, hips, or thighs",
+},
+{
+id: "s_74",
+type: "symptom",
+name: "Sexual dysfunction, unrestrained sexual encounters",
+common_name: "Sexual activity more often or with more partners than intended",
+},
+{
+id: "s_75",
+type: "symptom",
+name: "Polyuria",
+common_name: "Passing more urine than usual in a day",
+},
+{
+id: "s_79",
+type: "symptom",
+name: "Joint pain, hallux",
+common_name: "Big toe pain",
+},
+{
+id: "s_80",
+type: "symptom",
+name: "Sexual dysfunction, irritability due to lack of sexual activity",
+common_name: "Irritability, when unable to engage in sexual activities",
+},
+{
+id: "s_81",
+type: "symptom",
+name: "Chills",
+common_name: "Chills",
+},
+{
+id: "s_84",
+type: "symptom",
+name: "Tremors, subsides after drinking alcohol",
+common_name: "Trembling subsiding after alcohol",
+},
+{
+id: "s_85",
+type: "symptom",
+name: "Tremors, head",
+common_name: "Head tremors",
+},
+{
+id: "s_86",
+type: "symptom",
+name: "Tremors, one hand",
+common_name: "Trembling of one hand",
+},
+{
+id: "s_87",
+type: "symptom",
+name: "Tremors, both hands",
+common_name: "Trembling of both hands",
+},
+{
+id: "s_88",
+type: "symptom",
+name: "Dyspnea",
+common_name: "Shortness of breath",
+},
+{
+id: "s_90",
+type: "symptom",
+name: "Dyspnea, lasting between 1 day and 4 weeks",
+common_name: "Shortness of breath lasting between 1 day and 4 weeks",
+},
+{
+id: "s_92",
+type: "symptom",
+name: "Dyspnea, started less than 1 hour ago",
+common_name: "Shortness of breath started less than 1 hour ago",
+},
+{
+id: "s_93",
+type: "symptom",
+name: "Smoking, large quantities",
+common_name: "Smoking more than 20 cigarettes a day",
+},
+{
+id: "s_95",
+type: "symptom",
+name: "Discomfort while speaking, maxillo-facial",
+common_name: "Discomfort in the lower half of the face or mouth while speaking",
+},
+{
+id: "s_97",
+type: "symptom",
+name: "Deep filling of treated tooth",
+common_name: "Deep filling of treated tooth",
+},
+{
+id: "s_98",
+type: "symptom",
+name: "Fever",
+common_name: "Fever",
+},
+{
+id: "s_99",
+type: "symptom",
+name: "Fever, between 37°C and 38°C or between 98.6°F and 100.4°F",
+common_name: "Body temperature between 37°C and 38°C or 98.6°F and 100.4°F",
+},
+{
+id: "s_100",
+type: "symptom",
+name: "Fever, between 38°C and 40°C or between 100.4°F and 104°F",
+common_name: "Fever between 38°C and 40°C or between 100.4 and 104°F",
+},
+{
+id: "s_101",
+type: "symptom",
+name: "Skin mass, smaller than 1 cm",
+common_name: "Bump smaller than 1 cm",
+},
+{
+id: "s_102",
+type: "symptom",
+name: "Cough",
+common_name: "Cough",
+},
+{
+id: "s_103",
+type: "symptom",
+name: "Cough, lasting less than 3 weeks",
+common_name: "Cough lasting less than 3 weeks",
+},
+{
+id: "s_104",
+type: "symptom",
+name: "Cough, productive",
+common_name: "Coughing up phlegm",
+},
+{
+id: "s_105",
+type: "symptom",
+name: "Cough, dry",
+common_name: "Dry cough",
+},
+{
+id: "s_106",
+type: "symptom",
+name: "Cough, lasting more than 8 weeks",
+common_name: "Cough lasting more than 8 weeks",
+},
+{
+id: "s_107",
+type: "symptom",
+name: "Nasal catarrh",
+common_name: "Runny nose",
+},
+{
+id: "s_108",
+type: "symptom",
+name: "Deepening of periodontal pockets",
+common_name: "Deepened spaces between the gums and the teeth",
+},
+{
+id: "s_109",
+type: "symptom",
+name: "Alcohol consumption, drinking to ease hangover",
+common_name: "Drinking alcohol to ease hangover",
+},
+{
+id: "s_110",
+type: "symptom",
+name: "Palpitations",
+common_name: "Palpitations",
+},
+{
+id: "s_111",
+type: "symptom",
+name: "Bleeding gums",
+common_name: "Bleeding gums",
+},
+{
+id: "s_112",
+type: "symptom",
+name: "Red-coloured stool",
+common_name: "Red stool",
+},
+{
+id: "s_113",
+type: "symptom",
+name: "Red-coloured urine",
+common_name: "Red urine",
+},
+{
+id: "s_115",
+type: "symptom",
+name: "Bleeding from anus",
+common_name: "Bleeding from anus",
+},
+{
+id: "s_116",
+type: "symptom",
+name: "Hemoptysis",
+common_name: "Coughing up blood",
+},
+{
+id: "s_118",
+type: "symptom",
+name: "Cold sensitivity",
+common_name: "Cold sensitivity",
+},
+{
+id: "s_120",
+type: "symptom",
+name: "Anxiety",
+common_name: "Anxiety",
+},
+{
+id: "s_121",
+type: "symptom",
+name: "Hair loss",
+common_name: "Hair loss",
+},
+{
+id: "s_122",
+type: "symptom",
+name: "Excessive tear production",
+common_name: "Watery eyes",
+},
+{
+id: "s_123",
+type: "symptom",
+name: "Self-neglect",
+common_name: "Lack of self-care",
+},
+{
+id: "s_124",
+type: "symptom",
+name: "Scotoma",
+common_name: "Black spots in vision",
+},
+{
+id: "s_125",
+type: "symptom",
+name: "Paresthesia, both feet",
+common_name: "Feet tingling or numbness",
+},
+{
+id: "s_126",
+type: "symptom",
+name: "Paresthesia, around the mouth",
+common_name: "Tingling or numbness around the mouth",
+},
+{
+id: "s_127",
+type: "symptom",
+name: "Obsessions",
+common_name: "Obsessive thoughts",
+},
+{
+id: "s_131",
+type: "symptom",
+name: "Sleep attacks",
+common_name: "Falling asleep during the day",
+},
+{
+id: "s_132",
+type: "symptom",
+name: "Excess hair growth",
+common_name: "Excessive hair",
+},
+{
+id: "s_134",
+type: "symptom",
+name: "Smoking, need first cigarette of the day",
+common_name: "Difficulty not smoking first cigarette of the day",
+},
+{
+id: "s_136",
+type: "symptom",
+name: "Sneezing attacks",
+common_name: "Sneezing fits",
+},
+{
+id: "s_137",
+type: "symptom",
+name: "Binge eating",
+common_name: "Binge eating",
+},
+{
+id: "s_139",
+type: "symptom",
+name: "Recurrent tonsils inflammation",
+common_name: "Recurrent tonsils inflammation",
+},
+{
+id: "s_142",
+type: "symptom",
+name: "Recurrent gastric ulcers",
+common_name: "Recurrent gastric ulcers",
+},
+{
+id: "s_146",
+type: "symptom",
+name: "Impaired memory, forgetting names of friends and family",
+common_name: "Forgetting names of friends and family",
+},
+{
+id: "s_147",
+type: "symptom",
+name: "History of anemia",
+common_name: "History of anemia",
+},
+{
+id: "s_150",
+type: "symptom",
+name: "Alcohol consumption, inability to stop drinking",
+common_name: "Inability to stop drinking alcohol",
+},
+{
+id: "s_151",
+type: "symptom",
+name: "Abnormal uterine bleeding or spotting, postmenopausal",
+common_name: "Vaginal bleeding after menopause",
+},
+{
+id: "s_152",
+type: "symptom",
+name: "Vaginal bleeding after intercourse",
+common_name: "Bleeding after intercourse",
+},
+{
+id: "s_153",
+type: "symptom",
+name: "Urinary incontinence",
+common_name: "Leaking urine by accident",
+},
+{
+id: "s_155",
+type: "symptom",
+name: "Low sense of self-worth",
+common_name: "Low self-esteem",
+},
+{
+id: "s_156",
+type: "symptom",
+name: "Nausea",
+common_name: "Feeling sick or queasy",
+},
+{
+id: "s_157",
+type: "symptom",
+name: "Fear of obesity",
+common_name: "Fear of obesity",
+},
+{
+id: "s_159",
+type: "symptom",
+name: "Back pain, exacerbated by physical exertion",
+common_name: "Back pain worsening after physical activity",
+},
+{
+id: "s_161",
+type: "symptom",
+name: "Symptoms regularly appearing a few days before menstrual period",
+common_name: "Symptoms regularly appearing a few days before period",
+},
+{
+id: "s_169",
+type: "symptom",
+name: "Episodes of depressed mood",
+common_name: "Depressed mood",
+},
+{
+id: "s_170",
+type: "symptom",
+name: "Edema, knee joint",
+common_name: "Swollen knee",
+},
+{
+id: "s_171",
+type: "symptom",
+name: "Edema, one ankle",
+common_name: "Swollen ankle",
+},
+{
+id: "s_172",
+type: "symptom",
+name: "Swollen gums",
+common_name: "Swollen gums",
+},
+{
+id: "s_173",
+type: "symptom",
+name: "Edema, one lower limb",
+common_name: "Swollen leg",
+},
+{
+id: "s_175",
+type: "symptom",
+name: "Edema, both lower limbs",
+common_name: "Swollen legs",
+},
+{
+id: "s_176",
+type: "symptom",
+name: "Edema, scrotum",
+common_name: "Swollen scrotum",
+},
+{
+id: "s_177",
+type: "symptom",
+name: "Swollen cheek",
+common_name: "Swollen cheek",
+},
+{
+id: "s_180",
+type: "symptom",
+name: "Hypopigmentation of the skin",
+common_name: "Lightening of the skin",
+},
+{
+id: "s_181",
+type: "symptom",
+name: "Sexual dysfunction, persistent sexual desire",
+common_name: "Constant need for sex",
+},
+{
+id: "s_182",
+type: "symptom",
+name: "Nocturia",
+common_name: "Urinating often at night",
+},
+{
+id: "s_183",
+type: "symptom",
+name: "Urination while coughing, laughing, or during physical exertion",
+common_name: "Urination while coughing, laughing, or during physical activity",
+},
+{
+id: "s_185",
+type: "symptom",
+name: "Oliguria",
+common_name: "Urinating less than usual",
+},
+{
+id: "s_186",
+type: "symptom",
+name: "Restricted mobility, difficulty bending over",
+common_name: "Difficulty bending down",
+},
+{
+id: "s_189",
+type: "symptom",
+name: "Seizures, with loss of consciousness",
+common_name: "Seizures with loss of consciousness",
+},
+{
+id: "s_190",
+type: "symptom",
+name: "Loss of consciousness, with urination or defecation",
+common_name: "Fainting with loss of bladder or bowel control",
+},
+{
+id: "s_191",
+type: "symptom",
+name: "Head drop",
+common_name: "Head drop",
+},
+{
+id: "s_192",
+type: "symptom",
+name: "Blepharoptosis",
+common_name: "Drooping eyelids",
+},
+{
+id: "s_194",
+type: "symptom",
+name: "Ulcer, nipple",
+common_name: "Ulcer on the nipple",
+},
+{
+id: "s_195",
+type: "symptom",
+name: "Current cigarette smoking",
+common_name: "Current cigarette smoking",
+},
+{
+id: "s_196",
+type: "symptom",
+name: "Smoking, during illness",
+common_name: "Smoking even when sick",
+},
+{
+id: "s_200",
+type: "symptom",
+name: "Burning tongue",
+common_name: "Burning sensation on tongue",
+},
+{
+id: "s_201",
+type: "symptom",
+name: "Feeling of sand under eyelids",
+common_name: "Feeling of sand under eyelids",
+},
+{
+id: "s_202",
+type: "symptom",
+name: "Erythema migrans",
+common_name: "Expanding red spot with regular skin or clearing in the middle",
+},
+{
+id: "s_203",
+type: "symptom",
+name: "Dental plaque",
+common_name: "Fuzzy teeth",
+},
+{
+id: "s_204",
+type: "symptom",
+name: "Forward-leaning posture",
+common_name: "Forward-leaning posture",
+},
+{
+id: "s_205",
+type: "symptom",
+name: "Feeling of guilt",
+common_name: "Feeling of guilt",
+},
+{
+id: "s_207",
+type: "symptom",
+name: "Diplopia",
+common_name: "Double vision",
+},
+{
+id: "s_208",
+type: "symptom",
+name: "Decreased hearing",
+common_name: "Decreased hearing",
+},
+{
+id: "s_213",
+type: "symptom",
+name: "Sexual dysfunction, spending much time on erotic activities",
+common_name: "Spending a lot of time on sex-related activity",
+},
+{
+id: "s_214",
+type: "symptom",
+name: "Sweating on painful side of forehead",
+common_name: "Sweating on painful side of forehead",
+},
+{
+id: "s_215",
+type: "symptom",
+name: "Frequent urination",
+common_name: "Urinating often",
+},
+{
+id: "s_216",
+type: "symptom",
+name: "Excessive sweating",
+common_name: "Heavy sweating",
+},
+{
+id: "s_217",
+type: "symptom",
+name: "Night sweats",
+common_name: "Night sweats",
+},
+{
+id: "s_219",
+type: "symptom",
+name: "Enlarged breasts",
+common_name: "Enlarged breasts",
+},
+{
+id: "s_220",
+type: "symptom",
+name: "Enlarged lymph nodes",
+common_name: "Enlarged lymph nodes",
+},
+{
+id: "s_221",
+type: "symptom",
+name: "Dermatological changes, on genitals resembling cauliflower",
+common_name: "Bumps on genitals resembling a cauliflower",
+},
+{
+id: "s_223",
+type: "symptom",
+name: "Inability to stop flow of urine",
+common_name: "Inability to stop flow of urine",
+},
+{
+id: "s_225",
+type: "symptom",
+name: "Premature graying",
+common_name: "Premature graying",
+},
+{
+id: "s_226",
+type: "symptom",
+name: "Weight gain",
+common_name: "Weight gain",
+},
+{
+id: "s_227",
+type: "symptom",
+name: "Tachypnea",
+common_name: "Rapid breathing",
+},
+{
+id: "s_228",
+type: "symptom",
+name: "Loose tooth unrelated to a tooth exchange",
+common_name: "Loose teeth",
+},
+{
+id: "s_229",
+type: "symptom",
+name: "Erythema",
+common_name: "Redness of skin",
+},
+{
+id: "s_230",
+type: "symptom",
+name: "Erythema, facial, butterfly-shaped",
+common_name: "Redness only on the cheeks and nose",
+},
+{
+id: "s_231",
+type: "symptom",
+name: "Toothache, associated with heat",
+common_name: "Toothache associated with heat",
+},
+{
+id: "s_232",
+type: "symptom",
+name: "Calf pain, severe while walking",
+common_name: "Severe pain in calf while walking",
+},
+{
+id: "s_233",
+type: "symptom",
+name: "Toothache, severe",
+common_name: "Severe toothache",
+},
+{
+id: "s_234",
+type: "symptom",
+name: "Easy bruising",
+common_name: "Easy bruising",
+},
+{
+id: "s_235",
+type: "symptom",
+name: "Eyelid twitching",
+common_name: "Trembling eyelids",
+},
+{
+id: "s_236",
+type: "symptom",
+name: "Decreased libido",
+common_name: "Loss of interest in sex",
+},
+{
+id: "s_237",
+type: "symptom",
+name: "Weight loss, without loss of appetite",
+common_name: "Weight loss without loss of appetite",
+},
+{
+id: "s_238",
+type: "symptom",
+name: "Slower gait",
+common_name: "Slower walk",
+},
+{
+id: "s_241",
+type: "symptom",
+name: "Dermatological changes",
+common_name: "Skin changes",
+},
+{
+id: "s_243",
+type: "symptom",
+name: "Unhealthy weight loss practices",
+common_name: "Unhealthy weight loss practices",
+},
+{
+id: "s_244",
+type: "symptom",
+name: "Fear of specific object, situation, or action",
+common_name: "Specific fear",
+},
+{
+id: "s_245",
+type: "symptom",
+name: "Dermatological changes, scabs",
+common_name: "Scab or crust",
+},
+{
+id: "s_247",
+type: "symptom",
+name: "Dry mouth",
+common_name: "Dry mouth",
+},
+{
+id: "s_249",
+type: "symptom",
+name: "Itching around anus",
+common_name: "Itchy anus",
+},
+{
+id: "s_250",
+type: "symptom",
+name: "Pruritus, most intense at night",
+common_name: "Itching most intense at night",
+},
+{
+id: "s_251",
+type: "symptom",
+name: "Pruritus, aggravated by change in temperature, sweating, or wearing wool",
+common_name: "Itching aggravated by changes in temperature, sweat or wearing wool",
+},
+{
+id: "s_252",
+type: "symptom",
+name: "Itching nose or throat",
+common_name: "Itchy nose or throat",
+},
+{
+id: "s_253",
+type: "symptom",
+name: "Genital itch",
+common_name: "Itching in crotch",
+},
+{
+id: "s_254",
+type: "symptom",
+name: "Pruritus",
+common_name: "Itching",
+},
+{
+id: "s_255",
+type: "symptom",
+name: "Itching inside ear",
+common_name: "Itchy inner ear",
+},
+{
+id: "s_256",
+type: "symptom",
+name: "Trismus",
+common_name: "Difficulty in opening mouth",
+},
+{
+id: "s_257",
+type: "symptom",
+name: "Spine stiffness in the morning",
+common_name: "Stiff spine in the morning",
+},
+{
+id: "s_258",
+type: "symptom",
+name: "Joint stiffness, hand stiffness in the morning",
+common_name: "Stiff hands in the morning",
+},
+{
+id: "s_259",
+type: "symptom",
+name: "Joint stiffness, subsides after exercising",
+common_name: "Joint stiffness disappears after exercise",
+},
+{
+id: "s_261",
+type: "symptom",
+name: "Tachycardia",
+common_name: "Fast heart rate",
+},
+{
+id: "s_263",
+type: "symptom",
+name: "Phimosis",
+common_name: "Difficulty retracting foreskin",
+},
+{
+id: "s_265",
+type: "symptom",
+name: "Smoking, in non-smoking areas",
+common_name: "Smoking in non-smoking areas",
+},
+{
+id: "s_266",
+type: "symptom",
+name: "Difficulty biting and chewing",
+common_name: "Difficulty biting and chewing",
+},
+{
+id: "s_267",
+type: "symptom",
+name: "Toothache, difficulty determining which tooth hurts",
+common_name: "Difficulty identifying which tooth hurts",
+},
+{
+id: "s_269",
+type: "symptom",
+name: "Difficulty acquiring new information",
+common_name: "Difficulty learning new things",
+},
+{
+id: "s_270",
+type: "symptom",
+name: "Creaking joints during movement",
+common_name: "Creaking joints during movement",
+},
+{
+id: "s_271",
+type: "symptom",
+name: "Smooth face without wrinkles",
+common_name: "Smooth face without wrinkles",
+},
+{
+id: "s_272",
+type: "symptom",
+name: "Enamel lesions, caries",
+common_name: "Cavities",
+},
+{
+id: "s_273",
+type: "symptom",
+name: "Heavy legs at the end of the day",
+common_name: "Heavy legs at the end of the day",
+},
+{
+id: "s_274",
+type: "symptom",
+name: "Feeling hot",
+common_name: "Feeling hot",
+},
+{
+id: "s_276",
+type: "symptom",
+name: "Clogged ear",
+common_name: "Clogged ear",
+},
+{
+id: "s_277",
+type: "symptom",
+name: "Increased abdominal girth",
+common_name: "Increased abdominal size",
+},
+{
+id: "s_279",
+type: "symptom",
+name: "Feeling pressure or pulsation inside the tooth",
+common_name: "Feeling pressure or pulsation inside the tooth",
+},
+{
+id: "s_280",
+type: "symptom",
+name: "Hot flashes",
+common_name: "Hot flashes",
+},
+{
+id: "s_284",
+type: "symptom",
+name: "Diminished appetite",
+common_name: "Diminished appetite",
+},
+{
+id: "s_285",
+type: "symptom",
+name: "Weight loss",
+common_name: "Weight loss",
+},
+{
+id: "s_287",
+type: "symptom",
+name: "Anhedonia, lasting at least 2 weeks",
+common_name: "Inability to feel pleasure for 2 weeks or more",
+},
+{
+id: "s_289",
+type: "symptom",
+name: "Malocclusions",
+common_name: "Malocclusions",
+},
+{
+id: "s_291",
+type: "symptom",
+name: "Ear canal swelling",
+common_name: "Swelling inside the ear",
+},
+{
+id: "s_297",
+type: "symptom",
+name: "Discharge from ear",
+common_name: "Discharge from ear",
+},
+{
+id: "s_299",
+type: "symptom",
+name: "Abdominal mass",
+common_name: "Lump in stomach",
+},
+{
+id: "s_300",
+type: "symptom",
+name: "Nodule located in breast",
+common_name: "Lump in the breast",
+},
+{
+id: "s_301",
+type: "symptom",
+name: "Discharge under foreskin",
+common_name: "Discharge under foreskin",
+},
+{
+id: "s_302",
+type: "symptom",
+name: "Discharge from periodontal pockets",
+common_name: "Discharge from spaces between the gums and teeth",
+},
+{
+id: "s_303",
+type: "symptom",
+name: "Compulsions",
+common_name: "Compulsive behavior",
+},
+{
+id: "s_305",
+type: "symptom",
+name: "Vomiting",
+common_name: "Vomiting",
+},
+{
+id: "s_306",
+type: "symptom",
+name: "Hematemesis",
+common_name: "Vomiting blood",
+},
+{
+id: "s_308",
+type: "symptom",
+name: "Smoking, mostly in the morning",
+common_name: "Smoking mostly in the morning",
+},
+{
+id: "s_309",
+type: "symptom",
+name: "Bloating",
+common_name: "Bloating",
+},
+{
+id: "s_310",
+type: "symptom",
+name: "Increased thirst",
+common_name: "More thirsty than usual",
+},
+{
+id: "s_311",
+type: "symptom",
+name: "Increased appetite",
+common_name: "More hungry than usual",
+},
+{
+id: "s_313",
+type: "symptom",
+name: "Sensory loss in one limb",
+common_name: "Loss of feeling in one arm or leg",
+},
+{
+id: "s_316",
+type: "symptom",
+name: "Impaired memory",
+common_name: "Impaired memory",
+},
+{
+id: "s_317",
+type: "symptom",
+name: "Impaired balance while walking",
+common_name: "Stumbling or losing balance while walking",
+},
+{
+id: "s_319",
+type: "symptom",
+name: "Sleep disorder",
+common_name: "Changes and difficulties in sleeping pattern or habit",
+},
+{
+id: "s_320",
+type: "symptom",
+name: "Impaired vision",
+common_name: "Visual impairment",
+},
+{
+id: "s_322",
+type: "symptom",
+name: "Gum erythema",
+common_name: "Red gums",
+},
+{
+id: "s_323",
+type: "symptom",
+name: "Erythema, joint",
+common_name: "Redness of skin over joint",
+},
+{
+id: "s_325",
+type: "symptom",
+name: "Erythema, limb",
+common_name: "Red skin on arms or legs",
+},
+{
+id: "s_326",
+type: "symptom",
+name: "Sexual dysfunction, prioritizing sex over duties and hobbies",
+common_name: "Neglecting family  work or hobbies due to sex",
+},
+{
+id: "s_327",
+type: "symptom",
+name: "Smoking, need when waking up",
+common_name: "Smoking as soon as waking up",
+},
+{
+id: "s_328",
+type: "symptom",
+name: "Abnormal vaginal discharge",
+common_name: "Abnormal vaginal discharge",
+},
+{
+id: "s_329",
+type: "symptom",
+name: "Constipation",
+common_name: "Constipation",
+},
+{
+id: "s_330",
+type: "symptom",
+name: "Regurgitation",
+common_name: "Food coming back up into the mouth",
+},
+{
+id: "s_331",
+type: "symptom",
+name: "Nasal congestion",
+common_name: "Blocked nose",
+},
+{
+id: "s_332",
+type: "symptom",
+name: "Jaundice",
+common_name: "Jaundice",
+},
+{
+id: "s_334",
+type: "symptom",
+name: "Jaundice, stress-related",
+common_name: "Yellow skin or eyes during times of increased stress",
+},
+{
+id: "s_335",
+type: "symptom",
+name: "Jaundice, following intense physical exertion",
+common_name: "Yellow skin or eyes after physical activity",
+},
+{
+id: "s_336",
+type: "symptom",
+name: "Jaundice, during infectious disease",
+common_name: "Yellow skin or eyes during infectious disease",
+},
+{
+id: "s_338",
+type: "symptom",
+name: "Heartburn",
+common_name: "Heartburn",
+},
+{
+id: "s_341",
+type: "symptom",
+name: "Illusion of surroundings being bigger or smaller than they actually are",
+common_name: "Illusion of surroundings being bigger or smaller than they actually are",
+},
+{
+id: "s_342",
+type: "symptom",
+name: "Wrinkling or dimpling of skin on breast",
+common_name: "Wrinkling or dimpling of skin on breast",
+},
+{
+id: "s_343",
+type: "symptom",
+name: "Retraction or indentation of nipple",
+common_name: "Change in the nipple",
+},
+{
+id: "s_345",
+type: "symptom",
+name: "Change in handwriting",
+common_name: "Change in handwriting",
+},
+{
+id: "s_346",
+type: "symptom",
+name: "Change in colour of a tooth",
+common_name: "Change in colour of a tooth",
+},
+{
+id: "s_348",
+type: "symptom",
+name: "Personality changes",
+common_name: "Personality changes",
+},
+{
+id: "s_350",
+type: "symptom",
+name: "Dermatological changes, forming a line",
+common_name: "Skin changes forming a line",
+},
+{
+id: "s_351",
+type: "symptom",
+name: "Ulcer, sore, or abscess near the anus",
+common_name: "Ulcer, sore, or abscess near the anus",
+},
+{
+id: "s_352",
+type: "symptom",
+name: "Dermatological changes, in direct contact with buttons, fasteners, or cosmetics",
+common_name: "Skin changes in direct contact with buttons, fasteners, jewelry, or cosmetics",
+},
+{
+id: "s_358",
+type: "symptom",
+name: "Intermittent urine flow",
+common_name: "Intermittent urine flow",
+},
+{
+id: "s_359",
+type: "symptom",
+name: "Joint deformity, non-traumatic",
+common_name: "Joint deformity not associated with recent trauma",
+},
+{
+id: "s_360",
+type: "symptom",
+name: "Microstomia",
+common_name: "Narrow mouth",
+},
+{
+id: "s_361",
+type: "symptom",
+name: "Sexual dysfunction, increased longing for stimulation",
+common_name: "Increased need in sexual experiences or sensations to attain desired effect",
+},
+{
+id: "s_362",
+type: "symptom",
+name: "Oily skin",
+common_name: "Greasy or oily skin",
+},
+{
+id: "s_363",
+type: "symptom",
+name: "Edema, neck",
+common_name: "Swollen neck",
+},
+{
+id: "s_369",
+type: "symptom",
+name: "Discharge from urethra",
+common_name: "Discharge from urethra",
+},
+{
+id: "s_370",
+type: "symptom",
+name: "Dizziness",
+common_name: "Dizzy",
+},
+{
+id: "s_371",
+type: "symptom",
+name: "Overworked",
+common_name: "Overworked",
+},
+{
+id: "s_373",
+type: "symptom",
+name: "Honey-coloured crust on the skin",
+common_name: "Honey-coloured scabs on the skin",
+},
+{
+id: "s_376",
+type: "symptom",
+name: "Skin phototype I or II",
+common_name: "Light or fair skin that easily burns",
+},
+{
+id: "s_377",
+type: "symptom",
+name: "Numerous nevi",
+common_name: "Many moles or birthmarks",
+},
+{
+id: "s_380",
+type: "symptom",
+name: "Suspicious mole or birthmark, asymmetrical",
+common_name: "Asymmetric mole or birthmark",
+},
+{
+id: "s_381",
+type: "symptom",
+name: "Suspicious mole or birthmark, irregular border",
+common_name: "Mole or birthmark with irregular border",
+},
+{
+id: "s_382",
+type: "symptom",
+name: "Suspicious mole or birthmark, larger than 6 mm",
+common_name: "Mole or birthmark larger than 6 mm",
+},
+{
+id: "s_383",
+type: "symptom",
+name: "Suspicious mole or birthmark",
+common_name: "Suspicious mole or birthmark",
+},
+{
+id: "s_384",
+type: "symptom",
+name: "Red macules with silver-white, flaky scales",
+common_name: "Red skin patches with silver-white, flaky scales",
+},
+{
+id: "s_385",
+type: "symptom",
+name: "Dry, cracked skin, bleeding occasionally",
+common_name: "Dry, cracked skin, bleeding occasionally",
+},
+{
+id: "s_386",
+type: "symptom",
+name: "Thickened nails, with pits or grooves",
+common_name: "Thickened nails with pits or grooves",
+},
+{
+id: "s_388",
+type: "symptom",
+name: "Pustule",
+common_name: "Small bumps less than 1 cm filled with pus",
+},
+{
+id: "s_389",
+type: "symptom",
+name: "Open comedones",
+common_name: "Blackheads",
+},
+{
+id: "s_393",
+type: "symptom",
+name: "Urticaria",
+common_name: "Hives",
+},
+{
+id: "s_398",
+type: "symptom",
+name: "Dermatological changes, entire body",
+common_name: "Skin changes all over the body",
+},
+{
+id: "s_400",
+type: "symptom",
+name: "Dermatological changes, preceded by pain or itching",
+common_name: "Skin changes preceded by pain or itching",
+},
+{
+id: "s_402",
+type: "symptom",
+name: "Dermatological changes, recurring during infections or menstrual period",
+common_name: "Skin changes recurring during period or infections",
+},
+{
+id: "s_404",
+type: "symptom",
+name: "Dermatological changes, rough and irregular surface",
+common_name: "Skin changes with rough, irregular surface",
+},
+{
+id: "s_407",
+type: "symptom",
+name: "Tinnitus",
+common_name: "Ringing in ears",
+},
+{
+id: "s_408",
+type: "symptom",
+name: "Cold feet and toes",
+common_name: "Cold feet and toes",
+},
+{
+id: "s_410",
+type: "symptom",
+name: "Reduced body temperature",
+common_name: "Reduced body temperature",
+},
+{
+id: "s_412",
+type: "symptom",
+name: "Diarrhea, foamy",
+common_name: "Foamy diarrhea",
+},
+{
+id: "s_418",
+type: "symptom",
+name: "Stiff neck",
+common_name: "Stiff neck",
+},
+{
+id: "s_419",
+type: "symptom",
+name: "Feeling overweight despite normal to low weight",
+common_name: "Feeling overweight despite normal to low weight",
+},
+{
+id: "s_420",
+type: "symptom",
+name: "Lying about eating or hiding food",
+common_name: "Lying about eating or hiding food",
+},
+{
+id: "s_421",
+type: "symptom",
+name: "Increased libido",
+common_name: "Increased sex drive",
+},
+{
+id: "s_422",
+type: "symptom",
+name: "Deepening of voice",
+common_name: "Deepened voice",
+},
+{
+id: "s_423",
+type: "symptom",
+name: "Sense of self-worth dependent on weight",
+common_name: "Self-worth based on weight",
+},
+{
+id: "s_424",
+type: "symptom",
+name: "Facial pain, unilateral",
+common_name: "Face pain on one side",
+},
+{
+id: "s_425",
+type: "symptom",
+name: "Facial pain, stabbing",
+common_name: "Stabbing face pain",
+},
+{
+id: "s_426",
+type: "symptom",
+name: "Facial pain, triggered by eating, or touching or brushing teeth",
+common_name: "Face pain triggered by eating, or touching or brushing teeth",
+},
+{
+id: "s_427",
+type: "symptom",
+name: "Facial pain, periodic",
+common_name: "Periodic face pain",
+},
+{
+id: "s_429",
+type: "symptom",
+name: "Clicking or cracking in the jaw when opening or closing the mouth",
+common_name: "Clicking or cracking in the jaw when opening or closing the mouth",
+},
+{
+id: "s_430",
+type: "symptom",
+name: "Pain in temporomandibular joint during movement",
+common_name: "Pain in jaw during movement",
+},
+{
+id: "s_433",
+type: "symptom",
+name: "Erythema, foreskin or head of the penis",
+common_name: "Reddened foreskin or head of the penis",
+},
+{
+id: "s_435",
+type: "symptom",
+name: "Feeling of incomplete evacuation of the bladder",
+common_name: "Bladder not emptying completely",
+},
+{
+id: "s_436",
+type: "symptom",
+name: "Anorectal pain",
+common_name: "Anorectal pain",
+},
+{
+id: "s_437",
+type: "symptom",
+name: "Cyanosis",
+common_name: "Bluish-grey coloured skin",
+},
+{
+id: "s_471",
+type: "symptom",
+name: "Abdominal pain, radiating to right shoulder or shoulder blade",
+common_name: "Abdominal pain spreading to the right shoulder area",
+},
+{
+id: "s_474",
+type: "symptom",
+name: "Audible wheezing",
+common_name: "Whistling sound made while breathing",
+},
+{
+id: "s_476",
+type: "symptom",
+name: "Earache, tenderness around the ear",
+common_name: "Pain when pressing area around the ear",
+},
+{
+id: "s_477",
+type: "symptom",
+name: "Aphonia",
+common_name: "Loss of voice",
+},
+{
+id: "s_478",
+type: "symptom",
+name: "Facial pain",
+common_name: "Face pain",
+},
+{
+id: "s_479",
+type: "symptom",
+name: "Nystagmus",
+common_name: "Nystagmus",
+},
+{
+id: "s_480",
+type: "symptom",
+name: "Enlargement of hands, feet, or face",
+common_name: "Enlargement of hands, feet, or face",
+},
+{
+id: "s_483",
+type: "symptom",
+name: "Dermatological changes, eyelid",
+common_name: "Skin changes on eyelid",
+},
+{
+id: "s_484",
+type: "symptom",
+name: "Eyelid lesion, red lump with yellow tip",
+common_name: "Red lump with yellow tip on eyelid",
+},
+{
+id: "s_485",
+type: "symptom",
+name: "Eyelid lesion, painful",
+common_name: "Painful skin changes on eyelid",
+},
+{
+id: "s_486",
+type: "symptom",
+name: "Eyelid lesion, red and warm",
+common_name: "Red and warm skin changes on eyelid",
+},
+{
+id: "s_488",
+type: "symptom",
+name: "Eyes sensitive to light",
+common_name: "Light sensitivity",
+},
+{
+id: "s_489",
+type: "symptom",
+name: "Dry discharge on eyelids",
+common_name: "Dry discharge on eyelids",
+},
+{
+id: "s_492",
+type: "symptom",
+name: "Red eye",
+common_name: "Red eye",
+},
+{
+id: "s_493",
+type: "symptom",
+name: "Eye pain",
+common_name: "Eye pain",
+},
+{
+id: "s_494",
+type: "symptom",
+name: "Visual field narrowing",
+common_name: "Tunnel vision",
+},
+{
+id: "s_497",
+type: "symptom",
+name: "Anisocoria",
+common_name: "Asymmetric pupils",
+},
+{
+id: "s_501",
+type: "symptom",
+name: "Distance misjudgment",
+common_name: "Problems judging distances",
+},
+{
+id: "s_503",
+type: "symptom",
+name: "Muscle cramps",
+common_name: "Muscle cramps",
+},
+{
+id: "s_504",
+type: "symptom",
+name: "Foamy urine",
+common_name: "Foamy urine",
+},
+{
+id: "s_505",
+type: "symptom",
+name: "Frequent infections",
+common_name: "Frequent infections",
+},
+{
+id: "s_506",
+type: "symptom",
+name: "Skin mark from insect or bug bite",
+common_name: "Insect bite",
+},
+{
+id: "s_507",
+type: "symptom",
+name: "Loss of will to live",
+common_name: "Loss of will to live",
+},
+{
+id: "s_508",
+type: "symptom",
+name: "Anhedonia",
+common_name: "Inability to feel pleasure",
+},
+{
+id: "s_509",
+type: "symptom",
+name: "Odynophagia",
+common_name: "Painful swallowing",
+},
+{
+id: "s_510",
+type: "symptom",
+name: "Urethral discharge when pressing the penis",
+common_name: "Discharge when pressing penis",
+},
+{
+id: "s_513",
+type: "symptom",
+name: "Globus sensation",
+common_name: "Feeling of lump in throat",
+},
+{
+id: "s_514",
+type: "symptom",
+name: "Derealization",
+common_name: "Feeling detached from onessurroundings",
+},
+{
+id: "s_518",
+type: "symptom",
+name: "Paresthesia",
+common_name: "Tingling or numbness",
+},
+{
+id: "s_524",
+type: "symptom",
+name: "Nasal polyps",
+common_name: "Polyps in nose",
+},
+{
+id: "s_525",
+type: "symptom",
+name: "Foul-smelling stools",
+common_name: "Foul-smelling stools",
+},
+{
+id: "s_526",
+type: "symptom",
+name: "Cough, productive with yellow or green sputum",
+common_name: "Coughing up thick, yellow or green phlegm",
+},
+{
+id: "s_528",
+type: "symptom",
+name: "Alcohol consumption, less than 24 hours ago",
+common_name: "Drinking alcohol less than 24 hours ago",
+},
+{
+id: "s_529",
+type: "symptom",
+name: "Parotid swelling",
+common_name: "Parotid swelling",
+},
+{
+id: "s_530",
+type: "symptom",
+name: "Sudden increase in blood pressure",
+common_name: "Sudden increase in blood pressure",
+},
+{
+id: "s_531",
+type: "symptom",
+name: "Frequent infections, upper respiratory tract",
+common_name: "Frequent runny nose, cough",
+},
+{
+id: "s_532",
+type: "symptom",
+name: "Frequent infections, lower respiratory tract",
+common_name: "Frequent bronchitis",
+},
+{
+id: "s_533",
+type: "symptom",
+name: "Hypotension",
+common_name: "Low blood pressure",
+},
+{
+id: "s_534",
+type: "symptom",
+name: "Bradycardia",
+common_name: "Slow heart rate",
+},
+{
+id: "s_535",
+type: "symptom",
+name: "Decreased pupillary light reflex",
+common_name: "Decreased pupillary light reflex",
+},
+{
+id: "s_536",
+type: "symptom",
+name: "Mydriasis",
+common_name: "Dilated pupils",
+},
+{
+id: "s_537",
+type: "symptom",
+name: "Miosis",
+common_name: "Constricted pupils",
+},
+{
+id: "s_538",
+type: "symptom",
+name: "Tremors",
+common_name: "Muscles trembling",
+},
+{
+id: "s_539",
+type: "symptom",
+name: "Seizures, without loss of consciousness",
+common_name: "Seizures without loss of consciousness",
+},
+{
+id: "s_540",
+type: "symptom",
+name: "Irritability",
+common_name: "Irritability",
+},
+{
+id: "s_541",
+type: "symptom",
+name: "Orthostatic hypotension",
+common_name: "Dizzy or lightheaded after standing up",
+},
+{
+id: "s_542",
+type: "symptom",
+name: "Dry skin",
+common_name: "Dry skin",
+},
+{
+id: "s_543",
+type: "symptom",
+name: "Blood pressure, elevated",
+common_name: "High blood pressure",
+},
+{
+id: "s_545",
+type: "symptom",
+name: "Telangiectasias",
+common_name: "Spider veins",
+},
+{
+id: "s_547",
+type: "symptom",
+name: "Galactorrhea in women",
+common_name: "Milky discharge from the nipple outside of breastfeeding period",
+},
+{
+id: "s_550",
+type: "symptom",
+name: "Lens clouding",
+common_name: "Cloudy appearance of either eye",
+},
+{
+id: "s_551",
+type: "symptom",
+name: "Toothache",
+common_name: "Toothache",
+},
+{
+id: "s_553",
+type: "symptom",
+name: "Cyanosis, fingers",
+common_name: "Grayish-blue fingers",
+},
+{
+id: "s_554",
+type: "symptom",
+name: "Pain in upper limb, hand or fingers",
+common_name: "Pain in hand or fingers",
+},
+{
+id: "s_555",
+type: "symptom",
+name: "Tingling fingers",
+common_name: "Tingling fingers",
+},
+{
+id: "s_556",
+type: "symptom",
+name: "Cold hands or fingers",
+common_name: "Cold hands or fingers",
+},
+{
+id: "s_557",
+type: "symptom",
+name: "Erythema, hands",
+common_name: "Red hand",
+},
+{
+id: "s_558",
+type: "symptom",
+name: "Symptoms exacerbated by low temperature",
+common_name: "Symptoms worse in the cold",
+},
+{
+id: "s_561",
+type: "symptom",
+name: "Belching",
+common_name: "Burping",
+},
+{
+id: "s_562",
+type: "symptom",
+name: "Edema, pitting",
+common_name: "Pitting edema",
+},
+{
+id: "s_563",
+type: "symptom",
+name: "Dyspnea, orthopnea",
+common_name: "Shortness of breath when lying down",
+},
+{
+id: "s_564",
+type: "symptom",
+name: "Loss of muscle mass, hands",
+common_name: "Loss of muscles in hands",
+},
+{
+id: "s_567",
+type: "symptom",
+name: "Murphyssign",
+common_name: "Stomach pain on deep inhalation and simultaneous pressing right upper part of abdomen",
+},
+{
+id: "s_568",
+type: "symptom",
+name: "Binge eating, followed by self-disgust",
+common_name: "Self-disgust after binge eating",
+},
+{
+id: "s_569",
+type: "symptom",
+name: "Pale or clay-colored stool",
+common_name: "Pale stool",
+},
+{
+id: "s_570",
+type: "symptom",
+name: "Hypopyon",
+common_name: "Collection of pus in front of the eye",
+},
+{
+id: "s_571",
+type: "symptom",
+name: "Spasticity",
+common_name: "Tight and spasming muscles",
+},
+{
+id: "s_572",
+type: "symptom",
+name: "Reduced degree of facial expression",
+common_name: "Face lacking expression or animation",
+},
+{
+id: "s_575",
+type: "symptom",
+name: "Joint stiffness",
+common_name: "Stiff joints",
+},
+{
+id: "s_576",
+type: "symptom",
+name: "Joint pain, aggravated by cold or damp weather",
+common_name: "Joint pain aggravated by cold or damp weather",
+},
+{
+id: "s_578",
+type: "symptom",
+name: "Foot pain",
+common_name: "Pain in one foot",
+},
+{
+id: "s_579",
+type: "symptom",
+name: "Pain in lower limb",
+common_name: "Pain in lower limb",
+},
+{
+id: "s_580",
+type: "symptom",
+name: "Pain in upper limb",
+common_name: "Pain in upper limb",
+},
+{
+id: "s_581",
+type: "symptom",
+name: "Joint pain, one knee",
+common_name: "Pain in one knee",
+},
+{
+id: "s_582",
+type: "symptom",
+name: "Anxiety attack",
+common_name: "Anxiety attack",
+},
+{
+id: "s_583",
+type: "symptom",
+name: "General anxiety",
+common_name: "General anxiety",
+},
+{
+id: "s_584",
+type: "symptom",
+name: "Suspicious mole or birthmark, change in shape",
+common_name: "Change in shape of mole or birthmark",
+},
+{
+id: "s_585",
+type: "symptom",
+name: "Suspicious mole or birthmark, change in colour",
+common_name: "Change in colour of mole or birthmark",
+},
+{
+id: "s_586",
+type: "symptom",
+name: "Gynecomastia",
+common_name: "Breast enlargement in man",
+},
+{
+id: "s_588",
+type: "symptom",
+name: "Alcohol consumption, increasing tolerance",
+common_name: "Alcohol tolerance",
+},
+{
+id: "s_590",
+type: "symptom",
+name: "Tremors, tongue",
+common_name: "Trembling of tongue",
+},
+{
+id: "s_593",
+type: "symptom",
+name: "Prolonged bleeding time",
+common_name: "Prolonged bleeding time",
+},
+{
+id: "s_594",
+type: "symptom",
+name: "Petechiae",
+common_name: "Red or purple spots not fading under pressure smaller than 3 mm",
+},
+{
+id: "s_598",
+type: "symptom",
+name: "Abscess",
+common_name: "Reddened, swollen and painful skin change",
+},
+{
+id: "s_603",
+type: "symptom",
+name: "Nail clubbing",
+common_name: "Enlarged fingertips and nails",
+},
+{
+id: "s_604",
+type: "symptom",
+name: "Headache, lancinating",
+common_name: "Stabbing headache",
+},
+{
+id: "s_605",
+type: "symptom",
+name: "Headache, series over a period of time",
+common_name: "Series of headaches",
+},
+{
+id: "s_606",
+type: "symptom",
+name: "Eye flashes",
+common_name: "Eye flashes",
+},
+{
+id: "s_607",
+type: "symptom",
+name: "Tongue erythema",
+common_name: "Unusually red tongue",
+},
+{
+id: "s_608",
+type: "symptom",
+name: "Angular cheilitis",
+common_name: "Cracked corners of lips",
+},
+{
+id: "s_609",
+type: "symptom",
+name: "Breast pain or tenderness, unilateral",
+common_name: "Pain or tenderness in only one breast",
+},
+{
+id: "s_610",
+type: "symptom",
+name: "Coated tonsils",
+common_name: "White spots on tonsils",
+},
+{
+id: "s_611",
+type: "symptom",
+name: "Dark urine",
+common_name: "Dark urine",
+},
+{
+id: "s_612",
+type: "symptom",
+name: "Bone pain",
+common_name: "Bone pain",
+},
+{
+id: "s_613",
+type: "symptom",
+name: "Xanthelasma",
+common_name: "Yellowish deposits on eyelids",
+},
+{
+id: "s_614",
+type: "symptom",
+name: "Itching after a hot shower or bath",
+common_name: "Itchy skin after a hot shower or bath",
+},
+{
+id: "s_616",
+type: "symptom",
+name: "Edema, face",
+common_name: "Swollen face",
+},
+{
+id: "s_618",
+type: "symptom",
+name: "Hairy leukoplakia",
+common_name: "Hairy leukoplakia",
+},
+{
+id: "s_622",
+type: "symptom",
+name: "Loss of muscle mass",
+common_name: "Loss of muscles",
+},
+{
+id: "s_623",
+type: "symptom",
+name: "Edema, both ankles",
+common_name: "Swollen ankles",
+},
+{
+id: "s_625",
+type: "symptom",
+name: "Headache, exacerbated by tilting head forwards",
+common_name: "Headache worsened by tilting head forward",
+},
+{
+id: "s_629",
+type: "symptom",
+name: "Feeling of helplessness",
+common_name: "Feeling of helplessness",
+},
+{
+id: "s_630",
+type: "symptom",
+name: "Vulvovaginal itching",
+common_name: "Vulvovaginal itching",
+},
+{
+id: "s_631",
+type: "symptom",
+name: "Impaired concentration",
+common_name: "Poor concentration",
+},
+{
+id: "s_632",
+type: "symptom",
+name: "Feeling of hopelessness",
+common_name: "Feeling of hopelessness",
+},
+{
+id: "s_633",
+type: "symptom",
+name: "Episode of elevated mood",
+common_name: "Elevated mood",
+},
+{
+id: "s_634",
+type: "symptom",
+name: "Decreased need for sleep",
+common_name: "Decreased need for sleep",
+},
+{
+id: "s_635",
+type: "symptom",
+name: "Contentiousness",
+common_name: "Argumentative behaviour",
+},
+{
+id: "s_636",
+type: "symptom",
+name: "Financial recklessness",
+common_name: "Financial recklessness",
+},
+{
+id: "s_637",
+type: "symptom",
+name: "Quickening of thoughts and speech",
+common_name: "Quickening of thoughts and speech",
+},
+{
+id: "s_640",
+type: "symptom",
+name: "Tenesmus",
+common_name: "Feeling of incomplete defecation",
+},
+{
+id: "s_641",
+type: "symptom",
+name: "Bowel incontinence",
+common_name: "Loss of bowel control",
+},
+{
+id: "s_642",
+type: "symptom",
+name: "Mucous secretion in stool",
+common_name: "Mucus in stool",
+},
+{
+id: "s_646",
+type: "symptom",
+name: "Mood swings",
+common_name: "Mood swings",
+},
+{
+id: "s_647",
+type: "symptom",
+name: "Simple visual paradelusions",
+common_name: "Simple visual paradelusions",
+},
+{
+id: "s_648",
+type: "symptom",
+name: "Simple auditory paradelusions",
+common_name: "Simple auditory paradelusions",
+},
+{
+id: "s_649",
+type: "symptom",
+name: "Psychomotor retardation",
+common_name: "Psychomotor retardation",
+},
+{
+id: "s_650",
+type: "symptom",
+name: "Muscle weakness",
+common_name: "Weak muscles",
+},
+{
+id: "s_651",
+type: "symptom",
+name: "Ataxia",
+common_name: "Problems with coordinating movement",
+},
+{
+id: "s_652",
+type: "symptom",
+name: "Deep tendon reflexes, decreased",
+common_name: "Decreased deep tendon reflexes",
+},
+{
+id: "s_653",
+type: "symptom",
+name: "Pupil dilation variation",
+common_name: "Pupil dilation variation",
+},
+{
+id: "s_659",
+type: "symptom",
+name: "Social isolation",
+common_name: "Social isolation",
+},
+{
+id: "s_660",
+type: "symptom",
+name: "Anger outbursts",
+common_name: "Anger outbursts",
+},
+{
+id: "s_662",
+type: "symptom",
+name: "Cough, productive in the morning",
+common_name: "Coughing up phlegm or mucus in the morning",
+},
+{
+id: "s_663",
+type: "symptom",
+name: "Back pain, lumbar, radiating to the groin",
+common_name: "Lower back pain spreading to the groin",
+},
+{
+id: "s_664",
+type: "symptom",
+name: "Kopliksspots",
+common_name: "Small white spots surrounded by red ring on the insides of cheeks",
+},
+{
+id: "s_665",
+type: "symptom",
+name: "Measles rash",
+common_name: "Measles rash",
+},
+{
+id: "s_666",
+type: "symptom",
+name: "Leopard-like spots on skin",
+common_name: "Brick-coloured spots resembling leopard spots",
+},
+{
+id: "s_668",
+type: "symptom",
+name: "Unilateral enophthalmos",
+common_name: "One sunken eyeball",
+},
+{
+id: "s_669",
+type: "symptom",
+name: "Anhidrosis, face, unilateral",
+common_name: "Lack of sweating on one side of the face",
+},
+{
+id: "s_670",
+type: "symptom",
+name: "Cough, productive with pink, frothy sputum",
+common_name: "Coughing up pink phlegm",
+},
+{
+id: "s_671",
+type: "symptom",
+name: "Neck vein distention",
+common_name: "Swollen neck veins",
+},
+{
+id: "s_673",
+type: "symptom",
+name: "Tongue enlargement",
+common_name: "Swollen tongue",
+},
+{
+id: "s_675",
+type: "symptom",
+name: "Delusions, persecutory",
+common_name: "Belief of being watched, conspired against, or purposely hindered by others",
+},
+{
+id: "s_676",
+type: "symptom",
+name: "Delusions, referential",
+common_name: "Belief of hidden or secret messages meant for onesself",
+},
+{
+id: "s_677",
+type: "symptom",
+name: "Delusions, grandiose",
+common_name: "Belief of being superior to others",
+},
+{
+id: "s_678",
+type: "symptom",
+name: "Delusions, nihilistic",
+common_name: "Belief of being dead, decomposed, or destroyed",
+},
+{
+id: "s_679",
+type: "symptom",
+name: "Delusions, hypochondriacal",
+common_name: "Belief of being sick despite medical proof of the contrary",
+},
+{
+id: "s_680",
+type: "symptom",
+name: "Delusions, of control",
+common_name: "Belief that onesthoughts or actions are controlled by others",
+},
+{
+id: "s_681",
+type: "symptom",
+name: "Hallucinations, visual",
+common_name: "Seeing things that others do not see",
+},
+{
+id: "s_682",
+type: "symptom",
+name: "Hallucinations, auditory",
+common_name: "Hearing voices or sounds others do not hear",
+},
+{
+id: "s_689",
+type: "symptom",
+name: "Urination in small amounts",
+common_name: "Urination in small amounts",
+},
+{
+id: "s_690",
+type: "symptom",
+name: "Urinary urgency",
+common_name: "Urgent need to urinate",
+},
+{
+id: "s_691",
+type: "symptom",
+name: "Trouble beginning urination",
+common_name: "Trouble beginning urination",
+},
+{
+id: "s_692",
+type: "symptom",
+name: "Red and swollen oral mucosa",
+common_name: "Red and swollen inside of mouth",
+},
+{
+id: "s_694",
+type: "symptom",
+name: "Oral lesions",
+common_name: "Changes in the mouth",
+},
+{
+id: "s_696",
+type: "symptom",
+name: "Urinary retention",
+common_name: "Unable to urinate when bladder is full",
+},
+{
+id: "s_697",
+type: "symptom",
+name: "Decreased skin turgor",
+common_name: "Decreased skin elasticity",
+},
+{
+id: "s_698",
+type: "symptom",
+name: "Bilateral enophthalmos",
+common_name: "Both eyes sunken",
+},
+{
+id: "s_699",
+type: "symptom",
+name: "Edema, dependent on the body position",
+common_name: "Swelling dependent on the position of the body",
+},
+{
+id: "s_700",
+type: "symptom",
+name: "Edema",
+common_name: "Swelling",
+},
+{
+id: "s_701",
+type: "symptom",
+name: "Edema, daytime",
+common_name: "Daytime swelling",
+},
+{
+id: "s_711",
+type: "symptom",
+name: "Dissociative amnesia of trauma",
+common_name: "Difficulty remembering traumatic experiences",
+},
+{
+id: "s_715",
+type: "symptom",
+name: "Sneezing",
+common_name: "Sneezing",
+},
+{
+id: "s_716",
+type: "symptom",
+name: "Impaired social functioning",
+common_name: "Difficulty functioning at home, work, or school",
+},
+{
+id: "s_725",
+type: "symptom",
+name: "Excessive worry about the health of a child",
+common_name: "Excessive worry about the health of a child",
+},
+{
+id: "s_727",
+type: "symptom",
+name: "Difficulty bonding with infant",
+common_name: "Difficulty bonding with baby",
+},
+{
+id: "s_728",
+type: "symptom",
+name: "Thoughts of harming oneschild",
+common_name: "Thoughts of harming oneschild",
+},
+{
+id: "s_729",
+type: "symptom",
+name: "Thoughts of killing oneschild",
+common_name: "Thoughts of killing oneschild",
+},
+{
+id: "s_730",
+type: "symptom",
+name: "Mood swings, diurnal",
+common_name: "Mood better in the evening than in the morning",
+},
+{
+id: "s_732",
+type: "symptom",
+name: "Calf pain, severe while walking, intermittent claudication",
+common_name: "Pain in calf during exertion and relieved by rest",
+},
+{
+id: "s_733",
+type: "symptom",
+name: "Erectile dysfunction",
+common_name: "Erectile dysfunction",
+},
+{
+id: "s_734",
+type: "symptom",
+name: "Claudication in upper leg",
+common_name: "Acute thigh or buttock pain appearing during exertion and relieving after short rest",
+},
+{
+id: "s_735",
+type: "symptom",
+name: "Weak pulse in legs",
+common_name: "Weak pulse in legs",
+},
+{
+id: "s_746",
+type: "symptom",
+name: "Loss or impairment of proprioception",
+common_name: "Loss or impairment of proprioception",
+},
+{
+id: "s_747",
+type: "symptom",
+name: "Loss or impairment of temperature sensation",
+common_name: "Loss or impairment of temperature sensation",
+},
+{
+id: "s_750",
+type: "symptom",
+name: "Ocular motility disorder",
+common_name: "Difficulty moving eyes",
+},
+{
+id: "s_756",
+type: "symptom",
+name: "Gottronspapules",
+common_name: "Red, painful, or scaly bumps over hand and finger joints",
+},
+{
+id: "s_757",
+type: "symptom",
+name: "Holster sign",
+common_name: "Redness on hips or sides of thighs",
+},
+{
+id: "s_758",
+type: "symptom",
+name: "Erythema, shoulders and nape of neck",
+common_name: "Redness on the shoulders and the back of the neck",
+},
+{
+id: "s_759",
+type: "symptom",
+name: "Erythema, V-shaped on chest",
+common_name: "V-shaped redness on the chest",
+},
+{
+id: "s_760",
+type: "symptom",
+name: "Hyperkeratosis on hands",
+common_name: "Thickened and cracked skin on hands",
+},
+{
+id: "s_762",
+type: "symptom",
+name: "Purpuric rash",
+common_name: "Red or purple spots not fading under pressure larger than 3 mm",
+},
+{
+id: "s_763",
+type: "symptom",
+name: "Livedo reticularis",
+common_name: "Blotchy, red-purplish marbling of the skin",
+},
+{
+id: "s_768",
+type: "symptom",
+name: "Delusions, self-accusation",
+common_name: "Belief of being evil, guilty, or responsible for a disaster",
+},
+{
+id: "s_769",
+type: "symptom",
+name: "Delusions, bizarre",
+common_name: "Belief in the bizarre or impossible, e.g., alien, cloning, or teleportation",
+},
+{
+id: "s_770",
+type: "symptom",
+name: "Poor personal hygiene",
+common_name: "Poor personal hygiene",
+},
+{
+id: "s_773",
+type: "symptom",
+name: "Social maladjustment",
+common_name: "Social maladjustment",
+},
+{
+id: "s_776",
+type: "symptom",
+name: "Waking up early",
+common_name: "Waking up early",
+},
+{
+id: "s_777",
+type: "symptom",
+name: "Prolonged nighttime sleep",
+common_name: "Prolonged nighttime sleep",
+},
+{
+id: "s_778",
+type: "symptom",
+name: "Lack of boundaries in interpersonal relations",
+common_name: "Lack of boundaries in relationships",
+},
+{
+id: "s_779",
+type: "symptom",
+name: "Rash or impulsive decisions",
+common_name: "Making rash or impulsive decisions",
+},
+{
+id: "s_780",
+type: "symptom",
+name: "Delusions, religious",
+common_name: "Belief of being chosen by a higher power or being a deity",
+},
+{
+id: "s_789",
+type: "symptom",
+name: "Urticaria, triggered by scratching",
+common_name: "Hives after scratching",
+},
+{
+id: "s_790",
+type: "symptom",
+name: "Urticaria, triggered by prolonged pressure on the skin",
+common_name: "Hives appearing after exposure to prolonged pressure on the skin",
+},
+{
+id: "s_791",
+type: "symptom",
+name: "Urticaria, triggered by cold",
+common_name: "Hives appearing after exposure to cold",
+},
+{
+id: "s_793",
+type: "symptom",
+name: "Urticaria, triggered by heat",
+common_name: "Hives appearing after exposure to heat",
+},
+{
+id: "s_795",
+type: "symptom",
+name: "Pencil-thin stools",
+common_name: "Pencil-thin stools",
+},
+{
+id: "s_799",
+type: "symptom",
+name: "Headache, worse in the morning",
+common_name: "Morning headache",
+},
+{
+id: "s_801",
+type: "symptom",
+name: "Vomiting, projectile",
+common_name: "Projectile vomiting",
+},
+{
+id: "s_803",
+type: "symptom",
+name: "Papilledema",
+common_name: "Papilledema",
+},
+{
+id: "s_814",
+type: "symptom",
+name: "Hemianopsia bitemporalis",
+common_name: "Hemianopsia bitemporalis",
+},
+{
+id: "s_817",
+type: "symptom",
+name: "Alcohol consumption, alcohol craving",
+common_name: "Alcohol craving",
+},
+{
+id: "s_818",
+type: "symptom",
+name: "Alcohol consumption, signs of withdrawal",
+common_name: "Alcohol withdrawal syndrome",
+},
+{
+id: "s_820",
+type: "symptom",
+name: "Alcohol consumption, neglecting duties due to alcohol",
+common_name: "Neglecting family, work, or hobbies due to alcohol",
+},
+{
+id: "s_824",
+type: "symptom",
+name: "Alcohol consumption, violating norms under influence",
+common_name: "Violating social norms after drinking alcohol",
+},
+{
+id: "s_825",
+type: "symptom",
+name: "Impaired memory, alcohol-related amnesia",
+common_name: "Alcohol-related amnesia",
+},
+{
+id: "s_828",
+type: "symptom",
+name: "Alcohol consumption, drinking alone",
+common_name: "Drinking alcohol alone",
+},
+{
+id: "s_829",
+type: "symptom",
+name: "Alcohol consumption, secret consumption",
+common_name: "Secret alcohol consumption",
+},
+{
+id: "s_830",
+type: "symptom",
+name: "Impaired memory, short-term",
+common_name: "Impaired short-term memory",
+},
+{
+id: "s_831",
+type: "symptom",
+name: "Confabulation",
+common_name: "Confabulation",
+},
+{
+id: "s_833",
+type: "symptom",
+name: "Agnosia",
+common_name: "Inability to recognize objects, people, sounds, shapes, or smells",
+},
+{
+id: "s_835",
+type: "symptom",
+name: "Episodes of depressed mood, seasonal pattern",
+common_name: "Depressive symptoms occurring at the same time every year",
+},
+{
+id: "s_836",
+type: "symptom",
+name: "Schizophasia",
+common_name: "Schizophasia",
+},
+{
+id: "s_837",
+type: "symptom",
+name: "Alogia",
+common_name: "Poverty of speech",
+},
+{
+id: "s_838",
+type: "symptom",
+name: "Paralogical thinking",
+common_name: "Paralogical thinking",
+},
+{
+id: "s_856",
+type: "symptom",
+name: "Auscultative wheezes over the thorax",
+common_name: "Auscultative wheezes over the thorax",
+},
+{
+id: "s_857",
+type: "symptom",
+name: "Auscultative fine crackles over the thorax",
+common_name: "Auscultative fine crackles over the thorax",
+},
+{
+id: "s_866",
+type: "symptom",
+name: "Trousseau sign of latent tetany",
+common_name: "Trousseau sign of latent tetany",
+},
+{
+id: "s_867",
+type: "symptom",
+name: "Chvostekssign",
+common_name: "Chvostekssign",
+},
+{
+id: "s_868",
+type: "symptom",
+name: "Orbicularis oris muscle spasm",
+common_name: "Orbicularis oris muscle spasm",
+},
+{
+id: "s_869",
+type: "symptom",
+name: "Clubfoot",
+common_name: "Clubfoot",
+},
+{
+id: "s_878",
+type: "symptom",
+name: "Deep tendon reflexes, increased",
+common_name: "Increased deep tendon reflexes",
+},
+{
+id: "s_884",
+type: "symptom",
+name: "Agoraphobia",
+common_name: "Fear of open or crowded places",
+},
+{
+id: "s_917",
+type: "symptom",
+name: "Insomnia",
+common_name: "Insomnia",
+},
+{
+id: "s_935",
+type: "symptom",
+name: "Decreased hearing, variable intensity and duration",
+common_name: "Hearing loss with variable intensity and duration",
+},
+{
+id: "s_936",
+type: "symptom",
+name: "Dizziness, vertigo",
+common_name: "Vertigo",
+},
+{
+id: "s_957",
+type: "symptom",
+name: "Homonymous hemianopsia",
+common_name: "Visual field loss on the same side of both eyes",
+},
+{
+id: "s_959",
+type: "symptom",
+name: "Loss of sensation in the face",
+common_name: "Loss of feeling in face",
+},
+{
+id: "s_962",
+type: "symptom",
+name: "Dysphagia",
+common_name: "Difficulty swallowing",
+},
+{
+id: "s_964",
+type: "symptom",
+name: "Lateropulsion",
+common_name: "Falling or losing gait on one side",
+},
+{
+id: "s_965",
+type: "symptom",
+name: "Neck pain, unilateral",
+common_name: "Neck pain on only one side",
+},
+{
+id: "s_967",
+type: "symptom",
+name: "Decreased visual acuity",
+common_name: "Decreased vision",
+},
+{
+id: "s_970",
+type: "symptom",
+name: "Headache, occipital",
+common_name: "Headache located at back of head",
+},
+{
+id: "s_971",
+type: "symptom",
+name: "Paresthesia, face",
+common_name: "Face tingling or numbness",
+},
+{
+id: "s_972",
+type: "symptom",
+name: "Sensory loss in both arms",
+common_name: "Loss of feeling in both arms",
+},
+{
+id: "s_973",
+type: "symptom",
+name: "Paresthesia, both upper limbs",
+common_name: "Tingling or numbness of both upper limbs",
+},
+{
+id: "s_989",
+type: "symptom",
+name: "Pyramidal signs",
+common_name: "Pyramidal signs",
+},
+{
+id: "s_990",
+type: "symptom",
+name: "Frontal release signs",
+common_name: "Frontal release signs",
+},
+{
+id: "s_991",
+type: "symptom",
+name: "Increased masseter reflex",
+common_name: "Jaw jerk",
+},
+{
+id: "s_995",
+type: "symptom",
+name: "Tongue muscle atrophy",
+common_name: "Shrinkage of tongue",
+},
+{
+id: "s_996",
+type: "symptom",
+name: "Cervical dystonia",
+common_name: "Cervical dystonia",
+},
+{
+id: "s_1006",
+type: "symptom",
+name: "Lack of initiative, motivation, or drive",
+common_name: "Lack of initiative, motivation, or drive",
+},
+{
+id: "s_1007",
+type: "symptom",
+name: "Disinhibition",
+common_name: "Disinhibition",
+},
+{
+id: "s_1010",
+type: "symptom",
+name: "Apraxia",
+common_name: "Apraxia",
+},
+{
+id: "s_1012",
+type: "symptom",
+name: "Agraphia",
+common_name: "Loss of writing ability",
+},
+{
+id: "s_1013",
+type: "symptom",
+name: "Buccofacial or orofacial apraxia",
+common_name: "Buccofacial or orofacial apraxia",
+},
+{
+id: "s_1018",
+type: "symptom",
+name: "Perseveration",
+common_name: "Perseveration",
+},
+{
+id: "s_1021",
+type: "symptom",
+name: "Diminished superficial reflexes",
+common_name: "Diminished superficial reflexes",
+},
+{
+id: "s_1023",
+type: "symptom",
+name: "Babinski sign",
+common_name: "Babinski sign",
+},
+{
+id: "s_1027",
+type: "symptom",
+name: "Loss of vision in the superior quadrant",
+common_name: "Loss of vision in the superior quadrant",
+},
+{
+id: "s_1028",
+type: "symptom",
+name: "Auditory verbal agnosia",
+common_name: "Auditory verbal agnosia",
+},
+{
+id: "s_1032",
+type: "symptom",
+name: "Amusia",
+common_name: "Inability to produce or recognize musical sounds",
+},
+{
+id: "s_1034",
+type: "symptom",
+name: "Visual agnosia",
+common_name: "Visual agnosia",
+},
+{
+id: "s_1035",
+type: "symptom",
+name: "Diminished fear responses",
+common_name: "Diminished fear responses",
+},
+{
+id: "s_1045",
+type: "symptom",
+name: "Splenomegaly",
+common_name: "Enlarged spleen",
+},
+{
+id: "s_1050",
+type: "symptom",
+name: "Tooth loss",
+common_name: "Tooth loss",
+},
+{
+id: "s_1051",
+type: "symptom",
+name: "Hepatomegaly",
+common_name: "Hepatomegaly",
+},
+{
+id: "s_1052",
+type: "symptom",
+name: "Enlarged kidneys",
+common_name: "Enlarged kidneys",
+},
+{
+id: "s_1054",
+type: "symptom",
+name: "Lhermittessign",
+common_name: "Lhermittessign",
+},
+{
+id: "s_1055",
+type: "symptom",
+name: "Retrobulbar neuritis",
+common_name: "Retrobulbar neuritis",
+},
+{
+id: "s_1056",
+type: "symptom",
+name: "Trigeminal neuralgia",
+common_name: "Trigeminal neuralgia",
+},
+{
+id: "s_1057",
+type: "symptom",
+name: "Enlarged salivary glands",
+common_name: "Enlarged salivary glands",
+},
+{
+id: "s_1063",
+type: "symptom",
+name: "Paresthesia, both lower limbs",
+common_name: "Tingling or numbness of both lower limbs",
+},
+{
+id: "s_1066",
+type: "symptom",
+name: "Paresthesia in both upper limbs, glove distribution",
+common_name: "Paresthesia in both upper limbs, glove distribution",
+},
+{
+id: "s_1067",
+type: "symptom",
+name: "Sudden face flushing",
+common_name: "Sudden red flushed face",
+},
+{
+id: "s_1068",
+type: "symptom",
+name: "Paresthesias, symmetrical",
+common_name: "Symmetrical paresthesias",
+},
+{
+id: "s_1069",
+type: "symptom",
+name: "Paresthesia, ascending",
+common_name: "Ascending tingling or numbness",
+},
+{
+id: "s_1070",
+type: "symptom",
+name: "Loss of sense of vibration in distal parts of extremities",
+common_name: "Loss of sense of vibration in distal parts of extremities",
+},
+{
+id: "s_1072",
+type: "symptom",
+name: "Absence of deep reflexes",
+common_name: "Absence of deep reflexes",
+},
+{
+id: "s_1073",
+type: "symptom",
+name: "Bilateral absence of Achilles tendon reflex",
+common_name: "Bilateral absence of Achilles tendon reflex",
+},
+{
+id: "s_1074",
+type: "symptom",
+name: "Trophic changes",
+common_name: "Trophic changes",
+},
+{
+id: "s_1076",
+type: "symptom",
+name: "Trophic ulcer",
+common_name: "Trophic ulcer",
+},
+{
+id: "s_1078",
+type: "symptom",
+name: "Trophic ulcer, plantar side of the foot",
+common_name: "Trophic ulcer on the plantar side of the foot",
+},
+{
+id: "s_1083",
+type: "symptom",
+name: "Interosseous muscles atrophy, hands",
+common_name: "Interosseous muscles atrophy, hands",
+},
+{
+id: "s_1084",
+type: "symptom",
+name: "Interosseous muscles atrophy, feet",
+common_name: "Interosseous muscles atrophy, feet",
+},
+{
+id: "s_1087",
+type: "symptom",
+name: "Fear of going insane",
+common_name: "Fear of going insane",
+},
+{
+id: "s_1088",
+type: "symptom",
+name: "Fear of losing control",
+common_name: "Fear of losing control",
+},
+{
+id: "s_1089",
+type: "symptom",
+name: "Prostate enlargement",
+common_name: "Prostate enlargement",
+},
+{
+id: "s_1090",
+type: "symptom",
+name: "Glassy eyes",
+common_name: "Glassy eyes",
+},
+{
+id: "s_1091",
+type: "symptom",
+name: "Chemosis",
+common_name: "Chemosis",
+},
+{
+id: "s_1092",
+type: "symptom",
+name: "Positive prick or patch skin allergy test",
+common_name: "Positive prick or patch skin allergy test",
+},
+{
+id: "s_1093",
+type: "symptom",
+name: "Positive allergy challenge",
+common_name: "Positive allergy challenge",
+},
+{
+id: "s_1094",
+type: "symptom",
+name: "Clearing the throat",
+common_name: "Clearing the throat",
+},
+{
+id: "s_1095",
+type: "symptom",
+name: "Impaired smell",
+common_name: "Inability to smell properly",
+},
+{
+id: "s_1096",
+type: "symptom",
+name: "Taste disorders",
+common_name: "Abnormal or loss of taste",
+},
+{
+id: "s_1097",
+type: "symptom",
+name: "Swelling of nasal mucosa",
+common_name: "Swelling of nasal mucosa",
+},
+{
+id: "s_1098",
+type: "symptom",
+name: "Swollen blue or bluish-gray nasal mucosa",
+common_name: "Swollen blue or bluish-gray nasal mucosa",
+},
+{
+id: "s_1099",
+type: "symptom",
+name: "Swelling of nasal concha",
+common_name: "Swelling of nasal concha",
+},
+{
+id: "s_1100",
+type: "symptom",
+name: "Transverse furrow on the nose",
+common_name: "Transverse furrow on the nose",
+},
+{
+id: "s_1102",
+type: "symptom",
+name: "Enlargement of palatine tonsils, bilateral",
+common_name: "Swelling on both sides of throat",
+},
+{
+id: "s_1103",
+type: "symptom",
+name: "Enlargement of the lymphoid tissue in the pharynx",
+common_name: "Enlargement of the lymphoid tissue in the pharynx",
+},
+{
+id: "s_1104",
+type: "symptom",
+name: "Mouth breathing",
+common_name: "Mouth breathing",
+},
+{
+id: "s_1105",
+type: "symptom",
+name: "Cyanosis under the eyes",
+common_name: "Dark circles under eyes",
+},
+{
+id: "s_1106",
+type: "symptom",
+name: "Dennie-Morgan fold",
+common_name: "Dennie-Morgan fold",
+},
+{
+id: "s_1107",
+type: "symptom",
+name: "Opacified tympanic membrane",
+common_name: "Opacified tympanic membrane",
+},
+{
+id: "s_1108",
+type: "symptom",
+name: "High-arched palate",
+common_name: "High-arched palate",
+},
+{
+id: "s_1109",
+type: "symptom",
+name: "Discharge in tympanic cavity",
+common_name: "Discharge in tympanic cavity",
+},
+{
+id: "s_1110",
+type: "symptom",
+name: "Overbite",
+common_name: "Overbite",
+},
+{
+id: "s_1111",
+type: "symptom",
+name: "Adenoid face",
+common_name: "Adenoid face",
+},
+{
+id: "s_1112",
+type: "symptom",
+name: "Pain in both lower limbs, stocking distribution",
+common_name: "Pain in both lower limbs with stocking distribution",
+},
+{
+id: "s_1114",
+type: "symptom",
+name: "Terrysnails",
+common_name: "Terrysnails",
+},
+{
+id: "s_1115",
+type: "symptom",
+name: "Loss of body hair",
+common_name: "Loss of body hair",
+},
+{
+id: "s_1116",
+type: "symptom",
+name: "Ascites",
+common_name: "Ascites",
+},
+{
+id: "s_1117",
+type: "symptom",
+name: "Testicular atrophy",
+common_name: "Shrinking or diminishing of both testicles",
+},
+{
+id: "s_1119",
+type: "symptom",
+name: "Bladder sphincter dysfunction",
+common_name: "Bladder sphincter dysfunction",
+},
+{
+id: "s_1123",
+type: "symptom",
+name: "Anhidrosis",
+common_name: "Lack of sweating",
+},
+{
+id: "s_1125",
+type: "symptom",
+name: "Erythema, palmar",
+common_name: "Red skin on palms",
+},
+{
+id: "s_1139",
+type: "symptom",
+name: "Suicidal thoughts",
+common_name: "Suicidal thoughts",
+},
+{
+id: "s_1140",
+type: "symptom",
+name: "Suicidal intent",
+common_name: "Planning or taking steps toward suicide",
+},
+{
+id: "s_1141",
+type: "symptom",
+name: "Russellssign",
+common_name: "Russellssign",
+},
+{
+id: "s_1142",
+type: "symptom",
+name: "Myalgia",
+common_name: "Muscle pain",
+},
+{
+id: "s_1144",
+type: "symptom",
+name: "Swelling of temporal artery",
+common_name: "Swelling of temporal artery",
+},
+{
+id: "s_1145",
+type: "symptom",
+name: "Redness in temporal region",
+common_name: "Redness around the temple",
+},
+{
+id: "s_1146",
+type: "symptom",
+name: "Impaired vision, temple pain on side with vision problem",
+common_name: "Temple pain on side with visual impairment",
+},
+{
+id: "s_1147",
+type: "symptom",
+name: "Oculomotor nerve palsy",
+common_name: "Oculomotor nerve palsy",
+},
+{
+id: "s_1148",
+type: "symptom",
+name: "Numbness of tongue",
+common_name: "Loss of feeling in tongue",
+},
+{
+id: "s_1150",
+type: "symptom",
+name: "Hypersensitivity to sound",
+common_name: "Oversensitivity to sound",
+},
+{
+id: "s_1153",
+type: "symptom",
+name: "Taste disorder, anterior two-thirds of tongue",
+common_name: "Taste disorder in anterior two-thirds of tongue",
+},
+{
+id: "s_1159",
+type: "symptom",
+name: "Loss of sensation in the face, unilateral",
+common_name: "Loss of feeling on only one side of the face",
+},
+{
+id: "s_1162",
+type: "symptom",
+name: "Pretibial myxedema",
+common_name: "Pretibial myxedema",
+},
+{
+id: "s_1163",
+type: "symptom",
+name: "Exophthalmos",
+common_name: "Protruding eye",
+},
+{
+id: "s_1165",
+type: "symptom",
+name: "Burning skin",
+common_name: "Burning sensation on skin",
+},
+{
+id: "s_1166",
+type: "symptom",
+name: "Enamel hypoplasia",
+common_name: "Enamel hypoplasia",
+},
+{
+id: "s_1167",
+type: "symptom",
+name: "Nail dystrophy",
+common_name: "Distortion or discolouration of nail",
+},
+{
+id: "s_1170",
+type: "symptom",
+name: "Hemarthrosis",
+common_name: "Bleeding into joints",
+},
+{
+id: "s_1171",
+type: "symptom",
+name: "Darierssign",
+common_name: "Darierssign",
+},
+{
+id: "s_1173",
+type: "symptom",
+name: "Lump in scrotum",
+common_name: "Lump in scrotum",
+},
+{
+id: "s_1175",
+type: "symptom",
+name: "Feeling of weight in scrotum",
+common_name: "Feeling of weight in scrotum",
+},
+{
+id: "s_1178",
+type: "symptom",
+name: "Chest pain, worsens on palpation",
+common_name: "Chest pain worsening when touching or pressing",
+},
+{
+id: "s_1180",
+type: "symptom",
+name: "Pain behind ear",
+common_name: "Pain behind ear",
+},
+{
+id: "s_1181",
+type: "symptom",
+name: "Redness behind the ear",
+common_name: "Redness behind the ear",
+},
+{
+id: "s_1182",
+type: "symptom",
+name: "Swelling in the mastoid region",
+common_name: "Swelling behind ear",
+},
+{
+id: "s_1183",
+type: "symptom",
+name: "Winterbottomssign",
+common_name: "Winterbottomssign",
+},
+{
+id: "s_1184",
+type: "symptom",
+name: "Coating on tongue",
+common_name: "White tongue",
+},
+{
+id: "s_1185",
+type: "symptom",
+name: "Dyspnea, with flare-ups and remissions",
+common_name: "Shortness of breath that comes and goes",
+},
+{
+id: "s_1189",
+type: "symptom",
+name: "Back pain, recurrent",
+common_name: "Back pain that comes and goes",
+},
+{
+id: "s_1190",
+type: "symptom",
+name: "Back pain",
+common_name: "Back pain",
+},
+{
+id: "s_1191",
+type: "symptom",
+name: "Dermatological changes, with flare-ups and remissions",
+common_name: "Skin changes that come and go",
+},
+{
+id: "s_1192",
+type: "symptom",
+name: "Back pain, severe",
+common_name: "Severe back pain",
+},
+{
+id: "s_1193",
+type: "symptom",
+name: "Headache, severe",
+common_name: "Severe headache",
+},
+{
+id: "s_1194",
+type: "symptom",
+name: "Facial pain, severe",
+common_name: "Severe face pain",
+},
+{
+id: "s_1195",
+type: "symptom",
+name: "Abdominal pain, severe",
+common_name: "Severe abdominal pain",
+},
+{
+id: "s_1197",
+type: "symptom",
+name: "Chest pain, severe",
+common_name: "Severe chest pain",
+},
+{
+id: "s_1198",
+type: "symptom",
+name: "Back pain, sudden",
+common_name: "Sudden back pain",
+},
+{
+id: "s_1200",
+type: "symptom",
+name: "Chest pain, sudden",
+common_name: "Sudden chest pain",
+},
+{
+id: "s_1201",
+type: "symptom",
+name: "Joint pain, sudden",
+common_name: "Sudden joint pain",
+},
+{
+id: "s_1202",
+type: "symptom",
+name: "Abdominal pain, exacerbating during deep breath",
+common_name: "Abdominal pain worsens with deep breath",
+},
+{
+id: "s_1203",
+type: "symptom",
+name: "Facial pain, more than 2 hours",
+common_name: "Face pain lasting more than a couple of hours",
+},
+{
+id: "s_1206",
+type: "symptom",
+name: "Back pain, improves with rest",
+common_name: "Back pain decreases during rest",
+},
+{
+id: "s_1207",
+type: "symptom",
+name: "Abdominal pain, exacerbating after caffeine consumption",
+common_name: "Abdominal pain worsening after caffeine consumption",
+},
+{
+id: "s_1209",
+type: "symptom",
+name: "Skin pallor, sudden",
+common_name: "Sudden paleness of skin",
+},
+{
+id: "s_1210",
+type: "symptom",
+name: "Mucosal pallor",
+common_name: "Pale mouth or eyelids",
+},
+{
+id: "s_1213",
+type: "symptom",
+name: "Mucosal pallor, sudden",
+common_name: "Sudden paleness of mouth or eyelids",
+},
+{
+id: "s_1226",
+type: "symptom",
+name: "Genu varum",
+common_name: "Bowlegs",
+},
+{
+id: "s_1227",
+type: "symptom",
+name: "Impaired lateral eye motion",
+common_name: "Difficulty looking sideways away from the nose",
+},
+{
+id: "s_1228",
+type: "symptom",
+name: "Convergent strabismus",
+common_name: "Crossed eyes",
+},
+{
+id: "s_1229",
+type: "symptom",
+name: "Diplopia with horizontal image dispersion",
+common_name: "Double vision with images appearing side by side",
+},
+{
+id: "s_1230",
+type: "symptom",
+name: "Head tilt in order to avoid diplopia",
+common_name: "Double vision improves while tilting head",
+},
+{
+id: "s_1232",
+type: "symptom",
+name: "Diplopia while looking down and medially",
+common_name: "Double vision while looking down and toward the nose",
+},
+{
+id: "s_1235",
+type: "symptom",
+name: "Diplopia while looking in any direction",
+common_name: "Double vision while looking in any direction",
+},
+{
+id: "s_1236",
+type: "symptom",
+name: "Divergent strabismus",
+common_name: "One or both eyes turning outward",
+},
+{
+id: "s_1237",
+type: "symptom",
+name: "Ocular bulb rotation laterally and downward",
+common_name: "Eye rotation sideways and downward",
+},
+{
+id: "s_1238",
+type: "symptom",
+name: "Pupil or pupils unreactive to accommodation",
+common_name: "Pupil or pupils unreactive to accommodation",
+},
+{
+id: "s_1239",
+type: "symptom",
+name: "Impaired upward eye motion",
+common_name: "Difficulty looking up",
+},
+{
+id: "s_1240",
+type: "symptom",
+name: "Impaired medial eye motion",
+common_name: "Difficulty looking inwards towards the nose",
+},
+{
+id: "s_1241",
+type: "symptom",
+name: "Impaired downward eye motion",
+common_name: "Difficulty looking down",
+},
+{
+id: "s_1250",
+type: "symptom",
+name: "Groin pain, exacerbated by coughing, sneezing, laughing, or exercising",
+common_name: "Pain in groin during coughing, sneezing, laughing, or physical exercises",
+},
+{
+id: "s_1254",
+type: "symptom",
+name: "Gordonssign",
+common_name: "Gordonssign",
+},
+{
+id: "s_1255",
+type: "symptom",
+name: "Rossolimossign",
+common_name: "Rossolimossign",
+},
+{
+id: "s_1256",
+type: "symptom",
+name: "Oppenheimssign",
+common_name: "Oppenheimssign",
+},
+{
+id: "s_1257",
+type: "symptom",
+name: "Bingssign",
+common_name: "Bingssign",
+},
+{
+id: "s_1258",
+type: "symptom",
+name: "Chaddockssign",
+common_name: "Chaddockssign",
+},
+{
+id: "s_1259",
+type: "symptom",
+name: "Schaefferssign",
+common_name: "Schaefferssign",
+},
+{
+id: "s_1260",
+type: "symptom",
+name: "Stranskyssign",
+common_name: "Stranskyssign",
+},
+{
+id: "s_1261",
+type: "symptom",
+name: "Mendel-Bekhterev sign",
+common_name: "Mendel-Bekhterev sign",
+},
+{
+id: "s_1262",
+type: "symptom",
+name: "Tromnerssign",
+common_name: "Tromnerssign",
+},
+{
+id: "s_1263",
+type: "symptom",
+name: "Gonda-Allen sign",
+common_name: "Gonda-Allen sign",
+},
+{
+id: "s_1264",
+type: "symptom",
+name: "Tremors, intention",
+common_name: "Intention tremors",
+},
+{
+id: "s_1265",
+type: "symptom",
+name: "Dissociated sensory loss",
+common_name: "Dissociated sensory loss",
+},
+{
+id: "s_1268",
+type: "symptom",
+name: "Corneal reflex weak or absent",
+common_name: "Corneal reflex weak or absent",
+},
+{
+id: "s_1270",
+type: "symptom",
+name: "Sterlingssign",
+common_name: "Sterlingssign",
+},
+{
+id: "s_1271",
+type: "symptom",
+name: "Jacobsohn sign",
+common_name: "Finger flexion when tapping distal base of radius bone",
+},
+{
+id: "s_1272",
+type: "symptom",
+name: "Allen-Cleckley sign",
+common_name: "Allen-Cleckley sign",
+},
+{
+id: "s_1273",
+type: "symptom",
+name: "Cornellssign",
+common_name: "Cornellssign",
+},
+{
+id: "s_1274",
+type: "symptom",
+name: "Moniz sign",
+common_name: "Moniz sign",
+},
+{
+id: "s_1275",
+type: "symptom",
+name: "Strumpellssign",
+common_name: "Strumpellssign",
+},
+{
+id: "s_1277",
+type: "symptom",
+name: "Decreased tongue motility",
+common_name: "Difficulty moving tongue",
+},
+{
+id: "s_1278",
+type: "symptom",
+name: "Increased palatine reflex",
+common_name: "Increased palatine reflex",
+},
+{
+id: "s_1279",
+type: "symptom",
+name: "Increased pharyngeal reflex",
+common_name: "Increased pharyngeal reflex",
+},
+{
+id: "s_1280",
+type: "symptom",
+name: "Weak or absent pharyngeal reflex",
+common_name: "Weak or absent pharyngeal reflex",
+},
+{
+id: "s_1281",
+type: "symptom",
+name: "Clasp-knife spasticity",
+common_name: "Clasp-knife spasticity",
+},
+{
+id: "s_1282",
+type: "symptom",
+name: "Lead-pipe rigidity",
+common_name: "Constant muscle stiffness in a limb",
+},
+{
+id: "s_1283",
+type: "symptom",
+name: "Cogwheel muscle rigidity",
+common_name: "Cogwheel muscle rigidity",
+},
+{
+id: "s_1285",
+type: "symptom",
+name: "Sagging of the palate ipsilateral to suspected nerve damage",
+common_name: "Sagging of the palate ipsilateral to suspected nerve damage",
+},
+{
+id: "s_1287",
+type: "symptom",
+name: "Uvula deviation towards unaffected side",
+common_name: "Uvula deviation towards unaffected side",
+},
+{
+id: "s_1289",
+type: "symptom",
+name: "Ovarian enlargement",
+common_name: "Ovarian enlargement",
+},
+{
+id: "s_1291",
+type: "symptom",
+name: "Bilateral muscle paralysis",
+common_name: "Bilateral muscle paralysis",
+},
+{
+id: "s_1295",
+type: "symptom",
+name: "Hiccups",
+common_name: "Hiccups",
+},
+{
+id: "s_1297",
+type: "symptom",
+name: "Motor retardation",
+common_name: "Slowed movements",
+},
+{
+id: "s_1298",
+type: "symptom",
+name: "Dystonia",
+common_name: "Dystonia",
+},
+{
+id: "s_1302",
+type: "symptom",
+name: "Goldflamssign",
+common_name: "Goldflamssign",
+},
+{
+id: "s_1303",
+type: "symptom",
+name: "Nasal speech",
+common_name: "Nasal voice",
+},
+{
+id: "s_1304",
+type: "symptom",
+name: "Excessive saliva production",
+common_name: "Excessive salivation",
+},
+{
+id: "s_1310",
+type: "symptom",
+name: "Brown nail discolouration",
+common_name: "Brown nail discolouration",
+},
+{
+id: "s_1311",
+type: "symptom",
+name: "Edema, finger",
+common_name: "Swollen finger",
+},
+{
+id: "s_1312",
+type: "symptom",
+name: "Perionychial pain",
+common_name: "Pain of the skin around the nail",
+},
+{
+id: "s_1313",
+type: "symptom",
+name: "Pain in upper limb, one finger",
+common_name: "Pain in one finger",
+},
+{
+id: "s_1314",
+type: "symptom",
+name: "Erythema, finger",
+common_name: "Red finger",
+},
+{
+id: "s_1315",
+type: "symptom",
+name: "Pus under the skin of the finger",
+common_name: "Pus under the skin of the finger",
+},
+{
+id: "s_1316",
+type: "symptom",
+name: "Auscultative rhonchi over the thorax",
+common_name: "Auscultative rhonchi over the thorax",
+},
+{
+id: "s_1317",
+type: "symptom",
+name: "Dyspnea, paroxysmal nocturnal",
+common_name: "Shortness of breath while sleeping",
+},
+{
+id: "s_1322",
+type: "symptom",
+name: "Axillary or inguinal freckles",
+common_name: "Freckles in the groins or armpits",
+},
+{
+id: "s_1323",
+type: "symptom",
+name: "Presence of neurofibromas",
+common_name: "Presence of neurofibromas",
+},
+{
+id: "s_1324",
+type: "symptom",
+name: "Lisch nodules",
+common_name: "Lisch nodules",
+},
+{
+id: "s_1328",
+type: "symptom",
+name: "Colour vision deficiency",
+common_name: "Colour blind",
+},
+{
+id: "s_1329",
+type: "symptom",
+name: "Optic nerve disc pallor",
+common_name: "Optic nerve disc pallor",
+},
+{
+id: "s_1330",
+type: "symptom",
+name: "Café au lait macules",
+common_name: "At least 6 light brown marks on skin",
+},
+{
+id: "s_1332",
+type: "symptom",
+name: "Fatigue, weakness after exercise",
+common_name: "Weakness worsening after exercise",
+},
+{
+id: "s_1338",
+type: "symptom",
+name: "Damage to two separate areas of innervation",
+common_name: "Damage to two separate areas of innervation",
+},
+{
+id: "s_1340",
+type: "symptom",
+name: "Westphals sign",
+common_name: "Westphals sign",
+},
+{
+id: "s_1342",
+type: "symptom",
+name: "Transilluminable scrotum",
+common_name: "Transilluminable scrotum",
+},
+{
+id: "s_1344",
+type: "symptom",
+name: "Retinal hemorrhage",
+common_name: "Retinal hemorrhage",
+},
+{
+id: "s_1345",
+type: "symptom",
+name: "Confusion, after trauma",
+common_name: "Confusion after an injury",
+},
+{
+id: "s_1346",
+type: "symptom",
+name: "Hard retinal exudates",
+common_name: "Hard retinal exudates",
+},
+{
+id: "s_1347",
+type: "symptom",
+name: "Soft retinal exudates",
+common_name: "Soft retinal exudates",
+},
+{
+id: "s_1348",
+type: "symptom",
+name: "Weak peripheral pulses",
+common_name: "Weak peripheral pulses",
+},
+{
+id: "s_1349",
+type: "symptom",
+name: "Headache, forehead",
+common_name: "Headache located near the forehead",
+},
+{
+id: "s_1365",
+type: "symptom",
+name: "Vomiting, more often in the morning",
+common_name: "Vomiting more often in the morning",
+},
+{
+id: "s_1367",
+type: "symptom",
+name: "Pharyngeal erythema",
+common_name: "Red throat",
+},
+{
+id: "s_1369",
+type: "symptom",
+name: "Abdominal pain, sharp and stabbing",
+common_name: "Sharp and stabbing abdominal pain",
+},
+{
+id: "s_1371",
+type: "symptom",
+name: "Palatine petechiae",
+common_name: "Pinpoint-size red dots on soft part of roof of mouth",
+},
+{
+id: "s_1376",
+type: "symptom",
+name: "Diarrhea, rice water",
+common_name: "Diarrhea that looks like rice water",
+},
+{
+id: "s_1377",
+type: "symptom",
+name: "Rose spots on lower chest and abdomen",
+common_name: "Rose spots on lower chest and abdomen",
+},
+{
+id: "s_1378",
+type: "symptom",
+name: "Levines sign",
+common_name: "Levines sign",
+},
+{
+id: "s_1379",
+type: "symptom",
+name: "Tremors, pill-rolling",
+common_name: "Pill-rolling tremors",
+},
+{
+id: "s_1380",
+type: "symptom",
+name: "Pericardial friction rub",
+common_name: "Pericardial friction rub",
+},
+{
+id: "s_1381",
+type: "symptom",
+name: "Sternal rub",
+common_name: "Sternal rub",
+},
+{
+id: "s_1382",
+type: "symptom",
+name: "Pain caused by firm pressure on tibia",
+common_name: "Pain caused by firm pressure on tibia",
+},
+{
+id: "s_1383",
+type: "symptom",
+name: "Intense, non-committal relationships",
+common_name: "Intense, non-committal relationships",
+},
+{
+id: "s_1386",
+type: "symptom",
+name: "Bleeding into muscles",
+common_name: "Bleeding into muscles",
+},
+{
+id: "s_1387",
+type: "symptom",
+name: "Abdominal pain, epigastric",
+common_name: "Upper central abdominal pain",
+},
+{
+id: "s_1388",
+type: "symptom",
+name: "Neck asymmetry",
+common_name: "Asymmetrical neck",
+},
+{
+id: "s_1390",
+type: "symptom",
+name: "Enlargement of palatine tonsil, unilateral",
+common_name: "Swollen throat on one side",
+},
+{
+id: "s_1392",
+type: "symptom",
+name: "Abdominal tenderness, right upper quadrant",
+common_name: "Pain when pressing upper-right part of the abdomen",
+},
+{
+id: "s_1393",
+type: "symptom",
+name: "Painful defecation",
+common_name: "Pain when passing stool",
+},
+{
+id: "s_1394",
+type: "symptom",
+name: "Loss of the lingual papillae",
+common_name: "Smooth tongue",
+},
+{
+id: "s_1395",
+type: "symptom",
+name: "Decreased intensity of breath sounds, right basilar lung zones",
+common_name: "Decreased intensity of breath sounds, right basilar lung zones",
+},
+{
+id: "s_1396",
+type: "symptom",
+name: "Pleural friction rub",
+common_name: "Pleural friction rub",
+},
+{
+id: "s_1397",
+type: "symptom",
+name: "Priapism",
+common_name: "Prolonged erection",
+},
+{
+id: "s_1398",
+type: "symptom",
+name: "Vitreous hemorrhage",
+common_name: "Vitreous hemorrhage",
+},
+{
+id: "s_1399",
+type: "symptom",
+name: "Shafers sign",
+common_name: "Shafers sign",
+},
+{
+id: "s_1400",
+type: "symptom",
+name: "Abdominal tenderness, hypogastric region",
+common_name: "Pain when pressing lower part of the abdomen",
+},
+{
+id: "s_1402",
+type: "symptom",
+name: "Weiss ring",
+common_name: "Weiss ring",
+},
+{
+id: "s_1403",
+type: "symptom",
+name: "Marcus Gunn pupil",
+common_name: "Marcus Gunn pupil",
+},
+{
+id: "s_1404",
+type: "symptom",
+name: "Low intraocular pressure, 4 to 5 mmHg difference in affected eye compared to the other eye",
+common_name: "Low intraocular pressure, 4 to 5 mmHg difference in affected eye compared to the other eye",
+},
+{
+id: "s_1405",
+type: "symptom",
+name: "Local elevation of retina",
+common_name: "Local elevation of retina",
+},
+{
+id: "s_1406",
+type: "symptom",
+name: "Local grey discolouration of retina",
+common_name: "Local grey discolouration of retina",
+},
+{
+id: "s_1407",
+type: "symptom",
+name: "Local dark retinal blood vessels that lie in folds",
+common_name: "Local dark retinal blood vessels that lie in folds",
+},
+{
+id: "s_1408",
+type: "symptom",
+name: "Local retinal undulation",
+common_name: "Local retinal undulation",
+},
+{
+id: "s_1409",
+type: "symptom",
+name: "Demarcation of retinal detachment (pigmented or nonpigmented)",
+common_name: "Demarcation of retinal detachment (pigmented or nonpigmented)",
+},
+{
+id: "s_1410",
+type: "symptom",
+name: "Optic disc neovascularization",
+common_name: "Optic disc neovascularization",
+},
+{
+id: "s_1411",
+type: "symptom",
+name: "Iris neovascularization",
+common_name: "Iris neovascularization",
+},
+{
+id: "s_1412",
+type: "symptom",
+name: "Retinal microaneurysms",
+common_name: "Retinal microaneurysms",
+},
+{
+id: "s_1413",
+type: "symptom",
+name: "Cystoid macular edema",
+common_name: "Cystoid macular edema",
+},
+{
+id: "s_1414",
+type: "symptom",
+name: "Retinal swelling",
+common_name: "Retinal swelling",
+},
+{
+id: "s_1415",
+type: "symptom",
+name: "Retinal neovascularization elsewhere",
+common_name: "Retinal neovascularization elsewhere",
+},
+{
+id: "s_1416",
+type: "symptom",
+name: "Intraretinal microvascular abnormalities",
+common_name: "Intraretinal microvascular abnormalities",
+},
+{
+id: "s_1417",
+type: "symptom",
+name: "Dark-red spots in optic disc vessels",
+common_name: "Dark-red spots in optic disc vessels",
+},
+{
+id: "s_1418",
+type: "symptom",
+name: "Retinal artery occlusions",
+common_name: "Retinal artery occlusions",
+},
+{
+id: "s_1421",
+type: "symptom",
+name: "Tremors, flapping",
+common_name: "Flapping tremors",
+},
+{
+id: "s_1422",
+type: "symptom",
+name: "Nipple discharge, other than milk",
+common_name: "Leaking from the nipple discharge that is not milk",
+},
+{
+id: "s_1425",
+type: "symptom",
+name: "Facial muscle spasms",
+common_name: "Facial muscle spasms",
+},
+{
+id: "s_1426",
+type: "symptom",
+name: "Spasms in upper extremities",
+common_name: "Spasms in arms or hands",
+},
+{
+id: "s_1429",
+type: "symptom",
+name: "Nosebleed",
+common_name: "Bleeding from nose",
+},
+{
+id: "s_1430",
+type: "symptom",
+name: "Joint pain, wrist",
+common_name: "Wrist pain",
+},
+{
+id: "s_1431",
+type: "symptom",
+name: "Edema, wrist joint",
+common_name: "Swollen wrist",
+},
+{
+id: "s_1432",
+type: "symptom",
+name: "Dyspepsia",
+common_name: "Indigestion",
+},
+{
+id: "s_1433",
+type: "symptom",
+name: "Edema, lip",
+common_name: "Swollen lips",
+},
+{
+id: "s_1434",
+type: "symptom",
+name: "Steatorrhea",
+common_name: "Fatty stools",
+},
+{
+id: "s_1436",
+type: "symptom",
+name: "Facial pain, paranasal sinus",
+common_name: "Sinus pain or pressure",
+},
+{
+id: "s_1437",
+type: "symptom",
+name: "Pleural effusion",
+common_name: "Pleural effusion",
+},
+{
+id: "s_1442",
+type: "symptom",
+name: "Edema, periorbital, both eyes",
+common_name: "Swelling around both eyes",
+},
+{
+id: "s_1447",
+type: "symptom",
+name: "Edema, upper limb",
+common_name: "Swelling of the upper limb",
+},
+{
+id: "s_1449",
+type: "symptom",
+name: "Paresthesia, one upper limb",
+common_name: "Tingling or numbness of one upper limb",
+},
+{
+id: "s_1451",
+type: "symptom",
+name: "Kussmaul breathing",
+common_name: "Abnormally deep, laboured, and gasping breathing",
+},
+{
+id: "s_1452",
+type: "symptom",
+name: "Pain in both upper limbs",
+common_name: "Pain in both upper limbs",
+},
+{
+id: "s_1453",
+type: "symptom",
+name: "Pain in both lower limbs",
+common_name: "Pain in both lower limbs",
+},
+{
+id: "s_1454",
+type: "symptom",
+name: "Tremors, kinetic",
+common_name: "Trembling during movement",
+},
+{
+id: "s_1455",
+type: "symptom",
+name: "Tremors, resting",
+common_name: "Trembling at rest",
+},
+{
+id: "s_1456",
+type: "symptom",
+name: "Chorea",
+common_name: "Chorea",
+},
+{
+id: "s_1458",
+type: "symptom",
+name: "Amenorrhea, primary",
+common_name: "Absence of first menstrual period at age 16",
+},
+{
+id: "s_1462",
+type: "symptom",
+name: "Shallow breathing",
+common_name: "Shallow breathing",
+},
+{
+id: "s_1463",
+type: "symptom",
+name: "Restless legs, nocturnal",
+common_name: "Nighttime restless legs",
+},
+{
+id: "s_1464",
+type: "symptom",
+name: "Edema, one hand",
+common_name: "Swollen hand",
+},
+{
+id: "s_1465",
+type: "symptom",
+name: "Temporary blindness",
+common_name: "Temporary blindness",
+},
+{
+id: "s_1466",
+type: "symptom",
+name: "Tinnitus, pulsatile",
+common_name: "Pulsing sound in ears",
+},
+{
+id: "s_1467",
+type: "symptom",
+name: "Strawberry tongue",
+common_name: "Strawberry tongue",
+},
+{
+id: "s_1468",
+type: "symptom",
+name: "Erythema, facial",
+common_name: "Red skin on face",
+},
+{
+id: "s_1469",
+type: "symptom",
+name: "Erythema, large portion of body",
+common_name: "Redness and scaling on almost the entire body",
+},
+{
+id: "s_1470",
+type: "symptom",
+name: "Skin desquamation",
+common_name: "Skin shedding",
+},
+{
+id: "s_1471",
+type: "symptom",
+name: "Postnasal drip",
+common_name: "Mucus dripping at the back of the throat",
+},
+{
+id: "s_1472",
+type: "symptom",
+name: "Kayser-Fleischer ring",
+common_name: "Dark rings appearing around the iris of the eye",
+},
+{
+id: "s_1474",
+type: "symptom",
+name: "Skull lesions",
+common_name: "Skull lesions",
+},
+{
+id: "s_1476",
+type: "symptom",
+name: "Myringitis",
+common_name: "Myringitis",
+},
+{
+id: "s_1479",
+type: "symptom",
+name: "Dizziness, head rotation",
+common_name: "Dizziness while turning the head",
+},
+{
+id: "s_1480",
+type: "symptom",
+name: "Breast pain or tenderness, bilateral",
+common_name: "Pain or tenderness in both breasts",
+},
+{
+id: "s_1481",
+type: "symptom",
+name: "Hyperalgesia",
+common_name: "Hyperalgesia",
+},
+{
+id: "s_1483",
+type: "symptom",
+name: "Neck pain",
+common_name: "Pain in the neck",
+},
+{
+id: "s_1484",
+type: "symptom",
+name: "Decreased hearing, progressive hearing loss",
+common_name: "Progressive hearing loss without fluctuation",
+},
+{
+id: "s_1486",
+type: "symptom",
+name: "Paraspinal muscle tenderness",
+common_name: "Paraspinal muscle tenderness",
+},
+{
+id: "s_1488",
+type: "symptom",
+name: "Increased expiratory phase",
+common_name: "Increased expiratory phase",
+},
+{
+id: "s_1492",
+type: "symptom",
+name: "Scleral icterus",
+common_name: "Yellow eyes",
+},
+{
+id: "s_1494",
+type: "symptom",
+name: "Rebound tenderness",
+common_name: "Rebound tenderness",
+},
+{
+id: "s_1496",
+type: "symptom",
+name: "Paranasal sinuses tenderness",
+common_name: "Paranasal sinuses tender to palpation",
+},
+{
+id: "s_1498",
+type: "symptom",
+name: "Erythematous tonsils",
+common_name: "Unusually red tonsils",
+},
+{
+id: "s_1502",
+type: "symptom",
+name: "Achilles tendon hyperreflexia",
+common_name: "Achilles tendon hyperreflexia",
+},
+{
+id: "s_1508",
+type: "symptom",
+name: "Prolonged capillary refill time",
+common_name: "Prolonged capillary refill time",
+},
+{
+id: "s_1509",
+type: "symptom",
+name: "Chest pain, substernal",
+common_name: "Chest pain behind breastbone",
+},
+{
+id: "s_1510",
+type: "symptom",
+name: "Dermatological changes, hot to the touch",
+common_name: "Skin change hot to the touch",
+},
+{
+id: "s_1514",
+type: "symptom",
+name: "Abdominal tenderness",
+common_name: "Pain when pressing the abdomen",
+},
+{
+id: "s_1528",
+type: "symptom",
+name: "Abdominal pain, right upper quadrant",
+common_name: "Upper right side abdominal pain",
+},
+{
+id: "s_1531",
+type: "symptom",
+name: "Abdominal pain, right lower quadrant",
+common_name: "Lower right side abdominal pain",
+},
+{
+id: "s_1532",
+type: "symptom",
+name: "Abdominal pain, periumbilical",
+common_name: "Central abdominal pain",
+},
+{
+id: "s_1533",
+type: "symptom",
+name: "Rhinitis triggered by environment",
+common_name: "Runny or stuffy nose triggered by environment",
+},
+{
+id: "s_1534",
+type: "symptom",
+name: "Tonsil stones",
+common_name: "White or yellow formations in tonsils",
+},
+{
+id: "s_1535",
+type: "symptom",
+name: "Headache, chronic",
+common_name: "Headaches for 3 months or more",
+},
+{
+id: "s_1536",
+type: "symptom",
+name: "Spine asymmetry",
+common_name: "Spine asymmetry",
+},
+{
+id: "s_1538",
+type: "symptom",
+name: "Decreased hearing, sudden hearing loss",
+common_name: "Sudden hearing loss without obvious cause",
+},
+{
+id: "s_1543",
+type: "symptom",
+name: "Loss of consciousness",
+common_name: "Loss of consciousness",
+},
+{
+id: "s_1544",
+type: "symptom",
+name: "Scarlatiniform rash",
+common_name: "Scarlatiniform rash",
+},
+{
+id: "s_1546",
+type: "symptom",
+name: "Cheyne-Stokes respiration",
+common_name: "Cheyne-Stokes respiration",
+},
+{
+id: "s_1547",
+type: "symptom",
+name: "Fatigue, more than 6 months",
+common_name: "Fatigue lasting more than 6 months",
+},
+{
+id: "s_1548",
+type: "symptom",
+name: "Pseudomembrane in nose or throat",
+common_name: "Thick grey layer in nose or throat",
+},
+{
+id: "s_1551",
+type: "symptom",
+name: "Inability to pass flatus",
+common_name: "Inability to pass gas",
+},
+{
+id: "s_1552",
+type: "symptom",
+name: "Bowel sounds, hyperactive, high-pitched",
+common_name: "Excessive bowel sounds",
+},
+{
+id: "s_1553",
+type: "symptom",
+name: "Bowel sounds, decreased",
+common_name: "Decreased bowel sounds",
+},
+{
+id: "s_1555",
+type: "symptom",
+name: "Dances sign",
+common_name: "Dances sign",
+},
+{
+id: "s_1557",
+type: "symptom",
+name: "Abdominal pain, diffuse",
+common_name: "Widespread abdominal pain",
+},
+{
+id: "s_1558",
+type: "symptom",
+name: "Abdominal guarding",
+common_name: "Abdominal guarding",
+},
+{
+id: "s_1561",
+type: "symptom",
+name: "Xanthoma",
+common_name: "Yellowish deposits under skin",
+},
+{
+id: "s_1562",
+type: "symptom",
+name: "Wheezing, stridor",
+common_name: "Stridor",
+},
+{
+id: "s_1563",
+type: "symptom",
+name: "Itching eye",
+common_name: "Itchy eye",
+},
+{
+id: "s_1565",
+type: "symptom",
+name: "Feeling of rectal fullness",
+common_name: "Feeling of rectal fullness",
+},
+{
+id: "s_1569",
+type: "symptom",
+name: "Vaginal discharge, white and clumpy",
+common_name: "White and clumpy vaginal discharge",
+},
+{
+id: "s_1570",
+type: "symptom",
+name: "Gastric symptoms, after lactose ingestion",
+common_name: "Abdominal symptoms after eating or drinking foods containing lactose",
+},
+{
+id: "s_1571",
+type: "symptom",
+name: "Dermatological changes, painful",
+common_name: "Painful skin changes",
+},
+{
+id: "s_1574",
+type: "symptom",
+name: "Difficulty achieving orgasm",
+common_name: "Difficulty achieving orgasm",
+},
+{
+id: "s_1576",
+type: "symptom",
+name: "Carotid bruit",
+common_name: "Cervical artery murmur",
+},
+{
+id: "s_1577",
+type: "symptom",
+name: "Discharge from ear, bloody",
+common_name: "Bleeding from ear",
+},
+{
+id: "s_1580",
+type: "symptom",
+name: "Chest pain, worsens on palpation of costochondral joints",
+common_name: "Chest pain worsening on palpation of costochondral joints",
+},
+{
+id: "s_1581",
+type: "symptom",
+name: "Edema, costochondral junctions",
+common_name: "Swelling in the middle of the chest",
+},
+{
+id: "s_1586",
+type: "symptom",
+name: "Unilateral vulval swelling",
+common_name: "Vulval swelling on one side",
+},
+{
+id: "s_1587",
+type: "symptom",
+name: "Depersonalization",
+common_name: "Feeling detached from own body",
+},
+{
+id: "s_1589",
+type: "symptom",
+name: "Abdominal tenderness, left upper quadrant",
+common_name: "Pain when pressing upper-left part of the abdomen",
+},
+{
+id: "s_1591",
+type: "symptom",
+name: "Abdominal pain, left upper quadrant",
+common_name: "Upper left side abdominal pain",
+},
+{
+id: "s_1598",
+type: "symptom",
+name: "Abdominal pain, below navel",
+common_name: "Lower abdominal pain",
+},
+{
+id: "s_1601",
+type: "symptom",
+name: "Chest pain, stabbing",
+common_name: "Stabbing chest pain",
+},
+{
+id: "s_1602",
+type: "symptom",
+name: "Dermatological changes, located in genital area, chancre",
+common_name: "Painless genital ulcer",
+},
+{
+id: "s_1603",
+type: "symptom",
+name: "Delayed language development",
+common_name: "Delayed language development",
+},
+{
+id: "s_1605",
+type: "symptom",
+name: "Nose pain",
+common_name: "Painful nose",
+},
+{
+id: "s_1610",
+type: "symptom",
+name: "Joint pain, knee, during movement",
+common_name: "Pain when moving knee",
+},
+{
+id: "s_1616",
+type: "symptom",
+name: "Dandruff",
+common_name: "Dandruff",
+},
+{
+id: "s_1617",
+type: "symptom",
+name: "Pruritus, scalp",
+common_name: "Itchy scalp",
+},
+{
+id: "s_1618",
+type: "symptom",
+name: "Lower limb tenderness",
+common_name: "Pain when pressing lower limb",
+},
+{
+id: "s_1619",
+type: "symptom",
+name: "Upper limb tenderness",
+common_name: "Pain when pressing upper limb",
+},
+{
+id: "s_1620",
+type: "symptom",
+name: "Pain in lower limb, calf",
+common_name: "Pain in calf",
+},
+{
+id: "s_1621",
+type: "symptom",
+name: "Joint pain, ankle",
+common_name: "Ankle pain",
+},
+{
+id: "s_1622",
+type: "symptom",
+name: "Lower limb tenderness, calf",
+common_name: "Pain when pressing calf",
+},
+{
+id: "s_1623",
+type: "symptom",
+name: "Joint pain, during ankle movement",
+common_name: "Pain when moving ankle",
+},
+{
+id: "s_1625",
+type: "symptom",
+name: "Dyspnea, lasting more than 4 weeks",
+common_name: "Shortness of breath lasting more than 4 weeks",
+},
+{
+id: "s_1632",
+type: "symptom",
+name: "Joint pain, elbow",
+common_name: "Elbow pain",
+},
+{
+id: "s_1634",
+type: "symptom",
+name: "Joint pain, during elbow movement",
+common_name: "Pain when moving elbow",
+},
+{
+id: "s_1635",
+type: "symptom",
+name: "Edema, elbow joint",
+common_name: "Swollen elbow",
+},
+{
+id: "s_1636",
+type: "symptom",
+name: "Joint pain, during wrist movement",
+common_name: "Pain when moving wrist",
+},
+{
+id: "s_1639",
+type: "symptom",
+name: "Joint pain, thumb",
+common_name: "Thumb pain",
+},
+{
+id: "s_1641",
+type: "symptom",
+name: "Joint pain, during thumb movement",
+common_name: "Pain when moving thumb",
+},
+{
+id: "s_1645",
+type: "symptom",
+name: "Foot pain, pain in back of foot during single-leg heel raise",
+common_name: "Pain in the back of foot while standing on toes",
+},
+{
+id: "s_1647",
+type: "symptom",
+name: "Annular skin lesions",
+common_name: "Ring-shaped skin changes",
+},
+{
+id: "s_1650",
+type: "symptom",
+name: "Skin thickening",
+common_name: "Skin thickening",
+},
+{
+id: "s_1652",
+type: "symptom",
+name: "Edema, hip joint",
+common_name: "Hip swelling",
+},
+{
+id: "s_1654",
+type: "symptom",
+name: "Joint pain, shoulder",
+common_name: "Shoulder pain",
+},
+{
+id: "s_1655",
+type: "symptom",
+name: "Edema, shoulder joint",
+common_name: "Swollen shoulder",
+},
+{
+id: "s_1656",
+type: "symptom",
+name: "Joint pain, tenderness",
+common_name: "Pain when pressing joint",
+},
+{
+id: "s_1665",
+type: "symptom",
+name: "Hair loss, generalized",
+common_name: "Generalized hair volume loss",
+},
+{
+id: "s_1671",
+type: "symptom",
+name: "Broken hair",
+common_name: "Broken hair",
+},
+{
+id: "s_1673",
+type: "symptom",
+name: "Oral lesions, white plaques",
+common_name: "White patches inside the mouth",
+},
+{
+id: "s_1674",
+type: "symptom",
+name: "Skin pain",
+common_name: "Skin pain",
+},
+{
+id: "s_1676",
+type: "symptom",
+name: "Corn or callus",
+common_name: "Corn or callus",
+},
+{
+id: "s_1680",
+type: "symptom",
+name: "Dermatological changes, hyperpigmentation of the skin",
+common_name: "Dark skin changes",
+},
+{
+id: "s_1682",
+type: "symptom",
+name: "Rhinophyma",
+common_name: "Ruddy bulbous nose",
+},
+{
+id: "s_1684",
+type: "symptom",
+name: "Burning skin, face",
+common_name: "Burning sensation on face",
+},
+{
+id: "s_1685",
+type: "symptom",
+name: "Telangiectasias, face",
+common_name: "Spider veins on the face",
+},
+{
+id: "s_1689",
+type: "symptom",
+name: "Kernigs sign",
+common_name: "Kernigs sign",
+},
+{
+id: "s_1690",
+type: "symptom",
+name: "Brudzinskis sign",
+common_name: "Brudzinskis sign",
+},
+{
+id: "s_1692",
+type: "symptom",
+name: "Dermatological changes, exacerbated by alcohol consumption",
+common_name: "Skin changes worsening after alcohol consumption",
+},
+{
+id: "s_1693",
+type: "symptom",
+name: "Decreased intensity of breath sounds",
+common_name: "Decreased intensity of breath sounds",
+},
+{
+id: "s_1695",
+type: "symptom",
+name: "Interpersonal relationship difficulties",
+common_name: "Interpersonal relationship difficulties",
+},
+{
+id: "s_1696",
+type: "symptom",
+name: "Echolalia",
+common_name: "Unsolicitedly repeating words or phrases",
+},
+{
+id: "s_1697",
+type: "symptom",
+name: "Restricted interests",
+common_name: "Having strong, limited, or unusual interests",
+},
+{
+id: "s_1698",
+type: "symptom",
+name: "Lack of eye contact",
+common_name: "Avoiding eye contact",
+},
+{
+id: "s_1713",
+type: "symptom",
+name: "Reduced range of joint motion",
+common_name: "Joint hard to move",
+},
+{
+id: "s_1715",
+type: "symptom",
+name: "Pathologic fractures",
+common_name: "Broken bone not caused by trauma",
+},
+{
+id: "s_1716",
+type: "symptom",
+name: "Feeling of vaginal fullness",
+common_name: "Vaginal fullness",
+},
+{
+id: "s_1717",
+type: "symptom",
+name: "Bulge protruding through vaginal opening",
+common_name: "Vaginal bulge",
+},
+{
+id: "s_1719",
+type: "symptom",
+name: "Osler nodes",
+common_name: "Osler nodes",
+},
+{
+id: "s_1720",
+type: "symptom",
+name: "Cardiac murmurs",
+common_name: "Cardiac murmurs",
+},
+{
+id: "s_1721",
+type: "symptom",
+name: "Nystagmus, horizontal",
+common_name: "Horizontal nystagmus",
+},
+{
+id: "s_1725",
+type: "symptom",
+name: "Lower limb pallor",
+common_name: "Pale leg",
+},
+{
+id: "s_1729",
+type: "symptom",
+name: "Abdominal pain, left lower quadrant",
+common_name: "Lower left side abdominal pain",
+},
+{
+id: "s_1731",
+type: "symptom",
+name: "Dix-Hallpike maneuver, rotatory nystagmus",
+common_name: "Dix-Hallpike maneuver, rotatory nystagmus",
+},
+{
+id: "s_1732",
+type: "symptom",
+name: "Rovsings sign",
+common_name: "Rovsings sign",
+},
+{
+id: "s_1733",
+type: "symptom",
+name: "Lymph node pain",
+common_name: "Painful lymph nodes",
+},
+{
+id: "s_1738",
+type: "symptom",
+name: "Rombergs sign",
+common_name: "Rombergs sign",
+},
+{
+id: "s_1744",
+type: "symptom",
+name: "Audible popping in knee during injury",
+common_name: "Audible popping in knee during injury",
+},
+{
+id: "s_1745",
+type: "symptom",
+name: "Knee instability",
+common_name: "Unstable knee",
+},
+{
+id: "s_1761",
+type: "symptom",
+name: "Dermatological changes, aggravated by stress",
+common_name: "Skin changes worsening under stress",
+},
+{
+id: "s_1762",
+type: "symptom",
+name: "Headache, exacerbated by increased stress",
+common_name: "Headache worsened by stress",
+},
+{
+id: "s_1763",
+type: "symptom",
+name: "Chest pain, exacerbated by stress",
+common_name: "Chest pain worsened by stress",
+},
+{
+id: "s_1765",
+type: "symptom",
+name: "Tremors, stress-related",
+common_name: "Trembling worsening under stress",
+},
+{
+id: "s_1766",
+type: "symptom",
+name: "Myalgia, exacerbated by stress",
+common_name: "Muscle pain triggered by stress",
+},
+{
+id: "s_1767",
+type: "symptom",
+name: "Gastric symptoms, stress-related",
+common_name: "Stress-related gastric symptoms",
+},
+{
+id: "s_1768",
+type: "symptom",
+name: "Mental disturbances exacerbated by stress",
+common_name: "Mental disturbances exacerbated by stress",
+},
+{
+id: "s_1772",
+type: "symptom",
+name: "Back pain, thoracic",
+common_name: "Middle or upper back pain",
+},
+{
+id: "s_1776",
+type: "symptom",
+name: "Dysphagia, oropharyngeal",
+common_name: "Difficulty initiating a swallow",
+},
+{
+id: "s_1779",
+type: "symptom",
+name: "Dysphagia, esophageal",
+common_name: "Feeling of food getting stuck several seconds after swallowing",
+},
+{
+id: "s_1780",
+type: "symptom",
+name: "Headache, mild",
+common_name: "Mild headache",
+},
+{
+id: "s_1781",
+type: "symptom",
+name: "Headache, moderate",
+common_name: "Moderate headache",
+},
+{
+id: "s_1782",
+type: "symptom",
+name: "Abdominal pain, mild",
+common_name: "Mild abdominal pain",
+},
+{
+id: "s_1783",
+type: "symptom",
+name: "Abdominal pain, moderate",
+common_name: "Moderate abdominal pain",
+},
+{
+id: "s_1788",
+type: "symptom",
+name: "White nail discolouration",
+common_name: "White spots on nail",
+},
+{
+id: "s_1789",
+type: "symptom",
+name: "Yellow nail discolouration",
+common_name: "Yellow nails",
+},
+{
+id: "s_1790",
+type: "symptom",
+name: "Thickened nails",
+common_name: "Thickened nails",
+},
+{
+id: "s_1791",
+type: "symptom",
+name: "Erythema, scalp",
+common_name: "Red patches on scalp",
+},
+{
+id: "s_1792",
+type: "symptom",
+name: "Visible head lice on scalp or brush",
+common_name: "Visible head lice on scalp or brush",
+},
+{
+id: "s_1793",
+type: "symptom",
+name: "Lice eggs or nits on hair shafts",
+common_name: "Lice eggs or nits",
+},
+{
+id: "s_1795",
+type: "symptom",
+name: "White-gray burrows in the skin",
+common_name: "White-gray burrows in the skin",
+},
+{
+id: "s_1796",
+type: "symptom",
+name: "White patch on cornea",
+common_name: "White spot on cornea",
+},
+{
+id: "s_1798",
+type: "symptom",
+name: "Difference in size of testicles",
+common_name: "Difference in size of testicles",
+},
+{
+id: "s_1799",
+type: "symptom",
+name: "Pain in upper limb, forearm",
+common_name: "Pain in forearm",
+},
+{
+id: "s_1800",
+type: "symptom",
+name: "Past appendectomy",
+common_name: "Appendix removal in the past",
+},
+{
+id: "s_1802",
+type: "symptom",
+name: "Abdominal pain, burning or gnawing",
+common_name: "Burning or gnawing stomach pain",
+},
+{
+id: "s_1805",
+type: "symptom",
+name: "Joint pain, during shoulder movement",
+common_name: "Pain when moving shoulder",
+},
+{
+id: "s_1808",
+type: "symptom",
+name: "Dermatological changes, located on the face",
+common_name: "Skin changes on the face",
+},
+{
+id: "s_1810",
+type: "symptom",
+name: "Dermatological changes, located in the genital area",
+common_name: "Skin changes on or around genitals",
+},
+{
+id: "s_1811",
+type: "symptom",
+name: "Vaginal dryness",
+common_name: "Vaginal dryness",
+},
+{
+id: "s_1812",
+type: "symptom",
+name: "Nasal congestion, chronic",
+common_name: "Blocked nose lasting more than 3 months",
+},
+{
+id: "s_1819",
+type: "symptom",
+name: "Impaired vision, one eye",
+common_name: "Visual impairment in one eye",
+},
+{
+id: "s_1820",
+type: "symptom",
+name: "Fever, temperature not measured",
+common_name: "Fever not measured",
+},
+{
+id: "s_1823",
+type: "symptom",
+name: "Joint pain, during hip movement",
+common_name: "Pain when moving hip",
+},
+{
+id: "s_1826",
+type: "symptom",
+name: "Pharyngeal pain, unilateral",
+common_name: "One-sided sore throat",
+},
+{
+id: "s_1829",
+type: "symptom",
+name: "Crotch pain, vulvovaginal",
+common_name: "Pain in vagina or vulva",
+},
+{
+id: "s_1830",
+type: "symptom",
+name: "Skin mass, larger than 1 cm",
+common_name: "Lump larger than 1 cm",
+},
+{
+id: "s_1831",
+type: "symptom",
+name: "Skin mass",
+common_name: "Lumps or bumps",
+},
+{
+id: "s_1833",
+type: "symptom",
+name: "Toe pain",
+common_name: "Toe pain",
+},
+{
+id: "s_1835",
+type: "symptom",
+name: "Body aches",
+common_name: "Body aches",
+},
+{
+id: "s_1840",
+type: "symptom",
+name: "Abdominal pain, lasting less than 2 days",
+common_name: "Abdominal pain lasting less than 2 days",
+},
+{
+id: "s_1842",
+type: "symptom",
+name: "Abdominal pain, lasting more than 2 weeks",
+common_name: "Abdominal pain lasting more than 2 weeks",
+},
+{
+id: "s_1843",
+type: "symptom",
+name: "Abdominal pain, sudden onset",
+common_name: "Sudden abdominal pain",
+},
+{
+id: "s_1844",
+type: "symptom",
+name: "Abdominal pain, gradual onset",
+common_name: "Slow and gradual abdominal pain",
+},
+{
+id: "s_1845",
+type: "symptom",
+name: "Abdominal pain, radiating to left shoulder or shoulder blade",
+common_name: "Abdominal pain spreading to the left shoulder area",
+},
+{
+id: "s_1846",
+type: "symptom",
+name: "Abdominal pain, radiating to lower or middle part of the back",
+common_name: "Abdominal pain spreading to the lower or middle back",
+},
+{
+id: "s_1847",
+type: "symptom",
+name: "Abdominal pain, recurrent",
+common_name: "Recurrent abdominal pain",
+},
+{
+id: "s_1848",
+type: "symptom",
+name: "Abdominal pain, colicky",
+common_name: "Colic abdominal pain",
+},
+{
+id: "s_1851",
+type: "symptom",
+name: "Abdominal pain, migrating to the right lower quadrant",
+common_name: "Stomach pain, moved to the lower right side",
+},
+{
+id: "s_1852",
+type: "symptom",
+name: "Abdominal pain, lasting 2 to 7 days",
+common_name: "Abdominal pain lasting 2 to 7 days",
+},
+{
+id: "s_1853",
+type: "symptom",
+name: "Abdominal pain, lasting 8 to 14 days",
+common_name: "Abdominal pain lasting 8 to 14 days",
+},
+{
+id: "s_1193",
+type: "symptom",
+name: "Abdominal pain, left side",
+common_name: "Left side stomach pain",
+},
+{
+id: "s_1855",
+type: "symptom",
+name: "Abdominal pain, right side",
+common_name: "Right side stomach pain",
+},
+{
+id: "s_1856",
+type: "symptom",
+name: "Abdominal tenderness, right lower quadrant",
+common_name: "Pain when pressing lower-right part of the abdomen",
+},
+{
+id: "s_1858",
+type: "symptom",
+name: "Cough, lasting 3 to 8 weeks",
+common_name: "Cough lasting 3 to 8 weeks",
+},
+{
+id: "s_1859",
+type: "symptom",
+name: "Abdominal pain, midcycle",
+common_name: "Painful ovulation",
+},
+{
+id: "s_1860",
+type: "symptom",
+name: "Abdominal pain, crampy",
+common_name: "Crampy abdominal pain",
+},
+{
+id: "s_1864",
+type: "symptom",
+name: "Headache, excruciating",
+common_name: "Worst headache ever",
+},
+{
+id: "s_1868",
+type: "symptom",
+name: "Headache, chronic, lasting 5 minutes to 4 hours",
+common_name: "Headache lasting between 5 minutes and 4 hours",
+},
+{
+id: "s_1870",
+type: "symptom",
+name: "Headache, chronic, lasting 4 to 72 hours",
+common_name: "Headache attack lasting 4 to 72 hours",
+},
+{
+id: "s_1871",
+type: "symptom",
+name: "Headache, exacerbated by physical activity",
+common_name: "Headache worsened by physical activity",
+},
+{
+id: "s_1875",
+type: "symptom",
+name: "Vulvovaginal burning",
+common_name: "Vulvovaginal burning",
+},
+{
+id: "s_1878",
+type: "symptom",
+name: "Calf pain, above the heel",
+common_name: "Pain in calf just above the heel",
+},
+{
+id: "s_1891",
+type: "symptom",
+name: "Hypersensitivity to smells",
+common_name: "Oversensitivity to smells",
+},
+{
+id: "s_1893",
+type: "symptom",
+name: "Pain in lower limb, thigh",
+common_name: "Thigh pain",
+},
+{
+id: "s_1899",
+type: "symptom",
+name: "Tingling fingers, first three digits",
+common_name: "Tingling in the thumb, index and middle finger",
+},
+{
+id: "s_1900",
+type: "symptom",
+name: "Tingling fingers, fourth and fifth digits",
+common_name: "Tingling in the ring and little finger",
+},
+{
+id: "s_1901",
+type: "symptom",
+name: "Headache, chronic, lasting 3 to 7 days",
+common_name: "Headache attacks lasting 3 to 7 days",
+},
+{
+id: "s_1903",
+type: "symptom",
+name: "Reduced range of joint motion, passive",
+common_name: "Reduced range of passive joint motion",
+},
+{
+id: "s_1905",
+type: "symptom",
+name: "Headache, sudden onset",
+common_name: "Sudden headache",
+},
+{
+id: "s_1907",
+type: "symptom",
+name: "Headache, chronic, lasting less than 5 minutes",
+common_name: "Headache lasting less than 5 minutes",
+},
+{
+id: "s_1909",
+type: "symptom",
+name: "Foot drop",
+common_name: "Dropping the front of the foot",
+},
+{
+id: "s_1910",
+type: "symptom",
+name: "Wrist drop",
+common_name: "Dropping hand",
+},
+{
+id: "s_1911",
+type: "symptom",
+name: "Headache, temporal region",
+common_name: "Headache located over the temples",
+},
+{
+id: "s_1912",
+type: "symptom",
+name: "Headache, recent",
+common_name: "Headaches history shorter than 3 months",
+},
+{
+id: "s_1915",
+type: "symptom",
+name: "Purpuric rash, palpable",
+common_name: "Red or purple spots larger than 3 mm that can be felt",
+},
+{
+id: "s_1918",
+type: "symptom",
+name: "Buttocks pain",
+common_name: "Buttocks pain",
+},
+{
+id: "s_1921",
+type: "symptom",
+name: "Dermatological changes, exacerbated by sunlight exposure",
+common_name: "Skin changes appearing or worsening after exposure to sunlight",
+},
+{
+id: "s_1922",
+type: "symptom",
+name: "Heel drop test",
+common_name: "Abdominal pain after dropping hard on heels",
+},
+{
+id: "s_1923",
+type: "symptom",
+name: "Dermatological changes, feet",
+common_name: "Skin changes on feet",
+},
+{
+id: "s_1924",
+type: "symptom",
+name: "Cough, paroxysmal",
+common_name: "Severe and sudden coughing attacks",
+},
+{
+id: "s_1925",
+type: "symptom",
+name: "Chest pain, pressure",
+common_name: "Pressing chest pain",
+},
+{
+id: "s_1926",
+type: "symptom",
+name: "Cold and clammy skin",
+common_name: "Cold and clammy skin",
+},
+{
+id: "s_1927",
+type: "symptom",
+name: "Pain in lower limb, limping due to pain",
+common_name: "Limping due to leg pain",
+},
+{
+id: "s_1929",
+type: "symptom",
+name: "Abdominal pain, unbearable",
+common_name: "Unbearable stomach pain",
+},
+{
+id: "s_1930",
+type: "symptom",
+name: "Pain in lower limb, severe",
+common_name: "Severe pain in lower limb",
+},
+{
+id: "s_1931",
+type: "symptom",
+name: "Skin mass, bleeding",
+common_name: "Bleeding lump or bump",
+},
+{
+id: "s_1932",
+type: "symptom",
+name: "Paresthesia, sudden onset",
+common_name: "Sudden onset of tingling or numbness",
+},
+{
+id: "s_1933",
+type: "symptom",
+name: "Blood pressure, more than 180 mmHg",
+common_name: "Very high blood pressure",
+},
+{
+id: "s_1935",
+type: "symptom",
+name: "Pain in upper limb, severe",
+common_name: "Severe pain in upper limb",
+},
+{
+id: "s_1937",
+type: "symptom",
+name: "Worms in stool",
+common_name: "Worms in stool or around anus",
+},
+{
+id: "s_1943",
+type: "symptom",
+name: "Sunburn",
+common_name: "Sunburn",
+},
+{
+id: "s_1949",
+type: "symptom",
+name: "Vomiting, every time after meal",
+common_name: "Vomiting after every meal",
+},
+{
+id: "s_1952",
+type: "symptom",
+name: "Chest pain, recurrent",
+common_name: "Recurrent chest pain",
+},
+{
+id: "s_1955",
+type: "symptom",
+name: "Erythema, around both eyes",
+common_name: "Redness around both eyes",
+},
+{
+id: "s_1957",
+type: "symptom",
+name: "Destructive thoughts towards other people or things",
+common_name: "Destructive thoughts towards other people or things",
+},
+{
+id: "s_1958",
+type: "symptom",
+name: "Dysphonia, more than 2 weeks",
+common_name: "Hoarseness lasting more than 2 weeks",
+},
+{
+id: "s_1960",
+type: "symptom",
+name: "Bruising after trauma",
+common_name: "Bruise after an injury",
+},
+{
+id: "s_1961",
+type: "symptom",
+name: "Jaw pain",
+common_name: "Jaw pain",
+},
+{
+id: "s_1973",
+type: "symptom",
+name: "Skin wound, active bleeding",
+common_name: "Actively bleeding wound",
+},
+{
+id: "s_1979",
+type: "symptom",
+name: "Diarrhea, more than 6 stools a day",
+common_name: "Diarrhea with more than 6 stools a day",
+},
+{
+id: "s_1982",
+type: "symptom",
+name: "Dermatological changes, hands",
+common_name: "Skin changes on hands",
+},
+{
+id: "s_1983",
+type: "symptom",
+name: "Eyelid lesion, itching",
+common_name: "Itchy skin changes on eyelid",
+},
+{
+id: "s_1985",
+type: "symptom",
+name: "Cough, nocturnal",
+common_name: "Nighttime cough",
+},
+{
+id: "s_1988",
+type: "symptom",
+name: "Dermatological changes, spreading",
+common_name: "Enlarging or spreading skin changes",
+},
+{
+id: "s_1994",
+type: "symptom",
+name: "Discharge from ear, purulent",
+common_name: "Yellow or green discharge from ear",
+},
+{
+id: "s_1995",
+type: "symptom",
+name: "Edema, both feet",
+common_name: "Swollen feet",
+},
+{
+id: "s_1996",
+type: "symptom",
+name: "Edema, nose",
+common_name: "Swollen nose",
+},
+{
+id: "s_1997",
+type: "symptom",
+name: "Edema, toe",
+common_name: "Swollen toe",
+},
+{
+id: "s_1999",
+type: "symptom",
+name: "Erythema, vulva",
+common_name: "Reddened vulva",
+},
+{
+id: "s_2000",
+type: "symptom",
+name: "Fever, higher than 104°F or 40°C",
+common_name: "Fever higher than 104°F or 40°C",
+},
+{
+id: "s_2001",
+type: "symptom",
+name: "Paresthesia, one lower limb",
+common_name: "Tingling or numbness in one lower limb",
+},
+{
+id: "s_2002",
+type: "symptom",
+name: "Palpitations, lasting more than 5 minutes",
+common_name: "Palpitations lasting more than 5 minutes",
+},
+{
+id: "s_2003",
+type: "symptom",
+name: "Erythema, toe",
+common_name: "Red toe",
+},
+{
+id: "s_2004",
+type: "symptom",
+name: "Palpitations, recurrent",
+common_name: "Recurrent palpitations",
+},
+{
+id: "s_2005",
+type: "symptom",
+name: "Nail pain",
+common_name: "Sore nail",
+},
+{
+id: "s_2006",
+type: "symptom",
+name: "Chest pain, exacerbating when lying down",
+common_name: "Chest pain worsening when lying down",
+},
+{
+id: "s_2008",
+type: "symptom",
+name: "Regular uterine contractions",
+common_name: "Regular uterine contractions",
+},
+{
+id: "s_2010",
+type: "symptom",
+name: "Fetal membranes rupture",
+common_name: "Water breaking",
+},
+{
+id: "s_2011",
+type: "symptom",
+name: "Blood glucose level, between 54 and 70 mg/dl or between 3 and 3.9 mmol/l",
+common_name: "Low blood sugar level, between 54 and 70 mg/dl or between 3 and 3.9 mmol/l",
+},
+{
+id: "s_2014",
+type: "symptom",
+name: "Blood glucose level, not measured",
+common_name: "Blood sugar level not measured",
+},
+{
+id: "s_2016",
+type: "symptom",
+name: "Nosebleed, single episode",
+common_name: "One episode of bleeding from nose",
+},
+{
+id: "s_2017",
+type: "symptom",
+name: "Nosebleed, recurrent",
+common_name: "Recurrent bleeding from nose",
+},
+{
+id: "s_2018",
+type: "symptom",
+name: "Chest pain, lasting less than 30 minutes",
+common_name: "Chest pain lasting less than 30 minutes",
+},
+{
+id: "s_2019",
+type: "symptom",
+name: "Chest pain, lasting between 30 minutes and 8 hours",
+common_name: "Chest pain lasting between 30 minutes and 8 hours",
+},
+{
+id: "s_2022",
+type: "symptom",
+name: "Chest pain, lasting more than 8 hours",
+common_name: "Chest pain lasting more than 8 hours",
+},
+{
+id: "s_2023",
+type: "symptom",
+name: "Dizziness, recurrent",
+common_name: "Recurrent dizziness",
+},
+{
+id: "s_2024",
+type: "symptom",
+name: "Gambling, pathological",
+common_name: "Excessive gambling",
+},
+{
+id: "s_2029",
+type: "symptom",
+name: "Gambling, lying about extent",
+common_name: "Lying about the extent of gambling",
+},
+{
+id: "s_2032",
+type: "symptom",
+name: "Gambling",
+common_name: "Gambling",
+},
+{
+id: "s_2033",
+type: "symptom",
+name: "Pruritus, foot",
+common_name: "Itchy foot",
+},
+{
+id: "s_2034",
+type: "symptom",
+name: "Consciousness disturbances",
+common_name: "Confusion or disorientation",
+},
+{
+id: "s_2041",
+type: "symptom",
+name: "Halos around lights",
+common_name: "Halos around lights",
+},
+{
+id: "s_2043",
+type: "symptom",
+name: "Male genital itching",
+common_name: "Itchy penis",
+},
+{
+id: "s_2045",
+type: "symptom",
+name: "Seizures",
+common_name: "Seizures",
+},
+{
+id: "s_2047",
+type: "symptom",
+name: "Absence seizure",
+common_name: "Blanking out",
+},
+{
+id: "s_2048",
+type: "symptom",
+name: "Bedwetting",
+common_name: "Bedwetting",
+},
+{
+id: "s_2051",
+type: "symptom",
+name: "Chest pain, exacerbated by chest wall movement",
+common_name: "Chest pain worsening during chest wall movement",
+},
+{
+id: "s_2052",
+type: "symptom",
+name: "Male infertility",
+common_name: "Male infertility",
+},
+{
+id: "s_2053",
+type: "symptom",
+name: "Currant jelly stool",
+common_name: "Redcurrant jelly stool",
+},
+{
+id: "s_2055",
+type: "symptom",
+name: "Vomiting, bilious",
+common_name: "Greenish-yellow vomit",
+},
+{
+id: "s_2056",
+type: "symptom",
+name: "Vomiting, less than 7 days",
+common_name: "Vomiting for less than a week",
+},
+{
+id: "s_2057",
+type: "symptom",
+name: "Vomiting, 7 days or more",
+common_name: "Vomiting for a week or more",
+},
+{
+id: "s_2058",
+type: "symptom",
+name: "Dermatological changes, flexural surfaces",
+common_name: "Skin changes on the inside of joints",
+},
+{
+id: "s_2059",
+type: "symptom",
+name: "Dermatological changes, scalp",
+common_name: "Skin changes on the scalp",
+},
+{
+id: "s_2060",
+type: "symptom",
+name: "Dermatological changes, trunk",
+common_name: "Skin changes on the neck, chest, belly or back",
+},
+{
+id: "s_2063",
+type: "symptom",
+name: "Fever, unresponsive to treatment",
+common_name: "Fever unresponsive to treatment",
+},
+{
+id: "s_2064",
+type: "symptom",
+name: "Foul-smelling urine",
+common_name: "Smelly urine",
+},
+{
+id: "s_2065",
+type: "symptom",
+name: "Mouth pain",
+common_name: "Pain in mouth",
+},
+{
+id: "s_2066",
+type: "symptom",
+name: "Limb length discrepancy",
+common_name: "Uneven limbs",
+},
+{
+id: "s_2068",
+type: "symptom",
+name: "Upper limb pallor",
+common_name: "Pale upper limb",
+},
+{
+id: "s_2070",
+type: "symptom",
+name: "Bone pain, lasting less than a week",
+common_name: "Bone pain lasting less than a week",
+},
+{
+id: "s_2071",
+type: "symptom",
+name: "Bone pain, 1 week or more",
+common_name: "Bone pain lasting 1 week or more",
+},
+{
+id: "s_2072",
+type: "symptom",
+name: "Consciousness disturbances, acute",
+common_name: "Disorientation or confusion starting recently",
+},
+{
+id: "s_2073",
+type: "symptom",
+name: "Consciousness disturbances, chronic",
+common_name: "Disorientation or confusion lasting more than a week",
+},
+{
+id: "s_2074",
+type: "symptom",
+name: "Chest pain, radiating to left upper limb",
+common_name: "Chest pain, spreading  to the left upper limb",
+},
+{
+id: "s_2076",
+type: "symptom",
+name: "Respiratory distress, after trauma",
+common_name: "Breathing problems after an injury",
+},
+{
+id: "s_2077",
+type: "symptom",
+name: "Skin wound, major bleeding",
+common_name: "Major bleeding",
+},
+{
+id: "s_2078",
+type: "symptom",
+name: "Skin wound, minor uncontrollable bleeding",
+common_name: "Skin wound with minor uncontrollable bleeding",
+},
+{
+id: "s_2079",
+type: "symptom",
+name: "Recent injury without bleeding",
+common_name: "Recent injury without bleeding",
+},
+{
+id: "s_2081",
+type: "symptom",
+name: "Severe pain, after trauma",
+common_name: "Severe pain after an injury",
+},
+{
+id: "s_2084",
+type: "symptom",
+name: "Periorbital ecchymosis",
+common_name: "Bruising around the eyes",
+},
+{
+id: "s_2085",
+type: "symptom",
+name: "Back pain, worsens on palpation",
+common_name: "Back pain worsens by touching or pressing the affected area",
+},
+{
+id: "s_2086",
+type: "symptom",
+name: "Inability to bear weight, after trauma",
+common_name: "Inability to stand on either foot after injury",
+},
+{
+id: "s_2087",
+type: "symptom",
+name: "Joint deformity, post-traumatic",
+common_name: "Deformed joints after an injury",
+},
+{
+id: "s_2088",
+type: "symptom",
+name: "Physical injury",
+common_name: "Injury",
+},
+{
+id: "s_2091",
+type: "symptom",
+name: "Pain in both upper limbs, both hands",
+common_name: "Pain in both hands",
+},
+{
+id: "s_2092",
+type: "symptom",
+name: "Pain in both lower limbs, both feet",
+common_name: "Pain in both feet",
+},
+{
+id: "s_2093",
+type: "symptom",
+name: "Edema, both hands",
+common_name: "Swollen hands",
+},
+{
+id: "s_2094",
+type: "symptom",
+name: "Dry eyes",
+common_name: "Dry eyes",
+},
+{
+id: "s_2096",
+type: "symptom",
+name: "Chest pain, burning",
+common_name: "Burning chest pain",
+},
+{
+id: "s_2097",
+type: "symptom",
+name: "Re-experiencing trauma, intrusive symptoms",
+common_name: "Re-experiencing trauma through flashbacks, memories, or dreams",
+},
+{
+id: "s_2100",
+type: "symptom",
+name: "Fatigue",
+common_name: "Fatigue",
+},
+{
+id: "s_2103",
+type: "symptom",
+name: "Edema, one foot",
+common_name: "Swollen foot",
+},
+{
+id: "s_2105",
+type: "symptom",
+name: "Re-experiencing trauma, distressing symptoms",
+common_name: "Physical and mental distress related to re-experiencing trauma",
+},
+{
+id: "s_2107",
+type: "symptom",
+name: "Waking up during the night",
+common_name: "Middle-of-the-night insomnia",
+},
+{
+id: "s_2108",
+type: "symptom",
+name: "Cognitive disturbances",
+common_name: "Cognitive disturbances",
+},
+{
+id: "s_2109",
+type: "symptom",
+name: "Coma",
+common_name: "Coma",
+},
+{
+id: "s_2110",
+type: "symptom",
+name: "Dermatological changes, female genital area",
+common_name: "Skin changes on or around female genital area",
+},
+{
+id: "s_2111",
+type: "symptom",
+name: "Dermatological changes, male genital area",
+common_name: "Skin changes on or around male genital area",
+},
+{
+id: "s_2112",
+type: "symptom",
+name: "Pleuritic chest pain, after trauma",
+common_name: "Sudden and sharp chest pain after an injury",
+},
+{
+id: "s_2115",
+type: "symptom",
+name: "Abnormal uterine bleeding, pregnancy",
+common_name: "Vaginal bleeding during pregnancy",
+},
+{
+id: "s_2116",
+type: "symptom",
+name: "Abnormal uterine spotting, pregnancy",
+common_name: "Vaginal spotting during pregnancy",
+},
+{
+id: "s_2118",
+type: "symptom",
+name: "Dizziness, unbearable",
+common_name: "Unbearable dizziness",
+},
+{
+id: "s_2119",
+type: "symptom",
+name: "Ulcer, completely painless",
+common_name: "Painless ulcer",
+},
+{
+id: "s_2121",
+type: "symptom",
+name: "Acid reflux",
+common_name: "Acidic taste in mouth",
+},
+{
+id: "s_2122",
+type: "symptom",
+name: "Rectal mucosal prolapse",
+common_name: "Rectal prolapse",
+},
+{
+id: "s_2124",
+type: "symptom",
+name: "Noisy breathing",
+common_name: "Noisy breathing",
+},
+{
+id: "s_2125",
+type: "symptom",
+name: "Fetal membranes rupture, purulent or malodorous amniotic fluid",
+common_name: "Smelly or coloured waters",
+},
+{
+id: "s_2126",
+type: "symptom",
+name: "Diarrhea, lasting less than 48 hours",
+common_name: "Diarrhea lasting less than 48 hours",
+},
+{
+id: "s_2129",
+type: "symptom",
+name: "Somnambulism",
+common_name: "Sleepwalking",
+},
+{
+id: "s_2132",
+type: "symptom",
+name: "Bleeding from the umbilical cord stump",
+common_name: "Bleeding from the umbilical cord stump",
+},
+{
+id: "s_2133",
+type: "symptom",
+name: "Bulging fontanelle",
+common_name: "Bulging soft spot",
+},
+{
+id: "s_2134",
+type: "symptom",
+name: "Chest retractions",
+common_name: "Chest retractions",
+},
+{
+id: "s_2135",
+type: "symptom",
+name: "Circumoral pallor",
+common_name: "White and light skin around the mouth",
+},
+{
+id: "s_2138",
+type: "symptom",
+name: "Crying without tears",
+common_name: "Crying without tears",
+},
+{
+id: "s_2139",
+type: "symptom",
+name: "Dermatological changes, intertriginous",
+common_name: "Skin changes between skin folds",
+},
+{
+id: "s_2140",
+type: "symptom",
+name: "Drawing up legs",
+common_name: "Drawing up legs",
+},
+{
+id: "s_2141",
+type: "symptom",
+name: "Eye discharge",
+common_name: "Eye discharge",
+},
+{
+id: "s_2142",
+type: "symptom",
+name: "Weight faltering",
+common_name: "Slow rate of weight gain",
+},
+{
+id: "s_2143",
+type: "symptom",
+name: "Expiratory grunting",
+common_name: "Grunting with every breath",
+},
+{
+id: "s_2144",
+type: "symptom",
+name: "Ill appearance",
+common_name: "Ill appearance",
+},
+{
+id: "s_2145",
+type: "symptom",
+name: "Ill appearance, serious and strong concern",
+common_name: "Ill appearance causing strong concern",
+},
+{
+id: "s_2148",
+type: "symptom",
+name: "Increased head circumference",
+common_name: "Increased head circumference",
+},
+{
+id: "s_2149",
+type: "symptom",
+name: "Irritability, lasting more than 3 days",
+common_name: "Fussy for more than 3 days",
+},
+{
+id: "s_2150",
+type: "symptom",
+name: "Laboured breathing, nocturnal",
+common_name: "Difficulty breathing at night",
+},
+{
+id: "s_2151",
+type: "symptom",
+name: "Lack of eye fixation",
+common_name: "Trouble focusing eyes",
+},
+{
+id: "s_2153",
+type: "symptom",
+name: "Nasal catarrh, mucoid",
+common_name: "Clear or white nasal discharge",
+},
+{
+id: "s_2154",
+type: "symptom",
+name: "Nasal catarrh, purulent",
+common_name: "Yellow or green nasal discharge",
+},
+{
+id: "s_2155",
+type: "symptom",
+name: "Nasal flaring",
+common_name: "Nasal flaring",
+},
+{
+id: "s_2156",
+type: "symptom",
+name: "Posttussive vomiting",
+common_name: "Coughing followed by vomiting",
+},
+{
+id: "s_2157",
+type: "symptom",
+name: "Presence of the umbilical cord",
+common_name: "Presence of the umbilical cord",
+},
+{
+id: "s_2159",
+type: "symptom",
+name: "Sunken fontanelle",
+common_name: "Sunken soft spot on infants head",
+},
+{
+id: "s_2160",
+type: "symptom",
+name: "Teething",
+common_name: "Teething",
+},
+{
+id: "s_2162",
+type: "symptom",
+name: "Constipation, lasting 3 months or more",
+common_name: "Constipation for 3 months or more",
+},
+{
+id: "s_2163",
+type: "symptom",
+name: "Twisted neck",
+common_name: "Twisted neck",
+},
+{
+id: "s_2164",
+type: "symptom",
+name: "Consumption of expired food or drink",
+common_name: "Spoiled food or drink consumption",
+},
+{
+id: "s_2165",
+type: "symptom",
+name: "Cough, barking",
+common_name: "Barking cough",
+},
+{
+id: "s_2166",
+type: "symptom",
+name: "Wheezing, acute",
+common_name: "Sudden wheezing",
+},
+{
+id: "s_2168",
+type: "symptom",
+name: "Normal body temperature",
+common_name: "Normal body temperature",
+},
+{
+id: "s_2169",
+type: "symptom",
+name: "Normal heart rate",
+common_name: "Normal pulse",
+},
+{
+id: "s_2170",
+type: "symptom",
+name: "Anicteric presentation",
+common_name: "Anicteric presentation",
+},
+{
+id: "s_2171",
+type: "symptom",
+name: "Normal lung sounds on auscultation",
+common_name: "Normal lung sounds on auscultation",
+},
+{
+id: "s_2172",
+type: "symptom",
+name: "No signs of upper respiratory infection",
+common_name: "No signs of upper respiratory infection",
+},
+{
+id: "s_2173",
+type: "symptom",
+name: "Neck pain, during head movement",
+common_name: "Neck pain when moving the head",
+},
+{
+id: "s_2174",
+type: "symptom",
+name: "Normal vital signs",
+common_name: "Normal vital signs",
+},
+{
+id: "s_2175",
+type: "symptom",
+name: "Possible rabies exposure",
+common_name: "Possible rabies exposure",
+},
+{
+id: "s_2176",
+type: "symptom",
+name: "Dyspnea, lasting 1 to 24 hours",
+common_name: "Shortness of breath lasting 1 to 24 hours",
+},
+{
+id: "s_2177",
+type: "symptom",
+name: "Dermatological changes, bright red or purple",
+common_name: "Bright red or purple skin changes",
+},
+{
+id: "s_2178",
+type: "symptom",
+name: "Wheezing, subacute",
+common_name: "Wheezing since a couple days to weeks",
+},
+{
+id: "s_2180",
+type: "symptom",
+name: "Bone deformity, non-traumatic",
+common_name: "Bone deformity not associated with a recent trauma",
+},
+{
+id: "s_2181",
+type: "symptom",
+name: "Bone deformity, post-traumatic",
+common_name: "Bone deformity after a recent injury",
+},
+{
+id: "s_2182",
+type: "symptom",
+name: "Flank pain",
+common_name: "Pain on the sides of the body",
+},
+{
+id: "s_2188",
+type: "symptom",
+name: "Eye discharge, purulent",
+common_name: "Purulent eye discharge",
+},
+{
+id: "s_2189",
+type: "symptom",
+name: "Headache, recent, lasting less than 1 hour",
+common_name: "Headache lasting less than 1 hour",
+},
+{
+id: "s_2190",
+type: "symptom",
+name: "Headache, recent, lasting 1 to 24 hours",
+common_name: "Headache lasting between 1 hour and 1 day",
+},
+{
+id: "s_2191",
+type: "symptom",
+name: "Headache, recent, lasting more than 1 day",
+common_name: "Headache lasting for more than 1 day",
+},
+{
+id: "s_2193",
+type: "symptom",
+name: "Ear rubbing",
+common_name: "Ear pulling or tugging",
+},
+{
+id: "s_2194",
+type: "symptom",
+name: "Diarrhea, lasting 2 to 14 days",
+common_name: "Diarrhea lasting 2 to 14 days",
+},
+{
+id: "s_2196",
+type: "symptom",
+name: "Cold feet and toes, unilateral",
+common_name: "Cold foot",
+},
+{
+id: "s_2200",
+type: "symptom",
+name: "Diplopia, lasting less than 24 hours",
+common_name: "Double vision lasting less than 24 hours",
+},
+{
+id: "s_2201",
+type: "symptom",
+name: "Diplopia, lasting 24 hours or more",
+common_name: "Double vision lasting 24 hours or more",
+},
+{
+id: "s_2203",
+type: "symptom",
+name: "Dyspnea, after a few minutes of walking",
+common_name: "Shortness of breath after a few minutes of walking",
+},
+{
+id: "s_2204",
+type: "symptom",
+name: "Dyspnea, on exertion",
+common_name: "Shortness of breath on effort",
+},
+{
+id: "s_2206",
+type: "symptom",
+name: "Paraphimosis",
+common_name: "Retracted and stuck foreskin",
+},
+{
+id: "s_2207",
+type: "symptom",
+name: "Edema, penis",
+common_name: "Swollen penis",
+},
+{
+id: "s_2208",
+type: "symptom",
+name: "Ulcer, not healing within 6 weeks",
+common_name: "Non-healing ulcers",
+},
+{
+id: "s_2209",
+type: "symptom",
+name: "Seizures, recurrent",
+common_name: "Recurrent seizures",
+},
+{
+id: "s_2211",
+type: "symptom",
+name: "Urticaria, lasting more than 6 weeks",
+common_name: "Hives lasting more than 6 weeks",
+},
+{
+id: "s_2212",
+type: "symptom",
+name: "Purulent vaginal discharge",
+common_name: "Purulent vaginal discharge",
+},
+{
+id: "s_2213",
+type: "symptom",
+name: "Self-injurious thoughts or behaviours",
+common_name: "Self-injurious thoughts or behaviours",
+},
+{
+id: "s_2222",
+type: "symptom",
+name: "Wound, lip",
+common_name: "Wound on the lip",
+},
+{
+id: "s_2226",
+type: "symptom",
+name: "Nasal congestion, worsens after briefly improving",
+common_name: "Stuffy nose worsening after brief improvement",
+},
+{
+id: "s_2228",
+type: "symptom",
+name: "Recent self-injurious behaviour",
+common_name: "Recent self-inflicted injury",
+},
+{
+id: "s_2230",
+type: "symptom",
+name: "Recent self-injurious behaviour, severe",
+common_name: "Recent severe self-inflicted injury",
+},
+{
+id: "s_2231",
+type: "symptom",
+name: "Dyspnea, unknown severity",
+common_name: "Shortness of breath of unknown severity",
+},
+{
+id: "s_2234",
+type: "symptom",
+name: "Breast asymmetry in size or shape",
+common_name: "Asymmetrical breasts",
+},
+{
+id: "s_2236",
+type: "symptom",
+name: "Erythema, scrotum",
+common_name: "Reddened scrotum",
+},
+{
+id: "s_2238",
+type: "symptom",
+name: "Asymmetrical thigh creases",
+common_name: "Asymmetry of thigh folds",
+},
+{
+id: "s_2241",
+type: "symptom",
+name: "Umbilical discharge",
+common_name: "Belly button discharge",
+},
+{
+id: "s_2242",
+type: "symptom",
+name: "Eye pain, unbearable",
+common_name: "Unbearable eye pain",
+},
+{
+id: "s_2245",
+type: "symptom",
+name: "Genital injury in male",
+common_name: "Genital injury in male",
+},
+{
+id: "s_2246",
+type: "symptom",
+name: "Genital injury in female",
+common_name: "Genital injury in female",
+},
+{
+id: "s_2247",
+type: "symptom",
+name: "Enlarged front of neck",
+common_name: "Swollen front of neck",
+},
+{
+id: "s_2248",
+type: "symptom",
+name: "Enlarged cervical lymph nodes",
+common_name: "Enlarged lymph glands in the neck",
+},
+{
+id: "s_2251",
+type: "symptom",
+name: "Unknown heart rate",
+common_name: "Unknown pulse",
+},
+{
+id: "s_2252",
+type: "symptom",
+name: "Abdominal tenderness, left lower quadrant",
+common_name: "Pain when pressing lower-left part of the abdomen",
+},
+{
+id: "s_2253",
+type: "symptom",
+name: "Flat foot",
+common_name: "Flat foot",
+},
+{
+id: "s_2259",
+type: "symptom",
+name: "Seizures, reflex",
+common_name: "Reflex seizures",
+},
+{
+id: "s_2260",
+type: "symptom",
+name: "Gingival recession",
+common_name: "Receding gums",
+},
+{
+id: "s_2261",
+type: "symptom",
+name: "Calf hypertrophy",
+common_name: "Enlarged calves",
+},
+{
+id: "s_2262",
+type: "symptom",
+name: "Gowers sign",
+common_name: "Standing up with help of hands 'walking' up legs",
+},
+{
+id: "s_2263",
+type: "symptom",
+name: "Tet spells",
+common_name: "Tet spells",
+},
+{
+id: "s_2264",
+type: "symptom",
+name: "Fatigue, during feeding",
+common_name: "Fatigue during feeding",
+},
+{
+id: "s_2266",
+type: "symptom",
+name: "Dermatological changes, upper extremities excluding hands",
+common_name: "Skin changes on the shoulder, arm, forearm, elbow, or wrist",
+},
+{
+id: "s_2267",
+type: "symptom",
+name: "Dermatological changes, lower extremities excluding feet",
+common_name: "Skin changes on the hip, thigh, knee, calf, or ankle",
+},
+{
+id: "s_2268",
+type: "symptom",
+name: "Cough, alternating productivity",
+common_name: "Wet and dry cough appearing alternately",
+},
+{
+id: "s_2269",
+type: "symptom",
+name: "Vesicular exanthema of lips or perioral skin",
+common_name: "Blisters on the lips or around the mouth",
+},
+{
+id: "s_2270",
+type: "symptom",
+name: "Vesicular exanthema of ear",
+common_name: "Blisters on ear",
+},
+{
+id: "s_2271",
+type: "symptom",
+name: "Gastric symptoms, after gluten ingestion",
+common_name: "Abdominal symptoms after eating foods containing gluten",
+},
+{
+id: "s_2272",
+type: "symptom",
+name: "Blood pressure, normal or prehypertension",
+common_name: "Normal blood pressure",
+},
+{
+id: "s_2273",
+type: "symptom",
+name: "Blood pressure, not measured",
+common_name: "Blood pressure not measured",
+},
+{
+id: "s_2274",
+type: "symptom",
+name: "Short stature",
+common_name: "Decreased growth",
+},
+{
+id: "s_2275",
+type: "symptom",
+name: "Abdominal pain, localized",
+common_name: "Localized abdominal pain",
+},
+{
+id: "s_2276",
+type: "symptom",
+name: "Bleeding from anus, light",
+common_name: "Light bleeding from anus",
+},
+{
+id: "s_2277",
+type: "symptom",
+name: "Bleeding from anus, heavy",
+common_name: "Heavy bleeding from anus",
+},
+{
+id: "s_2278",
+type: "symptom",
+name: "Ataxia, acute",
+common_name: "Recent coordination problems",
+},
+{
+id: "s_2279",
+type: "symptom",
+name: "Ataxia, subacute",
+common_name: "Coordination problems since several days, weeks, or months ago",
+},
+{
+id: "s_2280",
+type: "symptom",
+name: "Ataxia, chronic",
+common_name: "Coordination problems for more than 1 year",
+},
+{
+id: "s_2281",
+type: "symptom",
+name: "Abdominal pain, unspecified location",
+common_name: "Abdominal pain, unspecified location",
+},
+{
+id: "s_2282",
+type: "symptom",
+name: "Pale skin, fingers",
+common_name: "Pale fingers",
+},
+{
+id: "s_2283",
+type: "symptom",
+name: "Bruxism",
+common_name: "Teeth grinding",
+},
+{
+id: "s_2284",
+type: "symptom",
+name: "Back pain, nocturnal",
+common_name: "Nighttime back pain",
+},
+{
+id: "s_2285",
+type: "symptom",
+name: "Skin mass, natal cleft",
+common_name: "Lump or bump in groove between buttocks",
+},
+{
+id: "s_2288",
+type: "symptom",
+name: "Abdominal pain, unknown character",
+common_name: "Abdominal pain of unspecific character",
+},
+{
+id: "s_2289",
+type: "symptom",
+name: "Excessive fear of separation",
+common_name: "Excessive fear of separation",
+},
+{
+id: "s_2290",
+type: "symptom",
+name: "Speech and language impairment, rapid onset",
+common_name: "Rapid onset of speech and language impairment",
+},
+{
+id: "s_2291",
+type: "symptom",
+name: "Subungual splinter hemorrhages",
+common_name: "Small red spots or lines under the nail",
+},
+{
+id: "s_2292",
+type: "symptom",
+name: "Enlarged axillary lymph nodes",
+common_name: "Enlarged lymph nodes in the armpit",
+},
+{
+id: "s_2294",
+type: "symptom",
+name: "Absence seizures, reflex",
+common_name: "Reflex absence seizures",
+},
+{
+id: "s_2296",
+type: "symptom",
+name: "Choking",
+common_name: "Choking",
+},
+{
+id: "s_2298",
+type: "symptom",
+name: "Joint pain, mechanical",
+common_name: "Joint pain worsened by movement and improved with rest",
+},
+{
+id: "s_2299",
+type: "symptom",
+name: "Joint pain, inflammatory",
+common_name: "Joint pain worsened by immobility",
+},
+{
+id: "s_2300",
+type: "symptom",
+name: "Swallowed foreign body",
+common_name: "Swallowed object",
+},
+{
+id: "s_2302",
+type: "symptom",
+name: "Loss of consciousness, transient",
+common_name: "Fainting",
+},
+{
+id: "s_2303",
+type: "symptom",
+name: "Loss of consciousness, more than 1 minute",
+common_name: "Loss of consciousness, more than 1 minute",
+},
+{
+id: "s_2304",
+type: "symptom",
+name: "Paresthesia, upper limbs",
+common_name: "Tingling and numbness of upper limbs",
+},
+{
+id: "s_2306",
+type: "symptom",
+name: "Paresthesia, lower limbs",
+common_name: "Tingling and numbness of lower limbs",
+},
+{
+id: "s_2307",
+type: "symptom",
+name: "Nasal congestion, acute",
+common_name: "Stuffy nose lasting less than 10 days",
+},
+{
+id: "s_2308",
+type: "symptom",
+name: "Nasal congestion, subacute",
+common_name: "Stuffy nose lasting between 10 days and 3 months",
+},
+{
+id: "s_2309",
+type: "symptom",
+name: "Lump in popliteal region",
+common_name: "Lump behind knee",
+},
+{
+id: "s_2311",
+type: "symptom",
+name: "Abdominal pain, not associated with menstrual cycle",
+common_name: "Stable abdominal pain unrelated to menstrual cycle",
+},
+{
+id: "s_2314",
+type: "symptom",
+name: "Back pain, lumbar, unknown radiating direction",
+common_name: "Lower back pain unknown spreading direction",
+},
+{
+id: "s_2315",
+type: "symptom",
+name: "Paresthesia, one foot",
+common_name: "Foot tingling or numbness",
+},
+{
+id: "s_2316",
+type: "symptom",
+name: "Diarrhea, unknown character",
+common_name: "Diarrhea, unknown character",
+},
+{
+id: "s_2319",
+type: "symptom",
+name: "Fever, lasting less than 3 days",
+common_name: "Fever lasting less than 3 days",
+},
+{
+id: "s_2320",
+type: "symptom",
+name: "Fever, lasting 3 to 7 days",
+common_name: "Fever lasting 3 to 7 days",
+},
+{
+id: "s_2322",
+type: "symptom",
+name: "Diarrhea, lasting more than 4 weeks",
+common_name: "Diarrhea lasting more than 4 weeks",
+},
+{
+id: "s_2328",
+type: "symptom",
+name: "Diarrhea, lasting 2 to 4 weeks",
+common_name: "Diarrhea lasting 2 to 4 weeks",
+},
+{
+id: "s_2329",
+type: "symptom",
+name: "Eye discharge, thick and clear",
+common_name: "Non-purulent eye discharge",
+},
+{
+id: "s_2330",
+type: "symptom",
+name: "Muscle weakness, general",
+common_name: "General muscle weakness",
+},
+{
+id: "s_2335",
+type: "symptom",
+name: "Pain in lower limb, shin",
+common_name: "Shin pain",
+},
+{
+id: "s_2336",
+type: "symptom",
+name: "Galactorrhea in men",
+common_name: "Milky discharge from the nipple",
+},
+{
+id: "s_2338",
+type: "symptom",
+name: "Vaginal discharge, grey",
+common_name: "Grey vaginal discharge",
+},
+{
+id: "s_2341",
+type: "symptom",
+name: "Bruise",
+common_name: "Bruise",
+},
+{
+id: "s_2344",
+type: "symptom",
+name: "Writing difficulties",
+common_name: "Writing difficulties",
+},
+{
+id: "s_2351",
+type: "symptom",
+name: "Reading difficulties",
+common_name: "Reading difficulties",
+},
+{
+id: "s_2352",
+type: "symptom",
+name: "Mathematics difficulties",
+common_name: "Mathematics difficulties",
+},
+{
+id: "s_2354",
+type: "symptom",
+name: "Oral lesions, located in posterior pharynx",
+common_name: "Oral lesions located in posterior pharynx",
+},
+{
+id: "s_2356",
+type: "symptom",
+name: "Single red area, larger than 1 cm",
+common_name: "Single red area larger than 1 cm",
+},
+{
+id: "s_2357",
+type: "symptom",
+name: "Multiple red areas, larger than 1 cm",
+common_name: "Multiple red areas larger than 1 cm",
+},
+{
+id: "s_2358",
+type: "symptom",
+name: "Single red spot, smaller than 1 cm",
+common_name: "Single red spot smaller than 1 cm",
+},
+{
+id: "s_2359",
+type: "symptom",
+name: "Multiple red spots, smaller than 1 cm",
+common_name: "Multiple red spots smaller than 1 cm",
+},
+{
+id: "s_2360",
+type: "symptom",
+name: "Scalp hematoma",
+common_name: "Bruise on scalp",
+},
+{
+id: "s_2361",
+type: "symptom",
+name: "Bone pain, nocturnal",
+common_name: "Nighttime bone pain",
+},
+{
+id: "s_2362",
+type: "symptom",
+name: "Battles sign",
+common_name: "Bruise behind ear",
+},
+{
+id: "s_2363",
+type: "symptom",
+name: "Rhinorrhea, after trauma",
+common_name: "Nasal discharge after trauma",
+},
+{
+id: "s_2364",
+type: "symptom",
+name: "Otorrhea, after trauma",
+common_name: "Ear discharge after trauma",
+},
+{
+id: "s_2365",
+type: "symptom",
+name: "Delayed closure of the anterior fontanelle",
+common_name: "Delayed closure of the soft spot",
+},
+{
+id: "s_2366",
+type: "symptom",
+name: "Frontal bossing",
+common_name: "Protruding forehead",
+},
+{
+id: "s_2367",
+type: "symptom",
+name: "Craniotabes",
+common_name: "Soft skull bones",
+},
+{
+id: "s_2369",
+type: "symptom",
+name: "Abnormal wound drainage",
+common_name: "Abnormal wound drainage",
+},
+{
+id: "s_2370",
+type: "symptom",
+name: "Multiple red changes, different sizes",
+common_name: "Multiple red changes of different sizes",
+},
+{
+id: "s_2371",
+type: "symptom",
+name: "Erythema, unspecified",
+common_name: "Unspecified redness of the skin",
+},
+{
+id: "s_2373",
+type: "symptom",
+name: "Decreased head circumference",
+common_name: "Abnormally small head",
+},
+{
+id: "s_2374",
+type: "symptom",
+name: "Schematic play",
+common_name: "Schematic play",
+},
+{
+id: "s_2375",
+type: "symptom",
+name: "Blood oxygen saturation, not measured",
+common_name: "Blood oxygen level not measured",
+},
+{
+id: "s_2376",
+type: "symptom",
+name: "Blood oxygen saturation, normal",
+common_name: "Normal blood oxygen level",
+},
+{
+id: "s_2377",
+type: "symptom",
+name: "Skin wound",
+common_name: "Skin wound",
+},
+{
+id: "s_2378",
+type: "symptom",
+name: "Skin wound, trauma-related",
+common_name: "Skin wound after injury",
+},
+{
+id: "s_2379",
+type: "symptom",
+name: "Skin wound, non-traumatic",
+common_name: "Wound unrelated to an injury",
+},
+{
+id: "s_2381",
+type: "symptom",
+name: "Enamel lesions",
+common_name: "Tooth lesion",
+},
+{
+id: "s_2382",
+type: "symptom",
+name: "Dermatological changes, localised",
+common_name: "Skin changes on specific part of body",
+},
+{
+id: "s_2383",
+type: "symptom",
+name: "Enamel hypomineralization",
+common_name: "Enamel hypomineralization",
+},
+{
+id: "s_2384",
+type: "symptom",
+name: "Enamel lesions, symmetrical",
+common_name: "Symmetrical tooth lesions",
+},
+{
+id: "s_2387",
+type: "symptom",
+name: "Blood oxygen saturation, between 90% and 94%",
+common_name: "Blood oxygen level between 90% and 94%",
+},
+{
+id: "s_2388",
+type: "symptom",
+name: "Blood oxygen saturation, between 80% and 89%",
+common_name: "Blood oxygen level between 80 and 89%",
+},
+{
+id: "s_2389",
+type: "symptom",
+name: "Blood oxygen saturation, lower than 80%",
+common_name: "Blood oxygen level lower than 80%",
+},
+{
+id: "s_2390",
+type: "symptom",
+name: "Blood oxygen saturation, sudden worsening",
+common_name: "Sudden worsening of blood oxygen saturation",
+},
+{
+id: "s_2391",
+type: "symptom",
+name: "Enamel lesions, spots",
+common_name: "Spots on tooth",
+},
+{
+id: "s_2393",
+type: "symptom",
+name: "Change in colour of a tooth, white",
+common_name: "Change in colour of a tooth, white",
+},
+{
+id: "s_2396",
+type: "symptom",
+name: "Change in colour of a tooth, brown",
+common_name: "Change in colour of a tooth, brown",
+},
+{
+id: "s_2398",
+type: "symptom",
+name: "Skin wound, after surgery",
+common_name: "Surgical wound",
+},
+{
+id: "s_2399",
+type: "symptom",
+name: "Skin wound, self-inflicted",
+common_name: "Self-inflicted wound",
+},
+{
+id: "s_2402",
+type: "symptom",
+name: "Pain in front of ear",
+common_name: "Pain in front of ear",
+},
+{
+id: "s_2403",
+type: "symptom",
+name: "Mandibular deviation when opening mouth",
+common_name: "Jaw shifts to the side when opening mouth",
+},
+{
+id: "s_2405",
+type: "symptom",
+name: "Tremors, disappears when holding limb or during suckling",
+common_name: "Trembling disappears when holding limb or during suckling",
+},
+{
+id: "s_2407",
+type: "symptom",
+name: "Suspicion of intoxication or poisoning",
+common_name: "Possible intoxication or poisoning",
+},
+{
+id: "s_2408",
+type: "symptom",
+name: "Blood pressure, between 140 and 179 mmHg",
+common_name: "Blood pressure between 140 mmHg and 179 mmHg",
+},
+{
+id: "s_2409",
+type: "symptom",
+name: "Catastrophising",
+common_name: "Pessimism",
+},
+{
+id: "s_2410",
+type: "symptom",
+name: "Tenderness in the scrotum",
+common_name: "Pain when pressing scrotum",
+},
+{
+id: "s_2412",
+type: "symptom",
+name: "Dermatological changes, tongue",
+common_name: "Dermatological changes on the tongue",
+},
+{
+id: "s_2413",
+type: "symptom",
+name: "Oral lesions, well demarcated borders",
+common_name: "Oral lesions with clearly defined borders",
+},
+{
+id: "s_2414",
+type: "symptom",
+name: "Oral lesions, multiple",
+common_name: "Multiple lesions in the mouth",
+},
+{
+id: "s_2416",
+type: "symptom",
+name: "Oral lesions, red",
+common_name: "Red lesions in the mouth",
+},
+{
+id: "s_2417",
+type: "symptom",
+name: "Oral lesions, larger than 1 cm",
+common_name: "Lesion in the mouth larger than 1 cm",
+},
+{
+id: "s_2421",
+type: "symptom",
+name: "Mouth pain, after eating spicy or acidic food",
+common_name: "Pain in mouth after eating spicy or acidic food",
+},
+{
+id: "s_2422",
+type: "symptom",
+name: "Oral lesions, changes in the location, size, or shape",
+common_name: "Change in location, size, or shape of lesions in the mouth",
+},
+{
+id: "s_2424",
+type: "symptom",
+name: "Oral lesions, recurrent",
+common_name: "Recurrent lesions in the mouth",
+},
+{
+id: "s_2428",
+type: "symptom",
+name: "Toothache, moderate",
+common_name: "Moderate toothache",
+},
+{
+id: "s_2429",
+type: "symptom",
+name: "Toothache, mild",
+common_name: "Mild toothache",
+},
+{
+id: "s_2430",
+type: "symptom",
+name: "Toothache, provoked",
+common_name: "Provoked toothache",
+},
+{
+id: "s_2431",
+type: "symptom",
+name: "Toothache, spontaneous",
+common_name: "Spontaneous toothache",
+},
+{
+id: "s_2432",
+type: "symptom",
+name: "Toothache, associated with cold",
+common_name: "Toothache associated with cold",
+},
+{
+id: "s_2433",
+type: "symptom",
+name: "Toothache, transient",
+common_name: "Transient toothache",
+},
+{
+id: "s_2438",
+type: "symptom",
+name: "Toothache, dull",
+common_name: "Dull toothache",
+},
+{
+id: "s_2440",
+type: "symptom",
+name: "Toothache, sharp",
+common_name: "Sharp toothache",
+},
+{
+id: "s_2441",
+type: "symptom",
+name: "Toothache, multiple teeth",
+common_name: "Pain in multiple teeth",
+},
+{
+id: "s_2442",
+type: "symptom",
+name: "Toothache, one tooth",
+common_name: "Pain in one tooth",
+},
+{
+id: "s_2443",
+type: "symptom",
+name: "Toothache, pulsating",
+common_name: "Pulsating toothache",
+},
+{
+id: "s_2446",
+type: "symptom",
+name: "Toothache, radiating",
+common_name: "Spreading toothache",
+},
+{
+id: "s_2449",
+type: "symptom",
+name: "Toothache, persistent",
+common_name: "Constant toothache",
+},
+{
+id: "s_2450",
+type: "symptom",
+name: "Toothache, lasting 48 hours or more",
+common_name: "Toothache lasting 48 hours or more",
+},
+{
+id: "s_2451",
+type: "symptom",
+name: "Toothache, associated with lying down",
+common_name: "Toothache when lying down",
+},
+{
+id: "s_2452",
+type: "symptom",
+name: "Toothache, associated with sweet or acidic foods or drinks",
+common_name: "Toothache associated with sweet or acidic foods or drinks",
+},
+{
+id: "s_2453",
+type: "symptom",
+name: "Loose dental filling",
+common_name: "Loose dental filling",
+},
+{
+id: "s_2454",
+type: "symptom",
+name: "Insertion of foreign body, dangerous object",
+common_name: "Insertion of a dangerous object",
+},
+{
+id: "s_2455",
+type: "symptom",
+name: "Myalgia, following intense physical exertion",
+common_name: "Muscle pain after intense physical activity",
+},
+{
+id: "s_2456",
+type: "symptom",
+name: "Toothache, lasting less than 48 hours",
+common_name: "Toothache lasting less than 48 hours",
+},
+{
+id: "s_2461",
+type: "symptom",
+name: "Pharyngeal swelling",
+common_name: "Throat swelling",
+},
+{
+id: "s_2462",
+type: "symptom",
+name: "No history of inflammatory bowel disease",
+common_name: "No history of inflammatory bowel disease",
+},
+{
+id: "s_2463",
+type: "symptom",
+name: "Abdominal tenderness, epigastric region",
+common_name: "Pain when pressing upper-middle part of the abdomen",
+},
+{
+id: "s_2464",
+type: "symptom",
+name: "Impaired vision, bilateral",
+common_name: "Visual impairment in both eyes",
+},
+{
+id: "s_2465",
+type: "symptom",
+name: "Enlarged side of neck",
+common_name: "Swollen side of neck",
+},
+{
+id: "s_2467",
+type: "symptom",
+name: "Enlarged whole neck",
+common_name: "Swollen whole neck",
+},
+{
+id: "s_2468",
+type: "symptom",
+name: "Loss of consciousness, during prolonged standing",
+common_name: "Fainting during prolonged standing",
+},
+{
+id: "s_2469",
+type: "symptom",
+name: "Ceasing or limiting opioid intake",
+common_name: "Limiting or stopping opioid use",
+},
+{
+id: "s_2470",
+type: "symptom",
+name: "Fear of ageing",
+common_name: "Fear of growing older or ageing",
+},
+{
+id: "s_2471",
+type: "symptom",
+name: "Loss of consciousness, in a sitting or lying position",
+common_name: "Fainting while sitting or lying down",
+},
+{
+id: "s_2472",
+type: "symptom",
+name: "Loss of consciousness, during exercise",
+common_name: "Fainting during exercise",
+},
+{
+id: "s_2473",
+type: "symptom",
+name: "Drive for muscularity",
+common_name: "Desire to be highly muscular",
+},
+{
+id: "s_2474",
+type: "symptom",
+name: "Loss of consciousness, in a warm place",
+common_name: "Fainting in a warm place",
+},
+{
+id: "s_2475",
+type: "symptom",
+name: "Loss of consciousness, under stress",
+common_name: "Fainting during stress",
+},
+{
+id: "s_2477",
+type: "symptom",
+name: "Erythema, limbs, symmetrical",
+common_name: "Symmetrical redness of the limbs",
+},
+{
+id: "s_2481",
+type: "symptom",
+name: "Erythema, neck",
+common_name: "Redness of the neck",
+},
+{
+id: "s_2484",
+type: "symptom",
+name: "Erythema, chest",
+common_name: "Redness of the chest",
+},
+{
+id: "s_2485",
+type: "symptom",
+name: "Toothache, associated with touch",
+common_name: "Toothache associated with touch",
+},
+{
+id: "s_2487",
+type: "symptom",
+name: "Blood glucose level, less than 54 mg/dl or 3 mmol/l",
+common_name: "Very low blood sugar level, less than 54 mg/dl or 3 mmol/l",
+},
+{
+id: "s_2489",
+type: "symptom",
+name: "Impaired memory, developed within 24 hours",
+common_name: "Memory problems developing in the last 24 hours",
+},
+{
+id: "s_2490",
+type: "symptom",
+name: "Impaired memory, developed more than 24 hours ago",
+common_name: "Memory problems developing over a few days or months",
+},
+{
+id: "s_2491",
+type: "symptom",
+name: "Toothache, difficulty determining how many teeth hurt",
+common_name: "Difficulty identifying how many teeth hurt",
+},
+{
+id: "s_2494",
+type: "symptom",
+name: "Muscle cramps, nocturnal",
+common_name: "Nocturnal muscle cramps",
+},
+{
+id: "s_2495",
+type: "symptom",
+name: "Crenated tongue",
+common_name: "Scalloped tongue",
+},
+{
+id: "s_2496",
+type: "symptom",
+name: "Excessive loss of dental hard tissue",
+common_name: "Excessive tooth wear",
+},
+{
+id: "s_2498",
+type: "symptom",
+name: "Jaw pain, worse in the morning",
+common_name: "Morning jaw pain",
+},
+{
+id: "s_2499",
+type: "symptom",
+name: "Facial pain, bilateral",
+common_name: "Face pain on both sides",
+},
+{
+id: "s_2501",
+type: "symptom",
+name: "Jaw pain, associated with touch",
+common_name: "Jaw pain associated with touch",
+},
+{
+id: "s_2506",
+type: "symptom",
+name: "Muscle cramps, hypnagogic",
+common_name: "Muscle cramps at sleep onset",
+},
+{
+id: "s_2507",
+type: "symptom",
+name: "Hypnagogic hallucinations",
+common_name: "Sleep onset hallucinations",
+},
+{
+id: "s_2508",
+type: "symptom",
+name: "Blepharoptosis, acute",
+common_name: "Dropping eyelids for less than 1 week",
+},
+{
+id: "s_2510",
+type: "symptom",
+name: "Interdental papilla loss",
+common_name: "Black triangles between teeth",
+},
+{
+id: "s_2511",
+type: "symptom",
+name: "Blepharoptosis, chronic",
+common_name: "Dropping eyelids for 7 days or more",
+},
+{
+id: "s_2512",
+type: "symptom",
+name: "Nausea, triggered by movement",
+common_name: "Nausea while moving",
+},
+{
+id: "s_2514",
+type: "symptom",
+name: "Tooth migration",
+common_name: "Teeth changing position",
+},
+{
+id: "s_2516",
+type: "symptom",
+name: "Headache, waking up from sleep",
+common_name: "Waking up because of headache",
+},
+{
+id: "s_2517",
+type: "symptom",
+name: "Exaggerated mouthing behaviour",
+common_name: "Mouthing hands or items",
+},
+{
+id: "s_2518",
+type: "symptom",
+name: "Transitional stools of newborn",
+common_name: "Frequent loose or seedy stools of the infant",
+},
+{
+id: "s_2519",
+type: "symptom",
+name: "Yellow- or green-coloured stool",
+common_name: "Yellow or green stool",
+},
+{
+id: "s_2520",
+type: "symptom",
+name: "Hair loss, androgenetic",
+common_name: "Hair loss on the temples or at the top of the head",
+},
+{
+id: "s_2521",
+type: "symptom",
+name: "Brown-coloured stool",
+common_name: "Brown stool",
+},
+{
+id: "s_2523",
+type: "symptom",
+name: "Black-coloured stool, related to diet or medicine intake",
+common_name: "Black stool related to diet or medicine intake",
+},
+{
+id: "s_2524",
+type: "symptom",
+name: "Red eye, bilateral",
+common_name: "Bloodshot eyes",
+},
+{
+id: "s_2532",
+type: "symptom",
+name: "Oral lesions, single",
+common_name: "Single oral lesion",
+},
+{
+id: "s_2533",
+type: "symptom",
+name: "Oral lesions, smaller than 1 cm",
+common_name: "Oral lesion smaller than 1 cm",
+},
+{
+id: "s_2535",
+type: "symptom",
+name: "Oral lesions, painful",
+common_name: "Painful lesions in the mouth",
+},
+{
+id: "s_2537",
+type: "symptom",
+name: "Oral lesions, lasting less than 3 weeks",
+common_name: "Oral lesions present for less than 3 weeks",
+},
+{
+id: "s_2538",
+type: "symptom",
+name: "Oral lesions, lasting 3 or more weeks",
+common_name: "Oral lesions present for 3 weeks or more",
+},
+{
+id: "s_2541",
+type: "symptom",
+name: "Nocturnal emission",
+common_name: "Ejaculation during sleep",
+},
+{
+id: "s_2543",
+type: "symptom",
+name: "Facial pain, unprovoked",
+common_name: "Spontaneous face pain",
+},
+{
+id: "s_2544",
+type: "symptom",
+name: "Facial pain, constant",
+common_name: "Constant face pain",
+},
+{
+id: "s_2545",
+type: "symptom",
+name: "Toothache, sensitivity to percussion",
+common_name: "Pain associated with tapping a tooth",
+},
+{
+id: "s_2546",
+type: "symptom",
+name: "Heterochromic irides",
+common_name: "Different eye colours",
+},
+{
+id: "s_2547",
+type: "symptom",
+name: "Lack of testicle in the scrotum",
+common_name: "Lack of testicle in the scrotum",
+},
+{
+id: "s_2548",
+type: "symptom",
+name: "Testicular retraction",
+common_name: "Testicular retraction",
+},
+{
+id: "s_2551",
+type: "symptom",
+name: "Erythema, upper extremities excluding hands",
+common_name: "Red skin on the shoulder, arm, forearm, elbow, or wrist",
+},
+{
+id: "s_2552",
+type: "symptom",
+name: "Erythema, lower extremities excluding feet",
+common_name: "Red skin on the hip, thigh, knee, calf, or ankle",
+},
+{
+id: "s_2553",
+type: "symptom",
+name: "Oral lesions, trauma-related",
+common_name: "Mouth lesion associated with trauma",
+},
+{
+id: "s_2557",
+type: "symptom",
+name: "Dermatological changes, ears",
+common_name: "Skin changes on ears",
+},
+{
+id: "s_2558",
+type: "symptom",
+name: "Abdominal pain, unknown onset",
+common_name: "Unknown onset of abdominal pain",
+},
+{
+id: "s_2559",
+type: "symptom",
+name: "Erythema, feet",
+common_name: "Red skin on foot",
+},
+{
+id: "s_2563",
+type: "symptom",
+name: "Jaundice, recurrent",
+common_name: "Recurrent jaundice",
+},
+{
+id: "s_2565",
+type: "symptom",
+name: "Toothache, due to trauma",
+common_name: "Toothache caused by trauma",
+},
+{
+id: "s_2566",
+type: "symptom",
+name: "Headache, localised",
+common_name: "Headache in a specific area of the head",
+},
+{
+id: "s_2567",
+type: "symptom",
+name: "Headache, unspecified location",
+common_name: "Headache location unknown",
+},
+{
+id: "s_2568",
+type: "symptom",
+name: "Headache, parietal",
+common_name: "Headache located on top of the head",
+},
+{
+id: "s_2569",
+type: "symptom",
+name: "Jaundice, cutaneous",
+common_name: "Yellowing of the skin",
+},
+{
+id: "s_2571",
+type: "symptom",
+name: "Dysphagia, severe",
+common_name: "Severe swallowing difficulties",
+},
+{
+id: "s_2572",
+type: "symptom",
+name: "Eye injury",
+common_name: "Eye injury",
+},
+{
+id: "s_2574",
+type: "symptom",
+name: "History of hypoglycemic episodes",
+common_name: "History of hypoglycemic episodes",
+},
+{
+id: "s_2575",
+type: "symptom",
+name: "Ability to manage hypoglycemia",
+common_name: "Ability to manage hypoglycemia",
+},
+{
+id: "s_2577",
+type: "symptom",
+name: "Red eye, unilateral",
+common_name: "Bloodshot eye",
+},
+{
+id: "s_2579",
+type: "symptom",
+name: "Enlarged vein of lower limb",
+common_name: "Enlarged vein of lower limb",
+},
+{
+id: "s_2580",
+type: "symptom",
+name: "Enlarged vein in the abdomen",
+common_name: "Enlarged vein in the abdomen",
+},
+{
+id: "s_2581",
+type: "symptom",
+name: "Lump in scrotum, enlarged vein",
+common_name: "Enlarged vein of scrotum",
+},
+{
+id: "s_2582",
+type: "symptom",
+name: "Groin pain",
+common_name: "Pain in groin",
+},
+{
+id: "s_2584",
+type: "symptom",
+name: "Snake bite wound",
+common_name: "Snake bite wound",
+},
+{
+id: "s_2586",
+type: "symptom",
+name: "Anuria",
+common_name: "Lack of urine",
+},
+{
+id: "s_2588",
+type: "symptom",
+name: "Spider bite, unknown type",
+common_name: "Unknown venomosity of spider bite",
+},
+{
+id: "s_2590",
+type: "symptom",
+name: "Normal urine colour",
+common_name: "Normal urine colour",
+},
+{
+id: "s_2591",
+type: "symptom",
+name: "Joint pain, both knees",
+common_name: "Both knees pain",
+},
+{
+id: "s_2592",
+type: "symptom",
+name: "Joint pain, both knees, during movement",
+common_name: "Pain when moving both knees",
+},
+{
+id: "s_2593",
+type: "symptom",
+name: "Spider bite, possibly venomous",
+common_name: "Possibly venomous spider bite",
+},
+{
+id: "s_2594",
+type: "symptom",
+name: "Spider bite, nonvenomous",
+common_name: "Nonvenomous spider bite",
+},
+{
+id: "s_2598",
+type: "symptom",
+name: "Oral blisters",
+common_name: "Blisters in the mouth",
+},
+{
+id: "s_2599",
+type: "symptom",
+name: "Skin wound, controllable bleeding",
+common_name: "Controllable bleeding wound",
+},
+{
+id: "s_2600",
+type: "symptom",
+name: "Enlarged vein of chest",
+common_name: "Enlarged veins on chest",
+},
+{
+id: "s_2604",
+type: "symptom",
+name: "Unknown urine colour",
+common_name: "Unknown urine colour",
+},
+{
+id: "s_2605",
+type: "symptom",
+name: "Dermatological changes, located on or around lips",
+common_name: "Skin changes on or around the lips",
+},
+{
+id: "s_2606",
+type: "symptom",
+name: "Tenderness of spine",
+common_name: "Pain when pressing the spine",
+},
+{
+id: "s_2608",
+type: "symptom",
+name: "Tremors, both legs",
+common_name: "Trembling of both legs",
+},
+{
+id: "s_2609",
+type: "symptom",
+name: "Positive tongue blade bite test",
+common_name: "Spatula test confirming mandibular fracture",
+},
+{
+id: "s_2610",
+type: "symptom",
+name: "Joint pain, either knee",
+common_name: "Joint pain in either knee",
+},
+{
+id: "s_2611",
+type: "symptom",
+name: "Tremors, one leg",
+common_name: "Trembling of one leg",
+},
+{
+id: "s_2612",
+type: "symptom",
+name: "Avoiding going home",
+common_name: "Avoiding going home",
+},
+{
+id: "s_2614",
+type: "symptom",
+name: "Sublingual hematoma",
+common_name: "Hematoma under the tongue",
+},
+{
+id: "s_2615",
+type: "symptom",
+name: "Fear of a particular person",
+common_name: "Fear of a particular person or group",
+},
+{
+id: "s_2619",
+type: "symptom",
+name: "Skin pain, associated with swimming in the sea or ocean",
+common_name: "Skin pain while swimming in the sea or ocean",
+},
+{
+id: "s_2622",
+type: "symptom",
+name: "Decreased fluid intake",
+common_name: "Poor fluid intake",
+},
+{
+id: "s_2624",
+type: "symptom",
+name: "Pain in upper limb, lasting less than 24 hours",
+common_name: "Pain in upper limb lasting less than 24 hours",
+},
+{
+id: "s_2625",
+type: "symptom",
+name: "Pain in upper limb, lasting more than 3 months",
+common_name: "Pain in upper limb lasting more than 3 months",
+},
+{
+id: "s_2626",
+type: "symptom",
+name: "Constipation, lasting a month or more",
+common_name: "Constipation for a month or more",
+},
+{
+id: "s_2627",
+type: "symptom",
+name: "Edema, periorbital, one eye",
+common_name: "Swelling around only one eye",
+},
+{
+id: "s_2630",
+type: "symptom",
+name: "Erythema, around one eye",
+common_name: "Redness around only one eye",
+},
+{
+id: "s_2633",
+type: "symptom",
+name: "Erythema, around either eye",
+common_name: "Redness around either eye",
+},
+{
+id: "s_2634",
+type: "symptom",
+name: "Loss of joint motion",
+common_name: "Blocked joint",
+},
+{
+id: "s_2635",
+type: "symptom",
+name: "Acute weight loss",
+common_name: "Acute weight loss",
+},
+{
+id: "s_2636",
+type: "symptom",
+name: "Pain in upper limb, lasting 1 to 7 days",
+common_name: "Pain in upper limb lasting 1 to 7 days",
+},
+{
+id: "s_2637",
+type: "symptom",
+name: "Pain in upper limb, lasting between 1 week and 3 months",
+common_name: "Pain in upper limb lasting between 1 week and 3 months",
+},
+{
+id: "s_2638",
+type: "symptom",
+name: "Muscle cramps, lower limb",
+common_name: "Leg cramps",
+},
+{
+id: "s_2639",
+type: "symptom",
+name: "Edema, periorbital, eyes",
+common_name: "Swelling around eyes",
+},
+{
+id: "s_2641",
+type: "symptom",
+name: "Well appearance",
+common_name: "Well appearance",
+},
+{
+id: "s_2643",
+type: "symptom",
+name: "Sexual activity",
+common_name: "Person who had sex",
+},
+{
+id: "s_2645",
+type: "symptom",
+name: "Fatigue, worsening exercise tolerance",
+common_name: "Worsening exercise tolerance",
+},
+{
+id: "s_2646",
+type: "symptom",
+name: "Tremors, either hand",
+common_name: "Trembling of either hand",
+},
+{
+id: "s_2647",
+type: "symptom",
+name: "Tremors, either leg",
+common_name: "Trembling of either leg",
+},
+{
+id: "s_2648",
+type: "symptom",
+name: "Allodynia",
+common_name: "Pain sensation disorder",
+},
+{
+id: "s_2650",
+type: "symptom",
+name: "Frequent physical hetero-aggressivity",
+common_name: "Frequent physical aggression towards others",
+},
+{
+id: "s_2651",
+type: "symptom",
+name: "Hemoptysis, massive",
+common_name: "Coughing up huge amount of blood",
+},
+{
+id: "s_2652",
+type: "symptom",
+name: "Consent to a sexual interview",
+common_name: "Agree to answer questions about sex",
+},
+{
+id: "s_2658",
+type: "symptom",
+name: "Vomiting, food",
+common_name: "Vomiting, food",
+},
+{
+id: "s_2661",
+type: "symptom",
+name: "Skin mass, with central punctum",
+common_name: "Lump on the skin with a central punctum",
+},
+{
+id: "s_2663",
+type: "symptom",
+name: "Episodes of depressed mood, lasting less than 2 weeks",
+common_name: "Depressed mood lasting less than 2 weeks",
+},
+{
+id: "s_2664",
+type: "symptom",
+name: "Episodes of depressed mood, lasting more than 2 years",
+common_name: "Depressed mood lasting more than 2 years",
+},
+{
+id: "s_2665",
+type: "symptom",
+name: "Episode of depressed mood, peripartum onset",
+common_name: "Depressed mood related to childbirth",
+},
+{
+id: "s_2666",
+type: "symptom",
+name: "Episodes of depressed mood, lasting between 2 weeks and 1 year",
+common_name: "Depressed mood lasting between 2 weeks and 1 year",
+},
+{
+id: "s_2667",
+type: "symptom",
+name: "Episodes of depressed mood, lasting 1 to 2 years",
+common_name: "Depressed mood lasting 1 to 2 years",
+},
+{
+id: "s_2668",
+type: "symptom",
+name: "Skin mass, transilluminable",
+common_name: "Transilluminable skin mass",
+},
+{
+id: "s_2669",
+type: "symptom",
+name: "Episode of elevated mood, lasting 3 days or less",
+common_name: "Elevated mood lasting 3 days or less",
+},
+{
+id: "s_2670",
+type: "symptom",
+name: "Episode of elevated mood, lasting 4 to 6 days",
+common_name: "Elevated mood lasting 4 to 6 days",
+},
+{
+id: "s_2671",
+type: "symptom",
+name: "Episode of elevated mood, lasting 7 days or more",
+common_name: "Elevated mood lasting 7 days or more",
+},
+{
+id: "s_2672",
+type: "symptom",
+name: "Episode of elevated mood, substance induced",
+common_name: "Elevated mood related to substance use",
+},
+{
+id: "s_2673",
+type: "symptom",
+name: "Dermatological changes, head",
+common_name: "Skin changes on the head",
+},
+{
+id: "s_2674",
+type: "symptom",
+name: "Dermatological changes, preceded by fever or other symptoms of respiratory tract infection",
+common_name: "Skin changes preceded by fever or other cold symptoms",
+},
+{
+id: "s_2675",
+type: "symptom",
+name: "Mood swings, more than 2 years",
+common_name: "Mood swings present for more than 2 years",
+},
+{
+id: "s_2676",
+type: "symptom",
+name: "Mood swings, less than 1 year",
+common_name: "Mood swings present for less than 1 year",
+},
+{
+id: "s_2677",
+type: "symptom",
+name: "Episode of depressed mood, substance induced",
+common_name: "Depressed mood related to substance use",
+},
+{
+id: "s_2678",
+type: "symptom",
+name: "Toothache, unknown cause",
+common_name: "Toothache of unknown reason",
+},
+{
+id: "s_2680",
+type: "symptom",
+name: "Current mood, elevated",
+common_name: "Currently elevated mood",
+},
+{
+id: "s_2681",
+type: "symptom",
+name: "Current mood, depressed",
+common_name: "Currently depressed mood",
+},
+{
+id: "s_2682",
+type: "symptom",
+name: "Current mood, normal",
+common_name: "Currently normal mood",
+},
+{
+id: "s_2684",
+type: "symptom",
+name: "Skin mass, located on the wrist",
+common_name: "Skin mass located on the wrist",
+},
+{
+id: "s_2686",
+type: "symptom",
+name: "Mood swings, 1 to 2 years",
+common_name: "Mood swings present for 1 to 2 years",
+},
+{
+id: "s_2687",
+type: "symptom",
+name: "Mood swings, extreme rapid pattern",
+common_name: "Rapid mood swings",
+},
+{
+id: "s_2692",
+type: "symptom",
+name: "Circumferential burn",
+common_name: "Circumferential burn",
+},
+{
+id: "s_2696",
+type: "symptom",
+name: "Sensory loss in one limb, lasting less than 24 hours",
+common_name: "Loss of feeling in one arm or leg lasting less than 24 hours",
+},
+{
+id: "s_2702",
+type: "symptom",
+name: "Sensory loss in one limb, lasting between 24 hours and 4 weeks",
+common_name: "Loss of feeling in one arm or leg lasting between 24 hours and 4 weeks",
+},
+{
+id: "s_2703",
+type: "symptom",
+name: "Sensory loss in one limb, lasting more than 4 weeks",
+common_name: "Loss of feeling in one arm or leg lasting more than 4 weeks",
+},
+{
+id: "s_2705",
+type: "symptom",
+name: "Avoidance behavior related to trauma",
+common_name: "Avoidance behavior  related to traumatic event",
+},
+{
+id: "s_2706",
+type: "symptom",
+name: "History of being at risk of a death",
+common_name: "History of being at risk of a death",
+},
+{
+id: "s_2707",
+type: "symptom",
+name: "History of experiencing or witnessing a natural disaster",
+common_name: "Witnessed or experienced a natural disaster",
+},
+{
+id: "s_2708",
+type: "symptom",
+name: "History of experiencing or witnessing a serious traffic accident",
+common_name: "History of experiencing or witnessing a serious traffic accident",
+},
+{
+id: "s_2709",
+type: "symptom",
+name: "History of traumatic situation",
+common_name: "History of traumatic situation",
+},
+{
+id: "s_2710",
+type: "symptom",
+name: "History of an unexpected death of a loved one",
+common_name: "Unexpected death of a loved one",
+},
+{
+id: "s_2711",
+type: "symptom",
+name: "Seizure, first episode",
+common_name: "First seizure",
+},
+{
+id: "s_2712",
+type: "symptom",
+name: "Seizure, unspecified number of episodes",
+common_name: "Uncertainty about how many previous seizures",
+},
+{
+id: "s_2713",
+type: "symptom",
+name: "Trauma or stressor related disturbances",
+common_name: "Trauma or stressor related disturbances",
+},
+{
+id: "s_2714",
+type: "symptom",
+name: "History of a stressful situation",
+common_name: "History of stressful situation",
+},
+{
+id: "s_2715",
+type: "symptom",
+name: "Recent physical hetero-aggressivity, health or life-threatening",
+common_name: "Recent physical aggression towards others posing a threat to health or life",
+},
+{
+id: "s_2717",
+type: "symptom",
+name: "Pus under the skin of the toe",
+common_name: "Pus under the skin of the toe",
+},
+{
+id: "s_2718",
+type: "symptom",
+name: "Edema, entire face",
+common_name: "Swollen entire face",
+},
+{
+id: "s_2727",
+type: "symptom",
+name: "Hypervigilance",
+common_name: "State of feeling constantly on guard",
+},
+{
+id: "s_2729",
+type: "symptom",
+name: "Cloudy urine",
+common_name: "Milky urine",
+},
+{
+id: "s_2730",
+type: "symptom",
+name: "Dermatological changes, buttocks",
+common_name: "Skin changes on buttocks",
+},
+{
+id: "s_2731",
+type: "symptom",
+name: "Bunion",
+common_name: "Bunion",
+},
+{
+id: "s_2733",
+type: "symptom",
+name: "Manic behaviour",
+common_name: "Manic behaviour",
+},
+{
+id: "s_2734",
+type: "symptom",
+name: "Manic behaviour, reckless spending",
+common_name: "Excessive spending during mood disturbances",
+},
+{
+id: "s_2735",
+type: "symptom",
+name: "Manic behaviour, frequent loans",
+common_name: "Taking loans during mood disturbances",
+},
+{
+id: "s_2737",
+type: "symptom",
+name: "Exaggerated startle response",
+common_name: "Jumpiness",
+},
+{
+id: "s_2738",
+type: "symptom",
+name: "Delusion, less than a month",
+common_name: "Delusions lasting less than 1 month",
+},
+{
+id: "s_2739",
+type: "symptom",
+name: "Delusion, 1 to 3 months",
+common_name: "Delusions lasting 1 to 3 months",
+},
+{
+id: "s_2740",
+type: "symptom",
+name: "Delusion, 4 months or more",
+common_name: "Delusions lasting more than 4 months",
+},
+{
+id: "s_2741",
+type: "symptom",
+name: "Hallucinations, less than a month",
+common_name: "Hallucinations lasting less than 1 month",
+},
+{
+id: "s_2742",
+type: "symptom",
+name: "Hallucinations, 1 to 3 months",
+common_name: "Hallucinations lasting 1 to 3 months",
+},
+{
+id: "s_2743",
+type: "symptom",
+name: "Hallucinations, 4 months or more",
+common_name: "Hallucinations lasting 4 months or more",
+},
+{
+id: "s_2744",
+type: "symptom",
+name: "Delusions, theft",
+common_name: "Belief of being robbed despite proof of the contrary",
+},
+{
+id: "s_2746",
+type: "symptom",
+name: "Diarrhea, bloody",
+common_name: "Bloody diarrhea",
+},
+{
+id: "s_2749",
+type: "symptom",
+name: "Inability to manage hypoglycemia",
+common_name: "Inability to manage hypoglycemia",
+},
+{
+id: "s_2752",
+type: "symptom",
+name: "Exhaustion related to studying or work",
+common_name: "Exhaustion due to studying or work",
+},
+{
+id: "s_2753",
+type: "symptom",
+name: "Psychological distancing from ones studying or job",
+common_name: "Mental distancing from studying or work",
+},
+{
+id: "s_2754",
+type: "symptom",
+name: "Speech and language impairment",
+common_name: "Speaking difficulties",
+},
+{
+id: "s_2755",
+type: "symptom",
+name: "Sense of ineffectiveness",
+common_name: "Sense of unproductiveness",
+},
+{
+id: "s_2758",
+type: "symptom",
+name: "Excessive motor activity",
+common_name: "Excessive motor activity",
+},
+{
+id: "s_2759",
+type: "symptom",
+name: "Excessive motor activity, 3 days or less",
+common_name: "Excessive moving or fidgeting lasting 3 days or less",
+},
+{
+id: "s_2760",
+type: "symptom",
+name: "Difficulty organizing objects",
+common_name: "Losing or misplacing objects",
+},
+{
+id: "s_2761",
+type: "symptom",
+name: "Excessive motor activity, 4 to 6 days",
+common_name: "Excessive moving or fidgeting lasting 4 to 6 days",
+},
+{
+id: "s_2762",
+type: "symptom",
+name: "Excessive motor activity, 7 days to 6 months",
+common_name: "Excessive moving or fidgeting lasting between 7 days to 6 months",
+},
+{
+id: "s_2763",
+type: "symptom",
+name: "Excessive motor activity, 6 months or more",
+common_name: "Excessive moving or fidgeting lasting 6 months or more",
+},
+{
+id: "s_2764",
+type: "symptom",
+name: "Restlessness",
+common_name: "Restlessness",
+},
+{
+id: "s_2766",
+type: "symptom",
+name: "Restlessness, 3 days or less",
+common_name: "Restlessness lasting 3 days or less",
+},
+{
+id: "s_2767",
+type: "symptom",
+name: "Restlessness, 4 to 6 days",
+common_name: "Restlessness lasting 4 to 6 days",
+},
+{
+id: "s_2768",
+type: "symptom",
+name: "Restlessness, between 7 days and 6 months",
+common_name: "Restlessness lasting between 7 days and 6 months",
+},
+{
+id: "s_2769",
+type: "symptom",
+name: "Restlessness, 6 months or more",
+common_name: "Restlessness lasting 6 months or more",
+},
+{
+id: "s_2771",
+type: "symptom",
+name: "Difficulty organizing objects, 3 days or less",
+common_name: "Losing or misplacing objects lasting 3 days or less",
+},
+{
+id: "s_2772",
+type: "symptom",
+name: "Difficulty organizing objects, 4 to 6 days",
+common_name: "Losing or misplacing objects lasting 4 to 6 days",
+},
+{
+id: "s_2773",
+type: "symptom",
+name: "Difficulty organizing objects, between 7 days and 6 months",
+common_name: "Losing or misplacing objects lasting between 7 days and 6 months",
+},
+{
+id: "s_2774",
+type: "symptom",
+name: "Difficulty organizing objects, 6 months or more",
+common_name: "Losing or misplacing objects lasting 6 months or more",
+},
+{
+id: "s_2775",
+type: "symptom",
+name: "Difficulty organizing tasks or activities",
+common_name: "Trouble completing tasks",
+},
+{
+id: "s_2778",
+type: "symptom",
+name: "Difficulty organizing tasks or activities, 3 days or less",
+common_name: "Trouble completing tasks lasting 3 days or less",
+},
+{
+id: "s_2779",
+type: "symptom",
+name: "Difficulty organizing tasks or activities, 4 to 6 days",
+common_name: "Trouble completing tasks lasting 4 to 6 days",
+},
+{
+id: "s_2780",
+type: "symptom",
+name: "Difficulty organizing tasks or activities, between 7 days and 6 months",
+common_name: "Trouble completing tasks lasting between 7 days and 6 months",
+},
+{
+id: "s_2781",
+type: "symptom",
+name: "Difficulty organizing tasks or activities, 6 months or more",
+common_name: "Trouble completing tasks lasting more than 6 months",
+},
+{
+id: "s_2783",
+type: "symptom",
+name: "Lack of attention to detail",
+common_name: "Difficulty with paying attention to detail",
+},
+{
+id: "s_2784",
+type: "symptom",
+name: "Difficulty waiting turns",
+common_name: "Lack of patience",
+},
+{
+id: "s_2785",
+type: "symptom",
+name: "Skin wound, animal bite",
+common_name: "Animal bite wound",
+},
+{
+id: "s_2786",
+type: "symptom",
+name: "Mood swings, longstanding pattern",
+common_name: "Mood swings, longstanding pattern",
+},
+{
+id: "s_2787",
+type: "symptom",
+name: "Toothache, unbearable",
+common_name: "Unbearable toothache",
+},
+{
+id: "s_2789",
+type: "symptom",
+name: "Excessive verbosity",
+common_name: "Excessively talkative",
+},
+{
+id: "s_2790",
+type: "symptom",
+name: "Edema, clavicle",
+common_name: "Swollen collarbone",
+},
+{
+id: "s_2791",
+type: "symptom",
+name: "Clavicle tenderness",
+common_name: "Pain when pressing collarbone",
+},
+{
+id: "s_2793",
+type: "symptom",
+name: "Rebellious behaviour",
+common_name: "Rulebreaking",
+},
+{
+id: "s_2794",
+type: "symptom",
+name: "Involuntary repetitive behaviours, motor",
+common_name: "Involuntary repetitive motor behaviours",
+},
+{
+id: "s_2795",
+type: "symptom",
+name: "Deceiving",
+common_name: "Lying a lot",
+},
+{
+id: "s_2796",
+type: "symptom",
+name: "Involuntary repetitive behaviours",
+common_name: "Involuntary repetitive behaviours",
+},
+{
+id: "s_2797",
+type: "symptom",
+name: "Involuntary repetitive behaviours, vocal",
+common_name: "Involuntary repetitive vocal behaviours",
+},
+{
+id: "s_2806",
+type: "symptom",
+name: "Breaking the law",
+common_name: "Breaking the law",
+},
+{
+id: "s_2812",
+type: "symptom",
+name: "Miscarriage",
+common_name: "Pregnancy loss",
+},
+{
+id: "s_2816",
+type: "symptom",
+name: "Weight faltering of newborns",
+common_name: "Slow rate of weight gain in newborns",
+},
+{
+id: "s_2818",
+type: "symptom",
+name: "Red-coloured stool, mild bleeding",
+common_name: "Red stool with mild bleeding",
+},
+{
+id: "s_2819",
+type: "symptom",
+name: "Red-coloured stool, heavy bleeding",
+common_name: "Red stool with heavy bleeding",
+},
+{
+id: "s_2820",
+type: "symptom",
+name: "Back pain, acute",
+common_name: "Acute back pain",
+},
+{
+id: "s_2821",
+type: "symptom",
+name: "Back pain, subacute",
+common_name: "Subacute back pain",
+},
+{
+id: "s_2822",
+type: "symptom",
+name: "Back pain, chronic",
+common_name: "Chronic back pain",
+},
+{
+id: "s_2825",
+type: "symptom",
+name: "Electric shock",
+common_name: "Electric shock",
+},
+{
+id: "s_2826",
+type: "symptom",
+name: "Chest pain, resolves with rest",
+common_name: "Chest pain going away with rest",
+},
+{
+id: "s_2827",
+type: "symptom",
+name: "Bruise, scrotum",
+common_name: "Bruise on scrotum",
+},
+{
+id: "s_2828",
+type: "symptom",
+name: "Firm testicle",
+common_name: "One testicle harder than the other",
+},
+{
+id: "s_2830",
+type: "symptom",
+name: "Cough, not improving with time",
+common_name: "Cough not improving over time",
+},
+{
+id: "s_2831",
+type: "symptom",
+name: "Fear or avoidance of eating in someone else presence",
+common_name: "Fear or avoidance of eating in someone else presence",
+},
+{
+id: "s_2832",
+type: "symptom",
+name: "Fear of social interactions",
+common_name: "Fear of social interactions",
+},
+{
+id: "s_2833",
+type: "symptom",
+name: "Cough, whooping",
+common_name: "Whooping cough",
+},
+{
+id: "s_2834",
+type: "symptom",
+name: "Dyspnea, lasting more than 4 weeks, sudden worsening",
+common_name: "Sudden worsening of shortness of breath lasting more than 4 weeks",
+},
+{
+id: "s_2835",
+type: "symptom",
+name: "Dyspnea, lasting between 1 day and 4 weeks, sudden worsening",
+common_name: "Sudden worsening of shortness of breath lasting between 1 day and 4 weeks",
+},
+{
+id: "s_2836",
+type: "symptom",
+name: "Cough, improving with time",
+common_name: "Cough improving over time",
+},
+{
+id: "s_2837",
+type: "symptom",
+name: "Edema, one lower limb, acute",
+common_name: "Swollen leg lasting less than 3 days",
+},
+{
+id: "s_2838",
+type: "symptom",
+name: "Edema, one lower limb, chronic",
+common_name: "Swollen leg lasting 3 days or more",
+},
+{
+id: "s_2839",
+type: "symptom",
+name: "Edema, both lower limbs, acute",
+common_name: "Swollen legs lasting less than 3 days",
+},
+{
+id: "s_2840",
+type: "symptom",
+name: "Edema, both lower limbs, chronic",
+common_name: "Swollen legs lasting 3 days or more",
+},
+{
+id: "s_2843",
+type: "symptom",
+name: "Chest pain, during physical activity, vigorous",
+common_name: "Chest pain during vigorous exercise",
+},
+{
+id: "s_2845",
+type: "symptom",
+name: "Nasal catarrh, acute",
+common_name: "Acute runny nose",
+},
+{
+id: "s_2846",
+type: "symptom",
+name: "Nasal catarrh, chronic",
+common_name: "Chronic runny nose",
+},
+{
+id: "s_2847",
+type: "symptom",
+name: "Chest pain, during physical activity, light",
+common_name: "Chest pain during light physical activity",
+},
+{
+id: "s_2849",
+type: "symptom",
+name: "Edema, vulva",
+common_name: "Vulval swelling",
+},
+{
+id: "s_2850",
+type: "symptom",
+name: "Pain in lower limb, lasting less than 24 hours",
+common_name: "Pain in lower limb lasting less than 24 hours",
+},
+{
+id: "s_2851",
+type: "symptom",
+name: "Pain in lower limb, lasting between 1 and 7 days",
+common_name: "Pain in lower limb lasting between 1 day and 7 days",
+},
+{
+id: "s_2852",
+type: "symptom",
+name: "Pain in lower limb, lasting between 1 week and 3 months",
+common_name: "Pain in lower limb lasting between 1 week and 3 months",
+},
+{
+id: "s_2853",
+type: "symptom",
+name: "Pain in lower limb, lasting more than 3 months",
+common_name: "Pain in lower limb lasting more than 3 months",
+},
+{
+id: "s_2854",
+type: "symptom",
+name: "Fever, lasting more than 14 days",
+common_name: "Fever lasting more than 14 days",
+},
+{
+id: "s_2855",
+type: "symptom",
+name: "Fever, lasting 8 to 14 days",
+common_name: "Fever lasting 8 to 14 days",
+},
+{
+id: "s_2856",
+type: "symptom",
+name: "Blisters of skin",
+common_name: "Blisters on the skin",
+},
+{
+id: "s_2857",
+type: "symptom",
+name: "Blisters of skin, bulla",
+common_name: "Blisters on the skin larger than 0.5 cm",
+},
+{
+id: "s_2858",
+type: "symptom",
+name: "Blisters of skin, vesicle",
+common_name: "Blisters on the skin smaller than 0.5 cm",
+},
+{
+id: "s_2860",
+type: "symptom",
+name: "Fever, fully responsive to treatment",
+common_name: "Fever fully responsive to treatment",
+},
+{
+id: "s_2861",
+type: "symptom",
+name: "Menstrual period late",
+common_name: "Late period",
+},
+{
+id: "s_2862",
+type: "symptom",
+name: "Menstrual period late, 1 to 3 weeks",
+common_name: "Period 1 to 3 weeks late",
+},
+{
+id: "s_2863",
+type: "symptom",
+name: "Menstrual period late, between 3 weeks and 3 months",
+common_name: "Period between 3 weeks and 3 months late",
+},
+{
+id: "s_2864",
+type: "symptom",
+name: "Menstrual period late, 3 to 12 months",
+common_name: "Period 3 to 12 months late",
+},
+{
+id: "s_2865",
+type: "symptom",
+name: "Menstrual period late, more than 12 months",
+common_name: "Period more than 12 months late",
+},
+{
+id: "s_2866",
+type: "symptom",
+name: "Fever, partially responsive to treatment",
+common_name: "Fever partially responsive to treatment",
+},
+{
+id: "s_2867",
+type: "symptom",
+name: "Edema, either lower limb",
+common_name: "Swelling of either lower limb",
+},
+{
+id: "s_2871",
+type: "symptom",
+name: "Decreased fetal movement in the third trimester",
+common_name: "Low fetal movement in the third trimester",
+},
+{
+id: "s_2872",
+type: "symptom",
+name: "Menstrual period late, less than 1 week",
+common_name: "Period less than 1 week late",
+},
+{
+id: "s_2876",
+type: "symptom",
+name: "Fever, use of antipyretic drug",
+common_name: "Use of antipyretic to reduce fever",
+},
+{
+id: "s_2877",
+type: "symptom",
+name: "Tremors, triggered by touch, cold or loud sounds",
+common_name: "Trembling triggered by touch, cold or loud sounds",
+},
+{
+id: "s_2878",
+type: "symptom",
+name: "Sudden onset speech and language impairment",
+common_name: "Sudden onset speech and language impairment",
+},
+{
+id: "s_2879",
+type: "symptom",
+name: "Fever, continuous",
+common_name: "Continuous fever",
+},
+{
+id: "s_2880",
+type: "symptom",
+name: "Status epilepticus",
+common_name: "Prolonged seizure for more than 5 minutes",
+},
+{
+id: "s_2881",
+type: "symptom",
+name: "Foreign body insertion, head area",
+common_name: "Insertion of foreign body in head area",
+},
+{
+id: "s_2883",
+type: "symptom",
+name: "Foreign body insertion, stuck in vagina",
+common_name: "Object stuck in vagina",
+},
+{
+id: "s_2884",
+type: "symptom",
+name: "Foreign body insertion, stuck in anus",
+common_name: "Object stuck in anus",
+},
+{
+id: "s_2888",
+type: "symptom",
+name: "Fever, periodic, days or weeks",
+common_name: "Periodic fever every few days or weeks",
+},
+{
+id: "s_2889",
+type: "symptom",
+name: "Skin pallor, transient",
+common_name: "Transient skin pallor",
+},
+{
+id: "s_2890",
+type: "symptom",
+name: "Fever, relapsing after 24 hours",
+common_name: "Fever relapsing after 24 hours",
+},
+{
+id: "s_2891",
+type: "symptom",
+name: "Fever, intermittent",
+common_name: "Fever dropping every day",
+},
+{
+id: "s_2892",
+type: "symptom",
+name: "Fetal membranes rupture, between 22nd and 37th weeks of gestation",
+common_name: "Water breaking between 22nd and 37th weeks of pregnancy",
+},
+{
+id: "s_2893",
+type: "symptom",
+name: "Regular uterine contractions, before the 37th week of gestation",
+common_name: "Regular uterine contractions before the 37th week of pregnancy",
+},
+{
+id: "s_2894",
+type: "symptom",
+name: "Postpartum vaginal bleeding, increasing intensity",
+common_name: "Increased postpartum vaginal bleeding",
+},
+{
+id: "s_2895",
+type: "symptom",
+name: "Rigidity and intolerance to change",
+common_name: "Rigidity and intolerance to change",
+},
+{
+id: "s_2898",
+type: "symptom",
+name: "Tetanus-prone wound",
+common_name: "Tetanus-prone wound",
+},
+{
+id: "s_2904",
+type: "symptom",
+name: "Active suicide attempt",
+common_name: "Active suicide attempt",
+},
+{
+id: "s_2905",
+type: "symptom",
+name: "Fetal membranes rupture, before 22 weeks of gestation",
+common_name: "Water breaking before 22nd week of pregnancy",
+},
+{
+id: "s_2906",
+type: "symptom",
+name: "Fetal membranes rupture, after 37 weeks of gestation",
+common_name: "Water breaking after 37th week of pregnancy",
+},
+{
+id: "s_2907",
+type: "symptom",
+name: "Fever, absent now but present in the past 72 hours",
+common_name: "Fever in the past 72 hours that is already finished",
+},
+{
+id: "s_2908",
+type: "symptom",
+name: "Abnormal uterine bleeding, nonmenstrual",
+common_name: "Vaginal bleeding other than period",
+},
+{
+id: "s_2909",
+type: "symptom",
+name: "Abnormal uterine spotting, nonmenstrual",
+common_name: "Vaginal spotting different than period",
+},
+{
+id: "s_2913",
+type: "symptom",
+name: "No abnormal uterine bleeding or spotting, nonmenstrual",
+common_name: "No abnormal uterine bleeding or spotting, nonmenstrual",
+},
+{
+id: "s_2914",
+type: "symptom",
+name: "Physical injury, head",
+common_name: "Head injury",
+},
+{
+id: "s_2915",
+type: "symptom",
+name: "Physical injury, trunk",
+common_name: "Trunk injury",
+},
+{
+id: "s_2916",
+type: "symptom",
+name: "Physical injury, upper limb",
+common_name: "Upper limb injury",
+},
+{
+id: "s_2917",
+type: "symptom",
+name: "Physical injury, lower limb",
+common_name: "Lower limb injury",
+},
+{
+id: "s_2918",
+type: "symptom",
+name: "Radicular pain",
+common_name: "Radiating pain from the spine",
+},
+{
+id: "s_2919",
+type: "symptom",
+name: "Injury location question",
+common_name: "Injury location question",
+},
+{
+id: "s_2920",
+type: "symptom",
+name: "Symptoms related to recent injury",
+common_name: "Symptoms related to recent injury",
+},
+{
+id: "s_2924",
+type: "symptom",
+name: "Limping",
+common_name: "Limping",
+},
+{
+id: "s_2927",
+type: "symptom",
+name: "Oral lesions, located in the anterior part",
+common_name: "Oral lesions located in anterior part",
+},
+{
+id: "s_2928",
+type: "symptom",
+name: "Fall from a height",
+common_name: "Fall from a height",
+},
+{
+id: "s_2929",
+type: "symptom",
+name: "Injury in a motorcycle crash",
+common_name: "Injury in a motorcycle crash",
+},
+{
+id: "s_2930",
+type: "symptom",
+name: "Pedestrian or cyclist hit by a car",
+common_name: "Pedestrian or cyclist hit by a car",
+},
+{
+id: "s_2931",
+type: "symptom",
+name: "Injury in a serious car accident",
+common_name: "Injury in a serious car accident",
+},
+{
+id: "s_2932",
+type: "symptom",
+name: "No major force injury",
+common_name: "No major force injury",
+},
+{
+id: "s_2935",
+type: "symptom",
+name: "Visual impairment, after trauma",
+common_name: "Vision problems after an injury",
+},
+{
+id: "s_2936",
+type: "symptom",
+name: "New neurological deficit, after trauma",
+common_name: "New neurological changes after an injury",
+},
+{
+id: "s_2937",
+type: "symptom",
+name: "Sudden drop in blood pressure",
+common_name: "Sudden drop in blood pressure",
+},
+{
+id: "s_2938",
+type: "symptom",
+name: "Dermatological changes, perianal region",
+common_name: "Skin changes near anus",
+},
+{
+id: "s_2939",
+type: "symptom",
+name: "Neck pain, acute",
+common_name: "Acute neck pain",
+},
+{
+id: "s_2940",
+type: "symptom",
+name: "Neck pain, subacute",
+common_name: "Subacute neck pain",
+},
+{
+id: "s_2941",
+type: "symptom",
+name: "Neck pain, chronic",
+common_name: "Chronic neck pain",
+},
+{
+id: "s_2942",
+type: "symptom",
+name: "Resolved choking",
+common_name: "Stopped choking",
+},
+{
+id: "s_2945",
+type: "symptom",
+name: "History of a tick bite, in the past 3 weeks, Europe",
+common_name: "History of a tick bite, in the past 3 weeks, Europe",
+},
+{
+id: "s_2946",
+type: "symptom",
+name: "No history of a tick bite",
+common_name: "No history of a tick bite",
+},
+{
+id: "s_2947",
+type: "symptom",
+name: "History of a tick bite, in the past 3 weeks, North America",
+common_name: "History of a tick bite, in the past 3 weeks, North America",
+},
+{
+id: "s_2948",
+type: "symptom",
+name: "History of a tick bite, in the past 3 weeks, Northern Asia",
+common_name: "History of a tick bite, in the past 3 weeks, Northern Asia",
+},
+{
+id: "s_2949",
+type: "symptom",
+name: "History of a tick bite, in the past 3 weeks, Southeast Asia",
+common_name: "History of a tick bite, in the past 3 weeks, Southeast Asia",
+},
+{
+id: "s_2950",
+type: "symptom",
+name: "No abnormal uterine bleeding or spotting, pregnancy",
+common_name: "No abnormal uterine bleeding or spotting, pregnancy",
+},
+{
+id: "s_2953",
+type: "symptom",
+name: "Neck pain, sudden onset",
+common_name: "Sudden neck pain",
+},
+{
+id: "s_2954",
+type: "symptom",
+name: "Limited neck rotation",
+common_name: "Limited neck rotation",
+},
+{
+id: "s_2955",
+type: "symptom",
+name: "Burned skin",
+common_name: "Burned skin",
+},
+{
+id: "s_2956",
+type: "symptom",
+name: "Burned skin, thermal",
+common_name: "Thermal skin burn",
+},
+{
+id: "s_2957",
+type: "symptom",
+name: "Burned skin, chemical",
+common_name: "Chemical skin burn",
+},
+{
+id: "s_2958",
+type: "symptom",
+name: "Burned skin, electrical",
+common_name: "Electrical skin burn",
+},
+{
+id: "s_2959",
+type: "symptom",
+name: "Burned skin, another cause",
+common_name: "Another cause of burn",
+},
+{
+id: "s_2960",
+type: "symptom",
+name: "Severe pain during limb movements, after trauma",
+common_name: "Inability to move limb after trauma due to pain",
+},
+{
+id: "s_2961",
+type: "symptom",
+name: "History of falls from a standing height",
+common_name: "Sudden spontaneous fall",
+},
+{
+id: "s_2962",
+type: "symptom",
+name: "Burned skin, superficial",
+common_name: "Superficial skin burn",
+},
+{
+id: "s_2963",
+type: "symptom",
+name: "Burned skin, partial-thickness",
+common_name: "Partial-thickness skin burn",
+},
+{
+id: "s_2964",
+type: "symptom",
+name: "Burned skin, full-thickness",
+common_name: "Full-thickness skin burn",
+},
+{
+id: "s_2965",
+type: "symptom",
+name: "Burned skin, deep tissues",
+common_name: "Deep tissues skin burn",
+},
+{
+id: "s_2966",
+type: "symptom",
+name: "Burned skin, covering between 1 to 10% of body surface",
+common_name: "Skin burn covering between 1 to 10% of body surface",
+},
+{
+id: "s_2967",
+type: "symptom",
+name: "Limb paresis, after trauma",
+common_name: "Limb paresis after trauma",
+},
+{
+id: "s_2968",
+type: "symptom",
+name: "Reduced range of joint motion, after trauma",
+common_name: "Reduced range of joint motion, after trauma",
+},
+{
+id: "s_2969",
+type: "symptom",
+name: "Bearable pain during limb movements, after trauma",
+common_name: "Bearable pain during limb movements after trauma",
+},
+{
+id: "s_2970",
+type: "symptom",
+name: "No pain or restrictions during limb movements, after trauma",
+common_name: "No pain or restrictions during limb movements, after trauma",
+},
+{
+id: "s_2971",
+type: "symptom",
+name: "Burned skin, head or neck area",
+common_name: "Skin burn of head or neck area",
+},
+{
+id: "s_2972",
+type: "symptom",
+name: "Burned skin, hand",
+common_name: "Skin burn of hand",
+},
+{
+id: "s_2973",
+type: "symptom",
+name: "Burned skin, foot",
+common_name: "Skin burn of foot",
+},
+{
+id: "s_2974",
+type: "symptom",
+name: "Burned skin, genitalia or perineum",
+common_name: "Burned skin of genital region",
+},
+{
+id: "s_2975",
+type: "symptom",
+name: "Burned skin, major joint",
+common_name: "Skin burn of major joint",
+},
+{
+id: "s_2976",
+type: "symptom",
+name: "Burned skin, another location",
+common_name: "Other location of skin burn",
+},
+{
+id: "s_2977",
+type: "symptom",
+name: "Trouble with urination, after trauma",
+common_name: "Trouble with urination after injury",
+},
+{
+id: "s_2980",
+type: "symptom",
+name: "Burned skin, covering between 10 to 20% of body surface",
+common_name: "Skin burn covering between 10 to 20% of body surface",
+},
+{
+id: "s_2981",
+type: "symptom",
+name: "Burned skin, covering more than 20% of body surface",
+common_name: "Skin burn covering more than 20% of body surface",
+},
+{
+id: "s_2982",
+type: "symptom",
+name: "Trouble with defecation, after trauma",
+common_name: "Trouble with defecation after injury",
+},
+{
+id: "s_2984",
+type: "symptom",
+name: "Inability to bear weight",
+common_name: "Inability to stand on either foot",
+},
+{
+id: "s_2985",
+type: "symptom",
+name: "No problem with walking",
+common_name: "Normal walking",
+},
+{
+id: "s_2986",
+type: "symptom",
+name: "Recent miscarriage",
+common_name: "Recent miscarriage",
+},
+{
+id: "s_2987",
+type: "symptom",
+name: "Eye pain, unilateral",
+common_name: "Pain in one eye",
+},
+{
+id: "s_2988",
+type: "symptom",
+name: "Eye pain, bilateral",
+common_name: "Pain in both eyes",
+},
+{
+id: "s_2991",
+type: "symptom",
+name: "Tenderness of spinous processes",
+common_name: "Pain when pressing the spinous processes",
+},
+{
+id: "s_2992",
+type: "symptom",
+name: "Inability to bear weight, non-traumatic",
+common_name: "Inability to stand on either foot unrelated to injury",
+},
+{
+id: "s_2999",
+type: "symptom",
+name: "Skin mass, inguinal region",
+common_name: "Skin mass in the groin",
+},
+{
+id: "s_3000",
+type: "symptom",
+name: "Skin mass, reducible",
+common_name: "Reducible skin mass",
+},
+{
+id: "s_3001",
+type: "symptom",
+name: "Skin mass, irreducible",
+common_name: "Irreducible skin mass",
+},
+{
+id: "s_3002",
+type: "symptom",
+name: "Skin mass, umbilical region",
+common_name: "Skin mass in the umbilical region",
+},
+{
+id: "s_3003",
+type: "symptom",
+name: "Skin mass, soft",
+common_name: "Soft skin mass",
+},
+{
+id: "s_3004",
+type: "symptom",
+name: "Eye burn",
+common_name: "Eye burn",
+},
+{
+id: "s_3005",
+type: "symptom",
+name: "Skin mass, dark or bluish",
+common_name: "Dark or bluish skin mass",
+},
+{
+id: "s_3006",
+type: "symptom",
+name: "Skin mass, umbilicated",
+common_name: "Skin bumps with a dimple in the center",
+},
+{
+id: "s_3007",
+type: "symptom",
+name: "Skin mass, firm",
+common_name: "Firm skin mass",
+},
+{
+id: "s_3008",
+type: "symptom",
+name: "Skin mass, unknown consistency",
+common_name: "Skin mass of unknown consistency",
+},
+{
+id: "s_3009",
+type: "symptom",
+name: "Skin mass, painful",
+common_name: "Painful skin mass",
+},
+{
+id: "s_3012",
+type: "symptom",
+name: "Burned skin, covering less than 1% of body surface",
+common_name: "Skin burn covering less than 1% of body surface",
+},
+{
+id: "s_3013",
+type: "symptom",
+name: "Skin wound, clean",
+common_name: "Clean wound",
+},
+{
+id: "s_3014",
+type: "symptom",
+name: "Skin wound, contaminated",
+common_name: "Contaminated wound",
+},
+{
+id: "s_3015",
+type: "symptom",
+name: "Skin wound, acute",
+common_name: "Acute wound",
+},
+{
+id: "s_3016",
+type: "symptom",
+name: "Skin wound, chronic",
+common_name: "Chronic wound",
+},
+{
+id: "s_3017",
+type: "symptom",
+name: "Skin wound, laceration",
+common_name: "Skin tear",
+},
+{
+id: "s_3018",
+type: "symptom",
+name: "Skin wound, puncture",
+common_name: "Puncture wound",
+},
+{
+id: "s_3019",
+type: "symptom",
+name: "Skin wound, incision",
+common_name: "Cut",
+},
+{
+id: "s_3020",
+type: "symptom",
+name: "Skin wound, abrasion",
+common_name: "Scratch wound",
+},
+{
+id: "s_3021",
+type: "symptom",
+name: "Skin wound, crush",
+common_name: "Crush wound",
+},
+{
+id: "s_3022",
+type: "symptom",
+name: "Skin wound, gunshot",
+common_name: "Gunshot wound",
+},
+{
+id: "s_3025",
+type: "symptom",
+name: "Skin wound, superficial",
+common_name: "Superficial skin wound",
+},
+{
+id: "s_3026",
+type: "symptom",
+name: "Skin wound, partial-thickness",
+common_name: "Partial-thickness skin wound",
+},
+{
+id: "s_3027",
+type: "symptom",
+name: "Skin wound, full-thickness",
+common_name: "Full-thickness skin wound",
+},
+{
+id: "s_3028",
+type: "symptom",
+name: "Skin wound, deep tissues",
+common_name: "Deep tissues skin wound",
+},
+{
+id: "s_3030",
+type: "symptom",
+name: "Dermatological changes, single",
+common_name: "Single skin change",
+},
+{
+id: "s_3031",
+type: "symptom",
+name: "Dermatological changes, multiple",
+common_name: "Multiple skin changes",
+},
+{
+id: "s_3034",
+type: "symptom",
+name: "Headache, sudden worsening",
+common_name: "Suddenly worsening headache",
+},
+{
+id: "s_3037",
+type: "symptom",
+name: "Delusional thinking",
+common_name: "Unshakable belief in something thats untrue",
+},
+{
+id: "s_3038",
+type: "symptom",
+name: "Hallucinatory experiences",
+common_name: "Experiences of sensing things that do not exist",
+},
+{
+id: "s_3039",
+type: "symptom",
+name: "Unknown tetanus vaccination status",
+common_name: "Unknown tetanus vaccination status",
+},
+{
+id: "s_3042",
+type: "symptom",
+name: "Alcohol consumption",
+common_name: "Alcohol consumption",
+},
+{
+id: "s_3045",
+type: "symptom",
+name: "Inhalation burn",
+common_name: "Airway burn",
+},
+{
+id: "s_3046",
+type: "symptom",
+name: "Knee injury, twisting",
+common_name: "Twisting knee injury",
+},
+{
+id: "s_3047",
+type: "symptom",
+name: "Nipple discharge, bloody",
+common_name: "Bloody discharge from nipple",
+},
+{
+id: "s_3048",
+type: "symptom",
+name: "Cracked nipple",
+common_name: "Damaged nipple",
+},
+{
+id: "s_3049",
+type: "symptom",
+name: "Nipple discharge, purulent",
+common_name: "Purulent discharge from nipple",
+},
+{
+id: "s_3051",
+type: "symptom",
+name: "Nipple discharge, watery or serous",
+common_name: "Watery or serous discharge from nipple",
+},
+{
+id: "s_3052",
+type: "symptom",
+name: "Blood glucose level, between 71 and 180 mg/dl or between 4 and 9.9 mmol/l",
+common_name: "Blood sugar between 71 and 180 mg/dl or between 4 and 9.9 mmol/l",
+},
+{
+id: "s_3053",
+type: "symptom",
+name: "Blood glucose level, between 181 and 250 mg/dl or between 10 and 13.9 mmol/l",
+common_name: "High blood sugar, between 181 and 250 mg/dl or between 10 and 13.9 mmol/l",
+},
+{
+id: "s_3054",
+type: "symptom",
+name: "Blood glucose level, between 251 and 350 mg/dl or between 14 and 19.4 mmol/l",
+common_name: "Very high blood sugar, between 251 and 350 mg/dl or between 14 and 19.4 mmol/l",
+},
+{
+id: "s_3055",
+type: "symptom",
+name: "Blood glucose level, more than 350 mg/dl or 19.4 mmol/l",
+common_name: "Extremely high blood sugar, over 350 mg/dl or 19.4 mmol/l",
+},
+{
+id: "s_3056",
+type: "symptom",
+name: "Blood glucose level in the last 6 hours, more than 250 mg/dl or 13.9 mmol/l",
+common_name: "Blood sugar level remaining over 250 mg/dl or 13.9 mmol/l for the past 6 hours",
+},
+{
+id: "s_3057",
+type: "symptom",
+name: "Foreign body insertion, anus",
+common_name: "Foreign body insertion, anus",
+},
+{
+id: "s_3058",
+type: "symptom",
+name: "Foreign body insertion, vagina",
+common_name: "Foreign body insertion, vagina",
+},
+{
+id: "s_3059",
+type: "symptom",
+name: "Direct trauma to the anterior knee",
+common_name: "Direct injury to the front of the knee",
+},
+{
+id: "s_3062",
+type: "symptom",
+name: "Abnormal menstruation, irregular",
+common_name: "Irregular periods",
+},
+{
+id: "s_3063",
+type: "symptom",
+name: "Abnormal menstruation, prolonged menstruation",
+common_name: "Menstrual bleeding lasting more than 8 days",
+},
+{
+id: "s_3064",
+type: "symptom",
+name: "Abnormal menstruation, menorrhagia",
+common_name: "Heavy menstrual bleeding",
+},
+{
+id: "s_3065",
+type: "symptom",
+name: "Abnormal menstruation, hypomenorrhea",
+common_name: "Light menstrual bleeding",
+},
+{
+id: "s_3066",
+type: "symptom",
+name: "Abnormal menstruation, dysmenorrhea",
+common_name: "Painful menstrual bleeding",
+},
+{
+id: "s_3067",
+type: "symptom",
+name: "Abnormal menstruation, polymenorrhea",
+common_name: "Frequent menstrual bleeding",
+},
+{
+id: "s_3068",
+type: "symptom",
+name: "Abnormal menstruation, oligomenorrhea",
+common_name: "Rare menstrual bleeding",
+},
+{
+id: "s_3069",
+type: "symptom",
+name: "Abnormal menstruation",
+common_name: "Abnormal menstruation",
+},
+{
+id: "s_3070",
+type: "symptom",
+name: "Dermatological changes, unilateral",
+common_name: "Skin changes localized on only one side",
+},
+{
+id: "s_3071",
+type: "symptom",
+name: "Inconsolable crying",
+common_name: "Unsoothed crying",
+},
+{
+id: "s_3072",
+type: "symptom",
+name: "Recurrent inconsolable crying of unknown cause",
+common_name: "Recurrent inconsolable crying of unknown cause",
+},
+{
+id: "s_3078",
+type: "symptom",
+name: "Muscle weakness, non-paresis",
+common_name: "Weak muscles with full ability to move",
+},
+{
+id: "s_3079",
+type: "symptom",
+name: "Muscle weakness, paresis",
+common_name: "Weak muscles with less ability to move",
+},
+{
+id: "s_3080",
+type: "symptom",
+name: "Muscle weakness, paralysis",
+common_name: "Weak muscles with no ability to move",
+},
+{
+id: "s_3083",
+type: "symptom",
+name: "Flank pain, abdomen",
+common_name: "Pain on the side of the abdomen",
+},
+{
+id: "s_3084",
+type: "symptom",
+name: "Flank pain, back",
+common_name: "Pain on the side of the back",
+},
+{
+id: "s_3085",
+type: "symptom",
+name: "Flank pain, side",
+common_name: "Flank pain, side",
+},
+{
+id: "s_3087",
+type: "symptom",
+name: "Protrusion of the auricle",
+common_name: "Protruding ear",
+},
+{
+id: "s_3089",
+type: "symptom",
+name: "Dyspnea, severe at rest",
+common_name: "Severe shortness of breath at rest",
+},
+{
+id: "s_3090",
+type: "symptom",
+name: "Dyspnea, severe",
+common_name: "Severe shortness of breath",
+},
+{
+id: "s_3091",
+type: "symptom",
+name: "Current injury",
+common_name: "Current injury",
+},
+{
+id: "s_3092",
+type: "symptom",
+name: "Additional injury",
+common_name: "Additional injury",
+},
+{
+id: "s_3093",
+type: "symptom",
+name: "No additional injury",
+common_name: "No additional injury",
+},
+{
+id: "s_3094",
+type: "symptom",
+name: "Carbon monoxide exposure for burn cases",
+common_name: "Carbon monoxide exposure for burn cases",
+},
+{
+id: "s_3096",
+type: "symptom",
+name: "Muscle weakness, localized",
+common_name: "Muscle weakness in a specific part of the body",
+},
+{
+id: "s_3097",
+type: "symptom",
+name: "Muscle weakness, limbs",
+common_name: "Limb weakness",
+},
+{
+id: "s_3098",
+type: "symptom",
+name: "Muscle weakness, face",
+common_name: "Facial muscle weakness",
+},
+{
+id: "s_3099",
+type: "symptom",
+name: "Eye closure difficulties, one eye",
+common_name: "Difficulty completely closing one eye",
+},
+{
+id: "s_3100",
+type: "symptom",
+name: "Muscle weakness, drooping mouth corner on one side",
+common_name: "One mouth corner drooping",
+},
+{
+id: "s_3101",
+type: "symptom",
+name: "Muscle weakness, one side of the face",
+common_name: "Facial muscle weakness on one side",
+},
+{
+id: "s_3104",
+type: "symptom",
+name: "Muscle weakness, both upper limbs",
+common_name: "Weakness in both upper limbs",
+},
+{
+id: "s_3105",
+type: "symptom",
+name: "Muscle weakness, one upper limb",
+common_name: "Weakness in one upper limb",
+},
+{
+id: "s_3106",
+type: "symptom",
+name: "Muscle weakness, lasting less than 24 hours",
+common_name: "Muscle weakness lasting less than 24 hours",
+},
+{
+id: "s_3107",
+type: "symptom",
+name: "Muscle weakness, one lower limb",
+common_name: "Weakness in one lower limb",
+},
+{
+id: "s_3108",
+type: "symptom",
+name: "Muscle weakness, both lower limbs",
+common_name: "Weakness in both lower limbs",
+},
+{
+id: "s_3109",
+type: "symptom",
+name: "Muscle weakness, tetraparesis",
+common_name: "Weakness of all limbs",
+},
+{
+id: "s_3110",
+type: "symptom",
+name: "Muscle weakness, hemiparesis",
+common_name: "Weakness on one side of the body",
+},
+{
+id: "s_3111",
+type: "symptom",
+name: "Muscle weakness, limbs, other",
+common_name: "Muscle weakness, limbs, other",
+},
+{
+id: "s_3112",
+type: "symptom",
+name: "Muscle weakness, ascending",
+common_name: "Ascending muscle weakness",
+},
+{
+id: "s_3113",
+type: "symptom",
+name: "Muscle weakness, lasting between 24 hours and 1 week",
+common_name: "Muscle weakness lasting between 24 hours and 1 week",
+},
+{
+id: "s_3115",
+type: "symptom",
+name: "Fever, unknown reaction to antipyretics",
+common_name: "Fever with unknown reaction to antipyretics",
+},
+{
+id: "s_3116",
+type: "symptom",
+name: "Injury, no information",
+common_name: "Injury, no information",
+},
+{
+id: "s_3117",
+type: "symptom",
+name: "Muscle weakness, lasting between 1 and 4 weeks",
+common_name: "Muscle weakness lasting between 1 and 4 weeks",
+},
+{
+id: "s_3118",
+type: "symptom",
+name: "Muscle weakness, lasting more than 4 weeks",
+common_name: "Muscle weakness lasting more than 4 weeks",
+},
+{
+id: "s_3120",
+type: "symptom",
+name: "Nipple pain or tenderness",
+common_name: "Nipple pain or tenderness",
+},
+{
+id: "s_3121",
+type: "symptom",
+name: "Suicide attempt in the past",
+common_name: "Suicide attempt in the past",
+},
+{
+id: "s_3122",
+type: "symptom",
+name: "Eye closure difficulties, both eyes",
+common_name: "Difficulty completely closing both eyes",
+},
+{
+id: "s_3123",
+type: "symptom",
+name: "Muscle weakness, drooping mouth corner on both sides",
+common_name: "Both mouth corners dropping",
+},
+{
+id: "s_3124",
+type: "symptom",
+name: "Muscle weakness, face, other",
+common_name: "Muscle weakness, face, other",
+},
+{
+id: "s_3125",
+type: "symptom",
+name: "Alcohol consumption, less than 24 hours ago, large amount",
+common_name: "Alcohol consumption, less than 24 hours ago, large amount",
+},
+{
+id: "s_3126",
+type: "symptom",
+name: "Alcohol consumption, less than 24 hours ago, small amount",
+common_name: "Alcohol consumption, less than 24 hours ago, small amount",
+},
+{
+id: "s_3127",
+type: "symptom",
+name: "Alcohol consumption, less than 24 hours ago, amount unknown",
+common_name: "Alcohol consumption, less than 24 hours ago, amount unknown",
+},
+{
+id: "s_3128",
+type: "symptom",
+name: "Alcohol consumption, less than 24 hours ago, large amount in man",
+common_name: "Alcohol consumption, less than 24 hours ago, large amount in man",
+},
+{
+id: "s_3129",
+type: "symptom",
+name: "Alcohol consumption, less than 24 hours ago, large amount in woman",
+common_name: "Alcohol consumption, less than 24 hours ago, large amount in woman",
+},
+{
+id: "s_3130",
+type: "symptom",
+name: "Alcohol consumption, less than 24 hours ago, small amount in man",
+common_name: "Alcohol consumption, less than 24 hours ago, small amount in man",
+},
+{
+id: "s_3131",
+type: "symptom",
+name: "Alcohol consumption, less than 24 hours ago, small amount in woman",
+common_name: "Alcohol consumption, less than 24 hours ago, small amount in woman",
+},
+{
+id: "s_3133",
+type: "symptom",
+name: "Alcohol consumption, more than 24 hours ago, risky drinking in men",
+common_name: "Alcohol consumption, more than 24 hours ago, risky drinking in men",
+},
+{
+id: "s_3134",
+type: "symptom",
+name: "Alcohol consumption, more than 24 hours ago, risky drinking in women",
+common_name: "Alcohol consumption, more than 24 hours ago, risky drinking in women",
+},
+{
+id: "s_3135",
+type: "symptom",
+name: "Alcohol consumption, more than 24 hours ago, risky drinking",
+common_name: "Alcohol consumption, more than 24 hours ago, risky drinking",
+},
+{
+id: "s_3136",
+type: "symptom",
+name: "Alcohol consumption, more than 24 hours ago, heavy drinking",
+common_name: "Alcohol consumption, more than 24 hours ago, heavy drinking",
+},
+{
+id: "s_3137",
+type: "symptom",
+name: "Alcohol consumption, more than 24 hours ago, heavy drinking in men",
+common_name: "Alcohol consumption, more than 24 hours ago, heavy drinking in men",
+},
+{
+id: "s_3138",
+type: "symptom",
+name: "Alcohol consumption, more than 24 hours ago, heavy drinking in women",
+common_name: "Alcohol consumption, more than 24 hours ago, heavy drinking in women",
+},
+{
+id: "s_3139",
+type: "symptom",
+name: "Alcohol consumption, more than 24 hours ago, binge drinking",
+common_name: "Alcohol consumption, more than 24 hours ago, binge drinking",
+},
+{
+id: "s_3140",
+type: "symptom",
+name: "Alcohol consumption, more than 24 hours ago, binge drinking in men",
+common_name: "Alcohol consumption, more than 24 hours ago, binge drinking in men",
+},
+{
+id: "s_3141",
+type: "symptom",
+name: "Alcohol consumption, more than 24 hours ago, binge drinking in women",
+common_name: "Alcohol consumption, more than 24 hours ago, binge drinking in women",
+},
+{
+id: "s_3144",
+type: "symptom",
+name: "Breast pain or tenderness, either breast",
+common_name: "Breast pain or tenderness in either breast",
+},
+{
+id: "s_3145",
+type: "symptom",
+name: "No eye injury",
+common_name: "Lack of eye injury",
+},
+{
+id: "s_3146",
+type: "symptom",
+name: "Jaundice, less than 72 hours",
+common_name: "Jaundice for less than 3 days",
+},
+{
+id: "s_3147",
+type: "symptom",
+name: "Jaundice, lasting between 3 days and 3 weeks",
+common_name: "Jaundice, lasting between 3 days and 3 weeks",
+},
+{
+id: "s_3148",
+type: "symptom",
+name: "Jaundice, lasting between 3 weeks and 3 months",
+common_name: "Jaundice, lasting between 3 weeks and 3 months",
+},
+{
+id: "s_3149",
+type: "symptom",
+name: "Jaundice, lasting more than 3 months",
+common_name: "Jaundice for more than 3 months",
+},
+{
+id: "s_3150",
+type: "symptom",
+name: "Jaundice, onset within 24 hours after birth",
+common_name: "Jaundice less than 24 hours after birth",
+},
+{
+id: "s_3151",
+type: "symptom",
+name: "Erythema, well demarcated borders",
+common_name: "Well demarcated erythema",
+},
+{
+id: "s_3154",
+type: "symptom",
+name: "Skin necrosis",
+common_name: "Skin necrosis",
+},
+{
+id: "s_3156",
+type: "symptom",
+name: "Swallowed foreign body, battery",
+common_name: "Swallowed battery",
+},
+{
+id: "s_3157",
+type: "symptom",
+name: "Swallowed foreign body, chemical substances",
+common_name: "Swallowed chemical substance",
+},
+{
+id: "s_3158",
+type: "symptom",
+name: "Swallowed foreign body, dangerous",
+common_name: "Swallowed dangerous foreign body",
+},
+{
+id: "s_3159",
+type: "symptom",
+name: "Swallowed foreign body, little and blunt",
+common_name: "Swallowed little and blunt foreign body",
+},
+{
+id: "s_3162",
+type: "symptom",
+name: "Skin wound, burn",
+common_name: "Burn wound",
+},
+{
+id: "s_3166",
+type: "symptom",
+name: "Alcohol consumption, signs of withdrawal at present",
+common_name: "Alcohol consumption, signs of withdrawal at present",
+},
+{
+id: "s_3167",
+type: "symptom",
+name: "Skin wound, inflamed",
+common_name: "Inflamed wound",
+},
+{
+id: "s_3168",
+type: "symptom",
+name: "Skin wound, not inflamed",
+common_name: "Skin wound, not inflamed",
+},
+{
+id: "s_3171",
+type: "symptom",
+name: "Vascular compromise, limb, related to trauma",
+common_name: "Limited blood flow past the injured limb",
+},
+{
+id: "s_3173",
+type: "symptom",
+name: "Skin wound, animal scratch",
+common_name: "Skin scratch caused by animal",
+},
+{
+id: "s_3174",
+type: "symptom",
+name: "Blood pressure, elevated in children",
+common_name: "High blood pressure in children",
+},
+{
+id: "s_3176",
+type: "symptom",
+name: "Hypotension in children",
+common_name: "Low blood pressure in children",
+},
+{
+id: "s_3178",
+type: "symptom",
+name: "Alcohol misuse",
+common_name: "Alcohol misuse",
+},
+{
+id: "s_3179",
+type: "symptom",
+name: "Swallowed foreign body, unknown",
+common_name: "Swallowed unknown foreign body",
+},
+{
+id: "s_3188",
+type: "symptom",
+name: "Dizziness, sudden and severe",
+common_name: "Sudden and severe dizziness",
+},
+{
+id: "s_3189",
+type: "symptom",
+name: "Impaired vision, loss of part of visual field",
+common_name: "Loss of part of visual field",
+},
+{
+id: "s_3190",
+type: "symptom",
+name: "Impaired vision, sudden onset",
+common_name: "Sudden vision impairment",
+},
+{
+id: "s_3193",
+type: "symptom",
+name: "Anisocoria, lasting less than 3 days",
+common_name: "Anisocoria with sudden onset",
+},
+{
+id: "s_3194",
+type: "symptom",
+name: "Anisocoria, lasting 3 days or more",
+common_name: "Anisocoria lasting more 3 days",
+},
+{
+id: "s_3195",
+type: "symptom",
+name: "The setting-sun phenomenon",
+common_name: "The setting-sun phenomenon",
+},
+{
+id: "s_3197",
+type: "symptom",
+name: "Loss of consciousness, after trauma",
+common_name: "Loss of consciousness after an injury",
+},
+{
+id: "s_3199",
+type: "symptom",
+name: "Impaired vision, gradual",
+common_name: "Progressive vision loss",
+},
+{
+id: "s_3200",
+type: "symptom",
+name: "Impaired vision, subjective visual disturbance",
+common_name: "Vision problems due to unusual visual experiences",
+},
+{
+id: "s_3201",
+type: "symptom",
+name: "Impaired vision, complete blindness",
+common_name: "Complete vision lost",
+},
+{
+id: "s_3205",
+type: "symptom",
+name: "Nosebleed, uncontrollable",
+common_name: "Uncontrollable bleeding from nose",
+},
+{
+id: "s_3206",
+type: "symptom",
+name: "Eye closure difficulties",
+common_name: "Trouble with eye closure",
+},
+{
+id: "s_3208",
+type: "symptom",
+name: "Reduced mobility of body parts",
+common_name: "Trouble moving body parts",
+},
+{
+id: "s_3209",
+type: "symptom",
+name: "Electric shock resulting in respiratory or cardiovascular complications",
+common_name: "Respiratory or cardiovascular complications after electric shock",
+},
+{
+id: "s_3210",
+type: "symptom",
+name: "Pain in limb",
+common_name: "Limb pain",
+},
+{
+id: "s_3212",
+type: "symptom",
+name: "No hormonal contraception, HRT, or IUD usage",
+common_name: "No hormonal contraception, HRT, or IUD usage",
+},
+];
+export const SymptomsArData = [
+{
+id: "s_1",
+type: "symptom",
+name: "قرحة فموية",
+common_name: "قرحات في الفم",
+},
+{
+id: "s_3",
+type: "symptom",
+name: "اضطراب الوظيفة الجنسية، القيام بنشاط جنسي رغم عواقبه السلبية",
+common_name: "القيام بنشاط متعلّق بالجنس بالرغم من نتائجه السلبية",
+},
+{
+id: "s_4",
+type: "symptom",
+name: "لامبالاة",
+common_name: "عدم الاهتمام بشؤون الحياة اليومية",
+},
+{
+id: "s_6",
+type: "symptom",
+name: "اشتهاء الأطعمة المالحة",
+common_name: "اشتهاء الأطعمة المالحة",
+},
+{
+id: "s_7",
+type: "symptom",
+name: "عقم أنثوي",
+common_name: "عقم أنثوي",
+},
+{
+id: "s_8",
+type: "symptom",
+name: "إسهال",
+common_name: "إسهال",
+},
+{
+id: "s_9",
+type: "symptom",
+name: "شحوب الجلد",
+common_name: "جلد شاحب",
+},
+{
+id: "s_10",
+type: "symptom",
+name: "أظافر هشة شاحبة",
+common_name: "أظافر هشة شاحبة",
+},
+{
+id: "s_11",
+type: "symptom",
+name: "ألم مفصلي، في الورك",
+common_name: "ألم في الورك",
+},
+{
+id: "s_13",
+type: "symptom",
+name: "ألم بطني",
+common_name: "ألم في البطن",
+},
+{
+id: "s_14",
+type: "symptom",
+name: "ألم بطني، يشتد عندما تكون المعدة فارغة",
+common_name: "ألم في البطن يزداد عندما تكون المعدة فارغة",
+},
+{
+id: "s_15",
+type: "symptom",
+name: "ألم بطني، يشتد أثناء السعال أو الحركة",
+common_name: "ألم في البطن يزداد عند السعال أو الحركة",
+},
+{
+id: "s_16",
+type: "symptom",
+name: "ألم بطني، يشتد بعد تناول الطعام",
+common_name: "ألم في البطن يزداد بعد تناول الطعام",
+},
+{
+id: "s_17",
+type: "symptom",
+name: "ألم بطني، يسبق الطمث",
+common_name: "ألم تشنجي في البطن يسبق حدوث الحيض",
+},
+{
+id: "s_19",
+type: "symptom",
+name: "ألم في اللثة",
+common_name: "ألم في اللثة",
+},
+{
+id: "s_20",
+type: "symptom",
+name: "ألم في البلعوم",
+common_name: "ألم في الحلق",
+},
+{
+id: "s_21",
+type: "symptom",
+name: "صداع",
+common_name: "ألم في الرأس",
+},
+{
+id: "s_22",
+type: "symptom",
+name: "صداع، أحادي الجانب",
+common_name: "ألم في جهة واحدة من الرأس",
+},
+{
+id: "s_23",
+type: "symptom",
+name: "صداع، ضاغط",
+common_name: "ألم ضاغط أو عاصر على الرأس",
+},
+{
+id: "s_24",
+type: "symptom",
+name: "صداع، معمم",
+common_name: "ألم يشمل كامل الرأس",
+},
+{
+id: "s_25",
+type: "symptom",
+name: "صداع، نابض",
+common_name: "ألم رأس نابض",
+},
+{
+id: "s_28",
+type: "symptom",
+name: "ألم العجان",
+common_name: "ألم في الفرج",
+},
+{
+id: "s_30",
+type: "symptom",
+name: "ألم صدري، يشتد بالشهيق العميق أو السعال",
+common_name: "ألم في الصدر يزداد بالشهيق العميق أو بالسعال",
+},
+{
+id: "s_31",
+type: "symptom",
+name: "ألم صدري، يستمر حتى بعد الراحة",
+common_name: "ألم في الصدر يستمر حتى بعد الراحة",
+},
+{
+id: "s_32",
+type: "symptom",
+name: "عسر الجماع",
+common_name: "ألم أثناء الجماع",
+},
+{
+id: "s_33",
+type: "symptom",
+name: "قذف مؤلم",
+common_name: "ألم أثناء قذف المني",
+},
+{
+id: "s_34",
+type: "symptom",
+name: "ألم في العجان، فجائي",
+common_name: "ألم فرج فجائي",
+},
+{
+id: "s_35",
+type: "symptom",
+name: "ألم صدري، أثناء الجهد",
+common_name: "ألم في الصدر يظهر عند القيام بمجهود جسدي",
+},
+{
+id: "s_36",
+type: "symptom",
+name: "ألم صدري، ينتشر إلى العنق",
+common_name: "ألم في الصدر ينتشر إلى العنق",
+},
+{
+id: "s_37",
+type: "symptom",
+name: "ألم صدري، ينتشر إلى ما بين لوحي الكتف",
+common_name: "ألم في الصدر ينتشر إلى ما بين لوحي الكتف",
+},
+{
+id: "s_38",
+type: "symptom",
+name: "ألم في الظهر، قطني، ينتشر إلى الوجه الخلفي من الفخذ",
+common_name: "ألم في الجزء السفلي من الظهر ينتشر إلى السطح الخلفي من الفخذ أو الركبة",
+},
+{
+id: "s_39",
+type: "symptom",
+name: "تبوُّل مؤلم",
+common_name: "ألم أثناء التبول",
+},
+{
+id: "s_41",
+type: "symptom",
+name: "ألم مفصلي، شديد، ناتج عن رض",
+common_name: "ألم مفصلي شديد بعد أذية أو رض",
+},
+{
+id: "s_43",
+type: "symptom",
+name: "ألم في الجلد، شديد",
+common_name: "ألم شديد في الجلد",
+},
+{
+id: "s_44",
+type: "symptom",
+name: "ألم مفصلي",
+common_name: "ألم في المفصل",
+},
+{
+id: "s_47",
+type: "symptom",
+name: "ألم في الأذن",
+common_name: "ألم في الأذن",
+},
+{
+id: "s_50",
+type: "symptom",
+name: "ألم صدري",
+common_name: "ألم في الصدر",
+},
+{
+id: "s_51",
+type: "symptom",
+name: "ألم صدري، منتشر",
+common_name: "ألم منتشر في كامل الصدر",
+},
+{
+id: "s_52",
+type: "symptom",
+name: "ألم في الصفن",
+common_name: "ألم في كيس الصفن",
+},
+{
+id: "s_53",
+type: "symptom",
+name: "ألم في الظهر، قطني",
+common_name: "ألم في أسفل الظهر",
+},
+{
+id: "s_54",
+type: "symptom",
+name: "ألم قرب جوف الحجاج",
+common_name: "ألم حول العين أو خلفها",
+},
+{
+id: "s_56",
+type: "symptom",
+name: "ألم سني، مترافق مع المضغ",
+common_name: "ألم في الأسنان عند المضغ",
+},
+{
+id: "s_57",
+type: "symptom",
+name: "ألم بطني، يخف بعد التغوُّط أو إخراج الغازات",
+common_name: "ألم في البطن يخف بعد التبرّز أو إخراج الغازات",
+},
+{
+id: "s_60",
+type: "symptom",
+name: "ألم في العجان، في حشفة القضيب",
+common_name: "ألم في رأس القضيب",
+},
+{
+id: "s_64",
+type: "symptom",
+name: "مفرزات مهبلية، ذات رائحة كريهة",
+common_name: "إفرازات كريهة الرائحة من المهبل",
+},
+{
+id: "s_65",
+type: "symptom",
+name: "البخر الفموي",
+common_name: "رائحة كريهة من الفم",
+},
+{
+id: "s_67",
+type: "symptom",
+name: "شخير",
+common_name: "شخير",
+},
+{
+id: "s_68",
+type: "symptom",
+name: "عسر التصويت",
+common_name: "صوت أجش",
+},
+{
+id: "s_69",
+type: "symptom",
+name: "الانشغال بالطعام",
+common_name: "الانشغال بالطعام",
+},
+{
+id: "s_71",
+type: "symptom",
+name: "براز أسود",
+common_name: "خروج أسود",
+},
+{
+id: "s_72",
+type: "symptom",
+name: "احمرار وحرقة في الملتحمة",
+common_name: "عينين محمرتين ولاذعتين",
+},
+{
+id: "s_73",
+type: "symptom",
+name: "فُزر جلدية في البطن أو الوركين أو الفخذين",
+common_name: "علامات تمدد جلدي أو تشققات جلدية في البطن أو الردفين أو الفخذين",
+},
+{
+id: "s_74",
+type: "symptom",
+name: "اضطراب الوظيفة الجنسية، ممارسات جنسية غير مضبوطة",
+common_name: "نشاط جنسي متكرر أو مع شركاء جنسيين أكثر من المراد",
+},
+{
+id: "s_75",
+type: "symptom",
+name: "بوال",
+common_name: "تبول كمية كبيرة في اليوم الواحد بالمقارنة مع المعتاد",
+},
+{
+id: "s_79",
+type: "symptom",
+name: "ألم مفصلي، في إبهام القدم",
+common_name: "ألم في إصبع القدم الكبير",
+},
+{
+id: "s_80",
+type: "symptom",
+name: "اضطراب الوظيفة الجنسية، التهيج عند عدم القدرة على ممارسة نشاط يتعلّق بالجنس",
+common_name: "العصبية عند عدم القدرة على ممارسة الجنس",
+},
+{
+id: "s_81",
+type: "symptom",
+name: "قشعريرة",
+common_name: "رجفة",
+},
+{
+id: "s_84",
+type: "symptom",
+name: "رجفان يخف بعد شرب الكحول",
+common_name: "ارتعاش يخف بعد تناول الكحول",
+},
+{
+id: "s_85",
+type: "symptom",
+name: "رجفان، في الرأس",
+common_name: "رجفة في الرأس",
+},
+{
+id: "s_86",
+type: "symptom",
+name: "رجفان، في يد واحدة",
+common_name: "رجفة في يد واحدة",
+},
+{
+id: "s_87",
+type: "symptom",
+name: "رجفان، في كلتا اليدين",
+common_name: "رجفة في كلتا اليدين",
+},
+{
+id: "s_88",
+type: "symptom",
+name: "زلة تنفسية",
+common_name: "ضيق في التنفس",
+},
+{
+id: "s_90",
+type: "symptom",
+name: "زلة تنفسية تدوم بين يوم و4 أسابيع",
+common_name: "ضيق تنفس يستمر فترة تتراوح بين يوم و4 أسابيع",
+},
+{
+id: "s_92",
+type: "symptom",
+name: "زلة تنفسية، بدأت منذ أقل من ساعة",
+common_name: "ضيق تنفس ظهر منذ أقل من ساعة",
+},
+{
+id: "s_93",
+type: "symptom",
+name: "تدخين عدد كبير من السجائر",
+common_name: "تدخين أكثر من 20 سيجارة في اليوم الواحد",
+},
+{
+id: "s_95",
+type: "symptom",
+name: "انزعاج أثناء التكلم، في الوجه والفكين",
+common_name: "الشعور بانزعاج في الجزء السفلي من الوجه أو الفم أثناء التكلم",
+},
+{
+id: "s_97",
+type: "symptom",
+name: "حشوة عميقة لسن تمت معالجته",
+common_name: "حشوة عميقة لسن تمت معالجته",
+},
+{
+id: "s_98",
+type: "symptom",
+name: "حمى",
+common_name: "ارتفاع درجة حرارة الجسم",
+},
+{
+id: "s_99",
+type: "symptom",
+name: "حمى تتراوح بين 37 و38° درجة مئوية، أي بين 98.6 و100.4° درجة فهرنهايتية",
+common_name: "ارتفاع درجة حرارة الجسم بين 37 و38° درجة مئوية، أي بين 98.6 و100.4° درجة فهرنهايتية",
+},
+{
+id: "s_100",
+type: "symptom",
+name: "حمى تتراوح بين 38 و40° درجة مئوية (أو ما بين 100.4 و104° درجة فهرنهايتية)",
+common_name: "ارتفاع درجة حرارة الجسم بين 38 و40° درجة مئوية (أو ما بين 100.4 و104° درجة فهرنهايتية)",
+},
+{
+id: "s_101",
+type: "symptom",
+name: "كتلة جلدية، قطرها أصغر من 1 سم",
+common_name: "نتوءات على الجلد بقطر أقل من 1 سم",
+},
+{
+id: "s_102",
+type: "symptom",
+name: "سعال",
+common_name: "سعال",
+},
+{
+id: "s_103",
+type: "symptom",
+name: "سعال، يدوم أقل من ثلاثة أسابيع",
+common_name: "سعال يستمر أقل من ثلاثة أسابيع",
+},
+{
+id: "s_104",
+type: "symptom",
+name: "سعال، مُنتج",
+common_name: "سعال منتج للبلغم",
+},
+{
+id: "s_105",
+type: "symptom",
+name: "سعال، جاف",
+common_name: "سعال جاف",
+},
+{
+id: "s_106",
+type: "symptom",
+name: "سعال، يدوم لأكثر من ثمانية أسابيع",
+common_name: "سعال يستمر لأكثر من ثمانية أسابيع",
+},
+{
+id: "s_107",
+type: "symptom",
+name: "سيلان أنفي",
+common_name: "سيلان من الأنف",
+},
+{
+id: "s_108",
+type: "symptom",
+name: "زيادة عمق الجيوب حول السنية",
+common_name: "فراغات عميقة بين اللثة والأسنان",
+},
+{
+id: "s_109",
+type: "symptom",
+name: "شرب الكحول، الشرب لتخفيف آثار الثمالة",
+common_name: "شرب الكحول لتخفيف آثار الثمالة",
+},
+{
+id: "s_110",
+type: "symptom",
+name: "الخفقان",
+common_name: "خفقان القلب",
+},
+{
+id: "s_111",
+type: "symptom",
+name: "نزف من اللثة",
+common_name: "نزف من اللثة",
+},
+{
+id: "s_112",
+type: "symptom",
+name: "براز أحمر اللون",
+common_name: "براز أحمر",
+},
+{
+id: "s_113",
+type: "symptom",
+name: "بول أحمر اللون",
+common_name: "بول أحمر",
+},
+{
+id: "s_115",
+type: "symptom",
+name: "نزيف من الشرج",
+common_name: "نزيف من الشرج",
+},
+{
+id: "s_116",
+type: "symptom",
+name: "نفث الدم",
+common_name: "بصق الدم",
+},
+{
+id: "s_118",
+type: "symptom",
+name: "حساسية تجاه البرد",
+common_name: "حساسية تجاه البرد",
+},
+{
+id: "s_120",
+type: "symptom",
+name: "قلق",
+common_name: "قلق",
+},
+{
+id: "s_121",
+type: "symptom",
+name: "فقدان الشعر",
+common_name: "تساقط الشعر",
+},
+{
+id: "s_122",
+type: "symptom",
+name: "دُماع",
+common_name: "زيادة إفراز الدمع",
+},
+{
+id: "s_123",
+type: "symptom",
+name: "إهمال الذات",
+common_name: "نقص الاهتمام بالذات",
+},
+{
+id: "s_124",
+type: "symptom",
+name: "عتمة، أجسام طافية أمام العينين",
+common_name: "رؤية بقع سوداء",
+},
+{
+id: "s_125",
+type: "symptom",
+name: "خدر، في كلا القدمين",
+common_name: "تنميل في القدمين",
+},
+{
+id: "s_126",
+type: "symptom",
+name: "خدر حول الفم",
+common_name: "تنميل حول الفم",
+},
+{
+id: "s_127",
+type: "symptom",
+name: "وساوس",
+common_name: "أفكار وسواسية",
+},
+{
+id: "s_131",
+type: "symptom",
+name: "نوبات النوم",
+common_name: "النوم فجأة خلال النهار",
+},
+{
+id: "s_132",
+type: "symptom",
+name: "شعرانية",
+common_name: "زيادة نمو الأشعار",
+},
+{
+id: "s_134",
+type: "symptom",
+name: "التدخين، الحاجة لتدخين سيجارة أول اليوم",
+common_name: "صعوبة التخلي عن سيجارة أول اليوم",
+},
+{
+id: "s_136",
+type: "symptom",
+name: "نوبات من العطاس",
+common_name: "نوبات من العطاس",
+},
+{
+id: "s_137",
+type: "symptom",
+name: "تناول الطعام المفرط",
+common_name: "الإفراط في تناول الطعام",
+},
+{
+id: "s_139",
+type: "symptom",
+name: "التهاب لوزتين ناكس",
+common_name: "التهاب لوزتين ناكس",
+},
+{
+id: "s_142",
+type: "symptom",
+name: "قرحات معدية ناكسة",
+common_name: "قرحات معدية ناكسة",
+},
+{
+id: "s_146",
+type: "symptom",
+name: "فقدان في الذاكرة، عدم تذكر أسماء العائلة والأصدقاء",
+common_name: "نسيان أسماء العائلة والأصدقاء",
+},
+{
+id: "s_147",
+type: "symptom",
+name: "فقر دم",
+common_name: "فقر دم",
+},
+{
+id: "s_150",
+type: "symptom",
+name: "شرب الكحول، عدم القدرة على التوقف عن الشرب",
+common_name: "عدم القدرة على التوقف عن شرب الكحول",
+},
+{
+id: "s_151",
+type: "symptom",
+name: "نزيف أو تمشيح تناسلي غير طبيعي بعد سن اليأس",
+common_name: "نزف أو تمشيح من المهبل بعد تجاوز سن اليأس",
+},
+{
+id: "s_152",
+type: "symptom",
+name: "نزف مهبلي بعد الجماع",
+common_name: "نزف من المهبل بعد الجماع",
+},
+{
+id: "s_153",
+type: "symptom",
+name: "سلس بولي",
+common_name: "سلس البول",
+},
+{
+id: "s_155",
+type: "symptom",
+name: "انخفاض الثقة بالنفس",
+common_name: "انخفاض احترام الذات",
+},
+{
+id: "s_156",
+type: "symptom",
+name: "غثيان",
+common_name: "الشعور برغبة في التقيؤ",
+},
+{
+id: "s_157",
+type: "symptom",
+name: "رهاب السمنة",
+common_name: "الخوف من البدانة",
+},
+{
+id: "s_159",
+type: "symptom",
+name: "ألم في الظهر، يشتد عند القيام بمجهود فيزيائي",
+common_name: "ألم في الظهر يزداد بعد القيام بمجهود جسدي",
+},
+{
+id: "s_161",
+type: "symptom",
+name: "تظهر الأعراض بانتظام قبل عدة أيام من الدورة الشهرية",
+common_name: "تظهر الأعراض بانتظام قبل عدة أيام من الحيض",
+},
+{
+id: "s_169",
+type: "symptom",
+name: "نوبات مزاج اكتئابي",
+common_name: "مزاج اكتئابي",
+},
+{
+id: "s_170",
+type: "symptom",
+name: "وذمة، في مفصل الركبة",
+common_name: "تورم في الركبة",
+},
+{
+id: "s_171",
+type: "symptom",
+name: "وذمة، في مفصل الكاحل في جانب واحد",
+common_name: "تورم في أحد الكاحلين",
+},
+{
+id: "s_172",
+type: "symptom",
+name: "تورم في اللثة",
+common_name: "تورم في اللثة",
+},
+{
+id: "s_173",
+type: "symptom",
+name: "وذمة، في طرف سفلي واحد",
+common_name: "تورم في الساق",
+},
+{
+id: "s_175",
+type: "symptom",
+name: "وذمة، في كلا الطرفين السفليين",
+common_name: "تورم في كلا الساقين",
+},
+{
+id: "s_176",
+type: "symptom",
+name: "وذمة، في كيس الصفن",
+common_name: "تورم في كيس الصفن",
+},
+{
+id: "s_177",
+type: "symptom",
+name: "توذّم الوجنة",
+common_name: "تورم الخد",
+},
+{
+id: "s_180",
+type: "symptom",
+name: "نقص تصبّغ الجلد",
+common_name: "بهوت لون الجلد",
+},
+{
+id: "s_181",
+type: "symptom",
+name: "اضطراب الوظيفة الجنسية، رغبة جنسية مستمرة",
+common_name: "الشعور بحاجة مستمرة لممارسة الجنس",
+},
+{
+id: "s_182",
+type: "symptom",
+name: "بوال ليلي",
+common_name: "تكرر التبول في الليل",
+},
+{
+id: "s_183",
+type: "symptom",
+name: "التبول أثناء السعال أو الضحك أو عند القيام بمجهود بدني",
+common_name: "التبول أثناء السعال أو الضحك أو عند القيام بمجهود بدني",
+},
+{
+id: "s_185",
+type: "symptom",
+name: "قلة البول",
+common_name: "تبول كمية أقل من المعتاد",
+},
+{
+id: "s_186",
+type: "symptom",
+name: "تحدد الحركة، صعوبة في الانحناء",
+common_name: "صعوبة في الانحناء",
+},
+{
+id: "s_189",
+type: "symptom",
+name: "نوبات صرع، مع فقدان وعي",
+common_name: "نوبات اختلاج مع غياب عن الوعي",
+},
+{
+id: "s_190",
+type: "symptom",
+name: "فقدان للوعي مع تبول أو تغوط",
+common_name: "غياب عن الوعي مع فقدان القدرة على ضبط عملية التبول أو التغوط",
+},
+{
+id: "s_191",
+type: "symptom",
+name: "تدلي الرأس",
+common_name: "هبوط الرأس",
+},
+{
+id: "s_192",
+type: "symptom",
+name: "إطراق جفني",
+common_name: "هبوط الأجفان",
+},
+{
+id: "s_194",
+type: "symptom",
+name: "قرحة، في حلمة الثدي",
+common_name: "قرحة في حلمة الثدي",
+},
+{
+id: "s_195",
+type: "symptom",
+name: "تدخين حالي للسجائر",
+common_name: "تدخين حالي للسجائر",
+},
+{
+id: "s_196",
+type: "symptom",
+name: "تدخين السجائر أثناء المرض",
+common_name: "التدخين حتى أثناء المرض",
+},
+{
+id: "s_200",
+type: "symptom",
+name: "حرقة في اللسان",
+common_name: "شعور بالحرق في اللسان",
+},
+{
+id: "s_201",
+type: "symptom",
+name: "الشعور بوجود رمل أسفل الأجفان",
+common_name: "الشعور بوجود رمل أسفل الأجفان",
+},
+{
+id: "s_202",
+type: "symptom",
+name: "حمامى هاجرة",
+common_name: "بقعة حمراء متوسّعة في مركزها جلد طبيعي سليم",
+},
+{
+id: "s_203",
+type: "symptom",
+name: "قلح",
+common_name: "جير الأسنان",
+},
+{
+id: "s_204",
+type: "symptom",
+name: "انحناء الجسم للأمام",
+common_name: "انحناء الجسم للأمام",
+},
+{
+id: "s_205",
+type: "symptom",
+name: "الشعور بالذنب",
+common_name: "الشعور بالذنب",
+},
+{
+id: "s_207",
+type: "symptom",
+name: "الشفع",
+common_name: "ازدواج الرؤية",
+},
+{
+id: "s_208",
+type: "symptom",
+name: "ضعف حاسة السمع",
+common_name: "ضعف حاسة السمع",
+},
+{
+id: "s_213",
+type: "symptom",
+name: "اضطراب الوظيفة الجنسية، قضاء وقت طويل في ممارسات متعلقة بالجنس",
+common_name: "قضاء وقت طويل في أنشطة متعلقة بالجنس",
+},
+{
+id: "s_214",
+type: "symptom",
+name: "تعرق في الجبهة في الجانب المؤلم",
+common_name: "تعرق في الجبهة في الجانب المؤلم",
+},
+{
+id: "s_215",
+type: "symptom",
+name: "كثرة عدد مرات التبول",
+common_name: "كثرة عدد مرات التبول",
+},
+{
+id: "s_216",
+type: "symptom",
+name: "تعرق مفرط",
+common_name: "كثرة التعرق",
+},
+{
+id: "s_217",
+type: "symptom",
+name: "تعرق ليلي",
+common_name: "تعرق في الليل",
+},
+{
+id: "s_219",
+type: "symptom",
+name: "تضخم الثديين",
+common_name: "تضخم الثديين",
+},
+{
+id: "s_220",
+type: "symptom",
+name: "تضخم في العقد اللمفاوية",
+common_name: "تضخم في العقد اللمفاوية",
+},
+{
+id: "s_221",
+type: "symptom",
+name: "آفات جلدية على الأعضاء التناسلية تشبه القرنبيط",
+common_name: "بروزات على الأعضاء التناسلية تشبه القرنبيط",
+},
+{
+id: "s_223",
+type: "symptom",
+name: "عدم القدرة على إيقاف التبوّل",
+common_name: "عدم القدرة على إيقاف التبوّل",
+},
+{
+id: "s_225",
+type: "symptom",
+name: "الشيب المبكر",
+common_name: "الشيب المبكر",
+},
+{
+id: "s_226",
+type: "symptom",
+name: "زيادة الوزن",
+common_name: "زيادة الوزن",
+},
+{
+id: "s_227",
+type: "symptom",
+name: "تسرع التنفس",
+common_name: "تنفّس سريع",
+},
+{
+id: "s_228",
+type: "symptom",
+name: "أسنان متقلقلة",
+common_name: "أسنان متحركة",
+},
+{
+id: "s_229",
+type: "symptom",
+name: "حمامى",
+common_name: "احمرار الجلد",
+},
+{
+id: "s_230",
+type: "symptom",
+name: "حمامى، على الوجه بشكل فراشة",
+common_name: "احمرار على الوجه يشمل الخدين والأنف فقط",
+},
+{
+id: "s_231",
+type: "symptom",
+name: "ألم سني، مترافق مع الحرارة",
+common_name: "ألم في سن يزداد بالحرارة",
+},
+{
+id: "s_232",
+type: "symptom",
+name: "ألم في الطرف السفلي، في الربلة، شديد أثناء المشي",
+common_name: "ألم شديد في بطة الساق أثناء المشي",
+},
+{
+id: "s_233",
+type: "symptom",
+name: "ألم سني، شديد",
+common_name: "ألم شديد في سن",
+},
+{
+id: "s_234",
+type: "symptom",
+name: "كدمات سهلة الظهور",
+common_name: "كدمات سهلة الظهور",
+},
+{
+id: "s_235",
+type: "symptom",
+name: "نفضات في الأجفان",
+common_name: "تقلصات في الأجفان",
+},
+{
+id: "s_236",
+type: "symptom",
+name: "انخفاض الشبق",
+common_name: "فقدان الرغبة الجنسية",
+},
+{
+id: "s_237",
+type: "symptom",
+name: "نقص في الوزن، دون انخفاض الشهية",
+common_name: "نقص في الوزن دون انخفاض في الشهية",
+},
+{
+id: "s_238",
+type: "symptom",
+name: "مشية بطيئة",
+common_name: "بطء المشي",
+},
+{
+id: "s_241",
+type: "symptom",
+name: "تغيرات جلدية",
+common_name: "تغيرات في الجلد",
+},
+{
+id: "s_243",
+type: "symptom",
+name: "استخدام وسائل غير صحية لإنقاص الوزن",
+common_name: "استخدام وسائل غير صحية لإنقاص الوزن",
+},
+{
+id: "s_244",
+type: "symptom",
+name: "الخوف من أشياء أو مواقف أو تصرفات معينة",
+common_name: "خوف من أشياء محددة",
+},
+{
+id: "s_245",
+type: "symptom",
+name: "تغيرات جلدية، توسفية",
+common_name: "قشور جلدية",
+},
+{
+id: "s_247",
+type: "symptom",
+name: "جفاف الفم",
+common_name: "جفاف الفم",
+},
+{
+id: "s_249",
+type: "symptom",
+name: "حكة حول الشرج",
+common_name: "حكة في الشرج",
+},
+{
+id: "s_250",
+type: "symptom",
+name: "حكة جلدية، تشتد في الليل",
+common_name: "حكة جلدية تزداد في الليل",
+},
+{
+id: "s_251",
+type: "symptom",
+name: "حكة جلدية، تتحرّض بتغيرات درجة الحرارة أو التعرّق أو لبس الصوف",
+common_name: "حكة في الجلد تتحرض بتغيرات درجة الحرارة أو التعرق أو لبس الصوف",
+},
+{
+id: "s_252",
+type: "symptom",
+name: "حكة في الأنف أو الحلق",
+common_name: "شعور بالحكة في الأنف أو الحلق",
+},
+{
+id: "s_253",
+type: "symptom",
+name: "حكة في المغبن",
+common_name: "حكة في المنطقة التناسلية",
+},
+{
+id: "s_254",
+type: "symptom",
+name: "حكة جلدية",
+common_name: "جلد حاك",
+},
+{
+id: "s_255",
+type: "symptom",
+name: "حكة في الأذن",
+common_name: "حكة في الأذن",
+},
+{
+id: "s_256",
+type: "symptom",
+name: "الضزز",
+common_name: "صعوبة في فتح الفم",
+},
+{
+id: "s_257",
+type: "symptom",
+name: "تيبس العمود الفقري صباحاً",
+common_name: "تصلب العمود الفقري صباحاً",
+},
+{
+id: "s_258",
+type: "symptom",
+name: "تيبس صباحي لمفاصل اليد",
+common_name: "تيبس في مفاصل اليد صباحاً",
+},
+{
+id: "s_259",
+type: "symptom",
+name: "تيبس مفصلي، يزول بعد تحريك المفصل",
+common_name: "تيبس في مفصل يزول بعد ممارسة التمارين",
+},
+{
+id: "s_261",
+type: "symptom",
+name: "تسرع القلب",
+common_name: "تسارع نبضات القلب",
+},
+{
+id: "s_263",
+type: "symptom",
+name: "تضيق القلفة",
+common_name: "صعوبة في إرجاع القلفة",
+},
+{
+id: "s_265",
+type: "symptom",
+name: "التدخين في الأماكن الغير مسموح فيها بذلك",
+common_name: "التدخين في الأماكن الغير مسموح فيها بذلك",
+},
+{
+id: "s_266",
+type: "symptom",
+name: "صعوبة في القضم والمضغ",
+common_name: "صعوبة في القضم والمضغ",
+},
+{
+id: "s_267",
+type: "symptom",
+name: "ألم سني، صعوبة في تحديد السن الذي يسبب الألم",
+common_name: "صعوبة في تحديد السن الذي يسبب الألم",
+},
+{
+id: "s_269",
+type: "symptom",
+name: "صعوبة التعلم",
+common_name: "صعوبة في تعلم الأشياء الجديدة",
+},
+{
+id: "s_270",
+type: "symptom",
+name: "صرير مفصلي أثناء الحركة",
+common_name: "صدور صوت صرير من مفصل عند تحريكه",
+},
+{
+id: "s_271",
+type: "symptom",
+name: "وجه أملس بدون تجاعيد",
+common_name: "وجه أملس بدون تجاعيد",
+},
+{
+id: "s_272",
+type: "symptom",
+name: "آفات في الميناء، نخر سني",
+common_name: "نخور في الأسنان",
+},
+{
+id: "s_273",
+type: "symptom",
+name: "الشعور بثقل في الساقين في نهاية اليوم",
+common_name: "الشعور بثقل في الساقين في نهاية اليوم",
+},
+{
+id: "s_274",
+type: "symptom",
+name: "الشعور بالحر",
+common_name: "الشعور بالحر",
+},
+{
+id: "s_276",
+type: "symptom",
+name: "انسداد في الأذن",
+common_name: "أذن مسدودة",
+},
+{
+id: "s_277",
+type: "symptom",
+name: "زيادة محيط البطن",
+common_name: "زيادة حجم البطن",
+},
+{
+id: "s_279",
+type: "symptom",
+name: "الشعور بضغط أو خفقان داخل السن",
+common_name: "الشعور بضغط أو خفقان داخل السن",
+},
+{
+id: "s_280",
+type: "symptom",
+name: "هبات ساخنة",
+common_name: "هبات ساخنة",
+},
+{
+id: "s_284",
+type: "symptom",
+name: "نقص الشهية",
+common_name: "نقص الشهية",
+},
+{
+id: "s_285",
+type: "symptom",
+name: "نقص الوزن",
+common_name: "نقص الوزن",
+},
+{
+id: "s_287",
+type: "symptom",
+name: "فقدان لذة الحياة، يدوم أسبوعين على الأقل",
+common_name: "نقص الاهتمام بالأنشطة التي كانت ممتعة سابقاً بحيث استمر ذلك أسبوعين على الأقل",
+},
+{
+id: "s_289",
+type: "symptom",
+name: "سوء الإطباق",
+common_name: "سوء الإطباق",
+},
+{
+id: "s_291",
+type: "symptom",
+name: "توذم في مجرى السمع الخارجي",
+common_name: "تورم القناة السمعية داخل الأذن",
+},
+{
+id: "s_297",
+type: "symptom",
+name: "سيلان من الأذن",
+common_name: "خروج مفرزات من الأذن",
+},
+{
+id: "s_299",
+type: "symptom",
+name: "كتلة بطنيّة",
+common_name: "كتلة في البطن",
+},
+{
+id: "s_300",
+type: "symptom",
+name: "عقيدة في الثدي",
+common_name: "كتلة في الثدي",
+},
+{
+id: "s_301",
+type: "symptom",
+name: "إفرازات تحت القلفة",
+common_name: "إفرازات تحت القلفة",
+},
+{
+id: "s_302",
+type: "symptom",
+name: "خروج مفرزات من الجيوب اللثوية",
+common_name: "خروج مفرزات من الجيوب حول السنية بين اللثة والأسنان",
+},
+{
+id: "s_303",
+type: "symptom",
+name: "سلوك قهري",
+common_name: "سلوك قهري",
+},
+{
+id: "s_305",
+type: "symptom",
+name: "إقياء",
+common_name: "تقيؤ",
+},
+{
+id: "s_306",
+type: "symptom",
+name: "إقياء مدمى",
+common_name: "تقيؤ مصحوب بدم",
+},
+{
+id: "s_308",
+type: "symptom",
+name: "تدخين العدد الأكبر من السجائر في اليوم صباحاً",
+common_name: "تدخين العدد الأكبر من السجائر في اليوم صباحاً",
+},
+{
+id: "s_309",
+type: "symptom",
+name: "نفخة",
+common_name: "نفخة",
+},
+{
+id: "s_310",
+type: "symptom",
+name: "زيادة العطش",
+common_name: "الشعور بعطش زائد عن المعتاد",
+},
+{
+id: "s_311",
+type: "symptom",
+name: "زيادة الشهية",
+common_name: "الشعور بجوعٍ زائد عن المعتاد",
+},
+{
+id: "s_313",
+type: "symptom",
+name: "فقدان الحس في طرف واحد",
+common_name: "غياب الحس في ذراع أو ساق واحدة",
+},
+{
+id: "s_316",
+type: "symptom",
+name: "ضعف الذاكرة",
+common_name: "ضعف الذاكرة",
+},
+{
+id: "s_317",
+type: "symptom",
+name: "ضعف التوازن أثناء المشي",
+common_name: "التعثر أو فقدان التوازن أثناء المشي",
+},
+{
+id: "s_319",
+type: "symptom",
+name: "اضطراب النوم",
+common_name: "تغيّر في أنماط النوم أو عاداته أو صعوبة النوم",
+},
+{
+id: "s_320",
+type: "symptom",
+name: "ضعف بصري",
+common_name: "ضعف الرؤية",
+},
+{
+id: "s_322",
+type: "symptom",
+name: "حمامى لثوية",
+common_name: "لثة حمراء",
+},
+{
+id: "s_323",
+type: "symptom",
+name: "حمامى، في الجلد الواقع فوق مفصل",
+common_name: "احمرار في مفصل",
+},
+{
+id: "s_325",
+type: "symptom",
+name: "حمامى، على الأطراف",
+common_name: "احمرار في جلد اليد أو الساق",
+},
+{
+id: "s_326",
+type: "symptom",
+name: "اضطراب الوظيفة الجنسية، إعطاء الجنس الأولوية على حساب المسؤوليات والهوايات",
+common_name: "إهمال الالتزامات كالعمل أو الدراسة أو العائلة بسبب الجنس",
+},
+{
+id: "s_327",
+type: "symptom",
+name: "الحاجة لتدخين سيجارة عند الاستيقاظ من النوم",
+common_name: "التدخين فور الاستيقاظ",
+},
+{
+id: "s_328",
+type: "symptom",
+name: "ضائعات مهبلية غير طبيعية",
+common_name: "ضائعات مهبلية غير طبيعية",
+},
+{
+id: "s_329",
+type: "symptom",
+name: "إمساك",
+common_name: "إمساك",
+},
+{
+id: "s_330",
+type: "symptom",
+name: "قلس",
+common_name: "عودة الطعام المبتلع إلى الفم",
+},
+{
+id: "s_331",
+type: "symptom",
+name: "احتقان أنفي",
+common_name: "انسداد الأنف",
+},
+{
+id: "s_332",
+type: "symptom",
+name: "يرقان",
+common_name: "يرقان",
+},
+{
+id: "s_334",
+type: "symptom",
+name: "يرقان يظهر أثناء التوتر",
+common_name: "اصفرار في الجلد يحدث أثناء التوتر أو الضغط النفسي",
+},
+{
+id: "s_335",
+type: "symptom",
+name: "يرقان يظهر بعد القيام بمجهود فيزيائي شديد",
+common_name: "اصفرار في الجلد أو العينين بعد القيام بمجهود بدني",
+},
+{
+id: "s_336",
+type: "symptom",
+name: "يرقان يظهر عند الإصابة بالأمراض الخمجية",
+common_name: "اصفرار في الجلد أو العينين يظهر أثناء الأمراض المُعدية",
+},
+{
+id: "s_338",
+type: "symptom",
+name: "حرقة الفؤاد",
+common_name: "حرقة بمنطقة الصدر",
+},
+{
+id: "s_341",
+type: "symptom",
+name: "تخيل أن الأشياء المحيطة أكبر أو أصغر مما هي في الواقع",
+common_name: "تخيل أن الأشياء المحيطة أكبر أو أصغر مما هي في الواقع",
+},
+{
+id: "s_342",
+type: "symptom",
+name: "تجاعيد أو تنقّر في جلد الثدي",
+common_name: "تجاعيد أو تنقّر في جلد الثدي",
+},
+{
+id: "s_343",
+type: "symptom",
+name: "غؤور في الحلمة أو تغير في شكلها",
+common_name: "تغير شكل الحلمة",
+},
+{
+id: "s_345",
+type: "symptom",
+name: "تغير في خط اليد",
+common_name: "تغير في خط اليد",
+},
+{
+id: "s_346",
+type: "symptom",
+name: "تغير في لون سن",
+common_name: "تغير في لون سن",
+},
+{
+id: "s_348",
+type: "symptom",
+name: "تغيرات الشخصيّة",
+common_name: "تغيرات الشخصيّة",
+},
+{
+id: "s_350",
+type: "symptom",
+name: "تغيرات جلدية، تتوضع بشكل خطي",
+common_name: "تغيرات جلدية تأخذ شكل خط",
+},
+{
+id: "s_351",
+type: "symptom",
+name: "تَقَرُّح أو خراج قرب فتحة الشرج",
+common_name: "تَقَرُّح أو خراج قرب فتحة الشرج",
+},
+{
+id: "s_352",
+type: "symptom",
+name: "تغيرات جلدية، في مكان التماس مع الأزرار أو الأحزمة أو مستحضرات التجميل",
+common_name: "تغيرات في الجلد المماس للأزرار أو الأحزمة أو المجوهرات أو مستحضرات التجميل",
+},
+{
+id: "s_358",
+type: "symptom",
+name: "تدفّق متقطع للبول",
+common_name: "تقطع تدفق البول",
+},
+{
+id: "s_359",
+type: "symptom",
+name: "تشوه مفصلي، غير رضي",
+common_name: "تشوّه مفصل لا يترافق مع أي إصابة حديثة",
+},
+{
+id: "s_360",
+type: "symptom",
+name: "صغر الفم",
+common_name: "تضيق الفم أو صعوبة في فتحه",
+},
+{
+id: "s_361",
+type: "symptom",
+name: "اضطراب الوظيفة الجنسية، زيادة الحاجة للمنبهات الجنسية للوصول إلى التأثير المرغوب",
+common_name: "زيادة الحاجة للممارسات والتجارب الجنسية للوصول إلى التأثير المرغوب",
+},
+{
+id: "s_362",
+type: "symptom",
+name: "بشرة دهنية",
+common_name: "بشرة دهنية",
+},
+{
+id: "s_363",
+type: "symptom",
+name: "توذّم، في الرقبة",
+common_name: "تورم في العنق",
+},
+{
+id: "s_369",
+type: "symptom",
+name: "سيلان من الإحليل",
+common_name: "خروج مفرزات من الإحليل",
+},
+{
+id: "s_370",
+type: "symptom",
+name: "دوخة",
+common_name: "دوخة",
+},
+{
+id: "s_371",
+type: "symptom",
+name: "العمل الزائد",
+common_name: "العمل الزائد",
+},
+{
+id: "s_373",
+type: "symptom",
+name: "قشور عسلية اللون على الجلد",
+common_name: "قشور عسلية اللون على الجلد",
+},
+{
+id: "s_376",
+type: "symptom",
+name: "جلد من النمط I أو II",
+common_name: "جلد من النمط الأول أو الثاني",
+},
+{
+id: "s_377",
+type: "symptom",
+name: "عدد كبير من الشامات",
+common_name: "عدد كبير من وحمات الولادة",
+},
+{
+id: "s_380",
+type: "symptom",
+name: "شامة أو وحمة غريبة ومشبوهة، غير متناظرة",
+common_name: "عدم تناظر وحمة الولادة أو شامة جلديّة",
+},
+{
+id: "s_381",
+type: "symptom",
+name: "شامة أو وحمة غريبة ومشبوهة، غير منتظمة الحواف",
+common_name: "شامة أو وحمة ولادة غير منتظمة الحواف",
+},
+{
+id: "s_382",
+type: "symptom",
+name: "شامة أو وحمة غريبة ومشبوهة، قطرها أكبر من 6 مم",
+common_name: "شامة أو وحمة ولادة بقطر أكبر من 6 مم",
+},
+{
+id: "s_383",
+type: "symptom",
+name: "شامة أو وحمة غريبة ومشبوهة",
+common_name: "شامة أو وحمة مشبوهة المنظر",
+},
+{
+id: "s_384",
+type: "symptom",
+name: "بقع حمراء بقشور بيضاء فضية",
+common_name: "بقع حمراء مع وسوف قشرية بيضاء فضية",
+},
+{
+id: "s_385",
+type: "symptom",
+name: "جلد جاف متشقق وينزف أحياناً",
+common_name: "جلد جاف متشقق وينزف أحياناً",
+},
+{
+id: "s_386",
+type: "symptom",
+name: "أظافر سميكة بحفر أو أثلام",
+common_name: "أظافر سميكة مع حفر وأثلام على سطحها",
+},
+{
+id: "s_388",
+type: "symptom",
+name: "بثرة",
+common_name: "حويصلات مليئة بالقيح قطر أحدها لا يتجاوز الـ1 سم",
+},
+{
+id: "s_389",
+type: "symptom",
+name: "رؤوس سوداء",
+common_name: "رؤوس سوداء",
+},
+{
+id: "s_393",
+type: "symptom",
+name: "شرى",
+common_name: "طفح جلدي حاك",
+},
+{
+id: "s_398",
+type: "symptom",
+name: "تغيرات جلدية، تشمل الجسم كله",
+common_name: "تغيرات في كامل جلد الجسم",
+},
+{
+id: "s_400",
+type: "symptom",
+name: "تغيرات جلدية، تُسبق بألم أو حكّة",
+common_name: "ألم وحكة يليها ظهور تغيرات جلدية",
+},
+{
+id: "s_402",
+type: "symptom",
+name: "تغيرات جلدية، تنكس خلال الأخماج أو الدورة الطمثية",
+common_name: "تغيرات جلدية تتكرر أثناء العدوى الجرثومية أو الدورة الشهرية",
+},
+{
+id: "s_404",
+type: "symptom",
+name: "تغيرات جلدية، ذات سطح خشن وغير منتظم",
+common_name: "تغيرات جلدية بسطح خشن وغير منتظم",
+},
+{
+id: "s_407",
+type: "symptom",
+name: "طنين",
+common_name: "طنين في الأذن",
+},
+{
+id: "s_408",
+type: "symptom",
+name: "برودة في القدم وأصابعها",
+common_name: "برودة في القدم وأصابعها",
+},
+{
+id: "s_410",
+type: "symptom",
+name: "انخفاض حرارة الجسم",
+common_name: "انخفاض حرارة الجسم",
+},
+{
+id: "s_412",
+type: "symptom",
+name: "إسهال، رغوي",
+common_name: "إسهال رغوي",
+},
+{
+id: "s_418",
+type: "symptom",
+name: "تيبس العنق",
+common_name: "تصلب العنق",
+},
+{
+id: "s_419",
+type: "symptom",
+name: "الشعور بزيادة في الوزن رغم أنه منخفض",
+common_name: "الشعور بزيادة في الوزن رغم أنه منخفض",
+},
+{
+id: "s_420",
+type: "symptom",
+name: "الكذب بشأن تناول الطعام أو إخفاء الطعام",
+common_name: "الكذب بشأن تناول الطعام أو إخفاء الطعام",
+},
+{
+id: "s_421",
+type: "symptom",
+name: "زيادة الشهوة الجنسية",
+common_name: "زيادة الشهوة الجنسية",
+},
+{
+id: "s_422",
+type: "symptom",
+name: "صوت رخيم",
+common_name: "صوت عميق",
+},
+{
+id: "s_423",
+type: "symptom",
+name: "تعلّق شعور تقدير الذات بالوزن",
+common_name: "تقدير الذات يعتمد على الوزن",
+},
+{
+id: "s_424",
+type: "symptom",
+name: "ألم وجهي، في جانب واحد",
+common_name: "ألم في جانب واحد من الوجه",
+},
+{
+id: "s_425",
+type: "symptom",
+name: "ألم وجهي، طاعن واخز",
+common_name: "ألم طاعن في الوجه",
+},
+{
+id: "s_426",
+type: "symptom",
+name: "ألم وجهي، يتحرّض بتناول الطعام أو اللمس أو تنظيف الأسنان",
+common_name: "ألم في الوجه يتحرض بتناول الطعام أو اللمس أو تنظيف الأسنان",
+},
+{
+id: "s_427",
+type: "symptom",
+name: "ألم وجهي، دوري",
+common_name: "ألم وجهي متكرر",
+},
+{
+id: "s_429",
+type: "symptom",
+name: "أصوات فرقعة في المفصل الفكي عند فتح الفم أو إغلاقه",
+common_name: "أصوات فرقعة في المفصل الفكي عند فتح الفم أو إغلاقه",
+},
+{
+id: "s_430",
+type: "symptom",
+name: "ألم في المفصل الصدغي الفكي عند تحريكه",
+common_name: "ألم في الفك أثناء تحريكه",
+},
+{
+id: "s_433",
+type: "symptom",
+name: "حمامى، على القلفة أو الحشفة",
+common_name: "احمرار في جلد القلفة أو رأس القضيب",
+},
+{
+id: "s_435",
+type: "symptom",
+name: "عدم انفراغ المثانة بشكل كامل",
+common_name: "لا تفرغ المثانة كلياً بعد التبوّل",
+},
+{
+id: "s_436",
+type: "symptom",
+name: "ألم شرجي مستقيمي",
+common_name: "ألم شرجي مستقيمي",
+},
+{
+id: "s_437",
+type: "symptom",
+name: "زُرقة",
+common_name: "جلد ذو لون أزرق رمادي",
+},
+{
+id: "s_471",
+type: "symptom",
+name: "ألم بطني، ينتشر إلى الكتف الأيمن أو لوح الكتف الأيمن",
+common_name: "ألم في البطن ينتشر إلى منطقة الكتف الأيمن",
+},
+{
+id: "s_474",
+type: "symptom",
+name: "وزيز مسموع",
+common_name: "صوت صفير يصدر أثناء التنفس",
+},
+{
+id: "s_476",
+type: "symptom",
+name: "مضض حول الأذن",
+common_name: "ألم عند لمس المنطقة المحيطة بالأذن",
+},
+{
+id: "s_477",
+type: "symptom",
+name: "فقد الصوت",
+common_name: "فقدان الصوت",
+},
+{
+id: "s_478",
+type: "symptom",
+name: "ألم وجهي",
+common_name: "ألم في الوجه",
+},
+{
+id: "s_479",
+type: "symptom",
+name: "رأرأة",
+common_name: "رأرأة",
+},
+{
+id: "s_480",
+type: "symptom",
+name: "تصخم في اليدين أو القدمين أو الوجه",
+common_name: "تصخم في اليدين أو القدمين أو الوجه",
+},
+{
+id: "s_483",
+type: "symptom",
+name: "تغيرات جلدية، على الجفن",
+common_name: "تغيرات جلدية متوضعة على الجفن",
+},
+{
+id: "s_484",
+type: "symptom",
+name: "آفات جفنية، تورم أحمر اللون وطرفها أصفر",
+common_name: "كتلة حمراء اللون ذات طرف أصفر اللون",
+},
+{
+id: "s_485",
+type: "symptom",
+name: "آفات على الجفن، مؤلمة",
+common_name: "تغيرات جلديّة مؤلمة على الأجفان",
+},
+{
+id: "s_486",
+type: "symptom",
+name: "آفات على الجفن، حمراء ودافئة",
+common_name: "احمرار ودفئ في جلد الأجفان",
+},
+{
+id: "s_488",
+type: "symptom",
+name: "حساسية العينين للضياء",
+common_name: "حساسية للضوء",
+},
+{
+id: "s_489",
+type: "symptom",
+name: "مفرزات جافة على الأجفان",
+common_name: "مفرزات جافة على أطراف الجفن",
+},
+{
+id: "s_492",
+type: "symptom",
+name: "احمرار في العين",
+common_name: "عين محمرّة",
+},
+{
+id: "s_493",
+type: "symptom",
+name: "ألم عيني",
+common_name: "ألم في العين",
+},
+{
+id: "s_494",
+type: "symptom",
+name: "فقدان الرؤية المحيطية",
+common_name: "الرؤية النفقية",
+},
+{
+id: "s_497",
+type: "symptom",
+name: "حدقتان غير متناظرتان",
+common_name: "حدقتان غير متماثلتان",
+},
+{
+id: "s_501",
+type: "symptom",
+name: "سوء في تقدير المسافات",
+common_name: "خطأ في تقدير المسافات",
+},
+{
+id: "s_503",
+type: "symptom",
+name: "تشنجات عضلية",
+common_name: "تشنجات عضلية",
+},
+{
+id: "s_504",
+type: "symptom",
+name: "بول رغوي",
+common_name: "بول رغوي",
+},
+{
+id: "s_505",
+type: "symptom",
+name: "إنتانات متكررة",
+common_name: "عدوى متكررة",
+},
+{
+id: "s_506",
+type: "symptom",
+name: "علامة جلدية تدل على لدغ حشرة",
+common_name: "لدغة حشرة",
+},
+{
+id: "s_507",
+type: "symptom",
+name: "الشعور بالاستسلام",
+common_name: "عدم الرغبة بالاستمرار في العيش",
+},
+{
+id: "s_508",
+type: "symptom",
+name: "فقدان لذة الحياة",
+common_name: "عدم القدرة على الاستمتاع بالحياة",
+},
+{
+id: "s_509",
+type: "symptom",
+name: "ألم عند البلع",
+common_name: "بلع مؤلم",
+},
+{
+id: "s_510",
+type: "symptom",
+name: "إفرازات إحليلية عند الضغط على القضيب",
+common_name: "خروج مفرزات عند الضغط على القضيب",
+},
+{
+id: "s_513",
+type: "symptom",
+name: "اللقمة الهستيرية",
+common_name: "الشعور بوجود جسم غريب عالق في الحلق",
+},
+{
+id: "s_514",
+type: "symptom",
+name: "تبدد الواقع",
+common_name: "الشعور بالانفصال عن العالم المحيط بالشخص",
+},
+{
+id: "s_518",
+type: "symptom",
+name: "خدر",
+common_name: "تنميل",
+},
+{
+id: "s_524",
+type: "symptom",
+name: "سليلة أنفية",
+common_name: "بوليب أنفي",
+},
+{
+id: "s_525",
+type: "symptom",
+name: "براز كريه الرائحة",
+common_name: "براز كريه الرائحة",
+},
+{
+id: "s_526",
+type: "symptom",
+name: "سعال، منتج لقشع أخضر أو أصفر",
+common_name: "سعال منتج لمخاط سميك أخضر أو أصفر اللون",
+},
+{
+id: "s_528",
+type: "symptom",
+name: "شرب الكحول، منذ أقل من 24 ساعة",
+common_name: "شرب الكحول منذ أقل من 24 ساعة",
+},
+{
+id: "s_529",
+type: "symptom",
+name: "تضخم في الغدة النكفية",
+common_name: "تضخم في الغدة النكفية",
+},
+{
+id: "s_530",
+type: "symptom",
+name: "ارتفاع مفاجئ في ضغط الدم",
+common_name: "ارتفاع مفاجئ في ضغط الدم",
+},
+{
+id: "s_531",
+type: "symptom",
+name: "أخماج متكررة، في السبيل التنفسي العلوي",
+common_name: "سيلان أنف وسعال متكررين",
+},
+{
+id: "s_532",
+type: "symptom",
+name: "أخماج متكررة، في السبيل التنفس السفلي",
+common_name: "التهاب القصبات المتكرر",
+},
+{
+id: "s_533",
+type: "symptom",
+name: "انخفاض ضغط الدم",
+common_name: "ضغط دم منخفض",
+},
+{
+id: "s_534",
+type: "symptom",
+name: "بطء القلب",
+common_name: "انخفاض معدّل ضربات القلب",
+},
+{
+id: "s_535",
+type: "symptom",
+name: "ضعف منعكس الحدقة تجاه الضوء",
+common_name: "ضعف منعكس الحدقة تجاه الضوء",
+},
+{
+id: "s_536",
+type: "symptom",
+name: "توسع الحدقتين",
+common_name: "حدقتين متوسعتين",
+},
+{
+id: "s_537",
+type: "symptom",
+name: "تضيق الحدقتين",
+common_name: "صغر حجم البؤبؤين",
+},
+{
+id: "s_538",
+type: "symptom",
+name: "رجفان",
+common_name: "رجفة في العضلات",
+},
+{
+id: "s_539",
+type: "symptom",
+name: "صرع دون فقدان للوعي",
+common_name: "اختلاج دون فقدان للوعي",
+},
+{
+id: "s_540",
+type: "symptom",
+name: "تهيّج",
+common_name: "سرعة الغضب",
+},
+{
+id: "s_541",
+type: "symptom",
+name: "هبوط الضغط الانتصابي",
+common_name: "الشعور بالدوخة أو الإغماء بعد الوقوف بسرعة",
+},
+{
+id: "s_542",
+type: "symptom",
+name: "جفاف الجلد",
+common_name: "جفاف الجلد",
+},
+{
+id: "s_543",
+type: "symptom",
+name: "ارتفاع التوتر الشرياني",
+common_name: "ارتفاع ضغط الدم",
+},
+{
+id: "s_545",
+type: "symptom",
+name: "توسع الشعريات",
+common_name: "أوعية عنكبوتية",
+},
+{
+id: "s_547",
+type: "symptom",
+name: "ثر للحليب عند امرأة",
+common_name: "سيلان الحليب من الحلمة خارج أوقات الإرضاع",
+},
+{
+id: "s_550",
+type: "symptom",
+name: "ضبابية عدسة العين",
+common_name: "غباشة في إحدى أو كلتا العينين",
+},
+{
+id: "s_551",
+type: "symptom",
+name: "ألم سني",
+common_name: "وجع في سن",
+},
+{
+id: "s_553",
+type: "symptom",
+name: "زرقة، في الأصابع",
+common_name: "أصابع ذات لون أزرق مائل للرمادي",
+},
+{
+id: "s_554",
+type: "symptom",
+name: "ألم في الطرف العلوي، في الأصابع أو اليد",
+common_name: "ألم في اليد أو الأصابع",
+},
+{
+id: "s_555",
+type: "symptom",
+name: "خدر في أصابع اليد",
+common_name: "خدر في أصابع اليد",
+},
+{
+id: "s_556",
+type: "symptom",
+name: "برودة في اليد وأصابعها",
+common_name: "برودة في اليد وأصابعها",
+},
+{
+id: "s_557",
+type: "symptom",
+name: "حمامى، في اليد",
+common_name: "احمرار في اليد",
+},
+{
+id: "s_558",
+type: "symptom",
+name: "تشتد الأعراض بالبرد",
+common_name: "زيادة الأعراض بالبرد",
+},
+{
+id: "s_561",
+type: "symptom",
+name: "تجشؤ",
+common_name: "تجشؤ",
+},
+{
+id: "s_562",
+type: "symptom",
+name: "وذمة، انطباعيّة",
+common_name: "وذمة انطباعية",
+},
+{
+id: "s_563",
+type: "symptom",
+name: "زلة تنفسية، اضطجاعية",
+common_name: "ضيق في التنفس أثناء الاستلقاء",
+},
+{
+id: "s_564",
+type: "symptom",
+name: "ضمور عضلات اليدين",
+common_name: "ضمور في عضلات اليدين",
+},
+{
+id: "s_567",
+type: "symptom",
+name: "علامة مورفي",
+common_name: "ألم في البطن عند الشهيق العميق ويتحرض بالضغط على الجزء العلوي الأيمن من البطن",
+},
+{
+id: "s_568",
+type: "symptom",
+name: "الاشمئزاز من النفس بعد الإفراط في تناول الطعام",
+common_name: "الاشمئزاز من النفس بعد الإفراط في تناول الطعام",
+},
+{
+id: "s_569",
+type: "symptom",
+name: "براز شاحب أو بلون الطين",
+common_name: "براز شاحب",
+},
+{
+id: "s_570",
+type: "symptom",
+name: "قيح عيني",
+common_name: "تجمع للقيح في مقدمة العين",
+},
+{
+id: "s_571",
+type: "symptom",
+name: "صلابة",
+common_name: "فرط توتر العضلات",
+},
+{
+id: "s_572",
+type: "symptom",
+name: "نقص التعابير الوجهية",
+common_name: "وجه جامد بدون تعابير أو حركات",
+},
+{
+id: "s_575",
+type: "symptom",
+name: "تيبس مفصلي",
+common_name: "تيبس في حركة المفاصل",
+},
+{
+id: "s_576",
+type: "symptom",
+name: "ألم مفصلي، يشتد خلال الطقس البارد والرطب",
+common_name: "ألم في المفاصل يزداد في الطقس البارد والرطب",
+},
+{
+id: "s_578",
+type: "symptom",
+name: "ألم في إحدى القدمين",
+common_name: "قدم مؤلمة",
+},
+{
+id: "s_579",
+type: "symptom",
+name: "ألم في الطرف السفلي",
+common_name: "ألم في الطرف السفلي",
+},
+{
+id: "s_580",
+type: "symptom",
+name: "ألم في الطرف العلوي",
+common_name: "ألم في الطرف العلوي",
+},
+{
+id: "s_581",
+type: "symptom",
+name: "ألم مفصلي، في ركبة واحدة",
+common_name: "ألم في ركبة واحدة",
+},
+{
+id: "s_582",
+type: "symptom",
+name: "نوبة قلق‎",
+common_name: "نوبة قلق‎",
+},
+{
+id: "s_583",
+type: "symptom",
+name: "قلق عام",
+common_name: "قلق عام",
+},
+{
+id: "s_584",
+type: "symptom",
+name: "شامة أو وحمة غريبة ومشبوهة، تغير في شكلها",
+common_name: "تغير في شكل شامة أو وحمة الولادة",
+},
+{
+id: "s_585",
+type: "symptom",
+name: "شامة أو وحمة غريبة ومشبوهة، تغير لونها",
+common_name: "تغيّر في لون شامة أو وحمة",
+},
+{
+id: "s_586",
+type: "symptom",
+name: "التثدي",
+common_name: "تضخم الثدي عند رجل",
+},
+{
+id: "s_588",
+type: "symptom",
+name: "شرب الكحول، زيادة تحمُّل الكحول",
+common_name: "الحاجة لشرب كميات أكبر من الكحول للوصول إلى حالة السُكر",
+},
+{
+id: "s_590",
+type: "symptom",
+name: "رجفان في اللسان",
+common_name: "رجفة في اللسان",
+},
+{
+id: "s_593",
+type: "symptom",
+name: "تطاول زمن النزف",
+common_name: "تطاول زمن النزف",
+},
+{
+id: "s_594",
+type: "symptom",
+name: "نمش",
+common_name: "نقاط حمراء على الجلد قطرها أقل من 3 ميليمتر لا تختفي بعد الضغط عليها",
+},
+{
+id: "s_598",
+type: "symptom",
+name: "خرّاج",
+common_name: "تورّم في الجلد مصحوب باحمرار وألم فيه",
+},
+{
+id: "s_603",
+type: "symptom",
+name: "تبقرط الأظافر",
+common_name: "تضخم أطرف الأصابع",
+},
+{
+id: "s_604",
+type: "symptom",
+name: "صداع، واخز",
+common_name: "صداع طاعن",
+},
+{
+id: "s_605",
+type: "symptom",
+name: "نوب من الصداع خلال فترة معينة",
+common_name: "نوب من الصداع",
+},
+{
+id: "s_606",
+type: "symptom",
+name: "رؤية لمعان أمام العين",
+common_name: "ومضات في العين",
+},
+{
+id: "s_607",
+type: "symptom",
+name: "احمرار اللسان",
+common_name: "لسان محمر بشكل غير طبيعي",
+},
+{
+id: "s_608",
+type: "symptom",
+name: "التهاب الشفة الزاوي",
+common_name: "تشقق زوايا الشفتين",
+},
+{
+id: "s_609",
+type: "symptom",
+name: "مضض في الثدي، أحادي الجانب",
+common_name: "ألم في واحد فقط من الثديين عند الضغط عليه",
+},
+{
+id: "s_610",
+type: "symptom",
+name: "غشاء على اللوزتين",
+common_name: "بقع بيضاء على اللوزتين",
+},
+{
+id: "s_611",
+type: "symptom",
+name: "بول داكن",
+common_name: "بول غامق اللون",
+},
+{
+id: "s_612",
+type: "symptom",
+name: "ألم عظمي",
+common_name: "ألم في العظام",
+},
+{
+id: "s_613",
+type: "symptom",
+name: "لويحة صفراء",
+common_name: "آفات جلدية صفراء على الجفنين",
+},
+{
+id: "s_614",
+type: "symptom",
+name: "حكة بعد حمام ساخن",
+common_name: "حكة بعد حمام ساخن",
+},
+{
+id: "s_616",
+type: "symptom",
+name: "وذمة، في الوجه",
+common_name: "تورّم في الوجه",
+},
+{
+id: "s_618",
+type: "symptom",
+name: "الطلوان المشعر",
+common_name: "الصداف",
+},
+{
+id: "s_622",
+type: "symptom",
+name: "ضمور الكتلة العضلية",
+common_name: "ضمور العضلات",
+},
+{
+id: "s_623",
+type: "symptom",
+name: "وذمة، في الكاحلين",
+common_name: "كاحلين متورمين",
+},
+{
+id: "s_625",
+type: "symptom",
+name: "صداع، يشتد بثني الرأس نحو الأمام",
+common_name: "ألم رأس عند إمالة الرأس إلى الإمام",
+},
+{
+id: "s_629",
+type: "symptom",
+name: "الشعور بالعجز",
+common_name: "الشعور بالعجز",
+},
+{
+id: "s_630",
+type: "symptom",
+name: "حكة فرجية مهبلية",
+common_name: "حكة فرجية مهبلية",
+},
+{
+id: "s_631",
+type: "symptom",
+name: "ضعف التركيز",
+common_name: "ضعف الانتباه",
+},
+{
+id: "s_632",
+type: "symptom",
+name: "الشعور باليأس",
+common_name: "الشعور باليأس",
+},
+{
+id: "s_633",
+type: "symptom",
+name: "نوبة مزاج مرتفع",
+common_name: "مزاج مرتفع",
+},
+{
+id: "s_634",
+type: "symptom",
+name: "نقص الحاجة للنوم",
+common_name: "نقص الحاجة للنوم",
+},
+{
+id: "s_635",
+type: "symptom",
+name: "المجادلة",
+common_name: "الرغبة بالجدال والدخول في نزاع ونقاش مع الآخرين",
+},
+{
+id: "s_636",
+type: "symptom",
+name: "تهوّر مالي",
+common_name: "تهوّر مالي",
+},
+{
+id: "s_637",
+type: "symptom",
+name: "تسارع وتيرة التفكير والكلام",
+common_name: "تسارع وتيرة التفكير والكلام",
+},
+{
+id: "s_640",
+type: "symptom",
+name: "زحير",
+common_name: "الشعور بتغوّط غير تام",
+},
+{
+id: "s_641",
+type: "symptom",
+name: "عدم استمساك برازي",
+common_name: "تسرّب غير إرادي للبراز",
+},
+{
+id: "s_642",
+type: "symptom",
+name: "إفرازات مخاطية في البراز",
+common_name: "مخاط في البراز",
+},
+{
+id: "s_646",
+type: "symptom",
+name: "تقلبات المزاج",
+common_name: "تقلبات المزاج",
+},
+{
+id: "s_647",
+type: "symptom",
+name: "توهمات بصرية بسيطة",
+common_name: "توهمات بصرية بسيطة",
+},
+{
+id: "s_648",
+type: "symptom",
+name: "توهمات سمعية بسيطة",
+common_name: "توهمات سمعية بسيطة",
+},
+{
+id: "s_649",
+type: "symptom",
+name: "بطء حركي نفسي",
+common_name: "بطء حركي نفسي",
+},
+{
+id: "s_650",
+type: "symptom",
+name: "ضعف عضلي",
+common_name: "ضعف في العضلات",
+},
+{
+id: "s_651",
+type: "symptom",
+name: "رَنَح",
+common_name: "اضطرابات في التناسق الحركي",
+},
+{
+id: "s_652",
+type: "symptom",
+name: "المُنعكسات الوترِية العميقة، ضعيفة",
+common_name: "ضعف المنعكسات الوترية العميقة",
+},
+{
+id: "s_653",
+type: "symptom",
+name: "تغير في اتساع حدقة العين",
+common_name: "تغير في اتساع حدقة العين",
+},
+{
+id: "s_659",
+type: "symptom",
+name: "العزلة الاجتماعية",
+common_name: "العزلة الاجتماعية",
+},
+{
+id: "s_660",
+type: "symptom",
+name: "نوبات غضب",
+common_name: "نوبات غضب",
+},
+{
+id: "s_662",
+type: "symptom",
+name: "سعال، منتج صباحاً",
+common_name: "سعال منتج لبلغم في الصباح",
+},
+{
+id: "s_663",
+type: "symptom",
+name: "ألم في الظهر، قطني، ينتشر إلى المنطقة الإربيّة",
+common_name: "ألم في أسفل الظهر ينتشر إلى المغبن",
+},
+{
+id: "s_664",
+type: "symptom",
+name: "بقع كوبليك",
+common_name: "بقع بيضاء صغيرة بحواف حمراء في الفم على الوجه الداخلي للخدين",
+},
+{
+id: "s_665",
+type: "symptom",
+name: "طفح الحصبة",
+common_name: "طفح الحصبة",
+},
+{
+id: "s_666",
+type: "symptom",
+name: "بقع مرقطة كالفهد على الجلد",
+common_name: "بقع بلون الطوب تشبه الفهد المرقط",
+},
+{
+id: "s_668",
+type: "symptom",
+name: "خوص وحيد الجانب",
+common_name: "عين غائرة",
+},
+{
+id: "s_669",
+type: "symptom",
+name: "لاتعرّق، في الوجه، أحادي الجانب",
+common_name: "غياب ظاهرة التعرق على أحد جانبي الوجه",
+},
+{
+id: "s_670",
+type: "symptom",
+name: "سعال، منتج لقشع رغوي وردي اللون",
+common_name: "سعال منتج لبلغم زهري اللون",
+},
+{
+id: "s_671",
+type: "symptom",
+name: "توسّع أوردة العنق",
+common_name: "انتفاخ أوردة الرقبة",
+},
+{
+id: "s_673",
+type: "symptom",
+name: "تضخم اللسان",
+common_name: "انتفاخ اللسان",
+},
+{
+id: "s_675",
+type: "symptom",
+name: "وهم الاضطهاد",
+common_name: "الاعتقاد بأن الشخص مراقب أو أن الآخرين يتآمرون عليه أو يحاولون إعاقته ومنعه من الوصول لمبتغاه",
+},
+{
+id: "s_676",
+type: "symptom",
+name: "وهم الإسناد",
+common_name: "الاعتقاد بوجود رسائل سرية خاصة موجهة للشخص",
+},
+{
+id: "s_677",
+type: "symptom",
+name: "توهم العظمة",
+common_name: "جنون العظمة",
+},
+{
+id: "s_678",
+type: "symptom",
+name: "الوهم العدمي",
+common_name: "الاعتقاد بأن الشخص أو جزء منه ميت أو غير موجود كلياً",
+},
+{
+id: "s_679",
+type: "symptom",
+name: "الوهم المَرَضي",
+common_name: "الاعتقاد بالإصابة بمرض رغم نفي الأطباء ذلك",
+},
+{
+id: "s_680",
+type: "symptom",
+name: "وهم التأثير",
+common_name: "الاعتقاد بأن أفكار الشخص أو تصرفاته يتحكم بها شخص أو جهة خارجية",
+},
+{
+id: "s_681",
+type: "symptom",
+name: "هلوسات، بصرية",
+common_name: "رؤية أشياء لا يراها الآخرون",
+},
+{
+id: "s_682",
+type: "symptom",
+name: "هلوسات، سمعية",
+common_name: "سماع كلام أو أصوات لا يسمعها الآخرون",
+},
+{
+id: "s_689",
+type: "symptom",
+name: "التبول بكميات صغيرة",
+common_name: "التبول بكميات صغيرة",
+},
+{
+id: "s_690",
+type: "symptom",
+name: "الإلحاح البولي",
+common_name: "رغبة ملحة بالتبول",
+},
+{
+id: "s_691",
+type: "symptom",
+name: "صعوبة البدء في التبول",
+common_name: "صعوبة البدء في التبول",
+},
+{
+id: "s_692",
+type: "symptom",
+name: "احمرار وتوذّم في مخاطية الفم",
+common_name: "احمرار وتورم داخل الفم",
+},
+{
+id: "s_694",
+type: "symptom",
+name: "آفات فموية",
+common_name: "تغيرات داخل الفم",
+},
+{
+id: "s_696",
+type: "symptom",
+name: "احتباس البول",
+common_name: "عدم القدرة على التبول عندما تكون المثانة ممتلئة",
+},
+{
+id: "s_697",
+type: "symptom",
+name: "مرونة الجلد منخفضة",
+common_name: "انخفاض مرونة الجلد",
+},
+{
+id: "s_698",
+type: "symptom",
+name: "غؤور ثنائي الجانب في العينين",
+common_name: "غؤور كلا العينين",
+},
+{
+id: "s_699",
+type: "symptom",
+name: "وذمة، تتعلّق بوضعية الجسم",
+common_name: "تورم يعتمد على وضعية الجسم",
+},
+{
+id: "s_700",
+type: "symptom",
+name: "وذمة",
+common_name: "تورم",
+},
+{
+id: "s_701",
+type: "symptom",
+name: "وذمة، تشتد أثناء النهار",
+common_name: "تورم يزداد خلال النهار",
+},
+{
+id: "s_711",
+type: "symptom",
+name: "نساوة تفارقية لحادث رضي",
+common_name: "صعوبة تذكّر تفاصيل الحدث الراض",
+},
+{
+id: "s_715",
+type: "symptom",
+name: "عطاس",
+common_name: "عطاس",
+},
+{
+id: "s_716",
+type: "symptom",
+name: "ضعف في الوظائف الاجتماعية",
+common_name: "صعوبة في أداء المهام في المنزل أو العمل أو المدرسة",
+},
+{
+id: "s_725",
+type: "symptom",
+name: "المبالغة في القلق على صحة الطفل",
+common_name: "المبالغة في القلق على صحة الطفل",
+},
+{
+id: "s_727",
+type: "symptom",
+name: "صعوبة في توثيق العلاقة مع رضيع",
+common_name: "صعوبة في توثيق العلاقة مع طفل",
+},
+{
+id: "s_728",
+type: "symptom",
+name: "أفكار تتعلق بإيذاء طفلك",
+common_name: "أفكار تتعلق بإيذاء طفلك",
+},
+{
+id: "s_729",
+type: "symptom",
+name: "أفكار تتعلّق بالرغبة في قتل طفلك",
+common_name: "أفكار تتعلّق بالرغبة في قتل طفلك",
+},
+{
+id: "s_730",
+type: "symptom",
+name: "تقلبات مزاج، ذات نمط نهاري",
+common_name: "نفسية ومزاج أفضل في الليل منه في النهار",
+},
+{
+id: "s_732",
+type: "symptom",
+name: "ألم في الطرف السفلي، في الربلة، شديد أثناء المشي، عرج متقطع",
+common_name: "ألم في الساق أثناء القيام بمجهود ويخف بالراحة",
+},
+{
+id: "s_733",
+type: "symptom",
+name: "اضطراب الانتصاب",
+common_name: "ضعف الانتصاب",
+},
+{
+id: "s_734",
+type: "symptom",
+name: "عرج متقطع في القسم العلوي من الطرف السفلي",
+common_name: "ألم في الأرداف والفخذين يظهر عند القيام بمجهود جسدي ويختفي عند الراحة لفترة قصيرة",
+},
+{
+id: "s_735",
+type: "symptom",
+name: "ضعف النبض في الساقين",
+common_name: "ضعف النبض في الساقين",
+},
+{
+id: "s_746",
+type: "symptom",
+name: "اضطراب أو ضعف الحس العميق",
+common_name: "اضطراب أو ضعف الحس العميق",
+},
+{
+id: "s_747",
+type: "symptom",
+name: "غياب أو اضطراب حس الحرارة",
+common_name: "غياب أو اضطراب حس الحرارة",
+},
+{
+id: "s_750",
+type: "symptom",
+name: "اضطراب في حركة كرة العين",
+common_name: "صعوبة في تحريك العينين",
+},
+{
+id: "s_756",
+type: "symptom",
+name: "حطاطات غوترون",
+common_name: "نتوءات حمراء مؤلمة على الجلد الذي يغطي مفاصل اليد والأصابع",
+},
+{
+id: "s_757",
+type: "symptom",
+name: "علامة هولستر",
+common_name: "احمرار السطح الجانبي للفخذ والوركين",
+},
+{
+id: "s_758",
+type: "symptom",
+name: "حمامى على الكتفين ومؤخرة العنق",
+common_name: "احمرار في الكتفين والوجه الخلفي من الرقبة",
+},
+{
+id: "s_759",
+type: "symptom",
+name: "حمامى بشكل V على الصدر",
+common_name: "احمرار بشكل V على الصدر",
+},
+{
+id: "s_760",
+type: "symptom",
+name: "يد الميكانيكي",
+common_name: "تسمك وتشقق في جلد اليدين",
+},
+{
+id: "s_762",
+type: "symptom",
+name: "طفح فرفري",
+common_name: "طفح بشكل بقع حمراء أو زهرية يزيد قطرها عن 3 مم ولا يزول لونها بالضغط عليها",
+},
+{
+id: "s_763",
+type: "symptom",
+name: "تزرق شبكي",
+common_name: "جلد مبقع",
+},
+{
+id: "s_768",
+type: "symptom",
+name: "وهم الخطيئة",
+common_name: "الاعتقاد بأن الشخص شرير أو مذنب أو أنه مسؤول عن كارثة كبيرة",
+},
+{
+id: "s_769",
+type: "symptom",
+name: "الوهم الغريب",
+common_name: "معتقدات غريبة أو مستحيلة الحدوث، كالاعتقاد بوجود كائنات فضائية أو الاستنساخ أو الانتقال الفوري من مكان لآخر",
+},
+{
+id: "s_770",
+type: "symptom",
+name: "إهمال النظافة الشخصية",
+common_name: "إهمال النظافة الشخصية",
+},
+{
+id: "s_773",
+type: "symptom",
+name: "سوء التوافق الاجتماعي",
+common_name: "سوء التوافق الاجتماعي",
+},
+{
+id: "s_776",
+type: "symptom",
+name: "الاستيقاظ المبكر",
+common_name: "الاستيقاظ المبكر",
+},
+{
+id: "s_777",
+type: "symptom",
+name: "النوم لفترات طويلة",
+common_name: "النوم لفترات طويلة",
+},
+{
+id: "s_778",
+type: "symptom",
+name: "انعدام الاحترام في العلاقات الاجتماعية",
+common_name: "انعدام التكلف في العلاقات الاجتماعية",
+},
+{
+id: "s_779",
+type: "symptom",
+name: "اتخاذ قرارات طائشة أو متهوّرة",
+common_name: "اتخاذ قرارات طائشة أو متهوّرة",
+},
+{
+id: "s_780",
+type: "symptom",
+name: "وهم ديني",
+common_name: "الاعتقاد بأن الشخص نبي مرسل من الله أو أنه إله",
+},
+{
+id: "s_789",
+type: "symptom",
+name: "شرى يتحرّض بالخدش",
+common_name: "طفح جلدي حاك بعد الخدش",
+},
+{
+id: "s_790",
+type: "symptom",
+name: "شرى يتحرض بالضغط المديد على الجلد",
+common_name: "طفح جلدي حاك يظهر بعد الضغط المديد على الجلد",
+},
+{
+id: "s_791",
+type: "symptom",
+name: "شرى يتحرّض بالبرد",
+common_name: "طفح جلدي حاك يظهر بعد التعرض للبرد أو الماء أو الرياح",
+},
+{
+id: "s_793",
+type: "symptom",
+name: "شرى يتحرّض بالحرارة",
+common_name: "طفح جلدي حاك يظهر بعد التعرض للحرارة",
+},
+{
+id: "s_795",
+type: "symptom",
+name: "براز رفيع كالقلم",
+common_name: "براز رفيع كالقلم",
+},
+{
+id: "s_799",
+type: "symptom",
+name: "صداع، يشتد صباحاً",
+common_name: "ألم رأس صباحي",
+},
+{
+id: "s_801",
+type: "symptom",
+name: "إقياء قذفي",
+common_name: "إقياء يقذف بقوة كبيرة",
+},
+{
+id: "s_803",
+type: "symptom",
+name: "وذمة الحليمة البصرية",
+common_name: "وذمة الحليمة البصرية",
+},
+{
+id: "s_814",
+type: "symptom",
+name: "عمى شقي صدغي مزدوج",
+common_name: "عمى شقي صدغي مزدوج",
+},
+{
+id: "s_817",
+type: "symptom",
+name: "شرب الكحول، توق شديد للشرب",
+common_name: "رغبة شديدة ومستمرة بشرب الكحول",
+},
+{
+id: "s_818",
+type: "symptom",
+name: "شرب الكحول، متلازمة السحب",
+common_name: "متلازمة الانسحاب الكحولي",
+},
+{
+id: "s_820",
+type: "symptom",
+name: "شرب الكحول، إهمال الواجبات بسبب الكحول",
+common_name: "إهمال العائلة أو العمل أو الهوايات بسبب الكحول",
+},
+{
+id: "s_824",
+type: "symptom",
+name: "شرب الكحول، انتهاك المعايير الاجتماعية تحت تأثير الكحول",
+common_name: "انتهاك التقاليد الاجتماعية بعد شرب الكحول",
+},
+{
+id: "s_825",
+type: "symptom",
+name: "ضعف الذاكرة، المتعلقة بالكحول",
+common_name: "نساوة متعلقة بالكحول",
+},
+{
+id: "s_828",
+type: "symptom",
+name: "شرب الكحول، وحيداً",
+common_name: "شرب الكحول وحيداً",
+},
+{
+id: "s_829",
+type: "symptom",
+name: "شرب الكحول، سراً",
+common_name: "شرب الكحول سراً",
+},
+{
+id: "s_830",
+type: "symptom",
+name: "ضعف الذاكرة، قصيرة الأمد",
+common_name: "ضعف الذاكرة قصيرة الأمد",
+},
+{
+id: "s_831",
+type: "symptom",
+name: "تخريف",
+common_name: "تخريف",
+},
+{
+id: "s_833",
+type: "symptom",
+name: "عَمَه",
+common_name: "عدم القدرة على التعرف على الأشياء أو الأشخاص أو الأصوات أو الأشكال أو الروائح",
+},
+{
+id: "s_835",
+type: "symptom",
+name: "نوبات مزاج اكتئابي، نمط موسمي",
+common_name: "أعراض اكتئاب تحدث في نفس الوقت كل سنة",
+},
+{
+id: "s_836",
+type: "symptom",
+name: "لجلجة فصامية",
+common_name: "لجلجة فصامية",
+},
+{
+id: "s_837",
+type: "symptom",
+name: "حبسة كلامية",
+common_name: "عسر النطق",
+},
+{
+id: "s_838",
+type: "symptom",
+name: "اضطراب التفكير المنطقي",
+common_name: "اضطراب التفكير المنطقي",
+},
+{
+id: "s_856",
+type: "symptom",
+name: "وزيز بإصغاء الصدر",
+common_name: "وزيز بإصغاء الصدر",
+},
+{
+id: "s_857",
+type: "symptom",
+name: "خراخر ناعمة بإصغاء الصدر",
+common_name: "خراخر ناعمة بإصغاء الصدر",
+},
+{
+id: "s_866",
+type: "symptom",
+name: "علامة تروسو للتكزز الكامن",
+common_name: "علامة تروسو للتكزز الكامن",
+},
+{
+id: "s_867",
+type: "symptom",
+name: "علامة شيفوستيك",
+common_name: "علامة شيفوستيك",
+},
+{
+id: "s_868",
+type: "symptom",
+name: "تشنجات في العضلة الدويرية الفموية",
+common_name: "تشنجات في العضلة الدويرية الفموية",
+},
+{
+id: "s_869",
+type: "symptom",
+name: "القدم القفداء الفحجاء",
+common_name: "القدم القفداء الفحجاء",
+},
+{
+id: "s_878",
+type: "symptom",
+name: "المنعكسات الوترية العميقة، مشتدة",
+common_name: "اشتداد المنعكسات الوترية العميقة",
+},
+{
+id: "s_884",
+type: "symptom",
+name: "رُهاب الخلاء",
+common_name: "رهاب الساح",
+},
+{
+id: "s_917",
+type: "symptom",
+name: "الأرق",
+common_name: "الأرق",
+},
+{
+id: "s_935",
+type: "symptom",
+name: "ضعف حاسة السمع، بشدّة ومُدد متفاوتة",
+common_name: "ضعف حاسة السمع بدرجات متفاوتة في الشدة وفترات زمنيّة متغيّرة",
+},
+{
+id: "s_936",
+type: "symptom",
+name: "دوار، الشعور بدوران المحيط",
+common_name: "الشعور بأن المحيط يدور",
+},
+{
+id: "s_957",
+type: "symptom",
+name: "عمى شقي توافقي",
+common_name: "فقدان الساحة البصرية في نفس الجانب من كلتا العينين",
+},
+{
+id: "s_959",
+type: "symptom",
+name: "فقدان الحس في الوجه",
+common_name: "غياب الإحساس في الوجه",
+},
+{
+id: "s_962",
+type: "symptom",
+name: "عسر البلع",
+common_name: "صعوبة في البلع",
+},
+{
+id: "s_964",
+type: "symptom",
+name: "انحراف الجسم لأحد الجانبين",
+common_name: "السقوط أو ترنّح المشي باتجاه معين",
+},
+{
+id: "s_965",
+type: "symptom",
+name: "ألم في العنق، أحادي الجانب",
+common_name: "ألم أحادي الجانب في الرقبة",
+},
+{
+id: "s_967",
+type: "symptom",
+name: "انخفاض في حدة البصر",
+common_name: "انخفاض في حدة الرؤية",
+},
+{
+id: "s_970",
+type: "symptom",
+name: "صداع، قفوي",
+common_name: "ألم في الرأس في الجزء الخلفي منه",
+},
+{
+id: "s_971",
+type: "symptom",
+name: "خدر، في الوجه",
+common_name: "تنميل في الوجه",
+},
+{
+id: "s_972",
+type: "symptom",
+name: "غياب الحس في كلا الذراعين",
+common_name: "نقص الإحساس في كلا الذراعين",
+},
+{
+id: "s_973",
+type: "symptom",
+name: "خدر، في كلا الطرفين العلويين",
+common_name: "تنميل في كلا الطرفين العلويين",
+},
+{
+id: "s_989",
+type: "symptom",
+name: "علامات هرمية",
+common_name: "علامات هرمية",
+},
+{
+id: "s_990",
+type: "symptom",
+name: "علامات جبهية",
+common_name: "علامات جبهية",
+},
+{
+id: "s_991",
+type: "symptom",
+name: "اشتداد منعكس الفك السفلي",
+common_name: "منعكس رجفاني فكي",
+},
+{
+id: "s_995",
+type: "symptom",
+name: "ضمور عضلة اللسان",
+common_name: "صغر في حجم اللسان",
+},
+{
+id: "s_996",
+type: "symptom",
+name: "خلل المقوية الرقبية",
+common_name: "خلل المقوية الرقبية",
+},
+{
+id: "s_1006",
+type: "symptom",
+name: "غياب الدافع أو المحفز",
+common_name: "غياب الدافع أو المحفز",
+},
+{
+id: "s_1007",
+type: "symptom",
+name: "غياب الوازع",
+common_name: "غياب الوازع",
+},
+{
+id: "s_1010",
+type: "symptom",
+name: "اللاأدائية",
+common_name: "العمه الحركي",
+},
+{
+id: "s_1012",
+type: "symptom",
+name: "اللاكتابيّة",
+common_name: "فقدان القدرة على الكتابة",
+},
+{
+id: "s_1013",
+type: "symptom",
+name: "لاأدائيّة في عضلات الوجه والشدق المحيطة بالفم",
+common_name: "لاأدائيّة في عضلات الوجه والشدق المحيطة بالفم",
+},
+{
+id: "s_1018",
+type: "symptom",
+name: "المداومة",
+common_name: "المداومة",
+},
+{
+id: "s_1021",
+type: "symptom",
+name: "ضعف المنعكسات السطحية",
+common_name: "ضعف المنعكسات السطحية",
+},
+{
+id: "s_1023",
+type: "symptom",
+name: "علامة بابنسكي",
+common_name: "علامة بابنسكي",
+},
+{
+id: "s_1027",
+type: "symptom",
+name: "غياب الرؤية في ربع علوي",
+common_name: "غياب الرؤية في ربع علوي",
+},
+{
+id: "s_1028",
+type: "symptom",
+name: "العمه اللفظي السمعي",
+common_name: "العمه اللفظي السمعي",
+},
+{
+id: "s_1032",
+type: "symptom",
+name: "عمه الموسيقى",
+common_name: "فقدان القدرة على تمييز أو إصدار الأصوات الموسيقية",
+},
+{
+id: "s_1034",
+type: "symptom",
+name: "عمه بصري",
+common_name: "عمه بصري",
+},
+{
+id: "s_1035",
+type: "symptom",
+name: "ضعف الاستجابة بالخوف",
+common_name: "عدم وجود الخوف",
+},
+{
+id: "s_1045",
+type: "symptom",
+name: "تضخم الطحال",
+common_name: "طحال متضخم",
+},
+{
+id: "s_1050",
+type: "symptom",
+name: "سقوط الأسنان",
+common_name: "فقدان أسنان",
+},
+{
+id: "s_1051",
+type: "symptom",
+name: "ضخامة كبدية",
+common_name: "ضخامة كبدية",
+},
+{
+id: "s_1052",
+type: "symptom",
+name: "تضخم الكليتين",
+common_name: "تضخم الكليتين",
+},
+{
+id: "s_1054",
+type: "symptom",
+name: "علامة ليرميت",
+common_name: "علامة ليرميت",
+},
+{
+id: "s_1055",
+type: "symptom",
+name: "التهاب العصب خلف المقلة",
+common_name: "التهاب العصب خلف المقلة",
+},
+{
+id: "s_1056",
+type: "symptom",
+name: "ألم العصب مثلث التوائم",
+common_name: "ألم العصب مثلث التوائم",
+},
+{
+id: "s_1057",
+type: "symptom",
+name: "تضخم في الغدد اللعابية",
+common_name: "تضخم في الغدد اللعابية",
+},
+{
+id: "s_1063",
+type: "symptom",
+name: "خدر، في كلا الطرفين السفليين",
+common_name: "تنميل في كلا الطرفين السفليين",
+},
+{
+id: "s_1066",
+type: "symptom",
+name: "خدر في كلا الطرفين العلويين، بشكل القفاز",
+common_name: "خدر في كلا الطرفين العلويين، بشكل القفاز",
+},
+{
+id: "s_1067",
+type: "symptom",
+name: "احمرار الوجه المفاجىء",
+common_name: "احمرار الوجه بشكل مفاجىء",
+},
+{
+id: "s_1068",
+type: "symptom",
+name: "خدر، متناظر",
+common_name: "تنميل متناظر",
+},
+{
+id: "s_1069",
+type: "symptom",
+name: "خدر صاعد",
+common_name: "تنميل صاعد في الجسم",
+},
+{
+id: "s_1070",
+type: "symptom",
+name: "غياب شعور الاهتزاز في نهايات الأطراف",
+common_name: "غياب شعور الاهتزاز في نهايات الأطراف",
+},
+{
+id: "s_1072",
+type: "symptom",
+name: "غياب المُنعكسات العميقة",
+common_name: "غياب المُنعكسات العميقة",
+},
+{
+id: "s_1073",
+type: "symptom",
+name: "غياب منعكس وتر أشيل في الجهتين",
+common_name: "غياب منعكس وتر أشيل في الجهتين",
+},
+{
+id: "s_1074",
+type: "symptom",
+name: "تغيرات تغذوية",
+common_name: "تغيرات تغذوية",
+},
+{
+id: "s_1076",
+type: "symptom",
+name: "قرحة اغتذائية",
+common_name: "قرحة اغتذائية",
+},
+{
+id: "s_1078",
+type: "symptom",
+name: "قرحة اغتذائية، في أخمص القدم",
+common_name: "قرحة تغذوية عصبية في أخمص القدم",
+},
+{
+id: "s_1083",
+type: "symptom",
+name: "ضمور العضلات بين العظام في اليدين",
+common_name: "ضمور العضلات بين العظام في اليدين",
+},
+{
+id: "s_1084",
+type: "symptom",
+name: "ضمور العضلات بين العظام في القدمين",
+common_name: "ضمور العضلات بين العظام في القدمين",
+},
+{
+id: "s_1087",
+type: "symptom",
+name: "الخوف من الجنون",
+common_name: "الخوف من الجنون",
+},
+{
+id: "s_1088",
+type: "symptom",
+name: "الخوف من فقدان السيطرة على الأمور",
+common_name: "الخوف من فقدان السيطرة على الأمور",
+},
+{
+id: "s_1089",
+type: "symptom",
+name: "تضخم البروستات",
+common_name: "تضخم البروستات",
+},
+{
+id: "s_1090",
+type: "symptom",
+name: "عيون زجاجية",
+common_name: "عيون زجاجية",
+},
+{
+id: "s_1091",
+type: "symptom",
+name: "قضأ الملتحمة",
+common_name: "قضأ الملتحمة",
+},
+{
+id: "s_1092",
+type: "symptom",
+name: "إيجابية اختبارات الحساسية الجلدية (بالوخز أو البقع)",
+common_name: "إيجابية اختبارات الحساسية الجلدية (بالوخز أو البقع)",
+},
+{
+id: "s_1093",
+type: "symptom",
+name: "إيجابية اختبار الحساسية",
+common_name: "إيجابية اختبار الحساسية",
+},
+{
+id: "s_1094",
+type: "symptom",
+name: "تقشع",
+common_name: "تنخم",
+},
+{
+id: "s_1095",
+type: "symptom",
+name: "ضعف حاسة الشم",
+common_name: "نقص حاسة الشم",
+},
+{
+id: "s_1096",
+type: "symptom",
+name: "اضطرابات حاسة الذوق",
+common_name: "اضطراب أو فقدان حاسة التذوق",
+},
+{
+id: "s_1097",
+type: "symptom",
+name: "تورم في الغشاء المخاطي للأنف",
+common_name: "تورم في الغشاء المخاطي للأنف",
+},
+{
+id: "s_1098",
+type: "symptom",
+name: "توذم في الغشاء المخاطي وتلونه بالأزرق أو الأزرق المخضر",
+common_name: "توذم في الغشاء المخاطي وتلونه بالأزرق أو الأزرق المخضر",
+},
+{
+id: "s_1099",
+type: "symptom",
+name: "توذّم القرينات الأنفية",
+common_name: "توذّم القرينات الأنفية",
+},
+{
+id: "s_1100",
+type: "symptom",
+name: "ثلم مستعرض على الأنف",
+common_name: "ثلم مستعرض على الأنف",
+},
+{
+id: "s_1102",
+type: "symptom",
+name: "تضخم العقد اللمفاوية الحنكية، ثنائي الجانب",
+common_name: "تورم في جانبي الحلق",
+},
+{
+id: "s_1103",
+type: "symptom",
+name: "تضخم في النسج اللمفاوية في البلعوم",
+common_name: "تضخم في النسج اللمفاوية في البلعوم",
+},
+{
+id: "s_1104",
+type: "symptom",
+name: "تنفس فموي",
+common_name: "التنفس من الفم",
+},
+{
+id: "s_1105",
+type: "symptom",
+name: "زرقة تحت العينين",
+common_name: "دوائر سوداء تحت العينين",
+},
+{
+id: "s_1106",
+type: "symptom",
+name: "طيّة ديني-مورغان",
+common_name: "طيّة ديني-مورغان",
+},
+{
+id: "s_1107",
+type: "symptom",
+name: "غشاء طبل معتم",
+common_name: "غشاء طبل معتم",
+},
+{
+id: "s_1108",
+type: "symptom",
+name: "تحدّب قبة الحنك",
+common_name: "تحدّب قبة الحنك",
+},
+{
+id: "s_1109",
+type: "symptom",
+name: "مفرزات في الأذن الوسطى",
+common_name: "مفرزات في الأذن الوسطى",
+},
+{
+id: "s_1110",
+type: "symptom",
+name: "عضة عميقة",
+common_name: "عضة عميقة",
+},
+{
+id: "s_1111",
+type: "symptom",
+name: "سحنة غُدانيّة‎",
+common_name: "سحنة غُدانيّة‎",
+},
+{
+id: "s_1112",
+type: "symptom",
+name: "ألم في كلا الطرفين السفليين، بتوزّع الجوارب",
+common_name: "ألم في كلا الطرفين السفليين مكان الجوارب",
+},
+{
+id: "s_1114",
+type: "symptom",
+name: "أظافر تيري",
+common_name: "أظافر تيري",
+},
+{
+id: "s_1115",
+type: "symptom",
+name: "نقص أشعار الجسم",
+common_name: "نقص أشعار الجسم",
+},
+{
+id: "s_1116",
+type: "symptom",
+name: "حَبَن",
+common_name: "تجمع سائل في البطن",
+},
+{
+id: "s_1117",
+type: "symptom",
+name: "ضمور أو صِغَر في كلتا الخصيتين",
+common_name: "خصيتان صغيرتان",
+},
+{
+id: "s_1119",
+type: "symptom",
+name: "ضعف عضلة المثانة العاصرة",
+common_name: "ضعف عضلة المثانة العاصرة",
+},
+{
+id: "s_1123",
+type: "symptom",
+name: "لاتعرّق",
+common_name: "نقص التعرق",
+},
+{
+id: "s_1125",
+type: "symptom",
+name: "حمامى، راحيّة",
+common_name: "احمرار في راحتي اليدين",
+},
+{
+id: "s_1139",
+type: "symptom",
+name: "أفكار انتحارية",
+common_name: "أفكار انتحارية",
+},
+{
+id: "s_1140",
+type: "symptom",
+name: "نية انتحارية",
+common_name: "أفكار وخطوات متبعة نحو الانتحار",
+},
+{
+id: "s_1141",
+type: "symptom",
+name: "علامة روسيل",
+common_name: "علامة روسيل",
+},
+{
+id: "s_1142",
+type: "symptom",
+name: "ألم عضلي",
+common_name: "ألم في العضلات",
+},
+{
+id: "s_1144",
+type: "symptom",
+name: "تورم الشريان الصدغي",
+common_name: "تورم الشريان الصدغي",
+},
+{
+id: "s_1145",
+type: "symptom",
+name: "احمرار في المنطقة الصدغية",
+common_name: "احمرار أعلى الأذن",
+},
+{
+id: "s_1146",
+type: "symptom",
+name: "ضعف الرؤية، مع ألم صدغي في نفس جانب ضعف الرؤية",
+common_name: "ألم في جانب الرأس وضعف في الرؤية في نفس الجانب",
+},
+{
+id: "s_1147",
+type: "symptom",
+name: "شلل العصب محرّك العين",
+common_name: "شلل العصب محرّك العين",
+},
+{
+id: "s_1148",
+type: "symptom",
+name: "خدر في اللسان",
+common_name: "تنميل في اللسان",
+},
+{
+id: "s_1150",
+type: "symptom",
+name: "فرط حساسية للأصوات",
+common_name: "زيادة الحساسية للأصوات",
+},
+{
+id: "s_1153",
+type: "symptom",
+name: "اضطراب حاسة الذوق في الثلثين الأماميين من اللسان",
+common_name: "اضطراب حاسة الذوق في الثلثين الأماميين من اللسان",
+},
+{
+id: "s_1159",
+type: "symptom",
+name: "نقص الحس في نصف الوجه",
+common_name: "نقص الإحساس في جانب واحد من الوجه",
+},
+{
+id: "s_1162",
+type: "symptom",
+name: "وذمة مخاطية أمام الظنبوب",
+common_name: "وذمة مخاطية أمام الظنبوب",
+},
+{
+id: "s_1163",
+type: "symptom",
+name: "جحوظ العين",
+common_name: "بروز إحدى أو كلا العينين",
+},
+{
+id: "s_1165",
+type: "symptom",
+name: "شعور بحرقة جلديّة",
+common_name: "الشعور بحرقة في الجلد",
+},
+{
+id: "s_1166",
+type: "symptom",
+name: "نقص تنسج ميناء الأسنان",
+common_name: "نقص تنسج ميناء الأسنان",
+},
+{
+id: "s_1167",
+type: "symptom",
+name: "ضمور الأظافر",
+common_name: "تشوّه الأظافر أو تغير لونها",
+},
+{
+id: "s_1170",
+type: "symptom",
+name: "انصباب دموي مفصلي",
+common_name: "نزف في المفصل",
+},
+{
+id: "s_1171",
+type: "symptom",
+name: "علامة دارييه",
+common_name: "علامة دارييه",
+},
+{
+id: "s_1173",
+type: "symptom",
+name: "كتلة في كيس الصفن",
+common_name: "كتلة في كيس الصفن",
+},
+{
+id: "s_1175",
+type: "symptom",
+name: "الشعور بثقل في الصفن",
+common_name: "الشعور بثقل في الصفن",
+},
+{
+id: "s_1178",
+type: "symptom",
+name: "ألم صدري، يشتد بالجس",
+common_name: "ألم في الصدر يزداد عند اللمس أو الضغط",
+},
+{
+id: "s_1180",
+type: "symptom",
+name: "ألم خلف الأذن",
+common_name: "ألم خلف الأذن",
+},
+{
+id: "s_1181",
+type: "symptom",
+name: "احمرار خلف الأذن",
+common_name: "احمرار خلف الأذن",
+},
+{
+id: "s_1182",
+type: "symptom",
+name: "تورم الخشاء",
+common_name: "تورم خلف الأذن",
+},
+{
+id: "s_1183",
+type: "symptom",
+name: "علامة وينتربوتوم",
+common_name: "علامة وينتربوتوم",
+},
+{
+id: "s_1184",
+type: "symptom",
+name: "غلاف أو غشاء على اللسان",
+common_name: "لسان أبيض",
+},
+{
+id: "s_1185",
+type: "symptom",
+name: "زلة تنفسية، بفترات اشتداد وهجوع",
+common_name: "ضيق تنفس يزداد تارةً ويتحسّن أخرى",
+},
+{
+id: "s_1189",
+type: "symptom",
+name: "ألم في الظهر، ناكس",
+common_name: "ألم متكرر في الظهر",
+},
+{
+id: "s_1190",
+type: "symptom",
+name: "ألم في الظهر",
+common_name: "ألم في الظهر",
+},
+{
+id: "s_1191",
+type: "symptom",
+name: "تغيرات جلدية، بنوبات هجوع واشتداد",
+common_name: "تغيرات جلدية تشتد تارة وتخف تارة أخرى",
+},
+{
+id: "s_1192",
+type: "symptom",
+name: "ألم في الظهر، شديد",
+common_name: "ألم شديد في الظهر",
+},
+{
+id: "s_1193",
+type: "symptom",
+name: "صداع، شديد",
+common_name: "ألم رأس شديد",
+},
+{
+id: "s_1194",
+type: "symptom",
+name: "ألم وجهي، شديد",
+common_name: "ألم شديد في الوجه",
+},
+{
+id: "s_1195",
+type: "symptom",
+name: "ألم بطني، شديد",
+common_name: "ألم شديد في البطن",
+},
+{
+id: "s_1197",
+type: "symptom",
+name: "ألم صدري، شديد",
+common_name: "ألم شديد في الصدر",
+},
+{
+id: "s_1198",
+type: "symptom",
+name: "ألم في الظهر، مفاجئ",
+common_name: "ألم مفاجئ في الظهر",
+},
+{
+id: "s_1200",
+type: "symptom",
+name: "ألم صدري، مفاجئ",
+common_name: "ألم مفاجئ في الصدر",
+},
+{
+id: "s_1201",
+type: "symptom",
+name: "ألم مفصلي، مفاجئ",
+common_name: "ألم مفاجئ في مفصل",
+},
+{
+id: "s_1202",
+type: "symptom",
+name: "ألم بطني، يشتد عند الشهيق العميق",
+common_name: "ألم في البطن يزداد عند أخذ شهيق عميق",
+},
+{
+id: "s_1203",
+type: "symptom",
+name: "ألم وجهي، يدوم لأكثر من ساعتين",
+common_name: "ألم في الوجه يستمر لأكثر من ساعتين",
+},
+{
+id: "s_1206",
+type: "symptom",
+name: "ألم في الظهر، يتحسّن بالراحة",
+common_name: "ألم في الظهر يخف عند الراحة",
+},
+{
+id: "s_1207",
+type: "symptom",
+name: "ألم بطني، يشتد بعد تناول الكافيين",
+common_name: "ألم في البطن يزداد بعد تناول المشاريب الحاوية على الكافيين",
+},
+{
+id: "s_1209",
+type: "symptom",
+name: "شحوب الجلد، فجائي",
+common_name: "شحوب فجائي للجلد",
+},
+{
+id: "s_1210",
+type: "symptom",
+name: "شحوب في الغشاء المخاطي",
+common_name: "شحوب في الفم أو الأجفان",
+},
+{
+id: "s_1213",
+type: "symptom",
+name: "شحوب في الغشاء المخاطي، فجائي",
+common_name: "شحوب مفاجئ في الأغشية المخاطية",
+},
+{
+id: "s_1226",
+type: "symptom",
+name: "ركبة فحجاء‎",
+common_name: "تقوس الساقين",
+},
+{
+id: "s_1227",
+type: "symptom",
+name: "ضعف تحريك العين نحو الوحشي",
+common_name: "ضعف تحريك العين نحو الخارج",
+},
+{
+id: "s_1228",
+type: "symptom",
+name: "حول أُنسي",
+common_name: "حول",
+},
+{
+id: "s_1229",
+type: "symptom",
+name: "شفع بافتراق أفقي",
+common_name: "رؤية مزدوجة مع افتراق أفقي",
+},
+{
+id: "s_1230",
+type: "symptom",
+name: "إمالة الرأس لتجنب حدوث الشفع",
+common_name: "ازدواجية في الرؤية تزول بإمالة الرأس",
+},
+{
+id: "s_1232",
+type: "symptom",
+name: "شفع أثناء النظر إلى الأسفل والأنسي",
+common_name: "رؤية مزدوجة عند النظر إلى الأسفل والأنسي",
+},
+{
+id: "s_1235",
+type: "symptom",
+name: "شفع عند النظر في كل الاتجاهات",
+common_name: "رؤية مزدوجة عند النظر في كل الاتجاهات",
+},
+{
+id: "s_1236",
+type: "symptom",
+name: "حَوَل خارجي",
+common_name: "حول في عين واحدة أو كلا العينين نحو الخارج",
+},
+{
+id: "s_1237",
+type: "symptom",
+name: "دوران مقلة العين نحو الوحشي والأسفل",
+common_name: "دوران العين إلى الوحشي والأسفل",
+},
+{
+id: "s_1238",
+type: "symptom",
+name: "الحدقة أو الحدقتين غير متفاعلتين مع المطابقة",
+common_name: "الحدقة أو الحدقتين غير متفاعلتين مع المطابقة",
+},
+{
+id: "s_1239",
+type: "symptom",
+name: "ضعف تحريك العين إلى الأعلى",
+common_name: "صعوبة في النظر للأعلى",
+},
+{
+id: "s_1240",
+type: "symptom",
+name: "ضعف تحريك العين للأنسي",
+common_name: "ضعف تحريك العين إلى الداخل",
+},
+{
+id: "s_1241",
+type: "symptom",
+name: "ضعف تحريك العين للأسفل",
+common_name: "صعوبة في النظر للأسفل",
+},
+{
+id: "s_1250",
+type: "symptom",
+name: "ألم في المنطقة الإربية يسوء عند العطاس أو السعال أو الضحك أو القيام بالتمارين الرياضية",
+common_name: "ألم أعلى الفخذ عند العطاس أو السعال أو الضحك أو القيام بالتمارين الرياضية",
+},
+{
+id: "s_1254",
+type: "symptom",
+name: "علامة غوردون",
+common_name: "علامة غوردون",
+},
+{
+id: "s_1255",
+type: "symptom",
+name: "علامة روسوليمو",
+common_name: "علامة روسوليمو",
+},
+{
+id: "s_1256",
+type: "symptom",
+name: "علامة أوبنهايم",
+common_name: "علامة أوبنهايم",
+},
+{
+id: "s_1257",
+type: "symptom",
+name: "علامة بينغ",
+common_name: "علامة بينغ",
+},
+{
+id: "s_1258",
+type: "symptom",
+name: "علامة تشادوك",
+common_name: "علامة تشادوك",
+},
+{
+id: "s_1259",
+type: "symptom",
+name: "علامة شيفير",
+common_name: "علامة شيفير",
+},
+{
+id: "s_1260",
+type: "symptom",
+name: "علامة سترانسكي",
+common_name: "علامة سترانسكي",
+},
+{
+id: "s_1261",
+type: "symptom",
+name: "علامة مندل-بيكتريف",
+common_name: "علامة مندل-بيكتريف",
+},
+{
+id: "s_1262",
+type: "symptom",
+name: "علامة ترومنر",
+common_name: "علامة ترومنر",
+},
+{
+id: "s_1263",
+type: "symptom",
+name: "علامة غوندا-ألين",
+common_name: "علامة غوندا-ألين",
+},
+{
+id: "s_1264",
+type: "symptom",
+name: "رعاش الحركة",
+common_name: "رعاش حركي",
+},
+{
+id: "s_1265",
+type: "symptom",
+name: "غياب الحس المتفارق",
+common_name: "غياب الحس المتفارق",
+},
+{
+id: "s_1268",
+type: "symptom",
+name: "غياب أو ضعف منعكس القرنية",
+common_name: "غياب أو ضعف منعكس القرنية",
+},
+{
+id: "s_1270",
+type: "symptom",
+name: "علامة ستيرلنغ",
+common_name: "علامة ستيرلنغ",
+},
+{
+id: "s_1271",
+type: "symptom",
+name: "علامة جاكوبسون",
+common_name: "عطف لأصابع اليد عند النقر على النهاية البعيدة للكعبرة",
+},
+{
+id: "s_1272",
+type: "symptom",
+name: "علامة ألين-كليكلي",
+common_name: "علامة ألين-كليكلي",
+},
+{
+id: "s_1273",
+type: "symptom",
+name: "علامة كورنيل",
+common_name: "علامة كورنيل",
+},
+{
+id: "s_1274",
+type: "symptom",
+name: "علامة مونيز",
+common_name: "علامة مونيز",
+},
+{
+id: "s_1275",
+type: "symptom",
+name: "علامة سترومبل",
+common_name: "علامة سترومبل",
+},
+{
+id: "s_1277",
+type: "symptom",
+name: "ضعف القدرة على تحريك اللسان",
+common_name: "صعوبة في تحريك اللسان",
+},
+{
+id: "s_1278",
+type: "symptom",
+name: "اشتداد المنعكس الحنكي",
+common_name: "اشتداد المنعكس الحنكي",
+},
+{
+id: "s_1279",
+type: "symptom",
+name: "اشتداد المنعكس البلعومي",
+common_name: "اشتداد المنعكس البلعومي",
+},
+{
+id: "s_1280",
+type: "symptom",
+name: "ضعف أو غياب المنعكس البلعومي",
+common_name: "ضعف أو غياب منعكس التهوع",
+},
+{
+id: "s_1281",
+type: "symptom",
+name: "ظاهرة الموس الكباس",
+common_name: "ظاهرة الموس الكباس",
+},
+{
+id: "s_1282",
+type: "symptom",
+name: "صمل قضيب الرصاص",
+common_name: "تيبس عضلي مستمر وثابت في طرف",
+},
+{
+id: "s_1283",
+type: "symptom",
+name: "صمل الدولاب المسنن",
+common_name: "صمل الدولاب المسنن",
+},
+{
+id: "s_1285",
+type: "symptom",
+name: "ضعف الحنك وترهله في نفس الجهة التي يشتبه فيها بحدوث أذية للعصب",
+common_name: "ضعف الحنك وترهله في نفس الجهة التي يشتبه فيها بحدوث أذية للعصب",
+},
+{
+id: "s_1287",
+type: "symptom",
+name: "انحراف اللهاة نحو الجهة السليمة",
+common_name: "انحراف اللهاة نحو الجهة السليمة",
+},
+{
+id: "s_1289",
+type: "symptom",
+name: "تضخم مبيضي",
+common_name: "تضخم مبيضي",
+},
+{
+id: "s_1291",
+type: "symptom",
+name: "شلل عضلي ثنائي الجانب",
+common_name: "شلل عضلي ثنائي الجانب",
+},
+{
+id: "s_1295",
+type: "symptom",
+name: "فواق",
+common_name: "حازوقة",
+},
+{
+id: "s_1297",
+type: "symptom",
+name: "تباطؤ الحركة",
+common_name: "بطء الحركة",
+},
+{
+id: "s_1298",
+type: "symptom",
+name: "عسر المقوية",
+common_name: "عسر المقوية",
+},
+{
+id: "s_1302",
+type: "symptom",
+name: "علامة غولدفلام",
+common_name: "علامة غولدفلام",
+},
+{
+id: "s_1303",
+type: "symptom",
+name: "الكلام الأنفي",
+common_name: "صوت أنفي",
+},
+{
+id: "s_1304",
+type: "symptom",
+name: "إلعاب",
+common_name: "إنتاج مفرط للعاب",
+},
+{
+id: "s_1310",
+type: "symptom",
+name: "تلون الأظافر بالبني",
+common_name: "تلون الأظافر بالبني",
+},
+{
+id: "s_1311",
+type: "symptom",
+name: "وذمة، في إصبع",
+common_name: "إصبع متورم",
+},
+{
+id: "s_1312",
+type: "symptom",
+name: "ألم في منطقة ما حول الظفر",
+common_name: "ألم في البشرة المحيطة بالظفر",
+},
+{
+id: "s_1313",
+type: "symptom",
+name: "ألم في الطرف العلوي، في إصبع واحد",
+common_name: "ألم في إصبع واحد",
+},
+{
+id: "s_1314",
+type: "symptom",
+name: "حمامى، في إصبع",
+common_name: "احمرار في إصبع",
+},
+{
+id: "s_1315",
+type: "symptom",
+name: "قيح تحت جلد أصابع اليد",
+common_name: "قيح تحت جلد أصابع اليد",
+},
+{
+id: "s_1316",
+type: "symptom",
+name: "خراخر غاططة بإصغاء الصدر",
+common_name: "خراخر غاططة بإصغاء الصدر",
+},
+{
+id: "s_1317",
+type: "symptom",
+name: "زلة تنفسية، انتيابية ليلية",
+common_name: "ضيق تنفس أثناء النوم",
+},
+{
+id: "s_1322",
+type: "symptom",
+name: "نمش إبطي أو إربي",
+common_name: "نمشات في الإبط وأعلى الفخذ",
+},
+{
+id: "s_1323",
+type: "symptom",
+name: "وجود أورام ليفية عصبية",
+common_name: "وجود أورام ليفية عصبية",
+},
+{
+id: "s_1324",
+type: "symptom",
+name: "عقد ليش",
+common_name: "عقد ليش",
+},
+{
+id: "s_1328",
+type: "symptom",
+name: "عمى الألوان",
+common_name: "صعوبة في تمييز الالوان",
+},
+{
+id: "s_1329",
+type: "symptom",
+name: "شحوب القرص البصري في منطقة دخول العصب البصري",
+common_name: "شحوب القرص البصري في منطقة دخول العصب البصري",
+},
+{
+id: "s_1330",
+type: "symptom",
+name: "بقع القهوة بالحليب",
+common_name: "6 بقع على الأقل بلون بني فاتح على الجلد",
+},
+{
+id: "s_1332",
+type: "symptom",
+name: "تعب أو ضعف يحدث بعد القيام بالتمارين",
+common_name: "شعور بالضعف يزداد بعد القيام بالتمارين الرياضية",
+},
+{
+id: "s_1338",
+type: "symptom",
+name: "أذية لتعصيب منطقتين منفصلتين",
+common_name: "أذية لتعصيب منطقتين منفصلتين",
+},
+{
+id: "s_1340",
+type: "symptom",
+name: "علامة ويستفال",
+common_name: "علامة ويستفال",
+},
+{
+id: "s_1342",
+type: "symptom",
+name: "فحص الشفوفية في كيس الصفن",
+common_name: "فحص الشفوفية في كيس الصفن",
+},
+{
+id: "s_1344",
+type: "symptom",
+name: "نزف شبكي",
+common_name: "نزف شبكي",
+},
+{
+id: "s_1345",
+type: "symptom",
+name: "تخليط ذهني ناتج عن رض",
+common_name: "تخليط ذهني ناتج عن إصابة",
+},
+{
+id: "s_1346",
+type: "symptom",
+name: "نضحة شبكية صلبة",
+common_name: "نضحة شبكية صلبة",
+},
+{
+id: "s_1347",
+type: "symptom",
+name: "نضحة شبكية ناعمة",
+common_name: "نضحة شبكية ناعمة",
+},
+{
+id: "s_1348",
+type: "symptom",
+name: "ضعف في النبض المحيطي",
+common_name: "ضعف في النبض المحيطي",
+},
+{
+id: "s_1349",
+type: "symptom",
+name: "صداع، جبهي",
+common_name: "ألم في الرأس يتوضع قرب الجبهة",
+},
+{
+id: "s_1365",
+type: "symptom",
+name: "إقياء، غالباً في الصباح",
+common_name: "إقياء يحدث غالباً في الصباح",
+},
+{
+id: "s_1367",
+type: "symptom",
+name: "احمرار البلعوم",
+common_name: "احمرار في الحلق",
+},
+{
+id: "s_1369",
+type: "symptom",
+name: "ألم بطني، حاد وطاعن",
+common_name: "ألم في البطن حاد وطاعن كالسكين",
+},
+{
+id: "s_1371",
+type: "symptom",
+name: "حَبَرات على الحنك",
+common_name: "بقع صغيرة على الحنك الرخو",
+},
+{
+id: "s_1376",
+type: "symptom",
+name: "إسهال رزي مائي",
+common_name: "إسهال يشبه منظر ماء الأرز المنقوع",
+},
+{
+id: "s_1377",
+type: "symptom",
+name: "بقع وردية أسفل الصدر والبطن",
+common_name: "بقع وردية أسفل الصدر والبطن",
+},
+{
+id: "s_1378",
+type: "symptom",
+name: "علامة ليفين",
+common_name: "علامة ليفين",
+},
+{
+id: "s_1379",
+type: "symptom",
+name: "رجفان عضلي بشكل تدوير حبة الدواء",
+common_name: "رجفان بشكل تدوير حبة الدواء",
+},
+{
+id: "s_1380",
+type: "symptom",
+name: "احتكاكات تامورية",
+common_name: "احتكاكات تامورية",
+},
+{
+id: "s_1381",
+type: "symptom",
+name: "ألم عند الضغط على القص",
+common_name: "ألم عند الضغط على القص",
+},
+{
+id: "s_1382",
+type: "symptom",
+name: "ألم عند الضغط بقوّة على الظنبوب",
+common_name: "ألم عند الضغط بقوّة على الظنبوب",
+},
+{
+id: "s_1383",
+type: "symptom",
+name: "علاقات كثيرة غير مستقرة",
+common_name: "علاقات كثيرة غير مستقرة",
+},
+{
+id: "s_1386",
+type: "symptom",
+name: "نزف داخل العضلات",
+common_name: "نزف داخل العضلات",
+},
+{
+id: "s_1387",
+type: "symptom",
+name: "ألم بطني، شرسوفي",
+common_name: "ألم في منتصف القسم العلوي من البطن",
+},
+{
+id: "s_1388",
+type: "symptom",
+name: "عدم تناظر في العنق",
+common_name: "رقبة غير متناظرة",
+},
+{
+id: "s_1390",
+type: "symptom",
+name: "توذم البلعوم، في جهة واحدة",
+common_name: "تورّم في جانب واحد من الحلق",
+},
+{
+id: "s_1392",
+type: "symptom",
+name: "مضض بطني، في الربع العلوي الأيمن",
+common_name: "ألم في البطن عند الضغط على الربع العلوي الأيمن منه",
+},
+{
+id: "s_1393",
+type: "symptom",
+name: "تغوُّط مؤلم",
+common_name: "ألم أثناء التغوط",
+},
+{
+id: "s_1394",
+type: "symptom",
+name: "غياب الحليمات الذوقية",
+common_name: "غياب البراعم الذوقية",
+},
+{
+id: "s_1395",
+type: "symptom",
+name: "انخفاض شدّة الأصوات التنفسيّة، في قاعدة الرئة اليمنى",
+common_name: "انخفاض شدّة الأصوات التنفسيّة، في قاعدة الرئة اليمنى",
+},
+{
+id: "s_1396",
+type: "symptom",
+name: "احتكاكات جنبية",
+common_name: "احتكاكات جنبية",
+},
+{
+id: "s_1397",
+type: "symptom",
+name: "نعوظ مستمر",
+common_name: "انتصاب لفترة طويلة",
+},
+{
+id: "s_1398",
+type: "symptom",
+name: "النزف الزجاجي",
+common_name: "النزف الزجاجي",
+},
+{
+id: "s_1399",
+type: "symptom",
+name: "علامة شافير",
+common_name: "علامة شافير",
+},
+{
+id: "s_1400",
+type: "symptom",
+name: "مضض بطني، فوق العانة",
+common_name: "ألم في البطن عند الضغط على الجزء السفلي منه",
+},
+{
+id: "s_1402",
+type: "symptom",
+name: "حلقة ويس",
+common_name: "حلقة ويس",
+},
+{
+id: "s_1403",
+type: "symptom",
+name: "حدقة ماركوس غن",
+common_name: "حدقة ماركوس غن",
+},
+{
+id: "s_1404",
+type: "symptom",
+name: "انخفاض الضغط داخل الحجاج، بفارق أكبر من 4-5 ملم زئبقي بين العين المصابة والأخرى السليمة",
+common_name: "انخفاض الضغط داخل الحجاج، بفارق أكبر من 4-5 ملم زئبقي بين العين المصابة والأخرى السليمة",
+},
+{
+id: "s_1405",
+type: "symptom",
+name: "انفصال موضع في الشبكية",
+common_name: "انفصال موضع في الشبكية",
+},
+{
+id: "s_1406",
+type: "symptom",
+name: "تلون رمادي موضعي في الشبكية",
+common_name: "تلون رمادي موضعي في الشبكية",
+},
+{
+id: "s_1407",
+type: "symptom",
+name: "أوعية شبكية موضعة داكنة تتوضع في الطيات",
+common_name: "أوعية شبكية موضعة داكنة تتوضع في الطيات",
+},
+{
+id: "s_1408",
+type: "symptom",
+name: "تموج موضعي في الشبكية",
+common_name: "تموج موضعي في الشبكية",
+},
+{
+id: "s_1409",
+type: "symptom",
+name: "خط التحديد للشبكية المنفصلة (مُصطبغة أو غير مصطبغة)",
+common_name: "خط التحديد للشبكية المنفصلة (مُصطبغة أو غير مصطبغة)",
+},
+{
+id: "s_1410",
+type: "symptom",
+name: "استحداث أوعية جديدة في القرص البصري",
+common_name: "استحداث أوعية جديدة في القرص البصري",
+},
+{
+id: "s_1411",
+type: "symptom",
+name: "تشكل أوعية دموية جديدة في القزحية",
+common_name: "تشكل أوعية دموية جديدة في القزحية",
+},
+{
+id: "s_1412",
+type: "symptom",
+name: "أمهات دم مجهرية في الشبكية",
+common_name: "أمهات دم مجهرية في الشبكية",
+},
+{
+id: "s_1413",
+type: "symptom",
+name: "وذمة بقعية كيسية",
+common_name: "وذمة بقعية كيسية",
+},
+{
+id: "s_1414",
+type: "symptom",
+name: "وذمة الشبكية",
+common_name: "وذمة الشبكية",
+},
+{
+id: "s_1415",
+type: "symptom",
+name: "استحداث أوعية شبكية جديدة في أماكن غير طبيعية",
+common_name: "استحداث أوعية شبكية جديدة في أماكن غير طبيعية",
+},
+{
+id: "s_1416",
+type: "symptom",
+name: "تشوه الأوعية داخل الشبكية",
+common_name: "تشوه الأوعية داخل الشبكية",
+},
+{
+id: "s_1417",
+type: "symptom",
+name: "بقع حمراء داكنة في أوعية القرص البصري",
+common_name: "بقع حمراء داكنة في أوعية القرص البصري",
+},
+{
+id: "s_1418",
+type: "symptom",
+name: "انسداد الشرايين الشبكية",
+common_name: "انسداد الشرايين الشبكية",
+},
+{
+id: "s_1421",
+type: "symptom",
+name: "ارتعاش خافق",
+common_name: "رعاش خافق",
+},
+{
+id: "s_1422",
+type: "symptom",
+name: "نز من الحلمة، مفرزات غير حليبية",
+common_name: "سيلان مفرزات غير الحليب من الحلمة",
+},
+{
+id: "s_1425",
+type: "symptom",
+name: "تشنجات في عضلات الوجه",
+common_name: "تشنجات في عضلات الوجه",
+},
+{
+id: "s_1426",
+type: "symptom",
+name: "تشنج في عضلات الطرفين العلويين",
+common_name: "تشنج في عضلات الذراعين واليدين",
+},
+{
+id: "s_1429",
+type: "symptom",
+name: "رُعاف",
+common_name: "نزيف من الأنف",
+},
+{
+id: "s_1430",
+type: "symptom",
+name: "ألم مفصلي، في الرسغ",
+common_name: "ألم في المعصم",
+},
+{
+id: "s_1431",
+type: "symptom",
+name: "وذمة، في المعصم",
+common_name: "تورم في المعصم",
+},
+{
+id: "s_1432",
+type: "symptom",
+name: "عسر الهضم",
+common_name: "سوء الهضم",
+},
+{
+id: "s_1433",
+type: "symptom",
+name: "وذمة، في الشفتين",
+common_name: "تورم في الشفاه",
+},
+{
+id: "s_1434",
+type: "symptom",
+name: "إسهال دهني",
+common_name: "تغوط دهني",
+},
+{
+id: "s_1436",
+type: "symptom",
+name: "ألم وجهي، في مناطق الجيوب المجاورة للأنف",
+common_name: "ألم أو حس بالضغط في الجيوب",
+},
+{
+id: "s_1437",
+type: "symptom",
+name: "انصباب جنبي",
+common_name: "انصباب جنبي",
+},
+{
+id: "s_1442",
+type: "symptom",
+name: "وذمة، حول الحجاج، في كلا العينين",
+common_name: "تورم حول كلا العينين",
+},
+{
+id: "s_1447",
+type: "symptom",
+name: "وذمة، في الطرف العلوي",
+common_name: "تورم في الطرف العلوي",
+},
+{
+id: "s_1449",
+type: "symptom",
+name: "خدر، في طرف علوي واحد",
+common_name: "تنميل في طرف علوي واحد",
+},
+{
+id: "s_1451",
+type: "symptom",
+name: "تنفس كوسماول",
+common_name: "تنفس غير طبيعي عميق وشاق مع لهاث",
+},
+{
+id: "s_1452",
+type: "symptom",
+name: "ألم في كلا الطرفين العلويين",
+common_name: "ألم في كلا الطرفين العلويين",
+},
+{
+id: "s_1453",
+type: "symptom",
+name: "ألم في كلا الطرفين السفليين",
+common_name: "ألم في كلا الطرفين السفليين",
+},
+{
+id: "s_1454",
+type: "symptom",
+name: "رعاش حركي",
+common_name: "رعاش أثناء الحركة",
+},
+{
+id: "s_1455",
+type: "symptom",
+name: "رجفان، أثناء الراحة",
+common_name: "رجفة أثناء الراحة",
+},
+{
+id: "s_1456",
+type: "symptom",
+name: "الرقص",
+common_name: "الرقص",
+},
+{
+id: "s_1458",
+type: "symptom",
+name: "انقطاع الطمث، الأولي",
+common_name: "عدم حدوث الدورة الشهرية حتى بعد بلوغ سن الـ16",
+},
+{
+id: "s_1462",
+type: "symptom",
+name: "تنفس سطحي",
+common_name: "تنفس سطحي",
+},
+{
+id: "s_1463",
+type: "symptom",
+name: "تململ الساقين، ليلاً",
+common_name: "تململ الساقين في الليل",
+},
+{
+id: "s_1464",
+type: "symptom",
+name: "وذمة، في اليد",
+common_name: "يد متورمة",
+},
+{
+id: "s_1465",
+type: "symptom",
+name: "فقدان مؤقت للرؤية",
+common_name: "فقدان مؤقت للبصر",
+},
+{
+id: "s_1466",
+type: "symptom",
+name: "طنين في الأذن, نابض",
+common_name: "طنين نابض في الأذن",
+},
+{
+id: "s_1467",
+type: "symptom",
+name: "لسان الفريز",
+common_name: "لسان بلون الفريز",
+},
+{
+id: "s_1468",
+type: "symptom",
+name: "حمامى، على الوجه",
+common_name: "احمرار على الوجه",
+},
+{
+id: "s_1469",
+type: "symptom",
+name: "حمامى وتوسّف في معظم الجسم",
+common_name: "احمرار وتقشر كل الجلد تقريباً",
+},
+{
+id: "s_1470",
+type: "symptom",
+name: "تقشر الجلد",
+common_name: "توسف الجلد",
+},
+{
+id: "s_1471",
+type: "symptom",
+name: "سيلان المفرزات الأنفية من الخلف",
+common_name: "سيلان المخاط إلى الحلق",
+},
+{
+id: "s_1472",
+type: "symptom",
+name: "حلقة كايزر-فيشر",
+common_name: "حلقات داكنة تظهر حول قزحية العين",
+},
+{
+id: "s_1474",
+type: "symptom",
+name: "آفات في الجمجمة",
+common_name: "آفات في الجمجمة",
+},
+{
+id: "s_1476",
+type: "symptom",
+name: "التهاب غشاء الطبل",
+common_name: "التهاب غشاء الطبل",
+},
+{
+id: "s_1479",
+type: "symptom",
+name: "دوخة، عند تدوير الرأس",
+common_name: "دوخة عند تدوير الرأس",
+},
+{
+id: "s_1480",
+type: "symptom",
+name: "مضض بالثدي، ثنائي الجانب",
+common_name: "ألم في كلا الثديين عند الضغط عليهما",
+},
+{
+id: "s_1481",
+type: "symptom",
+name: "فرط حس الألم",
+common_name: "فرط حس الألم",
+},
+{
+id: "s_1483",
+type: "symptom",
+name: "ألم في العنق",
+common_name: "ألم في الرقبة",
+},
+{
+id: "s_1484",
+type: "symptom",
+name: "ضعف حاسة السمع، صَمم متفاقم",
+common_name: "نقص متزايد في السمع بدون أي تحسّن",
+},
+{
+id: "s_1486",
+type: "symptom",
+name: "ألم ومضض في العضلات المجاورة للعمود الفقري",
+common_name: "ألم ومضض في العضلات المجاورة للعمود الفقري",
+},
+{
+id: "s_1488",
+type: "symptom",
+name: "زيادة زمن الزفير",
+common_name: "زيادة زمن الزفير",
+},
+{
+id: "s_1492",
+type: "symptom",
+name: "اصفرار الصلبة اليرقاني",
+common_name: "اصفرار العينين",
+},
+{
+id: "s_1494",
+type: "symptom",
+name: "ألم ارتدادي",
+common_name: "ألم ارتدادي",
+},
+{
+id: "s_1496",
+type: "symptom",
+name: "ألم عند جس الجيوب جانب الأنفية",
+common_name: "ألم عند جس الجيوب جانب الأنفية",
+},
+{
+id: "s_1498",
+type: "symptom",
+name: "احمرار في اللوزتين",
+common_name: "لوزتين محمرتين بشكل غير طبيعي",
+},
+{
+id: "s_1502",
+type: "symptom",
+name: "اشتداد مُنعكس وتر أشيل",
+common_name: "اشتداد مُنعكس وتر أشيل",
+},
+{
+id: "s_1508",
+type: "symptom",
+name: "تطاول زمن امتلاء الشعريات",
+common_name: "تطاول زمن امتلاء الشعريات",
+},
+{
+id: "s_1509",
+type: "symptom",
+name: "ألم صدري، خلف القص",
+common_name: "ألم في الصدر خلف عظم القص",
+},
+{
+id: "s_1510",
+type: "symptom",
+name: "تغيّرات جلدية، دافئة عند لمسها",
+common_name: "تغيرات جلدية تبدو دافئة عند لمسها",
+},
+{
+id: "s_1514",
+type: "symptom",
+name: "مضض بطني",
+common_name: "ألم في البطن عند الضغط عليه",
+},
+{
+id: "s_1528",
+type: "symptom",
+name: "ألم بطني، في الربع العلوي الأيمن",
+common_name: "ألم في الجزء العلوي الأيمن من البطن",
+},
+{
+id: "s_1531",
+type: "symptom",
+name: "ألم بطني، في الربع السفلي الأيمن",
+common_name: "ألم في الجزء السفلي الأيمن من البطن",
+},
+{
+id: "s_1532",
+type: "symptom",
+name: "ألم بطني، حول السُّرَّة‎",
+common_name: "ألم في منتصف البطن",
+},
+{
+id: "s_1533",
+type: "symptom",
+name: "التهاب الأنف البيئي",
+common_name: "سيلان أو انسداد في الأنف ناتج عن البيئة",
+},
+{
+id: "s_1534",
+type: "symptom",
+name: "حصى اللوزتين",
+common_name: "تشكلات بيضاء أو صفراء في اللوزتين",
+},
+{
+id: "s_1535",
+type: "symptom",
+name: "صداع، مزمن",
+common_name: "ألم في الرأس يستمر 3 أشهر أو أكثر",
+},
+{
+id: "s_1536",
+type: "symptom",
+name: "عدم تناظر العمود الفقري",
+common_name: "عدم تناظر العمود الفقري",
+},
+{
+id: "s_1538",
+type: "symptom",
+name: "ضعف حاسة السمع، صَمم مُفاجئ",
+common_name: "فقدان مفاجئ للسمع",
+},
+{
+id: "s_1543",
+type: "symptom",
+name: "غياب الوعي",
+common_name: "فقدان الوعي",
+},
+{
+id: "s_1544",
+type: "symptom",
+name: "طفح الحمى القرمزية",
+common_name: "طفح الحمى القرمزية",
+},
+{
+id: "s_1546",
+type: "symptom",
+name: "تنفس شاين-ستوكس",
+common_name: "تنفس شاين-ستوكس",
+},
+{
+id: "s_1547",
+type: "symptom",
+name: "تعب، استمر أكثر من 6 أشهر",
+common_name: "الشعور بالضعف والتعب لأكثر من 6 أشهر",
+},
+{
+id: "s_1548",
+type: "symptom",
+name: "غشاء كاذب على البلعوم أو الأنف",
+common_name: "طبقة رمادية سميكة في الأنف أو على الحلق",
+},
+{
+id: "s_1551",
+type: "symptom",
+name: "عدم القدرة على إخراج الغازات",
+common_name: "عدم القدرة على إخراج الغازات",
+},
+{
+id: "s_1552",
+type: "symptom",
+name: "أصوات معويّة عالية ذات تردد عالي",
+common_name: "أصوات معويّة زائدة",
+},
+{
+id: "s_1553",
+type: "symptom",
+name: "خفوت الأصوات المعويّة",
+common_name: "انخفاض في الأصوات المعويّة",
+},
+{
+id: "s_1555",
+type: "symptom",
+name: "علامة دانس",
+common_name: "علامة دانس",
+},
+{
+id: "s_1557",
+type: "symptom",
+name: "ألم بطني، مُنتشر",
+common_name: "ألم شامل لكامل البطن",
+},
+{
+id: "s_1558",
+type: "symptom",
+name: "دفاع بطني",
+common_name: "ازدياد قساوة عضلات البطن",
+},
+{
+id: "s_1561",
+type: "symptom",
+name: "ورم أصفر",
+common_name: "ترسبات صفراء تحت الجلد",
+},
+{
+id: "s_1562",
+type: "symptom",
+name: "صرير",
+common_name: "صرير",
+},
+{
+id: "s_1563",
+type: "symptom",
+name: "حكة في العينين",
+common_name: "حكة في العينين",
+},
+{
+id: "s_1565",
+type: "symptom",
+name: "الشعور بامتلاء في المستقيم",
+common_name: "الشعور بامتلاء في المستقيم",
+},
+{
+id: "s_1569",
+type: "symptom",
+name: "إفرازات مهبلية، بيضاء ولزجة",
+common_name: "مفرزات مهبلية بيضاء ولزجة",
+},
+{
+id: "s_1570",
+type: "symptom",
+name: "أعراض هضمية تظهر بعد تناول الأطعمة الحاوية على اللاكتوز",
+common_name: "أعراض بطنية تظهر بعد شرب أو تناول الأطعمة الحاوية على اللاكتوز",
+},
+{
+id: "s_1571",
+type: "symptom",
+name: "تغيرات جلدية، مؤلمة",
+common_name: "تغيرات موْلمة على الجلد",
+},
+{
+id: "s_1574",
+type: "symptom",
+name: "صعوبة في الوصول إلى النشوة الجنسية",
+common_name: "صعوبة في الوصول إلى النشوة الجنسية",
+},
+{
+id: "s_1576",
+type: "symptom",
+name: "نفخة السباتي",
+common_name: "نفخة الشريان السباتي الرقبي",
+},
+{
+id: "s_1577",
+type: "symptom",
+name: "سيلان من الأذن، مفرزات دموية",
+common_name: "نزف من الأذن",
+},
+{
+id: "s_1580",
+type: "symptom",
+name: "ألم صدري، يشتد بجس المفاصل الغضروفية الضلعية",
+common_name: "ألم في الصدر يزداد بالضغط على المفاصل الغضروفية الضلعية",
+},
+{
+id: "s_1581",
+type: "symptom",
+name: "وذمة، في المفاصل الغضروفية الضلعيّة",
+common_name: "تورم في منتصف الصدر",
+},
+{
+id: "s_1586",
+type: "symptom",
+name: "توذّم فرجي أحادي الجانب",
+common_name: "تورم في أحد جوانب الفرج",
+},
+{
+id: "s_1587",
+type: "symptom",
+name: "تبدد الشخصية",
+common_name: "الشعور بالانفصال عن الجسد",
+},
+{
+id: "s_1589",
+type: "symptom",
+name: "مضض بطني، في الربع العلوي الأيسر",
+common_name: "ألم في البطن عند الضغط على الجزء العلوي الأيسر منه",
+},
+{
+id: "s_1591",
+type: "symptom",
+name: "ألم بطني، في الربع العلوي الأيسر",
+common_name: "ألم في الجزء العلوي الأيسر من البطن",
+},
+{
+id: "s_1598",
+type: "symptom",
+name: "ألم بطني، أسفل السرّة",
+common_name: "ألم في الجزء السفلي من البطن",
+},
+{
+id: "s_1601",
+type: "symptom",
+name: "ألم صدري، طاعن",
+common_name: "ألم طاعن في الصدر",
+},
+{
+id: "s_1602",
+type: "symptom",
+name: "تغيرات جلدية، قرح",
+common_name: "قرحة تناسلية غير مؤلمة",
+},
+{
+id: "s_1603",
+type: "symptom",
+name: "تأخر تطور اللغة",
+common_name: "تأخر الكلام",
+},
+{
+id: "s_1605",
+type: "symptom",
+name: "ألم أنفي",
+common_name: "ألم في الأنف",
+},
+{
+id: "s_1610",
+type: "symptom",
+name: "ألم مفصلي، عند تحريك الركبة",
+common_name: "ألم في الركبة عند تحريكها",
+},
+{
+id: "s_1616",
+type: "symptom",
+name: "قشرة الرأس",
+common_name: "قشرة الرأس",
+},
+{
+id: "s_1617",
+type: "symptom",
+name: "حكة جلدية، في الفروة",
+common_name: "حكة في جلد الرأس",
+},
+{
+id: "s_1618",
+type: "symptom",
+name: "مضض في الطرف السفلي",
+common_name: "ألم في الساق عند الضغط عليها",
+},
+{
+id: "s_1619",
+type: "symptom",
+name: "مضض في الطرف العلوي",
+common_name: "ألم عند الضغط على الطرف العلوي",
+},
+{
+id: "s_1620",
+type: "symptom",
+name: "ألم في الطرف السفلي، في الربلة",
+common_name: "ألم في بطة الساق",
+},
+{
+id: "s_1621",
+type: "symptom",
+name: "ألم مفصلي، في الكاحل",
+common_name: "ألم في الكاحل",
+},
+{
+id: "s_1622",
+type: "symptom",
+name: "مضض في الطرف السفلي، في ربلة القدم",
+common_name: "ألم عند الضغط على بطة القدم",
+},
+{
+id: "s_1623",
+type: "symptom",
+name: "ألم مفصلي، عند تحريك الكاحل",
+common_name: "ألم في الكاحل عند تحريكه",
+},
+{
+id: "s_1625",
+type: "symptom",
+name: "زلة تنفسية تستمر أكثر من 4 أسابيع",
+common_name: "ضيق في التنفس يستمر فترة أطول من 4 أسابيع",
+},
+{
+id: "s_1632",
+type: "symptom",
+name: "ألم مفصلي، في المرفق",
+common_name: "ألم في المرفق",
+},
+{
+id: "s_1634",
+type: "symptom",
+name: "ألم مفصلي، عند تحريك المرفق",
+common_name: "ألم في المرفق عند تحريكه",
+},
+{
+id: "s_1635",
+type: "symptom",
+name: "وذمة، في المرفق",
+common_name: "تورم في المرفق",
+},
+{
+id: "s_1636",
+type: "symptom",
+name: "ألم مفصلي، عند تحريك الرسغ",
+common_name: "ألم في المعصم عند تحريكه",
+},
+{
+id: "s_1639",
+type: "symptom",
+name: "ألم مفصلي، في الإبهام",
+common_name: "ألم في الإبهام",
+},
+{
+id: "s_1641",
+type: "symptom",
+name: "ألم مفصلي، عند تحريك الإبهام",
+common_name: "ألم في الإبهام عند تحريكه",
+},
+{
+id: "s_1645",
+type: "symptom",
+name: "ألم في القدم، في مؤخرة القدم عند الوقوف على أصابع إحدى القدمين",
+common_name: "ألم في الجزء الخلفي من القدم عند الوقوف على الأصابع",
+},
+{
+id: "s_1647",
+type: "symptom",
+name: "آفات حلقية جلدية",
+common_name: "تغيرات جلدية حلقية الشكل",
+},
+{
+id: "s_1650",
+type: "symptom",
+name: "تسمك الجلد",
+common_name: "زيادة سماكة الجلد",
+},
+{
+id: "s_1652",
+type: "symptom",
+name: "وذمة، في مفصل الورك",
+common_name: "تورم في الورك",
+},
+{
+id: "s_1654",
+type: "symptom",
+name: "ألم مفصلي، في الكتف",
+common_name: "ألم في الكتف",
+},
+{
+id: "s_1655",
+type: "symptom",
+name: "وذمة، في مفصل الكتف",
+common_name: "تورم في الكتف",
+},
+{
+id: "s_1656",
+type: "symptom",
+name: "مضض مفصلي",
+common_name: "ألم في المفصل عند الضغط عليه",
+},
+{
+id: "s_1665",
+type: "symptom",
+name: "صَلَع، معمم",
+common_name: "تساقط شعر كل أجزاء الرأس",
+},
+{
+id: "s_1671",
+type: "symptom",
+name: "شعر متقصّف",
+common_name: "شعر متقصف",
+},
+{
+id: "s_1673",
+type: "symptom",
+name: "بقع بيضاء في الفم",
+common_name: "لطخ بيضاء في الغشاء المخاطي الفموي",
+},
+{
+id: "s_1674",
+type: "symptom",
+name: "ألم في الجلد",
+common_name: "ألم في الجلد",
+},
+{
+id: "s_1676",
+type: "symptom",
+name: "الثفن",
+common_name: "الثفن",
+},
+{
+id: "s_1680",
+type: "symptom",
+name: "تغيرات جلديّة، فرط تصبّغ للجلد",
+common_name: "اسمرار الجلد",
+},
+{
+id: "s_1682",
+type: "symptom",
+name: "فيمة الأنف",
+common_name: "أنف محمر منتفخ",
+},
+{
+id: "s_1684",
+type: "symptom",
+name: "حرقة جلديّة، في الوجه",
+common_name: "شعور بالحرقة في الوجه",
+},
+{
+id: "s_1685",
+type: "symptom",
+name: "توسع الشعريات الدموية، في الوجه",
+common_name: "أوعية عنكبوتية على الوجه",
+},
+{
+id: "s_1689",
+type: "symptom",
+name: "علامة كيرينغ",
+common_name: "علامة كيرينغ",
+},
+{
+id: "s_1690",
+type: "symptom",
+name: "علامة برودزنسكي",
+common_name: "علامة برودزنسكي",
+},
+{
+id: "s_1692",
+type: "symptom",
+name: "تغيرات جلدية، تسوء بعد تناول الكحول",
+common_name: "تغيرات جلدية تزداد بعد شرب الكحول",
+},
+{
+id: "s_1693",
+type: "symptom",
+name: "انخفاض شدة الأصوات التنفسية",
+common_name: "انخفاض شدة الأصوات التنفسية",
+},
+{
+id: "s_1695",
+type: "symptom",
+name: "مشكلات في العلاقات الشخصية",
+common_name: "مشكلات في العلاقات الشخصية",
+},
+{
+id: "s_1696",
+type: "symptom",
+name: "المحاكاة الصوتية",
+common_name: "تقليد الأصوات",
+},
+{
+id: "s_1697",
+type: "symptom",
+name: "اهتمامات ضيقة الأفق",
+common_name: "اهتمامات قليلة ومحدودة وغير طبيعية ومتعلق بها بشدة",
+},
+{
+id: "s_1698",
+type: "symptom",
+name: "تغيرات سلوكية، تجنّب التواصل البصري",
+common_name: "تجنّب التواصل البصري",
+},
+{
+id: "s_1713",
+type: "symptom",
+name: "تحدد مجال حركة مفصل",
+common_name: "صعوبة تحريك مفصل",
+},
+{
+id: "s_1715",
+type: "symptom",
+name: "كسور مرضية",
+common_name: "كسر عظمي بدون أي رض",
+},
+{
+id: "s_1716",
+type: "symptom",
+name: "الشعور بالامتلاء في المهبل",
+common_name: "الشعور بامتلاء في المهبل",
+},
+{
+id: "s_1717",
+type: "symptom",
+name: "انتفاخ متبارز من فوهة المهبل",
+common_name: "انتفاخ خارج من المهبل",
+},
+{
+id: "s_1719",
+type: "symptom",
+name: "عقد أوسلر",
+common_name: "عقد أوسلر",
+},
+{
+id: "s_1720",
+type: "symptom",
+name: "نفخات قلبية",
+common_name: "نفخات قلبية",
+},
+{
+id: "s_1721",
+type: "symptom",
+name: "رأرأة، أفقية",
+common_name: "رأرأة أفقية",
+},
+{
+id: "s_1725",
+type: "symptom",
+name: "شحوب في الطرف السفلي",
+common_name: "ساق شاحبة",
+},
+{
+id: "s_1729",
+type: "symptom",
+name: "ألم بطني، في الربع السفلي الأيسر",
+common_name: "ألم في الجزء السفلي الأيسر من البطن",
+},
+{
+id: "s_1731",
+type: "symptom",
+name: "مناورة ديكس-هولبايك، رأرأة تدويريّة",
+common_name: "مناورة ديكس-هولبايك، رأرأة تدويريّة",
+},
+{
+id: "s_1732",
+type: "symptom",
+name: "علامة روفسينغ",
+common_name: "علامة روفسينغ",
+},
+{
+id: "s_1733",
+type: "symptom",
+name: "ألم في العقد اللمفاوية",
+common_name: "عقد لمفاوية مؤلمة",
+},
+{
+id: "s_1738",
+type: "symptom",
+name: "علامة رومبيرغ",
+common_name: "علامة رومبيرغ",
+},
+{
+id: "s_1744",
+type: "symptom",
+name: "سماع صوت فرقعة في الركبة عند حدوث الإصابة",
+common_name: "سماع صوت فرقعة في الركبة عند حدوث الإصابة",
+},
+{
+id: "s_1745",
+type: "symptom",
+name: "عدم ثباتية الركبة",
+common_name: "ركبة غير ثابتة",
+},
+{
+id: "s_1761",
+type: "symptom",
+name: "تغيرات جلدية، تزداد بالتوتر النفسي",
+common_name: "تغيرات جلدية تزداد بالتوتر",
+},
+{
+id: "s_1762",
+type: "symptom",
+name: "صداع، يشتد بالتوتر",
+common_name: "ألم رأس يزداد بالتوتر والضغط",
+},
+{
+id: "s_1763",
+type: "symptom",
+name: "ألم صدري، يشتد بالشدة النفسية",
+common_name: "ألم في الصدر يزداد عند التوتر والضغط النفسي",
+},
+{
+id: "s_1765",
+type: "symptom",
+name: "رجفان يحدث أثناء التوتر",
+common_name: "رجفة تسوء بالتوتر",
+},
+{
+id: "s_1766",
+type: "symptom",
+name: "ألم عضلي، يشتد بالتوتر",
+common_name: "ألم عضلي يتحرّض بزيادة التوتر",
+},
+{
+id: "s_1767",
+type: "symptom",
+name: "أعراض هضمية، متعلقة بالتوتر",
+common_name: "أعراض هضمية تظهر عند التوتر أو الإجهاد",
+},
+{
+id: "s_1768",
+type: "symptom",
+name: "اضطرابات نفسية تشتد بالتوتر",
+common_name: "اضطرابات نفسية تزداد بالضغط النفسي",
+},
+{
+id: "s_1772",
+type: "symptom",
+name: "ألم في الظهر، صدري",
+common_name: "ألم في الظهر في الجزء العلوي أو الأوسط منه",
+},
+{
+id: "s_1776",
+type: "symptom",
+name: "عسر البلع، الفموي البلعومي",
+common_name: "صعوبة في بداية البلع",
+},
+{
+id: "s_1779",
+type: "symptom",
+name: "عسر البلع، المريئي",
+common_name: "الشعور بأن الطعام عالق بعد عدة ثوان من بلعه",
+},
+{
+id: "s_1780",
+type: "symptom",
+name: "صداع، خفيف",
+common_name: "ألم رأس خفيف",
+},
+{
+id: "s_1781",
+type: "symptom",
+name: "صداع، معتدل",
+common_name: "ألم رأس معتدل",
+},
+{
+id: "s_1782",
+type: "symptom",
+name: "ألم بطني، خفيف",
+common_name: "ألم خفيف الشدة في البطن",
+},
+{
+id: "s_1783",
+type: "symptom",
+name: "ألم بطني، معتدل",
+common_name: "ألم متوسط الشدة في البطن",
+},
+{
+id: "s_1788",
+type: "symptom",
+name: "تغيرات لونية بيضاء على الأظافر",
+common_name: "بقع بيضاء على الظفر",
+},
+{
+id: "s_1789",
+type: "symptom",
+name: "اصفرار الأظافر",
+common_name: "أظافر صفراء",
+},
+{
+id: "s_1790",
+type: "symptom",
+name: "تسمّك في الأظافر",
+common_name: "زيادة في سماكة الأظافر",
+},
+{
+id: "s_1791",
+type: "symptom",
+name: "حمامى، على فروة الرأس",
+common_name: "بقع حمراء على الفروة",
+},
+{
+id: "s_1792",
+type: "symptom",
+name: "قمل رأس مرئي على الفروة",
+common_name: "قمل رأس مرئي على الفروة",
+},
+{
+id: "s_1793",
+type: "symptom",
+name: "بيض قمل أو صئبان على جذر الشعر",
+common_name: "بيض صغير على قاعدة الشعرة",
+},
+{
+id: "s_1795",
+type: "symptom",
+name: "أنفاق في الجلد",
+common_name: "أخاديد في الجلد",
+},
+{
+id: "s_1796",
+type: "symptom",
+name: "بقعة بيضاء على القرنية",
+common_name: "بقعة بيضاء على قرنية العين",
+},
+{
+id: "s_1798",
+type: "symptom",
+name: "اختلاف في حجم الخصيتين",
+common_name: "اختلاف في حجم الخصيتين",
+},
+{
+id: "s_1799",
+type: "symptom",
+name: "ألم في الساعد",
+common_name: "ألم في الساعد",
+},
+{
+id: "s_1800",
+type: "symptom",
+name: "استئصال سابق للزائدة الدودية",
+common_name: "إزالة الزائدة الدودية في الماضي",
+},
+{
+id: "s_1802",
+type: "symptom",
+name: "ألم بطني، حارق أو لاذع",
+common_name: "ألم في المعدة حارق أو لاذع",
+},
+{
+id: "s_1805",
+type: "symptom",
+name: "ألم مفصلي، عند تحريك الكتف",
+common_name: "ألم في الكتف عند تحريكه",
+},
+{
+id: "s_1808",
+type: "symptom",
+name: "تغيرات جلدية، على الوجه",
+common_name: "تغيرات في جلد الوجه",
+},
+{
+id: "s_1810",
+type: "symptom",
+name: "تغيرات جلدية، في منطقة الأعضاء التناسلية",
+common_name: "تغيرات جلدية على الأعضاء التناسلية أو حولها",
+},
+{
+id: "s_1811",
+type: "symptom",
+name: "جفاف مهبلي",
+common_name: "جفاف بالمهبل",
+},
+{
+id: "s_1812",
+type: "symptom",
+name: "احتقان أنفي، مزمن",
+common_name: "انسداد في الأنف منذ أكثر من 3 أشهر",
+},
+{
+id: "s_1819",
+type: "symptom",
+name: "ضعف بصري، في عين واحدة",
+common_name: "ضعف الرؤية في عين واحدة",
+},
+{
+id: "s_1820",
+type: "symptom",
+name: "حمى، لم يتم قياس درجة الحرارة",
+common_name: "ارتفاع في درجة حرارة الجسم لم يتم قياسه",
+},
+{
+id: "s_1823",
+type: "symptom",
+name: "ألم مفصلي، عند تحريك الورك",
+common_name: "ألم في الورك عند تحريكه",
+},
+{
+id: "s_1826",
+type: "symptom",
+name: "ألم في البلعوم، أحادي الجانب",
+common_name: "ألم أحادي الجانب في الحلق",
+},
+{
+id: "s_1829",
+type: "symptom",
+name: "ألم فرجي مهبلي",
+common_name: "ألم في الفرج أو المهبل",
+},
+{
+id: "s_1830",
+type: "symptom",
+name: "كتلة جلدية، أكبر من 1 سم",
+common_name: "بروز على الجلد قطره أكبر من 1 سم",
+},
+{
+id: "s_1831",
+type: "symptom",
+name: "كتلة جلدية",
+common_name: "كتل أو نتوء في الجلد",
+},
+{
+id: "s_1833",
+type: "symptom",
+name: "ألم في أحد الأباخس",
+common_name: "ألم في أحد أصابع القدم",
+},
+{
+id: "s_1835",
+type: "symptom",
+name: "ألم في كامل الجسم",
+common_name: "ألم في كامل الجسم",
+},
+{
+id: "s_1840",
+type: "symptom",
+name: "ألم بطني، يستمر أقل من يومين",
+common_name: "ألم في البطن يستمر أقل من يومين",
+},
+{
+id: "s_1842",
+type: "symptom",
+name: "ألم بطني، يستمر لأكثر من أسبوعين",
+common_name: "ألم في البطن يستمر لأكثر من أسبوعين",
+},
+{
+id: "s_1843",
+type: "symptom",
+name: "ألم بطني، ذو بدء مفاجئ",
+common_name: "ألم بطني بدأ فجأةً",
+},
+{
+id: "s_1844",
+type: "symptom",
+name: "ألم بطني، ذو بدء تدريجي",
+common_name: "ألم في البطن تزداد شدته بشكل تدريجي بطيء",
+},
+{
+id: "s_1845",
+type: "symptom",
+name: "ألم بطني، ينتشر إلى الكتف الأيسر أو لوح الكتف الأيسر",
+common_name: "ألم في البطن ينتشر إلى الكتف الأيسر أو عظم الكتف الأيسر",
+},
+{
+id: "s_1846",
+type: "symptom",
+name: "ألم بطني، ينتشر إلى منتصف أو أسفل الظهر",
+common_name: "ألم في البطن ينتشر إلى منتصف أو أسفل الظهر",
+},
+{
+id: "s_1847",
+type: "symptom",
+name: "ألم بطني، ناكس",
+common_name: "ألم متكرر في البطن",
+},
+{
+id: "s_1848",
+type: "symptom",
+name: "ألم بطني، قولنجي",
+common_name: "ألم ماغص في البطن",
+},
+{
+id: "s_1851",
+type: "symptom",
+name: "ألم بطني، ينتقل ويتوضّع في الربع السفلي الأيمن",
+common_name: "ألم في البطن انتقل إلى الجزء السفلي الأيمن",
+},
+{
+id: "s_1852",
+type: "symptom",
+name: "ألم بطني، يستمر لـ2-7 أيام",
+common_name: "ألم في البطن يستمر فترة تتراوح بين يومين و7 أيام",
+},
+{
+id: "s_1853",
+type: "symptom",
+name: "ألم بطني، يستمر لـ8-14 أيام",
+common_name: "ألم في البطن يستمر لـ8-14 أيام",
+},
+{
+id: "s_1193",
+type: "symptom",
+name: "ألم بطني، في الجانب الأيسر",
+common_name: "ألم في الجانب الأيسر من البطن",
+},
+{
+id: "s_1855",
+type: "symptom",
+name: "ألم بطني، في الجانب الأيمن",
+common_name: "ألم في الجانب الأيمن من البطن",
+},
+{
+id: "s_1856",
+type: "symptom",
+name: "مضض بطني، في الربع السفلي الأيمن",
+common_name: "ألم في البطن عند الضغط على الجزء السفلي الأيمن منه",
+},
+{
+id: "s_1858",
+type: "symptom",
+name: "سعال، يدوم بين ثلاث وثمان أسابيع",
+common_name: "سعال يستمر بين ثلاث وثمان أسابيع",
+},
+{
+id: "s_1859",
+type: "symptom",
+name: "ألم بطني، في منتصف الدورة الطمثيّة",
+common_name: "إباضة مؤلمة",
+},
+{
+id: "s_1860",
+type: "symptom",
+name: "ألم بطني، تشنجي",
+common_name: "ألم تشنجي في البطن",
+},
+{
+id: "s_1864",
+type: "symptom",
+name: "صداع، أسوأ صداع في الحياة",
+common_name: "أسوأ ألم رأس على الإطلاق",
+},
+{
+id: "s_1868",
+type: "symptom",
+name: "صداع، مزمن، بنوبة تستمر من 5 دقائق إلى 4 ساعات",
+common_name: "نوبات ألم في الرأس تستمر من 5 دقائق إلى 4 ساعات",
+},
+{
+id: "s_1870",
+type: "symptom",
+name: "صداع، مزمن، بنوبة تستمر 4-72 ساعة",
+common_name: "نوبات ألم في الرأس تستمر من4 إلى 72 ساعة",
+},
+{
+id: "s_1871",
+type: "symptom",
+name: "صداع، يشتد بالنشاط الفيزيائي",
+common_name: "ألم رأس يزداد عند ممارسة نشاط جسدي",
+},
+{
+id: "s_1875",
+type: "symptom",
+name: "حرقة فرجية مهبلية",
+common_name: "حرقة فرجية مهبلية",
+},
+{
+id: "s_1878",
+type: "symptom",
+name: "ألم في الربلة، أعلى العقب",
+common_name: "ألم في الجزء الخلفي من الساق أعلى العقب",
+},
+{
+id: "s_1891",
+type: "symptom",
+name: "فرط الحساسية للروائح",
+common_name: "فرط التحسس للروائح",
+},
+{
+id: "s_1893",
+type: "symptom",
+name: "ألم في الطرف السفلي، في الفخذ",
+common_name: "ألم في الفخذ",
+},
+{
+id: "s_1899",
+type: "symptom",
+name: "خدر في الأصابع الثلاثة الأولى",
+common_name: "تنميل في الإبهام والسبابة والإصبع الوسطى",
+},
+{
+id: "s_1900",
+type: "symptom",
+name: "خدر في أصابع اليد، في الإصبعين الرابع والخامس",
+common_name: "تنميل في الخنصر والبنصر في اليد",
+},
+{
+id: "s_1901",
+type: "symptom",
+name: "صداع، مزمن، بنوبات تستمر 3-7 أيام",
+common_name: "نوبات ألم في الرأس تستمر 3-7 أيام",
+},
+{
+id: "s_1903",
+type: "symptom",
+name: "تحدد مجال الحركة المنفعلة لمفصل",
+common_name: "تحدد مجال الحركة المنفعلة لمفصل",
+},
+{
+id: "s_1905",
+type: "symptom",
+name: "صداع،  ذو بدء مفاجئ",
+common_name: "صداع يصل لذروته خلال عدّة دقائق",
+},
+{
+id: "s_1907",
+type: "symptom",
+name: "صداع، مزمن، بنوبة تستمر حتى 5 دقائق",
+common_name: "نوبات ألم في الرأس تدوم لفترة لا تتجاوز 5 دقائق",
+},
+{
+id: "s_1909",
+type: "symptom",
+name: "القدم الهابطة",
+common_name: "انخفاض القدم",
+},
+{
+id: "s_1910",
+type: "symptom",
+name: "هبوط الرسغ",
+common_name: "هبوط المعصم",
+},
+{
+id: "s_1911",
+type: "symptom",
+name: "صداع، في المنطقة الصدغية",
+common_name: "ألم في الصدغ",
+},
+{
+id: "s_1912",
+type: "symptom",
+name: "صداع، حديث",
+common_name: "ألم رأس منذ فترة لا تتجاوز 3 أشهر",
+},
+{
+id: "s_1915",
+type: "symptom",
+name: "طفح فرفري، مجسوس",
+common_name: "بقع صغيرة حمراء أو أرجوانية يزيد قطرها عن 3 مم ويمكن الإحساس بها",
+},
+{
+id: "s_1918",
+type: "symptom",
+name: "ألم في الردفين",
+common_name: "ألم في الردفين",
+},
+{
+id: "s_1921",
+type: "symptom",
+name: "تغيّرات جلدية، تزداد بالتعرّض لضوء الشمس",
+common_name: "تغيرات في الجلد تظهر أو تزداد بعد التعرض لضوء الشمس",
+},
+{
+id: "s_1922",
+type: "symptom",
+name: "إيلام ارتجاجي",
+common_name: "ألم في البطن بعد الهبوط بقوّة على القدمين",
+},
+{
+id: "s_1923",
+type: "symptom",
+name: "تغيرات جلدية، في القدم",
+common_name: "تغيرات جلدية في القدم",
+},
+{
+id: "s_1924",
+type: "symptom",
+name: "سعال، انتيابي",
+common_name: "نوبات سعال شديدة ومفاجئة",
+},
+{
+id: "s_1925",
+type: "symptom",
+name: "ألم صدري، ضاغط",
+common_name: "ألم ضاغط في الصدر",
+},
+{
+id: "s_1926",
+type: "symptom",
+name: "جلد بارد ومتعرّق",
+common_name: "جلد بارد ومتعرّق",
+},
+{
+id: "s_1927",
+type: "symptom",
+name: "ألم في الطرف السفلي، عرج بسبب الألم",
+common_name: "عرج بسبب ألم في الساق",
+},
+{
+id: "s_1929",
+type: "symptom",
+name: "ألم بطني، شديد لا يمكن تحمّله",
+common_name: "ألم لا يطاق في البطن",
+},
+{
+id: "s_1930",
+type: "symptom",
+name: "ألم في الطرف السفلي، شديد",
+common_name: "ألم شديد في الطرف السفلي",
+},
+{
+id: "s_1931",
+type: "symptom",
+name: "كتلة جلدية، نازفة",
+common_name: "كتلة جلدية نازفة",
+},
+{
+id: "s_1932",
+type: "symptom",
+name: "خدر، ذو بدء مفاجئ",
+common_name: "الشعور فجأةً بتنميل أو وخز أو خدر",
+},
+{
+id: "s_1933",
+type: "symptom",
+name: "ارتفاع التوتر الشرياني، فوق 180 ملم زئبقي",
+common_name: "ارتفاع ضغط الدم كثيراً",
+},
+{
+id: "s_1935",
+type: "symptom",
+name: "ألم في الطرف العلوي، شديد",
+common_name: "ألم شديد في الطرف العلوي",
+},
+{
+id: "s_1937",
+type: "symptom",
+name: "ديدان في البراز",
+common_name: "ديدان في البراز أو حول الشرج",
+},
+{
+id: "s_1943",
+type: "symptom",
+name: "حروق الشمس",
+common_name: "حروق الشمس",
+},
+{
+id: "s_1949",
+type: "symptom",
+name: "إقياء، تال لكل وارد طعامي",
+common_name: "إقياء بعد تناول كل وجبة",
+},
+{
+id: "s_1952",
+type: "symptom",
+name: "ألم صدري، ناكس",
+common_name: "ألم متكرر في الصدر",
+},
+{
+id: "s_1955",
+type: "symptom",
+name: "حمامى، حول كلا العينين",
+common_name: "احمرار حول كلا العينين",
+},
+{
+id: "s_1957",
+type: "symptom",
+name: "أفكار هدّامة، تجاه الآخرين أو الأشياء",
+common_name: "أفكار هدّامة، تجاه الآخرين أو الأشياء",
+},
+{
+id: "s_1958",
+type: "symptom",
+name: "بحة في الصوت، تدوم أكثر من أسبوعين",
+common_name: "بحة في الصوت تستمر أكثر من أسبوعين",
+},
+{
+id: "s_1960",
+type: "symptom",
+name: "تكدّم بعد رض",
+common_name: "كدمة بعد إصابة",
+},
+{
+id: "s_1961",
+type: "symptom",
+name: "ألم في الفك",
+common_name: "ألم في الفك",
+},
+{
+id: "s_1973",
+type: "symptom",
+name: "جرح، نزف فعال",
+common_name: "نزف مستمر من جرح",
+},
+{
+id: "s_1979",
+type: "symptom",
+name: "إسهال، أكثر من 6 مرات باليوم",
+common_name: "إسهال لأكثر من 6 مرات في اليوم",
+},
+{
+id: "s_1982",
+type: "symptom",
+name: "تغيرات جلدية، في اليدين",
+common_name: "تغيرات جلدية على إحدى أو كلتا اليدين",
+},
+{
+id: "s_1983",
+type: "symptom",
+name: "آفة جفنيّة، حاكّة",
+common_name: "تغيرات جلدية حاكة على الجفن",
+},
+{
+id: "s_1985",
+type: "symptom",
+name: "سعال، ليلي",
+common_name: "سعال في الليل",
+},
+{
+id: "s_1988",
+type: "symptom",
+name: "تغيرات جلدية، متوسعة",
+common_name: "تغيرات جلدية تزداد بحجمها وانتشارها",
+},
+{
+id: "s_1994",
+type: "symptom",
+name: "سيلان من الأذن، مفرزات قيحية",
+common_name: "خروج سائل أخضر أو أصفر اللون من الأذن",
+},
+{
+id: "s_1995",
+type: "symptom",
+name: "وذمة، في القدمين",
+common_name: "قدمان متورمتان",
+},
+{
+id: "s_1996",
+type: "symptom",
+name: "وذمة، في الأنف",
+common_name: "تورم في الأنف",
+},
+{
+id: "s_1997",
+type: "symptom",
+name: "وذمة، في إصبع القدم",
+common_name: "تورم في إصبع من أصابع القدم",
+},
+{
+id: "s_1999",
+type: "symptom",
+name: "حمامى، في الفرج",
+common_name: "احمرار في الفرج",
+},
+{
+id: "s_2000",
+type: "symptom",
+name: "حمى تتجاوز 40° درجة مئوية (أي 104° درجة فهرنهايتية)",
+common_name: "ارتفاع درجة حرارة الجسم فوق 40° درجة مئوية (أي فوق 104° درجة فهرنهايتية)",
+},
+{
+id: "s_2001",
+type: "symptom",
+name: "خدر، في طرف سفلي واحد",
+common_name: "تنميل في طرف سفلي واحد",
+},
+{
+id: "s_2002",
+type: "symptom",
+name: "خفقان، لأكثر من 5 دقائق",
+common_name: "خفقان يستمر أكثر من 5 دقائق",
+},
+{
+id: "s_2003",
+type: "symptom",
+name: "حمامى، على إصبع من أصابع القدم",
+common_name: "إصبع محمر",
+},
+{
+id: "s_2004",
+type: "symptom",
+name: "خفقان، ناكس",
+common_name: "تكرر حالات الخفقان",
+},
+{
+id: "s_2005",
+type: "symptom",
+name: "ألم في الظفر",
+common_name: "ظفر مؤلم",
+},
+{
+id: "s_2006",
+type: "symptom",
+name: "ألم صدري، يشتد بالاستلقاء",
+common_name: "ألم في الصدر يزداد عند الاستلقاء",
+},
+{
+id: "s_2008",
+type: "symptom",
+name: "تقلصات رحمية منتظمة",
+common_name: "تقلصات رحمية منتظمة",
+},
+{
+id: "s_2010",
+type: "symptom",
+name: "تمزق السلى",
+common_name: "نزول ماء الجنين",
+},
+{
+id: "s_2011",
+type: "symptom",
+name: "مستوى جلوكوز الدم، بين 54 و70 ملغ/دل أو بين 3.0 و3.9 ممول/ل",
+common_name: "مستوى السكر في الدم بين 54 و70 ملغ/دل",
+},
+{
+id: "s_2014",
+type: "symptom",
+name: "مستوى جلوكوز الدم، غير مقيس",
+common_name: "لم يتم قياس مستوى السكر في الدم",
+},
+{
+id: "s_2016",
+type: "symptom",
+name: "رُعاف، مرة واحدة",
+common_name: "نزف من الأنف لمرة واحدة",
+},
+{
+id: "s_2017",
+type: "symptom",
+name: "رُعاف، متكرر",
+common_name: "نزيف متكرر من الأنف",
+},
+{
+id: "s_2018",
+type: "symptom",
+name: "ألم صدري، يستمر أقل من 30 دقيقة",
+common_name: "ألم في الصدر يستمر لأقل من 30 دقيقة",
+},
+{
+id: "s_2019",
+type: "symptom",
+name: "ألم صدري، يستمر بين 30 دقيقة و8 ساعات",
+common_name: "ألم في الصدر يستمر بين 30 دقيقة و8 ساعات",
+},
+{
+id: "s_2022",
+type: "symptom",
+name: "ألم صدري، يستمر أكثر من 8 ساعات",
+common_name: "ألم في الصدر يستمر أكثر من 8 ساعات",
+},
+{
+id: "s_2023",
+type: "symptom",
+name: "دوخة، ناكسة",
+common_name: "دوخة ناكسة",
+},
+{
+id: "s_2024",
+type: "symptom",
+name: "القمار المرضي",
+common_name: "القمار المفرط",
+},
+{
+id: "s_2029",
+type: "symptom",
+name: "لعب القمار، مع الكذب فيما يتعلق به",
+common_name: "الكذب فيما يتعلق بالقمار والمبالغ التي تنفق فيه",
+},
+{
+id: "s_2032",
+type: "symptom",
+name: "لعب القمار",
+common_name: "لعب القمار",
+},
+{
+id: "s_2033",
+type: "symptom",
+name: "حكة جلدية، في القدم",
+common_name: "حكة في قدم واحدة أو كلتيهما",
+},
+{
+id: "s_2034",
+type: "symptom",
+name: "اضطرابات في الوعي",
+common_name: "عدم التوجه أو التشوش",
+},
+{
+id: "s_2041",
+type: "symptom",
+name: "هالات حول الأضواء",
+common_name: "هالات حول الأضواء",
+},
+{
+id: "s_2043",
+type: "symptom",
+name: "حكة قضيبية",
+common_name: "حكة في القضيب",
+},
+{
+id: "s_2045",
+type: "symptom",
+name: "صرع",
+common_name: "اختلاج",
+},
+{
+id: "s_2047",
+type: "symptom",
+name: "نوب الغياب",
+common_name: "نوب الغياب",
+},
+{
+id: "s_2048",
+type: "symptom",
+name: "السلس البولي الليلي",
+common_name: "تبليل الفراش",
+},
+{
+id: "s_2051",
+type: "symptom",
+name: "ألم صدري، يشتد بحركة جدار الصدر",
+common_name: "ألم في الصدر يزداد عند تحريك الجذع",
+},
+{
+id: "s_2052",
+type: "symptom",
+name: "عقم ذكري",
+common_name: "عقم ذكري",
+},
+{
+id: "s_2053",
+type: "symptom",
+name: "غائط هلامي أحمر عنبي",
+common_name: "براز هلامي أحمر عنبي كمربى التوت",
+},
+{
+id: "s_2055",
+type: "symptom",
+name: "إقياء، صفراوي",
+common_name: "تقيؤ لونه أصفر مخضر",
+},
+{
+id: "s_2056",
+type: "symptom",
+name: "إقياء، لأقل من 7 أيام",
+common_name: "إقياء استمر أقل من أسبوع",
+},
+{
+id: "s_2057",
+type: "symptom",
+name: "إقياء، استمر لأكثر من 7 أيام",
+common_name: "تقيؤ استمر لأكثر من 7 أيام",
+},
+{
+id: "s_2058",
+type: "symptom",
+name: "تغيرات جلدية، على الأسطح العاطفة",
+common_name: "تغيرات جلدية على الوجه الداخلي من المفاصل",
+},
+{
+id: "s_2059",
+type: "symptom",
+name: "تغيرات جلدية، على الفروة",
+common_name: "تغيرات جلدية على الفروة",
+},
+{
+id: "s_2060",
+type: "symptom",
+name: "تغيرات جلدية، على الجذع",
+common_name: "تغيرات في جلد الرقبة أو الصدر أو البطن أو الظهر",
+},
+{
+id: "s_2063",
+type: "symptom",
+name: "حمى، لا تستجيب للعلاج",
+common_name: "ارتفاع في درجة حرارة الجسم لا تخف على خافضات الحرارة",
+},
+{
+id: "s_2064",
+type: "symptom",
+name: "بول ذو رائحة كريهة",
+common_name: "بول كريه الرائحة",
+},
+{
+id: "s_2065",
+type: "symptom",
+name: "ألم في الفم",
+common_name: "ألم في الفم",
+},
+{
+id: "s_2066",
+type: "symptom",
+name: "اختلاف في طول الأطرف",
+common_name: "عدم تساوي طول الأطراف",
+},
+{
+id: "s_2068",
+type: "symptom",
+name: "شحوب في الطرف العلوي",
+common_name: "ذراع شاحبة",
+},
+{
+id: "s_2070",
+type: "symptom",
+name: "ألم عظمي، يستمر لأقل من أسبوع",
+common_name: "ألم في العظم يستمر لأقل من أسبوع",
+},
+{
+id: "s_2071",
+type: "symptom",
+name: "ألم عظمي، يدوم أسبوعاً أو أكثر",
+common_name: "ألم في العظام يستمر أسبوعاً أو أكثر",
+},
+{
+id: "s_2072",
+type: "symptom",
+name: "اضطرابات وعي، حادّة",
+common_name: "عدم توجه أو تشوش ذهني بدأ مؤخراً",
+},
+{
+id: "s_2073",
+type: "symptom",
+name: "اضطرابات وعي، مزمنة",
+common_name: "عدم توجه أو تشوش ذهني يستمر لأكثر من أسبوع",
+},
+{
+id: "s_2074",
+type: "symptom",
+name: "ألم صدري، ينتشر إلى الطرف العلوي الأيسر",
+common_name: "ألم في الصدر ينتشر إلى الطرف العلوي الأيسر",
+},
+{
+id: "s_2076",
+type: "symptom",
+name: "ضائقة تنفسية، بعد رض",
+common_name: "اضطرابات تنفسية بعد التعرض لإصابة",
+},
+{
+id: "s_2077",
+type: "symptom",
+name: "جرح، بنزف شديد",
+common_name: "جرح نازف بشدة",
+},
+{
+id: "s_2078",
+type: "symptom",
+name: "جرح، بنزيف بسيط لا يمكن إيقافه",
+common_name: "جرح نازف بشكل بسيط ولكن لا يمكن إيقافه",
+},
+{
+id: "s_2079",
+type: "symptom",
+name: "رض حديث بدون نزف",
+common_name: "رض حديث بدون نزف",
+},
+{
+id: "s_2081",
+type: "symptom",
+name: "ألم شديد، بعد رض",
+common_name: "ألم شديد بعد حادث",
+},
+{
+id: "s_2084",
+type: "symptom",
+name: "تكدّم حول الحجاج",
+common_name: "تكدّم حول العينين",
+},
+{
+id: "s_2085",
+type: "symptom",
+name: "ألم في الظهر، يشتد بالجس",
+common_name: "ألم في الظهر يشتد عند لمس أو ضغط المنطقة المؤلمة",
+},
+{
+id: "s_2086",
+type: "symptom",
+name: "عدم القدرة على حمل ثقل الجسم، بعد رض",
+common_name: "عدم القدرة على الوقوف على أي من القدمين بعد التعرض لإصابة",
+},
+{
+id: "s_2087",
+type: "symptom",
+name: "تشوه مفصلي، بعد رض",
+common_name: "تشوه مفصل بعد التعرض لإصابة ما",
+},
+{
+id: "s_2088",
+type: "symptom",
+name: "أذية جسدية",
+common_name: "إصابة",
+},
+{
+id: "s_2091",
+type: "symptom",
+name: "ألم في كلا الطرفين العلويين، في كلتا اليدين",
+common_name: "ألم في كلتا اليدين",
+},
+{
+id: "s_2092",
+type: "symptom",
+name: "ألم في كلا الطرفين السفليين، في كلا القدمين",
+common_name: "ألم في كلا القدمين",
+},
+{
+id: "s_2093",
+type: "symptom",
+name: "وذمة، في كلتا اليدين",
+common_name: "تورّم في كلتا اليدين",
+},
+{
+id: "s_2094",
+type: "symptom",
+name: "جفاف العينين",
+common_name: "عينين جافتين",
+},
+{
+id: "s_2096",
+type: "symptom",
+name: "ألم صدري، حارق",
+common_name: "ألم حارق في الصدر",
+},
+{
+id: "s_2097",
+type: "symptom",
+name: "إعادة تذكر حدث راض، يؤدي لأعراض تطفلية",
+common_name: "إعادة تذكر حدث راض من خلال ومضات من الذاكرة أو أحلام",
+},
+{
+id: "s_2100",
+type: "symptom",
+name: "تعب",
+common_name: "تعب",
+},
+{
+id: "s_2103",
+type: "symptom",
+name: "وذمة، في القدم",
+common_name: "تورم في القدم",
+},
+{
+id: "s_2105",
+type: "symptom",
+name: "إعادة تذكر حدث راض، يؤدي لأعراض جسدية أو نفسية",
+common_name: "المعاناة من أعراض جسدية أو نفسية نتيجة إعادة تذكر حدث راض",
+},
+{
+id: "s_2107",
+type: "symptom",
+name: "الاستيقاظ في الليل",
+common_name: "الاستيقاظ في الليل",
+},
+{
+id: "s_2108",
+type: "symptom",
+name: "اضطرابات معرفية",
+common_name: "اضطرابات معرفية",
+},
+{
+id: "s_2109",
+type: "symptom",
+name: "غيبوبة",
+common_name: "غيبوبة",
+},
+{
+id: "s_2110",
+type: "symptom",
+name: "تغيرات جلدية، في المنطقة التناسلية الأنثوية",
+common_name: "تغيرات جلدية على أو حول الأعضاء التناسلية الأنثوية",
+},
+{
+id: "s_2111",
+type: "symptom",
+name: "تغيرات جلدية، في المنطقة التناسلية الذكرية",
+common_name: "تغيرات جلدية على الأعضاء التناسلية الذكرية أو حولها",
+},
+{
+id: "s_2112",
+type: "symptom",
+name: "ألم صدري جنبي بعد رض",
+common_name: "ألم صدري حاد ومفاجئ بعد أذية",
+},
+{
+id: "s_2115",
+type: "symptom",
+name: "نزف مهبلي، أثناء الحمل",
+common_name: "نزف من المهبل أثناء الحمل",
+},
+{
+id: "s_2116",
+type: "symptom",
+name: "نزيف مهبلي أثناء الحمل، خفيف",
+common_name: "تمشيح من المهبل أثناء الحمل",
+},
+{
+id: "s_2118",
+type: "symptom",
+name: "دوخة لا تُحتمل",
+common_name: "دوخة لا تحتمل",
+},
+{
+id: "s_2119",
+type: "symptom",
+name: "قرحة، غير مؤلمة",
+common_name: "قرحة غير مؤلمة",
+},
+{
+id: "s_2121",
+type: "symptom",
+name: "القلس",
+common_name: "ارتجاع حمض المعدة",
+},
+{
+id: "s_2122",
+type: "symptom",
+name: "هبوط المستقيم",
+common_name: "هبوط المستقيم",
+},
+{
+id: "s_2124",
+type: "symptom",
+name: "تنفّس صاخب",
+common_name: "تنفّس صاخب",
+},
+{
+id: "s_2125",
+type: "symptom",
+name: "انبثاق الأغشية الجنينية، سائل أمنيوسي قيحي أو كريه الرائحة",
+common_name: "ماء جنيني متلوّن أو كريه الرائحة",
+},
+{
+id: "s_2126",
+type: "symptom",
+name: "إسهال، يستمر أقل من 48 ساعة",
+common_name: "إسهال يستمر أقل من 48 ساعة",
+},
+{
+id: "s_2129",
+type: "symptom",
+name: "المشي أثناء النوم",
+common_name: "مشي أثناء النوم",
+},
+{
+id: "s_2132",
+type: "symptom",
+name: "نزف من جذع الحبل السري",
+common_name: "نزف من جذع الحبل السري",
+},
+{
+id: "s_2133",
+type: "symptom",
+name: "انتباج اليافوخ",
+common_name: "انتباج الأماكن اللينة من رأس الطفل",
+},
+{
+id: "s_2134",
+type: "symptom",
+name: "سحب ضلعي",
+common_name: "سحب ضلعي",
+},
+{
+id: "s_2135",
+type: "symptom",
+name: "شحوب حول الفم",
+common_name: "جلد أبيض فاتح حول الفم",
+},
+{
+id: "s_2138",
+type: "symptom",
+name: "بكاء دون انهمار للدموع",
+common_name: "بكاء دون انهمار للدموع",
+},
+{
+id: "s_2139",
+type: "symptom",
+name: "تغيرات جلدية، في الطيات",
+common_name: "تغيرات جلدية بين الثنيات",
+},
+{
+id: "s_2140",
+type: "symptom",
+name: "رفع الساقين لتكون الركبة ملاصقة للجذع",
+common_name: "رفع الساقين لتكون الركبة ملاصقة للجذع",
+},
+{
+id: "s_2141",
+type: "symptom",
+name: "مفرزات عينية",
+common_name: "خروج مفرزات من العين",
+},
+{
+id: "s_2142",
+type: "symptom",
+name: "عدم كسب الوزن",
+common_name: "زيادة الوزن بوتيرة بطيئة",
+},
+{
+id: "s_2143",
+type: "symptom",
+name: "طحّة زفيرية",
+common_name: "إصدار صوت شخير مع كل نَفَس",
+},
+{
+id: "s_2144",
+type: "symptom",
+name: "مظهر المريض",
+common_name: "مظهر المريض",
+},
+{
+id: "s_2145",
+type: "symptom",
+name: "مظهر المريض، يبعث على القلق الشديد",
+common_name: "مظهر المريض الذي يبعث على القلق الشديد",
+},
+{
+id: "s_2148",
+type: "symptom",
+name: "زيادة مُحيط الرأس",
+common_name: "زيادة مُحيط الرأس",
+},
+{
+id: "s_2149",
+type: "symptom",
+name: "تهيّج، يدوم أكثر من 3 أيام",
+common_name: "سرعة في الغضب تستمر أكثر من 3 أشهر",
+},
+{
+id: "s_2150",
+type: "symptom",
+name: "زلة تنفسية، في الليل",
+common_name: "صعوبة تنفس في الليل",
+},
+{
+id: "s_2151",
+type: "symptom",
+name: "خلل القدرة على تثبيت العينين",
+common_name: "عدم القدرة على تثبيت العينين",
+},
+{
+id: "s_2153",
+type: "symptom",
+name: "سيلان أنفي، مخاطي",
+common_name: "سيلان مفرزات رائقة أو بيضاء من الأنف",
+},
+{
+id: "s_2154",
+type: "symptom",
+name: "سيلان أنفي، قيحي",
+common_name: "سيلان مفرزات صفراء أو خضراء من الأنف",
+},
+{
+id: "s_2155",
+type: "symptom",
+name: "رفرفة المنخرين",
+common_name: "رفرفة المنخرين",
+},
+{
+id: "s_2156",
+type: "symptom",
+name: "إقياء يلي السعال",
+common_name: "إقياء بعد السعال",
+},
+{
+id: "s_2157",
+type: "symptom",
+name: "بقاء الحبل السري",
+common_name: "بقاء الحبل السري",
+},
+{
+id: "s_2159",
+type: "symptom",
+name: "غؤور اليافوخ",
+common_name: "انخفاض اليافوخ في رأس طفل رضيع",
+},
+{
+id: "s_2160",
+type: "symptom",
+name: "بزوغ الأسنان",
+common_name: "ظهور الأسنان",
+},
+{
+id: "s_2162",
+type: "symptom",
+name: "إمساك، يدوم 3 أشهر أو أكثر",
+common_name: "إمساك يستمر 3 أشهر أو أكثر",
+},
+{
+id: "s_2163",
+type: "symptom",
+name: "التواء عنق",
+common_name: "التواء عنق",
+},
+{
+id: "s_2164",
+type: "symptom",
+name: "تناول طعام أو شراب منتهي الصلاحية",
+common_name: "تناول أطعمة أو مشاريب فاسدة",
+},
+{
+id: "s_2165",
+type: "symptom",
+name: "سعال، ضباحي",
+common_name: "سعال كالنباح",
+},
+{
+id: "s_2166",
+type: "symptom",
+name: "وزيز، حاد",
+common_name: "وزيز حاد",
+},
+{
+id: "s_2168",
+type: "symptom",
+name: "درجة حرارة الجسم طبيعية",
+common_name: "درجة حرارة الجسم طبيعية",
+},
+{
+id: "s_2169",
+type: "symptom",
+name: "معدل ضربات قلب طبيعي",
+common_name: "نبض طبيعي",
+},
+{
+id: "s_2170",
+type: "symptom",
+name: "تظاهر لايرقاني",
+common_name: "تظاهر لايرقاني",
+},
+{
+id: "s_2171",
+type: "symptom",
+name: "أصوات تنفسية طبيعية بإصغاء الصدر",
+common_name: "أصوات تنفسية طبيعية بإصغاء الصدر",
+},
+{
+id: "s_2172",
+type: "symptom",
+name: "غياب أي علامات لإنتان طرق تنفسية علوية",
+common_name: "غياب أي علامات لإنتان طرق تنفسية علوية",
+},
+{
+id: "s_2173",
+type: "symptom",
+name: "ألم في العنق، عند تحريك الرأس",
+common_name: "ألم في الرقبة عند تحريك الرأس",
+},
+{
+id: "s_2174",
+type: "symptom",
+name: "علامات حيوية طبيعية",
+common_name: "علامات حيوية طبيعية",
+},
+{
+id: "s_2175",
+type: "symptom",
+name: "احتمال إصابة بالكَلَب",
+common_name: "عضّة حيوان",
+},
+{
+id: "s_2176",
+type: "symptom",
+name: "زلة تنفسية، تستمر بين ساعة و24 ساعة",
+common_name: "ضيق تنفس يستمر ما بين ساعة و24 ساعة",
+},
+{
+id: "s_2177",
+type: "symptom",
+name: "تغيّرات جلديّة، بلون أحمر فاتح أو زهري",
+common_name: "تغيّرات في الجلد باللون الأحمر الفاتح أو الزهري",
+},
+{
+id: "s_2178",
+type: "symptom",
+name: "وزيز، تحت حاد",
+common_name: "وزيز بدأ منذ بضعة أيام أو أسابيع",
+},
+{
+id: "s_2180",
+type: "symptom",
+name: "تشوه عظمي، غير رضي",
+common_name: "تشوّه في العظام غير مترافق مع أي إصابة حديثة",
+},
+{
+id: "s_2181",
+type: "symptom",
+name: "تشوّه عظمي، تالي لرض",
+common_name: "تشوه في العظام بعد التعرض لإصابة حديثة",
+},
+{
+id: "s_2182",
+type: "symptom",
+name: "ألم في الخاصرة",
+common_name: "ألم في إحدى أو كلا الخاصرتين",
+},
+{
+id: "s_2188",
+type: "symptom",
+name: "سيلان عيني، قيحي",
+common_name: "خروج مفرزات قيحية من العين",
+},
+{
+id: "s_2189",
+type: "symptom",
+name: "صداع، حديث، يستمر لأقل من ساعة",
+common_name: "وجع في الرأس يستمر لأقل من ساعة",
+},
+{
+id: "s_2190",
+type: "symptom",
+name: "صداع، حديث، يستمر أكثر من ساعة وأقل من يوم",
+common_name: "ألم في الرأس يستمر لأكثر من ساعة وأقل من يوم",
+},
+{
+id: "s_2191",
+type: "symptom",
+name: "صداع، حديث، يستمر لأكثر من يوم",
+common_name: "وجع في الرأس يستمر لأكثر من يوم",
+},
+{
+id: "s_2193",
+type: "symptom",
+name: "فرك الأذن",
+common_name: "شد الأذن",
+},
+{
+id: "s_2194",
+type: "symptom",
+name: "إسهال، يستمر بين 2 و14 يوماً",
+common_name: "إسهال يستمر بين 2 و14 يوماً",
+},
+{
+id: "s_2196",
+type: "symptom",
+name: "برودة في القدم وأصابعها، أحادي الجانب",
+common_name: "قدم باردة",
+},
+{
+id: "s_2200",
+type: "symptom",
+name: "شفع، يستمر أقل من 24 ساعة",
+common_name: "رؤية مزدوجة تستمر أقل من 24 ساعة",
+},
+{
+id: "s_2201",
+type: "symptom",
+name: "شفع، يستمر لأكثر من 24 ساعة",
+common_name: "رؤية مزدوجة تستمر لأكثر من 24 ساعة",
+},
+{
+id: "s_2203",
+type: "symptom",
+name: "زلة تنفسية، بعد عدّة دقائق من المشي",
+common_name: "ضيق في التنفس بعد المشي لعدة دقائق",
+},
+{
+id: "s_2204",
+type: "symptom",
+name: "زلة تنفسية، على الجهد",
+common_name: "ضيق في التنفس أثناء الجهد",
+},
+{
+id: "s_2206",
+type: "symptom",
+name: "الجُلاع",
+common_name: "تضيق جلد القلفة وتراجعها للخلف",
+},
+{
+id: "s_2207",
+type: "symptom",
+name: "وذمة، في القضيب",
+common_name: "قضيب متورم",
+},
+{
+id: "s_2208",
+type: "symptom",
+name: "قرحة، لم تشفى خلال 6 أسابيع",
+common_name: "قرحة لا تشفى",
+},
+{
+id: "s_2209",
+type: "symptom",
+name: "نوبات صرعية متكررة",
+common_name: "اختلاجات متكررة",
+},
+{
+id: "s_2211",
+type: "symptom",
+name: "شرى، استمر أكثر من 6 أسابيع",
+common_name: "حكّة استمرت أكثر من 6 أسابيع",
+},
+{
+id: "s_2212",
+type: "symptom",
+name: "مفرزات مهبلية قيحية",
+common_name: "مفرزات مهبلية قيحية",
+},
+{
+id: "s_2213",
+type: "symptom",
+name: "سلوك مؤذي للنفس أو التفكير بذلك",
+common_name: "إيذاء للنفس أو التفكير بذلك",
+},
+{
+id: "s_2222",
+type: "symptom",
+name: "جرح، في الشفة",
+common_name: "جرح في الشفة",
+},
+{
+id: "s_2226",
+type: "symptom",
+name: "احتقان أنفي، ساء بعد تحسّنه لفترة قصيرة",
+common_name: "أنف مسدود يزداد سوءاً بعد تحسّنه لفترة قصيرة",
+},
+{
+id: "s_2228",
+type: "symptom",
+name: "إيذاء حديث للنفس",
+common_name: "القيام بسلوك مؤذي للنفس حديثاً",
+},
+{
+id: "s_2230",
+type: "symptom",
+name: "إيذاء حديث للنفس، شديد",
+common_name: "إيذاء حديث وشديد للنفس",
+},
+{
+id: "s_2231",
+type: "symptom",
+name: "زلة تنفسيّة، غير معروفة الشدة",
+common_name: "ضيق في التنفس ذو شدة غير معروفة",
+},
+{
+id: "s_2234",
+type: "symptom",
+name: "عدم تناظر في حجم أو شكل الثديين",
+common_name: "ثديين غير متماثلين",
+},
+{
+id: "s_2236",
+type: "symptom",
+name: "حمامى، في الصفن",
+common_name: "احمرار في الصفن",
+},
+{
+id: "s_2238",
+type: "symptom",
+name: "عدم تناظر الثنيات الجلدية الفخذية",
+common_name: "عدم تناظر الثنيات الجلدية في الفخذ",
+},
+{
+id: "s_2241",
+type: "symptom",
+name: "نز مفرزات من السرة",
+common_name: "سيلان مفرزات من السرة",
+},
+{
+id: "s_2242",
+type: "symptom",
+name: "ألم عيني، لا يُحتمل",
+common_name: "ألم غير محتمل في العين",
+},
+{
+id: "s_2245",
+type: "symptom",
+name: "أذية للأعضاء التناسلية الذكريّة",
+common_name: "أذية للأعضاء التناسلية الذكريّة",
+},
+{
+id: "s_2246",
+type: "symptom",
+name: "أذية للأعضاء التناسلية الأنثوية",
+common_name: "أذية للأعضاء التناسلية الأنثوية",
+},
+{
+id: "s_2247",
+type: "symptom",
+name: "تضخّم مقدمة العنق",
+common_name: "تورم في مقدمة الرقبة",
+},
+{
+id: "s_2248",
+type: "symptom",
+name: "تضخّم العقد اللمفاوية الرقبية",
+common_name: "تضخّم العقد اللمفاوية في الرقبة",
+},
+{
+id: "s_2251",
+type: "symptom",
+name: "معدل ضربات قلب مجهول",
+common_name: "سرعة النبض مجهولة",
+},
+{
+id: "s_2252",
+type: "symptom",
+name: "مضض بطني، في الربع السفلي الأيسر",
+common_name: "ألم في البطن عند الضغط على الجزء السفلي الأيسر منه",
+},
+{
+id: "s_2253",
+type: "symptom",
+name: "القدم المسطحة",
+common_name: "القدم المسحاء",
+},
+{
+id: "s_2259",
+type: "symptom",
+name: "صرع انعكاسي",
+common_name: "اختلاج انعكاسي",
+},
+{
+id: "s_2260",
+type: "symptom",
+name: "تراجع اللثة",
+common_name: "لثة متراجعة",
+},
+{
+id: "s_2261",
+type: "symptom",
+name: "ضخامة في عضلات الساق",
+common_name: "زيادة في حجم عضلات الساق",
+},
+{
+id: "s_2262",
+type: "symptom",
+name: "علامة جاور",
+common_name: "النهوض من وضعية الجلوس بمساعدة اليدين واستنادهما على الساقين",
+},
+{
+id: "s_2263",
+type: "symptom",
+name: "نوبات تيت",
+common_name: "نوبات تيت",
+},
+{
+id: "s_2264",
+type: "symptom",
+name: "تعب، أثناء تناول الطعام",
+common_name: "تعب أثناء تناول الطعام",
+},
+{
+id: "s_2266",
+type: "symptom",
+name: "تغيرات جلدية، على الطرفين العلويين وتعف عن اليدين",
+common_name: "تغيرات على جلد الكتف أو الذراع أو الساعد أو المرفق أو المعصم",
+},
+{
+id: "s_2267",
+type: "symptom",
+name: "تغيرات جلدية، على الطرفين السفليين وتعف عن القدمين",
+common_name: "تغيرات جلدية على الورك أو الفخذ أو الركبة أو الساق أو الكاحل",
+},
+{
+id: "s_2268",
+type: "symptom",
+name: "سعال، متغيّر الإنتاج",
+common_name: "سعال مع خروج لبلغم أو مخاط بين الفينة والأخرى",
+},
+{
+id: "s_2269",
+type: "symptom",
+name: "طفح حويصلي على الشفتين أو في الجلد حول الفم",
+common_name: "بثرات على الشفتين أو حول الفم",
+},
+{
+id: "s_2270",
+type: "symptom",
+name: "طفح حويصلي في الأذن",
+common_name: "بثرات على الأذن",
+},
+{
+id: "s_2271",
+type: "symptom",
+name: "أعراض هضمية بعد تناول أطعمة حاوية على الغلوتين",
+common_name: "حدوث أعراض بطنية بعد تناول طعام حاو على الغلوتين",
+},
+{
+id: "s_2272",
+type: "symptom",
+name: "ضغط الدم، طبيعي أو ما قبل ارتفاع الضغط الشرياني",
+common_name: "ضغط دم طبيعي",
+},
+{
+id: "s_2273",
+type: "symptom",
+name: "ضغط الدم، غير مُقاس",
+common_name: "لم يتم قياس ضغط الدم",
+},
+{
+id: "s_2274",
+type: "symptom",
+name: "تباطؤ في النمو",
+common_name: "بطء النمو",
+},
+{
+id: "s_2275",
+type: "symptom",
+name: "ألم بطني، موضّع",
+common_name: "ألم متوضع في جزء من البطن",
+},
+{
+id: "s_2276",
+type: "symptom",
+name: "نزف شرجي، خفيف",
+common_name: "نزف خفيف من الشرج",
+},
+{
+id: "s_2277",
+type: "symptom",
+name: "نزف شرجي، شديد",
+common_name: "نزف شديد من الشرج",
+},
+{
+id: "s_2278",
+type: "symptom",
+name: "رنح حاد",
+common_name: "صعوبات حديثة بتنسيق الحركات",
+},
+{
+id: "s_2279",
+type: "symptom",
+name: "رنح تحت حاد",
+common_name: "صعوبات في تنسيق الحركات منذ بضعة أيام أو أسابيع أو أشهر",
+},
+{
+id: "s_2280",
+type: "symptom",
+name: "رنح مزمن",
+common_name: "صعوبات بتنسيق الحركات منذ أكثر من سنة",
+},
+{
+id: "s_2281",
+type: "symptom",
+name: "ألم بطني، غير محدد الموضع",
+common_name: "ألم بطني، غير محدد الموضع",
+},
+{
+id: "s_2282",
+type: "symptom",
+name: "شحوب الجلد، في أصابع اليدين",
+common_name: "أصابع يدين شاحبة",
+},
+{
+id: "s_2283",
+type: "symptom",
+name: "صرير الأسنان",
+common_name: "احتكاك الأسنان ببعضها",
+},
+{
+id: "s_2284",
+type: "symptom",
+name: "ألم في الظهر، ليلي",
+common_name: "ألم في الظهر أثناء الليل",
+},
+{
+id: "s_2285",
+type: "symptom",
+name: "كتلة جلدية، في الثلم بين الإليتين",
+common_name: "كتلة أو نتوء في الشق بين الإليتين",
+},
+{
+id: "s_2288",
+type: "symptom",
+name: "ألم بطني، ذو نمط غير معروف",
+common_name: "ألم غير محدد النمط في البطن",
+},
+{
+id: "s_2289",
+type: "symptom",
+name: "قلق الانفصال",
+common_name: "الخوف من الانفصال",
+},
+{
+id: "s_2290",
+type: "symptom",
+name: "ضعف القدرات الكلامية واللغوية، بدء سريع",
+common_name: "صعوبة حديثة الظهور في التكلّم أو فهم اللغة",
+},
+{
+id: "s_2291",
+type: "symptom",
+name: "نزوف شظوية تحت الظفر",
+common_name: "بقع أو خطوط حمراء تحت الظفر",
+},
+{
+id: "s_2292",
+type: "symptom",
+name: "ضخامة العقد اللمفاوية الإبطية",
+common_name: "تضخّم العقد اللمفاوية الموجودة في الإبط",
+},
+{
+id: "s_2294",
+type: "symptom",
+name: "نوب غياب، انعكاسية",
+common_name: "نوب غياب انعكاسية",
+},
+{
+id: "s_2296",
+type: "symptom",
+name: "غصص",
+common_name: "اختناق",
+},
+{
+id: "s_2298",
+type: "symptom",
+name: "ألم مفصلي، ميكانيكي الطبيعة",
+common_name: "ألم في مفصل يزداد بالحركة ويخف عند الراحة",
+},
+{
+id: "s_2299",
+type: "symptom",
+name: "ألم مفصلي، التهابي الطبيعة",
+common_name: "ألم مفاصل يزداد بقلّة الحركة",
+},
+{
+id: "s_2300",
+type: "symptom",
+name: "ابتلاع جسم أجنبي",
+common_name: "ابتلاع شيء ما",
+},
+{
+id: "s_2302",
+type: "symptom",
+name: "فقدان الوعي، عابر",
+common_name: "إغماء",
+},
+{
+id: "s_2303",
+type: "symptom",
+name: "فقدان الوعي، دام أكثر من دقيقة واحدة",
+common_name: "فقدان الوعي، دام أكثر من دقيقة واحدة",
+},
+{
+id: "s_2304",
+type: "symptom",
+name: "خدر، في الطرفين العلويين",
+common_name: "تنميل في الطرفين العلويين",
+},
+{
+id: "s_2306",
+type: "symptom",
+name: "خدر، في الطرفين السفليين",
+common_name: "تنميل في الطرفين السفليين",
+},
+{
+id: "s_2307",
+type: "symptom",
+name: "احتفان أنفي، حاد",
+common_name: "انسداد في الأنف استمر أقل من 10 أيام",
+},
+{
+id: "s_2308",
+type: "symptom",
+name: "احتقان أنفي، تحت حاد",
+common_name: "انسداد في الأنف استمر أكثر من 10 أيام وأقل من 3 أشهر",
+},
+{
+id: "s_2309",
+type: "symptom",
+name: "كتلة في الناحية المأبضية",
+common_name: "كتلة خلف الركبة",
+},
+{
+id: "s_2311",
+type: "symptom",
+name: "ألم بطني، لا علاقة له بالدورة الشهرية",
+common_name: "ألم ثابت في البطن لا يتغير خلال الدورة الشهرية",
+},
+{
+id: "s_2314",
+type: "symptom",
+name: "ألم في الظهر، قطني، ينتشر بشكل غير معروف",
+common_name: "ألم أسفل الظهر ينتشر بشكل غير معروف",
+},
+{
+id: "s_2315",
+type: "symptom",
+name: "خدر، في قدم واحدة",
+common_name: "تنميل في قدم واحدة",
+},
+{
+id: "s_2316",
+type: "symptom",
+name: "إسهال، ذو نمط غير معروف",
+common_name: "إسهال، ذو نمط غير معروف",
+},
+{
+id: "s_2319",
+type: "symptom",
+name: "حمى، تدوم أقل من 3 أيام",
+common_name: "ارتفاع درجة حرارة الجسم يستمر أقل من 3 أيام",
+},
+{
+id: "s_2320",
+type: "symptom",
+name: "حمى، تدوم 3-7 أيام",
+common_name: "ارتفاع في درجة حرارة الجسم يستمر فترة تتراوح بين 3 و7 أيام",
+},
+{
+id: "s_2322",
+type: "symptom",
+name: "إسهال، يدوم أكثر من 4 أسابيع",
+common_name: "إسهال يستمر أكثر من 4 أسابيع",
+},
+{
+id: "s_2328",
+type: "symptom",
+name: "إسهال، يدوم 2-4 أسبوعاً",
+common_name: "إسهال يستمر ما بين أسبوعين و4 أسابيع",
+},
+{
+id: "s_2329",
+type: "symptom",
+name: "سيلان عيني، سميك ورائق",
+common_name: "خروج مفرزات غير قيحية من العين",
+},
+{
+id: "s_2330",
+type: "symptom",
+name: "ضعف عضلي، معمم",
+common_name: "ضعف في كل عضلات الجسم",
+},
+{
+id: "s_2335",
+type: "symptom",
+name: "ألم في الطرف السفلي، في القصبة",
+common_name: "ألم في قصبة الساق",
+},
+{
+id: "s_2336",
+type: "symptom",
+name: "ثر الحليب عند رجل",
+common_name: "خروج مفرزات حليبية من الحلمة",
+},
+{
+id: "s_2338",
+type: "symptom",
+name: "مفرزات مهبلية، رمادية اللون",
+common_name: "مفرزات مهبلية رمادية اللون",
+},
+{
+id: "s_2341",
+type: "symptom",
+name: "كدمة",
+common_name: "كدمة",
+},
+{
+id: "s_2344",
+type: "symptom",
+name: "صعوبات في الكتابة",
+common_name: "صعوبات في الكتابة",
+},
+{
+id: "s_2351",
+type: "symptom",
+name: "صعوبة في القراءة",
+common_name: "صعوبة في القراءة",
+},
+{
+id: "s_2352",
+type: "symptom",
+name: "صعوبات رياضية",
+common_name: "صعوبة في تعلّم مادة الرياضيات",
+},
+{
+id: "s_2354",
+type: "symptom",
+name: "آفات فموية، متوضعة على البلعوم الخلفي",
+common_name: "آفات في الجزء الخلفي من الحلق",
+},
+{
+id: "s_2356",
+type: "symptom",
+name: "منطقة حمراء وحيدة، بقطر أكبر من 1 سم",
+common_name: "منطقة حمراء وحيدة بقطر أكبر من 1 سم",
+},
+{
+id: "s_2357",
+type: "symptom",
+name: "بقع حمراء متعددة، بقطر أكبر من 1 سم",
+common_name: "بقع حمراء متعددة بقطر أكبر من 1 سم",
+},
+{
+id: "s_2358",
+type: "symptom",
+name: "بقعة حمراء وحيدة، بقطر أقل من 1 سم",
+common_name: "بقعة حمراء وحيدة بقطر أقل من 1 سم",
+},
+{
+id: "s_2359",
+type: "symptom",
+name: "عدة بقع حمراء، بقطر أقل من 1 سم",
+common_name: "عدة بقع حمراء بقطر أقل من 1 سم",
+},
+{
+id: "s_2360",
+type: "symptom",
+name: "ورم دموي في الفروة",
+common_name: "كدمة في فروة الرأس",
+},
+{
+id: "s_2361",
+type: "symptom",
+name: "ألم عظمي، ليلي",
+common_name: "ألم في عظم يحدث أثناء الليل",
+},
+{
+id: "s_2362",
+type: "symptom",
+name: "علامة المعركة",
+common_name: "كدمة خلف الأذن",
+},
+{
+id: "s_2363",
+type: "symptom",
+name: "نز من الأنف، بعد رض",
+common_name: "خروج سائل من الأنف بعد رض",
+},
+{
+id: "s_2364",
+type: "symptom",
+name: "نز من الأذن، بعد رض",
+common_name: "خروج سائل من الأذن بعد التعرّض لرض",
+},
+{
+id: "s_2365",
+type: "symptom",
+name: "تأخّر انغلاق اليافوخ الأمامي",
+common_name: "تأخر التحام اليافوخ الأمامي",
+},
+{
+id: "s_2366",
+type: "symptom",
+name: "الحدبة الجبهية",
+common_name: "جبهة بارزة",
+},
+{
+id: "s_2367",
+type: "symptom",
+name: "التابس القحفي",
+common_name: "عظام جمجمة طريّة",
+},
+{
+id: "s_2369",
+type: "symptom",
+name: "خروج مفرزات غير طبيعية من جرح",
+common_name: "خروج مفرزات غير طبيعية من جرح",
+},
+{
+id: "s_2370",
+type: "symptom",
+name: "تغيرات جلدية حمراء، بأقطار مختلفة",
+common_name: "تغيرات جلدية حمراء،د بأقطار مختلفة",
+},
+{
+id: "s_2371",
+type: "symptom",
+name: "حمامى، غير محددة",
+common_name: "احمرار غير محدد الطبيعة في الجلد",
+},
+{
+id: "s_2373",
+type: "symptom",
+name: "نقص محيط الرأس",
+common_name: "صغر الرأس",
+},
+{
+id: "s_2374",
+type: "symptom",
+name: "لعب بنمط متكرر",
+common_name: "لعب وسلوك متكرر",
+},
+{
+id: "s_2375",
+type: "symptom",
+name: "الأكسجة الدموية غير مقاسة",
+common_name: "أكسجة الدم غير مُقاسَة",
+},
+{
+id: "s_2376",
+type: "symptom",
+name: "الأكسجة الدموية طبيعية",
+common_name: "مستوى أكسجة الدم طبيعية",
+},
+{
+id: "s_2377",
+type: "symptom",
+name: "جرح",
+common_name: "جرح",
+},
+{
+id: "s_2378",
+type: "symptom",
+name: "جرح في الجلد، رضي المنشأ",
+common_name: "جرح في الجلد بعد إصابة",
+},
+{
+id: "s_2379",
+type: "symptom",
+name: "جرح في الجلد، غير رضي",
+common_name: "جرح غير ناتج عن إصابة",
+},
+{
+id: "s_2381",
+type: "symptom",
+name: "عيوب في الميناء",
+common_name: "عيب في سن",
+},
+{
+id: "s_2382",
+type: "symptom",
+name: "تغيرات جلدية، موضّعة",
+common_name: "تغيرات جلدية محصورة في جزء محدد من الجسم",
+},
+{
+id: "s_2383",
+type: "symptom",
+name: "نقص تمعدن الميناء",
+common_name: "نقص تمعدن الميناء",
+},
+{
+id: "s_2384",
+type: "symptom",
+name: "عيوب في الميناء، متناظرة",
+common_name: "عيوب متناظرة في الأسنان",
+},
+{
+id: "s_2387",
+type: "symptom",
+name: "الأكسجة الدموية، بين 90% و94%",
+common_name: "أكسجة الدم بين 90% و94%",
+},
+{
+id: "s_2388",
+type: "symptom",
+name: "الأكسجة الدموية، بين 80% و89%",
+common_name: "أكسجة الدم بين 80% و89%",
+},
+{
+id: "s_2389",
+type: "symptom",
+name: "الأكسجة الدموية، أقل من 80%",
+common_name: "أكسجة الدم أقل من 80%",
+},
+{
+id: "s_2390",
+type: "symptom",
+name: "الأكسجة الدموية، متدهورة بشكل فجائي",
+common_name: "انخفاض مفاجئ في نسبة الأوكسجين في الدم",
+},
+{
+id: "s_2391",
+type: "symptom",
+name: "عيوب في الميناء، بقع",
+common_name: "بقع في سن",
+},
+{
+id: "s_2393",
+type: "symptom",
+name: "تغيّر لون سن إلى اللون الأبيض",
+common_name: "تغيّر لون سن إلى اللون الأبيض",
+},
+{
+id: "s_2396",
+type: "symptom",
+name: "تغيّر لون سن إلى اللون البني",
+common_name: "تلوّن سن باللون البني",
+},
+{
+id: "s_2398",
+type: "symptom",
+name: "جرح في الجلد، بعد جراحة",
+common_name: "جرح بعد عمل جراحي",
+},
+{
+id: "s_2399",
+type: "symptom",
+name: "جرح في الجلد، محدث ذاتياً",
+common_name: "جرح الذات",
+},
+{
+id: "s_2402",
+type: "symptom",
+name: "ألم أمام الأذن",
+common_name: "ألم أمام الأذن",
+},
+{
+id: "s_2403",
+type: "symptom",
+name: "انحراف الفك السفلي عند فتح الفم",
+common_name: "ميلان الفك السفلي عند فتح الفم",
+},
+{
+id: "s_2405",
+type: "symptom",
+name: "رجفان، يختفي عند إمساك الطرف أو أثناء الرضاعة",
+common_name: "رجفة تختفي عند إمساك الطرف أو أثناء الرضاعة",
+},
+{
+id: "s_2407",
+type: "symptom",
+name: "اشتباه بحالة تسمم",
+common_name: "حالة تسمم محتملة",
+},
+{
+id: "s_2408",
+type: "symptom",
+name: "التوتر الشرياني، بين 140 و179 ملم زئبقي",
+common_name: "ارتفاع ضغط الدم لما بين 140 و179 ملم زئبقي",
+},
+{
+id: "s_2409",
+type: "symptom",
+name: "التشاؤم",
+common_name: "التشاؤم",
+},
+{
+id: "s_2410",
+type: "symptom",
+name: "مضض بجس الصفن",
+common_name: "ألم عند الضغط على الصفن",
+},
+{
+id: "s_2412",
+type: "symptom",
+name: "تغيرات جلدية، على اللسان",
+common_name: "تغيرات جلدية على اللسان",
+},
+{
+id: "s_2413",
+type: "symptom",
+name: "آفات فموية، ذات حدود واضحة",
+common_name: "آفات واضحة الحدود في الفم",
+},
+{
+id: "s_2414",
+type: "symptom",
+name: "آفات فموية، متعددة",
+common_name: "آفات متعددة في الفم",
+},
+{
+id: "s_2416",
+type: "symptom",
+name: "آفات فموية، حمراء اللون",
+common_name: "آفات حمراء اللون في الفم",
+},
+{
+id: "s_2417",
+type: "symptom",
+name: "آفات فموية، أكبر من 1 سم",
+common_name: "آفات في الفم قطرها أكبر من 1 سم",
+},
+{
+id: "s_2421",
+type: "symptom",
+name: "ألم في الفم، بعد تناول طعام حار أو حامض",
+common_name: "ألم في الفم بعد تناول طعام حار أو حامض",
+},
+{
+id: "s_2422",
+type: "symptom",
+name: "آفات في الفم، تتغيّر بالموقع أو الحجم أو الشكل",
+common_name: "آفات في الفم تتغيّر بالمكان أو الحجم أو الشكل",
+},
+{
+id: "s_2424",
+type: "symptom",
+name: "آفات فموية، ناكسة",
+common_name: "آفات معاودة الظهور في الفم",
+},
+{
+id: "s_2428",
+type: "symptom",
+name: "ألم سني، متوسط الشدة",
+common_name: "ألم متوسط الشدة في سن",
+},
+{
+id: "s_2429",
+type: "symptom",
+name: "ألم سني، خفيف الشدة",
+common_name: "ألم خفيف الشدة في سن",
+},
+{
+id: "s_2430",
+type: "symptom",
+name: "ألم سني، محرض بسبب ما",
+common_name: "ألم في سن محرض بسبب ما",
+},
+{
+id: "s_2431",
+type: "symptom",
+name: "ألم سني، عفوي",
+common_name: "ألم عفوي في الأسنان",
+},
+{
+id: "s_2432",
+type: "symptom",
+name: "ألم سني، مترافق مع التعرّض لشيء بارد",
+common_name: "ألم في سن على البارد",
+},
+{
+id: "s_2433",
+type: "symptom",
+name: "ألم سني، عابر",
+common_name: "ألم عابر في الأسنان",
+},
+{
+id: "s_2438",
+type: "symptom",
+name: "ألم سني، ممض",
+common_name: "ألم ممض في سن",
+},
+{
+id: "s_2440",
+type: "symptom",
+name: "ألم سني، حاد",
+common_name: "ألم حاد في الأسنان",
+},
+{
+id: "s_2441",
+type: "symptom",
+name: "ألم سني، في أكثر من سن",
+common_name: "ألم في عدة أسنان",
+},
+{
+id: "s_2442",
+type: "symptom",
+name: "ألم سني، في سن واحد",
+common_name: "ألم في سن واحد",
+},
+{
+id: "s_2443",
+type: "symptom",
+name: "ألم سني، نابض",
+common_name: "ألم نابض في سن",
+},
+{
+id: "s_2446",
+type: "symptom",
+name: "ألم سني، منتشر",
+common_name: "ألم في الأسنان منتشر",
+},
+{
+id: "s_2449",
+type: "symptom",
+name: "ألم سني، مستمر",
+common_name: "ألم مستمر في الأسنان",
+},
+{
+id: "s_2450",
+type: "symptom",
+name: "ألم سني، يستمر 48 ساعة أو أكثر",
+common_name: "ألم في سن يستمر 48 ساعة أو أكثر",
+},
+{
+id: "s_2451",
+type: "symptom",
+name: "ألم سني، يترافق مع الاستلقاء",
+common_name: "ألم في سن يزداد عند الاستلقاء",
+},
+{
+id: "s_2452",
+type: "symptom",
+name: "ألم سني، يترافق مع تناول الحلويات أو الأطعمة والمشاريب الحامضية",
+common_name: "ألم في سن يترافق مع تناول الحلويات أو الأطعمة والمشاريب الحامضية",
+},
+{
+id: "s_2453",
+type: "symptom",
+name: "حشوة أسنان رخوة",
+common_name: "حشوة أسنان رخوة",
+},
+{
+id: "s_2454",
+type: "symptom",
+name: "إدخال جسم أجنبي، خطير",
+common_name: "إدخال جسم أجنبي خطير",
+},
+{
+id: "s_2455",
+type: "symptom",
+name: "ألم عضلي، بعد القيام بتمارين فيزيائية شديدة",
+common_name: "ألم في العضلات بعد القيام بتمارين رياضية شديدة",
+},
+{
+id: "s_2456",
+type: "symptom",
+name: "ألم سني، يستمر أقل من 48 ساعة",
+common_name: "ألم في سن يستمر أقل من 48 ساعة",
+},
+{
+id: "s_2461",
+type: "symptom",
+name: "توذّم في البلعوم",
+common_name: "تورّم في الحلق",
+},
+{
+id: "s_2462",
+type: "symptom",
+name: "لا قصة سابقة للإصابة بداء الأمعاء الالتهابي",
+common_name: "لا إصابة سابقة بداء الأمعاء الالتهابي",
+},
+{
+id: "s_2463",
+type: "symptom",
+name: "مضض بطني، في المنطقة الشرسوفية",
+common_name: "ألم في البطن عند الضغط على الجزء العلوي المتوسط منه",
+},
+{
+id: "s_2464",
+type: "symptom",
+name: "ضعف الرؤية، ثنائي الجانب",
+common_name: "ضعف في الرؤية في كلتا العينين",
+},
+{
+id: "s_2465",
+type: "symptom",
+name: "تورّم في أحد جانبي العنق",
+common_name: "انتفاخ في أحد جانبي العنق",
+},
+{
+id: "s_2467",
+type: "symptom",
+name: "تورم كل العنق",
+common_name: "انتفاخ كل الرقبة",
+},
+{
+id: "s_2468",
+type: "symptom",
+name: "غياب الوعي، عند الوقوف لفترة طويلة",
+common_name: "فقدان الوعي عند الوقوف لفترة طويلة",
+},
+{
+id: "s_2469",
+type: "symptom",
+name: "إيقاف أو تقليل كمية الأفيون المتناولة",
+common_name: "إيقاف أو تقليل كمية الأفيون المتناولة",
+},
+{
+id: "s_2470",
+type: "symptom",
+name: "رهاب الشيخوخة",
+common_name: "الخوف من التقدم بالعمر أو الشيخوخة",
+},
+{
+id: "s_2471",
+type: "symptom",
+name: "غياب الوعي، أثناء الجلوس أو الاستلقاء",
+common_name: "فقدان الوعي أثناء الجلوس أو الاستلقاء",
+},
+{
+id: "s_2472",
+type: "symptom",
+name: "غياب الوعي، أثناء التمارين",
+common_name: "فقدان الوعي أثناء إجراء التمارين",
+},
+{
+id: "s_2473",
+type: "symptom",
+name: "الرغبة بزيادة الكتلة العضلية",
+common_name: "وجود رغبة كبيرة لزيادة الكتلة العضلية",
+},
+{
+id: "s_2474",
+type: "symptom",
+name: "غياب الوعي، في مكان دافئ",
+common_name: "فقدان الوعي في مكان دافئ",
+},
+{
+id: "s_2475",
+type: "symptom",
+name: "غياب الوعي، عند التوتر",
+common_name: "فقدان الوعي عند التوتر",
+},
+{
+id: "s_2477",
+type: "symptom",
+name: "حمامى، في الأطراف، متناظرة",
+common_name: "احمرار متناظر في جلد الأطراف",
+},
+{
+id: "s_2481",
+type: "symptom",
+name: "حمامى، في العنق",
+common_name: "احمرار في الرقبة",
+},
+{
+id: "s_2484",
+type: "symptom",
+name: "حمامى، في الصدر",
+common_name: "احمرار في جلد الصدر",
+},
+{
+id: "s_2485",
+type: "symptom",
+name: "ألم سنّي، مترافق مع اللمس",
+common_name: "ألم في سن يترافق مع اللمس",
+},
+{
+id: "s_2487",
+type: "symptom",
+name: "مستوى جلوكوز الدم، أقل من 54 ملغ/دل أو أقل من 3 ممول/ل",
+common_name: "انخفاض شديد في مستوى سكر الدم، أقل من 54 ملغ/دل",
+},
+{
+id: "s_2489",
+type: "symptom",
+name: "ضعف في الذاكرة، ظهر في غضون أقل من 24 ساعة",
+common_name: "فقدان في الذاكرة ظهر خلال الساعات الـ24 الماضية",
+},
+{
+id: "s_2490",
+type: "symptom",
+name: "ضعف في الذاكرة، ظهر منذ أكثر من 24 ساعة",
+common_name: "فقدان في الذاكرة ظهر بشكل تدريجي خلال عدة أيام أو أشهر",
+},
+{
+id: "s_2491",
+type: "symptom",
+name: "ألم سني، مع صعوبة في تحديد عدد الأسنان المؤلمة",
+common_name: "صعوبة في تحديد عدد الأسنان المؤلمة",
+},
+{
+id: "s_2494",
+type: "symptom",
+name: "تشنجات عضلية، في الليل",
+common_name: "تشنجات عضلية أثناء الليل",
+},
+{
+id: "s_2495",
+type: "symptom",
+name: "لسان متعرّج",
+common_name: "لسان صدفي",
+},
+{
+id: "s_2496",
+type: "symptom",
+name: "انسحال شديد في النسج الصلبة للسن",
+common_name: "تآكل شديد في السن",
+},
+{
+id: "s_2498",
+type: "symptom",
+name: "ألم في الفك، يشتد صباحاً",
+common_name: "ألم في الفك يحدث صباحاً",
+},
+{
+id: "s_2499",
+type: "symptom",
+name: "ألم وجهي، ثنائي الجانب",
+common_name: "ألم في كلا جانبي الوجه",
+},
+{
+id: "s_2501",
+type: "symptom",
+name: "ألم في الفك، عند اللمس",
+common_name: "ألم في الفك يظهر عند لمسه",
+},
+{
+id: "s_2506",
+type: "symptom",
+name: "تشنجات عضلية، عند بداية النوم",
+common_name: "تشنجات عضلية عند بدء النوم",
+},
+{
+id: "s_2507",
+type: "symptom",
+name: "الهلوسة التنويرية",
+common_name: "هلوسات عند بداية النوم",
+},
+{
+id: "s_2508",
+type: "symptom",
+name: "إطراق، حاد",
+common_name: "تدلي في الجفنين منذ أقل من أسبوع واحد",
+},
+{
+id: "s_2510",
+type: "symptom",
+name: "تراجع الحليمات بين السنيّة",
+common_name: "ظهور مثلثات سوداء بين الأسنان",
+},
+{
+id: "s_2511",
+type: "symptom",
+name: "إطراق، مزمن",
+common_name: "تدلي في الجفنين لأكثر من 7 أيام",
+},
+{
+id: "s_2512",
+type: "symptom",
+name: "غثيان، محرّض بالحركة",
+common_name: "الشعور برغبة بالتقيؤ عند الحركة",
+},
+{
+id: "s_2514",
+type: "symptom",
+name: "هجرة الأسنان",
+common_name: "تغيّر مكان الأسنان",
+},
+{
+id: "s_2516",
+type: "symptom",
+name: "صداع، يوقظ من النوم",
+common_name: "الاستيقاظ من النوم بسبب ألم الرأس",
+},
+{
+id: "s_2517",
+type: "symptom",
+name: "وضع الأشياء أو اليد في الفم بشكل مبالغ به",
+common_name: "وضع الأشياء أو اليد في الفم",
+},
+{
+id: "s_2518",
+type: "symptom",
+name: "البراز الانتقالي لحديث الولادة",
+common_name: "براز مائي أو محبب متكرر عند وليد",
+},
+{
+id: "s_2519",
+type: "symptom",
+name: "براز أصفر أو أخضر اللون",
+common_name: "غائط أصفر أو أخضر",
+},
+{
+id: "s_2520",
+type: "symptom",
+name: "صَلَع أندروجيني",
+common_name: "تساقط شعر الرأس الموجود على جانبيه أو في قمّته",
+},
+{
+id: "s_2521",
+type: "symptom",
+name: "غائط ذو لون بني",
+common_name: "براز بني اللون",
+},
+{
+id: "s_2523",
+type: "symptom",
+name: "براز أسود اللون، متعلّق بنوعية الطعام أو الأدوية المتناولة",
+common_name: "خروج أسود اللون ناتج عن نوعية الطعام أو الأدوية المتناولة",
+},
+{
+id: "s_2524",
+type: "symptom",
+name: "عينان محرّتان",
+common_name: "احمرار في كلتا العينين",
+},
+{
+id: "s_2532",
+type: "symptom",
+name: "آفة في الفم، مفردة",
+common_name: "آفة وحيدة في الفم",
+},
+{
+id: "s_2533",
+type: "symptom",
+name: "آفات فموية، قطرها أقل من 1 سم",
+common_name: "آفات في الفم قطرها أقل من 1 سم",
+},
+{
+id: "s_2535",
+type: "symptom",
+name: "آفات فموية، مؤلمة",
+common_name: "آفات مؤلمة في الفم",
+},
+{
+id: "s_2537",
+type: "symptom",
+name: "آفات فموية، تدوم أقل من 3 أسابيع",
+common_name: "آفات في الفم تستمر فترة لا تزيد عن 3 أسابيع",
+},
+{
+id: "s_2538",
+type: "symptom",
+name: "آفات فمويّة، تدوم 3 أسابيع على الأقل",
+common_name: "آفات في الفم تستمر لـ3 أسابيع على الأقل",
+},
+{
+id: "s_2541",
+type: "symptom",
+name: "احتلام",
+common_name: "قذف المني أثناء النوم",
+},
+{
+id: "s_2543",
+type: "symptom",
+name: "ألم وجهي، غير مُحرَّض",
+common_name: "ألم في الوجه عفوي من دون سبب",
+},
+{
+id: "s_2544",
+type: "symptom",
+name: "ألم وجهي، مستمر",
+common_name: "ألم مستمر في الوجه",
+},
+{
+id: "s_2545",
+type: "symptom",
+name: "ألم سني، حساسية للقرع",
+common_name: "ألم في سن يتحرّض بنقره",
+},
+{
+id: "s_2546",
+type: "symptom",
+name: "تغاير لون القزحيتين",
+common_name: "اختلاف لون العينين",
+},
+{
+id: "s_2547",
+type: "symptom",
+name: "غياب الخصية من كيس الصفن",
+common_name: "غياب الخصية من كيس الصفن",
+},
+{
+id: "s_2548",
+type: "symptom",
+name: "خصية نطاطة",
+common_name: "خصية قابلة للانكماش",
+},
+{
+id: "s_2551",
+type: "symptom",
+name: "حمامى، في الطرفين العلويين وتعف عن اليدين",
+common_name: "احمرار في جلد الكتف أو الذراع أو الساعد أو المرفق أو المعصم",
+},
+{
+id: "s_2552",
+type: "symptom",
+name: "حمامى، في الطرفين السفليين وتعف عن القدمين",
+common_name: "احمرار في جلد الورك أو الفخذ أو الركبة أو الساق أو الكاحل",
+},
+{
+id: "s_2553",
+type: "symptom",
+name: "آفات فموية، ناتجة عن رض",
+common_name: "آفات في الفم ناتجة عن التعرض لإصابة ما",
+},
+{
+id: "s_2557",
+type: "symptom",
+name: "تغيرات جلدية، في الأذنين",
+common_name: "تغيرات جلدية على الأذنين",
+},
+{
+id: "s_2558",
+type: "symptom",
+name: "ألم بطني، ذو بدء غير محدد",
+common_name: "ألم في البطن غير معروف متى وكيف بدأ",
+},
+{
+id: "s_2559",
+type: "symptom",
+name: "حمامى، في القدم",
+common_name: "احمرار في القدم",
+},
+{
+id: "s_2563",
+type: "symptom",
+name: "يرقان، ناكس",
+common_name: "يرقان ناكس",
+},
+{
+id: "s_2565",
+type: "symptom",
+name: "ألم سنّي، ناتج عن رض",
+common_name: "ألم في سن بسبب التعرّض لرض عليه",
+},
+{
+id: "s_2566",
+type: "symptom",
+name: "صُداع، موضّع",
+common_name: "ألم في الرأس يتوضّع في مكان محدد منه",
+},
+{
+id: "s_2567",
+type: "symptom",
+name: "صُداع، في مكان غير محدد",
+common_name: "ألم في الرأس يتوضّع في مكان غير محدد منه",
+},
+{
+id: "s_2568",
+type: "symptom",
+name: "صُداع، جداري",
+common_name: "ألم في الرأس في الجزء العلوي منه",
+},
+{
+id: "s_2569",
+type: "symptom",
+name: "يرقان، جلدي",
+common_name: "اصفرار الجلد",
+},
+{
+id: "s_2571",
+type: "symptom",
+name: "عسر البلع، شديد",
+common_name: "صعوبة شديدة في البلع",
+},
+{
+id: "s_2572",
+type: "symptom",
+name: "أذيّة عينية",
+common_name: "أذية للعين",
+},
+{
+id: "s_2574",
+type: "symptom",
+name: "إصابة سابقة بنوب نقص السكر",
+common_name: "إصابة سابقة بنوب نقص السكر",
+},
+{
+id: "s_2575",
+type: "symptom",
+name: "القدرة على تدبير انخفاض سكر الدم",
+common_name: "القدرة على علاج انخفاض جلوكوز الدم",
+},
+{
+id: "s_2577",
+type: "symptom",
+name: "عين واحدة محمرّة",
+common_name: "احمرار في عين واحدة",
+},
+{
+id: "s_2579",
+type: "symptom",
+name: "توسع في أوردة الساق",
+common_name: "دوالي الساقين",
+},
+{
+id: "s_2580",
+type: "symptom",
+name: "توسع في أوردة البطن",
+common_name: "دوالي البطن",
+},
+{
+id: "s_2581",
+type: "symptom",
+name: "كتلة في كيس الصفن، توسع في الأوردة",
+common_name: "دوالي الخصية",
+},
+{
+id: "s_2582",
+type: "symptom",
+name: "ألم في المنطقة الإربية",
+common_name: "ألم في ثنية الفخذ",
+},
+{
+id: "s_2584",
+type: "symptom",
+name: "جرح ناتج عن لدغة أفعى",
+common_name: "عضة أفعى",
+},
+{
+id: "s_2586",
+type: "symptom",
+name: "الزرام",
+common_name: "انقطاع البول",
+},
+{
+id: "s_2588",
+type: "symptom",
+name: "لدغة عنكبوت، من نوع غير معروف",
+common_name: "لدغة عنكبوت لا يُعرف إن كان ساماً أم لا",
+},
+{
+id: "s_2590",
+type: "symptom",
+name: "لون البول طبيعي",
+common_name: "لون البول طبيعي",
+},
+{
+id: "s_2591",
+type: "symptom",
+name: "ألم مفصلي، في كلتا الركبتين",
+common_name: "ألم في كلتا الركبتين",
+},
+{
+id: "s_2592",
+type: "symptom",
+name: "ألم مفصلي، في كلا الركبتين، أثناء الحركة",
+common_name: "ألم في كلا الركبتين عند تحريكهما",
+},
+{
+id: "s_2593",
+type: "symptom",
+name: "لدغة عنكبوت قد يكون ساماً",
+common_name: "لدغة عنكبوت قد يكون ساماً",
+},
+{
+id: "s_2594",
+type: "symptom",
+name: "لدغة عنكبوت، غير سام",
+common_name: "لدغة عنكبوت غير سام",
+},
+{
+id: "s_2598",
+type: "symptom",
+name: "بثور فموية",
+common_name: "بثور في الفم",
+},
+{
+id: "s_2599",
+type: "symptom",
+name: "جرح، بنزيف يمكن إيقافه",
+common_name: "جرح نازف بنزيف يمكن إيقافه",
+},
+{
+id: "s_2600",
+type: "symptom",
+name: "تضخّم في أحد أوردة الصدر",
+common_name: "تضخم أوردة الصدر",
+},
+{
+id: "s_2604",
+type: "symptom",
+name: "لون البول غير معروف",
+common_name: "لون البول غير معروف",
+},
+{
+id: "s_2605",
+type: "symptom",
+name: "تغيرات جلدية، تتوضع على الشفتين أو حولهما",
+common_name: "تغيرات جلدية متوضعة على الشفتين أو حولهما",
+},
+{
+id: "s_2606",
+type: "symptom",
+name: "مضض في العمود الفقري",
+common_name: "ألم عند الضغط على العمود الفقري",
+},
+{
+id: "s_2608",
+type: "symptom",
+name: "رجفان، في كلا الساقين",
+common_name: "رجفة في كلا الساقين",
+},
+{
+id: "s_2609",
+type: "symptom",
+name: "اختبار تحرّي كسر الفك السفلي باستخدام خافض اللسان",
+common_name: "اختبار كشف كسر الفك باستخدام خافض اللسان",
+},
+{
+id: "s_2610",
+type: "symptom",
+name: "ألم مفصلي، في إحدى أو كلتا الركبتين",
+common_name: "ألم في إحدى أو كلتا الركبتين",
+},
+{
+id: "s_2611",
+type: "symptom",
+name: "رجفان، في إحدى الساقين فقط",
+common_name: "رجفة في إحدى الساقين فقط",
+},
+{
+id: "s_2612",
+type: "symptom",
+name: "تجنّب الذهاب إلى المنزل",
+common_name: "تجنّب الذهاب إلى المنزل",
+},
+{
+id: "s_2614",
+type: "symptom",
+name: "ورم دموي تحت اللسان",
+common_name: "تجمّع دموي تحت اللسان",
+},
+{
+id: "s_2615",
+type: "symptom",
+name: "الخوف من شخص محدد",
+common_name: "الخوف من شخص أو أشخاص محددين",
+},
+{
+id: "s_2619",
+type: "symptom",
+name: "ألم في الجلد، يتحرّض بالسباحة في البحر أو المحيط",
+common_name: "ألم في الجلد عند السباحة في مياه البحر أو المحيط",
+},
+{
+id: "s_2622",
+type: "symptom",
+name: "نقص الوارد من السوائل",
+common_name: "عدم شرب ما يكفي من السوائل",
+},
+{
+id: "s_2624",
+type: "symptom",
+name: "ألم في الطرف العلوي، يدوم أقل من 24 ساعة",
+common_name: "ألم في الطرف العلوي يستمر أقل من 24 ساعة",
+},
+{
+id: "s_2625",
+type: "symptom",
+name: "ألم في الطرف العلوي، يدوم أكثر من 3 أشهر",
+common_name: "ألم في الطرف العلوي يستمر أكثر من 3 أشهر",
+},
+{
+id: "s_2626",
+type: "symptom",
+name: "إمساك، يدوم شهراً أو أكثر",
+common_name: "إمساك يستمر شهراً أو أكثر",
+},
+{
+id: "s_2627",
+type: "symptom",
+name: "وذمة، حول الحجاج، في عين واحدة",
+common_name: "تورم حول إحدى العينين",
+},
+{
+id: "s_2630",
+type: "symptom",
+name: "حمامى، حول إحدى العينين",
+common_name: "احمرار حول إحدى العينين فقط",
+},
+{
+id: "s_2633",
+type: "symptom",
+name: "حمامى، حول إحدى أو كلتا العينين",
+common_name: "احمرار حول إحدى أو كلتا العينين",
+},
+{
+id: "s_2634",
+type: "symptom",
+name: "فقدان القدرة على تحريك مفصل",
+common_name: "عدم القدرة على تحريك مفصل",
+},
+{
+id: "s_2635",
+type: "symptom",
+name: "نقص حاد في الوزن",
+common_name: "نقص حاد في الوزن",
+},
+{
+id: "s_2636",
+type: "symptom",
+name: "ألم في الطرف العلوي، يدوم فترة تتراوح بين يوم واحد و7 أيام",
+common_name: "ألم في الطرف العلوي يستمر فترة تتراوح بين يوم واحد و7 أيام",
+},
+{
+id: "s_2637",
+type: "symptom",
+name: "ألم في الطرف العلوي، يدوم فترة تتراوح بين أسبوع واحد و3 أشهر",
+common_name: "ألم في الطرف العلوي يستمر فترة تتراوح بين أسبوع واحد و3 أشهر",
+},
+{
+id: "s_2638",
+type: "symptom",
+name: "تشنجات عضلية، في الطرف السفلي",
+common_name: "تشنجات في الساق",
+},
+{
+id: "s_2639",
+type: "symptom",
+name: "وذمة، حول الحجاج، في العينين",
+common_name: "تورّم حول العينين",
+},
+{
+id: "s_2641",
+type: "symptom",
+name: "مظهر السليم",
+common_name: "مظهر السليم",
+},
+{
+id: "s_2643",
+type: "symptom",
+name: "نشاط جنسي",
+common_name: "شخص مارس الجنس في الماضي",
+},
+{
+id: "s_2645",
+type: "symptom",
+name: "تعب، نقص اللياقة البدنية",
+common_name: "تناقص اللياقة البدنية وضعف القدرة على تحمل الجهد",
+},
+{
+id: "s_2646",
+type: "symptom",
+name: "رجفان، في إحدى أو كلتا اليدين",
+common_name: "رجفة في إحدى أو كلتا اليدين",
+},
+{
+id: "s_2647",
+type: "symptom",
+name: "رجفان، في إحدى أو كلا الساقين",
+common_name: "رجفة في إحدى أو كلا الساقين",
+},
+{
+id: "s_2648",
+type: "symptom",
+name: "الألم الخيفي",
+common_name: "اضطراب حاسة الألم",
+},
+{
+id: "s_2650",
+type: "symptom",
+name: "الاعتداء الجسدي المتكرر على الآخرين",
+common_name: "الاعتداء الجسدي المتكرر على الآخرين",
+},
+{
+id: "s_2651",
+type: "symptom",
+name: "نفث الدم، شديد",
+common_name: "بصق كميات كبيرة من الدم",
+},
+{
+id: "s_2652",
+type: "symptom",
+name: "الموافقة على طرح أسئلة متعلقة بالحياة الجنسية",
+common_name: "الموافقة على الإجابة عن أسئلة متعلقة بالحياة الجنسية",
+},
+{
+id: "s_2658",
+type: "symptom",
+name: "إقياء، طعامي",
+common_name: "تقيؤ لطعام",
+},
+{
+id: "s_2661",
+type: "symptom",
+name: "كتلة جلدية، مع نقطة مركزية",
+common_name: "كتلة في الجلد تحتوي نقطة في مركزها",
+},
+{
+id: "s_2663",
+type: "symptom",
+name: "نوبات مزاج اكتئابي، تدوم أقل من أسبوعين",
+common_name: "مزاج اكتئابي يستمر أقل من أسبوعين",
+},
+{
+id: "s_2664",
+type: "symptom",
+name: "نوبات مزاج اكتئابي، تدوم فترة أطول من سنتين",
+common_name: "مزاج اكتئابي يستمر فترة أطول من سنتين",
+},
+{
+id: "s_2665",
+type: "symptom",
+name: "نوبة مزاج اكتئابي، بدأت في الفترة ما حول الولادة",
+common_name: "اكتئاب متعلّق بالولادة",
+},
+{
+id: "s_2666",
+type: "symptom",
+name: "نوبات مزاج اكتئابي، تدوم فترة تتراوح بين أسبوعين وسنة واحدة",
+common_name: "مزاج اكتئابي يستمر فترة تتراوح بين أسبوعين وسنة واحدة",
+},
+{
+id: "s_2667",
+type: "symptom",
+name: "نوبات مزاج اكتئابي، تدوم فترة تتراوح بين سنة وسنتين",
+common_name: "مزاج اكتئابي يستمر فترة تتراوح بين سنة وسنتين",
+},
+{
+id: "s_2668",
+type: "symptom",
+name: "كتلة جلدية، شفافة للضوء",
+common_name: "كتلة في الجلد شفافة عند تسليط الضوء عليها",
+},
+{
+id: "s_2669",
+type: "symptom",
+name: "نوبة مزاج مرتفع، تستمر 3 أيام أو أقل",
+common_name: "مزاج مرتفع يستمر 3 أيام أو أقل",
+},
+{
+id: "s_2670",
+type: "symptom",
+name: "نوبة مزاج مرتفع، تستمر فترة بين 4 و6 أيام",
+common_name: "مزاج مرتفع يستمر فترة تتراوح بين 4 و6 أيام",
+},
+{
+id: "s_2671",
+type: "symptom",
+name: "نوبة مزاج مرتفع، تستمر 7 أيام أو أكثر",
+common_name: "مزاج مرتفع يستمر 7 أيام أو أكثر",
+},
+{
+id: "s_2672",
+type: "symptom",
+name: "نوبة مزاج مرتفع، محرّضة باستعمال مادة معيّنة",
+common_name: "مزاج مرتفع ناتج عن استخدام مادة ما",
+},
+{
+id: "s_2673",
+type: "symptom",
+name: "تغيرات جلدية، على الرأس",
+common_name: "تغيرات جلدية على الرأس",
+},
+{
+id: "s_2674",
+type: "symptom",
+name: "تغيرات جلدية، تُسبق بحُمّى أو أي أعراض أخرى تدل على الإصابة بعدوى في الجهاز التنفسي",
+common_name: "تغيرات في الجلد تُسبق بحمى أو غيرها من أعراض الرشح",
+},
+{
+id: "s_2675",
+type: "symptom",
+name: "تقلبات المزاج، تدوم أكثر من سنتين",
+common_name: "تقلبات في المزاج تستمر أكثر من سنتين",
+},
+{
+id: "s_2676",
+type: "symptom",
+name: "تقلبات المزاج، تدوم أقل من سنة واحدة",
+common_name: "تقلبات في المزاج تستمر أقل من سنة واحدة",
+},
+{
+id: "s_2677",
+type: "symptom",
+name: "نوبة مزاج اكتئابي، محرّضة باستعمال مادة معيّنة",
+common_name: "اكتئاب متعلق بسوء استخدام مادة ما",
+},
+{
+id: "s_2678",
+type: "symptom",
+name: "ألم سني، غير معروف السبب",
+common_name: "ألم في الأسنان لا يعرف سببه",
+},
+{
+id: "s_2680",
+type: "symptom",
+name: "المزاج الحالي، مرتفع",
+common_name: "مزاج مرتفع حالياً",
+},
+{
+id: "s_2681",
+type: "symptom",
+name: "المزاج الحالي، اكتئابي",
+common_name: "مزاج اكتئابي حالياً",
+},
+{
+id: "s_2682",
+type: "symptom",
+name: "المزاج الحالي، سوي",
+common_name: "مزاج طبيعي حالياً",
+},
+{
+id: "s_2684",
+type: "symptom",
+name: "كتلة جلدية، تتوضع على المعصم",
+common_name: "كتلة أو نتوء في المعصم",
+},
+{
+id: "s_2686",
+type: "symptom",
+name: "تقلبات المزاج، تدوم فترة تتراوح بين سنة وسنتين",
+common_name: "تقلبات في المزاج تستمر فترة تتراوح بين سنة وسنتين",
+},
+{
+id: "s_2687",
+type: "symptom",
+name: "تقلبات مزاجية، سريعة للغاية",
+common_name: "تقلبات مزاجية سريعة",
+},
+{
+id: "s_2692",
+type: "symptom",
+name: "حرق كامل الاستدارة",
+common_name: "حرق يشمل كامل المحيط",
+},
+{
+id: "s_2696",
+type: "symptom",
+name: "فقدان الحس في طرف واحد، يدوم أقل من 24 ساعة",
+common_name: "غياب الحس في ذراع واحدة أو ساق واحدة يستمر أقل من 24 ساعة",
+},
+{
+id: "s_2702",
+type: "symptom",
+name: "فقدان الحس في طرف واحد، يدوم فترة تتراوح بين 24 ساعة و4 أسابيع",
+common_name: "غياب الحس في ذراع واحدة أو ساق واحدة يستمر فترة تتراوح بين 24 ساعة و4 أسابيع",
+},
+{
+id: "s_2703",
+type: "symptom",
+name: "فقدان الحس في طرف واحد، يدوم أكثر من 4 أسابيع",
+common_name: "غياب الحس في ذراع واحدة أو ساق واحدة يستمر أكثر من 4 أسابيع",
+},
+{
+id: "s_2705",
+type: "symptom",
+name: "سلوك التجنّب، متعلّق بحدث صادم سابق",
+common_name: "سلوك التهرّب من حدث صادم سابق",
+},
+{
+id: "s_2706",
+type: "symptom",
+name: "المشارفة على الموت في الماضي",
+common_name: "المشارفة على الموت في الماضي",
+},
+{
+id: "s_2707",
+type: "symptom",
+name: "التعرّض لكارثة طبيعية في الماضي",
+common_name: "مشاهدة أو التعرّض لكارثة طبيعية في الماضي",
+},
+{
+id: "s_2708",
+type: "symptom",
+name: "التعرّض لحادث مروري خطير",
+common_name: "مشاهدة أو التعرّض لحادث مروري خطير",
+},
+{
+id: "s_2709",
+type: "symptom",
+name: "قصة سابقة للتعرض لحدث راض أو عنيف",
+common_name: "التعرض لحدث راض أو عنيف في الماضي",
+},
+{
+id: "s_2710",
+type: "symptom",
+name: "قصة سابقة لوفاة شخص مقرّب بشكل مفاجئ",
+common_name: "وفاة مفاجئة لشخص مقرّب في الماضي",
+},
+{
+id: "s_2711",
+type: "symptom",
+name: "نوبات صرعية، النوبة الأولى",
+common_name: "أول نوبة صرعية",
+},
+{
+id: "s_2712",
+type: "symptom",
+name: "نوبات صرعية، عدد غير محدد",
+common_name: "عدم التأكد من عدد الاختلاجات التي حدثت في الماضي",
+},
+{
+id: "s_2713",
+type: "symptom",
+name: "اضطرابات متعلقة بضغوط أو حدث صادم",
+common_name: "اضطرابات متعلقة بضغوط أو حدث صادم",
+},
+{
+id: "s_2714",
+type: "symptom",
+name: "قصة سابقة للتعرض لصدمة نفسية",
+common_name: "التعرض لصدمة نفسية في الماضي",
+},
+{
+id: "s_2715",
+type: "symptom",
+name: "اعتداء جسدي حديث على الآخرين، مهدد للحياة أو الصحة",
+common_name: "اعتداء جسدي حديث على الآخرين بحيث يكون مهدداً للحياة أو مؤثراً على الصحة",
+},
+{
+id: "s_2717",
+type: "symptom",
+name: "قيح متجمع تحت جلد أحد أصابع القدمين",
+common_name: "قيح متجمع تحت جلد أحد أصابع القدمين",
+},
+{
+id: "s_2718",
+type: "symptom",
+name: "وذمة، في كل الوجه",
+common_name: "تورم كامل الوجه",
+},
+{
+id: "s_2727",
+type: "symptom",
+name: "فرط اليقظة",
+common_name: "حالة من التيقظ والحذر الدائمين",
+},
+{
+id: "s_2729",
+type: "symptom",
+name: "بول عكر",
+common_name: "بول أبيض حليبي",
+},
+{
+id: "s_2730",
+type: "symptom",
+name: "تغيرات جلدية، على الردفين",
+common_name: "تغيرات جلدية على الردفين",
+},
+{
+id: "s_2731",
+type: "symptom",
+name: "الوكعة",
+common_name: "ورم في إبهام القدم",
+},
+{
+id: "s_2733",
+type: "symptom",
+name: "سلوك هوسي",
+common_name: "سلوك هوسي",
+},
+{
+id: "s_2734",
+type: "symptom",
+name: "سلوك هوسي، إسراف في إنفاق المال",
+common_name: "إنفاق المال بإسراف أثناء المرور بحالة مزاجية مضطربة",
+},
+{
+id: "s_2735",
+type: "symptom",
+name: "سلوك هوسي، ديون متكررة",
+common_name: "اقتراض المال بشكل متكرر أثناء المرور بحالة مزاجية مضطربة",
+},
+{
+id: "s_2737",
+type: "symptom",
+name: "استجابة إجفالية مبالغ بها",
+common_name: "جفل",
+},
+{
+id: "s_2738",
+type: "symptom",
+name: "وهم، يدوم أقل من شهر واحد",
+common_name: "توهمات تستمر لأقل من شهر واحد",
+},
+{
+id: "s_2739",
+type: "symptom",
+name: "وهم، يدوم فترة تتراوح بين شهر و3 أشهر",
+common_name: "توهمات تستمر فترة تتراوح بين شهر و3 أشهر",
+},
+{
+id: "s_2740",
+type: "symptom",
+name: "وهم، يدوم 4 أشهر أو أكثر",
+common_name: "توهمات تستمر 4 أشهر أو أكثر",
+},
+{
+id: "s_2741",
+type: "symptom",
+name: "هلوسات، تدوم أقل من شهر",
+common_name: "هلوسات تستمر أقل من شهر",
+},
+{
+id: "s_2742",
+type: "symptom",
+name: "هلوسات، تدوم فترة تتراوح بين شهر واحد و3 أشهر",
+common_name: "هلوسات تستمر فترة تتراوح بين شهر واحد و3 أشهر",
+},
+{
+id: "s_2743",
+type: "symptom",
+name: "هلوسات، تدوم 4 أشهر أو أكثر",
+common_name: "هلوسات تستمر 4 أشهر أو أكثر",
+},
+{
+id: "s_2744",
+type: "symptom",
+name: "وهم السرقة",
+common_name: "الاعتقاد بأن الشخص تعرَّض للسرقة رغم أن الأدلة تنفي ذلك",
+},
+{
+id: "s_2746",
+type: "symptom",
+name: "إسهال، مُدمّى",
+common_name: "إسهال يحتوي دماً",
+},
+{
+id: "s_2749",
+type: "symptom",
+name: "عدم القدرة على تدبير انخفاض سكر الدم",
+common_name: "عدم القدرة على تدبير انخفاض سكر الدم",
+},
+{
+id: "s_2752",
+type: "symptom",
+name: "الشعور بالاستنزاف بسبب العمل أو الدراسة",
+common_name: "الشعور بالإنهاك الشديد بسبب العمل أو الدراسة",
+},
+{
+id: "s_2753",
+type: "symptom",
+name: "الانفصال نفسياً عن العمل أو الدراسة",
+common_name: "الانفصال ذهنياً عن العمل أو الدراسة",
+},
+{
+id: "s_2754",
+type: "symptom",
+name: "ضعف القدرات الكلامية واللغوية",
+common_name: "صعوبة في التكلم",
+},
+{
+id: "s_2755",
+type: "symptom",
+name: "الشعور بانعدام القيمة",
+common_name: "الشعور بعدم الفعالية",
+},
+{
+id: "s_2758",
+type: "symptom",
+name: "زيادة النشاط الحركي",
+common_name: "الحركة الزائدة",
+},
+{
+id: "s_2759",
+type: "symptom",
+name: "زيادة النشاط الحركي، يستمر 3 أيام أو أقل",
+common_name: "حركة زائدة أو تململ يستمر 3 أيام أو أقل",
+},
+{
+id: "s_2760",
+type: "symptom",
+name: "صعوبة تنظيم الأشياء",
+common_name: "ضياع الأشياء أو وضعها في غير مكانها",
+},
+{
+id: "s_2761",
+type: "symptom",
+name: "زيادة النشاط الحركي، يستمر فترة تتراوح بين 4 و6 أيام",
+common_name: "حركة زائدة أو تململ يستمر فترة تتراوح بين 4 و6 أيام",
+},
+{
+id: "s_2762",
+type: "symptom",
+name: "زيادة النشاط الحركي، يستمر فترة تتراوح بين 7 أيام و6 أشهر",
+common_name: "حركة زائدة أو تململ يستمر فترة تتراوح بين 7 أيام و6 أشهر",
+},
+{
+id: "s_2763",
+type: "symptom",
+name: "زيادة النشاط الحركي، يستمر 6 أشهر أو أكثر",
+common_name: "حركة زائدة أو تململ يستمر 6 أشهر أو أكثر",
+},
+{
+id: "s_2764",
+type: "symptom",
+name: "القلق",
+common_name: "العصبية",
+},
+{
+id: "s_2766",
+type: "symptom",
+name: "قلق، يدوم 3 أيام أو أقل",
+common_name: "عصبية تستمر 3 أيام أو أقل",
+},
+{
+id: "s_2767",
+type: "symptom",
+name: "قلق، يدوم فترة تتراوح بين 4 و6 أيام",
+common_name: "عصبية تستمر فترة تتراوح بين 4 و6 أيام",
+},
+{
+id: "s_2768",
+type: "symptom",
+name: "قلق، يدوم فترة تتراوح بين 7 أيام و6 أشهر",
+common_name: "عصبية تستمر فترة تتراوح بين 7 أيام و6 أشهر",
+},
+{
+id: "s_2769",
+type: "symptom",
+name: "قلق، يدوم 6 أشهر أو أكثر",
+common_name: "عصبية تستمر 6 أشهر على الأقل",
+},
+{
+id: "s_2771",
+type: "symptom",
+name: "صعوبة تنظيم الأشياء، تدوم 3 أيام أو أقل",
+common_name: "ضياع الأشياء أو وضعها في غير مكانها بحيث يستمر ذلك 3 أيام أو أقل",
+},
+{
+id: "s_2772",
+type: "symptom",
+name: "صعوبة تنظيم الأشياء، تدوم فترة تتراوح بين 4 و6 أيام",
+common_name: "ضياع الأشياء أو وضعها في غير مكانها بحيث يستمر ذلك فترة تتراوح بين 4 و6 أيام",
+},
+{
+id: "s_2773",
+type: "symptom",
+name: "صعوبة تنظيم الأشياء، تدوم فترة تتراوح بين 7 أيام و6 أشهر",
+common_name: "ضياع الأشياء أو وضعها في غير مكانها بحيث يستمر ذلك فترة تتراوح بين 7 أيام و6 أشهر",
+},
+{
+id: "s_2774",
+type: "symptom",
+name: "صعوبة تنظيم الأشياء، تدوم 6 أشهر على الأقل",
+common_name: "ضياع الأشياء أو وضعها في غير مكانها بحيث يستمر ذلك 6 أشهر على الأقل",
+},
+{
+id: "s_2775",
+type: "symptom",
+name: "صعوبة في تنظيم المهام أو الأنشطة",
+common_name: "عدم القدرة على إكمال المهام",
+},
+{
+id: "s_2778",
+type: "symptom",
+name: "صعوبة تنظيم المهام أو النشاطات، تدوم 3 أيام على الأكثر",
+common_name: "صعوبة إتمام المهام أو النشاطات بحيث يستمر ذلك 3 أيام على الأكثر",
+},
+{
+id: "s_2779",
+type: "symptom",
+name: "صعوبة تنظيم المهام أو النشاطات، تدوم 4-6 أيام",
+common_name: "صعوبة إتمام المهام أو النشاطات بحيث يستمر ذلك 4-6 أيام",
+},
+{
+id: "s_2780",
+type: "symptom",
+name: "صعوبة تنظيم المهام أو النشاطات، تدوم فترة تتراوح بين 7 أيام و6 أشهر",
+common_name: "صعوبة إتمام المهام أو النشاطات بحيث يستمر ذلك فترة تتراوح بين 7 أيام و6 أشهر",
+},
+{
+id: "s_2781",
+type: "symptom",
+name: "صعوبة تنظيم المهام أو النشاطات، تدوم 6 أشهر أو أكثر",
+common_name: "صعوبة إتمام المهام أو النشاطات بحيث يستمر ذلك 6 أشهر أو أكثر",
+},
+{
+id: "s_2783",
+type: "symptom",
+name: "نقص الانتباه للتفاصيل",
+common_name: "صعوبة الانتباه للتفاصيل",
+},
+{
+id: "s_2784",
+type: "symptom",
+name: "انعدام الصبر",
+common_name: "عدم الصبر",
+},
+{
+id: "s_2785",
+type: "symptom",
+name: "جرح، ناجم عن عضة حيوان",
+common_name: "جرح ناتج عن عضة حيوان",
+},
+{
+id: "s_2786",
+type: "symptom",
+name: "تقلبات مزاجية، تستمر فترة طويلة",
+common_name: "تقلبات مزاجية، تستمر فترة طويلة",
+},
+{
+id: "s_2787",
+type: "symptom",
+name: "ألم سني، لا يُطاق",
+common_name: "ألم لا يطاق في الأسنان",
+},
+{
+id: "s_2789",
+type: "symptom",
+name: "الثرثرة",
+common_name: "كثرة الكلام",
+},
+{
+id: "s_2790",
+type: "symptom",
+name: "وذمة، في الترقوة",
+common_name: "تورم في عظم الترقوة",
+},
+{
+id: "s_2791",
+type: "symptom",
+name: "مضض في الترقوة",
+common_name: "ألم عند الضغط على الترقوة",
+},
+{
+id: "s_2793",
+type: "symptom",
+name: "سلوك تمردي",
+common_name: "تمرد",
+},
+{
+id: "s_2794",
+type: "symptom",
+name: "سلوكيات متكررة لاإرادية، حركية",
+common_name: "حركات متكررة لاإرادية",
+},
+{
+id: "s_2795",
+type: "symptom",
+name: "الخداع",
+common_name: "الكذب بكثرة",
+},
+{
+id: "s_2796",
+type: "symptom",
+name: "سلوكيات متكررة لاإرادية",
+common_name: "سلوكيات متكررة لاإرادية",
+},
+{
+id: "s_2797",
+type: "symptom",
+name: "سلوكيات متكررة لاإرادية، صوتية",
+common_name: "إصدار أصوات لا إرادية بشكل متكرر",
+},
+{
+id: "s_2806",
+type: "symptom",
+name: "انتهاك القانون",
+common_name: "تجاوز القانون",
+},
+{
+id: "s_2812",
+type: "symptom",
+name: "إجهاض",
+common_name: "إجهاض",
+},
+{
+id: "s_2816",
+type: "symptom",
+name: "بطء في كسب الوزن عند حديثي الولادة",
+common_name: "بطء في زيادة الوزن والنمو عند الرضع",
+},
+{
+id: "s_2818",
+type: "symptom",
+name: "براز أحمر اللون، نتيجة نزف خفيف",
+common_name: "براز يحتوي على كميات قليلة من الدم",
+},
+{
+id: "s_2819",
+type: "symptom",
+name: "براز أحمر اللون، نتيجة نزف غزير",
+common_name: "براز يحتوي على كميات كبيرة من الدم",
+},
+{
+id: "s_2820",
+type: "symptom",
+name: "ألم في الظهر، حاد",
+common_name: "ألم حاد في الظهر",
+},
+{
+id: "s_2821",
+type: "symptom",
+name: "ألم في الظهر، تحت حاد",
+common_name: "ألم تحت حاد في الظهر",
+},
+{
+id: "s_2822",
+type: "symptom",
+name: "ألم في الظهر، مزمن",
+common_name: "ألم مزمن في الظهر",
+},
+{
+id: "s_2825",
+type: "symptom",
+name: "صعق بالتيار الكهربائي",
+common_name: "صعق بالتيار الكهربائي",
+},
+{
+id: "s_2826",
+type: "symptom",
+name: "ألم صدري، يزول عند الراحة",
+common_name: "ألم في الصدر يزول عند الراحة",
+},
+{
+id: "s_2827",
+type: "symptom",
+name: "تكدم، في الصفن",
+common_name: "كدمة في الصفن",
+},
+{
+id: "s_2828",
+type: "symptom",
+name: "قساوة في خصية",
+common_name: "إحدى الخصيتين أقسى من الأخرى",
+},
+{
+id: "s_2830",
+type: "symptom",
+name: "سعال، لا يخف مع مرور الوقت",
+common_name: "سعال لا يخف مع مرور الوقت",
+},
+{
+id: "s_2831",
+type: "symptom",
+name: "الخوف من تناول الطعام أمام الآخرين أو محاولة تجنب ذلك",
+common_name: "الخوف من تناول الطعام أمام الآخرين أو محاولة تجنب ذلك",
+},
+{
+id: "s_2832",
+type: "symptom",
+name: "الرهاب الاجتماعي",
+common_name: "الرهاب الاجتماعي",
+},
+{
+id: "s_2833",
+type: "symptom",
+name: "سعال، ديكي",
+common_name: "سعال ديكي",
+},
+{
+id: "s_2834",
+type: "symptom",
+name: "زلة تنفسية تستمر أكثر من 4 أسابيع، ساءَت فجأة",
+common_name: "تفاقم مفاجئ في ضيق التنفس الذي ظهر لأول مرة منذ أكثر من 4 أسابيع",
+},
+{
+id: "s_2835",
+type: "symptom",
+name: "زلة تنفسية تدوم بين يوم و4 أسابيع، ساءَت فجأةً",
+common_name: "تفاقم مفاجئ في ضيق التنفس الذي ظهر لأول مرة منذ فترة تتراوح بين يوم واحد و4 أسابيع",
+},
+{
+id: "s_2836",
+type: "symptom",
+name: "سعال، يخف مع مرور الوقت",
+common_name: "سعال يخف مع مرور الوقت",
+},
+{
+id: "s_2837",
+type: "symptom",
+name: "وذمة حادة، في طرف سفلي واحد",
+common_name: "تورم في الساق منذ أقل من 3 أيام",
+},
+{
+id: "s_2838",
+type: "symptom",
+name: "وذمة مزمنة، في طرف سفلي واحد",
+common_name: "تورم في الساق منذ 3 أيام أو أكثر",
+},
+{
+id: "s_2839",
+type: "symptom",
+name: "وذمة، في كلا الطرفين السفليين، حادة",
+common_name: "تورم في كلتا الساقين استمر أقل من 3 أيام",
+},
+{
+id: "s_2840",
+type: "symptom",
+name: "وذمة، في كلا الطرفين السفليين، مزمنة",
+common_name: "تورم في كلتا الساقين استمر 3 أيام أو أكثر",
+},
+{
+id: "s_2843",
+type: "symptom",
+name: "ألم صدري، عند القيام بجهد شديد",
+common_name: "ألم في الصدر عند القيام بمجهود جسدي شديد",
+},
+{
+id: "s_2845",
+type: "symptom",
+name: "سيلان أنفي، حاد",
+common_name: "سيلان حديث من الأنف",
+},
+{
+id: "s_2846",
+type: "symptom",
+name: "سيلان أنفي، مزمن",
+common_name: "سيلان مزمن من الأنف",
+},
+{
+id: "s_2847",
+type: "symptom",
+name: "ألم صدري، أثناء الجهد الخفيف",
+common_name: "ألم في الصدر يظهر عند القيام بأدنى مجهود جسدي",
+},
+{
+id: "s_2849",
+type: "symptom",
+name: "وذمة، في الفرج",
+common_name: "تورم في الفرج",
+},
+{
+id: "s_2850",
+type: "symptom",
+name: "ألم في الطرف السفلي، يستمر أقل من 24 ساعة",
+common_name: "ألم في الطرف السفلي يستمر أقل من 24 ساعة",
+},
+{
+id: "s_2851",
+type: "symptom",
+name: "ألم في الطرف السفلي، يستمر بين يوم واحد و7 أيام",
+common_name: "ألم في الطرف السفلي يستمر بين يوم واحد و7 أيام",
+},
+{
+id: "s_2852",
+type: "symptom",
+name: "ألم في الطرف السفلي، يستمر بين أسبوع واحد و3 أشهر",
+common_name: "ألم في الطرف السفلي يستمر بين أسبوع واحد و3 أشهر",
+},
+{
+id: "s_2853",
+type: "symptom",
+name: "ألم في الطرف السفلي، يستمر أكثر من 3 أشهر",
+common_name: "ألم في الطرف السفلي يستمر أكثر من 3 أشهر",
+},
+{
+id: "s_2854",
+type: "symptom",
+name: "حمى، تدوم أكثر من 14 يوماً",
+common_name: "ارتفاع في درجة حرارة الجسم يستمر أكثر من 14 يوماً",
+},
+{
+id: "s_2855",
+type: "symptom",
+name: "حمى، تدوم بين 8 و14 يوماً",
+common_name: "ارتفاع في درجة حرارة الجسم يستمر بين 8 و14 يوماً",
+},
+{
+id: "s_2856",
+type: "symptom",
+name: "بثور جلدية",
+common_name: "بثور على الجلد",
+},
+{
+id: "s_2857",
+type: "symptom",
+name: "بثور جلدية، فقاعات",
+common_name: "بثور على الجلد قطرها أكبر من 0.5 سم",
+},
+{
+id: "s_2858",
+type: "symptom",
+name: "بثور جلدية، حويصلات",
+common_name: "بثور على الجلد قطرها أصغر من 0.5 سم",
+},
+{
+id: "s_2860",
+type: "symptom",
+name: "حمى، مستجيبة كلياً على العلاج",
+common_name: "ارتفاع في درجة حرارة الجسم بحيث تنخفض كلياً بالعلاج",
+},
+{
+id: "s_2861",
+type: "symptom",
+name: "تأخر الدورة الشهرية",
+common_name: "تأخر الدورة",
+},
+{
+id: "s_2862",
+type: "symptom",
+name: "تأخر الدورة الشهرية، بين أسبوع واحد و3 أسابيع",
+common_name: "تأخر الدورة فترة تتراوح بين أسبوع واحد و3 أسابيع",
+},
+{
+id: "s_2863",
+type: "symptom",
+name: "تأخر الدورة الشهرية، بين 3 أسابيع و3 أشهر",
+common_name: "تأخر الدورة فترة تتراوح بين 3 أسابيع و3 أشهر",
+},
+{
+id: "s_2864",
+type: "symptom",
+name: "تأخر الدورة الشهرية، بين 3 أشهر و12 شهراً",
+common_name: "تأخر الدورة فترة تتراوح بين 3 أشهر و12 شهراً",
+},
+{
+id: "s_2865",
+type: "symptom",
+name: "تأخر الدورة الشهرية، أكثر من 12 شهراً",
+common_name: "تأخر الدورة أكثر من 12 شهراً",
+},
+{
+id: "s_2866",
+type: "symptom",
+name: "حمى، مستجيبة جزئياً على العلاج",
+common_name: "ارتفاع في درجة حرارة الجسم بحيث تنخفض جزئياً بالعلاج",
+},
+{
+id: "s_2867",
+type: "symptom",
+name: "وذمة، في أحد أو كلا الطرفين السفليين",
+common_name: "تورم في إحدى أو كلتا الساقين",
+},
+{
+id: "s_2871",
+type: "symptom",
+name: "قلة حركات الجنين في الثلث الثالث من الحمل",
+common_name: "قلة حركات الجنين في الثلث الثالث من الحمل",
+},
+{
+id: "s_2872",
+type: "symptom",
+name: "تأخر الدورة الشهرية، أقل من أسبوع واحد",
+common_name: "تأخر الدورة أقل من أسبوع واحد",
+},
+{
+id: "s_2876",
+type: "symptom",
+name: "حمى، مع محاولة تخفيضها باستخدام خافضات الحرارة",
+common_name: "إعطاء خافضات حرارة لتخفيض درجة حرارة الجسم",
+},
+{
+id: "s_2877",
+type: "symptom",
+name: "رجفان، يتحرض باللمس أو البرد أو الأصوات العالية",
+common_name: "رجفة تتحرض باللمس أو البرد أو الأصوات العالية",
+},
+{
+id: "s_2878",
+type: "symptom",
+name: "بدء مفاجئ لضعف القدرات الكلامية واللغوية",
+common_name: "بدء مفاجئ لضعف القدرات الكلامية واللغوية",
+},
+{
+id: "s_2879",
+type: "symptom",
+name: "حمى، مستمرة",
+common_name: "ارتفاع مستمر في درجة حرارة الجسم",
+},
+{
+id: "s_2880",
+type: "symptom",
+name: "حالة صرعية",
+common_name: "نوبة اختلاج طويلة استمرت لأكثر من 5 دقائق",
+},
+{
+id: "s_2881",
+type: "symptom",
+name: "إدخال جسم أجنبي، في منطقة الرأس",
+common_name: "إدخال جسم غريب في أحد الفوهات في منطقة الرأس",
+},
+{
+id: "s_2883",
+type: "symptom",
+name: "إدخال جسم أجنبي، عالق في المهبل",
+common_name: "شيء عالق في المهبل",
+},
+{
+id: "s_2884",
+type: "symptom",
+name: "إدخال جسم أجنبي، عالق في الشرج",
+common_name: "شيء عالق في الشرج",
+},
+{
+id: "s_2888",
+type: "symptom",
+name: "حمى، دورية، كل بضعة أيام أو أسابيع",
+common_name: "حمى دورية تظهر كل بضعة أيام أو أسابيع",
+},
+{
+id: "s_2889",
+type: "symptom",
+name: "شحوب الجلد، عابر",
+common_name: "شحوب عابر في الجلد",
+},
+{
+id: "s_2890",
+type: "symptom",
+name: "حمى، ناكسة بعد 24 ساعة",
+common_name: "ارتفاع في درجة حرارة الجسم تنكس بعد مضي 24 ساعة على انخفاضها",
+},
+{
+id: "s_2891",
+type: "symptom",
+name: "حمى، متقطعة",
+common_name: "ارتفاع في درجة حرارة الجسم بحيث تنخفض كل يوم",
+},
+{
+id: "s_2892",
+type: "symptom",
+name: "تمزق السلى، بين الأسبوع 22 و37 الحملي",
+common_name: "نزول ماء الجنين بين الأسبوع 22 و37 من الحمل",
+},
+{
+id: "s_2893",
+type: "symptom",
+name: "تقلصات رحمية منتظمة، قبل الأسبوع 37 الحملي",
+common_name: "تقلصات رحمية منتظمة قبل الأسبوع 37 من الحمل",
+},
+{
+id: "s_2894",
+type: "symptom",
+name: "نزف مهبلي نفاسي، ازدادت شدته",
+common_name: "زيادة في النزيف التالي للولادة",
+},
+{
+id: "s_2895",
+type: "symptom",
+name: "عدم تحمل التغيير على النظام اليومي",
+common_name: "عدم تحمل التغيير على النظام اليومي",
+},
+{
+id: "s_2898",
+type: "symptom",
+name: "جرح مؤهب للإصابة بالكزاز",
+common_name: "جرح معرض للإصابة بالكزاز",
+},
+{
+id: "s_2904",
+type: "symptom",
+name: "محاولة انتحار نشطة حالياً",
+common_name: "محاولة انتحار نشطة حالياً",
+},
+{
+id: "s_2905",
+type: "symptom",
+name: "تمزق السلى، قبل الأسبوع 22 الحملي",
+common_name: "نزول ماء الجنين قبل الأسبوع 22 من الحمل",
+},
+{
+id: "s_2906",
+type: "symptom",
+name: "تمزق السلى، بعد الأسبوع 37 الحملي",
+common_name: "نزول ماء الجنين بعد الأسبوع 37 من الحمل",
+},
+{
+id: "s_2907",
+type: "symptom",
+name: "حمى، شافية حالياً ولكنها كانت موجودة خلال الساعات الـ72 الماضية",
+common_name: "ارتفاع في درجة حرارة الجسم كان موجوداً خلال الساعات الـ72 الماضية ولكنه زال حالياً",
+},
+{
+id: "s_2908",
+type: "symptom",
+name: "نزيف رحمي غير طبيعي، غير طمثي",
+common_name: "نزف من المهبل يختلف عن الدورة الشهرية",
+},
+{
+id: "s_2909",
+type: "symptom",
+name: "تمشيح رحمي غير طبيعي، غير طمثي",
+common_name: "تمشيح من المهبل يختلف عن الدورة الشهرية",
+},
+{
+id: "s_2913",
+type: "symptom",
+name: "لا نزيف أو تمشيح تناسلي غير طبيعي، غير طمثي",
+common_name: "لا نزيف أو تمشيح تناسلي غير طبيعي، غير طمثي",
+},
+{
+id: "s_2914",
+type: "symptom",
+name: "أذية جسدية، على الرأس",
+common_name: "إصابة في الرأس",
+},
+{
+id: "s_2915",
+type: "symptom",
+name: "أذية جسدية، على الجذع",
+common_name: "إصابة في الجذع",
+},
+{
+id: "s_2916",
+type: "symptom",
+name: "أذية جسدية، على الطرف العلوي",
+common_name: "إصابة في الطرف العلوي",
+},
+{
+id: "s_2917",
+type: "symptom",
+name: "أذية جسدية، على الطرف السفلي",
+common_name: "إصابة في الطرف السفلي",
+},
+{
+id: "s_2918",
+type: "symptom",
+name: "ألم جذري",
+common_name: "ألم في الظهر منتشر",
+},
+{
+id: "s_2919",
+type: "symptom",
+name: "موضع الرض",
+common_name: "موضع الرض",
+},
+{
+id: "s_2920",
+type: "symptom",
+name: "الأعراض ناتجة عن التعرض لرض حديث",
+common_name: "الأعراض ناتجة عن التعرض لإصابة مؤخراً",
+},
+{
+id: "s_2924",
+type: "symptom",
+name: "عَرَج",
+common_name: "عرج",
+},
+{
+id: "s_2927",
+type: "symptom",
+name: "آفات فموية، في الجزء الأمامي منه",
+common_name: "آفات تتوضع في الجزء الأمامي من الفم",
+},
+{
+id: "s_2928",
+type: "symptom",
+name: "سقوط من شاهق",
+common_name: "سقوط من مكان مرتفع",
+},
+{
+id: "s_2929",
+type: "symptom",
+name: "رض ناتج عن حادث بدراجة نارية",
+common_name: "إصابة ناتجة عن حادث بدراجة نارية",
+},
+{
+id: "s_2930",
+type: "symptom",
+name: "اصطدام أحد المشاة أو راكب على الدراجة الهوائية بسيارة",
+common_name: "اصطدام أحد المشاة أو راكب على الدراجة الهوائية بسيارة",
+},
+{
+id: "s_2931",
+type: "symptom",
+name: "رض ناتج عن حادث سيارة خطير",
+common_name: "إصابة ناتجة عن حادث سيارة خطير",
+},
+{
+id: "s_2932",
+type: "symptom",
+name: "لا قصة سابقة للتعرُّض لرض ذي قوة كبيرة",
+common_name: "لا قصة سابقة للتعرُّض لرض ذي قوة كبيرة",
+},
+{
+id: "s_2935",
+type: "symptom",
+name: "اضطرابات في الرؤية، بعد التعرض لرض",
+common_name: "مشاكل في الرؤية بعد التعرض لإصابة ما",
+},
+{
+id: "s_2936",
+type: "symptom",
+name: "عجز عصبي حديث، بعد رض",
+common_name: "تغيرات عصبية حديثة ظهرت بعد التعرض لإصابة ما",
+},
+{
+id: "s_2937",
+type: "symptom",
+name: "انخفاض مفاجئ في ضغط الدم",
+common_name: "انخفاض مفاجئ في ضغط الدم",
+},
+{
+id: "s_2938",
+type: "symptom",
+name: "تغيرات جلدية، حول الشرج",
+common_name: "تغيرات في الجلد حول الشرج",
+},
+{
+id: "s_2939",
+type: "symptom",
+name: "ألم في العنق، حاد",
+common_name: "ألم حاد في الرقبة",
+},
+{
+id: "s_2940",
+type: "symptom",
+name: "ألم في العنق، تحت حاد",
+common_name: "ألم تحت حاد في الرقبة",
+},
+{
+id: "s_2941",
+type: "symptom",
+name: "ألم في العنق، مزمن",
+common_name: "ألم مزمن في الرقبة",
+},
+{
+id: "s_2942",
+type: "symptom",
+name: "اختناق شافٍ",
+common_name: "زوال الاختناق",
+},
+{
+id: "s_2945",
+type: "symptom",
+name: "قصة سابقة للتعرُّض للدغة حشرة القراد، خلال الأسابيع الثلاثة الماضية، في أوروبا",
+common_name: "التعرُّض خلال الأسابيع الثلاثة الماضية للدغة حشرة القراد في أوروبا",
+},
+{
+id: "s_2946",
+type: "symptom",
+name: "لا قصة سابقة للتعرُّض للدغة القراد",
+common_name: "عدم التعرض في الماضي للدغة بحشرة القراد",
+},
+{
+id: "s_2947",
+type: "symptom",
+name: "قصة سابقة للتعرُّض للدغة حشرة القراد، خلال الأسابيع الثلاثة الماضية، في أمريكا الشمالية",
+common_name: "التعرُّض خلال الأسابيع الثلاثة الماضية للدغة حشرة القراد في أمريكا الشمالية",
+},
+{
+id: "s_2948",
+type: "symptom",
+name: "قصة سابقة للتعرُّض للدغة حشرة القراد، خلال الأسابيع الثلاثة الماضية، في شمال آسيا",
+common_name: "التعرُّض خلال الأسابيع الثلاثة الماضية للدغة حشرة القراد في شمال آسيا",
+},
+{
+id: "s_2949",
+type: "symptom",
+name: "قصة سابقة للتعرُّض للدغة حشرة القراد، خلال الأسابيع الثلاثة الماضية، في جنوب شرق آسيا",
+common_name: "التعرُّض خلال الأسابيع الثلاثة الماضية للدغة حشرة القراد في جنوب شرق آسيا",
+},
+{
+id: "s_2950",
+type: "symptom",
+name: "لا نزيف أو تمشيح تناسلي غير طبيعي، أثناء الحمل",
+common_name: "لا نزيف أو تمشيح تناسلي غير طبيعي، أثناء الحمل",
+},
+{
+id: "s_2953",
+type: "symptom",
+name: "ألم في العنق، ذو بدء مفاجئ",
+common_name: "ألم في الرقبة ظهر فجأةً",
+},
+{
+id: "s_2954",
+type: "symptom",
+name: "تحدد حركة العنق",
+common_name: "تحدد حركة الرقبة",
+},
+{
+id: "s_2955",
+type: "symptom",
+name: "حرق في الجلد",
+common_name: "حرق",
+},
+{
+id: "s_2956",
+type: "symptom",
+name: "حرق في الجلد، ناتج عن الحرارة العالية",
+common_name: "حرق ناتج عن الحرارة العالية",
+},
+{
+id: "s_2957",
+type: "symptom",
+name: "حرق في الجلد، بمادة كيميائية",
+common_name: "حرق بمادة كيميائية",
+},
+{
+id: "s_2958",
+type: "symptom",
+name: "حرق في الجلد، بالتيار الكهربائي",
+common_name: "حرق بالتيار الكهربائي",
+},
+{
+id: "s_2959",
+type: "symptom",
+name: "حرق في الجلد، بشيء آخر",
+common_name: "سبب آخر للحرق",
+},
+{
+id: "s_2960",
+type: "symptom",
+name: "ألم شديد عند تحريك طرف، بعد رض",
+common_name: "عدم القدرة على تحريك طرف ما بسبب ألمٍ شديد فيه ظهر بعد التعرض لإصابة",
+},
+{
+id: "s_2961",
+type: "symptom",
+name: "قصة سابقة لسقوط متكرر من نفس ارتفاع الجسم",
+common_name: "سقوط عفوي مفاجئ",
+},
+{
+id: "s_2962",
+type: "symptom",
+name: "حرق في الجلد، سطحي",
+common_name: "حرق سطحي في الجلد",
+},
+{
+id: "s_2963",
+type: "symptom",
+name: "حرق في الجلد، جزئي السماكة",
+common_name: "حرق جزئي السماكة في الجلد",
+},
+{
+id: "s_2964",
+type: "symptom",
+name: "حرق في الجلد، كامل السماكة",
+common_name: "حرق شامل لكامل سماكة الجلد",
+},
+{
+id: "s_2965",
+type: "symptom",
+name: "حرق في الجلد، يشمل النسج العميقة",
+common_name: "حرق يشمل الطبقات العميقة",
+},
+{
+id: "s_2966",
+type: "symptom",
+name: "حرق في الجلد، يشمل 1-10% من مساحة سطح الجسم",
+common_name: "حرق يشمل 1-10% من مساحة سطح الجسم",
+},
+{
+id: "s_2967",
+type: "symptom",
+name: "خزل في طرف، بعد رض",
+common_name: "ضعف في عضلات طرف بعد التعرض لإصابة",
+},
+{
+id: "s_2968",
+type: "symptom",
+name: "تحدد مجال حركة مفصل، بعد رض",
+common_name: "تحدد مجال حركة مفصل، بعد رض",
+},
+{
+id: "s_2969",
+type: "symptom",
+name: "ألم يمكن تحمله عند تحريك طرف، بعد رض",
+common_name: "ألم يمكن تحمله عند تحريك طرف من الأطراف ظهر بعد التعرض لإصابة ما",
+},
+{
+id: "s_2970",
+type: "symptom",
+name: "لا ألم أو تحدد في الحركة عند تحريك طرف، بعد رض",
+common_name: "لا ألم أو تحدد في الحركة عند تحريك طرف، بعد رض",
+},
+{
+id: "s_2971",
+type: "symptom",
+name: "حرق في الجلد، في الرأس أو العنق وما حوله",
+common_name: "حرق في الرأس أو الرقبة أو ما حولها",
+},
+{
+id: "s_2972",
+type: "symptom",
+name: "حرق في الجلد، في اليد",
+common_name: "حرق في اليد",
+},
+{
+id: "s_2973",
+type: "symptom",
+name: "حرق في الجلد، في القدم",
+common_name: "حرق في القدم",
+},
+{
+id: "s_2974",
+type: "symptom",
+name: "حرق في الجلد، في الأعضاء التناسلية أو العجان",
+common_name: "حرق في المنطقة التناسلية",
+},
+{
+id: "s_2975",
+type: "symptom",
+name: "حرق في الجلد، في المفاصل الكبيرة",
+common_name: "حرق، في الجلد المغطي للمفاصل الكبيرة",
+},
+{
+id: "s_2976",
+type: "symptom",
+name: "حرق في الجلد، في مكان آخر",
+common_name: "حرق في مكان آخر",
+},
+{
+id: "s_2977",
+type: "symptom",
+name: "صعوبة في التبول، بعد رض",
+common_name: "صعوبة في التبول بعد التعرض لإصابة",
+},
+{
+id: "s_2980",
+type: "symptom",
+name: "حرق في الجلد، يشمل 10-20% من مساحة سطح الجسم",
+common_name: "حرق يشمل 10-20% من مساحة سطح الجسم",
+},
+{
+id: "s_2981",
+type: "symptom",
+name: "حرق في الجلد، يشمل أكثر من 20% من مساحة سطح الجسم",
+common_name: "حرق يشمل أكثر من 20% من مساحة سطح الجسم",
+},
+{
+id: "s_2982",
+type: "symptom",
+name: "صعوبة في التغوط، بعد رض",
+common_name: "صعوبة في التغوط بعد التعرض لإصابة",
+},
+{
+id: "s_2984",
+type: "symptom",
+name: "عدم القدرة على حمل ثقل الجسم",
+common_name: "عدم القدرة على الوقوف على أي من القدمين",
+},
+{
+id: "s_2985",
+type: "symptom",
+name: "لا توجد مشاكل في المشي",
+common_name: "مشي طبيعي",
+},
+{
+id: "s_2986",
+type: "symptom",
+name: "إجهاض حديث",
+common_name: "إجهاض حديث",
+},
+{
+id: "s_2987",
+type: "symptom",
+name: "ألم عيني، أحادي الجانب",
+common_name: "ألم في عين واحدة",
+},
+{
+id: "s_2988",
+type: "symptom",
+name: "ألم عيني، ثنائي الجانب",
+common_name: "ألم في كلتا العينين",
+},
+{
+id: "s_2991",
+type: "symptom",
+name: "مضض في النواتئ الشوكية",
+common_name: "ألم عند الضغط على النواتئ الشوكية",
+},
+{
+id: "s_2992",
+type: "symptom",
+name: "عدم القدرة على حمل ثقل الجسم، غير رضي المنشأ",
+common_name: "عدم القدرة على الوقوف على أي من القدمين دون التعرض لأي إصابة",
+},
+{
+id: "s_2999",
+type: "symptom",
+name: "كتلة جلدية، في المنطقة الإربية",
+common_name: "بروز تحت الجلد في المنطقة أعلى الفخذ",
+},
+{
+id: "s_3000",
+type: "symptom",
+name: "كتلة جلدية، ردودة",
+common_name: "كتلة ردودة في الجلد",
+},
+{
+id: "s_3001",
+type: "symptom",
+name: "كتلة جلدية، غير ردودة",
+common_name: "كتلة غير ردودة في الجلد",
+},
+{
+id: "s_3002",
+type: "symptom",
+name: "كتلة جلدية، في منطقة السرة",
+common_name: "كتلة في الجلد في المنطقة المحيطة بالسرة",
+},
+{
+id: "s_3003",
+type: "symptom",
+name: "كتلة جلدية، طرية",
+common_name: "كتلة أو نتوء طري في الجلد",
+},
+{
+id: "s_3004",
+type: "symptom",
+name: "حرق في العين",
+common_name: "حرق في العين",
+},
+{
+id: "s_3005",
+type: "symptom",
+name: "كتلة جلدية، داكنة أو زرقاء اللون",
+common_name: "كتلة أو نتوء في الجلد ذات لون داكن أو أزرق",
+},
+{
+id: "s_3006",
+type: "symptom",
+name: "كتلة جلدية، مسررة",
+common_name: "نتوءات في الجلد في مركزها انخفاض صغير",
+},
+{
+id: "s_3007",
+type: "symptom",
+name: "كتلة جلدية، قاسية",
+common_name: "كتلة قاسية في الجلد",
+},
+{
+id: "s_3008",
+type: "symptom",
+name: "كتلة جلدية، ذات قوام غير معروف",
+common_name: "كتلة في الجلد مجهولة القوام",
+},
+{
+id: "s_3009",
+type: "symptom",
+name: "كتلة جلدية، مؤلمة",
+common_name: "كتلة أو نتوء مؤلم في الجلد",
+},
+{
+id: "s_3012",
+type: "symptom",
+name: "حرق في الجلد، يشمل أقل من 1% من مساحة سطح الجسم",
+common_name: "حرق يشمل أقل من 1% من مساحة سطح الجسم",
+},
+{
+id: "s_3013",
+type: "symptom",
+name: "جرح، نظيف",
+common_name: "جرح نظيف",
+},
+{
+id: "s_3014",
+type: "symptom",
+name: "جرح، ملوث",
+common_name: "جرح ملوث",
+},
+{
+id: "s_3015",
+type: "symptom",
+name: "جرح، حاد",
+common_name: "جرح حاد",
+},
+{
+id: "s_3016",
+type: "symptom",
+name: "جرح، مزمن",
+common_name: "جرح مزمن",
+},
+{
+id: "s_3017",
+type: "symptom",
+name: "جرح، ممزق",
+common_name: "تمزق في الجلد",
+},
+{
+id: "s_3018",
+type: "symptom",
+name: "جرح، ثاقب",
+common_name: "جرح ثاقب",
+},
+{
+id: "s_3019",
+type: "symptom",
+name: "جرح، قاطع",
+common_name: "جرح قاطع",
+},
+{
+id: "s_3020",
+type: "symptom",
+name: "سحجة",
+common_name: "سحجة",
+},
+{
+id: "s_3021",
+type: "symptom",
+name: "جرح، هرسي",
+common_name: "جرح هرسي",
+},
+{
+id: "s_3022",
+type: "symptom",
+name: "جرح، ناتج عن طلق ناري",
+common_name: "جرح بطلق ناري",
+},
+{
+id: "s_3025",
+type: "symptom",
+name: "جرح، سطحي",
+common_name: "جرح سطحي في الجلد",
+},
+{
+id: "s_3026",
+type: "symptom",
+name: "جرح، جزئي السماكة",
+common_name: "جرح جزئي السماكة في الجلد",
+},
+{
+id: "s_3027",
+type: "symptom",
+name: "جرح، كامل السماكة",
+common_name: "جرح كامل السماكة في الجلد",
+},
+{
+id: "s_3028",
+type: "symptom",
+name: "جرح، يشمل النسج العميقة",
+common_name: "جرح يصل للأنسجة العميقة",
+},
+{
+id: "s_3030",
+type: "symptom",
+name: "تغير جلدي وحيد",
+common_name: "تغير واحد في الجلد",
+},
+{
+id: "s_3031",
+type: "symptom",
+name: "تغيرات جلدية، متعددة",
+common_name: "تغيرات متعددة في الجلد",
+},
+{
+id: "s_3034",
+type: "symptom",
+name: "صداع، اشتد فجأة",
+common_name: "ألم في الرأس ازدادت شدته فجأة",
+},
+{
+id: "s_3037",
+type: "symptom",
+name: "التفكير الوهمي",
+common_name: "الاعتقاد الجازم بشيء غير صحيح",
+},
+{
+id: "s_3038",
+type: "symptom",
+name: "هلوسات سابقة",
+common_name: "إدراك أحاسيس أو أشياء غير موجودة حقيقة",
+},
+{
+id: "s_3039",
+type: "symptom",
+name: "حالة التلقيح ضد الكزاز غير معروفة",
+common_name: "حالة التطعيم ضد الكزاز غير معروفة",
+},
+{
+id: "s_3042",
+type: "symptom",
+name: "شرب الكحول",
+common_name: "شرب الكحول",
+},
+{
+id: "s_3045",
+type: "symptom",
+name: "إصابة استنشاقية",
+common_name: "حرق في الطريق الهوائي",
+},
+{
+id: "s_3046",
+type: "symptom",
+name: "أذية في الركبة، التواء",
+common_name: "التواء في الركبة",
+},
+{
+id: "s_3047",
+type: "symptom",
+name: "سيلان من الحلمة، مفرزات دموية",
+common_name: "خروج مفرزات دموية من الحلمة",
+},
+{
+id: "s_3048",
+type: "symptom",
+name: "تشقق الحلمة",
+common_name: "تشققات الحلمة",
+},
+{
+id: "s_3049",
+type: "symptom",
+name: "سيلان من الحلمة، قيح",
+common_name: "خروج قيح من الحلمة",
+},
+{
+id: "s_3051",
+type: "symptom",
+name: "سيلان من الحلمة، مفرزات مائية أو مصلية",
+common_name: "خروج مفرزات مائية أو مصلية من الحلمة",
+},
+{
+id: "s_3052",
+type: "symptom",
+name: "مستوى جلوكوز الدم بين 71 و180 ملغ/دل أو بين 4 و9.9 ممول/ل",
+common_name: "مستوى السكر في الدم بين 71 و180 ملغ/دل",
+},
+{
+id: "s_3053",
+type: "symptom",
+name: "مستوى جلوكوز الدم بين 181 و250 ملغ/دل أو بين 10 و13.9 ممول/ل",
+common_name: "مستوى السكر في الدم بين 181 و250 ملغ/دل",
+},
+{
+id: "s_3054",
+type: "symptom",
+name: "مستوى جلوكوز الدم بين 251 و 350 ملغ/دل أو بين 14 و19.4 ممول/ل",
+common_name: "مستوى السكر في الدم بين 251 و 350 ملغ/دل",
+},
+{
+id: "s_3055",
+type: "symptom",
+name: "مستوى جلوكوز الدم أعلى من 350 ملغ/دل أو 19.4 ممول/ل",
+common_name: "مستوى السكر في الدم أعلى من 350 ملغ/دل",
+},
+{
+id: "s_3056",
+type: "symptom",
+name: "مستوى جلوكوز الدم خلال الساعات الستة الماضية، أعلى من 250 ملغ/دل أو 13.9 ممول/ل",
+common_name: "مستوى السكر في الدم بقي أعلى من 250 ملغ/دل خلال الساعات الستة الماضية",
+},
+{
+id: "s_3057",
+type: "symptom",
+name: "إدخال جسم أجنبي، في الشرج",
+common_name: "إدخال جسم غريب في الشرج",
+},
+{
+id: "s_3058",
+type: "symptom",
+name: "إدخال جسم أجنبي، في المهبل",
+common_name: "إدخال جسم غريب في المهبل",
+},
+{
+id: "s_3059",
+type: "symptom",
+name: "رض مباشر على الوجه الأمامي من الركبة",
+common_name: "التعرض لضربة مباشرة على الركبة من الأمام",
+},
+{
+id: "s_3062",
+type: "symptom",
+name: "اضطراب في الدورة الشهرية، عدم انتظام",
+common_name: "عدم انتظام الدورة الشهرية",
+},
+{
+id: "s_3063",
+type: "symptom",
+name: "اضطراب في الدورة الشهرية، طول في الدورة",
+common_name: "طول في الدورة الشهرية أكثر من 8 أيام",
+},
+{
+id: "s_3064",
+type: "symptom",
+name: "اضطراب في الدورة الشهرية، غزارة",
+common_name: "غزارة الدورة الشهرية",
+},
+{
+id: "s_3065",
+type: "symptom",
+name: "اضطراب في الدورة الشهرية، قلة الطمث",
+common_name: "قلة دم الدورة الشهرية",
+},
+{
+id: "s_3066",
+type: "symptom",
+name: "اضطراب في الدورة الشهرية، عسر الطمث",
+common_name: "ألم الدورة الشهرية",
+},
+{
+id: "s_3067",
+type: "symptom",
+name: "اضطراب في الدورة الشهرية، تعدد الطموث",
+common_name: "كثرة عدد الدورات الشهرية",
+},
+{
+id: "s_3068",
+type: "symptom",
+name: "اضطراب في الدورة الشهرية، ندرة الطمث",
+common_name: "قلة عدد الدورات الشهرية",
+},
+{
+id: "s_3069",
+type: "symptom",
+name: "اضطراب في الدورة الشهرية",
+common_name: "مشاكل في الدورة الشهرية",
+},
+{
+id: "s_3070",
+type: "symptom",
+name: "تغيرات جلدية، أحادية الجانب",
+common_name: "تغيرات في الجلد تتوضع على جانب واحد فقط من الجسم",
+},
+{
+id: "s_3071",
+type: "symptom",
+name: "بكاء لا يتوقف",
+common_name: "بكاء لا يمكن إيقافه",
+},
+{
+id: "s_3072",
+type: "symptom",
+name: "نوب متكررة من البكاء الشديد الذي لا يمكن إيقافه ولا سبب واضح له",
+common_name: "نوب متكررة من البكاء الشديد الذي لا يمكن إيقافه ولا سبب واضح له",
+},
+{
+id: "s_3078",
+type: "symptom",
+name: "ضعف عضلي، دون شلل",
+common_name: "ضعف في العضلات مع بقاء القدرة على تحريكها",
+},
+{
+id: "s_3079",
+type: "symptom",
+name: "ضعف عضلي، خزل",
+common_name: "ضعف في العضلات مع تراجع القدرة على الحركة",
+},
+{
+id: "s_3080",
+type: "symptom",
+name: "ضعف عضلي، شلل",
+common_name: "ضعف في العضلات مع عدم القدرة على الحركة",
+},
+{
+id: "s_3083",
+type: "symptom",
+name: "ألم في الخاصرة، في البطن",
+common_name: "ألم في جانب البطن",
+},
+{
+id: "s_3084",
+type: "symptom",
+name: "ألم في الخاصرة، في الظهر",
+common_name: "ألم في جانب الظهر",
+},
+{
+id: "s_3085",
+type: "symptom",
+name: "ألم في الخاصرة، في الجانب",
+common_name: "ألم في الخاصرة، في الجانب",
+},
+{
+id: "s_3087",
+type: "symptom",
+name: "تبارز في الصيوان",
+common_name: "بروز في الأذن",
+},
+{
+id: "s_3089",
+type: "symptom",
+name: "زلة تنفسية، شديدة أثناء الراحة",
+common_name: "ضيق شديد في التنفس يحدث حتى عند الراحة",
+},
+{
+id: "s_3090",
+type: "symptom",
+name: "زلة تنفسية، شديدة",
+common_name: "ضيق شديد في التنفس",
+},
+{
+id: "s_3091",
+type: "symptom",
+name: "الأذية الحالية",
+common_name: "الإصابة الحالية",
+},
+{
+id: "s_3092",
+type: "symptom",
+name: "أذية إضافية",
+common_name: "إصابة أخرى",
+},
+{
+id: "s_3093",
+type: "symptom",
+name: "لا أذية إضافية",
+common_name: "لا إصابة أخرى",
+},
+{
+id: "s_3094",
+type: "symptom",
+name: "التعرض لأحادي أكسيد الكربون في حالة حرق",
+common_name: "التعرض لأحادي أكسيد الكربون في حالة حرق",
+},
+{
+id: "s_3096",
+type: "symptom",
+name: "ضعف عضلي، موضع",
+common_name: "ضعف في العضلات في جزء محدد من الجسم",
+},
+{
+id: "s_3097",
+type: "symptom",
+name: "ضعف عضلي، في الأطراف",
+common_name: "ضعف في الأطراف",
+},
+{
+id: "s_3098",
+type: "symptom",
+name: "ضعف عضلي، وجهي",
+common_name: "ضعف في عضلات الوجه",
+},
+{
+id: "s_3099",
+type: "symptom",
+name: "صعوبة إغلاق العين، في عينٍ واحدة",
+common_name: "صعوبة في إغلاق إحدى العينين بشكل كامل",
+},
+{
+id: "s_3100",
+type: "symptom",
+name: "ضعف عضلي، هبوط زاوية الفم في جهة واحدة",
+common_name: "هبوط في أحد جانبي الفم",
+},
+{
+id: "s_3101",
+type: "symptom",
+name: "ضعف عضلي، في جانب واحد من الوجه",
+common_name: "ضعف في العضلات في جانبٍ واحد من الوجه",
+},
+{
+id: "s_3104",
+type: "symptom",
+name: "ضعف عضلي، في كلا الطرفين العلويين",
+common_name: "ضعف في العضلات في كلا الطرفين العلويين",
+},
+{
+id: "s_3105",
+type: "symptom",
+name: "ضعف عضلي، في طرف علوي واحد",
+common_name: "ضعف في العضلات في طرف علوي واحد",
+},
+{
+id: "s_3106",
+type: "symptom",
+name: "ضعف عضلي، يستمر أقل من 24 ساعة",
+common_name: "ضعف في العضلات يستمر أقل من 24 ساعة",
+},
+{
+id: "s_3107",
+type: "symptom",
+name: "ضعف عضلي، في طرف سفلي واحد",
+common_name: "ضعف في العضلات في طرف سفلي واحد",
+},
+{
+id: "s_3108",
+type: "symptom",
+name: "ضعف عضلي، في كلا الطرفين السفليين",
+common_name: "ضعف في العضلات في كلا الطرفين السفليين",
+},
+{
+id: "s_3109",
+type: "symptom",
+name: "ضعف عضلي، خزل رباعي",
+common_name: "ضعف في كل الأطراف الأربعة",
+},
+{
+id: "s_3110",
+type: "symptom",
+name: "ضعف عضلي، خزل شقي",
+common_name: "ضعف في العضلات في جانب واحد من الجسم",
+},
+{
+id: "s_3111",
+type: "symptom",
+name: "ضعف عضلي، في الأطراف، من نمط آخر",
+common_name: "ضعف عضلي، في الأطراف، من نمط آخر",
+},
+{
+id: "s_3112",
+type: "symptom",
+name: "ضعف عضلي صاعد",
+common_name: "ضعف في العضلات ينتشر من الأسفل للأعلى",
+},
+{
+id: "s_3113",
+type: "symptom",
+name: "ضعف عضلي، يستمر بين 24 ساعة وأسبوع واحد",
+common_name: "ضعف في العضلات يستمر بين 24 ساعة وأسبوع واحد",
+},
+{
+id: "s_3115",
+type: "symptom",
+name: "حمى، استجابة غير معروفة لخافضات الحرارة",
+common_name: "استجابة غير معروفة للحمى على الأدوية الخافضة للحرارة",
+},
+{
+id: "s_3116",
+type: "symptom",
+name: "أذية، لا معلومات",
+common_name: "إصابة دون معلومات تفصيلية",
+},
+{
+id: "s_3117",
+type: "symptom",
+name: "ضعف عضلي، يستمر بين أسبوع واحد و4 أسابيع",
+common_name: "ضعف في العضلات يستمر بين أسبوع واحد و4 اسابيع",
+},
+{
+id: "s_3118",
+type: "symptom",
+name: "ضعف عضلي، يستمر أكثر من 4 أسابيع",
+common_name: "ضعف في العضلات يستمر أكثر من 4 أسابيع",
+},
+{
+id: "s_3120",
+type: "symptom",
+name: "ألم أو مضض في الحلمة",
+common_name: "ألم أو مضض في الحلمة",
+},
+{
+id: "s_3121",
+type: "symptom",
+name: "محاولة انتحار في الماضي",
+common_name: "محاولة انتحار في الماضي",
+},
+{
+id: "s_3122",
+type: "symptom",
+name: "صعوبة إغلاق العين، في كلا العينين",
+common_name: "صعوبة في إغلاق كلا العينين بشكل كامل",
+},
+{
+id: "s_3123",
+type: "symptom",
+name: "ضعف عضلي، هبوط زاوية الفم في الجهتين",
+common_name: "هبوط في جانبي الفم",
+},
+{
+id: "s_3124",
+type: "symptom",
+name: "ضعف عضلي، وجهي، من نمط آخر",
+common_name: "ضعف عضلي، وجهي، من نمط آخر",
+},
+{
+id: "s_3125",
+type: "symptom",
+name: "شرب الكحول، منذ أقل من 24 ساعة، كمية كبيرة",
+common_name: "شرب الكحول، منذ أقل من 24 ساعة، كمية كبيرة",
+},
+{
+id: "s_3126",
+type: "symptom",
+name: "شرب الكحول، منذ أقل من 24 ساعة، كمية قليلة",
+common_name: "شرب الكحول، منذ أقل من 24 ساعة، كمية قليلة",
+},
+{
+id: "s_3127",
+type: "symptom",
+name: "شرب الكحول، منذ أقل من 24 ساعة، كمية غير معروفة",
+common_name: "شرب الكحول، منذ أقل من 24 ساعة، كمية غير معروفة",
+},
+{
+id: "s_3128",
+type: "symptom",
+name: "شرب الكحول، منذ أقل من 24 ساعة، كمية كبيرة عند رجل",
+common_name: "شرب الكحول، منذ أقل من 24 ساعة، كمية كبيرة عند رجل",
+},
+{
+id: "s_3129",
+type: "symptom",
+name: "شرب الكحول، منذ أقل من 24 ساعة، كمية كبيرة عند امرأة",
+common_name: "شرب الكحول، منذ أقل من 24 ساعة، كمية كبيرة عند امرأة",
+},
+{
+id: "s_3130",
+type: "symptom",
+name: "شرب الكحول، منذ أقل من 24 ساعة، كمية قليلة عند رجل",
+common_name: "شرب الكحول، منذ أقل من 24 ساعة، كمية قليلة عند رجل",
+},
+{
+id: "s_3131",
+type: "symptom",
+name: "شرب الكحول، منذ أقل من 24 ساعة، كمية قليلة عند امرأة",
+common_name: "شرب الكحول، منذ أقل من 24 ساعة، كمية قليلة عند امرأة",
+},
+{
+id: "s_3133",
+type: "symptom",
+name: "شرب الكحول، منذ أكثر من 24 ساعة، محفوف بالمخاطر، عند رجل",
+common_name: "شرب الكحول، منذ أكثر من 24 ساعة، محفوف بالمخاطر، عند رجل",
+},
+{
+id: "s_3134",
+type: "symptom",
+name: "شرب الكحول، منذ أكثر من 24 ساعة، محفوف بالمخاطر، عند امرأة",
+common_name: "شرب الكحول، منذ أكثر من 24 ساعة، محفوف بالمخاطر، عند امرأة",
+},
+{
+id: "s_3135",
+type: "symptom",
+name: "شرب الكحول، منذ أكثر من 24 ساعة، محفوف بالمخاطر",
+common_name: "شرب الكحول، منذ أكثر من 24 ساعة، محفوف بالمخاطر",
+},
+{
+id: "s_3136",
+type: "symptom",
+name: "شرب الكحول، منذ أكثر من 24 ساعة، بإفراط",
+common_name: "شرب الكحول، منذ أكثر من 24 ساعة، بإفراط",
+},
+{
+id: "s_3137",
+type: "symptom",
+name: "شرب الكحول، منذ أكثر من 24 ساعة، بإفراط، عند رجل",
+common_name: "شرب الكحول، منذ أكثر من 24 ساعة، بإفراط، عند رجل",
+},
+{
+id: "s_3138",
+type: "symptom",
+name: "شرب الكحول، منذ أكثر من 24 ساعة، بإفراط، عند امرأة",
+common_name: "شرب الكحول، منذ أكثر من 24 ساعة، بإفراط، عند امرأة",
+},
+{
+id: "s_3139",
+type: "symptom",
+name: "شرب الكحول، منذ أكثر من 24 ساعة، بشراهة",
+common_name: "شرب الكحول، منذ أكثر من 24 ساعة، بشراهة",
+},
+{
+id: "s_3140",
+type: "symptom",
+name: "شرب الكحول، منذ أكثر من 24 ساعة، بشراهة، عند رجل",
+common_name: "شرب الكحول، منذ أكثر من 24 ساعة، بشراهة، عند رجل",
+},
+{
+id: "s_3141",
+type: "symptom",
+name: "شرب الكحول، منذ أكثر من 24 ساعة، بشراهة، عند امرأة",
+common_name: "شرب الكحول، منذ أكثر من 24 ساعة، بشراهة، عند امرأة",
+},
+{
+id: "s_3144",
+type: "symptom",
+name: "مضض بالثدي، في أحد أو كلا الثديين",
+common_name: "ألم في أحد أو كلا الثديين عند الضغط عليهما",
+},
+{
+id: "s_3145",
+type: "symptom",
+name: "لا إصابة عينية",
+common_name: "لا توجد إصابة في العين",
+},
+{
+id: "s_3146",
+type: "symptom",
+name: "يرقان، منذ أقل من 72 ساعة",
+common_name: "اصفرار في الجلد منذ أقل من 3 أيام",
+},
+{
+id: "s_3147",
+type: "symptom",
+name: "يرقان، يستمر بين  3 أيام و3 أسابيع",
+common_name: "اصفرار في الجلد يستمر فترة بين 3 أيام و3 أسابيع",
+},
+{
+id: "s_3148",
+type: "symptom",
+name: "يرقان، يستمر بين 3 أسابيع و3 أشهر",
+common_name: "اصفرار في الجلد يستمر فترة بين 3 أسابيع و3 أشهر",
+},
+{
+id: "s_3149",
+type: "symptom",
+name: "يرقان، منذ أكثر من 3 أشهر",
+common_name: "اصفرار في الجلد منذ أكثر من 3 أشهر",
+},
+{
+id: "s_3150",
+type: "symptom",
+name: "يرقان، ظهر خلال الساعات الـ24 الأولى التالية للولادة",
+common_name: "اصفرار في الجلد ظهر خلال أول 24 ساعة من الولادة",
+},
+{
+id: "s_3151",
+type: "symptom",
+name: "حمامى، ذات حدود واضحة",
+common_name: "احمرار في الجلد حوافه واضحة ومحددة",
+},
+{
+id: "s_3154",
+type: "symptom",
+name: "تنخر في الجلد",
+common_name: "تنخر في الجلد",
+},
+{
+id: "s_3156",
+type: "symptom",
+name: "ابتلاع جسم أجنبي، بطارية",
+common_name: "ابتلاع بطارية",
+},
+{
+id: "s_3157",
+type: "symptom",
+name: "ابتلاع جسم أجنبي، مادة كيميائية",
+common_name: "ابتلاع مادة كيميائية",
+},
+{
+id: "s_3158",
+type: "symptom",
+name: "ابتلاع جسم أجنبي، شيء خطير",
+common_name: "ابتلاع شيء خطير",
+},
+{
+id: "s_3159",
+type: "symptom",
+name: "ابتلاع جسم أجنبي، صغير وكليل",
+common_name: "ابتلاع شيء صغير وغير حاد",
+},
+{
+id: "s_3162",
+type: "symptom",
+name: "جرح، ناتج عن حرق",
+common_name: "جرح ناتج عن حرق",
+},
+{
+id: "s_3166",
+type: "symptom",
+name: "شرب الكحول، متلازمة السحب حالياً",
+common_name: "أعراض الانسحاب الكحولي حالياً",
+},
+{
+id: "s_3167",
+type: "symptom",
+name: "جرح، ملتهب",
+common_name: "التهاب في الجرح",
+},
+{
+id: "s_3168",
+type: "symptom",
+name: "جرح، غير ملتهب",
+common_name: "جرح، غير ملتهب",
+},
+{
+id: "s_3171",
+type: "symptom",
+name: "نقص التروية في طرف، بعد التعرض لرض",
+common_name: "ضعف الجريان الدموي إلى الطرف المصاب",
+},
+{
+id: "s_3173",
+type: "symptom",
+name: "جرح، خدش ناجم عن التعرض لحيوان",
+common_name: "خدش ناجم عن التعامل مع حيوان",
+},
+{
+id: "s_3174",
+type: "symptom",
+name: "ضغط الدم، مرتفع عند طفل",
+common_name: "ارتفاع ضغط الدم عند طفل",
+},
+{
+id: "s_3176",
+type: "symptom",
+name: "انخفاض التوتر الشرياني عند طفل",
+common_name: "انخفاض ضغط الدم عند طفل",
+},
+{
+id: "s_3178",
+type: "symptom",
+name: "إدمان الكحول",
+common_name: "إدمان الكحول",
+},
+{
+id: "s_3179",
+type: "symptom",
+name: "ابتلاع جسم أجنبي، غير معروف",
+common_name: "ابتلاع شيء غير معروف",
+},
+{
+id: "s_3188",
+type: "symptom",
+name: "دوخة، مفاجئة وشديدة",
+common_name: "دوخة مفاجئة وشديدة",
+},
+{
+id: "s_3189",
+type: "symptom",
+name: "ضعف الرؤية، فقدان الرؤية في جزء من الساحة البصرية",
+common_name: "فقدان الرؤية في جزء من الساحة البصرية",
+},
+{
+id: "s_3190",
+type: "symptom",
+name: "ضعف الرؤية، بدء مفاجئ",
+common_name: "ضعف مفاجئ في الرؤية",
+},
+{
+id: "s_3193",
+type: "symptom",
+name: "حدقتان غير متناظرتان، منذ أقل من 3 أيام",
+common_name: "حدقتان غير متماثلتان ببدء مفاجئ",
+},
+{
+id: "s_3194",
+type: "symptom",
+name: "حدقتان غير متناظرتان، منذ 3 أيام أو أكثر",
+common_name: "حدقتان غير متماثلتان منذ أكثر من 3 أيام",
+},
+{
+id: "s_3195",
+type: "symptom",
+name: "ظاهرة غروب الشمس",
+common_name: "ظاهرة غروب الشمس",
+},
+{
+id: "s_3197",
+type: "symptom",
+name: "غياب الوعي، بعد التعرض لرض",
+common_name: "فقدان الوعي بعد التعرض لإصابة",
+},
+{
+id: "s_3199",
+type: "symptom",
+name: "ضعف الرؤية، تدريجي",
+common_name: "ضعف تدريجي في الرؤية",
+},
+{
+id: "s_3200",
+type: "symptom",
+name: "ضعف الرؤية، اضطرابات بصرية شخصية",
+common_name: "مشاكل في الرؤية ناتجة عن حوادث غير طبيعية فيها",
+},
+{
+id: "s_3201",
+type: "symptom",
+name: "ضعف الرؤية، عمى تام",
+common_name: "عمى تام",
+},
+{
+id: "s_3205",
+type: "symptom",
+name: "رُعاف، لا يمكن إيقافه",
+common_name: "نزف لا يمكن إيقافه من الأنف",
+},
+{
+id: "s_3206",
+type: "symptom",
+name: "صعوبة إغلاق العين",
+common_name: "صعوبة في إغلاق العين",
+},
+{
+id: "s_3208",
+type: "symptom",
+name: "ضعف القدرة على تحريك بعض أجزاء الجسم",
+common_name: "صعوبة تحريك أحد أجزاء الجسم",
+},
+{
+id: "s_3209",
+type: "symptom",
+name: "صعق بالتيار الكهربائي أدى لمضاعفات قلبية أو رئوية",
+common_name: "مشاكل في القلب أو الرئتين بعد الإصابة بصعق كهربائي",
+},
+{
+id: "s_3210",
+type: "symptom",
+name: "ألم في طرف",
+common_name: "ألم طرف",
+},
+{
+id: "s_3212",
+type: "symptom",
+name: "عدم استخدام أي موانع حمل هرمونية أو معالجة هرمونية معيضة أو لولب رحمي",
+common_name: "عدم استخدام أي موانع حمل هرمونية أو معالجة هرمونية معيضة أو لولب رحمي",
+},
+];
\ No newline at end of file
diff --git a/convert_json.dart b/convert_json.dart
new file mode 100644
index 0000000..08f344d
--- /dev/null
+++ b/convert_json.dart
@@ -0,0 +1,73 @@
+import 'dart:convert';
+import 'dart:io';
+
+void main() async {
+  final file = File('assets/json/body_symptoms_data.json');
+  final content = await file.readAsString();
+
+  print('File size: ${content.length} characters');
+
+  // Split into two parts
+  final parts = content.split('export const SymptomsData = [');
+  if (parts.length != 2) {
+    print('ERROR: Could not split file properly');
+    exit(1);
+  }
+
+  print('Split into ${parts.length} parts');
+
+  // Process BodySymptomsData
+  var bodyPart = parts[0]
+      .replaceAll('export const BodySymptomsData = ', '')
+      .trim()
+      .replaceAll(RegExp(r';$'), '');
+
+  print('Parsing body symptoms...');
+  Map bodySymptomsData;
+  try {
+    bodySymptomsData = json.decode(bodyPart);
+    print('✅ Body symptoms parsed: ${bodySymptomsData.length} body parts');
+  } catch (e) {
+    print('❌ Error parsing body symptoms: $e');
+    exit(1);
+  }
+
+  // Process SymptomsData
+  print('Processing symptoms data...');
+  var symptomsPart = parts[1]
+      .trim()
+      .replaceAll(RegExp(r'\];$'), '')
+      .replaceAllMapped(RegExp(r'\n(\s*)id:'), (m) => '\n${m.group(1)}"id":')
+      .replaceAllMapped(RegExp(r'\n(\s*)type:'), (m) => '\n${m.group(1)}"type":')
+      .replaceAllMapped(RegExp(r'\n(\s*)name:'), (m) => '\n${m.group(1)}"name":')
+      .replaceAllMapped(RegExp(r'\n(\s*)common_name:'), (m) => '\n${m.group(1)}"common_name":');
+
+  print('Parsing symptoms...');
+  List symptomsData;
+  try {
+    symptomsData = json.decode('[$symptomsPart]');
+    print('✅ Symptoms parsed: ${symptomsData.length} symptoms');
+  } catch (e) {
+    print('❌ Error parsing symptoms: $e');
+    print('First 1000 chars:');
+    print('[$symptomsPart]'.substring(0, 1000));
+    exit(1);
+  }
+
+  // Create final JSON
+  print('Creating final JSON structure...');
+  final jsonStructure = {
+    'bodySymptoms': bodySymptomsData,
+    'symptoms': symptomsData,
+  };
+
+  // Write to file
+  print('Writing to file...');
+  final encoder = JsonEncoder.withIndent('  ');
+  await file.writeAsString(encoder.convert(jsonStructure));
+
+  print('\n✅ SUCCESS! File converted to proper JSON');
+  print('✅ Body parts: ${bodySymptomsData.length}');
+  print('✅ Symptoms: ${symptomsData.length}');
+}
+
diff --git a/lib/core/api_consts.dart b/lib/core/api_consts.dart
index d9906e0..5499787 100644
--- a/lib/core/api_consts.dart
+++ b/lib/core/api_consts.dart
@@ -14,7 +14,7 @@ var PACKAGES_ORDERS = '/api/orders';
 var PACKAGES_ORDER_HISTORY = '/api/orders/items';
 var PACKAGES_TAMARA_OPT = '/api/orders/paymentoptions/tamara';
 // var  BASE_URL = 'http://10.50.100.198:2018/';
-var  BASE_URL = 'https://uat.hmgwebservices.com/';
+var BASE_URL = 'https://uat.hmgwebservices.com/';
 // var BASE_URL = 'https://hmgwebservices.com/';
 // var  BASE_URL = 'http://10.201.204.103/';
 // var BASE_URL = 'https://orash.cloudsolutions.com.sa/';
@@ -181,6 +181,7 @@ var GET_TABLE_REQUEST = 'Services/Community.svc/REST/CreateVaccinationTable';
 ///
 /// use get all cities from the e-referral, already calling this api there don't use multiple same api calls
 var GET_CITIES_REQUEST = 'Services/Lists.svc/REST/GetAllCities';
+
 ///
 ///
 ///
@@ -444,8 +445,6 @@ var H2O_UPDATE_USER_DETAIL = "Services/H2ORemainder.svc/REST/H2O_UpdateUserDetai
 var H2O_UNDO_USER_ACTIVITY = "Services/H2ORemainder.svc/REST/H2o_UndoUserActivity";
 //E_Referral Services
 
-
-
 // Encillary Orders
 
 var GET_ANCILLARY_ORDERS = 'Services/Doctors.svc/REST/GetOnlineAncillaryOrderList';
@@ -710,7 +709,9 @@ class ApiConsts {
 
   static String baseUrl = 'https://hmgwebservices.com/'; // HIS API URL PROD
 
-  static String rcBaseUrl = 'https://rc.hmg.com/'; // RC API URL PROD
+  static String rcBaseUrl = 'https://rc.hmg.com/'; // dRC API URL PROD
+  static String hmgPharmacyApiBaseUrl = 'https://hmgpharmacyapi.hmg.com/'; // dRC API URL PROD
+  static String symptomsCheckerApi = '${hmgPharmacyApiBaseUrl}symptomsapi/api/SymptomChecker'; // dRC API URL PROD
 
   static var payFortEnvironment = FortEnvironment.production;
   static var applePayMerchantId = "merchant.com.hmgwebservices";
@@ -844,6 +845,12 @@ class ApiConsts {
   static final String updateHHCOrder = 'api/hhc/update';
   static final String addHHCOrder = 'api/HHC/add';
 
+  // SYMPTOMS CHECKER
+  static final String getBodySymptomsByName = '$symptomsCheckerApi/GetBodySymptomsByName';
+  static final String getRiskFactors = '$symptomsCheckerApi/GetRiskFactors';
+  static final String getGeneralSuggestion = '$symptomsCheckerApi/GetGeneralSggestion';
+  static final String diagnosis = '$symptomsCheckerApi/diagnosis';
+  static final String explain = '$symptomsCheckerApi/explain';
 
   //E-REFERRAL SERVICES
 
@@ -854,7 +861,6 @@ class ApiConsts {
   static final createEReferral = "Services/Patients.svc/REST/CreateEReferral";
   static final getEReferrals = "Services/Patients.svc/REST/GetEReferrals";
 
-
   // ************     static values for Api   ****************
   static final double appVersionID = 50.3;
   static final int appChannelId = 3;
diff --git a/lib/core/dependencies.dart b/lib/core/dependencies.dart
index 88b1f6f..b994d4e 100644
--- a/lib/core/dependencies.dart
+++ b/lib/core/dependencies.dart
@@ -16,6 +16,7 @@ import 'package:hmg_patient_app_new/features/emergency_services/emergency_servic
 import 'package:hmg_patient_app_new/features/habib_wallet/habib_wallet_repo.dart';
 import 'package:hmg_patient_app_new/features/habib_wallet/habib_wallet_view_model.dart';
 import 'package:hmg_patient_app_new/features/hmg_services/hmg_services_repo.dart';
+import 'package:hmg_patient_app_new/features/hmg_services/hmg_services_view_model.dart';
 import 'package:hmg_patient_app_new/features/immediate_livecare/immediate_livecare_repo.dart';
 import 'package:hmg_patient_app_new/features/immediate_livecare/immediate_livecare_view_model.dart';
 import 'package:hmg_patient_app_new/features/insurance/insurance_repo.dart';
@@ -36,9 +37,10 @@ import 'package:hmg_patient_app_new/features/prescriptions/prescriptions_view_mo
 import 'package:hmg_patient_app_new/features/profile_settings/profile_settings_view_model.dart';
 import 'package:hmg_patient_app_new/features/radiology/radiology_repo.dart';
 import 'package:hmg_patient_app_new/features/radiology/radiology_view_model.dart';
+import 'package:hmg_patient_app_new/features/symptoms_checker/symptoms_checker_repo.dart';
+import 'package:hmg_patient_app_new/features/symptoms_checker/symptoms_checker_view_model.dart';
 import 'package:hmg_patient_app_new/features/todo_section/todo_section_repo.dart';
 import 'package:hmg_patient_app_new/features/todo_section/todo_section_view_model.dart';
-import 'package:hmg_patient_app_new/presentation/symptoms_checker/symptoms_checker_view_model.dart';
 import 'package:hmg_patient_app_new/services/analytics/analytics_service.dart';
 import 'package:hmg_patient_app_new/services/cache_service.dart';
 import 'package:hmg_patient_app_new/services/dialog_service.dart';
@@ -94,6 +96,9 @@ class AppDependencies {
     final sharedPreferences = await SharedPreferences.getInstance();
     getIt.registerLazySingleton(() => CacheServiceImp(sharedPreferences: sharedPreferences, loggerService: getIt()));
     getIt.registerLazySingleton(() => ApiClientImp(appState: getIt()));
+    getIt.registerLazySingleton(
+      () => LocalAuthService(loggerService: getIt(), localAuth: getIt()),
+    );
 
     // Repositories
     getIt.registerLazySingleton(() => CommonRepoImp(loggerService: getIt()));
@@ -105,9 +110,6 @@ class AppDependencies {
     getIt.registerLazySingleton(() => PrescriptionsRepoImp(loggerService: getIt(), apiClient: getIt()));
     getIt.registerLazySingleton(() => InsuranceRepoImp(loggerService: getIt(), apiClient: getIt()));
     getIt.registerLazySingleton(() => PayfortRepoImp(loggerService: getIt(), apiClient: getIt()));
-    getIt.registerLazySingleton(
-      () => LocalAuthService(loggerService: getIt(), localAuth: getIt()),
-    );
     getIt.registerLazySingleton(() => HabibWalletRepoImp(loggerService: getIt(), apiClient: getIt()));
     getIt.registerLazySingleton(() => MedicalFileRepoImp(loggerService: getIt(), apiClient: getIt()));
     getIt.registerLazySingleton(() => ImmediateLiveCareRepoImp(loggerService: getIt(), apiClient: getIt()));
@@ -116,6 +118,7 @@ class AppDependencies {
     getIt.registerLazySingleton(() => LocationRepoImpl(apiClient: getIt()));
     getIt.registerLazySingleton(() => ContactUsRepoImp(loggerService: getIt(), apiClient: getIt()));
     getIt.registerLazySingleton(() => HmgServicesRepoImp(loggerService: getIt(), apiClient: getIt()));
+    getIt.registerLazySingleton(() => SymptomsCheckerRepoImp(loggerService: getIt(), apiClient: getIt()));
 
     // ViewModels
     // Global/shared VMs → LazySingleton
@@ -126,7 +129,8 @@ class AppDependencies {
       () => RadiologyViewModel(radiologyRepo: getIt(), errorHandlerService: getIt(), navigationService: getIt()),
     );
 
-    getIt.registerLazySingleton(() => PrescriptionsViewModel(prescriptionsRepo: getIt(), errorHandlerService: getIt(), navServices: getIt()));
+    getIt.registerLazySingleton(
+        () => PrescriptionsViewModel(prescriptionsRepo: getIt(), errorHandlerService: getIt(), navServices: getIt()));
 
     getIt.registerLazySingleton(() => InsuranceViewModel(insuranceRepo: getIt(), errorHandlerService: getIt()));
 
@@ -216,7 +220,7 @@ class AppDependencies {
       () => TodoSectionViewModel(todoSectionRepo: getIt(), errorHandlerService: getIt()),
     );
 
-    getIt.registerLazySingleton(() => SymptomsCheckerViewModel());
+    getIt.registerLazySingleton(() => SymptomsCheckerViewModel(errorHandlerService: getIt(), symptomsCheckerRepo: getIt()));
     getIt.registerLazySingleton(
       () => HmgServicesViewModel(bookAppointmentsRepo: getIt(), hmgServicesRepo: getIt(), errorHandlerService: getIt(), navigationService: getIt()),
     );
diff --git a/lib/core/utils/calender_utils_new.dart b/lib/core/utils/calender_utils_new.dart
index 05448b1..5a43d78 100644
--- a/lib/core/utils/calender_utils_new.dart
+++ b/lib/core/utils/calender_utils_new.dart
@@ -25,7 +25,13 @@ class CalenderUtilsNew {
     });
   }
 
-  FutureOr createOrUpdateEvent({required String title, required String description, required String location, DateTime? scheduleDateTime, String? eventId, int? reminderMinutes}) async {
+  FutureOr createOrUpdateEvent(
+      {required String title,
+      required String description,
+      required String location,
+      DateTime? scheduleDateTime,
+      String? eventId,
+      int? reminderMinutes}) async {
     if (writableCalender.isEmpty) {
       await getCalenders();
     }
@@ -38,12 +44,14 @@ class CalenderUtilsNew {
     // String eventId = await getEventIdIfEventExist(title!.split("#").last);
     // if (eventId.isEmpty) {
     eventResult = await DeviceCalendar.instance.createEvent(
-        calendarId: writableCalendars!.id,
-        title: title,
-        description: description,
-        startDate: scheduleDateTime!,
-        endDate: scheduleDateTime!.add(Duration(minutes: 30)),
-        reminderMinutes: reminderMinutes);
+      calendarId: writableCalendars!.id,
+      title: title,
+      description: description,
+      startDate: scheduleDateTime!,
+      endDate: scheduleDateTime!.add(Duration(minutes: 30)),
+
+      // reminderMinutes: reminderMinutes, // TODO : NEED TO CONFIRM THIS FROM TAHA
+    );
     return eventResult.isNotEmpty;
     // }
 
diff --git a/lib/core/utils/utils.dart b/lib/core/utils/utils.dart
index b43c55e..9a03545 100644
--- a/lib/core/utils/utils.dart
+++ b/lib/core/utils/utils.dart
@@ -8,7 +8,6 @@ import 'package:connectivity_plus/connectivity_plus.dart';
 import 'package:crypto/crypto.dart' as crypto;
 import 'package:easy_localization/easy_localization.dart';
 import 'package:flutter/material.dart';
-import 'package:flutter_inappwebview/flutter_inappwebview.dart';
 import 'package:flutter_svg/flutter_svg.dart';
 import 'package:fluttertoast/fluttertoast.dart';
 import 'package:google_api_availability/google_api_availability.dart';
@@ -871,7 +870,8 @@ class Utils {
     }
     return isHavePrivilege;
   }
-  static void openWebView({ required String url}) {
+
+  static void openWebView({required String url}) {
     Uri uri = Uri.parse(url);
     launchUrl(uri, mode: LaunchMode.inAppBrowserView);
   }
diff --git a/lib/features/symptoms_checker/organ_mapping_data.dart b/lib/features/symptoms_checker/data/organ_mapping_data.dart
similarity index 73%
rename from lib/features/symptoms_checker/organ_mapping_data.dart
rename to lib/features/symptoms_checker/data/organ_mapping_data.dart
index a2395e4..6b50b25 100644
--- a/lib/features/symptoms_checker/organ_mapping_data.dart
+++ b/lib/features/symptoms_checker/data/organ_mapping_data.dart
@@ -7,25 +7,29 @@ class OrganData {
     // ========== HEAD & FACE ==========
     OrganModel(
       id: 'head',
-      name: 'Head',
+      name: 'whole_head',
+      description: 'Head',
       bodyView: BodyView.front,
       position: OrganPosition(x: 0.50, y: 0.03),
     ),
     OrganModel(
       id: 'left_eye',
-      name: 'Left Eye',
+      name: 'eyes',
+      description: 'Left Eye',
       bodyView: BodyView.front,
       position: OrganPosition(x: 0.43, y: 0.07),
     ),
     OrganModel(
       id: 'right_eye',
-      name: 'Right Eye',
+      name: 'eyes',
+      description: 'Right Eye',
       bodyView: BodyView.front,
       position: OrganPosition(x: 0.57, y: 0.07),
     ),
     OrganModel(
       id: 'nose_mouth',
-      name: 'Nose/Mouth',
+      name: 'oral_cavity',
+      description: 'Nose/Mouth',
       bodyView: BodyView.front,
       position: OrganPosition(x: 0.50, y: 0.09),
     ),
@@ -33,7 +37,8 @@ class OrganData {
     // ========== NECK ==========
     OrganModel(
       id: 'throat',
-      name: 'Throat',
+      name: 'neck_or_throat',
+      description: 'Throat',
       bodyView: BodyView.front,
       position: OrganPosition(x: 0.50, y: 0.15),
     ),
@@ -41,13 +46,15 @@ class OrganData {
     // ========== SHOULDERS ==========
     OrganModel(
       id: 'left_shoulder',
-      name: 'Left Shoulder',
+      name: 'upper_arm',
+      description: 'Left Shoulder',
       bodyView: BodyView.front,
       position: OrganPosition(x: 0.22, y: 0.22),
     ),
     OrganModel(
       id: 'right_shoulder',
-      name: 'Right Shoulder',
+      name: 'upper_arm',
+      description: 'Right Shoulder',
       bodyView: BodyView.front,
       position: OrganPosition(x: 0.8, y: 0.22),
     ),
@@ -55,19 +62,22 @@ class OrganData {
     // ========== CHEST ==========
     OrganModel(
       id: 'left_chest',
-      name: 'Left Chest',
+      name: 'chest',
+      description: 'Left Chest',
       bodyView: BodyView.front,
       position: OrganPosition(x: 0.38, y: 0.22),
     ),
     OrganModel(
       id: 'center_chest',
-      name: 'Center Chest',
+      name: 'chest',
+      description: 'Center Chest',
       bodyView: BodyView.front,
       position: OrganPosition(x: 0.52, y: 0.25),
     ),
     OrganModel(
       id: 'right_chest',
-      name: 'Right Chest',
+      name: 'chest',
+      description: 'Right Chest',
       bodyView: BodyView.front,
       position: OrganPosition(x: 0.65, y: 0.22),
     ),
@@ -75,13 +85,15 @@ class OrganData {
     // ========== RIBS ==========
     OrganModel(
       id: 'left_ribs',
-      name: 'Left Ribs',
+      name: 'chest',
+      description: 'Left Ribs',
       bodyView: BodyView.front,
       position: OrganPosition(x: 0.38, y: 0.35),
     ),
     OrganModel(
       id: 'right_ribs',
-      name: 'Right Ribs',
+      name: 'chest',
+      description: 'Right Ribs',
       bodyView: BodyView.front,
       position: OrganPosition(x: 0.64, y: 0.35),
     ),
@@ -89,19 +101,22 @@ class OrganData {
     // ========== ABDOMEN ==========
     OrganModel(
       id: 'upper_abdomen',
-      name: 'Upper Abdomen',
+      name: 'upper_abdomen',
+      description: 'Upper Abdomen',
       bodyView: BodyView.front,
       position: OrganPosition(x: 0.51, y: 0.31),
     ),
     OrganModel(
       id: 'navel',
-      name: 'Navel',
+      name: 'mid_abdomen',
+      description: 'Navel',
       bodyView: BodyView.front,
       position: OrganPosition(x: 0.51, y: 0.38),
     ),
     OrganModel(
       id: 'lower_abdomen',
-      name: 'Lower Abdomen',
+      name: 'lower_abdomen',
+      description: 'Lower Abdomen',
       bodyView: BodyView.front,
       position: OrganPosition(x: 0.51, y: 0.44),
     ),
@@ -109,13 +124,15 @@ class OrganData {
     // ========== PELVIS ==========
     OrganModel(
       id: 'left_groin',
-      name: 'Left Groin',
+      name: 'sexual_organs',
+      description: 'Left Groin',
       bodyView: BodyView.front,
       position: OrganPosition(x: 0.42, y: 0.49),
     ),
     OrganModel(
       id: 'right_groin',
-      name: 'Right Groin',
+      name: 'sexual_organs',
+      description: 'Right Groin',
       bodyView: BodyView.front,
       position: OrganPosition(x: 0.59, y: 0.49),
     ),
@@ -124,19 +141,22 @@ class OrganData {
 
     OrganModel(
       id: 'left_elbow',
-      name: 'Left Elbow',
+      name: 'elbow',
+      description: 'Left Elbow',
       bodyView: BodyView.front,
       position: OrganPosition(x: 0.21, y: 0.35),
     ),
     OrganModel(
       id: 'left_forearm',
-      name: 'Left Forearm',
+      name: 'forearm',
+      description: 'Left Forearm',
       bodyView: BodyView.front,
       position: OrganPosition(x: 0.19, y: 0.43),
     ),
     OrganModel(
       id: 'left_wrist',
-      name: 'Left Wrist',
+      name: 'hand',
+      description: 'Left Wrist',
       bodyView: BodyView.front,
       position: OrganPosition(x: 0.14, y: 0.5),
     ),
@@ -145,19 +165,22 @@ class OrganData {
 
     OrganModel(
       id: 'right_elbow',
-      name: 'Right Elbow',
+      name: 'elbow',
+      description: 'Right Elbow',
       bodyView: BodyView.front,
       position: OrganPosition(x: 0.79, y: 0.35),
     ),
     OrganModel(
       id: 'right_forearm',
-      name: 'Right Forearm',
+      name: 'forearm',
+      description: 'Right Forearm',
       bodyView: BodyView.front,
       position: OrganPosition(x: 0.81, y: 0.43),
     ),
     OrganModel(
       id: 'right_wrist',
-      name: 'Right Wrist',
+      name: 'hand',
+      description: 'Right Wrist',
       bodyView: BodyView.front,
       position: OrganPosition(x: 0.85, y: 0.5),
     ),
@@ -165,25 +188,29 @@ class OrganData {
     // ========== LEFT LEG ==========
     OrganModel(
       id: 'left_thigh',
-      name: 'Left Thigh',
+      name: 'thigh',
+      description: 'Left Thigh',
       bodyView: BodyView.front,
       position: OrganPosition(x: 0.4, y: 0.60),
     ),
     OrganModel(
       id: 'left_knee',
-      name: 'Left Knee',
+      name: 'knee',
+      description: 'Left Knee',
       bodyView: BodyView.front,
       position: OrganPosition(x: 0.4, y: 0.72),
     ),
     OrganModel(
       id: 'left_shin',
-      name: 'Left Shin',
+      name: 'lower_leg',
+      description: 'Left Shin',
       bodyView: BodyView.front,
       position: OrganPosition(x: 0.41, y: 0.82),
     ),
     OrganModel(
       id: 'left_ankle',
-      name: 'Left Ankle',
+      name: 'foot',
+      description: 'Left Ankle',
       bodyView: BodyView.front,
       position: OrganPosition(x: 0.43, y: 0.91),
     ),
@@ -191,25 +218,29 @@ class OrganData {
     // ========== RIGHT LEG ==========
     OrganModel(
       id: 'right_thigh',
-      name: 'Right Thigh',
+      name: 'thigh',
+      description: 'Right Thigh',
       bodyView: BodyView.front,
       position: OrganPosition(x: 0.65, y: 0.60),
     ),
     OrganModel(
       id: 'right_knee',
-      name: 'Right Knee',
+      name: 'knee',
+      description: 'Right Knee',
       bodyView: BodyView.front,
       position: OrganPosition(x: 0.6, y: 0.72),
     ),
     OrganModel(
       id: 'right_shin',
-      name: 'Right Shin',
+      name: 'lower_leg',
+      description: 'Right Shin',
       bodyView: BodyView.front,
       position: OrganPosition(x: 0.57, y: 0.82),
     ),
     OrganModel(
       id: 'right_ankle',
-      name: 'Right Ankle',
+      name: 'foot',
+      description: 'Right Ankle',
       bodyView: BodyView.front,
       position: OrganPosition(x: 0.57, y: 0.91),
     ),
@@ -220,13 +251,15 @@ class OrganData {
     // ========== HEAD & NECK ==========
     OrganModel(
       id: 'back_of_head',
-      name: 'Back of Head',
+      name: 'whole_head',
+      description: 'Back of Head',
       bodyView: BodyView.back,
       position: OrganPosition(x: 0.50, y: 0.04),
     ),
     OrganModel(
       id: 'neck_back',
-      name: 'Neck',
+      name: 'nape_of_neck',
+      description: 'Neck',
       bodyView: BodyView.back,
       position: OrganPosition(x: 0.50, y: 0.14),
     ),
@@ -234,13 +267,15 @@ class OrganData {
     // ========== SHOULDERS ==========
     OrganModel(
       id: 'left_shoulder_back',
-      name: 'Left Shoulder',
+      name: 'upper_arm',
+      description: 'Left Shoulder',
       bodyView: BodyView.back,
       position: OrganPosition(x: 0.33, y: 0.19),
     ),
     OrganModel(
       id: 'right_shoulder_back',
-      name: 'Right Shoulder',
+      name: 'upper_arm',
+      description: 'Right Shoulder',
       bodyView: BodyView.back,
       position: OrganPosition(x: 0.67, y: 0.19),
     ),
@@ -248,19 +283,22 @@ class OrganData {
     // ========== UPPER BACK ==========
     OrganModel(
       id: 'upper_spine',
-      name: 'Upper Spine',
+      name: 'back',
+      description: 'Upper Spine',
       bodyView: BodyView.back,
       position: OrganPosition(x: 0.50, y: 0.23),
     ),
     OrganModel(
       id: 'left_upper_back',
-      name: 'Left Upper Back',
+      name: 'back',
+      description: 'Left Upper Back',
       bodyView: BodyView.back,
       position: OrganPosition(x: 0.38, y: 0.28),
     ),
     OrganModel(
       id: 'right_upper_back',
-      name: 'Right Upper Back',
+      name: 'back',
+      description: 'Right Upper Back',
       bodyView: BodyView.back,
       position: OrganPosition(x: 0.62, y: 0.28),
     ),
@@ -268,19 +306,22 @@ class OrganData {
     // ========== MID BACK ==========
     OrganModel(
       id: 'mid_spine',
-      name: 'Mid Spine',
+      name: 'back',
+      description: 'Mid Spine',
       bodyView: BodyView.back,
       position: OrganPosition(x: 0.50, y: 0.35),
     ),
     OrganModel(
       id: 'left_mid_back',
-      name: 'Left Mid Back',
+      name: 'back',
+      description: 'Left Mid Back',
       bodyView: BodyView.back,
       position: OrganPosition(x: 0.38, y: 0.35),
     ),
     OrganModel(
       id: 'right_mid_back',
-      name: 'Right Mid Back',
+      name: 'back',
+      description: 'Right Mid Back',
       bodyView: BodyView.back,
       position: OrganPosition(x: 0.62, y: 0.35),
     ),
@@ -288,19 +329,22 @@ class OrganData {
     // ========== LOWER BACK ==========
     OrganModel(
       id: 'lower_spine',
-      name: 'Lower Back',
+      name: 'lower_back',
+      description: 'Lower Back',
       bodyView: BodyView.back,
       position: OrganPosition(x: 0.50, y: 0.43),
     ),
     OrganModel(
       id: 'left_lower_back',
-      name: 'Left Lower Back',
+      name: 'lower_back',
+      description: 'Left Lower Back',
       bodyView: BodyView.back,
       position: OrganPosition(x: 0.40, y: 0.43),
     ),
     OrganModel(
       id: 'right_lower_back',
-      name: 'Right Lower Back',
+      name: 'lower_back',
+      description: 'Right Lower Back',
       bodyView: BodyView.back,
       position: OrganPosition(x: 0.60, y: 0.43),
     ),
@@ -308,19 +352,22 @@ class OrganData {
     // ========== GLUTES ==========
     OrganModel(
       id: 'sacrum',
-      name: 'Sacrum',
+      name: 'lower_back',
+      description: 'Sacrum',
       bodyView: BodyView.back,
       position: OrganPosition(x: 0.50, y: 0.52),
     ),
     OrganModel(
       id: 'left_glute',
-      name: 'Left Glute',
+      name: 'buttocks',
+      description: 'Left Glute',
       bodyView: BodyView.back,
       position: OrganPosition(x: 0.45, y: 0.56),
     ),
     OrganModel(
       id: 'right_glute',
-      name: 'Right Glute',
+      name: 'buttocks',
+      description: 'Right Glute',
       bodyView: BodyView.back,
       position: OrganPosition(x: 0.55, y: 0.56),
     ),
@@ -328,25 +375,29 @@ class OrganData {
     // ========== LEGS ==========
     OrganModel(
       id: 'left_hamstring',
-      name: 'Left Hamstring',
+      name: 'thigh',
+      description: 'Left Hamstring',
       bodyView: BodyView.back,
       position: OrganPosition(x: 0.43, y: 0.65),
     ),
     OrganModel(
       id: 'right_hamstring',
-      name: 'Right Hamstring',
+      name: 'thigh',
+      description: 'Right Hamstring',
       bodyView: BodyView.back,
       position: OrganPosition(x: 0.57, y: 0.65),
     ),
     OrganModel(
       id: 'left_calf',
-      name: 'Left Calf',
+      name: 'lower_leg',
+      description: 'Left Calf',
       bodyView: BodyView.back,
       position: OrganPosition(x: 0.43, y: 0.79),
     ),
     OrganModel(
       id: 'right_calf',
-      name: 'Right Calf',
+      name: 'lower_leg',
+      description: 'Right Calf',
       bodyView: BodyView.back,
       position: OrganPosition(x: 0.57, y: 0.79),
     ),
diff --git a/lib/features/symptoms_checker/models/organ_model.dart b/lib/features/symptoms_checker/models/organ_model.dart
index 984a290..fab7dff 100644
--- a/lib/features/symptoms_checker/models/organ_model.dart
+++ b/lib/features/symptoms_checker/models/organ_model.dart
@@ -3,12 +3,14 @@ import 'package:hmg_patient_app_new/core/enums.dart';
 class OrganModel {
   final String id;
   final String name;
+  final String description;
   final BodyView bodyView;
   final OrganPosition position;
 
   const OrganModel({
     required this.id,
     required this.name,
+    required this.description,
     required this.bodyView,
     required this.position,
   });
@@ -16,12 +18,14 @@ class OrganModel {
   OrganModel copyWith({
     String? id,
     String? name,
+    String? description,
     BodyView? bodyView,
     OrganPosition? position,
   }) {
     return OrganModel(
       id: id ?? this.id,
       name: name ?? this.name,
+      description: description ?? this.description,
       bodyView: bodyView ?? this.bodyView,
       position: position ?? this.position,
     );
@@ -37,5 +41,3 @@ class OrganPosition {
     required this.y,
   });
 }
-
-
diff --git a/lib/features/symptoms_checker/models/resp_models/body_symptom_response_model.dart b/lib/features/symptoms_checker/models/resp_models/body_symptom_response_model.dart
new file mode 100644
index 0000000..7c8f915
--- /dev/null
+++ b/lib/features/symptoms_checker/models/resp_models/body_symptom_response_model.dart
@@ -0,0 +1,151 @@
+class BodySymptomResponseModel {
+  final DataDetails? dataDetails;
+
+  BodySymptomResponseModel({
+    this.dataDetails,
+  });
+
+  factory BodySymptomResponseModel.fromJson(Map json) {
+    return BodySymptomResponseModel(
+      dataDetails: json['dataDetails'] != null ? DataDetails.fromJson(json['dataDetails']) : null,
+    );
+  }
+
+  Map toJson() {
+    return {
+      'dataDetails': dataDetails?.toJson(),
+    };
+  }
+}
+
+class DataDetails {
+  final List? result;
+  final int? id;
+  final dynamic exception;
+  final int? status;
+  final bool? isCanceled;
+  final bool? isCompleted;
+  final bool? isCompletedSuccessfully;
+  final int? creationOptions;
+  final dynamic asyncState;
+  final bool? isFaulted;
+
+  DataDetails({
+    this.result,
+    this.id,
+    this.exception,
+    this.status,
+    this.isCanceled,
+    this.isCompleted,
+    this.isCompletedSuccessfully,
+    this.creationOptions,
+    this.asyncState,
+    this.isFaulted,
+  });
+
+  factory DataDetails.fromJson(Map json) {
+    return DataDetails(
+      result: json['Result'] != null ? (json['Result'] as List).map((item) => OrganSymptomResult.fromJson(item)).toList() : null,
+      id: json['Id'],
+      exception: json['Exception'],
+      status: json['Status'],
+      isCanceled: json['IsCanceled'],
+      isCompleted: json['IsCompleted'],
+      isCompletedSuccessfully: json['IsCompletedSuccessfully'],
+      creationOptions: json['CreationOptions'],
+      asyncState: json['AsyncState'],
+      isFaulted: json['IsFaulted'],
+    );
+  }
+
+  Map toJson() {
+    return {
+      'Result': result?.map((item) => item.toJson()).toList(),
+      'Id': id,
+      'Exception': exception,
+      'Status': status,
+      'IsCanceled': isCanceled,
+      'IsCompleted': isCompleted,
+      'IsCompletedSuccessfully': isCompletedSuccessfully,
+      'CreationOptions': creationOptions,
+      'AsyncState': asyncState,
+      'IsFaulted': isFaulted,
+    };
+  }
+}
+
+class OrganSymptomResult {
+  final String? name;
+  final List? bodySymptoms;
+
+  OrganSymptomResult({
+    this.name,
+    this.bodySymptoms,
+  });
+
+  factory OrganSymptomResult.fromJson(Map json) {
+    return OrganSymptomResult(
+      name: json['name'],
+      bodySymptoms: json['bodySymptoms'] != null ? (json['bodySymptoms'] as List).map((item) => BodySymptom.fromJson(item)).toList() : null,
+    );
+  }
+
+  Map toJson() {
+    return {
+      'name': name,
+      'bodySymptoms': bodySymptoms?.map((item) => item.toJson()).toList(),
+    };
+  }
+}
+
+class BodySymptom {
+  final String? id;
+  final String? type;
+  final String? symptomsName;
+  final String? name;
+  final String? commonName;
+  final String? nameAr;
+  final String? commonNameAr;
+
+  BodySymptom({
+    this.id,
+    this.type,
+    this.symptomsName,
+    this.name,
+    this.commonName,
+    this.nameAr,
+    this.commonNameAr,
+  });
+
+  factory BodySymptom.fromJson(Map json) {
+    return BodySymptom(
+      id: json['Id'],
+      type: json['type'],
+      symptomsName: json['symptoms_name'],
+      name: json['name'],
+      commonName: json['common_name'],
+      nameAr: json['nameAr'],
+      commonNameAr: json['common_nameAr'],
+    );
+  }
+
+  Map toJson() {
+    return {
+      'Id': id,
+      'type': type,
+      'symptoms_name': symptomsName,
+      'name': name,
+      'common_name': commonName,
+      'nameAr': nameAr,
+      'common_nameAr': commonNameAr,
+    };
+  }
+
+  // Helper method to get display name based on locale
+  String getDisplayName(bool isArabic) {
+    if (isArabic) {
+      return commonNameAr ?? nameAr ?? commonName ?? name ?? '';
+    }
+    return commonName ?? name ?? '';
+  }
+}
diff --git a/lib/features/symptoms_checker/models/symptom_model.dart b/lib/features/symptoms_checker/models/symptom_model.dart
index d35b11a..19d8be4 100644
--- a/lib/features/symptoms_checker/models/symptom_model.dart
+++ b/lib/features/symptoms_checker/models/symptom_model.dart
@@ -1,27 +1,64 @@
 class SymptomModel {
   final String id;
   final String name;
-  final String organId;
+  final String nameAr;
+  final String? organId;
 
   const SymptomModel({
     required this.id,
     required this.name,
-    required this.organId,
+    this.nameAr = '',
+    this.organId,
   });
 
   SymptomModel copyWith({
     String? id,
     String? name,
+    String? nameAr,
     String? organId,
   }) {
     return SymptomModel(
       id: id ?? this.id,
       name: name ?? this.name,
+      nameAr: nameAr ?? this.nameAr,
       organId: organId ?? this.organId,
     );
   }
+
+  Map toJson() {
+    return {
+      'id': id,
+      'name': name,
+      'nameAr': nameAr,
+      'organId': organId,
+    };
+  }
+
+  factory SymptomModel.fromJson(Map json) {
+    return SymptomModel(
+      id: json['id'] ?? '',
+      name: json['name'] ?? '',
+      nameAr: json['nameAr'] ?? '',
+      organId: json['organId'],
+    );
+  }
+
+  @override
+  bool operator ==(Object other) {
+    if (identical(this, other)) return true;
+    return other is SymptomModel && other.id == id;
+  }
+
+  @override
+  int get hashCode => id.hashCode;
+
+  @override
+  String toString() {
+    return 'SymptomModel(id: $id, name: $name, nameAr: $nameAr, organId: $organId)';
+  }
 }
 
+/// Class to group symptoms by organ
 class OrganSymptomsGroup {
   final String organId;
   final String organName;
@@ -35,9 +72,16 @@ class OrganSymptomsGroup {
     Set? selectedSymptomIds,
   }) : selectedSymptomIds = selectedSymptomIds ?? {};
 
+  /// Get count of selected symptoms
+  int get selectedCount => selectedSymptomIds.length;
+
+  /// Check if any symptoms are selected
   bool get hasSelectedSymptoms => selectedSymptomIds.isNotEmpty;
 
-  int get selectedCount => selectedSymptomIds.length;
+  /// Get list of selected symptoms
+  List get selectedSymptoms {
+    return symptoms.where((symptom) => selectedSymptomIds.contains(symptom.id)).toList();
+  }
 
   OrganSymptomsGroup copyWith({
     String? organId,
@@ -52,4 +96,10 @@ class OrganSymptomsGroup {
       selectedSymptomIds: selectedSymptomIds ?? this.selectedSymptomIds,
     );
   }
+
+  @override
+  String toString() {
+    return 'OrganSymptomsGroup(organId: $organId, organName: $organName, symptomsCount: ${symptoms.length}, selectedCount: $selectedCount)';
+  }
 }
+
diff --git a/lib/features/symptoms_checker/symptoms_checker_repo.dart b/lib/features/symptoms_checker/symptoms_checker_repo.dart
new file mode 100644
index 0000000..5379207
--- /dev/null
+++ b/lib/features/symptoms_checker/symptoms_checker_repo.dart
@@ -0,0 +1,86 @@
+import 'dart:convert';
+import 'dart:developer';
+
+import 'package:dartz/dartz.dart';
+import 'package:hmg_patient_app_new/core/api/api_client.dart';
+import 'package:hmg_patient_app_new/core/api_consts.dart';
+import 'package:hmg_patient_app_new/core/common_models/generic_api_model.dart';
+import 'package:hmg_patient_app_new/core/exceptions/api_failure.dart';
+import 'package:hmg_patient_app_new/features/symptoms_checker/models/resp_models/body_symptom_response_model.dart';
+import 'package:hmg_patient_app_new/services/logger_service.dart';
+import 'package:http/http.dart' as http;
+
+abstract class SymptomsCheckerRepo {
+  Future>> getBodySymptomsByName({
+    required List organNames,
+  });
+}
+
+class SymptomsCheckerRepoImp implements SymptomsCheckerRepo {
+  final ApiClient apiClient;
+  final LoggerService loggerService;
+
+  SymptomsCheckerRepoImp({
+    required this.apiClient,
+    required this.loggerService,
+  });
+
+  @override
+  Future>> getBodySymptomsByName({
+    required List organNames,
+  }) async {
+    try {
+      // API expects a direct JSON array: ["mid_abdomen", "chest"]
+      // Not an object like: {"organNames": [...]}
+      // Since ApiClient.post expects Map and encodes it as object,
+      // we make direct HTTP call here to send array body
+
+      final String requestBody = jsonEncode(organNames);
+
+      loggerService.logInfo("GetBodySymptomsByName Request: $requestBody");
+      log("GetBodySymptomsByName Request URL: ${ApiConsts.getBodySymptomsByName}");
+      log("GetBodySymptomsByName Request Body: $requestBody");
+
+      // Make direct HTTP POST request with JSON array body
+      final response = await http.post(
+        Uri.parse(ApiConsts.getBodySymptomsByName),
+        headers: {'Content-Type': 'application/json', 'Accept': 'text/plain'},
+        body: requestBody,
+      );
+
+      final int statusCode = response.statusCode;
+
+      log("GetBodySymptomsByName Response Status: $statusCode");
+      loggerService.logInfo("GetBodySymptomsByName Response Status: $statusCode");
+
+      try {
+        // Parse the response
+        final responseBody = jsonDecode(response.body);
+
+        loggerService.logInfo("GetBodySymptomsByName API Success: $responseBody");
+        log("GetBodySymptomsByName Response: $responseBody");
+
+        BodySymptomResponseModel bodySymptomResponse = BodySymptomResponseModel.fromJson(responseBody);
+
+        GenericApiModel apiResponse = GenericApiModel(
+          messageStatus: 1,
+          statusCode: statusCode,
+          errorMessage: null,
+          data: bodySymptomResponse,
+        );
+
+        return Right(apiResponse);
+      } catch (e, stackTrace) {
+        loggerService.logError("Error parsing GetBodySymptomsByName response: $e");
+        loggerService.logError("StackTrace: $stackTrace");
+        log("Parse Error: $e");
+        return Left(DataParsingFailure(e.toString()));
+      }
+    } catch (e, stackTrace) {
+      loggerService.logError("Exception in getBodySymptomsByName: $e");
+      loggerService.logError("StackTrace: $stackTrace");
+      log("Exception: $e");
+      return Left(UnknownFailure(e.toString()));
+    }
+  }
+}
diff --git a/lib/features/symptoms_checker/symptoms_checker_view_model.dart b/lib/features/symptoms_checker/symptoms_checker_view_model.dart
new file mode 100644
index 0000000..16cb01e
--- /dev/null
+++ b/lib/features/symptoms_checker/symptoms_checker_view_model.dart
@@ -0,0 +1,326 @@
+import 'dart:async';
+
+import 'package:flutter/cupertino.dart';
+import 'package:hmg_patient_app_new/core/enums.dart';
+import 'package:hmg_patient_app_new/features/symptoms_checker/data/organ_mapping_data.dart';
+import 'package:hmg_patient_app_new/features/symptoms_checker/models/organ_model.dart';
+import 'package:hmg_patient_app_new/features/symptoms_checker/models/resp_models/body_symptom_response_model.dart';
+import 'package:hmg_patient_app_new/features/symptoms_checker/symptoms_checker_repo.dart';
+import 'package:hmg_patient_app_new/services/error_handler_service.dart';
+
+class SymptomsCheckerViewModel extends ChangeNotifier {
+  final SymptomsCheckerRepo symptomsCheckerRepo;
+  final ErrorHandlerService errorHandlerService;
+
+  SymptomsCheckerViewModel({
+    required this.symptomsCheckerRepo,
+    required this.errorHandlerService,
+  });
+
+  // State variables
+  bool isBodyHidden = false;
+  BodyView _currentView = BodyView.front;
+  final Set _selectedOrganIds = {};
+  bool _isBottomSheetExpanded = false;
+
+  // Tooltip state
+  String? _tooltipOrganId;
+  Timer? _tooltipTimer;
+
+  // API loading states
+  bool isBodySymptomsLoading = false;
+
+  // API data storage - using API models directly
+  BodySymptomResponseModel? bodySymptomResponse;
+
+  // Selected symptoms tracking (organId -> Set of symptom IDs)
+  final Map> _selectedSymptomsByOrgan = {};
+
+  // Getters
+
+  bool isPossibleConditionsLoading = false;
+
+  BodyView get currentView => _currentView;
+
+  Set get selectedOrganIds => _selectedOrganIds;
+
+  bool get isBottomSheetExpanded => _isBottomSheetExpanded;
+
+  String? get tooltipOrganId => _tooltipOrganId;
+
+  /// Get organs for current view
+  List get currentOrgans => OrganData.getOrgansForView(_currentView);
+
+  /// Get all selected organs from both views
+  List get selectedOrgans {
+    final allOrgans = [
+      ...OrganData.frontViewOrgans,
+      ...OrganData.backViewOrgans,
+    ];
+    return allOrgans.where((organ) => _selectedOrganIds.contains(organ.id)).toList();
+  }
+
+  /// Check if any organs are selected
+  bool get hasSelectedOrgans => _selectedOrganIds.isNotEmpty;
+
+  /// Get count of selected organs
+  int get selectedOrgansCount => _selectedOrganIds.length;
+
+  /// Get organ symptoms from API response
+  List get organSymptomsResults {
+    if (bodySymptomResponse?.dataDetails?.result == null) {
+      return [];
+    }
+    return bodySymptomResponse!.dataDetails!.result ?? [];
+  }
+
+  /// Get total selected symptoms count across all organs
+  int get totalSelectedSymptomsCount {
+    return _selectedSymptomsByOrgan.values.fold(0, (sum, symptomIds) => sum + symptomIds.length);
+  }
+
+  /// Check if at least one symptom is selected
+  bool get hasSelectedSymptoms {
+    return _selectedSymptomsByOrgan.values.any((symptomIds) => symptomIds.isNotEmpty);
+  }
+
+  // Methods
+
+  /// Toggle between front and back body view
+  void toggleView() {
+    _currentView = _currentView == BodyView.front ? BodyView.back : BodyView.front;
+    notifyListeners();
+  }
+
+  toggleIsBodyHidden() {
+    isBodyHidden = !isBodyHidden;
+    notifyListeners();
+  }
+
+  /// Toggle organ selection (add if not selected, remove if selected)
+  void toggleOrganSelection(String organId) {
+    if (_selectedOrganIds.contains(organId)) {
+      _selectedOrganIds.remove(organId);
+    } else {
+      _selectedOrganIds.add(organId);
+    }
+
+    // Show tooltip
+    _showTooltip(organId);
+
+    notifyListeners();
+  }
+
+  /// Show tooltip for an organ
+  void _showTooltip(String organId) {
+    // Cancel any existing timer
+    _tooltipTimer?.cancel();
+
+    // Set the tooltip organ
+    _tooltipOrganId = organId;
+    notifyListeners();
+
+    // Hide tooltip after 2 seconds
+    _tooltipTimer = Timer(const Duration(seconds: 1), () {
+      _tooltipOrganId = null;
+      notifyListeners();
+    });
+  }
+
+  /// Hide tooltip immediately
+  void hideTooltip() {
+    _tooltipTimer?.cancel();
+    _tooltipOrganId = null;
+    notifyListeners();
+  }
+
+  /// Remove a specific organ from selection
+  void removeOrgan(String organId) {
+    _selectedOrganIds.remove(organId);
+    notifyListeners();
+  }
+
+  /// Clear all selected organs
+  void clearAllSelections() {
+    _selectedOrganIds.clear();
+    notifyListeners();
+  }
+
+  /// Toggle bottom sheet expanded/collapsed state
+  void toggleBottomSheet() {
+    _isBottomSheetExpanded = !_isBottomSheetExpanded;
+    notifyListeners();
+  }
+
+  /// Set bottom sheet expanded state
+  void setBottomSheetExpanded(bool isExpanded) {
+    _isBottomSheetExpanded = isExpanded;
+    notifyListeners();
+  }
+
+  /// Validate if at least one organ is selected
+  bool validateSelection() {
+    return _selectedOrganIds.isNotEmpty;
+  }
+
+  /// Get selected organ IDs as a list
+  List getSelectedOrganIds() {
+    return _selectedOrganIds.toList();
+  }
+
+  /// Get selected organ names as a list
+  List getSelectedOrganNames() {
+    return selectedOrgans.map((organ) => organ.description).toList();
+  }
+
+  /// Initialize symptoms from API based on selected organs
+  Future initializeSymptomGroups({
+    Function()? onSuccess,
+    Function(String)? onError,
+  }) async {
+    if (_selectedOrganIds.isEmpty) {
+      if (onError != null) {
+        onError('No organs selected');
+      }
+      return;
+    }
+
+    // Get the 'name' field from selected organs to send to API
+    List organNames = selectedOrgans.map((organ) => organ.name).toList();
+
+    // Fetch symptoms from API
+    await getBodySymptomsByName(
+      organNames: organNames,
+      onSuccess: (response) {
+        // API response is already stored in bodySymptomResponse
+        if (onSuccess != null) {
+          onSuccess();
+        }
+      },
+      onError: (error) {
+        if (onError != null) {
+          onError(error);
+        }
+      },
+    );
+  }
+
+  /// Toggle symptom selection for a specific organ
+  void toggleSymptomSelection(String organId, String symptomId) {
+    if (!_selectedSymptomsByOrgan.containsKey(organId)) {
+      _selectedSymptomsByOrgan[organId] = {};
+    }
+
+    if (_selectedSymptomsByOrgan[organId]!.contains(symptomId)) {
+      _selectedSymptomsByOrgan[organId]!.remove(symptomId);
+    } else {
+      _selectedSymptomsByOrgan[organId]!.add(symptomId);
+    }
+    notifyListeners();
+  }
+
+  /// Check if a symptom is selected
+  bool isSymptomSelected(String organId, String symptomId) {
+    return _selectedSymptomsByOrgan[organId]?.contains(symptomId) ?? false;
+  }
+
+  /// Get all selected symptoms across all organs (using API models)
+  List getAllSelectedSymptoms() {
+    List allSymptoms = [];
+
+    if (bodySymptomResponse?.dataDetails?.result == null) {
+      return allSymptoms;
+    }
+
+    for (var organResult in bodySymptomResponse!.dataDetails!.result!) {
+      // Find matching organ ID
+      String? matchingOrganId;
+      for (var organ in selectedOrgans) {
+        if (organ.name == organResult.name) {
+          matchingOrganId = organ.id;
+          break;
+        }
+      }
+
+      if (matchingOrganId != null && _selectedSymptomsByOrgan.containsKey(matchingOrganId)) {
+        final selectedIds = _selectedSymptomsByOrgan[matchingOrganId]!;
+
+        if (organResult.bodySymptoms != null) {
+          for (var symptom in organResult.bodySymptoms!) {
+            if (symptom.id != null && selectedIds.contains(symptom.id)) {
+              allSymptoms.add(symptom);
+            }
+          }
+        }
+      }
+    }
+
+    return allSymptoms;
+  }
+
+  /// Clear all symptom selections
+  void clearAllSymptomSelections() {
+    _selectedSymptomsByOrgan.clear();
+    notifyListeners();
+  }
+
+  /// Reset the view model to initial state
+  void reset() {
+    _currentView = BodyView.front;
+    _selectedOrganIds.clear();
+    _selectedSymptomsByOrgan.clear();
+    bodySymptomResponse = null;
+    _isBottomSheetExpanded = false;
+    _tooltipTimer?.cancel();
+    _tooltipOrganId = null;
+    notifyListeners();
+  }
+
+  /// Fetch body symptoms by organ names from API
+  Future getBodySymptomsByName({
+    required List organNames,
+    Function(BodySymptomResponseModel)? onSuccess,
+    Function(String)? onError,
+  }) async {
+    isBodySymptomsLoading = true;
+    notifyListeners();
+
+    final result = await symptomsCheckerRepo.getBodySymptomsByName(
+      organNames: organNames,
+    );
+
+    result.fold(
+      // Handle failure
+      (failure) async {
+        isBodySymptomsLoading = false;
+        notifyListeners();
+        await errorHandlerService.handleError(failure: failure);
+        if (onError != null) {
+          onError(failure.toString());
+        }
+      },
+      // Handle success
+      (apiResponse) {
+        isBodySymptomsLoading = false;
+        if (apiResponse.messageStatus == 1 && apiResponse.data != null) {
+          bodySymptomResponse = apiResponse.data;
+          notifyListeners();
+          if (onSuccess != null) {
+            onSuccess(apiResponse.data!);
+          }
+        } else {
+          notifyListeners();
+          if (onError != null) {
+            onError(apiResponse.errorMessage ?? 'Failed to fetch symptoms');
+          }
+        }
+      },
+    );
+  }
+
+  @override
+  void dispose() {
+    _tooltipTimer?.cancel();
+    super.dispose();
+  }
+}
diff --git a/lib/main.dart b/lib/main.dart
index 254a2ca..9d1ec39 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -28,7 +28,7 @@ import 'package:hmg_patient_app_new/features/prescriptions/prescriptions_view_mo
 import 'package:hmg_patient_app_new/features/profile_settings/profile_settings_view_model.dart';
 import 'package:hmg_patient_app_new/features/radiology/radiology_view_model.dart';
 import 'package:hmg_patient_app_new/features/todo_section/todo_section_view_model.dart';
-import 'package:hmg_patient_app_new/presentation/symptoms_checker/symptoms_checker_view_model.dart';
+import 'package:hmg_patient_app_new/features/symptoms_checker/symptoms_checker_view_model.dart';
 import 'package:hmg_patient_app_new/routes/app_routes.dart';
 import 'package:hmg_patient_app_new/services/logger_service.dart';
 import 'package:hmg_patient_app_new/services/navigation_service.dart';
diff --git a/lib/presentation/appointments/widgets/appointment_card.dart b/lib/presentation/appointments/widgets/appointment_card.dart
index 7bc9c62..cca227a 100644
--- a/lib/presentation/appointments/widgets/appointment_card.dart
+++ b/lib/presentation/appointments/widgets/appointment_card.dart
@@ -193,7 +193,7 @@ class AppointmentCard extends StatelessWidget {
                   ).toShimmer2(isShow: isLoading),
                   AppCustomChipWidget(
                     isIconPNG: true,
-                    icon: getIt.get().getAuthenticatedUser()?.gender == 1 ? AppAssets.male_img : AppAssets.femaleImg,
+                    icon: getIt.get().getAuthenticatedUser()?.gender == 1 ? AppAssets.maleImg : AppAssets.femaleImg,
                     iconSize: 18.h,
                     labelText: isLoading ? 'Cardiology' : "Patient: ${getIt.get().getAuthenticatedUser()!.firstName!}",
                   ).toShimmer2(isShow: isLoading),
diff --git a/lib/presentation/book_appointment/waiting_appointment/waiting_appointment_payment_page.dart b/lib/presentation/book_appointment/waiting_appointment/waiting_appointment_payment_page.dart
index 8f9943c..8cfe6dd 100644
--- a/lib/presentation/book_appointment/waiting_appointment/waiting_appointment_payment_page.dart
+++ b/lib/presentation/book_appointment/waiting_appointment/waiting_appointment_payment_page.dart
@@ -152,7 +152,7 @@ class _WaitingAppointmentPaymentPageState extends State {
       if (appState.isAuthenticated) {
         habibWalletVM.initHabibWalletProvider();
         habibWalletVM.getPatientBalanceAmount();
-        immediateLiveCareViewModel.initImmediateLiveCare();
-        immediateLiveCareViewModel.getPatientLiveCareHistory();
         myAppointmentsViewModel.initAppointmentsViewModel();
         myAppointmentsViewModel.getPatientAppointments(true, false);
         myAppointmentsViewModel.getPatientMyDoctors();
         prescriptionsViewModel.initPrescriptionsViewModel();
         insuranceViewModel.initInsuranceProvider();
+        immediateLiveCareViewModel.initImmediateLiveCare();
+        immediateLiveCareViewModel.getPatientLiveCareHistory();
         emergencyServicesViewModel.checkPatientERAdvanceBalance();
       }
     });
     super.initState();
   }
 
-  @override
-  Widget build(BuildContext context) {
-    bookAppointmentsViewModel = Provider.of(context, listen: false);
-    myAppointmentsViewModel = Provider.of(context, listen: false);
-    prescriptionsViewModel = Provider.of(context, listen: false);
-    insuranceViewModel = Provider.of(context, listen: false);
-    immediateLiveCareViewModel = Provider.of(context, listen: false);
-    emergencyServicesViewModel = Provider.of(context, listen: false);
-    appState = getIt.get();
-    return PopScope(
-      canPop: false,
-      child: Scaffold(
-        backgroundColor: AppColors.bgScaffoldColor,
-        body: SingleChildScrollView(
-          padding: EdgeInsets.only(top: kToolbarHeight + 0.h, bottom: 24),
-          child: Column(
-            spacing: 16.h,
-            children: [
-              Row(
-                spacing: 8.h,
-                mainAxisAlignment: MainAxisAlignment.spaceBetween,
-                children: [
-                  appState.isAuthenticated
-                      ? WelcomeWidget(
-                          onTap: () {
-                            Navigator.of(context).push(springPageRoute(ProfileSettings()));
-                          },
-                          name: ('${appState.getAuthenticatedUser()!.firstName!} ${appState.getAuthenticatedUser()!.lastName!}'),
-                          imageUrl: appState.getAuthenticatedUser()?.gender == 1 ? AppAssets.male_img : AppAssets.femaleImg,
-                        ).expanded
-                      : CustomButton(
-                          text: LocaleKeys.loginOrRegister.tr(context: context),
-                          onPressed: () async {
-                            await authVM.onLoginPressed();
-
-                            // Navigator.pushReplacementNamed(
-                            //   // context,
-                            //   context,
-                            //   AppRoutes.zoomCallPage,
-                            //   // arguments: CallArguments(appointmentID, "111", "Patient", "40", "1", true, 1),
-                            //   arguments: CallArguments("test123", "123", "Patient", "40", "0", true, 1),
-                            //   // arguments: CallArguments("SmallDailyStandup9875", "123", "Patient", "40", "0", false, int.parse(widget.incomingCallData!.appointmentNo!)),
-                            // );
-                          },
-                          backgroundColor: AppColors.secondaryLightRedColor,
-                          borderColor: AppColors.secondaryLightRedColor,
-                          textColor: AppColors.primaryRedColor,
-                          fontSize: 14.f,
-                          fontWeight: FontWeight.w500,
-                          borderRadius: 12.r,
-                          padding: EdgeInsets.fromLTRB(10.h, 0, 10.h, 0),
-                          height: 40.h,
+  Widget buildOptionsForAuthenticatedUser() {
+    return Column(
+      children: [
+        SizedBox(height: 12.h),
+        Row(
+          mainAxisAlignment: MainAxisAlignment.spaceBetween,
+          children: [
+            "Appointments & Visits".toText16(isBold: true),
+            Row(
+              children: [
+                LocaleKeys.viewAll.tr(context: context).toText12(color: AppColors.primaryRedColor),
+                SizedBox(width: 2.h),
+                Icon(Icons.arrow_forward_ios, color: AppColors.primaryRedColor, size: 10.h),
+              ],
+            ),
+          ],
+        ).paddingSymmetrical(24.h, 0.h).onPress(() {
+          Navigator.of(context).push(CustomPageRoute(page: MyAppointmentsPage()));
+        }),
+        SizedBox(height: 16.h),
+        Consumer(
+          builder: (context, myAppointmentsVM, child) {
+            return myAppointmentsVM.isMyAppointmentsLoading
+                ? Container(
+                    decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
+                      color: AppColors.whiteColor,
+                      borderRadius: 24.r,
+                      hasShadow: true,
+                    ),
+                    child: AppointmentCard(
+                      patientAppointmentHistoryResponseModel: PatientAppointmentHistoryResponseModel(),
+                      myAppointmentsViewModel: myAppointmentsViewModel,
+                      bookAppointmentsViewModel: bookAppointmentsViewModel,
+                      isLoading: true,
+                      isFromHomePage: true,
+                    ),
+                  ).paddingSymmetrical(24.h, 0.h)
+                : myAppointmentsVM.patientAppointmentsHistoryList.isNotEmpty
+                    ? myAppointmentsVM.patientAppointmentsHistoryList.length == 1
+                        ? Container(
+                            decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
+                              color: AppColors.whiteColor,
+                              borderRadius: 24.r,
+                              hasShadow: true,
+                            ),
+                            child: AppointmentCard(
+                              patientAppointmentHistoryResponseModel: myAppointmentsVM.patientAppointmentsHistoryList.first,
+                              myAppointmentsViewModel: myAppointmentsViewModel,
+                              bookAppointmentsViewModel: bookAppointmentsViewModel,
+                              isLoading: false,
+                              isFromHomePage: true,
+                            ),
+                          ).paddingSymmetrical(24.h, 0.h)
+                        : Swiper(
+                            itemCount: myAppointmentsVM.isMyAppointmentsLoading
+                                ? 3
+                                : myAppointmentsVM.patientAppointmentsHistoryList.length < 3
+                                    ? myAppointmentsVM.patientAppointmentsHistoryList.length
+                                    : 3,
+                            layout: SwiperLayout.STACK,
+                            loop: true,
+                            itemWidth: MediaQuery.of(context).size.width - 48.h,
+                            indicatorLayout: PageIndicatorLayout.COLOR,
+                            axisDirection: AxisDirection.right,
+                            controller: _controller,
+                            itemHeight: 200.h,
+                            pagination: const SwiperPagination(
+                              alignment: Alignment.bottomCenter,
+                              margin: EdgeInsets.only(top: 210 + 8 + 24),
+                              builder: DotSwiperPaginationBuilder(color: Color(0xffD9D9D9), activeColor: AppColors.blackBgColor),
+                            ),
+                            itemBuilder: (BuildContext context, int index) {
+                              return Container(
+                                decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
+                                  color: AppColors.whiteColor,
+                                  borderRadius: 24.r,
+                                  hasShadow: true,
+                                ),
+                                child: AppointmentCard(
+                                  patientAppointmentHistoryResponseModel: myAppointmentsVM.patientAppointmentsHistoryList[index],
+                                  myAppointmentsViewModel: myAppointmentsViewModel,
+                                  bookAppointmentsViewModel: bookAppointmentsViewModel,
+                                  isLoading: false,
+                                  isFromHomePage: true,
+                                ),
+                              );
+                            },
+                          )
+                    : Container(
+                        width: double.infinity,
+                        decoration:
+                            RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24.r, hasShadow: true),
+                        child: Padding(
+                          padding: EdgeInsets.all(12.h),
+                          child: Column(
+                            children: [
+                              Utils.buildSvgWithAssets(icon: AppAssets.home_calendar_icon, width: 32.h, height: 32.h),
+                              SizedBox(height: 12.h),
+                              "You do not have any upcoming appointment. Please book an appointment".needTranslation.toText12(isCenter: true),
+                              SizedBox(height: 12.h),
+                              CustomButton(
+                                text: LocaleKeys.bookAppo.tr(context: context),
+                                onPressed: () {
+                                  Navigator.of(context).push(CustomPageRoute(page: BookAppointmentPage()));
+                                },
+                                backgroundColor: Color(0xffFEE9EA),
+                                borderColor: Color(0xffFEE9EA),
+                                textColor: Color(0xffED1C2B),
+                                fontSize: 14.f,
+                                fontWeight: FontWeight.w500,
+                                padding: EdgeInsets.fromLTRB(10.h, 0, 10.h, 0),
+                                icon: AppAssets.add_icon,
+                                iconColor: AppColors.primaryRedColor,
+                                height: 46.h,
+                              ),
+                            ],
+                          ),
                         ),
-                  Row(
-                    mainAxisSize: MainAxisSize.min,
-                    spacing: 12.h,
+                      ).paddingSymmetrical(24.h, 0.h);
+          },
+        ),
+
+        // Consumer for LiveCare pending request
+        Consumer(
+          builder: (context, immediateLiveCareVM, child) {
+            return immediateLiveCareVM.patientHasPendingLiveCareRequest
+                ? Column(
                     children: [
-                      Utils.buildSvgWithAssets(icon: AppAssets.bell, height: 18.h, width: 18.h).onPress(() {
-                        Navigator.of(context).push(
-                          CustomPageRoute(
-                            page: MedicalFilePage(),
-                            // page: LoginScreen(),
+                      SizedBox(height: 12.h),
+                      Container(
+                        decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
+                          color: AppColors.whiteColor,
+                          borderRadius: 20.r,
+                          hasShadow: true,
+                          side: BorderSide(color: AppColors.ratingColorYellow, width: 3.h),
+                        ),
+                        width: double.infinity,
+                        child: Padding(
+                          padding: EdgeInsets.all(16.h),
+                          child: Column(
+                            crossAxisAlignment: CrossAxisAlignment.start,
+                            children: [
+                              Row(
+                                mainAxisAlignment: MainAxisAlignment.spaceBetween,
+                                children: [
+                                  AppCustomChipWidget(
+                                    labelText: immediateLiveCareViewModel.patientLiveCareHistoryList[0].stringCallStatus,
+                                    backgroundColor: AppColors.warningColorYellow.withValues(alpha: 0.20),
+                                    textColor: AppColors.alertColor,
+                                  ),
+                                  Utils.buildSvgWithAssets(icon: AppAssets.waiting_icon, width: 24.h, height: 24.h),
+                                  // Lottie.asset(AppAnimations.pending_loading_animation, repeat: true, reverse: false, frameRate: FrameRate(60), width: 40.h, height: 40.h, fit: BoxFit.contain),
+                                ],
+                              ),
+                              SizedBox(height: 8.h),
+                              Row(
+                                mainAxisAlignment: MainAxisAlignment.spaceBetween,
+                                children: [
+                                  "You have a pending LiveCare request".needTranslation.toText12(isBold: true),
+                                  Utils.buildSvgWithAssets(
+                                    icon: AppAssets.forward_arrow_icon_small,
+                                    iconColor: AppColors.blackColor,
+                                    width: 20.h,
+                                    height: 15.h,
+                                    fit: BoxFit.contain,
+                                  ),
+                                ],
+                              ),
+                            ],
                           ),
-                        );
-                      }),
-                      Utils.buildSvgWithAssets(icon: AppAssets.search_icon, height: 18.h, width: 18.h).onPress(() {
-                        // Navigator.of(context).push(
-                        //   CustomPageRoute(
-                        //     page: MedicalFilePage(),
-                        //     // page: LoginScreen(),
-                        //   ),
-                        // );
-                      }),
-                      Utils.buildSvgWithAssets(icon: AppAssets.contact_icon, height: 18.h, width: 18.h).onPress(() {
-                        showCommonBottomSheetWithoutHeight(
-                          context,
-                          title: LocaleKeys.contactUs.tr(),
-                          child: ContactUs(),
-                          callBackFunc: () {},
-                          isFullScreen: false,
-                        );
+                        ),
+                      ).paddingSymmetrical(24.h, 0.h).onPress(() {
+                        Navigator.of(context).push(CustomPageRoute(page: ImmediateLiveCarePendingRequestPage()));
                       }),
+                      SizedBox(height: 12.h),
                     ],
-                  ),
-                ],
-              ).paddingSymmetrical(24.h, 0.h),
-              appState.isAuthenticated
-                  ? Column(
-                      children: [
-                        SizedBox(height: 12.h),
-                        Row(
-                          mainAxisAlignment: MainAxisAlignment.spaceBetween,
-                          children: [
-                            "Appointments & Visits".toText16(isBold: true),
-                            Row(
-                              children: [
-                                LocaleKeys.viewAll.tr(context: context).toText12(color: AppColors.primaryRedColor),
-                                SizedBox(width: 2.h),
-                                Icon(Icons.arrow_forward_ios, color: AppColors.primaryRedColor, size: 10.h),
-                              ],
-                            ),
-                          ],
-                        ).paddingSymmetrical(24.h, 0.h).onPress(() {
-                          Navigator.of(context).push(CustomPageRoute(page: MyAppointmentsPage()));
-                        }),
-                        SizedBox(height: 16.h),
-                        Consumer2(
-                          builder: (context, myAppointmentsVM, immediateLiveCareVM, child) {
-                            return myAppointmentsVM.isMyAppointmentsLoading
-                                ? Container(
-                                    decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
-                                      color: AppColors.whiteColor,
-                                      borderRadius: 24.r,
-                                      hasShadow: true,
-                                    ),
-                                    child: AppointmentCard(
-                                      patientAppointmentHistoryResponseModel: PatientAppointmentHistoryResponseModel(),
-                                      myAppointmentsViewModel: myAppointmentsViewModel,
-                                      bookAppointmentsViewModel: bookAppointmentsViewModel,
-                                      isLoading: true,
-                                      isFromHomePage: true,
-                                    ),
-                                  ).paddingSymmetrical(24.h, 0.h)
-                                : myAppointmentsVM.patientAppointmentsHistoryList.isNotEmpty
-                                    ? myAppointmentsVM.patientAppointmentsHistoryList.length == 1
-                                        ? Container(
-                                            decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
-                                              color: AppColors.whiteColor,
-                                              borderRadius: 24.r,
-                                              hasShadow: true,
-                                            ),
-                                            child: AppointmentCard(
-                                              patientAppointmentHistoryResponseModel: myAppointmentsVM.patientAppointmentsHistoryList.first,
-                                              myAppointmentsViewModel: myAppointmentsViewModel,
-                                              bookAppointmentsViewModel: bookAppointmentsViewModel,
-                                              isLoading: false,
-                                              isFromHomePage: true,
-                                            ),
-                                          ).paddingSymmetrical(24.h, 0.h)
-                                        : Swiper(
-                                            itemCount: myAppointmentsVM.isMyAppointmentsLoading
-                                                ? 3
-                                                : myAppointmentsVM.patientAppointmentsHistoryList.length < 3
-                                                    ? myAppointmentsVM.patientAppointmentsHistoryList.length
-                                                    : 3,
-                                            layout: SwiperLayout.STACK,
-                                            loop: true,
-                                            itemWidth: MediaQuery.of(context).size.width - 48.h,
-                                            indicatorLayout: PageIndicatorLayout.COLOR,
-                                            axisDirection: AxisDirection.right,
-                                            controller: _controller,
-                                            itemHeight: 255.h,
-                                            pagination: SwiperPagination(
-                                              alignment: Alignment.bottomCenter,
-                                              margin: EdgeInsets.only(top: 240.h + 8 + 24),
-                                              builder: DotSwiperPaginationBuilder(color: Color(0xffD9D9D9), activeColor: AppColors.blackBgColor),
-                                            ),
-                                            itemBuilder: (BuildContext context, int index) {
-                                              return (immediateLiveCareVM.patientHasPendingLiveCareRequest && index == 0)
-                                                  ? Column(
-                                                      children: [
-                                                        SizedBox(height: 12.h),
-                                                        Container(
-                                                          decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
-                                                            color: AppColors.whiteColor,
-                                                            borderRadius: 20.r,
-                                                            hasShadow: true,
-                                                            side: BorderSide(color: AppColors.ratingColorYellow, width: 3.h),
-                                                          ),
-                                                          child: Padding(
-                                                            padding: EdgeInsets.all(16.h),
-                                                            child: Column(
-                                                              crossAxisAlignment: CrossAxisAlignment.start,
-                                                              children: [
-                                                                "Immediate LiveCare Request".needTranslation.toText16(isBold: true),
-                                                                SizedBox(height: 10.h),
-                                                                Row(
-                                                                  mainAxisAlignment: MainAxisAlignment.spaceBetween,
-                                                                  children: [
-                                                                    Row(
-                                                                      children: [
-                                                                        AppCustomChipWidget(
-                                                                          labelText: immediateLiveCareVM.patientLiveCareHistoryList[0].stringCallStatus,
-                                                                          backgroundColor: AppColors.warningColorYellow.withValues(alpha: 0.20),
-                                                                          textColor: AppColors.alertColor,
-                                                                        ),
-                                                                        SizedBox(width: 8.w),
-                                                                        AppCustomChipWidget(
-                                                                            icon: AppAssets.appointment_calendar_icon,
-                                                                            labelText: DateUtil.formatDateToDate(
-                                                                                DateUtil.convertStringToDate(immediateLiveCareVM.patientLiveCareHistoryList[0].arrivalTime), false)),
-                                                                      ],
-                                                                    ),
-                                                                    Utils.buildSvgWithAssets(icon: AppAssets.waiting_icon, width: 24.h, height: 24.h),
-                                                                    // Lottie.asset(AppAnimations.pending_loading_animation, repeat: true, reverse: false, frameRate: FrameRate(60), width: 80.h, height: 80.h, fit: BoxFit.cover),
-                                                                  ],
-                                                                ),
-                                                                SizedBox(height: 10.h),
-                                                                "Hala ${appState.getAuthenticatedUser()!.firstName}!!!".needTranslation.toText16(isBold: true),
-                                                                SizedBox(height: 8.h),
-                                                                "Your turn is after ${immediateLiveCareVM.patientLiveCareHistoryList[0].patCount} patients.".toText14(isBold: true),
-                                                                SizedBox(height: 8.h),
-                                                                Column(
-                                                                  crossAxisAlignment: CrossAxisAlignment.start,
-                                                                  children: [
-                                                                    "Expected waiting time: ".toText12(isBold: true),
-                                                                    SizedBox(height: 8.h),
-                                                                    ValueListenableBuilder(
-                                                                      valueListenable: immediateLiveCareVM.durationNotifier,
-                                                                      builder: (context, duration, child) {
-                                                                        return Column(
-                                                                          mainAxisAlignment: MainAxisAlignment.center,
-                                                                          children: [
-                                                                            buildTime(duration),
-                                                                          ],
-                                                                        );
-                                                                      },
-                                                                    ),
-                                                                    SizedBox(height: 12.h),
-                                                                  ],
-                                                                ),
-                                                                // CustomButton(
-                                                                //   text: "View Details".needTranslation,
-                                                                //   onPressed: () async {
-                                                                //     Navigator.of(context).push(CustomPageRoute(page: ImmediateLiveCarePendingRequestPage()));
-                                                                //   },
-                                                                //   backgroundColor: Color(0xffFEE9EA),
-                                                                //   borderColor: Color(0xffFEE9EA),
-                                                                //   textColor: Color(0xffED1C2B),
-                                                                //   fontSize: 14.f,
-                                                                //   fontWeight: FontWeight.w500,
-                                                                //   borderRadius: 12.r,
-                                                                //   padding: EdgeInsets.fromLTRB(10.h, 0, 10.h, 0),
-                                                                //   height: 40.h,
-                                                                // ),
-                                                              ],
-                                                            ),
-                                                          ),
-                                                        ).paddingSymmetrical(0.h, 0.h).onPress(() {
-                                                          Navigator.of(context).push(CustomPageRoute(page: ImmediateLiveCarePendingRequestPage()));
-                                                        }),
-                                                        SizedBox(height: 12.h),
-                                                      ],
-                                                    )
-                                                  : Container(
-                                                      decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
-                                                        color: AppColors.whiteColor,
-                                                        borderRadius: 24.r,
-                                                        hasShadow: true,
-                                                      ),
-                                                      child: AppointmentCard(
-                                                        patientAppointmentHistoryResponseModel:
-                                                            myAppointmentsVM.patientAppointmentsHistoryList[immediateLiveCareViewModel.patientHasPendingLiveCareRequest ? --index : index],
-                                                        myAppointmentsViewModel: myAppointmentsViewModel,
-                                                        bookAppointmentsViewModel: bookAppointmentsViewModel,
-                                                        isLoading: false,
-                                                        isFromHomePage: true,
-                                                      ),
-                                                    );
-                                            },
-                                          )
-                                    : Container(
-                                        width: double.infinity,
-                                        decoration: RoundedRectangleBorder()
-                                            .toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24.r, hasShadow: true),
-                                        child: Padding(
-                                          padding: EdgeInsets.all(12.h),
-                                          child: Column(
-                                            children: [
-                                              Utils.buildSvgWithAssets(icon: AppAssets.home_calendar_icon, width: 32.h, height: 32.h),
-                                              SizedBox(height: 12.h),
-                                              "You do not have any upcoming appointment. Please book an appointment"
-                                                  .needTranslation
-                                                  .toText12(isCenter: true),
-                                              SizedBox(height: 12.h),
-                                              CustomButton(
-                                                text: LocaleKeys.bookAppo.tr(context: context),
-                                                onPressed: () {
-                                                  Navigator.of(context).push(CustomPageRoute(page: BookAppointmentPage()));
-                                                },
-                                                backgroundColor: Color(0xffFEE9EA),
-                                                borderColor: Color(0xffFEE9EA),
-                                                textColor: Color(0xffED1C2B),
-                                                fontSize: 14.f,
-                                                fontWeight: FontWeight.w500,
-                                                padding: EdgeInsets.fromLTRB(10.h, 0, 10.h, 0),
-                                                icon: AppAssets.add_icon,
-                                                iconColor: AppColors.primaryRedColor,
-                                                height: 46.h,
-                                              ),
-                                            ],
-                                          ),
-                                        ),
-                                      ).paddingSymmetrical(24.h, 0.h);
-                          },
-                        ),
+                  )
+                : SizedBox(height: 12.h);
+          },
+        ),
 
-                        // Consumer for ER Online Check-In pending request
-                        Consumer(
-                          builder: (context, emergencyServicesVM, child) {
-                            return emergencyServicesVM.patientHasAdvanceERBalance
-                                ? Column(
-                                    children: [
-                                      SizedBox(height: 4.h),
-                                      Container(
-                                        decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
-                                          color: AppColors.whiteColor,
-                                          borderRadius: 20.r,
-                                          hasShadow: true,
-                                          side: BorderSide(color: AppColors.primaryRedColor, width: 3.h),
-                                        ),
-                                        width: double.infinity,
-                                        child: Padding(
-                                          padding: EdgeInsets.all(16.h),
-                                          child: Column(
-                                            crossAxisAlignment: CrossAxisAlignment.start,
-                                            children: [
-                                              Row(
-                                                mainAxisAlignment: MainAxisAlignment.spaceBetween,
-                                                children: [
-                                                  AppCustomChipWidget(
-                                                    labelText: "ER Online Check-In Request",
-                                                    backgroundColor: AppColors.primaryRedColor.withValues(alpha: 0.10),
-                                                    textColor: AppColors.primaryRedColor,
-                                                  ),
-                                                  Utils.buildSvgWithAssets(icon: AppAssets.appointment_checkin_icon, width: 24.h, height: 24.h, iconColor: AppColors.primaryRedColor),
-                                                ],
-                                              ),
-                                              SizedBox(height: 8.h),
-                                              Row(
-                                                mainAxisAlignment: MainAxisAlignment.spaceBetween,
-                                                children: [
-                                                  "You have ER Online Check-In Request".needTranslation.toText12(isBold: true),
-                                                  Utils.buildSvgWithAssets(
-                                                    icon: AppAssets.forward_arrow_icon_small,
-                                                    iconColor: AppColors.blackColor,
-                                                    width: 20.h,
-                                                    height: 15.h,
-                                                    fit: BoxFit.contain,
-                                                  ),
-                                                ],
-                                              ),
-                                            ],
-                                          ),
-                                        ),
-                                      ).paddingSymmetrical(24.h, 0.h).onPress(() {
-                                        Navigator.of(context).push(CustomPageRoute(page: ErOnlineCheckinHome()));
-                                        // context.read().navigateToEROnlineCheckIn();
-                                      }),
-                                      SizedBox(height: 12.h),
-                                    ],
-                                  )
-                                : SizedBox(height: 12.h);
-                          },
+        // Consumer for ER Online Check-In pending request
+        Consumer(
+          builder: (context, emergencyServicesVM, child) {
+            return emergencyServicesVM.patientHasAdvanceERBalance
+                ? Column(
+                    children: [
+                      SizedBox(height: 4.h),
+                      Container(
+                        decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
+                          color: AppColors.whiteColor,
+                          borderRadius: 20.r,
+                          hasShadow: true,
+                          side: BorderSide(color: AppColors.primaryRedColor, width: 3.h),
                         ),
+                        width: double.infinity,
+                        child: Padding(
+                          padding: EdgeInsets.all(16.h),
+                          child: Column(
+                            crossAxisAlignment: CrossAxisAlignment.start,
+                            children: [
+                              Row(
+                                mainAxisAlignment: MainAxisAlignment.spaceBetween,
+                                children: [
+                                  AppCustomChipWidget(
+                                    labelText: "ER Online Check-In Request",
+                                    backgroundColor: AppColors.primaryRedColor.withValues(alpha: 0.10),
+                                    textColor: AppColors.primaryRedColor,
+                                  ),
+                                  Utils.buildSvgWithAssets(
+                                      icon: AppAssets.appointment_checkin_icon, width: 24.h, height: 24.h, iconColor: AppColors.primaryRedColor),
+                                ],
+                              ),
+                              SizedBox(height: 8.h),
+                              Row(
+                                mainAxisAlignment: MainAxisAlignment.spaceBetween,
+                                children: [
+                                  "You have ER Online Check-In Request".needTranslation.toText12(isBold: true),
+                                  Utils.buildSvgWithAssets(
+                                    icon: AppAssets.forward_arrow_icon_small,
+                                    iconColor: AppColors.blackColor,
+                                    width: 20.h,
+                                    height: 15.h,
+                                    fit: BoxFit.contain,
+                                  ),
+                                ],
+                              ),
+                            ],
+                          ),
+                        ),
+                      ).paddingSymmetrical(24.h, 0.h).onPress(() {
+                        Navigator.of(context).push(CustomPageRoute(page: ErOnlineCheckinHome()));
+                        // context.read().navigateToEROnlineCheckIn();
+                      }),
+                      SizedBox(height: 12.h),
+                    ],
+                  )
+                : SizedBox(height: 12.h);
+          },
+        ),
 
         Row(
           mainAxisAlignment: MainAxisAlignment.spaceBetween,
@@ -644,7 +525,7 @@ class _LandingPageState extends State {
                     Navigator.of(context).push(CustomPageRoute(page: ServicesPage()));
                   }),
                 ],
-              ).paddingSymmetrical(24.w, 0.h),
+              ).paddingSymmetrical(24.h, 0.h),
               SizedBox(
                 height: 340.h,
                 child: ListView.separated(
@@ -691,13 +572,10 @@ class _LandingPageState extends State {
             isDone: isDone,
             onPressed: () {
               // sharedPref.setBool(HAS_ENABLED_QUICK_LOGIN, true);
-              authVM.loginWithFingerPrintFace(() async {
+              authVM.loginWithFingerPrintFace(() {
                 isDone = true;
                 cacheService.saveBool(key: CacheConst.quickLoginEnabled, value: true);
                 setState(() {});
-                await Future.delayed(Duration(milliseconds: 2000)).then((value) {
-                  if (mounted) Navigator.pop(context);
-                });
               });
             },
           );
diff --git a/lib/presentation/symptoms_checker/organ_selector_screen.dart b/lib/presentation/symptoms_checker/organ_selector_screen.dart
index e47032c..65d9a00 100644
--- a/lib/presentation/symptoms_checker/organ_selector_screen.dart
+++ b/lib/presentation/symptoms_checker/organ_selector_screen.dart
@@ -8,7 +8,7 @@ import 'package:hmg_patient_app_new/core/utils/utils.dart';
 import 'package:hmg_patient_app_new/extensions/route_extensions.dart';
 import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
 import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
-import 'package:hmg_patient_app_new/presentation/symptoms_checker/symptoms_checker_view_model.dart';
+import 'package:hmg_patient_app_new/features/symptoms_checker/symptoms_checker_view_model.dart';
 import 'package:hmg_patient_app_new/presentation/symptoms_checker/widgets/interactive_body_widget.dart';
 import 'package:hmg_patient_app_new/theme/colors.dart';
 import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart';
@@ -267,7 +267,7 @@ class _OrganSelectorPageState extends State {
           runSpacing: 8.h,
           children: viewModel.selectedOrgans.map((organ) {
             return AppCustomChipWidget(
-              labelText: organ.name,
+              labelText: organ.description,
               backgroundColor: AppColors.secondaryLightRedColor,
               textColor: AppColors.primaryRedColor,
               deleteIcon: AppAssets.cancel,
diff --git a/lib/presentation/symptoms_checker/possible_conditions_screen.dart b/lib/presentation/symptoms_checker/possible_conditions_screen.dart
index 0587c32..2c99515 100644
--- a/lib/presentation/symptoms_checker/possible_conditions_screen.dart
+++ b/lib/presentation/symptoms_checker/possible_conditions_screen.dart
@@ -9,7 +9,7 @@ import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
 import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
 import 'package:hmg_patient_app_new/features/symptoms_checker/models/conditions_model.dart';
 import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
-import 'package:hmg_patient_app_new/presentation/symptoms_checker/symptoms_checker_view_model.dart';
+import 'package:hmg_patient_app_new/features/symptoms_checker/symptoms_checker_view_model.dart';
 import 'package:hmg_patient_app_new/presentation/symptoms_checker/widgets/condition_card.dart';
 import 'package:hmg_patient_app_new/services/navigation_service.dart';
 import 'package:hmg_patient_app_new/theme/colors.dart';
diff --git a/lib/presentation/symptoms_checker/risk_factors_screen.dart b/lib/presentation/symptoms_checker/risk_factors_screen.dart
new file mode 100644
index 0000000..211aabc
--- /dev/null
+++ b/lib/presentation/symptoms_checker/risk_factors_screen.dart
@@ -0,0 +1,291 @@
+import 'package:easy_localization/easy_localization.dart';
+import 'package:flutter/material.dart';
+import 'package:hmg_patient_app_new/core/app_export.dart';
+import 'package:hmg_patient_app_new/core/utils/utils.dart';
+import 'package:hmg_patient_app_new/extensions/route_extensions.dart';
+import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
+import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
+import 'package:hmg_patient_app_new/features/symptoms_checker/symptoms_checker_view_model.dart';
+import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
+import 'package:hmg_patient_app_new/theme/colors.dart';
+import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart';
+import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart';
+import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart';
+import 'package:provider/provider.dart';
+
+class RiskFactorsScreen extends StatefulWidget {
+  const RiskFactorsScreen({super.key});
+
+  @override
+  State createState() => _RiskFactorsScreenState();
+}
+
+class _RiskFactorsScreenState extends State {
+  @override
+  void initState() {
+    super.initState();
+    // Initialize symptom groups based on selected organs
+    WidgetsBinding.instance.addPostFrameCallback((_) {
+      final viewModel = context.read();
+      viewModel.initializeSymptomGroups();
+    });
+  }
+
+  void _onOptionSelected(int optionIndex) {}
+
+  void _onNextPressed(SymptomsCheckerViewModel viewModel) {
+    if (viewModel.hasSelectedSymptoms) {
+      // Navigate to triage screen
+      context.navigateWithName(AppRoutes.suggestionsScreen);
+    } else {
+      ScaffoldMessenger.of(context).showSnackBar(
+        SnackBar(
+          content: Text('Please select at least one option before proceeding'.needTranslation),
+          backgroundColor: AppColors.errorColor,
+        ),
+      );
+    }
+  }
+
+  void _onPreviousPressed() {
+    context.pop();
+  }
+
+  _buildConfirmationBottomSheet({required BuildContext context, required VoidCallback onConfirm}) {
+    return showCommonBottomSheetWithoutHeight(
+      title: LocaleKeys.notice.tr(context: context),
+      context,
+      child: Utils.getWarningWidget(
+        loadingText: "Are you sure you want to restart the organ selection?".needTranslation,
+        isShowActionButtons: true,
+        onCancelTap: () => Navigator.pop(context),
+        onConfirmTap: () => onConfirm(),
+      ),
+      callBackFunc: () {},
+      isFullScreen: false,
+      isCloseButtonVisible: true,
+    );
+  }
+
+  Widget _buildOptionItem(int index, bool selected, String optionText) {
+    return GestureDetector(
+      onTap: () => _onOptionSelected(index),
+      child: Container(
+        margin: EdgeInsets.only(bottom: 12.h),
+        child: Row(
+          crossAxisAlignment: CrossAxisAlignment.start,
+          children: [
+            AnimatedContainer(
+              duration: const Duration(milliseconds: 300),
+              curve: Curves.easeInOut,
+              width: 24.w,
+              height: 24.w,
+              decoration: BoxDecoration(
+                color: selected ? AppColors.primaryRedColor : Colors.transparent,
+                borderRadius: BorderRadius.circular(5.r),
+                border: Border.all(color: selected ? AppColors.primaryRedColor : AppColors.borderGrayColor, width: 1.w),
+              ),
+              child: selected ? Icon(Icons.check, size: 16.f, color: AppColors.whiteColor) : null,
+            ),
+            SizedBox(width: 12.w),
+            Expanded(
+              child: Text(
+                optionText,
+                style: TextStyle(fontSize: 14.f, color: AppColors.textColor, fontWeight: FontWeight.w500),
+              ),
+            ),
+          ],
+        ),
+      ),
+    );
+  }
+
+  Widget buildFactorsList() {
+    return AnimatedSwitcher(
+      duration: const Duration(milliseconds: 400),
+      transitionBuilder: (Widget child, Animation animation) {
+        final offsetAnimation = Tween(
+          begin: const Offset(1.0, 0.0),
+          end: Offset.zero,
+        ).animate(CurvedAnimation(
+          parent: animation,
+          curve: Curves.easeInOut,
+        ));
+
+        return SlideTransition(
+          position: offsetAnimation,
+          child: FadeTransition(
+            opacity: animation,
+            child: child,
+          ),
+        );
+      },
+      child: Container(
+        width: double.infinity,
+        margin: EdgeInsets.symmetric(horizontal: 24.w),
+        decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24.r),
+        padding: EdgeInsets.symmetric(vertical: 24.h, horizontal: 20.w),
+        child: Column(
+          crossAxisAlignment: CrossAxisAlignment.start,
+          children: [
+            ...List.generate(4, (index) {
+              return _buildOptionItem(index, false, "currentQuestion.options[index].text");
+            }),
+          ],
+        ),
+      ),
+    );
+  }
+
+  @override
+  Widget build(BuildContext context) {
+    return Scaffold(
+      backgroundColor: AppColors.bgScaffoldColor,
+      body: Consumer(
+        builder: (context, viewModel, _) {
+          return Column(
+            children: [
+              Expanded(
+                child: CollapsingListView(
+                  title: "Risks".needTranslation,
+                  onLeadingTapped: () => _buildConfirmationBottomSheet(
+                      context: context,
+                      onConfirm: () => {
+                            context.pop(),
+                            context.pop(),
+                          }),
+                  child: _buildEmptyState(),
+                  // child: viewModel.organSymptomsGroups.isEmpty
+                  //     ? _buildEmptyState()
+                  //     : Column(
+                  //         crossAxisAlignment: CrossAxisAlignment.start,
+                  //         children: [
+                  //           SizedBox(height: 16.h),
+                  //           ...viewModel.organSymptomsGroups.map((group) {
+                  //             return Padding(
+                  //               padding: EdgeInsets.only(bottom: 16.h),
+                  //               child: Container(
+                  //                 width: double.infinity,
+                  //                 margin: EdgeInsets.symmetric(horizontal: 24.w),
+                  //                 decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24.r),
+                  //                 padding: EdgeInsets.symmetric(vertical: 24.h, horizontal: 16.w),
+                  //                 child: Column(
+                  //                   crossAxisAlignment: CrossAxisAlignment.start,
+                  //                   children: [
+                  //                     Row(
+                  //                       mainAxisAlignment: MainAxisAlignment.spaceBetween,
+                  //                       children: [
+                  //                         Expanded(
+                  //                           child: Text(
+                  //                             'Possible symptoms related to "${group.organName}"',
+                  //                             style: TextStyle(fontSize: 18.f, fontWeight: FontWeight.w600, color: AppColors.textColor),
+                  //                           ),
+                  //                         ),
+                  //                       ],
+                  //                     ),
+                  //                     SizedBox(height: 24.h),
+                  //                     Wrap(
+                  //                       runSpacing: 12.h,
+                  //                       spacing: 8.w,
+                  //                       children: group.symptoms.map((symptom) {
+                  //                         bool isSelected = viewModel.isSymptomSelected(group.organId, symptom.id);
+                  //                         return GestureDetector(
+                  //                           onTap: () => viewModel.toggleSymptomSelection(group.organId, symptom.id),
+                  //                           child: CustomSelectableChip(
+                  //                             label: symptom.name,
+                  //                             selected: isSelected,
+                  //                             activeColor: AppColors.primaryRedBorderColor,
+                  //                             activeTextColor: AppColors.primaryRedBorderColor,
+                  //                             inactiveBorderColor: AppColors.bottomNAVBorder,
+                  //                             inactiveTextColor: AppColors.textColor,
+                  //                           ),
+                  //                         );
+                  //                       }).toList(),
+                  //                     ),
+                  //                   ],
+                  //                 ),
+                  //               ),
+                  //             );
+                  //           }),
+                  //         ],
+                  //       ),
+                ),
+              ),
+              _buildStickyBottomCard(context, viewModel),
+            ],
+          );
+        },
+      ),
+    );
+  }
+
+  Widget _buildEmptyState() {
+    return Center(
+      child: Padding(
+        padding: EdgeInsets.all(24.h),
+        child: Column(
+          mainAxisAlignment: MainAxisAlignment.center,
+          children: [
+            Icon(Icons.info_outline, size: 64.h, color: AppColors.greyTextColor),
+            SizedBox(height: 16.h),
+            Text(
+              'No organs selected'.needTranslation,
+              style: TextStyle(
+                fontSize: 18.f,
+                fontWeight: FontWeight.w600,
+                color: AppColors.textColor,
+              ),
+            ),
+            SizedBox(height: 8.h),
+            Text(
+              'Please go back and select organs first'.needTranslation,
+              textAlign: TextAlign.center,
+              style: TextStyle(
+                fontSize: 14.f,
+                color: AppColors.greyTextColor,
+              ),
+            ),
+          ],
+        ),
+      ),
+    );
+  }
+
+  Widget _buildStickyBottomCard(BuildContext context, SymptomsCheckerViewModel viewModel) {
+    return Container(
+      decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24.r),
+      child: Column(
+        mainAxisSize: MainAxisSize.min,
+        children: [
+          SizedBox(height: 16.h),
+          Row(
+            children: [
+              Expanded(
+                child: CustomButton(
+                  text: "Previous".needTranslation,
+                  onPressed: _onPreviousPressed,
+                  backgroundColor: AppColors.primaryRedColor.withValues(alpha: 0.11),
+                  borderColor: Colors.transparent,
+                  textColor: AppColors.primaryRedColor,
+                  fontSize: 16.f,
+                ),
+              ),
+              SizedBox(width: 12.w),
+              Expanded(
+                child: CustomButton(
+                  text: "Next".needTranslation,
+                  onPressed: () => _onNextPressed(viewModel),
+                  backgroundColor: AppColors.primaryRedColor,
+                  borderColor: AppColors.primaryRedColor,
+                  textColor: AppColors.whiteColor,
+                  fontSize: 16.f,
+                ),
+              ),
+            ],
+          ),
+          SizedBox(height: 24.h),
+        ],
+      ).paddingSymmetrical(24.w, 0),
+    );
+  }
+}
diff --git a/lib/presentation/symptoms_checker/suggestions_screen.dart b/lib/presentation/symptoms_checker/suggestions_screen.dart
new file mode 100644
index 0000000..f9d922a
--- /dev/null
+++ b/lib/presentation/symptoms_checker/suggestions_screen.dart
@@ -0,0 +1,292 @@
+import 'package:easy_localization/easy_localization.dart';
+import 'package:flutter/material.dart';
+import 'package:hmg_patient_app_new/core/app_export.dart';
+import 'package:hmg_patient_app_new/core/utils/utils.dart';
+import 'package:hmg_patient_app_new/extensions/route_extensions.dart';
+import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
+import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
+import 'package:hmg_patient_app_new/features/symptoms_checker/symptoms_checker_view_model.dart';
+import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
+import 'package:hmg_patient_app_new/theme/colors.dart';
+import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart';
+import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart';
+import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart';
+import 'package:provider/provider.dart';
+
+class SuggestionsScreen extends StatefulWidget {
+  const SuggestionsScreen({super.key});
+
+  @override
+  State createState() => _SuggestionsScreenState();
+}
+
+class _SuggestionsScreenState extends State {
+  @override
+  void initState() {
+    super.initState();
+    // Initialize symptom groups based on selected organs
+    WidgetsBinding.instance.addPostFrameCallback((_) {
+      final viewModel = context.read();
+      viewModel.initializeSymptomGroups();
+    });
+  }
+
+  void _onOptionSelected(int optionIndex) {}
+
+  void _onNextPressed(SymptomsCheckerViewModel viewModel) {
+    if (viewModel.hasSelectedSymptoms) {
+      // Navigate to triage screen
+      context.navigateWithName(AppRoutes.triageScreen);
+    } else {
+      ScaffoldMessenger.of(context).showSnackBar(
+        SnackBar(
+          content: Text('Please select at least one option before proceeding'.needTranslation),
+          backgroundColor: AppColors.errorColor,
+        ),
+      );
+    }
+  }
+
+  void _onPreviousPressed() {
+    context.pop();
+  }
+
+  _buildConfirmationBottomSheet({required BuildContext context, required VoidCallback onConfirm}) {
+    return showCommonBottomSheetWithoutHeight(
+      title: LocaleKeys.notice.tr(context: context),
+      context,
+      child: Utils.getWarningWidget(
+        loadingText: "Are you sure you want to restart the organ selection?".needTranslation,
+        isShowActionButtons: true,
+        onCancelTap: () => Navigator.pop(context),
+        onConfirmTap: () => onConfirm(),
+      ),
+      callBackFunc: () {},
+      isFullScreen: false,
+      isCloseButtonVisible: true,
+    );
+  }
+
+  Widget _buildOptionItem(int index, bool selected, String optionText) {
+    return GestureDetector(
+      onTap: () => _onOptionSelected(index),
+      child: Container(
+        margin: EdgeInsets.only(bottom: 12.h),
+        child: Row(
+          crossAxisAlignment: CrossAxisAlignment.start,
+          children: [
+            AnimatedContainer(
+              duration: const Duration(milliseconds: 300),
+              curve: Curves.easeInOut,
+              width: 24.w,
+              height: 24.w,
+              decoration: BoxDecoration(
+                color: selected ? AppColors.primaryRedColor : Colors.transparent,
+                borderRadius: BorderRadius.circular(5.r),
+                border: Border.all(color: selected ? AppColors.primaryRedColor : AppColors.borderGrayColor, width: 1.w),
+              ),
+              child: selected ? Icon(Icons.check, size: 16.f, color: AppColors.whiteColor) : null,
+            ),
+            SizedBox(width: 12.w),
+            Expanded(
+              child: Text(
+                optionText,
+                style: TextStyle(fontSize: 14.f, color: AppColors.textColor, fontWeight: FontWeight.w500),
+              ),
+            ),
+          ],
+        ),
+      ),
+    );
+  }
+
+  Widget buildFactorsList() {
+    return AnimatedSwitcher(
+      duration: const Duration(milliseconds: 400),
+      transitionBuilder: (Widget child, Animation animation) {
+        final offsetAnimation = Tween(
+          begin: const Offset(1.0, 0.0),
+          end: Offset.zero,
+        ).animate(CurvedAnimation(
+          parent: animation,
+          curve: Curves.easeInOut,
+        ));
+
+        return SlideTransition(
+          position: offsetAnimation,
+          child: FadeTransition(
+            opacity: animation,
+            child: child,
+          ),
+        );
+      },
+      child: Container(
+        width: double.infinity,
+        margin: EdgeInsets.symmetric(horizontal: 24.w),
+        decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24.r),
+        padding: EdgeInsets.symmetric(vertical: 24.h, horizontal: 20.w),
+        child: Column(
+          crossAxisAlignment: CrossAxisAlignment.start,
+          children: [
+            ...List.generate(4, (index) {
+              return _buildOptionItem(index, false, "currentQuestion.options[index].text");
+            }),
+          ],
+        ),
+      ),
+    );
+  }
+
+  @override
+  Widget build(BuildContext context) {
+    return Scaffold(
+      backgroundColor: AppColors.bgScaffoldColor,
+      body: Consumer(
+        builder: (context, viewModel, _) {
+          return Column(
+            children: [
+              Expanded(
+                child: CollapsingListView(
+                  title: "Suggestions".needTranslation,
+                  onLeadingTapped: () => _buildConfirmationBottomSheet(
+                      context: context,
+                      onConfirm: () => {
+                            context.pop(),
+                            context.pop(),
+                          }),
+                  child: _buildEmptyState(),
+
+                  // child: viewModel.organSymptomsGroups.isEmpty
+                  //     ? _buildEmptyState()
+                  //     : Column(
+                  //         crossAxisAlignment: CrossAxisAlignment.start,
+                  //         children: [
+                  //           SizedBox(height: 16.h),
+                  //           ...viewModel.organSymptomsGroups.map((group) {
+                  //             return Padding(
+                  //               padding: EdgeInsets.only(bottom: 16.h),
+                  //               child: Container(
+                  //                 width: double.infinity,
+                  //                 margin: EdgeInsets.symmetric(horizontal: 24.w),
+                  //                 decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24.r),
+                  //                 padding: EdgeInsets.symmetric(vertical: 24.h, horizontal: 16.w),
+                  //                 child: Column(
+                  //                   crossAxisAlignment: CrossAxisAlignment.start,
+                  //                   children: [
+                  //                     Row(
+                  //                       mainAxisAlignment: MainAxisAlignment.spaceBetween,
+                  //                       children: [
+                  //                         Expanded(
+                  //                           child: Text(
+                  //                             'Possible symptoms related to "${group.organName}"',
+                  //                             style: TextStyle(fontSize: 18.f, fontWeight: FontWeight.w600, color: AppColors.textColor),
+                  //                           ),
+                  //                         ),
+                  //                       ],
+                  //                     ),
+                  //                     SizedBox(height: 24.h),
+                  //                     Wrap(
+                  //                       runSpacing: 12.h,
+                  //                       spacing: 8.w,
+                  //                       children: group.symptoms.map((symptom) {
+                  //                         bool isSelected = viewModel.isSymptomSelected(group.organId, symptom.id);
+                  //                         return GestureDetector(
+                  //                           onTap: () => viewModel.toggleSymptomSelection(group.organId, symptom.id),
+                  //                           child: CustomSelectableChip(
+                  //                             label: symptom.name,
+                  //                             selected: isSelected,
+                  //                             activeColor: AppColors.primaryRedBorderColor,
+                  //                             activeTextColor: AppColors.primaryRedBorderColor,
+                  //                             inactiveBorderColor: AppColors.bottomNAVBorder,
+                  //                             inactiveTextColor: AppColors.textColor,
+                  //                           ),
+                  //                         );
+                  //                       }).toList(),
+                  //                     ),
+                  //                   ],
+                  //                 ),
+                  //               ),
+                  //             );
+                  //           }),
+                  //         ],
+                  //       ),
+                ),
+              ),
+              _buildStickyBottomCard(context, viewModel),
+            ],
+          );
+        },
+      ),
+    );
+  }
+
+  Widget _buildEmptyState() {
+    return Center(
+      child: Padding(
+        padding: EdgeInsets.all(24.h),
+        child: Column(
+          mainAxisAlignment: MainAxisAlignment.center,
+          children: [
+            Icon(Icons.info_outline, size: 64.h, color: AppColors.greyTextColor),
+            SizedBox(height: 16.h),
+            Text(
+              'No organs selected'.needTranslation,
+              style: TextStyle(
+                fontSize: 18.f,
+                fontWeight: FontWeight.w600,
+                color: AppColors.textColor,
+              ),
+            ),
+            SizedBox(height: 8.h),
+            Text(
+              'Please go back and select organs first'.needTranslation,
+              textAlign: TextAlign.center,
+              style: TextStyle(
+                fontSize: 14.f,
+                color: AppColors.greyTextColor,
+              ),
+            ),
+          ],
+        ),
+      ),
+    );
+  }
+
+  Widget _buildStickyBottomCard(BuildContext context, SymptomsCheckerViewModel viewModel) {
+    return Container(
+      decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24.r),
+      child: Column(
+        mainAxisSize: MainAxisSize.min,
+        children: [
+          SizedBox(height: 16.h),
+          Row(
+            children: [
+              Expanded(
+                child: CustomButton(
+                  text: "Previous".needTranslation,
+                  onPressed: _onPreviousPressed,
+                  backgroundColor: AppColors.primaryRedColor.withValues(alpha: 0.11),
+                  borderColor: Colors.transparent,
+                  textColor: AppColors.primaryRedColor,
+                  fontSize: 16.f,
+                ),
+              ),
+              SizedBox(width: 12.w),
+              Expanded(
+                child: CustomButton(
+                  text: "Next".needTranslation,
+                  onPressed: () => _onNextPressed(viewModel),
+                  backgroundColor: AppColors.primaryRedColor,
+                  borderColor: AppColors.primaryRedColor,
+                  textColor: AppColors.whiteColor,
+                  fontSize: 16.f,
+                ),
+              ),
+            ],
+          ),
+          SizedBox(height: 24.h),
+        ],
+      ).paddingSymmetrical(24.w, 0),
+    );
+  }
+}
diff --git a/lib/presentation/symptoms_checker/symptoms_checker_view_model.dart b/lib/presentation/symptoms_checker/symptoms_checker_view_model.dart
deleted file mode 100644
index 9d42dc7..0000000
--- a/lib/presentation/symptoms_checker/symptoms_checker_view_model.dart
+++ /dev/null
@@ -1,240 +0,0 @@
-import 'dart:async';
-
-import 'package:flutter/cupertino.dart';
-import 'package:hmg_patient_app_new/core/enums.dart';
-import 'package:hmg_patient_app_new/features/symptoms_checker/data/symptoms_mapping_data.dart';
-import 'package:hmg_patient_app_new/features/symptoms_checker/models/organ_model.dart';
-import 'package:hmg_patient_app_new/features/symptoms_checker/models/symptom_model.dart';
-import 'package:hmg_patient_app_new/features/symptoms_checker/organ_mapping_data.dart';
-
-class SymptomsCheckerViewModel extends ChangeNotifier {
-  // State variables
-  bool isBodyHidden = false;
-  BodyView _currentView = BodyView.front;
-  final Set _selectedOrganIds = {};
-  bool _isBottomSheetExpanded = false;
-
-  // Symptom selection state
-  final Map _organSymptomsGroups = {};
-
-  // Tooltip state
-  String? _tooltipOrganId;
-  Timer? _tooltipTimer;
-
-  // Getters
-
-  bool isPossibleConditionsLoading = false;
-
-  BodyView get currentView => _currentView;
-
-  Set get selectedOrganIds => _selectedOrganIds;
-
-  bool get isBottomSheetExpanded => _isBottomSheetExpanded;
-
-  String? get tooltipOrganId => _tooltipOrganId;
-
-  /// Get organs for current view
-  List get currentOrgans => OrganData.getOrgansForView(_currentView);
-
-  /// Get all selected organs from both views
-  List get selectedOrgans {
-    final allOrgans = [
-      ...OrganData.frontViewOrgans,
-      ...OrganData.backViewOrgans,
-    ];
-    return allOrgans.where((organ) => _selectedOrganIds.contains(organ.id)).toList();
-  }
-
-  /// Check if any organs are selected
-  bool get hasSelectedOrgans => _selectedOrganIds.isNotEmpty;
-
-  /// Get count of selected organs
-  int get selectedOrgansCount => _selectedOrganIds.length;
-
-  /// Get organ symptoms groups for selected organs
-  List get organSymptomsGroups {
-    return _organSymptomsGroups.values.toList();
-  }
-
-  /// Get total selected symptoms count across all organs
-  int get totalSelectedSymptomsCount {
-    return _organSymptomsGroups.values.fold(0, (sum, group) => sum + group.selectedCount);
-  }
-
-  /// Check if at least one symptom is selected
-  bool get hasSelectedSymptoms {
-    return _organSymptomsGroups.values.any((group) => group.hasSelectedSymptoms);
-  }
-
-  // Methods
-
-  /// Toggle between front and back body view
-  void toggleView() {
-    _currentView = _currentView == BodyView.front ? BodyView.back : BodyView.front;
-    notifyListeners();
-  }
-
-  toggleIsBodyHidden() {
-    isBodyHidden = !isBodyHidden;
-    notifyListeners();
-  }
-
-  /// Toggle organ selection (add if not selected, remove if selected)
-  void toggleOrganSelection(String organId) {
-    if (_selectedOrganIds.contains(organId)) {
-      _selectedOrganIds.remove(organId);
-    } else {
-      _selectedOrganIds.add(organId);
-    }
-
-    // Show tooltip
-    _showTooltip(organId);
-
-    notifyListeners();
-  }
-
-  /// Show tooltip for an organ
-  void _showTooltip(String organId) {
-    // Cancel any existing timer
-    _tooltipTimer?.cancel();
-
-    // Set the tooltip organ
-    _tooltipOrganId = organId;
-    notifyListeners();
-
-    // Hide tooltip after 2 seconds
-    _tooltipTimer = Timer(const Duration(seconds: 1), () {
-      _tooltipOrganId = null;
-      notifyListeners();
-    });
-  }
-
-  /// Hide tooltip immediately
-  void hideTooltip() {
-    _tooltipTimer?.cancel();
-    _tooltipOrganId = null;
-    notifyListeners();
-  }
-
-  /// Remove a specific organ from selection
-  void removeOrgan(String organId) {
-    _selectedOrganIds.remove(organId);
-    notifyListeners();
-  }
-
-  /// Clear all selected organs
-  void clearAllSelections() {
-    _selectedOrganIds.clear();
-    notifyListeners();
-  }
-
-  /// Toggle bottom sheet expanded/collapsed state
-  void toggleBottomSheet() {
-    _isBottomSheetExpanded = !_isBottomSheetExpanded;
-    notifyListeners();
-  }
-
-  /// Set bottom sheet expanded state
-  void setBottomSheetExpanded(bool isExpanded) {
-    _isBottomSheetExpanded = isExpanded;
-    notifyListeners();
-  }
-
-  /// Validate if at least one organ is selected
-  bool validateSelection() {
-    return _selectedOrganIds.isNotEmpty;
-  }
-
-  /// Get selected organ IDs as a list
-  List getSelectedOrganIds() {
-    return _selectedOrganIds.toList();
-  }
-
-  /// Get selected organ names as a list
-  List getSelectedOrganNames() {
-    return selectedOrgans.map((organ) => organ.name).toList();
-  }
-
-  /// Initialize symptom groups based on selected organs
-  void initializeSymptomGroups() {
-    _organSymptomsGroups.clear();
-
-    for (String organId in _selectedOrganIds) {
-      List symptoms = SymptomsMappingData.getSymptomsForOrgan(organId);
-      if (symptoms.isNotEmpty) {
-        // Find organ name from selectedOrgans
-        String organName = selectedOrgans
-            .firstWhere((organ) => organ.id == organId, orElse: () => OrganModel(id: organId, name: organId, bodyView: BodyView.front, position: OrganPosition(x: 0, y: 0)))
-            .name;
-
-        _organSymptomsGroups[organId] = OrganSymptomsGroup(
-          organId: organId,
-          organName: organName,
-          symptoms: symptoms,
-        );
-      }
-    }
-    notifyListeners();
-  }
-
-  /// Toggle symptom selection for a specific organ
-  void toggleSymptomSelection(String organId, String symptomId) {
-    if (_organSymptomsGroups.containsKey(organId)) {
-      final group = _organSymptomsGroups[organId]!;
-      final selectedIds = Set.from(group.selectedSymptomIds);
-
-      if (selectedIds.contains(symptomId)) {
-        selectedIds.remove(symptomId);
-      } else {
-        selectedIds.add(symptomId);
-      }
-
-      _organSymptomsGroups[organId] = group.copyWith(selectedSymptomIds: selectedIds);
-      notifyListeners();
-    }
-  }
-
-  /// Check if a symptom is selected
-  bool isSymptomSelected(String organId, String symptomId) {
-    return _organSymptomsGroups[organId]?.selectedSymptomIds.contains(symptomId) ?? false;
-  }
-
-  /// Get all selected symptoms across all organs
-  List getAllSelectedSymptoms() {
-    List allSymptoms = [];
-    for (var group in _organSymptomsGroups.values) {
-      for (var symptom in group.symptoms) {
-        if (group.selectedSymptomIds.contains(symptom.id)) {
-          allSymptoms.add(symptom);
-        }
-      }
-    }
-    return allSymptoms;
-  }
-
-  /// Clear all symptom selections
-  void clearAllSymptomSelections() {
-    for (var organId in _organSymptomsGroups.keys) {
-      _organSymptomsGroups[organId] = _organSymptomsGroups[organId]!.copyWith(selectedSymptomIds: {});
-    }
-    notifyListeners();
-  }
-
-  /// Reset the view model to initial state
-  void reset() {
-    _currentView = BodyView.front;
-    _selectedOrganIds.clear();
-    _organSymptomsGroups.clear();
-    _isBottomSheetExpanded = false;
-    _tooltipTimer?.cancel();
-    _tooltipOrganId = null;
-    notifyListeners();
-  }
-
-  @override
-  void dispose() {
-    _tooltipTimer?.cancel();
-    super.dispose();
-  }
-
-}
diff --git a/lib/presentation/symptoms_checker/symptoms_selector_screen.dart b/lib/presentation/symptoms_checker/symptoms_selector_screen.dart
index b1c3234..7b1c8a6 100644
--- a/lib/presentation/symptoms_checker/symptoms_selector_screen.dart
+++ b/lib/presentation/symptoms_checker/symptoms_selector_screen.dart
@@ -5,9 +5,9 @@ import 'package:hmg_patient_app_new/core/utils/utils.dart';
 import 'package:hmg_patient_app_new/extensions/route_extensions.dart';
 import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
 import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
-import 'package:hmg_patient_app_new/features/symptoms_checker/models/symptom_model.dart';
+import 'package:hmg_patient_app_new/features/symptoms_checker/models/resp_models/body_symptom_response_model.dart';
+import 'package:hmg_patient_app_new/features/symptoms_checker/symptoms_checker_view_model.dart';
 import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
-import 'package:hmg_patient_app_new/presentation/symptoms_checker/symptoms_checker_view_model.dart';
 import 'package:hmg_patient_app_new/theme/colors.dart';
 import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart';
 import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart';
@@ -36,7 +36,7 @@ class _SymptomsSelectorScreenState extends State {
   void _onNextPressed(SymptomsCheckerViewModel viewModel) {
     if (viewModel.hasSelectedSymptoms) {
       // Navigate to triage screen
-      context.navigateWithName(AppRoutes.triageScreen);
+      context.navigateWithName(AppRoutes.riskFactorsScreen);
     } else {
       ScaffoldMessenger.of(context).showSnackBar(
         SnackBar(
@@ -84,23 +84,47 @@ class _SymptomsSelectorScreenState extends State {
                             context.pop(),
                             context.pop(),
                           }),
-                  child: viewModel.organSymptomsGroups.isEmpty
-                      ? _buildEmptyState()
-                      : Column(
-                          crossAxisAlignment: CrossAxisAlignment.start,
-                          children: [
-                            SizedBox(height: 16.h),
-                            ...viewModel.organSymptomsGroups.map((group) {
-                              return Padding(
-                                padding: EdgeInsets.only(bottom: 16.h),
-                                child: _buildSymptomsSelectionCard(viewModel, group),
-                              );
-                            }),
-                          ],
-                        ),
+                  child: viewModel.isBodySymptomsLoading
+                      ? _buildLoadingShimmer()
+                      : viewModel.organSymptomsResults.isEmpty
+                          ? _buildEmptyState()
+                          : Column(
+                              crossAxisAlignment: CrossAxisAlignment.start,
+                              children: [
+                                SizedBox(height: 16.h),
+                                ...viewModel.organSymptomsResults.map((organResult) {
+                                  // Find matching organ ID from selected organs
+                                  String? organId;
+                                  String? organName;
+                                  for (var organ in viewModel.selectedOrgans) {
+                                    if (organ.name == organResult.name) {
+                                      organId = organ.id;
+                                      organName = organ.description;
+                                      break;
+                                    }
+                                  }
+
+                                  if (organId != null && organResult.bodySymptoms != null) {
+                                    return Padding(
+                                      padding: EdgeInsets.only(bottom: 16.h),
+                                      child: _buildSymptomsSelectionCard(
+                                        viewModel,
+                                        organId,
+                                        organName ?? organResult.name ?? '',
+                                        organResult.bodySymptoms!,
+                                      ),
+                                    );
+                                  }
+                                  return SizedBox.shrink();
+                                }),
+                              ],
+                            ),
                 ),
               ),
-              _buildStickyBottomCard(context, viewModel),
+              if (!viewModel.isBodySymptomsLoading) ...[
+                _buildStickyBottomCard(context, viewModel),
+
+              ],
             ],
           );
         },
@@ -108,7 +132,12 @@ class _SymptomsSelectorScreenState extends State {
     );
   }
 
-  Widget _buildSymptomsSelectionCard(SymptomsCheckerViewModel viewModel, OrganSymptomsGroup group) {
+  Widget _buildSymptomsSelectionCard(
+    SymptomsCheckerViewModel viewModel,
+    String organId,
+    String organName,
+    List symptoms,
+  ) {
     return Container(
       width: double.infinity,
       margin: EdgeInsets.symmetric(horizontal: 24.w),
@@ -122,7 +151,7 @@ class _SymptomsSelectorScreenState extends State {
             children: [
               Expanded(
                 child: Text(
-                  'Possible symptoms related to "${group.organName}"',
+                  'Possible symptoms related to "$organName"',
                   style: TextStyle(fontSize: 18.f, fontWeight: FontWeight.w600, color: AppColors.textColor),
                 ),
               ),
@@ -132,12 +161,14 @@ class _SymptomsSelectorScreenState extends State {
           Wrap(
             runSpacing: 12.h,
             spacing: 8.w,
-            children: group.symptoms.map((symptom) {
-              bool isSelected = viewModel.isSymptomSelected(group.organId, symptom.id);
+            children: symptoms.map((symptom) {
+              final symptomId = symptom.id ?? '';
+              final symptomLabel = symptom.getDisplayName(false); // Pass isArabic from AppState if needed
+              bool isSelected = viewModel.isSymptomSelected(organId, symptomId);
               return GestureDetector(
-                onTap: () => viewModel.toggleSymptomSelection(group.organId, symptom.id),
+                onTap: () => viewModel.toggleSymptomSelection(organId, symptomId),
                 child: CustomSelectableChip(
-                  label: symptom.name,
+                  label: symptomLabel,
                   selected: isSelected,
                   activeColor: AppColors.primaryRedBorderColor,
                   activeTextColor: AppColors.primaryRedBorderColor,
@@ -152,6 +183,64 @@ class _SymptomsSelectorScreenState extends State {
     );
   }
 
+  Widget _buildLoadingShimmer() {
+    return Column(
+      crossAxisAlignment: CrossAxisAlignment.start,
+      children: [
+        SizedBox(height: 16.h),
+        // Create 2-3 shimmer cards
+        ...List.generate(3, (index) {
+          return Padding(
+            padding: EdgeInsets.only(bottom: 16.h),
+            child: _buildShimmerCard(),
+          );
+        }),
+      ],
+    );
+  }
+
+  Widget _buildShimmerCard() {
+    return Container(
+      width: double.infinity,
+      margin: EdgeInsets.symmetric(horizontal: 24.w),
+      decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24.r),
+      padding: EdgeInsets.symmetric(vertical: 24.h, horizontal: 16.w),
+      child: Column(
+        crossAxisAlignment: CrossAxisAlignment.start,
+        children: [
+          // Shimmer title
+          Container(
+            height: 40.h,
+            decoration: BoxDecoration(
+              color: Colors.white,
+              borderRadius: BorderRadius.circular(24.r),
+            ),
+          ).toShimmer2(isShow: true, radius: 24.r),
+          SizedBox(height: 16.h),
+          // Shimmer chips
+          Wrap(
+            runSpacing: 12.h,
+            spacing: 8.w,
+            children: List.generate(4, (index) {
+              return Container(
+                padding: EdgeInsets.symmetric(horizontal: 12.w, vertical: 6.h),
+                decoration: BoxDecoration(
+                  color: AppColors.whiteColor,
+                  borderRadius: BorderRadius.circular(24.r),
+                  border: Border.all(color: AppColors.bottomNAVBorder, width: 1),
+                ),
+                child: Text(
+                  'Loading..',
+                  style: TextStyle(fontSize: 14.f, color: AppColors.textColor),
+                ),
+              ).toShimmer2(isShow: true, radius: 24.r);
+            }),
+          ),
+        ],
+      ),
+    );
+  }
+
   Widget _buildEmptyState() {
     return Center(
       child: Padding(
diff --git a/lib/presentation/symptoms_checker/widgets/interactive_body_widget.dart b/lib/presentation/symptoms_checker/widgets/interactive_body_widget.dart
index 34cc049..8957fb1 100644
--- a/lib/presentation/symptoms_checker/widgets/interactive_body_widget.dart
+++ b/lib/presentation/symptoms_checker/widgets/interactive_body_widget.dart
@@ -118,7 +118,7 @@ class _InteractiveBodyWidgetState extends State {
                           (organ) {
                             final centerX = organ.position.x * imageConstraints.maxWidth;
                             final centerY = organ.position.y * imageConstraints.maxHeight;
-                            return OrganTooltipWidget(organName: organ.name, position: Offset(centerX, centerY));
+                            return OrganTooltipWidget(organName: organ.description, position: Offset(centerX, centerY));
                           },
                         ),
                     ],
diff --git a/lib/presentation/symptoms_checker/widgets/selected_organs_section.dart b/lib/presentation/symptoms_checker/widgets/selected_organs_section.dart
index dbb93ab..c0f1be3 100644
--- a/lib/presentation/symptoms_checker/widgets/selected_organs_section.dart
+++ b/lib/presentation/symptoms_checker/widgets/selected_organs_section.dart
@@ -114,7 +114,7 @@ class _SelectedOrgansSectionState extends State {
                 runSpacing: 8.h,
                 children: widget.selectedOrgans.map((organ) {
                   return AppCustomChipWidget(
-                    labelText: organ.name,
+                    labelText: organ.description,
                     backgroundColor: AppColors.secondaryLightRedColor,
                     textColor: AppColors.primaryRedColor,
                     deleteIcon: AppAssets.cross_circle,
diff --git a/lib/routes/app_routes.dart b/lib/routes/app_routes.dart
index 2e6b253..e40dbd0 100644
--- a/lib/routes/app_routes.dart
+++ b/lib/routes/app_routes.dart
@@ -9,6 +9,8 @@ import 'package:hmg_patient_app_new/presentation/home_health_care/hhc_procedures
 import 'package:hmg_patient_app_new/presentation/medical_file/medical_file_page.dart';
 import 'package:hmg_patient_app_new/presentation/symptoms_checker/organ_selector_screen.dart';
 import 'package:hmg_patient_app_new/presentation/symptoms_checker/possible_conditions_screen.dart';
+import 'package:hmg_patient_app_new/presentation/symptoms_checker/risk_factors_screen.dart';
+import 'package:hmg_patient_app_new/presentation/symptoms_checker/suggestions_screen.dart';
 import 'package:hmg_patient_app_new/presentation/symptoms_checker/symptoms_selector_screen.dart';
 import 'package:hmg_patient_app_new/presentation/symptoms_checker/triage_screen.dart';
 import 'package:hmg_patient_app_new/presentation/tele_consultation/zoom/call_screen.dart';
@@ -29,6 +31,8 @@ class AppRoutes {
   // Symptoms Checker
   static const String organSelectorPage = '/organSelectorPage';
   static const String symptomsCheckerScreen = '/symptomsCheckerScreen';
+  static const String suggestionsScreen = '/suggestionsScreen';
+  static const String riskFactorsScreen = '/riskFactorsScreen';
   static const String possibleConditionsScreen = '/possibleConditionsScreen';
   static const String triageScreen = '/triageProgressScreen';
 
@@ -39,13 +43,14 @@ class AppRoutes {
         register: (context) => RegisterNew(),
         registerStepTwo: (context) => RegisterNewStep2(),
         medicalFilePage: (context) => MedicalFilePage(),
+        zoomCallPage: (context) => CallScreen(),
         eReferralPage: (context) => NewReferralPage(),
         comprehensiveCheckupPage: (context) => ComprehensiveCheckupPage(),
         homeHealthCarePage: (context) => HhcProceduresPage(),
-        zoomCallPage: (context) => CallScreen()
-        homeHealthCarePage: (context) => HhcProceduresPage(),
         organSelectorPage: (context) => OrganSelectorPage(),
         symptomsCheckerScreen: (context) => SymptomsSelectorScreen(),
+        riskFactorsScreen: (context) => RiskFactorsScreen(),
+        suggestionsScreen: (context) => SuggestionsScreen(),
         possibleConditionsScreen: (context) => PossibleConditionsScreen(),
         triageScreen: (context) => TriageScreen()
       };
-- 
2.30.2


From e72e67d9bf6931227f23c2a16ff155767b3079a3 Mon Sep 17 00:00:00 2001
From: haroon amjad 
Date: Tue, 9 Dec 2025 16:23:47 +0300
Subject: [PATCH 30/39] Appointment Queue implemented, Blood Donation
 implementation contd.

---
 .../main/res/values/mapbox_access_token.xml   |   3 +
 assets/images/svg/select_city_icon.svg        |   4 +
 lib/core/app_assets.dart                      |   1 +
 lib/core/dependencies.dart                    |   7 +
 lib/core/utils/utils.dart                     |  50 +++
 .../blood_donation/blood_donation_repo.dart   |  95 ++++
 .../blood_donation_view_model.dart            | 133 ++++++
 .../models/blood_group_list_model.dart        |   6 +
 .../models/blood_group_response_model.dart    |  61 +++
 .../blood_donation/models/cities_model.dart   |  21 +
 .../book_appointments_view_model.dart         |   4 +-
 .../my_appointments_view_model.dart           |   9 +
 lib/main.dart                                 |   4 +
 .../appointments/appointment_queue_page.dart  | 404 ++++++++----------
 .../widgets/appointment_card.dart             |  83 ++--
 .../appointment_checkin_bottom_sheet.dart     |   5 +-
 .../widgets/appointment_doctor_card.dart      |  37 +-
 .../widgets/appointment_queueing_screen.dart  |   0
 .../blood_donation/blood_donation_page.dart   | 172 ++++++++
 .../widgets/city_list_item.dart               |  60 +++
 .../widgets/select_city_widget.dart           |  39 ++
 .../widgets/hospital_list_item.dart           |  36 --
 .../hmg_services/services_page.dart           |  10 +
 lib/presentation/home/landing_page.dart       |  85 +++-
 lib/routes/app_routes.dart                    |   5 +-
 25 files changed, 1015 insertions(+), 319 deletions(-)
 create mode 100644 android/app/src/main/res/values/mapbox_access_token.xml
 create mode 100644 assets/images/svg/select_city_icon.svg
 create mode 100644 lib/features/blood_donation/blood_donation_repo.dart
 create mode 100644 lib/features/blood_donation/blood_donation_view_model.dart
 create mode 100644 lib/features/blood_donation/models/blood_group_list_model.dart
 create mode 100644 lib/features/blood_donation/models/blood_group_response_model.dart
 create mode 100644 lib/features/blood_donation/models/cities_model.dart
 delete mode 100644 lib/presentation/appointments/widgets/appointment_queueing_screen.dart
 create mode 100644 lib/presentation/blood_donation/blood_donation_page.dart
 create mode 100644 lib/presentation/blood_donation/widgets/city_list_item.dart
 create mode 100644 lib/presentation/blood_donation/widgets/select_city_widget.dart

diff --git a/android/app/src/main/res/values/mapbox_access_token.xml b/android/app/src/main/res/values/mapbox_access_token.xml
new file mode 100644
index 0000000..f1daf69
--- /dev/null
+++ b/android/app/src/main/res/values/mapbox_access_token.xml
@@ -0,0 +1,3 @@
+
+    sk.eyJ1IjoicndhaWQiLCJhIjoiY2x6NWo0bTMzMWZodzJrcGZpemYzc3Z4dSJ9.uSSZuwNSGCcCdPAiORECmg
+
\ No newline at end of file
diff --git a/assets/images/svg/select_city_icon.svg b/assets/images/svg/select_city_icon.svg
new file mode 100644
index 0000000..ff66079
--- /dev/null
+++ b/assets/images/svg/select_city_icon.svg
@@ -0,0 +1,4 @@
+
+    
+    
+
diff --git a/lib/core/app_assets.dart b/lib/core/app_assets.dart
index 5bc984a..95f24ca 100644
--- a/lib/core/app_assets.dart
+++ b/lib/core/app_assets.dart
@@ -181,6 +181,7 @@ class AppAssets {
   static const String call_for_vitals = '$svgBasePath/call_for_vitals.svg';
   static const String call_for_doctor = '$svgBasePath/call_for_doctor.svg';
   static const String bulb_icon = '$svgBasePath/bulb_icon.svg';
+  static const String select_city_icon = '$svgBasePath/select_city_icon.svg';
 
 
   //bottom navigation//
diff --git a/lib/core/dependencies.dart b/lib/core/dependencies.dart
index 30b4ab7..c7037e5 100644
--- a/lib/core/dependencies.dart
+++ b/lib/core/dependencies.dart
@@ -5,6 +5,8 @@ import 'package:hmg_patient_app_new/core/app_state.dart';
 import 'package:hmg_patient_app_new/core/location_util.dart';
 import 'package:hmg_patient_app_new/features/authentication/authentication_repo.dart';
 import 'package:hmg_patient_app_new/features/authentication/authentication_view_model.dart';
+import 'package:hmg_patient_app_new/features/blood_donation/blood_donation_repo.dart';
+import 'package:hmg_patient_app_new/features/blood_donation/blood_donation_view_model.dart';
 import 'package:hmg_patient_app_new/features/book_appointments/book_appointments_repo.dart';
 import 'package:hmg_patient_app_new/features/book_appointments/book_appointments_view_model.dart';
 import 'package:hmg_patient_app_new/features/common/common_repo.dart';
@@ -116,6 +118,7 @@ class AppDependencies {
     getIt.registerLazySingleton(() => LocationRepoImpl(apiClient: getIt()));
     getIt.registerLazySingleton(() => ContactUsRepoImp(loggerService: getIt(), apiClient: getIt()));
     getIt.registerLazySingleton(() => HmgServicesRepoImp(loggerService: getIt(), apiClient: getIt()));
+    getIt.registerLazySingleton(() => BloodDonationRepoImp(loggerService: getIt(), apiClient: getIt()));
 
     // ViewModels
     // Global/shared VMs → LazySingleton
@@ -224,6 +227,10 @@ class AppDependencies {
       () => HmgServicesViewModel(bookAppointmentsRepo: getIt(), hmgServicesRepo: getIt(), errorHandlerService: getIt(), navigationService: getIt()),
     );
 
+    getIt.registerLazySingleton(
+      () => BloodDonationViewModel(bloodDonationRepo: getIt(), errorHandlerService: getIt(), navigationService: getIt(), dialogService: getIt(), appState: getIt()),
+    );
+
     // Screen-specific VMs → Factory
     // getIt.registerFactory(
     //       () => BookAppointmentsViewModel(
diff --git a/lib/core/utils/utils.dart b/lib/core/utils/utils.dart
index 852071f..df8cdcb 100644
--- a/lib/core/utils/utils.dart
+++ b/lib/core/utils/utils.dart
@@ -875,4 +875,54 @@ class Utils {
     Uri uri = Uri.parse(url);
     launchUrl(uri, mode: LaunchMode.inAppBrowserView);
   }
+
+
+  static Color getCardBorderColor(int currentQueueStatus) {
+    switch (currentQueueStatus) {
+      case 0:
+        return AppColors.ratingColorYellow;
+      case 1:
+        return AppColors.primaryRedColor;
+      case 2:
+        return AppColors.successColor;
+    }
+    return AppColors.textColor;
+  }
+
+  static Color getCardButtonColor(int currentQueueStatus) {
+    switch (currentQueueStatus) {
+      case 0:
+        return AppColors.textColor.withValues(alpha: 0.08);
+      case 1:
+        return AppColors.primaryRedColor;
+      case 2:
+        return AppColors.successColor;
+    }
+    return AppColors.primaryRedColor;
+  }
+
+  static Color getCardButtonTextColor(int currentQueueStatus) {
+    switch (currentQueueStatus) {
+      case 0:
+        return Color(0xFFA2A2A2);
+      case 1:
+        return AppColors.whiteColor;
+      case 2:
+        return AppColors.whiteColor;
+    }
+    return AppColors.primaryRedColor;
+  }
+
+  static String getCardButtonText(int currentQueueStatus) {
+    switch (currentQueueStatus) {
+      case 0:
+        return "Please wait! you will be called for vital signs".needTranslation;
+      case 1:
+        return "Please visit Room S5 for vital signs".needTranslation;
+      case 2:
+        return "Please visit Room S5 to the Doctor".needTranslation;
+    }
+    return "";
+  }
+
 }
diff --git a/lib/features/blood_donation/blood_donation_repo.dart b/lib/features/blood_donation/blood_donation_repo.dart
new file mode 100644
index 0000000..84997b2
--- /dev/null
+++ b/lib/features/blood_donation/blood_donation_repo.dart
@@ -0,0 +1,95 @@
+import 'package:dartz/dartz.dart';
+import 'package:hmg_patient_app_new/core/api/api_client.dart';
+import 'package:hmg_patient_app_new/core/api_consts.dart';
+import 'package:hmg_patient_app_new/core/common_models/generic_api_model.dart';
+import 'package:hmg_patient_app_new/core/exceptions/api_failure.dart';
+import 'package:hmg_patient_app_new/features/blood_donation/models/blood_group_response_model.dart';
+import 'package:hmg_patient_app_new/features/blood_donation/models/cities_model.dart';
+import 'package:hmg_patient_app_new/services/logger_service.dart';
+
+abstract class BloodDonationRepo {
+  Future>>> getAllCities();
+
+  Future>> getPatientBloodGroupDetails();
+}
+
+class BloodDonationRepoImp implements BloodDonationRepo {
+  final ApiClient apiClient;
+  final LoggerService loggerService;
+
+  BloodDonationRepoImp({required this.loggerService, required this.apiClient});
+
+  @override
+  Future>>> getAllCities() async {
+    Map mapDevice = {};
+
+    try {
+      GenericApiModel>? apiResponse;
+      Failure? failure;
+      await apiClient.post(
+        GET_CITIES_REQUEST,
+        body: mapDevice,
+        onFailure: (error, statusCode, {messageStatus, failureType}) {
+          failure = failureType;
+        },
+        onSuccess: (response, statusCode, {messageStatus, errorMessage}) {
+          try {
+            final list = response['ListCities'];
+            final citiesList = list.map((item) => CitiesModel.fromJson(item as Map)).toList().cast();
+
+            apiResponse = GenericApiModel>(
+              messageStatus: messageStatus,
+              statusCode: statusCode,
+              errorMessage: null,
+              data: citiesList,
+            );
+          } catch (e) {
+            failure = DataParsingFailure(e.toString());
+          }
+        },
+      );
+      if (failure != null) return Left(failure!);
+      if (apiResponse == null) return Left(ServerFailure("Unknown error"));
+      return Right(apiResponse!);
+    } catch (e) {
+      return Left(UnknownFailure(e.toString()));
+    }
+  }
+
+  @override
+  Future>> getPatientBloodGroupDetails() async {
+    Map mapDevice = {};
+
+    try {
+      GenericApiModel? apiResponse;
+      Failure? failure;
+      await apiClient.post(
+        GET_BLOOD_REQUEST,
+        body: mapDevice,
+        onFailure: (error, statusCode, {messageStatus, failureType}) {
+          failure = failureType;
+        },
+        onSuccess: (response, statusCode, {messageStatus, errorMessage}) {
+          try {
+            final list = response['List_BloodGroupDetails'][0];
+            final patientBloodGroup = List_BloodGroupDetailsModel.fromJson(list);
+
+            apiResponse = GenericApiModel(
+              messageStatus: messageStatus,
+              statusCode: statusCode,
+              errorMessage: null,
+              data: patientBloodGroup,
+            );
+          } catch (e) {
+            failure = DataParsingFailure(e.toString());
+          }
+        },
+      );
+      if (failure != null) return Left(failure!);
+      if (apiResponse == null) return Left(ServerFailure("Unknown error"));
+      return Right(apiResponse!);
+    } catch (e) {
+      return Left(UnknownFailure(e.toString()));
+    }
+  }
+}
\ No newline at end of file
diff --git a/lib/features/blood_donation/blood_donation_view_model.dart b/lib/features/blood_donation/blood_donation_view_model.dart
new file mode 100644
index 0000000..7d2e5df
--- /dev/null
+++ b/lib/features/blood_donation/blood_donation_view_model.dart
@@ -0,0 +1,133 @@
+import 'package:flutter/material.dart';
+import 'package:hmg_patient_app_new/core/app_state.dart';
+import 'package:hmg_patient_app_new/features/blood_donation/blood_donation_repo.dart';
+import 'package:hmg_patient_app_new/features/blood_donation/models/blood_group_list_model.dart';
+import 'package:hmg_patient_app_new/features/blood_donation/models/blood_group_response_model.dart';
+import 'package:hmg_patient_app_new/features/blood_donation/models/cities_model.dart';
+import 'package:hmg_patient_app_new/services/dialog_service.dart';
+import 'package:hmg_patient_app_new/services/error_handler_service.dart';
+import 'package:hmg_patient_app_new/services/navigation_service.dart';
+
+class BloodDonationViewModel extends ChangeNotifier {
+  final DialogService dialogService;
+  BloodDonationRepo bloodDonationRepo;
+  ErrorHandlerService errorHandlerService;
+  final NavigationService navigationService;
+  final AppState appState;
+
+  List citiesList = [];
+  List bloodGroupList = [
+    BloodGroupListModel("O+", 0),
+    BloodGroupListModel("O-", 1),
+    BloodGroupListModel("AB+", 2),
+    BloodGroupListModel("AB-", 3),
+    BloodGroupListModel("A+", 4),
+    BloodGroupListModel("A-", 5),
+    BloodGroupListModel("B+", 6),
+    BloodGroupListModel("B-", 7),
+  ];
+
+  late CitiesModel selectedCity;
+  late BloodGroupListModel selectedBloodGroup;
+  int _selectedHospitalIndex = 0;
+  int _selectedBloodTypeIndex = 0;
+  String _selectedBloodType = '';
+
+  List_BloodGroupDetailsModel patientBloodGroupDetailsModel = List_BloodGroupDetailsModel();
+
+  BloodDonationViewModel({required this.bloodDonationRepo, required this.errorHandlerService, required this.navigationService, required this.dialogService, required this.appState});
+
+  setSelectedCity(CitiesModel city) {
+    selectedCity = city;
+    notifyListeners();
+  }
+
+  Future getRegionSelectedClinics({Function(dynamic)? onSuccess, Function(String)? onError}) async {
+    citiesList.clear();
+    selectedCity = CitiesModel();
+    notifyListeners();
+    final result = await bloodDonationRepo.getAllCities();
+
+    result.fold(
+      (failure) async {
+        onError!(failure.message);
+      },
+      (apiResponse) {
+        if (apiResponse.messageStatus == 2) {
+          onError!(apiResponse.errorMessage ?? 'An unexpected error occurred');
+        } else if (apiResponse.messageStatus == 1) {
+          citiesList = apiResponse.data!;
+          notifyListeners();
+          if (onSuccess != null) {
+            onSuccess(apiResponse);
+          }
+        }
+      },
+    );
+  }
+
+  Future getPatientBloodGroupDetails({Function(dynamic)? onSuccess, Function(String)? onError}) async {
+    final result = await bloodDonationRepo.getPatientBloodGroupDetails();
+
+    result.fold(
+      (failure) async {
+        onError!(failure.message);
+      },
+      (apiResponse) {
+        if (apiResponse.messageStatus == 2) {
+          onError!(apiResponse.errorMessage ?? 'An unexpected error occurred');
+        } else if (apiResponse.messageStatus == 1) {
+          patientBloodGroupDetailsModel = apiResponse.data!;
+
+          CitiesModel citiesModel = CitiesModel();
+          citiesModel.iD = getSelectedCityID();
+          _selectedHospitalIndex = (citiesModel.iD! - 1);
+          citiesModel.description = citiesList[_selectedHospitalIndex].description;
+          citiesModel.descriptionN = citiesList[_selectedHospitalIndex].descriptionN;
+          selectedCity = citiesModel;
+          _selectedBloodType = patientBloodGroupDetailsModel.bloodGroup!;
+          _selectedBloodTypeIndex = getBloodIndex(_selectedBloodType);
+
+          notifyListeners();
+          if (onSuccess != null) {
+            onSuccess(apiResponse);
+          }
+        }
+      },
+    );
+  }
+
+  int getSelectedCityID() {
+    int cityID = 1;
+    citiesList.forEach((element) {
+      if (element.description == patientBloodGroupDetailsModel.city) {
+        cityID = element.iD!;
+      }
+    });
+    return cityID;
+  }
+
+  int getBloodIndex(String type) {
+    switch (type) {
+      case "O+":
+        return 0;
+      case "O-":
+        return 1;
+      case "AB+":
+        return 2;
+      case "AB-":
+        return 3;
+      case "A+":
+        return 4;
+      case "A-":
+        return 5;
+      case "B+":
+        return 6;
+      case "B-":
+        return 7;
+
+      default:
+        return 0;
+    }
+  }
+}
diff --git a/lib/features/blood_donation/models/blood_group_list_model.dart b/lib/features/blood_donation/models/blood_group_list_model.dart
new file mode 100644
index 0000000..9a98cc5
--- /dev/null
+++ b/lib/features/blood_donation/models/blood_group_list_model.dart
@@ -0,0 +1,6 @@
+class BloodGroupListModel {
+  String name;
+  int value;
+
+  BloodGroupListModel(this.name, this.value);
+}
diff --git a/lib/features/blood_donation/models/blood_group_response_model.dart b/lib/features/blood_donation/models/blood_group_response_model.dart
new file mode 100644
index 0000000..ceaca78
--- /dev/null
+++ b/lib/features/blood_donation/models/blood_group_response_model.dart
@@ -0,0 +1,61 @@
+class List_BloodGroupDetailsModel {
+  int? iD;
+  int? patientID;
+  int? patientType;
+  bool? patientOutSA;
+  int? zipCode;
+  String? cellNumber;
+  String? cityCode;
+  String? city;
+  int? gender;
+  String? bloodGroup;
+  String? nationalID;
+  bool? isActive;
+
+  List_BloodGroupDetailsModel({
+    this.iD,
+    this.patientID,
+    this.patientType,
+    this.patientOutSA,
+    this.zipCode,
+    this.cellNumber,
+    this.cityCode,
+    this.city,
+    this.gender,
+    this.bloodGroup,
+    this.nationalID,
+    this.isActive,
+  });
+
+  List_BloodGroupDetailsModel.fromJson(Map json) {
+    iD = json['ID'];
+    patientID = json['PatientID'];
+    patientType = json['PatientType'];
+    patientOutSA = json['PatientOutSA'];
+    zipCode = json['ZipCode'];
+    cellNumber = json['CellNumber'];
+    cityCode = json['CityCode'];
+    city = json['City'];
+    gender = json['Gender'];
+    bloodGroup = json['BloodGroup'];
+    nationalID = json['NationalID'];
+    isActive = json['IsActive'];
+  }
+
+  Map toJson() {
+    final Map data = new Map();
+    data['ID'] = this.iD;
+    data['PatientID'] = this.patientID;
+    data['PatientType'] = this.patientType;
+    data['PatientOutSA'] = this.patientOutSA;
+    data['ZipCode'] = this.zipCode;
+    data['CellNumber'] = this.cellNumber;
+    data['CityCode'] = this.cityCode;
+    data['City'] = this.city;
+    data['Gender'] = this.gender;
+    data['BloodGroup'] = this.bloodGroup;
+    data['NationalID'] = this.nationalID;
+    data['IsActive'] = this.isActive;
+    return data;
+  }
+}
diff --git a/lib/features/blood_donation/models/cities_model.dart b/lib/features/blood_donation/models/cities_model.dart
new file mode 100644
index 0000000..cf7e631
--- /dev/null
+++ b/lib/features/blood_donation/models/cities_model.dart
@@ -0,0 +1,21 @@
+class CitiesModel {
+  int? iD;
+  String? description;
+  String? descriptionN;
+
+  CitiesModel({this.iD, this.description, this.descriptionN});
+
+  CitiesModel.fromJson(Map json) {
+    iD = json['ID'];
+    description = json['Description'];
+    descriptionN = json['DescriptionN'];
+  }
+
+  Map toJson() {
+    final Map data = new Map();
+    data['ID'] = this.iD;
+    data['Description'] = this.description;
+    data['DescriptionN'] = this.descriptionN;
+    return data;
+  }
+}
\ No newline at end of file
diff --git a/lib/features/book_appointments/book_appointments_view_model.dart b/lib/features/book_appointments/book_appointments_view_model.dart
index 2413827..d96cb4f 100644
--- a/lib/features/book_appointments/book_appointments_view_model.dart
+++ b/lib/features/book_appointments/book_appointments_view_model.dart
@@ -497,8 +497,8 @@ class BookAppointmentsViewModel extends ChangeNotifier {
           }
           initialSlotDuration = apiResponse.data["InitialSlotDuration"];
           freeSlotsResponse = apiResponse.data['FreeTimeSlots'];
-          // isWaitingAppointmentAvailable = apiResponse.data["IsAllowToBookWaitingAppointment"];
-          isWaitingAppointmentAvailable = true;
+          isWaitingAppointmentAvailable = apiResponse.data["IsAllowToBookWaitingAppointment"];
+          // isWaitingAppointmentAvailable = true;
 
           freeSlotsResponse.forEach((element) {
             // date = (isLiveCareSchedule != null && isLiveCareSchedule)
diff --git a/lib/features/my_appointments/my_appointments_view_model.dart b/lib/features/my_appointments/my_appointments_view_model.dart
index fa1ad22..71e0312 100644
--- a/lib/features/my_appointments/my_appointments_view_model.dart
+++ b/lib/features/my_appointments/my_appointments_view_model.dart
@@ -37,6 +37,9 @@ class MyAppointmentsViewModel extends ChangeNotifier {
   DateTime? start = null;
   DateTime? end = null;
 
+  bool isPatientHasQueueAppointment = false;
+  int currentQueueStatus = 0;
+
   List patientAppointmentsHistoryList = [];
   List filteredAppointmentList = [];
 
@@ -85,6 +88,12 @@ class MyAppointmentsViewModel extends ChangeNotifier {
     isTamaraDetailsLoading = true;
     isAppointmentPatientShareLoading = true;
     isEyeMeasurementsAppointmentsLoading = true;
+    isPatientHasQueueAppointment = false;
+    notifyListeners();
+  }
+
+  setCurrentQueueStatus(int currentQueueStatus) {
+    this.currentQueueStatus = currentQueueStatus;
     notifyListeners();
   }
 
diff --git a/lib/main.dart b/lib/main.dart
index 1af80b6..6a065fe 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -9,6 +9,7 @@ import 'package:hmg_patient_app_new/core/app_state.dart';
 import 'package:hmg_patient_app_new/core/dependencies.dart';
 import 'package:hmg_patient_app_new/core/utils/utils.dart';
 import 'package:hmg_patient_app_new/features/authentication/authentication_view_model.dart';
+import 'package:hmg_patient_app_new/features/blood_donation/blood_donation_view_model.dart';
 import 'package:hmg_patient_app_new/features/book_appointments/book_appointments_view_model.dart';
 import 'package:hmg_patient_app_new/features/contact_us/contact_us_view_model.dart';
 import 'package:hmg_patient_app_new/features/doctor_filter/doctor_filter_view_model.dart';
@@ -145,6 +146,9 @@ void main() async {
         ),
         ChangeNotifierProvider(
           create: (_) => getIt.get(),
+        ),
+        ChangeNotifierProvider(
+          create: (_) => getIt.get(),
         )
       ], child: MyApp()),
     ),
diff --git a/lib/presentation/appointments/appointment_queue_page.dart b/lib/presentation/appointments/appointment_queue_page.dart
index c2765a2..f48f1eb 100644
--- a/lib/presentation/appointments/appointment_queue_page.dart
+++ b/lib/presentation/appointments/appointment_queue_page.dart
@@ -6,261 +6,215 @@ import 'package:hmg_patient_app_new/core/utils/size_utils.dart';
 import 'package:hmg_patient_app_new/core/utils/utils.dart';
 import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
 import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
+import 'package:hmg_patient_app_new/features/my_appointments/my_appointments_view_model.dart';
 import 'package:hmg_patient_app_new/presentation/home/navigation_screen.dart';
 import 'package:hmg_patient_app_new/theme/colors.dart';
 import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart';
 import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart';
 import 'package:hmg_patient_app_new/widgets/chip/app_custom_chip_widget.dart';
 import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart';
+import 'package:provider/provider.dart';
 
 class AppointmentQueuePage extends StatelessWidget {
   AppointmentQueuePage({super.key});
 
   AppState? appState;
-  int currentQueueStatus = 0;
 
   @override
   Widget build(BuildContext context) {
-    currentQueueStatus = 1;
     appState = getIt.get();
     return Scaffold(
       backgroundColor: AppColors.bgScaffoldColor,
-      body: Column(
-        children: [
-          Expanded(
-            child: CollapsingListView(
-              title: "Queueing".needTranslation,
-              child: SingleChildScrollView(
-                child: Padding(
-                  padding: EdgeInsets.all(24.0),
-                  child: Column(
-                    crossAxisAlignment: CrossAxisAlignment.start,
-                    children: [
-                      Container(
-                        decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
-                          color: AppColors.whiteColor,
-                          borderRadius: 20.h,
-                          hasShadow: false,
-                          side: BorderSide(color: getCardBorderColor(), width: 2.w),
-                        ),
-                        child: Padding(
-                          padding: EdgeInsets.all(16.h),
-                          child: Column(
-                            crossAxisAlignment: CrossAxisAlignment.start,
-                            children: [
-                              Row(
-                                mainAxisAlignment: MainAxisAlignment.spaceBetween,
-                                children: [
-                                  AppCustomChipWidget(
-                                    labelText: currentQueueStatus == 0 ? "In Queue".needTranslation : "Your Turn".needTranslation,
-                                    backgroundColor: getCardBorderColor().withValues(alpha: 0.20),
-                                    textColor: getCardBorderColor(),
-                                  ),
-                                  Utils.buildSvgWithAssets(icon: AppAssets.waiting_icon, width: 24.h, height: 24.h),
-                                ],
-                              ),
-                              SizedBox(height: 10.h),
-                              "Hala ${appState!.getAuthenticatedUser()!.firstName}!!!".needTranslation.toText16(isBold: true),
-                              SizedBox(height: 8.h),
-                              "Thank you for your patience, here is your queue number.".needTranslation.toText12(fontWeight: FontWeight.w500, color: AppColors.textColorLight),
-                              SizedBox(height: 8.h),
-                              "IMD W-A-2".needTranslation.toText32(isBold: true),
-                              SizedBox(height: 8.h),
-                              CustomButton(
-                                text: getCardButtonText(),
-                                onPressed: () {},
-                                backgroundColor: getCardButtonColor(),
-                                borderColor: getCardButtonColor().withValues(alpha: 0.01),
-                                textColor: getCardButtonTextColor(),
-                                fontSize: 12.f,
-                                fontWeight: FontWeight.w600,
-                                borderRadius: 12.r,
-                                padding: EdgeInsets.symmetric(horizontal: 10.w),
-                                height: 40.h,
-                                iconColor: AppColors.whiteColor,
-                                iconSize: 18.h,
-                              ),
-                            ],
+      body: Consumer(builder: (context, myAppointmentsVM, child) {
+        return Column(
+          children: [
+            Expanded(
+              child: CollapsingListView(
+                title: "Queueing".needTranslation,
+                child: SingleChildScrollView(
+                  child: Padding(
+                    padding: EdgeInsets.all(24.0),
+                    child: Column(
+                      crossAxisAlignment: CrossAxisAlignment.start,
+                      children: [
+                        Container(
+                          decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
+                            color: AppColors.whiteColor,
+                            borderRadius: 20.h,
+                            hasShadow: false,
+                            side: BorderSide(color: Utils.getCardBorderColor(myAppointmentsVM.currentQueueStatus), width: 2.w),
                           ),
-                        ),
-                      ),
-                      SizedBox(height: 16.h),
-                      Container(
-                        decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
-                          color: AppColors.whiteColor,
-                          borderRadius: 20.h,
-                          hasShadow: true,
-                        ),
-                        child: Padding(
-                          padding: EdgeInsets.all(16.h),
-                          child: Column(
-                            crossAxisAlignment: CrossAxisAlignment.start,
-                            children: [
-                              "Serving Now".needTranslation.toText16(isBold: true),
-                              SizedBox(height: 18.h),
-                              ListView.separated(
-                                padding: EdgeInsets.zero,
-                                shrinkWrap: true,
-                                itemCount: 3,
-                                physics: NeverScrollableScrollPhysics(),
-                                itemBuilder: (BuildContext context, int index) {
-                                  return Row(
-                                    mainAxisAlignment: MainAxisAlignment.spaceBetween,
-                                    crossAxisAlignment: CrossAxisAlignment.start,
-                                    children: [
-                                      "IMD W-A-2".needTranslation.toText17(isBold: true),
-                                      Row(
-                                        crossAxisAlignment: CrossAxisAlignment.center,
-                                        children: [
-                                          "Room: S2".toText12(fontWeight: FontWeight.w500),
-                                          SizedBox(width: 8.w),
-                                          AppCustomChipWidget(
-                                            deleteIcon: AppAssets.call_for_vitals,
-                                            labelText: "Call for vital signs".needTranslation,
-                                            iconColor: AppColors.primaryRedColor,
-                                            textColor: AppColors.primaryRedColor,
-                                            iconSize: 14.w,
-                                            backgroundColor: AppColors.primaryRedColor.withValues(alpha: 0.1),
-                                            labelPadding: EdgeInsetsDirectional.only(start: 8.h, end: -2.h),
-                                          ),
-                                        ],
-                                      ),
-                                    ],
-                                  );
-                                },
-                                separatorBuilder: (BuildContext cxt, int index) => SizedBox(height: 8.h),
-                              ),
-                            ],
+                          child: Padding(
+                            padding: EdgeInsets.all(16.h),
+                            child: Column(
+                              crossAxisAlignment: CrossAxisAlignment.start,
+                              children: [
+                                Row(
+                                  mainAxisAlignment: MainAxisAlignment.spaceBetween,
+                                  children: [
+                                    AppCustomChipWidget(
+                                      labelText: myAppointmentsVM.currentQueueStatus == 0 ? "In Queue".needTranslation : "Your Turn".needTranslation,
+                                      backgroundColor: Utils.getCardBorderColor(myAppointmentsVM.currentQueueStatus).withValues(alpha: 0.20),
+                                      textColor: Utils.getCardBorderColor(myAppointmentsVM.currentQueueStatus),
+                                    ),
+                                    Utils.buildSvgWithAssets(icon: AppAssets.waiting_icon, width: 24.h, height: 24.h),
+                                  ],
+                                ),
+                                SizedBox(height: 10.h),
+                                "Hala ${appState!.getAuthenticatedUser()!.firstName}!!!".needTranslation.toText16(isBold: true),
+                                SizedBox(height: 8.h),
+                                "Thank you for your patience, here is your queue number.".needTranslation.toText12(fontWeight: FontWeight.w500, color: AppColors.textColorLight),
+                                SizedBox(height: 8.h),
+                                "IMD W-A-5".needTranslation.toText32(isBold: true),
+                                SizedBox(height: 8.h),
+                                CustomButton(
+                                  text: Utils.getCardButtonText(myAppointmentsVM.currentQueueStatus),
+                                  onPressed: () {},
+                                  backgroundColor: Utils.getCardButtonColor(myAppointmentsVM.currentQueueStatus),
+                                  borderColor: Utils.getCardButtonColor(myAppointmentsVM.currentQueueStatus).withValues(alpha: 0.01),
+                                  textColor: Utils.getCardButtonTextColor(myAppointmentsVM.currentQueueStatus),
+                                  fontSize: 12.f,
+                                  fontWeight: FontWeight.w600,
+                                  borderRadius: 12.r,
+                                  padding: EdgeInsets.symmetric(horizontal: 10.w),
+                                  height: 40.h,
+                                  iconColor: AppColors.whiteColor,
+                                  iconSize: 18.h,
+                                ),
+                              ],
+                            ),
                           ),
                         ),
-                      ),
-                      SizedBox(height: 16.h),
-                      Container(
-                        decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
-                          color: AppColors.whiteColor,
-                          borderRadius: 20.h,
-                          hasShadow: true,
+                        SizedBox(height: 16.h),
+                        Container(
+                          decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
+                            color: AppColors.whiteColor,
+                            borderRadius: 20.h,
+                            hasShadow: true,
+                          ),
+                          child: Padding(
+                            padding: EdgeInsets.all(16.h),
+                            child: Column(
+                              crossAxisAlignment: CrossAxisAlignment.start,
+                              children: [
+                                "Serving Now".needTranslation.toText16(isBold: true),
+                                SizedBox(height: 18.h),
+                                ListView.separated(
+                                  padding: EdgeInsets.zero,
+                                  shrinkWrap: true,
+                                  itemCount: 3,
+                                  physics: NeverScrollableScrollPhysics(),
+                                  itemBuilder: (BuildContext context, int index) {
+                                    return Row(
+                                      mainAxisAlignment: MainAxisAlignment.spaceBetween,
+                                      crossAxisAlignment: CrossAxisAlignment.start,
+                                      children: [
+                                        "IMD W-A-2".needTranslation.toText17(isBold: true),
+                                        Row(
+                                          crossAxisAlignment: CrossAxisAlignment.center,
+                                          children: [
+                                            "Room: S2".toText12(fontWeight: FontWeight.w500),
+                                            SizedBox(width: 8.w),
+                                            AppCustomChipWidget(
+                                              deleteIcon: AppAssets.call_for_vitals,
+                                              labelText: "Call for vital signs".needTranslation,
+                                              iconColor: AppColors.primaryRedColor,
+                                              textColor: AppColors.primaryRedColor,
+                                              iconSize: 14.w,
+                                              backgroundColor: AppColors.primaryRedColor.withValues(alpha: 0.1),
+                                              labelPadding: EdgeInsetsDirectional.only(start: 8.h, end: -2.h),
+                                            ),
+                                          ],
+                                        ),
+                                      ],
+                                    );
+                                  },
+                                  separatorBuilder: (BuildContext cxt, int index) => SizedBox(height: 8.h),
+                                ),
+                              ],
+                            ),
+                          ),
                         ),
-                        child: Padding(
-                          padding: EdgeInsets.all(16.h),
-                          child: Column(
-                            crossAxisAlignment: CrossAxisAlignment.start,
-                            children: [
-                              Row(
-                                children: [
-                                  Utils.buildSvgWithAssets(icon: AppAssets.bulb_icon, width: 24.w, height: 24.h),
-                                  SizedBox(width: 8.w),
-                                  "Things to ask your doctor today".needTranslation.toText16(isBold: true),
-                                ],
-                              ),
-                              SizedBox(height: 8.h),
+                        SizedBox(height: 16.h),
+                        Container(
+                          decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
+                            color: AppColors.whiteColor,
+                            borderRadius: 20.h,
+                            hasShadow: true,
+                          ),
+                          child: Padding(
+                            padding: EdgeInsets.all(16.h),
+                            child: Column(
+                              crossAxisAlignment: CrossAxisAlignment.start,
+                              children: [
+                                Row(
+                                  children: [
+                                    Utils.buildSvgWithAssets(icon: AppAssets.bulb_icon, width: 24.w, height: 24.h),
+                                    SizedBox(width: 8.w),
+                                    "Things to ask your doctor today".needTranslation.toText16(isBold: true),
+                                  ],
+                                ),
+                                SizedBox(height: 8.h),
 
-                              //     What can I do to improve my overall health?
-                              // Are there any routine screenings I should get?
-                              // What is this medication for?
-                              // Are there any side effects I should know about?
-                              // When should I come back for a follow-up?
+                                //     What can I do to improve my overall health?
+                                // Are there any routine screenings I should get?
+                                // What is this medication for?
+                                // Are there any side effects I should know about?
+                                // When should I come back for a follow-up?
 
-                              "•  ${"What can I do to improve my overall health?"}".needTranslation.toText12(fontWeight: FontWeight.w500, color: AppColors.textColorLight),
-                              SizedBox(height: 4.h),
-                              "•  ${"Are there any routine screenings I should get?"}".needTranslation.toText12(fontWeight: FontWeight.w500, color: AppColors.textColorLight),
-                              SizedBox(height: 4.h),
-                              "•  ${"What is this medication for?"}".needTranslation.toText12(fontWeight: FontWeight.w500, color: AppColors.textColorLight),
-                              SizedBox(height: 4.h),
-                              "•  ${"Are there any side effects I should know about?"}".needTranslation.toText12(fontWeight: FontWeight.w500, color: AppColors.textColorLight),
-                              SizedBox(height: 4.h),
-                              "•  ${"When should I come back for a follow-up?"}".needTranslation.toText12(fontWeight: FontWeight.w500, color: AppColors.textColorLight),
+                                "•  ${"What can I do to improve my overall health?"}".needTranslation.toText12(fontWeight: FontWeight.w500, color: AppColors.textColorLight),
+                                SizedBox(height: 4.h),
+                                "•  ${"Are there any routine screenings I should get?"}".needTranslation.toText12(fontWeight: FontWeight.w500, color: AppColors.textColorLight),
+                                SizedBox(height: 4.h),
+                                "•  ${"What is this medication for?"}".needTranslation.toText12(fontWeight: FontWeight.w500, color: AppColors.textColorLight),
+                                SizedBox(height: 4.h),
+                                "•  ${"Are there any side effects I should know about?"}".needTranslation.toText12(fontWeight: FontWeight.w500, color: AppColors.textColorLight),
+                                SizedBox(height: 4.h),
+                                "•  ${"When should I come back for a follow-up?"}".needTranslation.toText12(fontWeight: FontWeight.w500, color: AppColors.textColorLight),
 
-                              SizedBox(height: 16.h),
-                            ],
+                                SizedBox(height: 16.h),
+                              ],
+                            ),
                           ),
                         ),
-                      ),
-                    ],
+                      ],
+                    ),
                   ),
                 ),
               ),
             ),
-          ),
-          Container(
-            decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
-              color: AppColors.whiteColor,
-              borderRadius: 24.r,
-              hasShadow: true,
-            ),
-            child: CustomButton(
-              text: "Go to homepage".needTranslation,
-              onPressed: () {
-                Navigator.pushAndRemoveUntil(
-                    context,
-                    CustomPageRoute(
-                      page: LandingNavigation(),
-                    ),
-                    (r) => false);
-              },
-              backgroundColor: AppColors.primaryRedColor,
-              borderColor: AppColors.primaryRedColor,
-              textColor: AppColors.whiteColor,
-              fontSize: 16.f,
-              fontWeight: FontWeight.w500,
-              borderRadius: 12.r,
-              padding: EdgeInsets.symmetric(horizontal: 10.w),
-              height: 50.h,
-              icon: AppAssets.homeBottom,
-              iconColor: AppColors.whiteColor,
-              iconSize: 18.h,
-            ).paddingSymmetrical(16.h, 24.h),
-          )
-        ],
-      ),
+            Container(
+              decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
+                color: AppColors.whiteColor,
+                borderRadius: 24.r,
+                hasShadow: true,
+              ),
+              child: CustomButton(
+                text: "Go to homepage".needTranslation,
+                onPressed: () {
+                  Navigator.pushAndRemoveUntil(
+                      context,
+                      CustomPageRoute(
+                        page: LandingNavigation(),
+                      ),
+                      (r) => false);
+                },
+                backgroundColor: AppColors.primaryRedColor,
+                borderColor: AppColors.primaryRedColor,
+                textColor: AppColors.whiteColor,
+                fontSize: 16.f,
+                fontWeight: FontWeight.w500,
+                borderRadius: 12.r,
+                padding: EdgeInsets.symmetric(horizontal: 10.w),
+                height: 50.h,
+                icon: AppAssets.homeBottom,
+                iconColor: AppColors.whiteColor,
+                iconSize: 18.h,
+              ).paddingSymmetrical(16.h, 24.h),
+            )
+          ],
+        );
+      }),
     );
   }
-
-  Color getCardBorderColor() {
-    switch (currentQueueStatus) {
-      case 0:
-        return AppColors.ratingColorYellow;
-      case 1:
-        return AppColors.primaryRedColor;
-      case 2:
-        return AppColors.successColor;
-    }
-    return AppColors.textColor;
-  }
-
-  Color getCardButtonColor() {
-    switch (currentQueueStatus) {
-      case 0:
-        return AppColors.textColor.withValues(alpha: 0.08);
-      case 1:
-        return AppColors.primaryRedColor;
-      case 2:
-        return AppColors.successColor;
-    }
-    return AppColors.primaryRedColor;
-  }
-
-  Color getCardButtonTextColor() {
-    switch (currentQueueStatus) {
-      case 0:
-        return Color(0xFFA2A2A2);
-      case 1:
-        return AppColors.whiteColor;
-      case 2:
-        return AppColors.whiteColor;
-    }
-    return AppColors.primaryRedColor;
-  }
-
-  String getCardButtonText() {
-    switch (currentQueueStatus) {
-      case 0:
-        return "Please wait! you will be called for vital signs".needTranslation;
-      case 1:
-        return "Please visit Room S5 for vital signs".needTranslation;
-      case 2:
-        return "Please visit Room S5 to the Doctor".needTranslation;
-    }
-    return "";
-  }
 }
diff --git a/lib/presentation/appointments/widgets/appointment_card.dart b/lib/presentation/appointments/widgets/appointment_card.dart
index a629944..e6b974e 100644
--- a/lib/presentation/appointments/widgets/appointment_card.dart
+++ b/lib/presentation/appointments/widgets/appointment_card.dart
@@ -17,7 +17,6 @@ import 'package:hmg_patient_app_new/features/my_appointments/my_appointments_vie
 import 'package:hmg_patient_app_new/features/my_appointments/utils/appointment_type.dart';
 import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
 import 'package:hmg_patient_app_new/presentation/appointments/appointment_details_page.dart';
-import 'package:hmg_patient_app_new/presentation/appointments/appointment_queue_page.dart';
 import 'package:hmg_patient_app_new/presentation/appointments/widgets/ask_doctor_request_type_select.dart';
 import 'package:hmg_patient_app_new/presentation/book_appointment/widgets/appointment_calendar.dart';
 import 'package:hmg_patient_app_new/presentation/medical_file/eye_measurement_details_page.dart';
@@ -27,7 +26,6 @@ import 'package:hmg_patient_app_new/widgets/chip/app_custom_chip_widget.dart';
 import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart';
 import 'package:hmg_patient_app_new/widgets/loader/bottomsheet_loader.dart';
 import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart';
-import 'package:smooth_corner/smooth_corner.dart';
 
 class AppointmentCard extends StatelessWidget {
   final PatientAppointmentHistoryResponseModel patientAppointmentHistoryResponseModel;
@@ -133,7 +131,7 @@ class AppointmentCard extends StatelessWidget {
               width: 63.w,
               height: 63.h,
               fit: BoxFit.cover,
-            ).circle(100).toShimmer2(isShow: isLoading),
+            ).circle(100.r).toShimmer2(isShow: isLoading),
             Transform.translate(
               offset: Offset(0.0, -20.h),
               child: Container(
@@ -149,7 +147,11 @@ class AppointmentCard extends StatelessWidget {
                 ),
                 child: Column(
                   mainAxisAlignment: MainAxisAlignment.center,
-                  children: [Utils.buildSvgWithAssets(icon: AppAssets.rating_icon, width: 15.w, height: 15.h), SizedBox(height: 2.h), "4.7".toText11(isBold: true, color: AppColors.textColor)],
+                  children: [
+                    Utils.buildSvgWithAssets(icon: AppAssets.rating_icon, width: 15.w, height: 15.h),
+                    SizedBox(height: 2.h),
+                    "${patientAppointmentHistoryResponseModel.decimalDoctorRate}".toText11(isBold: true, color: AppColors.textColor),
+                  ],
                 ),
               ).circle(100).toShimmer2(isShow: isLoading),
             ),
@@ -169,10 +171,14 @@ class AppointmentCard extends StatelessWidget {
                 spacing: 3.h,
                 runSpacing: 4.h,
                 children: [
-                    AppCustomChipWidget(labelText: isLoading ? 'Cardiology' : patientAppointmentHistoryResponseModel.clinicName!)
-                        .toShimmer2(isShow: isLoading),
-                    AppCustomChipWidget(labelText: isLoading ? 'Olaya' : patientAppointmentHistoryResponseModel.projectName!)
-                        .toShimmer2(isShow: isLoading),
+                  AppCustomChipWidget(
+                    labelText: isLoading
+                        ? 'Cardiology'
+                        : (patientAppointmentHistoryResponseModel.clinicName!.length > 15
+                            ? '${patientAppointmentHistoryResponseModel.clinicName!.substring(0, 12)}...'
+                            : patientAppointmentHistoryResponseModel.clinicName!),
+                  ).toShimmer2(isShow: isLoading),
+                  AppCustomChipWidget(labelText: isLoading ? 'Olaya' : patientAppointmentHistoryResponseModel.projectName!).toShimmer2(isShow: isLoading),
                   AppCustomChipWidget(
                     icon: AppAssets.appointment_calendar_icon,
                     labelText: isLoading
@@ -292,41 +298,34 @@ class AppointmentCard extends StatelessWidget {
     if (isRecent) {
       return CustomButton(
         text: LocaleKeys.askDoctor.tr(context: context),
-        onPressed: () {
-          Navigator.of(context).push(
-            CustomPageRoute(
-              page: AppointmentQueuePage(),
-            ),
-          );
+        onPressed: () async {
+          LoaderBottomSheet.showLoader(loadingText: "Checking doctor availability...".needTranslation);
+          await myAppointmentsViewModel.isDoctorAvailable(
+              projectID: patientAppointmentHistoryResponseModel.projectID,
+              doctorId: patientAppointmentHistoryResponseModel.doctorID,
+              clinicId: patientAppointmentHistoryResponseModel.clinicID,
+              onSuccess: (value) async {
+                if (value) {
+                  await myAppointmentsViewModel.getAskDoctorRequestTypes(onSuccess: (val) {
+                    LoaderBottomSheet.hideLoader();
+                    showCommonBottomSheetWithoutHeight(
+                      context,
+                      title: LocaleKeys.askDoctor.tr(context: context),
+                      child: AskDoctorRequestTypeSelect(
+                        askDoctorRequestTypeList: myAppointmentsViewModel.askDoctorRequestTypeList,
+                        myAppointmentsViewModel: myAppointmentsViewModel,
+                        patientAppointmentHistoryResponseModel: patientAppointmentHistoryResponseModel,
+                      ),
+                      callBackFunc: () {},
+                      isFullScreen: false,
+                      isCloseButtonVisible: true,
+                    );
+                  });
+                } else {
+                  print("Doctor is not available");
+                }
+              });
         },
-        // onPressed: () async {
-        //   LoaderBottomSheet.showLoader(loadingText: "Checking doctor availability...".needTranslation);
-        //   await myAppointmentsViewModel.isDoctorAvailable(
-        //       projectID: patientAppointmentHistoryResponseModel.projectID,
-        //       doctorId: patientAppointmentHistoryResponseModel.doctorID,
-        //       clinicId: patientAppointmentHistoryResponseModel.clinicID,
-        //       onSuccess: (value) async {
-        //         if (value) {
-        //           await myAppointmentsViewModel.getAskDoctorRequestTypes(onSuccess: (val) {
-        //             LoaderBottomSheet.hideLoader();
-        //             showCommonBottomSheetWithoutHeight(
-        //               context,
-        //               title: LocaleKeys.askDoctor.tr(context: context),
-        //               child: AskDoctorRequestTypeSelect(
-        //                 askDoctorRequestTypeList: myAppointmentsViewModel.askDoctorRequestTypeList,
-        //                 myAppointmentsViewModel: myAppointmentsViewModel,
-        //                 patientAppointmentHistoryResponseModel: patientAppointmentHistoryResponseModel,
-        //               ),
-        //               callBackFunc: () {},
-        //               isFullScreen: false,
-        //               isCloseButtonVisible: true,
-        //             );
-        //           });
-        //         } else {
-        //           print("Doctor is not available");
-        //         }
-        //       });
-        // },
         backgroundColor: AppColors.secondaryLightRedColor,
         borderColor: AppColors.secondaryLightRedColor,
         textColor: AppColors.primaryRedColor,
diff --git a/lib/presentation/appointments/widgets/appointment_checkin_bottom_sheet.dart b/lib/presentation/appointments/widgets/appointment_checkin_bottom_sheet.dart
index 74ab6b7..f430447 100644
--- a/lib/presentation/appointments/widgets/appointment_checkin_bottom_sheet.dart
+++ b/lib/presentation/appointments/widgets/appointment_checkin_bottom_sheet.dart
@@ -13,6 +13,7 @@ import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
 import 'package:hmg_patient_app_new/features/my_appointments/models/resp_models/patient_appointment_history_response_model.dart';
 import 'package:hmg_patient_app_new/features/my_appointments/my_appointments_view_model.dart';
 import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
+import 'package:hmg_patient_app_new/presentation/appointments/appointment_queue_page.dart';
 import 'package:hmg_patient_app_new/presentation/appointments/my_appointments_page.dart';
 import 'package:hmg_patient_app_new/presentation/home/navigation_screen.dart';
 import 'package:hmg_patient_app_new/theme/colors.dart';
@@ -156,7 +157,9 @@ class AppointmentCheckinBottomSheet extends StatelessWidget {
               ),
               (r) => false);
           Navigator.of(context).push(
-            CustomPageRoute(page: MyAppointmentsPage()),
+            CustomPageRoute(
+              page: AppointmentQueuePage(),
+            ),
           );
         }, isFullScreen: false);
       },
diff --git a/lib/presentation/appointments/widgets/appointment_doctor_card.dart b/lib/presentation/appointments/widgets/appointment_doctor_card.dart
index b2d74ca..96d538b 100644
--- a/lib/presentation/appointments/widgets/appointment_doctor_card.dart
+++ b/lib/presentation/appointments/widgets/appointment_doctor_card.dart
@@ -3,6 +3,7 @@ import 'package:flutter/material.dart';
 import 'package:hmg_patient_app_new/core/app_assets.dart';
 import 'package:hmg_patient_app_new/core/utils/date_util.dart';
 import 'package:hmg_patient_app_new/core/utils/size_utils.dart';
+import 'package:hmg_patient_app_new/core/utils/utils.dart';
 import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
 import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
 import 'package:hmg_patient_app_new/features/my_appointments/models/resp_models/patient_appointment_history_response_model.dart';
@@ -50,8 +51,29 @@ class AppointmentDoctorCard extends StatelessWidget {
                       height: 63.h,
                       fit: BoxFit.cover,
                     ).circle(100.r),
-                    SizedBox(height: 12.h),
-                    AppCustomChipWidget(icon: AppAssets.rating_icon, iconColor: AppColors.ratingColorYellow, labelText: "Rating: ${patientAppointmentHistoryResponseModel.decimalDoctorRate}"),
+                    Transform.translate(
+                      offset: Offset(0.0, -20.h),
+                      child: Container(
+                        width: 40.w,
+                        height: 40.h,
+                        decoration: BoxDecoration(
+                          color: AppColors.whiteColor,
+                          shape: BoxShape.circle, // Makes the container circular
+                          border: Border.all(
+                            color: AppColors.scaffoldBgColor, // Color of the border
+                            width: 1.5.w, // Width of the border
+                          ),
+                        ),
+                        child: Column(
+                          mainAxisAlignment: MainAxisAlignment.center,
+                          children: [
+                            Utils.buildSvgWithAssets(icon: AppAssets.rating_icon, width: 15.w, height: 15.h),
+                            SizedBox(height: 2.h),
+                            "${patientAppointmentHistoryResponseModel.decimalDoctorRate}".toText11(isBold: true, color: AppColors.textColor),
+                          ],
+                        ),
+                      ).circle(100),
+                    ),
                   ],
                 ),
                 SizedBox(width: 16.w),
@@ -60,13 +82,16 @@ class AppointmentDoctorCard extends StatelessWidget {
                     crossAxisAlignment: CrossAxisAlignment.start,
                     children: [
                       patientAppointmentHistoryResponseModel.doctorNameObj!.toText16(isBold: true),
+                      SizedBox(height: 8.h),
                       Wrap(
                         direction: Axis.horizontal,
                         spacing: 6.w,
                         runSpacing: 6.h,
                         children: [
                           AppCustomChipWidget(
-                            labelText: patientAppointmentHistoryResponseModel.clinicName!,
+                            labelText: (patientAppointmentHistoryResponseModel.clinicName!.length > 15
+                                ? '${patientAppointmentHistoryResponseModel.clinicName!.substring(0, 12)}...'
+                                : patientAppointmentHistoryResponseModel.clinicName!),
                             labelPadding: EdgeInsetsDirectional.only(start: 4.w, end: 4.w),
                           ),
                           AppCustomChipWidget(
@@ -75,8 +100,7 @@ class AppointmentDoctorCard extends StatelessWidget {
                           ),
                           AppCustomChipWidget(
                             icon: AppAssets.doctor_calendar_icon,
-                            labelText:
-                                "${DateUtil.formatDateToDate(DateUtil.convertStringToDate(patientAppointmentHistoryResponseModel.appointmentDate), false)}, ${DateUtil.formatDateToTimeLang(
+                            labelText: "${DateUtil.formatDateToDate(DateUtil.convertStringToDate(patientAppointmentHistoryResponseModel.appointmentDate), false)} ${DateUtil.formatDateToTimeLang(
                               DateUtil.convertStringToDate(patientAppointmentHistoryResponseModel.appointmentDate),
                               false,
                             )}",
@@ -100,8 +124,7 @@ class AppointmentDoctorCard extends StatelessWidget {
                 ),
               ],
             ),
-            SizedBox(height: 16.h),
-
+            SizedBox(height: 8.h),
             Visibility(
               visible: renderWidgetForERDisplay == false,
               child: getAppointmentActionButtons(
diff --git a/lib/presentation/appointments/widgets/appointment_queueing_screen.dart b/lib/presentation/appointments/widgets/appointment_queueing_screen.dart
deleted file mode 100644
index e69de29..0000000
diff --git a/lib/presentation/blood_donation/blood_donation_page.dart b/lib/presentation/blood_donation/blood_donation_page.dart
new file mode 100644
index 0000000..8908652
--- /dev/null
+++ b/lib/presentation/blood_donation/blood_donation_page.dart
@@ -0,0 +1,172 @@
+import 'package:easy_localization/easy_localization.dart';
+import 'package:flutter/material.dart';
+import 'package:hmg_patient_app_new/core/app_assets.dart';
+import 'package:hmg_patient_app_new/core/app_state.dart';
+import 'package:hmg_patient_app_new/core/dependencies.dart';
+import 'package:hmg_patient_app_new/core/utils/size_utils.dart';
+import 'package:hmg_patient_app_new/core/utils/utils.dart';
+import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
+import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
+import 'package:hmg_patient_app_new/features/blood_donation/blood_donation_view_model.dart';
+import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
+import 'package:hmg_patient_app_new/presentation/blood_donation/widgets/select_city_widget.dart';
+import 'package:hmg_patient_app_new/theme/colors.dart';
+import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart';
+import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart';
+import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart';
+import 'package:hmg_patient_app_new/widgets/loader/bottomsheet_loader.dart';
+import 'package:provider/provider.dart';
+
+class BloodDonationPage extends StatelessWidget {
+  BloodDonationPage({super.key});
+
+  late AppState appState;
+
+  @override
+  Widget build(BuildContext context) {
+    appState = getIt.get();
+    return Scaffold(
+      backgroundColor: AppColors.bgScaffoldColor,
+      body: Consumer(builder: (context, bloodDonationVM, child) {
+        return Column(
+          children: [
+            Expanded(
+              child: CollapsingListView(
+                title: LocaleKeys.bloodDonation.tr(),
+                child: Padding(
+                  padding: EdgeInsets.all(24.w),
+                  child: SingleChildScrollView(
+                    child: Container(
+                      decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
+                        color: AppColors.whiteColor,
+                        borderRadius: 24.r,
+                        hasShadow: false,
+                      ),
+                      child: Padding(
+                        padding: EdgeInsets.all(16.h),
+                        child: Column(
+                          crossAxisAlignment: CrossAxisAlignment.start,
+                          children: [
+                            Row(
+                              mainAxisAlignment: MainAxisAlignment.spaceBetween,
+                              children: [
+                                Row(
+                                  children: [
+                                    Utils.buildSvgWithAssets(icon: AppAssets.select_city_icon, width: 40.h, height: 40.h),
+                                    SizedBox(width: 12.w),
+                                    Column(
+                                      crossAxisAlignment: CrossAxisAlignment.start,
+                                      children: [
+                                        LocaleKeys.city.tr().toText16(color: AppColors.textColor, weight: FontWeight.w500),
+                                        (appState.isArabic()
+                                                ? (bloodDonationVM.selectedCity.descriptionN ?? LocaleKeys.select.tr())
+                                                : bloodDonationVM.selectedCity.description ?? LocaleKeys.select.tr(context: context))
+                                            .toText14(color: AppColors.greyTextColor, weight: FontWeight.w500),
+                                      ],
+                                    ),
+                                  ],
+                                ),
+                                Utils.buildSvgWithAssets(icon: AppAssets.arrow_down, width: 25.h, height: 25.h),
+                              ],
+                            ).onPress(() async {
+                              LoaderBottomSheet.showLoader(loadingText: "Fetching Cities...");
+                              await bloodDonationVM.getRegionSelectedClinics(onSuccess: (val) {
+                                LoaderBottomSheet.hideLoader();
+                                showCommonBottomSheetWithoutHeight(context,
+                                    title: LocaleKeys.selectCity.tr(context: context),
+                                    isDismissible: true,
+                                    child: SelectCityWidget(
+                                      bloodDonationViewModel: bloodDonationVM,
+                                    ),
+                                    callBackFunc: () {});
+                              }, onError: (err) {
+                                LoaderBottomSheet.hideLoader();
+                              });
+                            }),
+                            SizedBox(height: 16.h),
+                            Divider(color: AppColors.borderOnlyColor.withValues(alpha: 0.1), height: 1.h),
+                            SizedBox(height: 16.h),
+                            Row(
+                              mainAxisAlignment: MainAxisAlignment.spaceBetween,
+                              children: [
+                                Row(
+                                  children: [
+                                    Utils.buildSvgWithAssets(icon: AppAssets.my_account_icon, width: 40.h, height: 40.h),
+                                    SizedBox(width: 12.w),
+                                    Column(
+                                      crossAxisAlignment: CrossAxisAlignment.start,
+                                      children: [
+                                        LocaleKeys.gender.tr().toText16(color: AppColors.textColor, weight: FontWeight.w500),
+                                        "Male".toText14(color: AppColors.greyTextColor, weight: FontWeight.w500),
+                                      ],
+                                    ),
+                                  ],
+                                ),
+                                Utils.buildSvgWithAssets(icon: AppAssets.arrow_down, width: 25.h, height: 25.h),
+                              ],
+                            ),
+                            SizedBox(height: 16.h),
+                            Divider(color: AppColors.borderOnlyColor.withValues(alpha: 0.1), height: 1.h),
+                            SizedBox(height: 16.h),
+                            Row(
+                              mainAxisAlignment: MainAxisAlignment.spaceBetween,
+                              children: [
+                                Row(
+                                  children: [
+                                    Utils.buildSvgWithAssets(icon: AppAssets.my_account_icon, width: 40.h, height: 40.h),
+                                    SizedBox(width: 12.w),
+                                    Column(
+                                      crossAxisAlignment: CrossAxisAlignment.start,
+                                      children: [
+                                        LocaleKeys.bloodType.tr().toText16(color: AppColors.textColor, weight: FontWeight.w500),
+                                        "AB+".toText14(color: AppColors.greyTextColor, weight: FontWeight.w500),
+                                      ],
+                                    ),
+                                  ],
+                                ),
+                                Utils.buildSvgWithAssets(icon: AppAssets.arrow_down, width: 25.h, height: 25.h),
+                              ],
+                            ),
+                          ],
+                        ),
+                      ),
+                    ),
+                  ),
+                ),
+              ),
+            ),
+            Container(
+              decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
+                color: AppColors.whiteColor,
+                borderRadius: 24.r,
+                hasShadow: true,
+              ),
+              child: SizedBox(
+                child: Column(
+                  crossAxisAlignment: CrossAxisAlignment.start,
+                  children: [
+                    CustomButton(
+                      text: LocaleKeys.save.tr(),
+                      onPressed: () {
+                        // openDoctorScheduleCalendar();
+                      },
+                      backgroundColor: AppColors.primaryRedColor,
+                      borderColor: AppColors.primaryRedColor,
+                      textColor: AppColors.whiteColor,
+                      fontSize: 16.f,
+                      fontWeight: FontWeight.w500,
+                      borderRadius: 12.r,
+                      padding: EdgeInsets.symmetric(horizontal: 10.w),
+                      height: 50.h,
+                      iconSize: 18.h,
+                    ).paddingSymmetrical(16.h, 24.h),
+                  ],
+                ),
+              ),
+            ),
+          ],
+        );
+      }),
+    );
+  }
+}
diff --git a/lib/presentation/blood_donation/widgets/city_list_item.dart b/lib/presentation/blood_donation/widgets/city_list_item.dart
new file mode 100644
index 0000000..408fb26
--- /dev/null
+++ b/lib/presentation/blood_donation/widgets/city_list_item.dart
@@ -0,0 +1,60 @@
+import 'package:flutter/material.dart';
+import 'package:hmg_patient_app_new/core/app_assets.dart';
+import 'package:hmg_patient_app_new/core/app_export.dart';
+import 'package:hmg_patient_app_new/core/app_state.dart';
+import 'package:hmg_patient_app_new/core/dependencies.dart';
+import 'package:hmg_patient_app_new/core/utils/utils.dart';
+import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
+import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
+import 'package:hmg_patient_app_new/features/blood_donation/models/cities_model.dart';
+import 'package:hmg_patient_app_new/theme/colors.dart';
+
+class CityListItem extends StatelessWidget {
+  final CitiesModel cityModel;
+
+  late AppState appState;
+
+  CityListItem({super.key, required this.cityModel});
+
+  @override
+  Widget build(BuildContext context) {
+    appState = getIt.get();
+    return DecoratedBox(
+      decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
+        color: AppColors.whiteColor,
+        borderRadius: 20.h,
+        hasShadow: false,
+      ),
+      child: Row(
+        mainAxisAlignment: MainAxisAlignment.spaceBetween,
+        children: [
+          Expanded(
+            child: Column(
+              crossAxisAlignment: CrossAxisAlignment.start,
+              spacing: 8.h,
+              children: [hospitalName],
+            ),
+          ),
+          Transform.flip(
+            flipX: appState.isArabic(),
+            child: Utils.buildSvgWithAssets(
+              icon: AppAssets.forward_arrow_icon,
+              iconColor: AppColors.blackColor,
+              width: 40.h,
+              height: 40.h,
+              fit: BoxFit.contain,
+            ),
+          ),
+        ],
+      ).paddingSymmetrical(16.h, 16.h),
+    );
+  }
+
+  Widget get hospitalName => Row(
+        children: [
+          Expanded(
+            child: (appState.isArabic() ? cityModel.descriptionN : cityModel.description)!.toText16(color: AppColors.textColor, isBold: true),
+          )
+        ],
+      );
+}
diff --git a/lib/presentation/blood_donation/widgets/select_city_widget.dart b/lib/presentation/blood_donation/widgets/select_city_widget.dart
new file mode 100644
index 0000000..a0e8477
--- /dev/null
+++ b/lib/presentation/blood_donation/widgets/select_city_widget.dart
@@ -0,0 +1,39 @@
+import 'package:flutter/material.dart';
+import 'package:hmg_patient_app_new/core/utils/size_utils.dart';
+import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
+import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
+import 'package:hmg_patient_app_new/features/blood_donation/blood_donation_view_model.dart';
+import 'package:hmg_patient_app_new/presentation/blood_donation/widgets/city_list_item.dart';
+import 'package:hmg_patient_app_new/theme/colors.dart';
+
+class SelectCityWidget extends StatelessWidget {
+  SelectCityWidget({super.key, required this.bloodDonationViewModel});
+
+  BloodDonationViewModel bloodDonationViewModel;
+
+  @override
+  Widget build(BuildContext context) {
+    return Column(
+      crossAxisAlignment: CrossAxisAlignment.start,
+      children: [
+        SizedBox(height: 8.h),
+        SizedBox(
+          height: MediaQuery.sizeOf(context).height * .4,
+          child: ListView.separated(
+              itemBuilder: (_, index) {
+                return CityListItem(
+                  cityModel: bloodDonationViewModel.citiesList[index],
+                ).onPress(() {
+                  bloodDonationViewModel.setSelectedCity(bloodDonationViewModel.citiesList[index]);
+                  Navigator.of(context).pop();
+                });
+              },
+              separatorBuilder: (_, __) => SizedBox(
+                    height: 8.h,
+                  ),
+              itemCount: bloodDonationViewModel.citiesList.length),
+        )
+      ],
+    );
+  }
+}
diff --git a/lib/presentation/habib_wallet/widgets/hospital_list_item.dart b/lib/presentation/habib_wallet/widgets/hospital_list_item.dart
index ae47326..a46f79d 100644
--- a/lib/presentation/habib_wallet/widgets/hospital_list_item.dart
+++ b/lib/presentation/habib_wallet/widgets/hospital_list_item.dart
@@ -67,40 +67,4 @@ class HospitalListItemAdvancePayment extends StatelessWidget {
           )
         ],
       );
-
-// Widget get distanceInfo => Row(
-//   children: [
-//     Visibility(
-//       visible: (hospitalModel.distanceInKMs != "0"),
-//       child: AppCustomChipWidget(
-//         labelText: "${hospitalData?.distanceInKMs ?? ""} km".needTranslation,
-//         deleteIcon: AppAssets.location_red,
-//         deleteIconSize: Size(9, 12),
-//         backgroundColor: AppColors.secondaryLightRedColor,
-//         textColor: AppColors.errorColor,
-//       ),
-//     ),
-//     Visibility(
-//         visible: (hospitalData?.distanceInKMs == "0"),
-//         child: Row(
-//           children: [
-//             AppCustomChipWidget(
-//               labelText: "Distance not available".needTranslation,
-//               textColor: AppColors.blackColor,
-//             ),
-//             SizedBox(
-//               width: 8.h,
-//             )
-//           ],
-//         )),
-//     Visibility(
-//         visible: !isLocationEnabled,
-//         child: AppCustomChipWidget(
-//           labelText: "Location turned off".needTranslation,
-//           deleteIcon: AppAssets.location_unavailable,
-//           deleteIconSize: Size(9, 12),
-//           textColor: AppColors.blackColor,
-//         )),
-//   ],
-// );
 }
diff --git a/lib/presentation/hmg_services/services_page.dart b/lib/presentation/hmg_services/services_page.dart
index fd6e976..1b9f3cd 100644
--- a/lib/presentation/hmg_services/services_page.dart
+++ b/lib/presentation/hmg_services/services_page.dart
@@ -42,6 +42,16 @@ class ServicesPage extends StatelessWidget {
       textColor: AppColors.blackColor,
       route: AppRoutes.homeHealthCarePage,
     ),
+    HmgServicesComponentModel(
+      3,
+      "Blood Donation".needTranslation,
+      "".needTranslation,
+      AppAssets.emergency_services_icon,
+      true,
+      bgColor: AppColors.bgGreenColor,
+      textColor: AppColors.blackColor,
+      route: AppRoutes.bloodDonationPage,
+    ),
     HmgServicesComponentModel(
       11,
       "Virtual Tour".needTranslation,
diff --git a/lib/presentation/home/landing_page.dart b/lib/presentation/home/landing_page.dart
index 1b2ce9a..88b9274 100644
--- a/lib/presentation/home/landing_page.dart
+++ b/lib/presentation/home/landing_page.dart
@@ -266,11 +266,86 @@ class _LandingPageState extends State {
                                               builder: DotSwiperPaginationBuilder(color: Color(0xffD9D9D9), activeColor: AppColors.blackBgColor),
                                             ),
                                             itemBuilder: (BuildContext context, int index) {
-                                              return (immediateLiveCareVM.patientHasPendingLiveCareRequest && index == 0)
-                                                  ? Column(
-                                                      children: [
-                                                        SizedBox(height: 12.h),
-                                                        Container(
+                                              return (myAppointmentsVM.isPatientHasQueueAppointment && index == 0)
+                                                  ? Container(
+                                                      decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
+                                                        color: AppColors.whiteColor,
+                                                        borderRadius: 20.h,
+                                                        hasShadow: false,
+                                                        side: BorderSide(color: Utils.getCardBorderColor(myAppointmentsVM.currentQueueStatus), width: 2.w),
+                                                      ),
+                                                      child: Padding(
+                                                        padding: EdgeInsets.all(16.h),
+                                                        child: Column(
+                                                          crossAxisAlignment: CrossAxisAlignment.start,
+                                                          children: [
+                                                            Row(
+                                                              mainAxisAlignment: MainAxisAlignment.spaceBetween,
+                                                              children: [
+                                                                AppCustomChipWidget(
+                                                                  labelText: myAppointmentsVM.currentQueueStatus == 0 ? "In Queue".needTranslation : "Your Turn".needTranslation,
+                                                                  backgroundColor: Utils.getCardBorderColor(myAppointmentsVM.currentQueueStatus).withValues(alpha: 0.20),
+                                                                  textColor: Utils.getCardBorderColor(myAppointmentsVM.currentQueueStatus),
+                                                                ),
+                                                                Utils.buildSvgWithAssets(icon: AppAssets.waiting_icon, width: 24.h, height: 24.h),
+                                                              ],
+                                                            ),
+                                                            SizedBox(height: 10.h),
+                                                            "Hala ${appState!.getAuthenticatedUser()!.firstName}!!!".needTranslation.toText16(isBold: true),
+                                                            SizedBox(height: 8.h),
+                                                            "Thank you for your patience, here is your queue number."
+                                                                .needTranslation
+                                                                .toText12(fontWeight: FontWeight.w500, color: AppColors.textColorLight),
+                                                            SizedBox(height: 8.h),
+                                                            "IMD W-A-5".needTranslation.toText28(isBold: true),
+                                                            SizedBox(height: 12.h),
+                                                            Row(
+                                                              mainAxisAlignment: MainAxisAlignment.spaceBetween,
+                                                              crossAxisAlignment: CrossAxisAlignment.center,
+                                                              children: [
+                                                                "Serving Now: ".needTranslation.toText14(isBold: true),
+                                                                Row(
+                                                                  crossAxisAlignment: CrossAxisAlignment.center,
+                                                                  children: [
+                                                                    "IMD W-A-2".needTranslation.toText12(isBold: true),
+                                                                    SizedBox(width: 8.w),
+                                                                    AppCustomChipWidget(
+                                                                      deleteIcon: AppAssets.call_for_vitals,
+                                                                      labelText: "Call for vital signs".needTranslation,
+                                                                      iconColor: AppColors.primaryRedColor,
+                                                                      textColor: AppColors.primaryRedColor,
+                                                                      iconSize: 14.w,
+                                                                      backgroundColor: AppColors.primaryRedColor.withValues(alpha: 0.1),
+                                                                      labelPadding: EdgeInsetsDirectional.only(start: 8.h, end: -2.h),
+                                                                    ),
+                                                                  ],
+                                                                ),
+                                                              ],
+                                                            ),
+                                                            SizedBox(height: 8.h),
+                                                            CustomButton(
+                                                              text: Utils.getCardButtonText(myAppointmentsVM.currentQueueStatus),
+                                                              onPressed: () {},
+                                                              backgroundColor: Utils.getCardButtonColor(myAppointmentsVM.currentQueueStatus),
+                                                              borderColor: Utils.getCardButtonColor(myAppointmentsVM.currentQueueStatus).withValues(alpha: 0.01),
+                                                              textColor: Utils.getCardButtonTextColor(myAppointmentsVM.currentQueueStatus),
+                                                              fontSize: 12.f,
+                                                              fontWeight: FontWeight.w600,
+                                                              borderRadius: 12.r,
+                                                              padding: EdgeInsets.symmetric(horizontal: 10.w),
+                                                              height: 40.h,
+                                                              iconColor: AppColors.whiteColor,
+                                                              iconSize: 18.h,
+                                                            ),
+                                                          ],
+                                                        ),
+                                                      ),
+                                                    )
+                                                  : (immediateLiveCareVM.patientHasPendingLiveCareRequest && index == 0)
+                                                      ? Column(
+                                                          children: [
+                                                            SizedBox(height: 12.h),
+                                                            Container(
                                                           decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
                                                             color: AppColors.whiteColor,
                                                             borderRadius: 20.r,
diff --git a/lib/routes/app_routes.dart b/lib/routes/app_routes.dart
index ed5c0db..d09a6c0 100644
--- a/lib/routes/app_routes.dart
+++ b/lib/routes/app_routes.dart
@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
 import 'package:hmg_patient_app_new/presentation/authentication/login.dart';
 import 'package:hmg_patient_app_new/presentation/authentication/register.dart';
 import 'package:hmg_patient_app_new/presentation/authentication/register_step2.dart';
+import 'package:hmg_patient_app_new/presentation/blood_donation/blood_donation_page.dart';
 import 'package:hmg_patient_app_new/presentation/comprehensive_checkup/comprehensive_checkup_page.dart';
 import 'package:hmg_patient_app_new/presentation/e_referral/new_e_referral.dart';
 import 'package:hmg_patient_app_new/presentation/home/navigation_screen.dart';
@@ -21,6 +22,7 @@ class AppRoutes {
   static const String comprehensiveCheckupPage = '/comprehensiveCheckupPage';
   static const String homeHealthCarePage = '/homeHealthCarePage';
   static const String zoomCallPage = '/zoomCallPage';
+  static const String bloodDonationPage = '/bloodDonationPage';
 
   static Map get routes => {
         initialRoute: (context) => SplashPage(),
@@ -32,6 +34,7 @@ class AppRoutes {
         eReferralPage: (context) => NewReferralPage(),
         comprehensiveCheckupPage: (context) => ComprehensiveCheckupPage(),
         homeHealthCarePage: (context) => HhcProceduresPage(),
-        zoomCallPage: (context) => CallScreen()
+        zoomCallPage: (context) => CallScreen(),
+        bloodDonationPage: (context) => BloodDonationPage()
       };
 }
-- 
2.30.2


From 9410ad9b60d13fc24e7e19e3bd06e834cd388b9a Mon Sep 17 00:00:00 2001
From: faizatflutter 
Date: Wed, 10 Dec 2025 09:12:39 +0300
Subject: [PATCH 31/39] Refactoring

---
 .../symptoms_checker_view_model.dart          | 85 ++++++-------------
 .../symptoms_selector_screen.dart             |  1 -
 2 files changed, 28 insertions(+), 58 deletions(-)

diff --git a/lib/features/symptoms_checker/symptoms_checker_view_model.dart b/lib/features/symptoms_checker/symptoms_checker_view_model.dart
index 16cb01e..a467d01 100644
--- a/lib/features/symptoms_checker/symptoms_checker_view_model.dart
+++ b/lib/features/symptoms_checker/symptoms_checker_view_model.dart
@@ -66,28 +66,23 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
   /// Get count of selected organs
   int get selectedOrgansCount => _selectedOrganIds.length;
 
-  /// Get organ symptoms from API response
-  List get organSymptomsResults {
+   List get organSymptomsResults {
     if (bodySymptomResponse?.dataDetails?.result == null) {
       return [];
     }
     return bodySymptomResponse!.dataDetails!.result ?? [];
   }
 
-  /// Get total selected symptoms count across all organs
-  int get totalSelectedSymptomsCount {
+   int get totalSelectedSymptomsCount {
     return _selectedSymptomsByOrgan.values.fold(0, (sum, symptomIds) => sum + symptomIds.length);
   }
 
-  /// Check if at least one symptom is selected
-  bool get hasSelectedSymptoms {
+   bool get hasSelectedSymptoms {
     return _selectedSymptomsByOrgan.values.any((symptomIds) => symptomIds.isNotEmpty);
   }
 
-  // Methods
 
-  /// Toggle between front and back body view
-  void toggleView() {
+   void toggleView() {
     _currentView = _currentView == BodyView.front ? BodyView.back : BodyView.front;
     notifyListeners();
   }
@@ -97,8 +92,7 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
     notifyListeners();
   }
 
-  /// Toggle organ selection (add if not selected, remove if selected)
-  void toggleOrganSelection(String organId) {
+   void toggleOrganSelection(String organId) {
     if (_selectedOrganIds.contains(organId)) {
       _selectedOrganIds.remove(organId);
     } else {
@@ -111,13 +105,10 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
     notifyListeners();
   }
 
-  /// Show tooltip for an organ
-  void _showTooltip(String organId) {
-    // Cancel any existing timer
-    _tooltipTimer?.cancel();
+   void _showTooltip(String organId) {
+     _tooltipTimer?.cancel();
 
-    // Set the tooltip organ
-    _tooltipOrganId = organId;
+     _tooltipOrganId = organId;
     notifyListeners();
 
     // Hide tooltip after 2 seconds
@@ -134,47 +125,39 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
     notifyListeners();
   }
 
-  /// Remove a specific organ from selection
-  void removeOrgan(String organId) {
+   void removeOrgan(String organId) {
     _selectedOrganIds.remove(organId);
     notifyListeners();
   }
 
-  /// Clear all selected organs
-  void clearAllSelections() {
+   void clearAllSelections() {
     _selectedOrganIds.clear();
     notifyListeners();
   }
 
-  /// Toggle bottom sheet expanded/collapsed state
-  void toggleBottomSheet() {
+   void toggleBottomSheet() {
     _isBottomSheetExpanded = !_isBottomSheetExpanded;
     notifyListeners();
   }
 
-  /// Set bottom sheet expanded state
-  void setBottomSheetExpanded(bool isExpanded) {
+   void setBottomSheetExpanded(bool isExpanded) {
     _isBottomSheetExpanded = isExpanded;
     notifyListeners();
   }
 
-  /// Validate if at least one organ is selected
-  bool validateSelection() {
+   bool validateSelection() {
     return _selectedOrganIds.isNotEmpty;
   }
 
-  /// Get selected organ IDs as a list
-  List getSelectedOrganIds() {
+   List getSelectedOrganIds() {
     return _selectedOrganIds.toList();
   }
 
-  /// Get selected organ names as a list
-  List getSelectedOrganNames() {
+   List getSelectedOrganNames() {
     return selectedOrgans.map((organ) => organ.description).toList();
   }
 
-  /// Initialize symptoms from API based on selected organs
-  Future initializeSymptomGroups({
+   Future initializeSymptomGroups({
     Function()? onSuccess,
     Function(String)? onError,
   }) async {
@@ -185,15 +168,12 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
       return;
     }
 
-    // Get the 'name' field from selected organs to send to API
-    List organNames = selectedOrgans.map((organ) => organ.name).toList();
+     List organNames = selectedOrgans.map((organ) => organ.name).toList();
 
-    // Fetch symptoms from API
-    await getBodySymptomsByName(
+     await getBodySymptomsByName(
       organNames: organNames,
       onSuccess: (response) {
-        // API response is already stored in bodySymptomResponse
-        if (onSuccess != null) {
+         if (onSuccess != null) {
           onSuccess();
         }
       },
@@ -205,8 +185,7 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
     );
   }
 
-  /// Toggle symptom selection for a specific organ
-  void toggleSymptomSelection(String organId, String symptomId) {
+   void toggleSymptomSelection(String organId, String symptomId) {
     if (!_selectedSymptomsByOrgan.containsKey(organId)) {
       _selectedSymptomsByOrgan[organId] = {};
     }
@@ -219,13 +198,11 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
     notifyListeners();
   }
 
-  /// Check if a symptom is selected
-  bool isSymptomSelected(String organId, String symptomId) {
+   bool isSymptomSelected(String organId, String symptomId) {
     return _selectedSymptomsByOrgan[organId]?.contains(symptomId) ?? false;
   }
 
-  /// Get all selected symptoms across all organs (using API models)
-  List getAllSelectedSymptoms() {
+   List getAllSelectedSymptoms() {
     List allSymptoms = [];
 
     if (bodySymptomResponse?.dataDetails?.result == null) {
@@ -233,8 +210,7 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
     }
 
     for (var organResult in bodySymptomResponse!.dataDetails!.result!) {
-      // Find matching organ ID
-      String? matchingOrganId;
+       String? matchingOrganId;
       for (var organ in selectedOrgans) {
         if (organ.name == organResult.name) {
           matchingOrganId = organ.id;
@@ -258,14 +234,12 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
     return allSymptoms;
   }
 
-  /// Clear all symptom selections
-  void clearAllSymptomSelections() {
+   void clearAllSymptomSelections() {
     _selectedSymptomsByOrgan.clear();
     notifyListeners();
   }
 
-  /// Reset the view model to initial state
-  void reset() {
+   void reset() {
     _currentView = BodyView.front;
     _selectedOrganIds.clear();
     _selectedSymptomsByOrgan.clear();
@@ -276,8 +250,7 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
     notifyListeners();
   }
 
-  /// Fetch body symptoms by organ names from API
-  Future getBodySymptomsByName({
+   Future getBodySymptomsByName({
     required List organNames,
     Function(BodySymptomResponseModel)? onSuccess,
     Function(String)? onError,
@@ -290,8 +263,7 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
     );
 
     result.fold(
-      // Handle failure
-      (failure) async {
+       (failure) async {
         isBodySymptomsLoading = false;
         notifyListeners();
         await errorHandlerService.handleError(failure: failure);
@@ -299,8 +271,7 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
           onError(failure.toString());
         }
       },
-      // Handle success
-      (apiResponse) {
+       (apiResponse) {
         isBodySymptomsLoading = false;
         if (apiResponse.messageStatus == 1 && apiResponse.data != null) {
           bodySymptomResponse = apiResponse.data;
diff --git a/lib/presentation/symptoms_checker/symptoms_selector_screen.dart b/lib/presentation/symptoms_checker/symptoms_selector_screen.dart
index 7b1c8a6..bed232b 100644
--- a/lib/presentation/symptoms_checker/symptoms_selector_screen.dart
+++ b/lib/presentation/symptoms_checker/symptoms_selector_screen.dart
@@ -123,7 +123,6 @@ class _SymptomsSelectorScreenState extends State {
               ),
               if (!viewModel.isBodySymptomsLoading) ...[
                 _buildStickyBottomCard(context, viewModel),
-
               ],
             ],
           );
-- 
2.30.2


From 95243c250f40ed1d430ac5306ee3c5e9bb222b06 Mon Sep 17 00:00:00 2001
From: tahaalam 
Date: Wed, 10 Dec 2025 10:18:09 +0300
Subject: [PATCH 32/39] graph shaded region added from horizontal spaces

---
 lib/features/lab/lab_view_model.dart          | 31 ++++++----
 .../lab/lab_results/lab_result_details.dart   | 58 +++++++++++--------
 lib/widgets/graph/custom_graph.dart           | 55 +++++-------------
 3 files changed, 70 insertions(+), 74 deletions(-)

diff --git a/lib/features/lab/lab_view_model.dart b/lib/features/lab/lab_view_model.dart
index 27ba643..3997afb 100644
--- a/lib/features/lab/lab_view_model.dart
+++ b/lib/features/lab/lab_view_model.dart
@@ -79,6 +79,7 @@ class LabViewModel extends ChangeNotifier {
   List indexedCharacterForUniqueTest = [];
 
   double maxY = 0.0;
+  double minY = double.infinity;
   double maxX = double.infinity;
 
   LabViewModel(
@@ -317,7 +318,8 @@ class LabViewModel extends ChangeNotifier {
     mainLabResults.clear();
     filteredGraphValues.clear();
     maxY = double.negativeInfinity;
-
+     minY = double.infinity;
+     maxX = double.infinity;
     final result = await labRepo.getPatientLabResults(
         laborder,
         Utils.isVidaPlusProject(int.parse(laborder.projectID ?? "0")),
@@ -352,6 +354,9 @@ class LabViewModel extends ChangeNotifier {
                 maxY = resultValue;
                 maxX = maxY;
               }
+              if (resultValue < minY) {
+                minY = resultValue;
+              }
               if (highRefrenceValue < double.parse(element.referenceHigh ?? "0.0")) {
                 highRefrenceValue = double.parse(element.referenceHigh ?? "0.0");
                 flagForHighReferenceRange = element.calculatedResultFlag;
@@ -373,17 +378,23 @@ class LabViewModel extends ChangeNotifier {
               ));
             } catch (e) {}
           });
-          maxY += transformValueInRange(50, "H");
-          //todo handle the value if flags are null
-          if(flagForLowReferenceRange != null &&  flagForHighReferenceRange!= null){
-            this.flagForHighReferenceRange = flagForHighReferenceRange;
-            this.flagForLowReferenceRange = flagForLowReferenceRange;
-            highTransformedReferenceValue = transformValueInRange(highRefrenceValue, flagForHighReferenceRange??"");
-            lowTransformedReferenceValue = transformValueInRange(lowRefenceValue, flagForLowReferenceRange??"");
-            this.highRefrenceValue = highRefrenceValue;
-            this.lowRefenceValue = lowRefenceValue;
+          if (flagForLowReferenceRange == null && flagForHighReferenceRange == null) {
+            highRefrenceValue = maxY;
+            lowRefenceValue = minY;
           }
 
+          this.flagForHighReferenceRange = flagForHighReferenceRange;
+          this.flagForLowReferenceRange = flagForLowReferenceRange;
+          highTransformedReferenceValue = double.parse(transformValueInRange(highRefrenceValue, flagForHighReferenceRange ?? "").toStringAsFixed(1));
+          lowTransformedReferenceValue = double.parse(transformValueInRange(lowRefenceValue, flagForLowReferenceRange ?? "").toStringAsFixed(1));
+          this.highRefrenceValue = double.parse(highRefrenceValue.toStringAsFixed(1));
+          this.lowRefenceValue = double.parse(lowRefenceValue.toStringAsFixed(1));
+
+          if(maxY< highRefrenceValue) {
+            maxY = highRefrenceValue;
+          }
+          maxY += 25;
+          minY -= 25;
           LabResult recentResult = recentThree.first;
           checkIfGraphShouldBeDisplayed(recentResult);
           recentResult.verifiedOn = resultDate(DateUtil.convertStringToDate(recentResult.verifiedOnDateTime!));
diff --git a/lib/presentation/lab/lab_results/lab_result_details.dart b/lib/presentation/lab/lab_results/lab_result_details.dart
index 1cbad59..d37dd72 100644
--- a/lib/presentation/lab/lab_results/lab_result_details.dart
+++ b/lib/presentation/lab/lab_results/lab_result_details.dart
@@ -284,15 +284,14 @@ class LabResultDetails extends StatelessWidget {
           leftLabelInterval: getInterval(labmodel),
           // maxY: (labmodel.maxY)+(getInterval(labmodel)??0)/2,
           maxY: (labmodel.maxY),
+          minY: labmodel.minY,
           maxX: labmodel.filteredGraphValues.length.toDouble()-.75,
           horizontalInterval: .1,
           getDrawingHorizontalLine: (value){
-            print("the FLline transformed line is $value");
-            print("the labmodel.highTransformedReferenceValue is ${labmodel.highTransformedReferenceValue}");
-            print("thelabmodel.lowTransformedReferenceValue is ${labmodel.lowTransformedReferenceValue}");
-            if(value == labmodel.highRefrenceValue ||value== labmodel.highRefrenceValue) {
+            value = double.parse(value.toStringAsFixed(1));
+            if(value == labmodel.highRefrenceValue ||value== labmodel.lowRefenceValue) {
               return FlLine(
-                color: AppColors.greyTextColor,
+                color: AppColors.bgGreenColor.withOpacity(0.6),
                 strokeWidth: 1,
                 // dashArray: [5, 5],
               );
@@ -300,35 +299,22 @@ class LabResultDetails extends StatelessWidget {
             return FlLine(
               color: Colors.transparent,
               strokeWidth: 1,
-              // dashArray: [5, 5],
             );;
           },
           leftLabelFormatter: (value) {
+            value = double.parse(value.toStringAsFixed(1));
             // return leftLabels(value.toStringAsFixed(2));
-            if(value == labmodel.highTransformedReferenceValue)
+            if(value == labmodel.highRefrenceValue)
               return leftLabels("High".needTranslation);
 
-            if(value== labmodel.lowTransformedReferenceValue)
+            if(value== labmodel.lowRefenceValue)
               return leftLabels("Low".needTranslation);
 
-            // switch (value.toInt()) {
-            //   case 10:
-            //     return leftLabels("Critical Low".needTranslation);
-            //   case 30:
-            //     return leftLabels("Low".needTranslation);
-            //   case 50:
-            //     return leftLabels("Normal".needTranslation);
-            //   case 70:
-            //     return leftLabels("High".needTranslation);
-            //   case 90:
-            //     return leftLabels(
-            //         "Critical High".needTranslation);
-            //   default:
                 return SizedBox.shrink();
             // }
           },
-          graphColor:graphColor ,
-          graphShadowColor: graphColor.withOpacity(.1),
+          graphColor:AppColors.blackColor,
+          graphShadowColor: Colors.transparent,
           graphGridColor: graphColor.withOpacity(.4),
           bottomLabelFormatter: (value, data) {
             if(data.isEmpty) return SizedBox.shrink();
@@ -343,6 +329,9 @@ class LabResultDetails extends StatelessWidget {
             }
             return SizedBox.shrink();
           },
+          rangeAnnotations: RangeAnnotations(
+            horizontalRangeAnnotations: _buildRangeShades(labmodel)
+          ),
           minX:(labmodel.filteredGraphValues.length == 1)?null : -.2,
           scrollDirection: Axis.horizontal,
           height: 180.h);
@@ -351,6 +340,29 @@ class LabResultDetails extends StatelessWidget {
     }
   }
 
+  List _buildRangeShades( LabViewModel model,) {
+    List ranges = [];
+
+      ranges.add(HorizontalRangeAnnotation(
+        y1:model.minY,
+        y2: model.lowRefenceValue,
+        color: AppColors.highAndLow.withOpacity(0.05),
+      ));
+
+    ranges.add(HorizontalRangeAnnotation(
+      y1:model.lowRefenceValue,
+      y2: model.highRefrenceValue,
+      color: AppColors.bgGreenColor.withOpacity(0.05),
+    ));
+
+    ranges.add(HorizontalRangeAnnotation(
+      y1:model.highRefrenceValue,
+      y2: model.maxY,
+      color: AppColors.criticalLowAndHigh.withOpacity(0.05),
+    ));
+    return ranges;
+  }
+
   Widget labHistoryList(LabViewModel labmodel) {
     return SizedBox(
       height: labmodel.filteredGraphValues.length<3?labmodel.filteredGraphValues.length*64:180.h,
diff --git a/lib/widgets/graph/custom_graph.dart b/lib/widgets/graph/custom_graph.dart
index afa3c55..b955b32 100644
--- a/lib/widgets/graph/custom_graph.dart
+++ b/lib/widgets/graph/custom_graph.dart
@@ -59,6 +59,9 @@ class CustomGraph extends StatelessWidget {
   final bool? showGridLines;
   final GetDrawingGridLine? getDrawingHorizontalLine;
   final double? horizontalInterval;
+  final double? minY;
+  final bool showShadow;
+  final RangeAnnotations? rangeAnnotations;
 
   ///creates the left label and provide it to the chart as it will be used  by other part of the application so the label will be different for every chart
   final Widget Function(double) leftLabelFormatter;
@@ -96,14 +99,13 @@ class CustomGraph extends StatelessWidget {
     this.showGridLines = false,
     this.getDrawingHorizontalLine,
     this.horizontalInterval,
+    this.minY,
+    this.showShadow = false,
+    this.rangeAnnotations
   });
 
   @override
   Widget build(BuildContext context) {
-    // var maxY = 0.0;
-    double interval = 20;
-    print("the maxY is $maxY");
-
     return Material(
         color: Colors.white,
         child: SizedBox(
@@ -111,10 +113,8 @@ class CustomGraph extends StatelessWidget {
           height: height,
           child: LineChart(
             LineChartData(
-              minY: 0,
-              // maxY: ((maxY?.ceilToDouble() ?? 0.0) + interval).floorToDouble(),
+              minY: minY??0,
               maxY: maxY,
-              // minX: dataPoints.first.labelValue - 1,
               maxX: maxX,
               minX: minX ,
               lineTouchData: LineTouchData(
@@ -210,15 +210,17 @@ class CustomGraph extends StatelessWidget {
                   );
                 },
               ),
+              rangeAnnotations: rangeAnnotations
             ),
           ),
-        ));
+        ),
+    );
   }
 
+
   List _buildColoredLineSegments(List dataPoints) {
     final List allSpots = dataPoints.asMap().entries.map((entry) {
       double value = (makeGraphBasedOnActualValue)?double.tryParse(entry.value.actualValue)??0.0:entry.value.value;
-      debugPrint("the value is $value");
       return FlSpot(entry.key.toDouble(), value);
     }).toList();
 
@@ -228,7 +230,7 @@ class CustomGraph extends StatelessWidget {
         isCurved: true,
         isStrokeCapRound: true,
         isStrokeJoinRound: true,
-        barWidth: 4,
+        barWidth: 2,
         gradient: LinearGradient(
           colors: [graphColor, graphColor],
           begin: Alignment.centerLeft,
@@ -238,7 +240,7 @@ class CustomGraph extends StatelessWidget {
           show: false,
         ),
         belowBarData: BarAreaData(
-          show: true,
+          show: showShadow,
           gradient: LinearGradient(
             colors: [
               graphShadowColor,
@@ -253,33 +255,4 @@ class CustomGraph extends StatelessWidget {
 
     return data;
   }
-
-  // Widget buildLabel(String label) {
-  //   return Padding(
-  //     padding: const EdgeInsets.only(right: 8),
-  //     child: Text(
-  //       label,
-  //       style: TextStyle(
-  //           fontSize: leftLabelSize ?? 8.fSize, color: leftLabelColor),
-  //       textAlign: TextAlign.right,
-  //     ),
-  //   );
-  // }
-
-
-}
-
-// final List sampleData = [
-//   DataPoint(
-//     value: 20,
-//     label: 'Jan 2024',
-//   ),
-//   DataPoint(
-//     value: 36,
-//     label: 'Feb 2024',
-//   ),
-//   DataPoint(
-//     value: 80,
-//     label: 'This result',
-//   ),
-// ];
+}
\ No newline at end of file
-- 
2.30.2


From 2d2380851eaf3f2a9b7723896708e775ebbf294c Mon Sep 17 00:00:00 2001
From: tahaalam 
Date: Wed, 10 Dec 2025 12:39:25 +0300
Subject: [PATCH 33/39] loading view added

---
 lib/presentation/lab/alphabeticScroll.dart | 2 +-
 lib/presentation/lab/lab_orders_page.dart  | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/lib/presentation/lab/alphabeticScroll.dart b/lib/presentation/lab/alphabeticScroll.dart
index 3f82ba4..7593ea1 100644
--- a/lib/presentation/lab/alphabeticScroll.dart
+++ b/lib/presentation/lab/alphabeticScroll.dart
@@ -213,7 +213,7 @@ class _AlphabetScrollPageState extends State {
                                if (items[itemIndex].model != null) {
                                  widget.rangeViewModel.flush();
                                  widget.labViewModel.getPatientLabResult(items[itemIndex].model!, items[itemIndex].description!,
-                                     (widget.appState.isArabic() ? items[itemIndex].testDescriptionAr! : items[itemIndex].testDescriptionEn!));
+                                     (widget.appState.isArabic() ? items[itemIndex].testDescriptionAr! : items[itemIndex].testDescriptionEn!),"");
                                }
                              },
                              tests: items[itemIndex],
diff --git a/lib/presentation/lab/lab_orders_page.dart b/lib/presentation/lab/lab_orders_page.dart
index 76b502a..a868d59 100644
--- a/lib/presentation/lab/lab_orders_page.dart
+++ b/lib/presentation/lab/lab_orders_page.dart
@@ -1 +1 @@
-import 'dart:async';

import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_staggered_animations/flutter_staggered_animations.dart';
import 'package:hmg_patient_app_new/core/app_state.dart';
import 'package:hmg_patient_app_new/core/dependencies.dart';
import 'package:hmg_patient_app_new/core/enums.dart';
import 'package:hmg_patient_app_new/core/utils/size_utils.dart';
import 'package:hmg_patient_app_new/core/utils/utils.dart';
import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
import 'package:hmg_patient_app_new/features/lab/models/resp_models/patient_lab_orders_response_model.dart';
import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
import 'package:hmg_patient_app_new/features/lab/lab_view_model.dart';
import 'package:hmg_patient_app_new/presentation/lab/lab_order_by_test.dart';
import 'package:hmg_patient_app_new/presentation/lab/lab_result_item_view.dart';
import 'package:hmg_patient_app_new/presentation/lab/lab_result_via_clinic/LabResultByClinic.dart';
import 'package:hmg_patient_app_new/presentation/lab/search_lab_report.dart';
import 'package:hmg_patient_app_new/theme/colors.dart';
import 'package:hmg_patient_app_new/widgets/appbar/collapsing_toolbar.dart';
import 'package:hmg_patient_app_new/widgets/chip/custom_chip_widget.dart';
import 'package:hmg_patient_app_new/widgets/date_range_selector/viewmodel/date_range_view_model.dart';
import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart';
import 'package:hmg_patient_app_new/widgets/transitions/fade_page.dart';
import 'package:provider/provider.dart';
import 'package:hmg_patient_app_new/widgets/custom_tab_bar.dart';
import '../../widgets/appbar/collapsing_list_view.dart';
import 'alphabeticScroll.dart';

class LabOrdersPage extends StatefulWidget {
  const LabOrdersPage({super.key});

  @override
  State createState() => _LabOrdersPageState();
}

class _LabOrdersPageState extends State {
  late LabViewModel labProvider;
  late DateRangeSelectorRangeViewModel rangeViewModel;
  late AppState _appState;
  List?> labSuggestions = [];
  int? expandedIndex;
  String? selectedFilterText = '';
  int activeIndex = 0;

  @override
  void initState() {
    scheduleMicrotask(() {
      labProvider.initLabProvider();
    });
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    labProvider = Provider.of(context, listen: false);
    rangeViewModel = Provider.of(context);
    _appState = getIt();

    return Scaffold(
        backgroundColor: AppColors.bgScaffoldColor,
        body: CollapsingToolbar(
          title: LocaleKeys.labResults.tr(),
          search: () async {
            final lavVM = Provider.of(context, listen: false);
            if (lavVM.isLabOrdersLoading) {
              return;
            } else {
              String? value = await Navigator.of(context).push(
                CustomPageRoute(
                  page: SearchLabResultsContent(labSuggestionsList: lavVM.labSuggestions),
                  fullScreenDialog: true,
                  direction: AxisDirection.down,
                ),
              );
              if (value != null) {
                selectedFilterText = value;
                lavVM.filterLabReports(value);
              }
            }
          },
          child: SingleChildScrollView(
            padding: EdgeInsets.all(24.h),
            physics: NeverScrollableScrollPhysics(),
            child: Consumer(
              builder: (context, model, child) {
                return Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: [
                    CustomTabBar(
                      activeTextColor: Color(0xffED1C2B),
                      activeBackgroundColor: Color(0xffED1C2B).withValues(alpha: .1),
                      tabs: [
                        CustomTabBarModel(null, "By Visit".needTranslation),
                        CustomTabBarModel(null, "By Test".needTranslation),
                        // CustomTabBarModel(null, "Completed".needTranslation),
                      ],
                      onTabChange: (index) {
                        activeIndex = index;
                        setState(() {});
                      },
                    ),
                    SizedBox(height: 8.h),
                    selectedFilterText!.isNotEmpty
                        ? CustomChipWidget(
                            chipText: selectedFilterText!,
                            chipType: ChipTypeEnum.alert,
                            isSelected: true,
                          )
                        : SizedBox(),
                    activeIndex == 0
                        ? ListView.builder(
                            shrinkWrap: true,
                            physics: NeverScrollableScrollPhysics(),
                            padding: EdgeInsets.zero,
                            itemCount: model.isLabOrdersLoading
                                ? 5
                                : model.patientLabOrders.isNotEmpty
                                    ? model.patientLabOrders.length
                                    : 1,
                            itemBuilder: (context, index) {
                              final isExpanded = expandedIndex == index;
                              return model.isLabOrdersLoading
                                  ? LabResultItemView(
                                      onTap: () {},
                                      labOrder: null,
                                      index: index,
                                      isLoading: true,
                                    )
                                  : model.patientLabOrders.isNotEmpty
                                      ? AnimationConfiguration.staggeredList(
                                          position: index,
                                          duration: const Duration(milliseconds: 500),
                                          child: SlideAnimation(
                                            verticalOffset: 100.0,
                                            child: FadeInAnimation(
                                                child: LabResultItemView(
                                                    onTap: () {
                                                      model.currentlySelectedPatientOrder =
                                                          model.patientLabOrders[
                                                              index];
                                                    labProvider.getPatientLabResultByHospital(model.patientLabOrders[
                                                                    index]);
                                                        labProvider
                                                            .getPatientSpecialResult(
                                                                model.patientLabOrders[
                                                                    index]);
                                                      Navigator.push(
                                                          context,
                                                          CustomPageRoute(
                                                          page: LabResultByClinic(labOrder: model.patientLabOrders[index]),
                                                        ));
                                                    },
                                                    labOrder: model.patientLabOrders[index],
                                                    index: index,
                                                  isExpanded: isExpanded),
                                            ),
                                          ),
                                        )
                                      : Utils.getNoDataWidget(context, noDataText: "You don't have any lab results yet.".needTranslation);
                            },
                          )
                        // : ListView.builder(
                        //     shrinkWrap: true,
                        //     physics: NeverScrollableScrollPhysics(),
                        //     padding: EdgeInsets.zero,
                        //     itemCount: model.isLabOrdersLoading
                        //         ? 5
                        //         : model.uniqueTests.toList().isNotEmpty
                        //             ? model.uniqueTests.toList().length
                        //             : 1,
                        //     itemBuilder: (context, index) {
                        //       final isExpanded = expandedIndex == index;
                        //       return model.isLabOrdersLoading
                        //           ? LabResultItemView(
                        //               onTap: () {},
                        //               labOrder: null,
                        //               index: index,
                        //               isLoading: true,
                        //             )
                        //           : model.uniqueTests.toList().isNotEmpty
                        //               ? AnimationConfiguration.staggeredList(
                        //                   position: index,
                        //                   duration: const Duration(milliseconds: 500),
                        //                   child: SlideAnimation(
                        //                     verticalOffset: 100.0,
                        //                     child: FadeInAnimation(
                        //                         child: LabOrderByTest(
                        //                             appState: _appState,
                        //                             onTap: () {
                        //                               if (model.uniqueTests.toList()[index].model != null) {
                        //                                 rangeViewModel.flush();
                        //                                 model.getPatientLabResult(model.uniqueTests.toList()[index].model!, model.uniqueTests.toList()[index].description!,
                        //                                     (_appState.isArabic() ? model.uniqueTests.toList()[index].testDescriptionAr! : model.uniqueTests.toList()[index].testDescriptionEn!));
                        //                               }
                        //                             },
                        //                             tests: model.uniqueTests.toList()[index],
                        //                             index: index,
                        //                         isExpanded: isExpanded)),
                        //               ),
                        //                 )
                        //               : Utils.getNoDataWidget(context, noDataText: "You don't have any lab results yet.".needTranslation);
                        //     },
                        //   )
                    :AlphabeticScroll(
                      alpahbetsAvailable: model.indexedCharacterForUniqueTest,
                      details: model.uniqueTestsList,
                      labViewModel: model,
                      rangeViewModel: rangeViewModel,
                      appState: _appState,
                    )
                  ],
                );
              },
            ),
          ),
        ));
  }

  Color getLabOrderStatusColor(num status) {
    switch (status) {
      case 44:
        return AppColors.warningColorYellow;
      case 45:
        return AppColors.warningColorYellow;
      case 16:
        return AppColors.successColor;
      case 17:
        return AppColors.successColor;
      default:
        return AppColors.greyColor;
    }
  }

  String getLabOrderStatusText(num status) {
    switch (status) {
      case 44:
        return LocaleKeys.resultsPending.tr(context: context);
      case 45:
        return LocaleKeys.resultsPending.tr(context: context);
      case 16:
        return LocaleKeys.resultsAvailable.tr(context: context);
      case 17:
        return LocaleKeys.resultsAvailable.tr(context: context);
      default:
        return "";
    }
  }

  getLabSuggestions(LabViewModel model) {
    if (model.patientLabOrders.isEmpty) {
      return [];
    }
    return model.patientLabOrders.map((m) => m.testDetails).toList();
  }
}
\ No newline at end of file
+import 'dart:async';

import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_staggered_animations/flutter_staggered_animations.dart';
import 'package:hmg_patient_app_new/core/app_state.dart';
import 'package:hmg_patient_app_new/core/dependencies.dart';
import 'package:hmg_patient_app_new/core/enums.dart';
import 'package:hmg_patient_app_new/core/utils/size_utils.dart';
import 'package:hmg_patient_app_new/core/utils/utils.dart';
import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
import 'package:hmg_patient_app_new/features/lab/models/resp_models/patient_lab_orders_response_model.dart';
import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
import 'package:hmg_patient_app_new/features/lab/lab_view_model.dart';
import 'package:hmg_patient_app_new/presentation/lab/lab_order_by_test.dart';
import 'package:hmg_patient_app_new/presentation/lab/lab_result_item_view.dart';
import 'package:hmg_patient_app_new/presentation/lab/lab_result_via_clinic/LabResultByClinic.dart';
import 'package:hmg_patient_app_new/presentation/lab/search_lab_report.dart';
import 'package:hmg_patient_app_new/theme/colors.dart';
import 'package:hmg_patient_app_new/widgets/appbar/collapsing_toolbar.dart';
import 'package:hmg_patient_app_new/widgets/chip/custom_chip_widget.dart';
import 'package:hmg_patient_app_new/widgets/date_range_selector/viewmodel/date_range_view_model.dart';
import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart';
import 'package:hmg_patient_app_new/widgets/transitions/fade_page.dart';
import 'package:provider/provider.dart';
import 'package:hmg_patient_app_new/widgets/custom_tab_bar.dart';
import '../../widgets/appbar/collapsing_list_view.dart';
import 'alphabeticScroll.dart';

class LabOrdersPage extends StatefulWidget {
  const LabOrdersPage({super.key});

  @override
  State createState() => _LabOrdersPageState();
}

class _LabOrdersPageState extends State {
  late LabViewModel labProvider;
  late DateRangeSelectorRangeViewModel rangeViewModel;
  late AppState _appState;
  List?> labSuggestions = [];
  int? expandedIndex;
  String? selectedFilterText = '';
  int activeIndex = 0;

  @override
  void initState() {
    scheduleMicrotask(() {
      labProvider.initLabProvider();
    });
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    labProvider = Provider.of(context, listen: false);
    rangeViewModel = Provider.of(context);
    _appState = getIt();

    return Scaffold(
        backgroundColor: AppColors.bgScaffoldColor,
        body: CollapsingToolbar(
          title: LocaleKeys.labResults.tr(),
          search: () async {
            final lavVM = Provider.of(context, listen: false);
            if (lavVM.isLabOrdersLoading) {
              return;
            } else {
              String? value = await Navigator.of(context).push(
                CustomPageRoute(
                  page: SearchLabResultsContent(labSuggestionsList: lavVM.labSuggestions),
                  fullScreenDialog: true,
                  direction: AxisDirection.down,
                ),
              );
              if (value != null) {
                selectedFilterText = value;
                lavVM.filterLabReports(value);
              }
            }
          },
          child: SingleChildScrollView(
            padding: EdgeInsets.all(24.h),
            physics: NeverScrollableScrollPhysics(),
            child: Consumer(
              builder: (context, model, child) {
                return Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: [
                    CustomTabBar(
                      activeTextColor: Color(0xffED1C2B),
                      activeBackgroundColor: Color(0xffED1C2B).withValues(alpha: .1),
                      tabs: [
                        CustomTabBarModel(null, "By Visit".needTranslation),
                        CustomTabBarModel(null, "By Test".needTranslation),
                        // CustomTabBarModel(null, "Completed".needTranslation),
                      ],
                      onTabChange: (index) {
                        activeIndex = index;
                        setState(() {});
                      },
                    ),
                    SizedBox(height: 8.h),
                    selectedFilterText!.isNotEmpty
                        ? CustomChipWidget(
                            chipText: selectedFilterText!,
                            chipType: ChipTypeEnum.alert,
                            isSelected: true,
                          )
                        : SizedBox(),
                    activeIndex == 0
                        ? ListView.builder(
                            shrinkWrap: true,
                            physics: NeverScrollableScrollPhysics(),
                            padding: EdgeInsets.zero,
                            itemCount: model.isLabOrdersLoading
                                ? 5
                                : model.patientLabOrders.isNotEmpty
                                    ? model.patientLabOrders.length
                                    : 1,
                            itemBuilder: (context, index) {
                              final isExpanded = expandedIndex == index;
                              return model.isLabOrdersLoading
                                  ? LabResultItemView(
                                      onTap: () {},
                                      labOrder: null,
                                      index: index,
                                      isLoading: true,
                                    )
                                  : model.patientLabOrders.isNotEmpty
                                      ? AnimationConfiguration.staggeredList(
                                          position: index,
                                          duration: const Duration(milliseconds: 500),
                                          child: SlideAnimation(
                                            verticalOffset: 100.0,
                                            child: FadeInAnimation(
                                                child: LabResultItemView(
                                                    onTap: () {
                                                      model.currentlySelectedPatientOrder =
                                                          model.patientLabOrders[
                                                              index];
                                                    labProvider.getPatientLabResultByHospital(model.patientLabOrders[
                                                                    index]);
                                                        labProvider
                                                            .getPatientSpecialResult(
                                                                model.patientLabOrders[
                                                                    index]);
                                                      Navigator.push(
                                                          context,
                                                          CustomPageRoute(
                                                          page: LabResultByClinic(labOrder: model.patientLabOrders[index]),
                                                        ));
                                                    },
                                                    labOrder: model.patientLabOrders[index],
                                                    index: index,
                                                  isExpanded: isExpanded),
                                            ),
                                          ),
                                        )
                                      : Utils.getNoDataWidget(context, noDataText: "You don't have any lab results yet.".needTranslation);
                            },
                          )
                        // : ListView.builder(
                        //     shrinkWrap: true,
                        //     physics: NeverScrollableScrollPhysics(),
                        //     padding: EdgeInsets.zero,
                        //     itemCount: model.isLabOrdersLoading
                        //         ? 5
                        //         : model.uniqueTests.toList().isNotEmpty
                        //             ? model.uniqueTests.toList().length
                        //             : 1,
                        //     itemBuilder: (context, index) {
                        //       final isExpanded = expandedIndex == index;
                        //       return model.isLabOrdersLoading
                        //           ? LabResultItemView(
                        //               onTap: () {},
                        //               labOrder: null,
                        //               index: index,
                        //               isLoading: true,
                        //             )
                        //           : model.uniqueTests.toList().isNotEmpty
                        //               ? AnimationConfiguration.staggeredList(
                        //                   position: index,
                        //                   duration: const Duration(milliseconds: 500),
                        //                   child: SlideAnimation(
                        //                     verticalOffset: 100.0,
                        //                     child: FadeInAnimation(
                        //                         child: LabOrderByTest(
                        //                             appState: _appState,
                        //                             onTap: () {
                        //                               if (model.uniqueTests.toList()[index].model != null) {
                        //                                 rangeViewModel.flush();
                        //                                 model.getPatientLabResult(model.uniqueTests.toList()[index].model!, model.uniqueTests.toList()[index].description!,
                        //                                     (_appState.isArabic() ? model.uniqueTests.toList()[index].testDescriptionAr! : model.uniqueTests.toList()[index].testDescriptionEn!));
                        //                               }
                        //                             },
                        //                             tests: model.uniqueTests.toList()[index],
                        //                             index: index,
                        //                         isExpanded: isExpanded)),
                        //               ),
                        //                 )
                        //               : Utils.getNoDataWidget(context, noDataText: "You don't have any lab results yet.".needTranslation);
                        //     },
                        //   )
                        : (model.isLabOrdersLoading)
                            ? Column(
                                children: List.generate(
                                    5,
                                    (index) => LabResultItemView(
                                          onTap: () {},
                                          labOrder: null,
                                          index: index,
                                          isLoading: true,
                                        )),
                              )
                            :AlphabeticScroll(
                      alpahbetsAvailable: model.indexedCharacterForUniqueTest,
                      details: model.uniqueTestsList,
                      labViewModel: model,
                      rangeViewModel: rangeViewModel,
                      appState: _appState,
                    )
                  ],
                );
              },
            ),
          ),
        ));
  }

  Color getLabOrderStatusColor(num status) {
    switch (status) {
      case 44:
        return AppColors.warningColorYellow;
      case 45:
        return AppColors.warningColorYellow;
      case 16:
        return AppColors.successColor;
      case 17:
        return AppColors.successColor;
      default:
        return AppColors.greyColor;
    }
  }

  String getLabOrderStatusText(num status) {
    switch (status) {
      case 44:
        return LocaleKeys.resultsPending.tr(context: context);
      case 45:
        return LocaleKeys.resultsPending.tr(context: context);
      case 16:
        return LocaleKeys.resultsAvailable.tr(context: context);
      case 17:
        return LocaleKeys.resultsAvailable.tr(context: context);
      default:
        return "";
    }
  }

  getLabSuggestions(LabViewModel model) {
    if (model.patientLabOrders.isEmpty) {
      return [];
    }
    return model.patientLabOrders.map((m) => m.testDetails).toList();
  }
}
\ No newline at end of file
-- 
2.30.2


From a83a35a2846852c9fc3aef9da3e7fad958e77e3c Mon Sep 17 00:00:00 2001
From: haroon amjad 
Date: Wed, 10 Dec 2025 14:11:53 +0300
Subject: [PATCH 34/39] Services Page Revamp

---
 assets/images/svg/blood_donation_icon.svg     |   4 +
 assets/images/svg/car_parking_icon.svg        |   4 +
 assets/images/svg/e-referral.svg              |  12 +-
 assets/images/svg/hmg_contact_icon.svg        |   6 +
 assets/images/svg/latest_news_icon.svg        |   3 +
 .../images/svg/services_medical_file_icon.svg |   8 +
 assets/images/svg/virtual_tour_icon.svg       |   3 +
 lib/core/app_assets.dart                      |   6 +
 .../blood_donation_view_model.dart            |  19 +-
 .../hmg_services_component_model.dart         |   2 -
 lib/generated/locale_keys.g.dart              |   2 +-
 .../blood_donation/blood_donation_page.dart   |  47 +-
 .../widgets/select_blood_group_widget.dart    |  67 +++
 .../widgets/select_gender_widget.dart         |  67 +++
 .../hmg_services/services_page.dart           | 430 +++++++++++++++---
 .../hmg_services/services_view.dart           |  26 +-
 lib/theme/colors.dart                         |   5 +
 17 files changed, 617 insertions(+), 94 deletions(-)
 create mode 100644 assets/images/svg/blood_donation_icon.svg
 create mode 100644 assets/images/svg/car_parking_icon.svg
 create mode 100644 assets/images/svg/hmg_contact_icon.svg
 create mode 100644 assets/images/svg/latest_news_icon.svg
 create mode 100644 assets/images/svg/services_medical_file_icon.svg
 create mode 100644 assets/images/svg/virtual_tour_icon.svg
 create mode 100644 lib/presentation/blood_donation/widgets/select_blood_group_widget.dart
 create mode 100644 lib/presentation/blood_donation/widgets/select_gender_widget.dart

diff --git a/assets/images/svg/blood_donation_icon.svg b/assets/images/svg/blood_donation_icon.svg
new file mode 100644
index 0000000..2a90705
--- /dev/null
+++ b/assets/images/svg/blood_donation_icon.svg
@@ -0,0 +1,4 @@
+
+    
+    
+
diff --git a/assets/images/svg/car_parking_icon.svg b/assets/images/svg/car_parking_icon.svg
new file mode 100644
index 0000000..f77afa0
--- /dev/null
+++ b/assets/images/svg/car_parking_icon.svg
@@ -0,0 +1,4 @@
+
+    
+    
+
diff --git a/assets/images/svg/e-referral.svg b/assets/images/svg/e-referral.svg
index 3262779..758affc 100644
--- a/assets/images/svg/e-referral.svg
+++ b/assets/images/svg/e-referral.svg
@@ -1,7 +1,7 @@
-
-
-
-
-
-
+
+    
+    
+    
+    
+    
 
diff --git a/assets/images/svg/hmg_contact_icon.svg b/assets/images/svg/hmg_contact_icon.svg
new file mode 100644
index 0000000..c6c427b
--- /dev/null
+++ b/assets/images/svg/hmg_contact_icon.svg
@@ -0,0 +1,6 @@
+
+    
+    
+    
+    
+
diff --git a/assets/images/svg/latest_news_icon.svg b/assets/images/svg/latest_news_icon.svg
new file mode 100644
index 0000000..6dbb4de
--- /dev/null
+++ b/assets/images/svg/latest_news_icon.svg
@@ -0,0 +1,3 @@
+
+    
+
diff --git a/assets/images/svg/services_medical_file_icon.svg b/assets/images/svg/services_medical_file_icon.svg
new file mode 100644
index 0000000..7286054
--- /dev/null
+++ b/assets/images/svg/services_medical_file_icon.svg
@@ -0,0 +1,8 @@
+
+    
+    
+    
+    
+    
+    
+
diff --git a/assets/images/svg/virtual_tour_icon.svg b/assets/images/svg/virtual_tour_icon.svg
new file mode 100644
index 0000000..f7eb64f
--- /dev/null
+++ b/assets/images/svg/virtual_tour_icon.svg
@@ -0,0 +1,3 @@
+
+    
+
diff --git a/lib/core/app_assets.dart b/lib/core/app_assets.dart
index 95f24ca..1c17024 100644
--- a/lib/core/app_assets.dart
+++ b/lib/core/app_assets.dart
@@ -182,6 +182,12 @@ class AppAssets {
   static const String call_for_doctor = '$svgBasePath/call_for_doctor.svg';
   static const String bulb_icon = '$svgBasePath/bulb_icon.svg';
   static const String select_city_icon = '$svgBasePath/select_city_icon.svg';
+  static const String blood_donation_icon = '$svgBasePath/blood_donation_icon.svg';
+  static const String virtual_tour_icon = '$svgBasePath/virtual_tour_icon.svg';
+  static const String car_parking_icon = '$svgBasePath/car_parking_icon.svg';
+  static const String latest_news_icon = '$svgBasePath/latest_news_icon.svg';
+  static const String hmg_contact_icon = '$svgBasePath/hmg_contact_icon.svg';
+  static const String services_medical_file_icon = '$svgBasePath/services_medical_file_icon.svg';
 
 
   //bottom navigation//
diff --git a/lib/features/blood_donation/blood_donation_view_model.dart b/lib/features/blood_donation/blood_donation_view_model.dart
index 7d2e5df..f345359 100644
--- a/lib/features/blood_donation/blood_donation_view_model.dart
+++ b/lib/features/blood_donation/blood_donation_view_model.dart
@@ -1,9 +1,11 @@
+import 'package:easy_localization/easy_localization.dart';
 import 'package:flutter/material.dart';
 import 'package:hmg_patient_app_new/core/app_state.dart';
 import 'package:hmg_patient_app_new/features/blood_donation/blood_donation_repo.dart';
 import 'package:hmg_patient_app_new/features/blood_donation/models/blood_group_list_model.dart';
 import 'package:hmg_patient_app_new/features/blood_donation/models/blood_group_response_model.dart';
 import 'package:hmg_patient_app_new/features/blood_donation/models/cities_model.dart';
+import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
 import 'package:hmg_patient_app_new/services/dialog_service.dart';
 import 'package:hmg_patient_app_new/services/error_handler_service.dart';
 import 'package:hmg_patient_app_new/services/navigation_service.dart';
@@ -27,11 +29,16 @@ class BloodDonationViewModel extends ChangeNotifier {
     BloodGroupListModel("B-", 7),
   ];
 
+  List genderList = [
+    BloodGroupListModel(LocaleKeys.malE.tr(), 1),
+    BloodGroupListModel(LocaleKeys.female.tr(), 2),
+  ];
+
   late CitiesModel selectedCity;
   late BloodGroupListModel selectedBloodGroup;
   int _selectedHospitalIndex = 0;
   int _selectedBloodTypeIndex = 0;
-  String _selectedBloodType = '';
+  String selectedBloodType = '';
 
   List_BloodGroupDetailsModel patientBloodGroupDetailsModel = List_BloodGroupDetailsModel();
 
@@ -42,6 +49,12 @@ class BloodDonationViewModel extends ChangeNotifier {
     notifyListeners();
   }
 
+  setSelectedBloodGroup(BloodGroupListModel bloodGroup) {
+    selectedBloodGroup = bloodGroup;
+    selectedBloodType = selectedBloodGroup.name;
+    notifyListeners();
+  }
+
   Future getRegionSelectedClinics({Function(dynamic)? onSuccess, Function(String)? onError}) async {
     citiesList.clear();
     selectedCity = CitiesModel();
@@ -85,8 +98,8 @@ class BloodDonationViewModel extends ChangeNotifier {
           citiesModel.description = citiesList[_selectedHospitalIndex].description;
           citiesModel.descriptionN = citiesList[_selectedHospitalIndex].descriptionN;
           selectedCity = citiesModel;
-          _selectedBloodType = patientBloodGroupDetailsModel.bloodGroup!;
-          _selectedBloodTypeIndex = getBloodIndex(_selectedBloodType);
+          selectedBloodType = patientBloodGroupDetailsModel.bloodGroup!;
+          _selectedBloodTypeIndex = getBloodIndex(selectedBloodType);
 
           notifyListeners();
           if (onSuccess != null) {
diff --git a/lib/features/hmg_services/models/ui_models/hmg_services_component_model.dart b/lib/features/hmg_services/models/ui_models/hmg_services_component_model.dart
index d6e2654..7a92198 100644
--- a/lib/features/hmg_services/models/ui_models/hmg_services_component_model.dart
+++ b/lib/features/hmg_services/models/ui_models/hmg_services_component_model.dart
@@ -9,7 +9,6 @@ class HmgServicesComponentModel {
   bool isLogin;
   bool isLocked;
   Color bgColor;
-  Color textColor;
   String? route;
   Function? onTap;
 
@@ -22,7 +21,6 @@ class HmgServicesComponentModel {
     this.isLogin, {
     this.isLocked = false,
     this.bgColor = Colors.white,
-    this.textColor = Colors.black,
     this.iconColor = Colors.white,
     this.route,
      this.onTap
diff --git a/lib/generated/locale_keys.g.dart b/lib/generated/locale_keys.g.dart
index 7433ff7..d76422b 100644
--- a/lib/generated/locale_keys.g.dart
+++ b/lib/generated/locale_keys.g.dart
@@ -801,7 +801,7 @@ abstract class LocaleKeys {
   static const fullName = 'fullName';
   static const married = 'married';
   static const uae = 'uae';
-  static const malE = 'malE';
+  static const malE = 'male';
   static const loginBy = 'loginBy';
   static const loginByOTP = 'loginByOTP';
   static const guest = 'guest';
diff --git a/lib/presentation/blood_donation/blood_donation_page.dart b/lib/presentation/blood_donation/blood_donation_page.dart
index 8908652..5f3fa86 100644
--- a/lib/presentation/blood_donation/blood_donation_page.dart
+++ b/lib/presentation/blood_donation/blood_donation_page.dart
@@ -9,12 +9,13 @@ import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
 import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
 import 'package:hmg_patient_app_new/features/blood_donation/blood_donation_view_model.dart';
 import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
+import 'package:hmg_patient_app_new/presentation/blood_donation/widgets/select_blood_group_widget.dart';
 import 'package:hmg_patient_app_new/presentation/blood_donation/widgets/select_city_widget.dart';
+import 'package:hmg_patient_app_new/presentation/blood_donation/widgets/select_gender_widget.dart';
 import 'package:hmg_patient_app_new/theme/colors.dart';
 import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart';
 import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart';
 import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart';
-import 'package:hmg_patient_app_new/widgets/loader/bottomsheet_loader.dart';
 import 'package:provider/provider.dart';
 
 class BloodDonationPage extends StatelessWidget {
@@ -69,19 +70,13 @@ class BloodDonationPage extends StatelessWidget {
                                 Utils.buildSvgWithAssets(icon: AppAssets.arrow_down, width: 25.h, height: 25.h),
                               ],
                             ).onPress(() async {
-                              LoaderBottomSheet.showLoader(loadingText: "Fetching Cities...");
-                              await bloodDonationVM.getRegionSelectedClinics(onSuccess: (val) {
-                                LoaderBottomSheet.hideLoader();
-                                showCommonBottomSheetWithoutHeight(context,
-                                    title: LocaleKeys.selectCity.tr(context: context),
-                                    isDismissible: true,
-                                    child: SelectCityWidget(
-                                      bloodDonationViewModel: bloodDonationVM,
-                                    ),
-                                    callBackFunc: () {});
-                              }, onError: (err) {
-                                LoaderBottomSheet.hideLoader();
-                              });
+                              showCommonBottomSheetWithoutHeight(context,
+                                  title: LocaleKeys.selectCity.tr(context: context),
+                                  isDismissible: true,
+                                  child: SelectCityWidget(
+                                    bloodDonationViewModel: bloodDonationVM,
+                                  ),
+                                  callBackFunc: () {});
                             }),
                             SizedBox(height: 16.h),
                             Divider(color: AppColors.borderOnlyColor.withValues(alpha: 0.1), height: 1.h),
@@ -104,7 +99,16 @@ class BloodDonationPage extends StatelessWidget {
                                 ),
                                 Utils.buildSvgWithAssets(icon: AppAssets.arrow_down, width: 25.h, height: 25.h),
                               ],
-                            ),
+                            ).onPress(() {
+                              showCommonBottomSheetWithoutHeight(context,
+                                  title: LocaleKeys.selectGender.tr(context: context),
+                                  isDismissible: true,
+                                  child: SelectGenderWidget(
+                                    isArabic: appState.isArabic(),
+                                    bloodDonationViewModel: bloodDonationVM,
+                                  ),
+                                  callBackFunc: () {});
+                            }),
                             SizedBox(height: 16.h),
                             Divider(color: AppColors.borderOnlyColor.withValues(alpha: 0.1), height: 1.h),
                             SizedBox(height: 16.h),
@@ -119,14 +123,23 @@ class BloodDonationPage extends StatelessWidget {
                                       crossAxisAlignment: CrossAxisAlignment.start,
                                       children: [
                                         LocaleKeys.bloodType.tr().toText16(color: AppColors.textColor, weight: FontWeight.w500),
-                                        "AB+".toText14(color: AppColors.greyTextColor, weight: FontWeight.w500),
+                                        bloodDonationVM.selectedBloodType.toText14(color: AppColors.greyTextColor, weight: FontWeight.w500),
                                       ],
                                     ),
                                   ],
                                 ),
                                 Utils.buildSvgWithAssets(icon: AppAssets.arrow_down, width: 25.h, height: 25.h),
                               ],
-                            ),
+                            ).onPress(() {
+                              showCommonBottomSheetWithoutHeight(context,
+                                  title: LocaleKeys.select.tr(context: context),
+                                  isDismissible: true,
+                                  child: SelectBloodGroupWidget(
+                                    isArabic: appState.isArabic(),
+                                    bloodDonationViewModel: bloodDonationVM,
+                                  ),
+                                  callBackFunc: () {});
+                            }),
                           ],
                         ),
                       ),
diff --git a/lib/presentation/blood_donation/widgets/select_blood_group_widget.dart b/lib/presentation/blood_donation/widgets/select_blood_group_widget.dart
new file mode 100644
index 0000000..f9cadb2
--- /dev/null
+++ b/lib/presentation/blood_donation/widgets/select_blood_group_widget.dart
@@ -0,0 +1,67 @@
+import 'package:flutter/material.dart';
+import 'package:hmg_patient_app_new/core/app_assets.dart';
+import 'package:hmg_patient_app_new/core/utils/size_utils.dart';
+import 'package:hmg_patient_app_new/core/utils/utils.dart';
+import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
+import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
+import 'package:hmg_patient_app_new/features/blood_donation/blood_donation_view_model.dart';
+import 'package:hmg_patient_app_new/presentation/blood_donation/widgets/city_list_item.dart';
+import 'package:hmg_patient_app_new/theme/colors.dart';
+
+class SelectBloodGroupWidget extends StatelessWidget {
+  SelectBloodGroupWidget({super.key, required this.bloodDonationViewModel, required this.isArabic});
+
+  BloodDonationViewModel bloodDonationViewModel;
+  bool isArabic;
+
+  @override
+  Widget build(BuildContext context) {
+    return Column(
+      crossAxisAlignment: CrossAxisAlignment.start,
+      children: [
+        SizedBox(height: 8.h),
+        SizedBox(
+          height: MediaQuery.sizeOf(context).height * .4,
+          child: ListView.separated(
+              itemBuilder: (_, index) {
+                return DecoratedBox(
+                    decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
+                      color: AppColors.whiteColor,
+                      borderRadius: 20.h,
+                      hasShadow: false,
+                    ),
+                    child: Row(
+                      mainAxisAlignment: MainAxisAlignment.spaceBetween,
+                      children: [
+                        Expanded(
+                          child: Column(
+                            crossAxisAlignment: CrossAxisAlignment.start,
+                            spacing: 8.h,
+                            children: [bloodDonationViewModel.bloodGroupList[index].name.toText16(color: AppColors.textColor, isBold: true)],
+                          ),
+                        ),
+                        Transform.flip(
+                          flipX: isArabic,
+                          child: Utils.buildSvgWithAssets(
+                            icon: AppAssets.forward_arrow_icon,
+                            iconColor: AppColors.blackColor,
+                            width: 40.h,
+                            height: 40.h,
+                            fit: BoxFit.contain,
+                          ),
+                        ),
+                      ],
+                    ).paddingSymmetrical(16.h, 16.h).onPress(() {
+                      bloodDonationViewModel.setSelectedBloodGroup(bloodDonationViewModel.bloodGroupList[index]);
+                      Navigator.of(context).pop();
+                    }));
+              },
+              separatorBuilder: (_, __) => SizedBox(
+                    height: 8.h,
+                  ),
+              itemCount: bloodDonationViewModel.bloodGroupList.length),
+        )
+      ],
+    );
+  }
+}
diff --git a/lib/presentation/blood_donation/widgets/select_gender_widget.dart b/lib/presentation/blood_donation/widgets/select_gender_widget.dart
new file mode 100644
index 0000000..b253331
--- /dev/null
+++ b/lib/presentation/blood_donation/widgets/select_gender_widget.dart
@@ -0,0 +1,67 @@
+import 'package:flutter/material.dart';
+import 'package:hmg_patient_app_new/core/app_assets.dart';
+import 'package:hmg_patient_app_new/core/utils/size_utils.dart';
+import 'package:hmg_patient_app_new/core/utils/utils.dart';
+import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
+import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
+import 'package:hmg_patient_app_new/features/blood_donation/blood_donation_view_model.dart';
+import 'package:hmg_patient_app_new/presentation/blood_donation/widgets/city_list_item.dart';
+import 'package:hmg_patient_app_new/theme/colors.dart';
+
+class SelectGenderWidget extends StatelessWidget {
+  SelectGenderWidget({super.key, required this.bloodDonationViewModel, required this.isArabic});
+
+  BloodDonationViewModel bloodDonationViewModel;
+  bool isArabic;
+
+  @override
+  Widget build(BuildContext context) {
+    return Column(
+      crossAxisAlignment: CrossAxisAlignment.start,
+      children: [
+        SizedBox(height: 8.h),
+        SizedBox(
+          height: MediaQuery.sizeOf(context).height * .4,
+          child: ListView.separated(
+              itemBuilder: (_, index) {
+                return DecoratedBox(
+                    decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
+                      color: AppColors.whiteColor,
+                      borderRadius: 20.h,
+                      hasShadow: false,
+                    ),
+                    child: Row(
+                      mainAxisAlignment: MainAxisAlignment.spaceBetween,
+                      children: [
+                        Expanded(
+                          child: Column(
+                            crossAxisAlignment: CrossAxisAlignment.start,
+                            spacing: 8.h,
+                            children: [bloodDonationViewModel.genderList[index].name.toText16(color: AppColors.textColor, isBold: true)],
+                          ),
+                        ),
+                        Transform.flip(
+                          flipX: isArabic,
+                          child: Utils.buildSvgWithAssets(
+                            icon: AppAssets.forward_arrow_icon,
+                            iconColor: AppColors.blackColor,
+                            width: 40.h,
+                            height: 40.h,
+                            fit: BoxFit.contain,
+                          ),
+                        ),
+                      ],
+                    ).paddingSymmetrical(16.h, 16.h).onPress(() {
+                  // bloodDonationViewModel.setSelectedCity(bloodDonationViewModel.citiesList[index]);
+                  Navigator.of(context).pop();
+                }));
+              },
+              separatorBuilder: (_, __) => SizedBox(
+                height: 8.h,
+              ),
+              itemCount: bloodDonationViewModel.genderList.length),
+        )
+      ],
+    );
+  }
+}
diff --git a/lib/presentation/hmg_services/services_page.dart b/lib/presentation/hmg_services/services_page.dart
index 1b9f3cd..ab70265 100644
--- a/lib/presentation/hmg_services/services_page.dart
+++ b/lib/presentation/hmg_services/services_page.dart
@@ -1,94 +1,141 @@
+import 'package:easy_localization/easy_localization.dart';
 import 'package:flutter/material.dart';
+import 'package:get_it/get_it.dart';
 import 'package:hmg_patient_app_new/core/app_assets.dart';
 import 'package:hmg_patient_app_new/core/app_export.dart';
+import 'package:hmg_patient_app_new/core/enums.dart';
 import 'package:hmg_patient_app_new/core/utils/utils.dart';
 import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
+import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
+import 'package:hmg_patient_app_new/features/blood_donation/blood_donation_view_model.dart';
+import 'package:hmg_patient_app_new/features/habib_wallet/habib_wallet_view_model.dart';
 import 'package:hmg_patient_app_new/features/hmg_services/models/ui_models/hmg_services_component_model.dart';
+import 'package:hmg_patient_app_new/features/medical_file/medical_file_view_model.dart';
+import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
+import 'package:hmg_patient_app_new/presentation/blood_donation/blood_donation_page.dart';
+import 'package:hmg_patient_app_new/presentation/contact_us/contact_us.dart';
+import 'package:hmg_patient_app_new/presentation/habib_wallet/habib_wallet_page.dart';
+import 'package:hmg_patient_app_new/presentation/habib_wallet/recharge_wallet_page.dart';
 import 'package:hmg_patient_app_new/presentation/hmg_services/services_view.dart';
+import 'package:hmg_patient_app_new/presentation/medical_file/medical_file_page.dart';
+import 'package:hmg_patient_app_new/services/dialog_service.dart';
+import 'package:hmg_patient_app_new/services/navigation_service.dart';
 import 'package:hmg_patient_app_new/theme/colors.dart';
 import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart';
+import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart';
+import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart';
+import 'package:hmg_patient_app_new/widgets/loader/bottomsheet_loader.dart';
+import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart';
+import 'package:provider/provider.dart';
+
+import '../../core/dependencies.dart' show getIt;
 
 class ServicesPage extends StatelessWidget {
   ServicesPage({super.key});
 
-  final List hmgServices = [
+  late BloodDonationViewModel bloodDonationViewModel;
+  late MedicalFileViewModel medicalFileViewModel;
+
+  late final List hmgServices = [
     HmgServicesComponentModel(
       11,
-      "E Referral Services".needTranslation,
+      "Emergency Services".needTranslation,
       "".needTranslation,
-      AppAssets.eReferral,
+      AppAssets.emergency_services_icon,
+      bgColor: AppColors.primaryRedColor,
+      true,
+      route: AppRoutes.eReferralPage,
+    ),
+    HmgServicesComponentModel(
+      11,
+      "Book\nAppointment".needTranslation,
+      "".needTranslation,
+      AppAssets.appointment_calendar_icon,
+      bgColor: AppColors.bookAppointment,
       true,
-      bgColor: Colors.orange,
-      textColor: AppColors.blackColor,
       route: AppRoutes.eReferralPage,
     ),
     HmgServicesComponentModel(
       5,
-      "Comprehensive Checkup".needTranslation,
+      "Complete Checkup".needTranslation,
       "".needTranslation,
       AppAssets.comprehensiveCheckup,
-      true,
       bgColor: AppColors.bgGreenColor,
-      textColor: AppColors.blackColor,
+      true,
       route: AppRoutes.comprehensiveCheckupPage,
     ),
     HmgServicesComponentModel(
-      3,
-      "Home Health Care".needTranslation,
+      11,
+      "E-Referral Services".needTranslation,
       "".needTranslation,
-      AppAssets.emergency_services_icon,
+      AppAssets.eReferral,
+      bgColor: AppColors.eReferralCardColor,
       true,
-      bgColor: AppColors.bgGreenColor,
-      textColor: AppColors.blackColor,
-      route: AppRoutes.homeHealthCarePage,
+      route: AppRoutes.eReferralPage,
     ),
+    HmgServicesComponentModel(3, "Blood Donation".needTranslation, "".needTranslation, AppAssets.blood_donation_icon, bgColor: AppColors.bloodDonationCardColor, true, route: null, onTap: () async {
+      LoaderBottomSheet.showLoader(loadingText: "Fetching Data...");
+      await bloodDonationViewModel.getRegionSelectedClinics(onSuccess: (val) async {
+        await bloodDonationViewModel.getPatientBloodGroupDetails(onSuccess: (val) {
+          LoaderBottomSheet.hideLoader();
+          Navigator.of(GetIt.instance().navigatorKey.currentContext!).push(
+            CustomPageRoute(
+              page: BloodDonationPage(),
+            ),
+          );
+        });
+      }, onError: (err) {
+        LoaderBottomSheet.hideLoader();
+      });
+    }),
     HmgServicesComponentModel(
       3,
-      "Blood Donation".needTranslation,
+      "Home Health Care".needTranslation,
       "".needTranslation,
-      AppAssets.emergency_services_icon,
+      AppAssets.homeBottom,
+      bgColor: AppColors.primaryRedColor,
       true,
-      bgColor: AppColors.bgGreenColor,
-      textColor: AppColors.blackColor,
-      route: AppRoutes.bloodDonationPage,
+      route: AppRoutes.homeHealthCarePage,
     ),
-    HmgServicesComponentModel(
-      11,
-      "Virtual Tour".needTranslation,
-      "".needTranslation,
-      AppAssets.my_address,
-      true,
-      bgColor: Colors.orange,
-      textColor: AppColors.blackColor,
-      route: null,
-      onTap:(){
-        Utils.openWebView(
-          url: 'https://hmgwebservices.com/vt_mobile/html/index.html',
-        );
-      },
-    )
+    // HmgServicesComponentModel(
+    //   11,
+    //   "Virtual Tour".needTranslation,
+    //   "".needTranslation,
+    //   AppAssets.my_address,
+    //   bgColor: AppColors.quickLoginColor,
+    //   true,
+    //   route: null,
+    //   onTap:(){
+    //     Utils.openWebView(
+    //       url: 'https://hmgwebservices.com/vt_mobile/html/index.html',
+    //     );
+    //   },
+    // )
   ];
 
   @override
   Widget build(BuildContext context) {
-    return CollapsingListView(
-      title: "Explore Services".needTranslation,
-      isLeading: Navigator.canPop(context),
-      child: Padding(
-        padding: EdgeInsets.symmetric(horizontal:  24.h),
-        child: Column(
-          crossAxisAlignment: CrossAxisAlignment.start,
-          children: [
-            "Medical & Care Services".needTranslation.toText18(isBold: true),
-            SizedBox(height: 20.h),
-            Padding(
-              padding: EdgeInsets.only(left: 16.w, right: 16.w, top: 0),
-              child: GridView.builder(
+    bloodDonationViewModel = Provider.of(context);
+    medicalFileViewModel = Provider.of(context);
+    return Scaffold(
+      backgroundColor: AppColors.bgScaffoldColor,
+      body: CollapsingListView(
+        title: "Explore Services".needTranslation,
+        isLeading: false,
+        child: Padding(
+          padding: EdgeInsets.symmetric(horizontal: 24.h),
+          child: Column(
+            crossAxisAlignment: CrossAxisAlignment.start,
+            children: [
+              SizedBox(height: 16.h),
+              "Medical & Care Services".needTranslation.toText18(isBold: true),
+              SizedBox(height: 16.h),
+              GridView.builder(
                 gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
-                  crossAxisCount: 3, // 4 icons per row
-                  crossAxisSpacing: 24.w,
-                  mainAxisSpacing: 0.h,
-                  childAspectRatio: 0.85,
+                  crossAxisCount: 4, // 4 icons per row
+                  crossAxisSpacing: 12.w,
+                  mainAxisSpacing: 18.h,
+                  childAspectRatio: 0.8,
                 ),
                 physics: NeverScrollableScrollPhysics(),
                 shrinkWrap: true,
@@ -98,8 +145,285 @@ class ServicesPage extends StatelessWidget {
                   return ServiceGridViewItem(hmgServices[index], index, false);
                 },
               ),
-            )
-          ],
+              SizedBox(height: 24.h),
+              "Personal Services".needTranslation.toText18(isBold: true),
+              SizedBox(height: 16.h),
+              Row(
+                children: [
+                  Expanded(
+                    child: Container(
+                      height: 170.h,
+                      padding: EdgeInsets.all(16.w),
+                      decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
+                        color: AppColors.whiteColor,
+                        borderRadius: 20.r,
+                        hasShadow: false,
+                      ),
+                      child: Column(
+                        crossAxisAlignment: CrossAxisAlignment.start,
+                        children: [
+                          Row(
+                            spacing: 8.w,
+                            crossAxisAlignment: CrossAxisAlignment.center,
+                            children: [
+                              Utils.buildSvgWithAssets(icon: AppAssets.wallet, width: 30.w, height: 30.h),
+                              "Habib Wallet".needTranslation.toText14(weight: FontWeight.w600, maxlines: 2).expanded,
+                              Utils.buildSvgWithAssets(icon: AppAssets.arrow_forward),
+                            ],
+                          ),
+                          Spacer(),
+                          Consumer(builder: (context, habibWalletVM, child) {
+                            return Utils.getPaymentAmountWithSymbol2(habibWalletVM.habibWalletAmount, isExpanded: false)
+                                .toShimmer2(isShow: habibWalletVM.isWalletAmountLoading, radius: 12.r, width: 80.w, height: 24.h);
+                          }),
+                          Spacer(),
+                          CustomButton(
+                            height: 40.h,
+                            icon: AppAssets.recharge_icon,
+                            iconSize: 16.w,
+                            iconColor: AppColors.infoColor,
+                            textColor: AppColors.infoColor,
+                            text: "Recharge".needTranslation,
+                            borderWidth: 0.w,
+                            fontWeight: FontWeight.w500,
+                            borderColor: Colors.transparent,
+                            backgroundColor: Color(0xff45A2F8).withValues(alpha: 0.08),
+                            padding: EdgeInsets.all(8.w),
+                            fontSize: 12.f,
+                            onPressed: () {
+                              Navigator.of(context).push(CustomPageRoute(page: RechargeWalletPage()));
+                            },
+                          ),
+                        ],
+                      ).onPress(() {
+                        Navigator.of(context).push(CustomPageRoute(page: HabibWalletPage()));
+                      }),
+                    ),
+                  ),
+                  SizedBox(width: 16.w),
+                  Expanded(
+                    child: Container(
+                      height: 170.h,
+                      padding: EdgeInsets.all(16.w),
+                      decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
+                        color: AppColors.whiteColor,
+                        borderRadius: 20.r,
+                        hasShadow: false,
+                      ),
+                      child: Column(
+                        crossAxisAlignment: CrossAxisAlignment.start,
+                        children: [
+                          Row(
+                            spacing: 8.w,
+                            crossAxisAlignment: CrossAxisAlignment.center,
+                            children: [
+                              Utils.buildSvgWithAssets(icon: AppAssets.services_medical_file_icon, width: 30.w, height: 30.h),
+                              "Medical Files".needTranslation.toText14(weight: FontWeight.w600, maxlines: 2).expanded,
+                              Utils.buildSvgWithAssets(icon: AppAssets.arrow_forward),
+                            ],
+                          ),
+                          Spacer(),
+                          Wrap(
+                            spacing: -8.h,
+                            // runSpacing: 0.h,
+                            children: [
+                              Utils.buildImgWithAssets(
+                                icon: AppAssets.babyGirlImg,
+                                height: 28.h,
+                                width: 28.w,
+                                border: 1,
+                                fit: BoxFit.contain,
+                                borderRadius: 50.r,
+                              ),
+                              Utils.buildImgWithAssets(
+                                icon: AppAssets.femaleImg,
+                                height: 28.h,
+                                width: 28.w,
+                                border: 1,
+                                borderRadius: 50.r,
+                                fit: BoxFit.contain,
+                              ),
+                              Utils.buildImgWithAssets(
+                                icon: AppAssets.male_img,
+                                height: 28.h,
+                                width: 28.w,
+                                border: 1,
+                                borderRadius: 50.r,
+                                fit: BoxFit.contain,
+                              ),
+                            ],
+                          ),
+                          Spacer(),
+                          CustomButton(
+                            height: 40.h,
+                            icon: AppAssets.add_icon,
+                            iconSize: 16.w,
+                            iconColor: AppColors.primaryRedColor,
+                            textColor: AppColors.primaryRedColor,
+                            text: "Add Member".needTranslation,
+                            borderWidth: 0.w,
+                            fontWeight: FontWeight.w500,
+                            borderColor: Colors.transparent,
+                            backgroundColor: AppColors.primaryRedColor.withValues(alpha: 0.08),
+                            padding: EdgeInsets.all(8.w),
+                            fontSize: 12.f,
+                            onPressed: () {
+                              DialogService dialogService = getIt.get();
+                              medicalFileViewModel.clearAuthValues();
+                              dialogService.showAddFamilyFileSheet(
+                                  label: "Add Family Member".needTranslation,
+                                  message: "Please fill the below field to add a new family member to your profile".needTranslation,
+                                  onVerificationPress: () {
+                                    medicalFileViewModel.addFamilyFile(otpTypeEnum: OTPTypeEnum.sms);
+                                  });
+                            },
+                          ),
+                        ],
+                      ).onPress(() {
+                        Navigator.of(context).push(
+                          CustomPageRoute(
+                            page: MedicalFilePage(),
+                          ),
+                        );
+                      }),
+                    ),
+                  ),
+                ],
+              ),
+              SizedBox(height: 24.h),
+              "Support Services".needTranslation.toText18(isBold: true),
+              SizedBox(height: 16.h),
+              Column(
+                crossAxisAlignment: CrossAxisAlignment.start,
+                children: [
+                  Row(
+                    children: [
+                      Expanded(
+                        child: Container(
+                          decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
+                            color: AppColors.whiteColor,
+                            borderRadius: 12.h,
+                            hasShadow: false,
+                          ),
+                          child: Padding(
+                            padding: EdgeInsets.all(16.h),
+                            child: Row(
+                              children: [
+                                Utils.buildSvgWithAssets(
+                                  icon: AppAssets.virtual_tour_icon,
+                                  width: 32.w,
+                                  height: 32.h,
+                                  fit: BoxFit.contain,
+                                ),
+                                SizedBox(width: 8.w),
+                                "Virtual Tour".needTranslation.toText12(fontWeight: FontWeight.w500)
+                              ],
+                            ),
+                          ),
+                        ).onPress(() {
+                          Utils.openWebView(
+                            url: 'https://hmgwebservices.com/vt_mobile/html/index.html',
+                          );
+                        }),
+                      ),
+                      SizedBox(width: 16.w),
+                      Expanded(
+                        child: Container(
+                          decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
+                            color: AppColors.whiteColor,
+                            borderRadius: 12.h,
+                            hasShadow: false,
+                          ),
+                          child: Padding(
+                            padding: EdgeInsets.all(16.h),
+                            child: Row(
+                              children: [
+                                Utils.buildSvgWithAssets(
+                                  icon: AppAssets.car_parking_icon,
+                                  width: 32.w,
+                                  height: 32.h,
+                                  fit: BoxFit.contain,
+                                ),
+                                SizedBox(width: 8.w),
+                                "Car Parking".needTranslation.toText12(fontWeight: FontWeight.w500)
+                              ],
+                            ),
+                          ),
+                        ),
+                      ),
+                    ],
+                  ),
+                  SizedBox(height: 16.h),
+                  Row(
+                    children: [
+                      Expanded(
+                        child: Container(
+                          decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
+                            color: AppColors.whiteColor,
+                            borderRadius: 12.h,
+                            hasShadow: false,
+                          ),
+                          child: Padding(
+                            padding: EdgeInsets.all(16.h),
+                            child: Row(
+                              children: [
+                                Utils.buildSvgWithAssets(
+                                  icon: AppAssets.latest_news_icon,
+                                  width: 32.w,
+                                  height: 32.h,
+                                  fit: BoxFit.contain,
+                                ),
+                                SizedBox(width: 8.w),
+                                "Latest News".needTranslation.toText12(fontWeight: FontWeight.w500)
+                              ],
+                            ),
+                          ),
+                        ).onPress(() {
+                          Utils.openWebView(
+                            url: 'https://x.com/HMG',
+                          );
+                        }),
+                      ),
+                      SizedBox(width: 16.w),
+                      Expanded(
+                        child: Container(
+                          decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
+                            color: AppColors.whiteColor,
+                            borderRadius: 12.h,
+                            hasShadow: false,
+                          ),
+                          child: Padding(
+                            padding: EdgeInsets.all(16.h),
+                            child: Row(
+                              children: [
+                                Utils.buildSvgWithAssets(
+                                  icon: AppAssets.hmg_contact_icon,
+                                  width: 32.w,
+                                  height: 32.h,
+                                  fit: BoxFit.contain,
+                                ),
+                                SizedBox(width: 8.w),
+                                "HMG Contact".needTranslation.toText12(fontWeight: FontWeight.w500)
+                              ],
+                            ),
+                          ),
+                        ).onPress(() {
+                          showCommonBottomSheetWithoutHeight(
+                            context,
+                            title: LocaleKeys.contactUs.tr(),
+                            child: ContactUs(),
+                            callBackFunc: () {},
+                            isFullScreen: false,
+                          );
+                        }),
+                      )
+                    ],
+                  )
+                ],
+              ),
+              SizedBox(height: 24.h),
+            ],
+          ),
         ),
       ),
     );
diff --git a/lib/presentation/hmg_services/services_view.dart b/lib/presentation/hmg_services/services_view.dart
index 2cd923f..b24b0b4 100644
--- a/lib/presentation/hmg_services/services_view.dart
+++ b/lib/presentation/hmg_services/services_view.dart
@@ -3,8 +3,10 @@ import 'package:hmg_patient_app_new/core/app_export.dart';
 import 'package:hmg_patient_app_new/core/dependencies.dart';
 import 'package:hmg_patient_app_new/core/utils/utils.dart';
 import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
+import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
 import 'package:hmg_patient_app_new/features/hmg_services/models/ui_models/hmg_services_component_model.dart';
 import 'package:hmg_patient_app_new/services/navigation_service.dart';
+import 'package:hmg_patient_app_new/theme/colors.dart';
 
 class ServiceGridViewItem extends StatelessWidget {
   final HmgServicesComponentModel hmgServiceComponentModel;
@@ -31,25 +33,25 @@ class ServiceGridViewItem extends StatelessWidget {
             Container(
               height: 48.h,
               width: 48.w,
-              padding: EdgeInsets.zero,
-              margin: EdgeInsets.zero,
-              decoration: BoxDecoration(
+              decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
                 color: hmgServiceComponentModel.bgColor,
-                borderRadius: BorderRadius.circular(12.r),
+                borderRadius: 12.r,
+                hasShadow: false,
               ),
-              child: Utils.buildSvgWithAssets(
-                icon: hmgServiceComponentModel.icon,
-                iconColor: hmgServiceComponentModel.iconColor,
-                height: 21.h,
-                width: 21.w,
-                fit: BoxFit.none,
+              child: Padding(
+                padding: EdgeInsets.all(12.h),
+                child: Utils.buildSvgWithAssets(
+                  icon: hmgServiceComponentModel.icon,
+                  iconColor: AppColors.whiteColor,
+                  fit: BoxFit.contain,
+                ),
               ),
             ),
             SizedBox(height: 5.h),
             hmgServiceComponentModel.title.toText12(
               fontWeight: FontWeight.w500,
-              color: hmgServiceComponentModel.textColor,
-              maxLine: 1,
+              color: AppColors.textColor,
+              maxLine: 2,
             ),
           ],
         ));
diff --git a/lib/theme/colors.dart b/lib/theme/colors.dart
index b3abe6a..7bee72d 100644
--- a/lib/theme/colors.dart
+++ b/lib/theme/colors.dart
@@ -81,4 +81,9 @@ class AppColors {
   static const Color infoBannerBorderColor = Color(0xFFFFE5B4);
   static const Color infoBannerIconColor = Color(0xFFCC9B14);
   static const Color infoBannerTextColor = Color(0xFF856404);
+
+  // Services Page Colors
+  static const Color eReferralCardColor = Color(0xFFFF8012);
+  static const Color bloodDonationCardColor = Color(0xFFFF5662);
+  static const Color bookAppointment = Color(0xFF415364);
 }
-- 
2.30.2


From 818534e9f618b460c6a8ee2108aa9e177082a1b6 Mon Sep 17 00:00:00 2001
From: haroon amjad 
Date: Wed, 10 Dec 2025 14:18:28 +0300
Subject: [PATCH 35/39] Master merged

---
 lib/presentation/lab/alphabeticScroll.dart | 1 -
 1 file changed, 1 deletion(-)

diff --git a/lib/presentation/lab/alphabeticScroll.dart b/lib/presentation/lab/alphabeticScroll.dart
index 7593ea1..e610d71 100644
--- a/lib/presentation/lab/alphabeticScroll.dart
+++ b/lib/presentation/lab/alphabeticScroll.dart
@@ -192,7 +192,6 @@ class _AlphabetScrollPageState extends State {
       itemCount: data.length,
       itemBuilder: (_, index) {
         final letter = alphabet[index].toLowerCase();
-        print("the letter is $letter");
         final items = data[letter]!;
         return Container(
           key: _offsetKeys[letter],
-- 
2.30.2


From c7c0a0ac093910f7a56db3dda9a7a268d7f6a566 Mon Sep 17 00:00:00 2001
From: faizatflutter 
Date: Thu, 11 Dec 2025 00:00:52 +0300
Subject: [PATCH 36/39] Added user_info module IAP

---
 assets/images/png/female_icon.png             | Bin 0 -> 31413 bytes
 assets/images/png/male_icon.png               | Bin 0 -> 20457 bytes
 assets/images/svg/calendar-grey.svg           |   8 +
 assets/images/svg/gender.svg                  |   4 +
 assets/images/svg/ruler.svg                   |   3 +
 assets/images/svg/tick.svg                    |   3 +
 assets/images/svg/weight-scale.svg            |   3 +
 lib/core/app_assets.dart                      |  13 +-
 .../symptoms_checker_view_model.dart          | 103 +++++++
 lib/presentation/authentication/login.dart    |   1 -
 .../book_appointment_page.dart                | 284 ++++++++++--------
 .../emergency_services_page.dart              |   6 +-
 lib/presentation/home/landing_page.dart       |   6 +-
 lib/presentation/home/navigation_screen.dart  |  12 +-
 .../organ_selector_screen.dart                |   2 +-
 .../symptoms_checker/risk_factors_screen.dart |   2 +-
 .../symptoms_checker/suggestions_screen.dart  |   2 +-
 .../symptoms_selector_screen.dart             |   2 +-
 .../symptoms_checker/triage_screen.dart       |   2 +-
 .../symptoms_checker/user_info_selection.dart | 187 ++++++++++++
 .../pages/age_selection_page.dart             |  36 +++
 .../pages/gender_selection_page.dart          |  75 +++++
 .../pages/height_selection_page.dart          | 175 +++++++++++
 .../pages/weight_selection_page.dart          | 236 +++++++++++++++
 .../user_info_flow_manager.dart               | 209 +++++++++++++
 .../widgets/user_info_progress_bar.dart       |  36 +++
 .../widgets/user_info_selection_scaffold.dart |  67 +++++
 .../widgets/user_info_sticky_bottom_card.dart |  68 +++++
 lib/routes/app_routes.dart                    |  24 +-
 lib/widgets/appbar/collapsing_list_view.dart  |   8 +-
 lib/widgets/input_widget.dart                 |  14 +-
 31 files changed, 1427 insertions(+), 164 deletions(-)
 create mode 100644 assets/images/png/female_icon.png
 create mode 100644 assets/images/png/male_icon.png
 create mode 100644 assets/images/svg/calendar-grey.svg
 create mode 100644 assets/images/svg/gender.svg
 create mode 100644 assets/images/svg/ruler.svg
 create mode 100644 assets/images/svg/tick.svg
 create mode 100644 assets/images/svg/weight-scale.svg
 create mode 100644 lib/presentation/symptoms_checker/user_info_selection.dart
 create mode 100644 lib/presentation/symptoms_checker/user_info_selection/pages/age_selection_page.dart
 create mode 100644 lib/presentation/symptoms_checker/user_info_selection/pages/gender_selection_page.dart
 create mode 100644 lib/presentation/symptoms_checker/user_info_selection/pages/height_selection_page.dart
 create mode 100644 lib/presentation/symptoms_checker/user_info_selection/pages/weight_selection_page.dart
 create mode 100644 lib/presentation/symptoms_checker/user_info_selection/user_info_flow_manager.dart
 create mode 100644 lib/presentation/symptoms_checker/user_info_selection/widgets/user_info_progress_bar.dart
 create mode 100644 lib/presentation/symptoms_checker/user_info_selection/widgets/user_info_selection_scaffold.dart
 create mode 100644 lib/presentation/symptoms_checker/user_info_selection/widgets/user_info_sticky_bottom_card.dart

diff --git a/assets/images/png/female_icon.png b/assets/images/png/female_icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..b41a542bbc7de9c09a3705557c0d47b33ac25301
GIT binary patch
literal 31413
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
F`X5SD6)*q*

literal 0
HcmV?d00001

diff --git a/assets/images/png/male_icon.png b/assets/images/png/male_icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..fa518fbd972a7d12c240479e9320f62538533c72
GIT binary patch
literal 20457
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
kAq@;Xi
+
+
+
+
+
+
+
diff --git a/assets/images/svg/gender.svg b/assets/images/svg/gender.svg
new file mode 100644
index 0000000..6819ba6
--- /dev/null
+++ b/assets/images/svg/gender.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/assets/images/svg/ruler.svg b/assets/images/svg/ruler.svg
new file mode 100644
index 0000000..a2e8c11
--- /dev/null
+++ b/assets/images/svg/ruler.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/assets/images/svg/tick.svg b/assets/images/svg/tick.svg
new file mode 100644
index 0000000..b6210c0
--- /dev/null
+++ b/assets/images/svg/tick.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/assets/images/svg/weight-scale.svg b/assets/images/svg/weight-scale.svg
new file mode 100644
index 0000000..c3329ff
--- /dev/null
+++ b/assets/images/svg/weight-scale.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/lib/core/app_assets.dart b/lib/core/app_assets.dart
index b369d62..2f806b6 100644
--- a/lib/core/app_assets.dart
+++ b/lib/core/app_assets.dart
@@ -195,8 +195,13 @@ class AppAssets {
   static const String heart = '$svgBasePath/heart.svg';
   static const String alertSquare = '$svgBasePath/alert-square.svg';
   static const String arrowRight = '$svgBasePath/arrow-right.svg';
+  static const String tickIcon = '$svgBasePath/tick.svg';
 
   // Symptoms Checker
+  static const String calendarGrey = '$svgBasePath/calendar-grey.svg';
+  static const String weightScale = '$svgBasePath/weight-scale.svg';
+  static const String rulerIcon = '$svgBasePath/ruler.svg';
+  static const String genderIcon = '$svgBasePath/gender.svg';
   static const String bodyIcon = '$svgBasePath/body_icon.svg';
   static const String rotateIcon = '$svgBasePath/rotate_icon.svg';
   static const String refreshIcon = '$svgBasePath/refresh.svg';
@@ -218,6 +223,8 @@ class AppAssets {
   static const String dummyUser = '$pngBasePath/dummy_user.png';
   static const String comprehensiveCheckupEn = '$pngBasePath/cc_en.png';
   static const String comprehensiveCheckupAr = '$pngBasePath/cc_er.png';
+  static const String maleIcon = '$pngBasePath/male_icon.png';
+  static const String femaleIcon = '$pngBasePath/female_icon.png';
 
   static const String fullBodyFront = '$pngBasePath/full_body_front.png';
   static const String fullBodyBack = '$pngBasePath/full_body_back.png';
@@ -236,9 +243,9 @@ class AppAnimations {
   static const String splashLaunching = '$lottieBasePath/splash_launching.json';
   static const String noData = '$lottieBasePath/Nodata.json';
   static const String ripple = '$lottieBasePath/Ripple.json';
-  static const String pending_loading_animation = '$lottieBasePath/pending_loading_animation.json';
+  static const String pendingLoadingAnimation = '$lottieBasePath/pending_loading_animation.json';
 
   static const String ambulance = '$lottieBasePath/ambulance.json';
-  static const String ambulance_alert = '$lottieBasePath/ambulance_alert.json';
-  static const String rrt_ambulance = '$lottieBasePath/rrt_ambulance.json';
+  static const String ambulanceAlert = '$lottieBasePath/ambulance_alert.json';
+  static const String rrtAmbulance = '$lottieBasePath/rrt_ambulance.json';
 }
diff --git a/lib/features/symptoms_checker/symptoms_checker_view_model.dart b/lib/features/symptoms_checker/symptoms_checker_view_model.dart
index a467d01..34a1754 100644
--- a/lib/features/symptoms_checker/symptoms_checker_view_model.dart
+++ b/lib/features/symptoms_checker/symptoms_checker_view_model.dart
@@ -36,10 +36,28 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
   // Selected symptoms tracking (organId -> Set of symptom IDs)
   final Map> _selectedSymptomsByOrgan = {};
 
+  // User Info Flow State
+  int _userInfoCurrentPage = 0;
+  String? _selectedGender;
+  int? _selectedAge;
+  double? _selectedHeight;
+  bool _isHeightCm = true;
+  double? _selectedWeight;
+  bool _isWeightKg = true;
+
   // Getters
 
   bool isPossibleConditionsLoading = false;
 
+  // User Info Getters
+  int get userInfoCurrentPage => _userInfoCurrentPage;
+  String? get selectedGender => _selectedGender;
+  int? get selectedAge => _selectedAge;
+  double? get selectedHeight => _selectedHeight;
+  bool get isHeightCm => _isHeightCm;
+  double? get selectedWeight => _selectedWeight;
+  bool get isWeightKg => _isWeightKg;
+
   BodyView get currentView => _currentView;
 
   Set get selectedOrganIds => _selectedOrganIds;
@@ -247,6 +265,91 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
     _isBottomSheetExpanded = false;
     _tooltipTimer?.cancel();
     _tooltipOrganId = null;
+    // Reset user info flow
+    _userInfoCurrentPage = 0;
+    _selectedGender = null;
+    _selectedAge = null;
+    _selectedHeight = null;
+    _isHeightCm = true;
+    _selectedWeight = null;
+    _isWeightKg = true;
+    notifyListeners();
+  }
+
+  // User Info Flow Methods
+
+  /// Set current page in user info flow
+  void setUserInfoPage(int page) {
+    _userInfoCurrentPage = page;
+    notifyListeners();
+  }
+
+  /// Navigate to next page in user info flow
+  void nextUserInfoPage() {
+    if (_userInfoCurrentPage < 3) {
+      _userInfoCurrentPage++;
+      notifyListeners();
+    }
+  }
+
+  /// Navigate to previous page in user info flow
+  void previousUserInfoPage() {
+    if (_userInfoCurrentPage > 0) {
+      _userInfoCurrentPage--;
+      notifyListeners();
+    }
+  }
+
+  /// Set selected gender
+  void setGender(String gender) {
+    _selectedGender = gender;
+    notifyListeners();
+  }
+
+  /// Set selected age
+  void setAge(int age) {
+    _selectedAge = age;
+    notifyListeners();
+  }
+
+  /// Set selected height
+  void setHeight(double height, bool isCm) {
+    _selectedHeight = height;
+    _isHeightCm = isCm;
+    notifyListeners();
+  }
+
+  /// Set selected weight
+  void setWeight(double weight, bool isKg) {
+    _selectedWeight = weight;
+    _isWeightKg = isKg;
+    notifyListeners();
+  }
+
+  /// Check if user info page is last
+  bool get isUserInfoLastPage => _userInfoCurrentPage == 3;
+
+  /// Validate and submit user info
+  Map getUserInfoData() {
+    return {
+      'gender': _selectedGender,
+      'age': _selectedAge,
+      'height': _selectedHeight,
+      'heightUnit': _isHeightCm ? 'cm' : 'ft',
+      'weight': _selectedWeight,
+      'weightUnit': _isWeightKg ? 'kg' : 'lbs',
+    };
+  }
+
+  /// Reset user info flow
+  void resetUserInfo() {
+    _userInfoCurrentPage = 0;
+    _selectedGender = null;
+    _selectedAge = null;
+    _selectedHeight = null;
+    _isHeightCm = true;
+    _selectedWeight = null;
+    _isWeightKg = true;
     notifyListeners();
   }
 
diff --git a/lib/presentation/authentication/login.dart b/lib/presentation/authentication/login.dart
index 28430a8..c14e957 100644
--- a/lib/presentation/authentication/login.dart
+++ b/lib/presentation/authentication/login.dart
@@ -1,7 +1,6 @@
 import 'package:easy_localization/easy_localization.dart';
 import 'package:flutter/gestures.dart';
 import 'package:flutter/material.dart';
-import 'package:flutter/services.dart';
 import 'package:hmg_patient_app_new/core/app_assets.dart';
 import 'package:hmg_patient_app_new/core/app_state.dart';
 import 'package:hmg_patient_app_new/core/dependencies.dart';
diff --git a/lib/presentation/book_appointment/book_appointment_page.dart b/lib/presentation/book_appointment/book_appointment_page.dart
index 0ad58cc..0e60a28 100644
--- a/lib/presentation/book_appointment/book_appointment_page.dart
+++ b/lib/presentation/book_appointment/book_appointment_page.dart
@@ -4,11 +4,11 @@ import 'package:easy_localization/easy_localization.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter_staggered_animations/flutter_staggered_animations.dart';
 import 'package:hmg_patient_app_new/core/app_assets.dart';
+import 'package:hmg_patient_app_new/core/app_export.dart';
 import 'package:hmg_patient_app_new/core/app_state.dart';
 import 'package:hmg_patient_app_new/core/dependencies.dart';
-import 'package:hmg_patient_app_new/core/utils/size_config.dart';
-import 'package:hmg_patient_app_new/core/utils/size_utils.dart';
 import 'package:hmg_patient_app_new/core/utils/utils.dart';
+import 'package:hmg_patient_app_new/extensions/route_extensions.dart';
 import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
 import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
 import 'package:hmg_patient_app_new/features/authentication/authentication_view_model.dart';
@@ -25,7 +25,6 @@ import 'package:hmg_patient_app_new/presentation/book_appointment/livecare/immed
 import 'package:hmg_patient_app_new/presentation/book_appointment/livecare/select_immediate_livecare_clinic_page.dart';
 import 'package:hmg_patient_app_new/presentation/book_appointment/search_doctor_by_name.dart';
 import 'package:hmg_patient_app_new/presentation/book_appointment/select_clinic_page.dart';
-import 'package:hmg_patient_app_new/presentation/home/navigation_screen.dart';
 import 'package:hmg_patient_app_new/theme/colors.dart';
 import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart';
 import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart';
@@ -71,145 +70,137 @@ class _BookAppointmentPageState extends State {
     regionalViewModel = Provider.of(context, listen: true);
     return Scaffold(
       backgroundColor: AppColors.bgScaffoldColor,
-      body: CollapsingListView(
-        title: LocaleKeys.bookAppo.tr(context: context),
-        isLeading: true,
-        leadingCallback: () {
-          Navigator.pushAndRemoveUntil(
-              context,
-              CustomPageRoute(
-                page: LandingNavigation(),
-              ),
-              (r) => false);
-        },
-        child: SingleChildScrollView(
-          child: Consumer(builder: (context, bookAppointmentsVM, child) {
-            return Column(
-              crossAxisAlignment: CrossAxisAlignment.start,
-              children: [
-                SizedBox(height: 16.h),
-                CustomTabBar(
-                  activeTextColor: Color(0xffED1C2B),
-                  activeBackgroundColor: Color(0xffED1C2B).withValues(alpha: .1),
-                  tabs: [
-                    CustomTabBarModel(null, "General".needTranslation),
-                    CustomTabBarModel(null, "LiveCare".needTranslation),
-                  ],
-                  onTabChange: (index) {
-                    bookAppointmentsVM.onTabChanged(index);
-                  },
-                ).paddingSymmetrical(24.h, 0.h),
-                SizedBox(height: 24.h),
-                getSelectedTabData(bookAppointmentsVM.selectedTabIndex),
-                SizedBox(height: 24.h),
-                "Recent Visits".needTranslation.toText18(isBold: true).paddingSymmetrical(24.w, 0.h),
-                SizedBox(height: 16.h),
-                Consumer(builder: (context, myAppointmentsVM, child) {
-                  return myAppointmentsVM.isPatientMyDoctorsLoading
-                      ? Column(
-                    crossAxisAlignment: CrossAxisAlignment.center,
+      body: Column(
+        children: [
+          Expanded(
+            child: CollapsingListView(
+              title: LocaleKeys.bookAppo.tr(context: context),
+              isLeading: true,
+              child: SingleChildScrollView(
+                child: Consumer(builder: (context, bookAppointmentsVM, child) {
+                  return Column(
+                    crossAxisAlignment: CrossAxisAlignment.start,
                     children: [
-                      Image.network(
-                        "https://hmgwebservices.com/Images/MobileImages/DUBAI/unkown_female.png",
-                        width: 64.w,
-                        height: 64.h,
-                        fit: BoxFit.cover,
-                      ).circle(100).toShimmer2(isShow: true, radius: 50.r),
-                      SizedBox(height: 8.h),
-                      ("Dr. John Smith Smith Smith")
-                          .toString()
-                          .toText12(fontWeight: FontWeight.w500, isCenter: true, maxLine: 2)
-                          .toShimmer2(isShow: true),
-                    ],
-                  )
-                      : myAppointmentsVM.patientMyDoctorsList.isEmpty
-                      ? Container(
-                    width: SizeConfig.screenWidth,
-                    decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
-                      color: AppColors.whiteColor,
-                      borderRadius: 12.r,
-                      hasShadow: false,
-                    ),
-                    child: Utils.getNoDataWidget(
-                      context,
-                      noDataText: "You don't have any completed visits yet".needTranslation,
-                      isSmallWidget: true,
-                      width: 62.w,
-                      height: 62.h,
-                    ),
-                  ).paddingSymmetrical(24.w, 0.h)
-                      : SizedBox(
-                    height: 110.h,
-                    child: ListView.separated(
-                      scrollDirection: Axis.horizontal,
-                      itemCount: myAppointmentsVM.patientMyDoctorsList.length,
-                      shrinkWrap: true,
-                      padding: EdgeInsets.only(left: 24.w, right: 24.w),
-                      itemBuilder: (context, index) {
-                        return AnimationConfiguration.staggeredList(
-                          position: index,
-                          duration: const Duration(milliseconds: 1000),
-                          child: SlideAnimation(
-                            horizontalOffset: 100.0,
-                            child: FadeInAnimation(
-                              child: SizedBox(
-                                // width: 80.w,
-                                child: Column(
+                      SizedBox(height: 16.h),
+                      CustomTabBar(
+                        activeTextColor: Color(0xffED1C2B),
+                        activeBackgroundColor: Color(0xffED1C2B).withValues(alpha: .1),
+                        tabs: [
+                          CustomTabBarModel(null, "General".needTranslation),
+                          CustomTabBarModel(null, "LiveCare".needTranslation),
+                        ],
+                        onTabChange: (index) {
+                          bookAppointmentsVM.onTabChanged(index);
+                        },
+                      ).paddingSymmetrical(24.h, 0.h),
+                      SizedBox(height: 24.h),
+                      getSelectedTabData(bookAppointmentsVM.selectedTabIndex),
+                      SizedBox(height: 24.h),
+                      if (appState.isAuthenticated) ...[
+                        Consumer(builder: (context, myAppointmentsVM, child) {
+                          return myAppointmentsVM.isPatientMyDoctorsLoading
+                              ? Column(
                                   crossAxisAlignment: CrossAxisAlignment.center,
                                   children: [
                                     Image.network(
-                                      myAppointmentsVM.patientMyDoctorsList[index].doctorImageURL!,
+                                      "https://hmgwebservices.com/Images/MobileImages/DUBAI/unkown_female.png",
                                       width: 64.w,
                                       height: 64.h,
                                       fit: BoxFit.cover,
-                                    ).circle(100).toShimmer2(isShow: false, radius: 50.r),
+                                    ).circle(100).toShimmer2(isShow: true, radius: 50.r),
                                     SizedBox(height: 8.h),
-                                    SizedBox(
-                                      width: 80.w,
-                                      child: (myAppointmentsVM.patientMyDoctorsList[index].doctorName)
-                                          .toString()
-                                          .toText12(fontWeight: FontWeight.w500, isCenter: true, maxLine: 2)
-                                          .toShimmer2(isShow: false),
-                                    ),
+                                    ("Dr. John Smith Smith Smith")
+                                        .toString()
+                                        .toText12(fontWeight: FontWeight.w500, isCenter: true, maxLine: 2)
+                                        .toShimmer2(isShow: true),
                                   ],
-                                ),
-                              ).onPress(() async {
-                                bookAppointmentsViewModel.setSelectedDoctor(DoctorsListResponseModel(
-                                  clinicID: myAppointmentsVM.patientMyDoctorsList[index].clinicID,
-                                  projectID: myAppointmentsVM.patientMyDoctorsList[index].projectID,
-                                  doctorID: myAppointmentsVM.patientMyDoctorsList[index].doctorID,
-                                ));
-                                LoaderBottomSheet.showLoader();
-                                await bookAppointmentsViewModel.getDoctorProfile(onSuccess: (dynamic respData) {
-                                  LoaderBottomSheet.hideLoader();
-                                  Navigator.of(context).push(
-                                    CustomPageRoute(
-                                      page: DoctorProfilePage(),
-                                    ),
-                                  );
-                                }, onError: (err) {
-                                  LoaderBottomSheet.hideLoader();
-                                  showCommonBottomSheetWithoutHeight(
-                                    context,
-                                    child: Utils.getErrorWidget(loadingText: err),
-                                    callBackFunc: () {},
-                                    isFullScreen: false,
-                                    isCloseButtonVisible: true,
-                                  );
-                                });
-                              }),
-                            ),
-                          ),
-                        );
-                      },
-                      separatorBuilder: (BuildContext cxt, int index) => SizedBox(width: 8.h),
-                    ),
+                                )
+                              : myAppointmentsVM.patientMyDoctorsList.isEmpty
+                                  ? SizedBox()
+                                  : Column(
+                                      children: [
+                                        if (appState.isAuthenticated) ...[],
+                                        "Recent Visits".needTranslation.toText18(isBold: true).paddingSymmetrical(24.w, 0.h),
+                                        SizedBox(height: 16.h),
+                                        SizedBox(
+                                          height: 110.h,
+                                          child: ListView.separated(
+                                            scrollDirection: Axis.horizontal,
+                                            itemCount: myAppointmentsVM.patientMyDoctorsList.length,
+                                            shrinkWrap: true,
+                                            padding: EdgeInsets.only(left: 24.w, right: 24.w),
+                                            itemBuilder: (context, index) {
+                                              return AnimationConfiguration.staggeredList(
+                                                position: index,
+                                                duration: const Duration(milliseconds: 1000),
+                                                child: SlideAnimation(
+                                                  horizontalOffset: 100.0,
+                                                  child: FadeInAnimation(
+                                                    child: SizedBox(
+                                                      // width: 80.w,
+                                                      child: Column(
+                                                        crossAxisAlignment: CrossAxisAlignment.center,
+                                                        children: [
+                                                          Image.network(
+                                                            myAppointmentsVM.patientMyDoctorsList[index].doctorImageURL!,
+                                                            width: 64.w,
+                                                            height: 64.h,
+                                                            fit: BoxFit.cover,
+                                                          ).circle(100).toShimmer2(isShow: false, radius: 50.r),
+                                                          SizedBox(height: 8.h),
+                                                          SizedBox(
+                                                            width: 80.w,
+                                                            child: (myAppointmentsVM.patientMyDoctorsList[index].doctorName)
+                                                                .toString()
+                                                                .toText12(fontWeight: FontWeight.w500, isCenter: true, maxLine: 2)
+                                                                .toShimmer2(isShow: false),
+                                                          ),
+                                                        ],
+                                                      ),
+                                                    ).onPress(() async {
+                                                      bookAppointmentsViewModel.setSelectedDoctor(DoctorsListResponseModel(
+                                                        clinicID: myAppointmentsVM.patientMyDoctorsList[index].clinicID,
+                                                        projectID: myAppointmentsVM.patientMyDoctorsList[index].projectID,
+                                                        doctorID: myAppointmentsVM.patientMyDoctorsList[index].doctorID,
+                                                      ));
+                                                      LoaderBottomSheet.showLoader();
+                                                      await bookAppointmentsViewModel.getDoctorProfile(onSuccess: (dynamic respData) {
+                                                        LoaderBottomSheet.hideLoader();
+                                                        Navigator.of(context).push(
+                                                          CustomPageRoute(
+                                                            page: DoctorProfilePage(),
+                                                          ),
+                                                        );
+                                                      }, onError: (err) {
+                                                        LoaderBottomSheet.hideLoader();
+                                                        showCommonBottomSheetWithoutHeight(
+                                                          context,
+                                                          child: Utils.getErrorWidget(loadingText: err),
+                                                          callBackFunc: () {},
+                                                          isFullScreen: false,
+                                                          isCloseButtonVisible: true,
+                                                        );
+                                                      });
+                                                    }),
+                                                  ),
+                                                ),
+                                              );
+                                            },
+                                            separatorBuilder: (BuildContext cxt, int index) => SizedBox(width: 8.h),
+                                          ),
+                                        ),
+                                      ],
+                                    );
+                        }),
+                      ],
+                    ],
                   );
                 }),
-              ],
-            );
-          }),
-        ),
+              ),
+            ),
+          ),
+          _buildSymptomsBottomCard(),
+        ],
       ),
     );
   }
@@ -460,6 +451,37 @@ class _BookAppointmentPageState extends State {
     return Container();
   }
 
+  Widget _buildSymptomsBottomCard() {
+    return Container(
+      decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24.r),
+      child: Row(
+        children: [
+          Expanded(
+            child: Column(
+              mainAxisSize: MainAxisSize.min,
+              crossAxisAlignment: CrossAxisAlignment.start,
+              children: [
+                "Not sure? help me choose a clinic!".needTranslation.toText16(weight: FontWeight.w600, color: AppColors.textColor),
+                SizedBox(height: 4.h),
+                "Mention your symptoms and find the list of doctors accordingly".needTranslation.toText12(
+                      fontWeight: FontWeight.w500,
+                      color: AppColors.greyTextColor,
+                    ),
+              ],
+            ),
+          ),
+          SizedBox(width: 16.w),
+          CustomButton(
+            height: 40.h,
+            text: "",
+            onPressed: () => context.navigateWithName(AppRoutes.userInfoSelection),
+            icon: AppAssets.arrow_forward,
+          )
+        ],
+      ).paddingAll(24.w),
+    );
+  }
+
   void openRegionListBottomSheet(BuildContext context, RegionBottomSheetType type) {
     regionalViewModel.flush();
     regionalViewModel.setBottomSheetType(type);
diff --git a/lib/presentation/emergency_services/emergency_services_page.dart b/lib/presentation/emergency_services/emergency_services_page.dart
index bce7daf..3833d32 100644
--- a/lib/presentation/emergency_services/emergency_services_page.dart
+++ b/lib/presentation/emergency_services/emergency_services_page.dart
@@ -97,7 +97,7 @@ class EmergencyServicesPage extends StatelessWidget {
                               }),
                             ],
                           ),
-                          Lottie.asset(AppAnimations.ambulance_alert,
+                          Lottie.asset(AppAnimations.ambulanceAlert,
                               repeat: false, reverse: false, frameRate: FrameRate(60), width: 120.h, height: 120.h, fit: BoxFit.contain),
                           SizedBox(height: 8.h),
                           "Confirmation".needTranslation.toText28(color: AppColors.whiteColor, isBold: true),
@@ -200,7 +200,7 @@ class EmergencyServicesPage extends StatelessWidget {
                       child: Column(
                         crossAxisAlignment: CrossAxisAlignment.start,
                         children: [
-                          Lottie.asset(AppAnimations.ambulance_alert, repeat: false, reverse: false, frameRate: FrameRate(60), width: 120.h, height: 120.h, fit: BoxFit.contain),
+                          Lottie.asset(AppAnimations.ambulanceAlert, repeat: false, reverse: false, frameRate: FrameRate(60), width: 120.h, height: 120.h, fit: BoxFit.contain),
                           SizedBox(height: 8.h),
                           LocaleKeys.confirm.tr().toText28(color: AppColors.whiteColor, isBold: true),
                           SizedBox(height: 8.h),
@@ -313,7 +313,7 @@ class EmergencyServicesPage extends StatelessWidget {
                               }),
                             ],
                           ),
-                          Lottie.asset(AppAnimations.ambulance_alert,
+                          Lottie.asset(AppAnimations.ambulanceAlert,
                               repeat: false, reverse: false, frameRate: FrameRate(60), width: 120.h, height: 120.h, fit: BoxFit.contain),
                           SizedBox(height: 8.h),
                           LocaleKeys.confirm.tr().toText28(color: AppColors.whiteColor, isBold: true),
diff --git a/lib/presentation/home/landing_page.dart b/lib/presentation/home/landing_page.dart
index 454f1e7..96ec558 100644
--- a/lib/presentation/home/landing_page.dart
+++ b/lib/presentation/home/landing_page.dart
@@ -12,7 +12,6 @@ import 'package:hmg_patient_app_new/core/dependencies.dart';
 import 'package:hmg_patient_app_new/core/utils/size_utils.dart';
 import 'package:hmg_patient_app_new/core/utils/utils.dart';
 import 'package:hmg_patient_app_new/extensions/int_extensions.dart';
-import 'package:hmg_patient_app_new/extensions/route_extensions.dart';
 import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
 import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
 import 'package:hmg_patient_app_new/features/authentication/authentication_view_model.dart';
@@ -40,7 +39,6 @@ import 'package:hmg_patient_app_new/presentation/home/widgets/small_service_card
 import 'package:hmg_patient_app_new/presentation/home/widgets/welcome_widget.dart';
 import 'package:hmg_patient_app_new/presentation/medical_file/medical_file_page.dart';
 import 'package:hmg_patient_app_new/presentation/profile_settings/profile_settings.dart';
-import 'package:hmg_patient_app_new/routes/app_routes.dart';
 import 'package:hmg_patient_app_new/services/cache_service.dart';
 import 'package:hmg_patient_app_new/theme/colors.dart';
 import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart';
@@ -494,8 +492,7 @@ class _LandingPageState extends State {
                     mainAxisSize: MainAxisSize.min,
                     spacing: 12.h,
                     children: [
-                      Utils.buildSvgWithAssets(icon: AppAssets.bell, height: 18.h, width: 18.h)
-                          .onPress(() => context.navigateWithName(AppRoutes.organSelectorPage)),
+                      Utils.buildSvgWithAssets(icon: AppAssets.bell, height: 18.h, width: 18.h),
                       Utils.buildSvgWithAssets(icon: AppAssets.search_icon, height: 18.h, width: 18.h).onPress(() {}),
                       Utils.buildSvgWithAssets(icon: AppAssets.contact_icon, height: 18.h, width: 18.h).onPress(() {
                         showCommonBottomSheetWithoutHeight(
@@ -581,7 +578,6 @@ class _LandingPageState extends State {
           );
         },
       ),
-      // height: isDone == false ? ResponsiveExtension.screenHeight * 0.5 : ResponsiveExtension.screenHeight * 0.3,
       isFullScreen: false,
       callBackFunc: () {
         isDone = true;
diff --git a/lib/presentation/home/navigation_screen.dart b/lib/presentation/home/navigation_screen.dart
index f8447d2..7fbcdb3 100644
--- a/lib/presentation/home/navigation_screen.dart
+++ b/lib/presentation/home/navigation_screen.dart
@@ -1,12 +1,13 @@
 import 'package:flutter/material.dart';
 import 'package:hmg_patient_app_new/core/app_state.dart';
 import 'package:hmg_patient_app_new/core/dependencies.dart';
-import 'package:hmg_patient_app_new/presentation/book_appointment/book_appointment_page.dart';
+import 'package:hmg_patient_app_new/extensions/route_extensions.dart';
 import 'package:hmg_patient_app_new/presentation/contact_us/feedback_page.dart';
 import 'package:hmg_patient_app_new/presentation/hmg_services/services_page.dart';
 import 'package:hmg_patient_app_new/presentation/home/landing_page.dart';
 import 'package:hmg_patient_app_new/presentation/medical_file/medical_file_page.dart';
 import 'package:hmg_patient_app_new/presentation/todo_section/todo_page.dart';
+import 'package:hmg_patient_app_new/routes/app_routes.dart';
 import 'package:hmg_patient_app_new/widgets/bottom_navigation/bottom_navigation.dart';
 
 class LandingNavigation extends StatefulWidget {
@@ -18,12 +19,11 @@ class LandingNavigation extends StatefulWidget {
 
 class _LandingNavigationState extends State {
   int _currentIndex = 0;
-  late AppState appState;
   final PageController _pageController = PageController();
 
   @override
   Widget build(BuildContext context) {
-    appState = getIt.get();
+    AppState appState = getIt.get();
     return Scaffold(
       body: PageView(
         controller: _pageController,
@@ -31,7 +31,7 @@ class _LandingNavigationState extends State {
         children: [
           const LandingPage(),
           appState.isAuthenticated ? MedicalFilePage() : /* need add feedback page */ FeedbackPage(),
-          BookAppointmentPage(),
+          SizedBox(),
           const ToDoPage(),
           ServicesPage(),
         ],
@@ -40,6 +40,10 @@ class _LandingNavigationState extends State {
         currentIndex: _currentIndex,
         onTap: (index) {
           setState(() => _currentIndex = index);
+          if (_currentIndex == 2) {
+            context.navigateWithName(AppRoutes.bookAppointmentPage);
+            return;
+          }
           _pageController.animateToPage(index, duration: const Duration(milliseconds: 300), curve: Curves.easeInOut);
         },
       ),
diff --git a/lib/presentation/symptoms_checker/organ_selector_screen.dart b/lib/presentation/symptoms_checker/organ_selector_screen.dart
index 65d9a00..d5dc32c 100644
--- a/lib/presentation/symptoms_checker/organ_selector_screen.dart
+++ b/lib/presentation/symptoms_checker/organ_selector_screen.dart
@@ -42,7 +42,7 @@ class _OrganSelectorPageState extends State {
       return;
     }
 
-    context.navigateWithName(AppRoutes.symptomsCheckerScreen);
+    context.navigateWithName(AppRoutes.symptomsSelectorScreen);
   }
 
   @override
diff --git a/lib/presentation/symptoms_checker/risk_factors_screen.dart b/lib/presentation/symptoms_checker/risk_factors_screen.dart
index 211aabc..2992593 100644
--- a/lib/presentation/symptoms_checker/risk_factors_screen.dart
+++ b/lib/presentation/symptoms_checker/risk_factors_screen.dart
@@ -148,7 +148,7 @@ class _RiskFactorsScreenState extends State {
               Expanded(
                 child: CollapsingListView(
                   title: "Risks".needTranslation,
-                  onLeadingTapped: () => _buildConfirmationBottomSheet(
+                  leadingCallback: () => _buildConfirmationBottomSheet(
                       context: context,
                       onConfirm: () => {
                             context.pop(),
diff --git a/lib/presentation/symptoms_checker/suggestions_screen.dart b/lib/presentation/symptoms_checker/suggestions_screen.dart
index f9d922a..2832515 100644
--- a/lib/presentation/symptoms_checker/suggestions_screen.dart
+++ b/lib/presentation/symptoms_checker/suggestions_screen.dart
@@ -148,7 +148,7 @@ class _SuggestionsScreenState extends State {
               Expanded(
                 child: CollapsingListView(
                   title: "Suggestions".needTranslation,
-                  onLeadingTapped: () => _buildConfirmationBottomSheet(
+                  leadingCallback: () => _buildConfirmationBottomSheet(
                       context: context,
                       onConfirm: () => {
                             context.pop(),
diff --git a/lib/presentation/symptoms_checker/symptoms_selector_screen.dart b/lib/presentation/symptoms_checker/symptoms_selector_screen.dart
index bed232b..522c5f8 100644
--- a/lib/presentation/symptoms_checker/symptoms_selector_screen.dart
+++ b/lib/presentation/symptoms_checker/symptoms_selector_screen.dart
@@ -78,7 +78,7 @@ class _SymptomsSelectorScreenState extends State {
               Expanded(
                 child: CollapsingListView(
                   title: "Symptoms Selector".needTranslation,
-                  onLeadingTapped: () => _buildConfirmationBottomSheet(
+                  leadingCallback: () => _buildConfirmationBottomSheet(
                       context: context,
                       onConfirm: () => {
                             context.pop(),
diff --git a/lib/presentation/symptoms_checker/triage_screen.dart b/lib/presentation/symptoms_checker/triage_screen.dart
index 4dbe0ca..aa0cd72 100644
--- a/lib/presentation/symptoms_checker/triage_screen.dart
+++ b/lib/presentation/symptoms_checker/triage_screen.dart
@@ -103,7 +103,7 @@ class _TriageScreenState extends State {
               //           context.pop(),
               //         }),
 
-              onLeadingTapped: () => context.pop(),
+              leadingCallback: () => context.pop(),
               child: Column(
                 crossAxisAlignment: CrossAxisAlignment.start,
                 children: [
diff --git a/lib/presentation/symptoms_checker/user_info_selection.dart b/lib/presentation/symptoms_checker/user_info_selection.dart
new file mode 100644
index 0000000..2fb6cc9
--- /dev/null
+++ b/lib/presentation/symptoms_checker/user_info_selection.dart
@@ -0,0 +1,187 @@
+import 'package:flutter/material.dart';
+import 'package:hmg_patient_app_new/core/app_assets.dart';
+import 'package:hmg_patient_app_new/core/app_export.dart';
+import 'package:hmg_patient_app_new/core/app_state.dart';
+import 'package:hmg_patient_app_new/core/dependencies.dart';
+import 'package:hmg_patient_app_new/core/utils/utils.dart';
+import 'package:hmg_patient_app_new/extensions/route_extensions.dart';
+import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
+import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
+import 'package:hmg_patient_app_new/theme/colors.dart';
+import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart';
+import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart';
+
+class UserInfoSelectionScreen extends StatelessWidget {
+  const UserInfoSelectionScreen({super.key});
+
+  _buildEditInfoTile({
+    required String leadingIcon,
+    required String title,
+    required String subTitle,
+    required VoidCallback onTap,
+    required String trailingIcon,
+    required BuildContext context,
+    Color? iconColor,
+  }) {
+    return InkWell(
+      onTap: onTap,
+      child: Row(
+        children: [
+          Expanded(
+            child: Row(
+              children: [
+                Container(
+                    height: 40.h,
+                    width: 40.h,
+                    margin: EdgeInsets.only(right: 10.h),
+                    padding: EdgeInsets.all(8.h),
+                    decoration: RoundedRectangleBorder().toSmoothCornerDecoration(borderRadius: 12.r, color: AppColors.greyColor),
+                    child: Utils.buildSvgWithAssets(icon: leadingIcon, iconColor: iconColor)),
+                Column(
+                  crossAxisAlignment: CrossAxisAlignment.start,
+                  children: [
+                    title.toText16(weight: FontWeight.w500),
+                    subTitle.toText14(color: AppColors.primaryRedColor, weight: FontWeight.w500),
+                  ],
+                ),
+              ],
+            ),
+          ),
+          Utils.buildSvgWithAssets(icon: trailingIcon, height: 24.h, width: 24.h),
+        ],
+      ),
+    );
+  }
+
+  Widget _getDivider() {
+    return Divider(
+      color: AppColors.dividerColor,
+    ).paddingSymmetrical(0, 16.h);
+  }
+
+  @override
+  Widget build(BuildContext context) {
+    AppState appState = getIt.get();
+
+    String name = "";
+    if (appState.isAuthenticated) {
+      name = "${appState.getAuthenticatedUser()!.firstName!} ${appState.getAuthenticatedUser()!.lastName!} ";
+    } else {
+      name = "Guest";
+    }
+    return Scaffold(
+      backgroundColor: AppColors.bgScaffoldColor,
+      body: Column(
+        children: [
+          Expanded(
+            child: CollapsingListView(
+              title: "Symptoms Checker".needTranslation,
+              isLeading: true,
+              child: SingleChildScrollView(
+                child: Column(
+                  children: [
+                    Container(
+                      width: double.infinity,
+                      decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24.r),
+                      padding: EdgeInsets.symmetric(vertical: 24.h, horizontal: 16.w),
+                      child: Column(
+                        children: [
+                          "Hi $name, Is your information up to date?".needTranslation.toText18(
+                                weight: FontWeight.w600,
+                                color: AppColors.textColor,
+                              ),
+                          SizedBox(height: 24.h),
+                          _buildEditInfoTile(
+                            context: context,
+                            leadingIcon: AppAssets.genderIcon,
+                            title: "Gender".needTranslation,
+                            subTitle: "Male".needTranslation,
+                            onTap: () {},
+                            trailingIcon: AppAssets.edit_icon,
+                          ),
+                          _getDivider(),
+                          _buildEditInfoTile(
+                            context: context,
+                            leadingIcon: AppAssets.calendar,
+                            title: "Age".needTranslation,
+                            subTitle: "32 Years",
+                            iconColor: AppColors.greyTextColor,
+                            onTap: () {},
+                            trailingIcon: AppAssets.edit_icon,
+                          ),
+                          _getDivider(),
+                          _buildEditInfoTile(
+                            context: context,
+                            leadingIcon: AppAssets.rulerIcon,
+                            title: "Height".needTranslation,
+                            subTitle: "17 8cm",
+                            onTap: () {},
+                            trailingIcon: AppAssets.edit_icon,
+                          ),
+                          _getDivider(),
+                          _buildEditInfoTile(
+                            context: context,
+                            leadingIcon: AppAssets.weightScale,
+                            title: "Weight".needTranslation,
+                            subTitle: "88 kg",
+                            onTap: () {},
+                            trailingIcon: AppAssets.edit_icon,
+                          ),
+                        ],
+                      ),
+                    ),
+                  ],
+                ).paddingAll(24.w),
+              ),
+            ),
+          ),
+          _buildBottomCard(context),
+        ],
+      ),
+    );
+  }
+
+  Widget _buildBottomCard(BuildContext context) {
+    return Container(
+      decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24.r),
+      child: SafeArea(
+        top: false,
+        child: Column(
+          mainAxisSize: MainAxisSize.min,
+          children: [
+            SizedBox(height: 24.h),
+            Row(
+              children: [
+                Expanded(
+                  child: CustomButton(
+                    text: "No, Edit all".needTranslation,
+                    icon: AppAssets.edit_icon,
+                    iconColor: AppColors.primaryRedColor,
+                    onPressed: () => context.navigateWithName(AppRoutes.userInfoFlowManager),
+                    backgroundColor: AppColors.primaryRedColor.withValues(alpha: 0.11),
+                    borderColor: Colors.transparent,
+                    textColor: AppColors.primaryRedColor,
+                    fontSize: 16.f,
+                  ),
+                ),
+                SizedBox(width: 12.w),
+                Expanded(
+                  child: CustomButton(
+                    text: "Yes, It is".needTranslation,
+                    icon: AppAssets.tickIcon,
+                    iconColor: AppColors.whiteColor,
+                    onPressed: () => () {},
+                    backgroundColor: AppColors.primaryRedColor,
+                    borderColor: AppColors.primaryRedColor,
+                    textColor: AppColors.whiteColor,
+                    fontSize: 16.f,
+                  ),
+                ),
+              ],
+            ),
+          ],
+        ).paddingSymmetrical(24.w, 0),
+      ),
+    );
+  }
+}
diff --git a/lib/presentation/symptoms_checker/user_info_selection/pages/age_selection_page.dart b/lib/presentation/symptoms_checker/user_info_selection/pages/age_selection_page.dart
new file mode 100644
index 0000000..6433b93
--- /dev/null
+++ b/lib/presentation/symptoms_checker/user_info_selection/pages/age_selection_page.dart
@@ -0,0 +1,36 @@
+import 'package:flutter/material.dart';
+import 'package:hmg_patient_app_new/core/app_export.dart';
+import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
+import 'package:hmg_patient_app_new/features/symptoms_checker/symptoms_checker_view_model.dart';
+import 'package:hmg_patient_app_new/theme/colors.dart';
+import 'package:provider/provider.dart';
+
+/// Age selection page content
+class AgeSelectionPage extends StatelessWidget {
+  final int? selectedAge;
+  final Function(int) onAgeSelected;
+
+  const AgeSelectionPage({
+    super.key,
+    required this.selectedAge,
+    required this.onAgeSelected,
+  });
+
+  @override
+  Widget build(BuildContext context) {
+    return SingleChildScrollView(
+      padding: EdgeInsets.all(24.w),
+      child: Consumer(
+        builder: (BuildContext context, symptomsViewModel, Widget? child) {
+          return Column(
+            children: [
+              "What is your gender?".needTranslation.toText18(weight: FontWeight.w600, color: AppColors.textColor),
+              SizedBox(height: 70.h),
+              "< Age Widget Here >".needTranslation.toText18(weight: FontWeight.w600, color: AppColors.greyTextColor),
+            ],
+          );
+        },
+      ),
+    );
+  }
+}
diff --git a/lib/presentation/symptoms_checker/user_info_selection/pages/gender_selection_page.dart b/lib/presentation/symptoms_checker/user_info_selection/pages/gender_selection_page.dart
new file mode 100644
index 0000000..85cb6e2
--- /dev/null
+++ b/lib/presentation/symptoms_checker/user_info_selection/pages/gender_selection_page.dart
@@ -0,0 +1,75 @@
+import 'package:flutter/material.dart';
+import 'package:hmg_patient_app_new/core/app_assets.dart';
+import 'package:hmg_patient_app_new/core/app_export.dart';
+import 'package:hmg_patient_app_new/core/utils/utils.dart';
+import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
+import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
+import 'package:hmg_patient_app_new/features/symptoms_checker/symptoms_checker_view_model.dart';
+import 'package:hmg_patient_app_new/theme/colors.dart';
+import 'package:provider/provider.dart';
+
+/// Gender selection page content
+class GenderSelectionPage extends StatelessWidget {
+  final String? selectedGender;
+  final Function(String) onGenderSelected;
+
+  GenderSelectionPage({
+    super.key,
+    required this.selectedGender,
+    required this.onGenderSelected,
+  });
+
+  _buildGenderOption(String iconPng, String label, bool isSelected) {
+    return Container(
+      height: 160.h,
+      width: 160.w,
+      decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
+          color: AppColors.whiteColor, borderRadius: 24.r, side: isSelected ? BorderSide(color: AppColors.primaryRedColor, width: 2.5) : null),
+      child: Column(
+        mainAxisAlignment: MainAxisAlignment.center,
+        children: [
+          Utils.buildImgWithAssets(icon: iconPng, height: 80.h, width: 80.h, fit: BoxFit.contain),
+          SizedBox(height: 8.h),
+          label.toText16(
+            weight: FontWeight.w500,
+          )
+        ],
+      ),
+    );
+  }
+
+  final genders = ["Male", "Female"];
+
+  @override
+  Widget build(BuildContext context) {
+    return SingleChildScrollView(
+      padding: EdgeInsets.all(24.w),
+      child: Consumer(
+        builder: (BuildContext context, symptomsViewModel, Widget? child) {
+          return Column(
+            children: [
+              "What is your gender?".needTranslation.toText18(weight: FontWeight.w600, color: AppColors.textColor),
+              SizedBox(height: 70.h),
+              Row(
+                children: [
+                  Expanded(
+                    child: InkWell(
+                      onTap: () => onGenderSelected(genders[0]),
+                      child: _buildGenderOption(AppAssets.maleIcon, "Male".needTranslation, symptomsViewModel.selectedGender == genders[0]),
+                    ),
+                  ),
+                  SizedBox(width: 16.w),
+                  Expanded(
+                      child: InkWell(
+                    onTap: () => onGenderSelected(genders[1]),
+                    child: _buildGenderOption(AppAssets.femaleIcon, "Female".needTranslation, symptomsViewModel.selectedGender == genders[1]),
+                  ))
+                ],
+              ),
+            ],
+          );
+        },
+      ),
+    );
+  }
+}
diff --git a/lib/presentation/symptoms_checker/user_info_selection/pages/height_selection_page.dart b/lib/presentation/symptoms_checker/user_info_selection/pages/height_selection_page.dart
new file mode 100644
index 0000000..e10aca3
--- /dev/null
+++ b/lib/presentation/symptoms_checker/user_info_selection/pages/height_selection_page.dart
@@ -0,0 +1,175 @@
+import 'package:flutter/material.dart';
+import 'package:hmg_patient_app_new/core/app_export.dart';
+import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
+import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
+import 'package:hmg_patient_app_new/theme/colors.dart';
+
+/// Height selection page content
+class HeightSelectionPage extends StatefulWidget {
+  final double height;
+  final bool isCm;
+  final Function(double, bool) onHeightChanged;
+
+  const HeightSelectionPage({
+    super.key,
+    required this.height,
+    required this.isCm,
+    required this.onHeightChanged,
+  });
+
+  @override
+  State createState() => _HeightSelectionPageState();
+}
+
+class _HeightSelectionPageState extends State {
+  late double heightValue;
+
+  @override
+  void initState() {
+    super.initState();
+    heightValue = widget.height;
+  }
+
+  Widget _unitSelector() {
+    return Container(
+      height: 54.h,
+      padding: EdgeInsets.all(4.h),
+      decoration: BoxDecoration(
+        color: AppColors.whiteColor,
+        borderRadius: BorderRadius.circular(10.r),
+      ),
+      child: LayoutBuilder(
+        builder: (context, constraints) {
+          final tabWidth = (constraints.maxWidth - 8.w) / 2;
+          return Stack(
+            children: [
+              // Animated sliding indicator
+              AnimatedContainer(
+                duration: const Duration(milliseconds: 250),
+                curve: Curves.easeInOut,
+                width: tabWidth,
+                height: constraints.maxHeight,
+                margin: EdgeInsets.only(left: widget.isCm ? 0 : tabWidth + 8.w),
+                decoration: BoxDecoration(
+                  color: AppColors.bottomNAVBorder,
+                  borderRadius: BorderRadius.circular(7.r),
+                ),
+              ),
+              // Tab buttons
+              Row(
+                children: [
+                  Expanded(
+                    child: GestureDetector(
+                      onTap: () {
+                        if (!widget.isCm) {
+                          // Convert from FT to CM (1 ft = 30.48 cm)
+                          final convertedHeight = heightValue * 30.48;
+                          widget.onHeightChanged(convertedHeight, true);
+                        }
+                      },
+                      child: Container(
+                        alignment: Alignment.center,
+                        color: Colors.transparent,
+                        child: Text(
+                          'CM',
+                          style: TextStyle(
+                            fontWeight: FontWeight.w700,
+                            fontSize: 14.f,
+                            color: widget.isCm ? AppColors.textColor : AppColors.textColor.withValues(alpha: 0.6),
+                          ),
+                        ),
+                      ),
+                    ),
+                  ),
+                  Expanded(
+                    child: GestureDetector(
+                      onTap: () {
+                        if (widget.isCm) {
+                          // Convert from CM to FT (1 cm = 0.0328084 ft)
+                          final convertedHeight = heightValue / 30.48;
+                          widget.onHeightChanged(convertedHeight, false);
+                        }
+                      },
+                      child: Container(
+                        alignment: Alignment.center,
+                        color: Colors.transparent,
+                        child: Text(
+                          'FT',
+                          style: TextStyle(
+                            fontWeight: FontWeight.w700,
+                            fontSize: 14.f,
+                            color: !widget.isCm ? AppColors.textColor : AppColors.textColor.withValues(alpha: 0.6),
+                          ),
+                        ),
+                      ),
+                    ),
+                  ),
+                ],
+              ),
+            ],
+          );
+        },
+      ),
+    );
+  }
+
+  @override
+  Widget build(BuildContext context) {
+    return Column(
+      crossAxisAlignment: CrossAxisAlignment.start,
+      children: [
+        SizedBox(height: 24.h),
+        Center(
+          child: Text(
+            'How tall are you?'.needTranslation,
+            style: TextStyle(fontSize: 18.f, fontWeight: FontWeight.w600, color: AppColors.textColor),
+          ),
+        ),
+        SizedBox(height: 24.h),
+        Padding(
+          padding: EdgeInsets.symmetric(horizontal: 24.w),
+          child: _unitSelector(),
+        ),
+        SizedBox(height: 90.h),
+        Row(
+          crossAxisAlignment: CrossAxisAlignment.end,
+          mainAxisAlignment: MainAxisAlignment.center,
+          children: [
+            Text(
+              heightValue.round().toString(),
+              style: TextStyle(fontSize: 100.f, color: AppColors.textColor, height: 1),
+            ),
+            SizedBox(width: 8.w),
+            Text(widget.isCm ? 'cm' : 'ft', style: TextStyle(fontWeight: FontWeight.w700, fontSize: 24.f)).paddingOnly(bottom: 10.h, left: 8.w),
+          ],
+        ),
+      ],
+    );
+  }
+}
+
+class _RulerPainter extends CustomPainter {
+  @override
+  void paint(Canvas canvas, Size size) {
+    final paintTick = Paint()..color = const Color(0xFF222222);
+    final paintSmall = Paint()..color = const Color(0xFF222222).withValues(alpha: 0.6);
+
+    final width = size.width;
+    final start = 120;
+    final end = 210;
+    final steps = end - start;
+    for (int i = 0; i <= steps; i++) {
+      final x = (i / steps) * width;
+      if (i % 10 == 0) {
+        canvas.drawLine(Offset(x, size.height * 0.1), Offset(x, size.height * 0.6), paintTick);
+      } else if (i % 5 == 0) {
+        canvas.drawLine(Offset(x, size.height * 0.2), Offset(x, size.height * 0.5), paintSmall);
+      } else {
+        canvas.drawLine(Offset(x, size.height * 0.35), Offset(x, size.height * 0.5), paintSmall);
+      }
+    }
+  }
+
+  @override
+  bool shouldRepaint(covariant CustomPainter oldDelegate) => false;
+}
diff --git a/lib/presentation/symptoms_checker/user_info_selection/pages/weight_selection_page.dart b/lib/presentation/symptoms_checker/user_info_selection/pages/weight_selection_page.dart
new file mode 100644
index 0000000..0319f4b
--- /dev/null
+++ b/lib/presentation/symptoms_checker/user_info_selection/pages/weight_selection_page.dart
@@ -0,0 +1,236 @@
+import 'package:flutter/material.dart';
+import 'package:hmg_patient_app_new/core/app_export.dart';
+import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
+import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
+import 'package:hmg_patient_app_new/theme/colors.dart';
+
+/// Weight selection page content
+class WeightSelectionPage extends StatefulWidget {
+  final double weight;
+  final bool isKg;
+  final Function(double, bool) onWeightChanged;
+
+  const WeightSelectionPage({
+    super.key,
+    required this.weight,
+    required this.isKg,
+    required this.onWeightChanged,
+  });
+
+  @override
+  State createState() => _WeightSelectionPageState();
+}
+
+class _WeightSelectionPageState extends State {
+  late double weightValue;
+
+  @override
+  void initState() {
+    super.initState();
+    weightValue = widget.weight;
+  }
+
+  Widget _unitSelector() {
+    return Container(
+      height: 54.h,
+      padding: EdgeInsets.all(4.h),
+      decoration: BoxDecoration(
+        color: AppColors.whiteColor,
+        borderRadius: BorderRadius.circular(10.r),
+      ),
+      child: LayoutBuilder(
+        builder: (context, constraints) {
+          final tabWidth = (constraints.maxWidth - 8.w) / 2;
+          return Stack(
+            children: [
+              // Animated sliding indicator
+              AnimatedContainer(
+                duration: const Duration(milliseconds: 250),
+                curve: Curves.easeInOut,
+                width: tabWidth,
+                height: constraints.maxHeight,
+                margin: EdgeInsets.only(left: widget.isKg ? 0 : tabWidth + 8.w),
+                decoration: BoxDecoration(
+                  color: AppColors.bottomNAVBorder,
+                  borderRadius: BorderRadius.circular(7.r),
+                ),
+              ),
+              // Tab buttons
+              Row(
+                children: [
+                  Expanded(
+                    child: GestureDetector(
+                      onTap: () {
+                        if (!widget.isKg) {
+                          // Convert from LBS to KG (1 lb = 0.453592 kg)
+                          final convertedWeight = weightValue / 2.20462;
+                          widget.onWeightChanged(convertedWeight, true);
+                        }
+                      },
+                      child: Container(
+                        alignment: Alignment.center,
+                        color: Colors.transparent,
+                        child: Text(
+                          'KG',
+                          style: TextStyle(
+                            fontWeight: FontWeight.w700,
+                            fontSize: 14.f,
+                            color: widget.isKg ? AppColors.textColor : AppColors.textColor.withValues(alpha: 0.6),
+                          ),
+                        ),
+                      ),
+                    ),
+                  ),
+                  Expanded(
+                    child: GestureDetector(
+                      onTap: () {
+                        if (widget.isKg) {
+                          // Convert from KG to LBS (1 kg = 2.20462 lbs)
+                          final convertedWeight = weightValue * 2.20462;
+                          widget.onWeightChanged(convertedWeight, false);
+                        }
+                      },
+                      child: Container(
+                        alignment: Alignment.center,
+                        color: Colors.transparent,
+                        child: Text(
+                          'LBS',
+                          style: TextStyle(
+                            fontWeight: FontWeight.w700,
+                            fontSize: 14.f,
+                            color: !widget.isKg ? AppColors.textColor : AppColors.textColor.withValues(alpha: 0.6),
+                          ),
+                        ),
+                      ),
+                    ),
+                  ),
+                ],
+              ),
+            ],
+          );
+        },
+      ),
+    );
+  }
+
+  Widget _weightSlider() {
+    return Column(
+      children: [
+        SizedBox(height: 18.h),
+        SizedBox(height: 12.h),
+        SizedBox(
+          height: 80.h,
+          child: Row(
+            children: [
+              Expanded(child: Container()),
+              Expanded(
+                flex: 6,
+                child: Stack(
+                  alignment: Alignment.center,
+                  children: [
+                    Positioned.fill(
+                      child: CustomPaint(
+                        painter: _WeightRulerPainter(),
+                      ),
+                    ),
+                    SliderTheme(
+                      data: SliderTheme.of(context).copyWith(
+                        trackHeight: 6.h,
+                        thumbShape: const RoundSliderThumbShape(enabledThumbRadius: 0),
+                        overlayShape: const RoundSliderOverlayShape(overlayRadius: 0),
+                        activeTrackColor: AppColors.primaryRedColor,
+                        inactiveTrackColor: AppColors.lightRedButtonColor,
+                      ),
+                      child: Slider(
+                        min: 30,
+                        max: 150,
+                        value: weightValue,
+                        onChanged: (v) {
+                          setState(() => weightValue = v);
+                          widget.onWeightChanged(v, widget.isKg);
+                        },
+                      ),
+                    ),
+                    Positioned(
+                      right: 0,
+                      child: Container(
+                        width: 18.w,
+                        height: 18.h,
+                        decoration: BoxDecoration(
+                          color: AppColors.primaryRedColor,
+                          shape: BoxShape.rectangle,
+                          borderRadius: BorderRadius.circular(4.r),
+                        ),
+                      ),
+                    ),
+                  ],
+                ),
+              ),
+              Expanded(child: Container()),
+            ],
+          ),
+        ),
+      ],
+    );
+  }
+
+  @override
+  Widget build(BuildContext context) {
+    return Column(
+      crossAxisAlignment: CrossAxisAlignment.start,
+      children: [
+        SizedBox(height: 24.h),
+        Center(
+          child: Text(
+            'What is your weight?'.needTranslation,
+            style: TextStyle(fontSize: 18.f, fontWeight: FontWeight.w600, color: AppColors.textColor),
+          ),
+        ),
+        SizedBox(height: 20.h),
+        Padding(
+          padding: EdgeInsets.symmetric(horizontal: 24.w),
+          child: _unitSelector(),
+        ),
+        SizedBox(height: 90.h),
+        Row(
+          mainAxisAlignment: MainAxisAlignment.center,
+          crossAxisAlignment: CrossAxisAlignment.end,
+          children: [
+            Text(
+              weightValue.round().toString(),
+              style: TextStyle(fontSize: 100.f, color: AppColors.textColor, height: 1),
+            ),
+            SizedBox(width: 8.w),
+            Text(widget.isKg ? 'kg' : 'lbs', style: TextStyle(fontWeight: FontWeight.w700, fontSize: 24.f)).paddingOnly(bottom: 10.h, left: 8.w),
+          ],
+        ),
+      ],
+    );
+  }
+}
+
+class _WeightRulerPainter extends CustomPainter {
+  @override
+  void paint(Canvas canvas, Size size) {
+    final paintTick = Paint()..color = const Color(0xFF222222);
+    final paintSmall = Paint()..color = const Color(0xFF222222).withValues(alpha: 0.6);
+
+    final width = size.width;
+    final start = 30;
+    final end = 150;
+    final steps = end - start;
+    for (int i = 0; i <= steps; i++) {
+      final x = (i / steps) * width;
+      if (i % 10 == 0) {
+        canvas.drawLine(Offset(x, size.height * 0.1), Offset(x, size.height * 0.6), paintTick);
+      } else if (i % 5 == 0) {
+        canvas.drawLine(Offset(x, size.height * 0.2), Offset(x, size.height * 0.5), paintSmall);
+      } else {
+        canvas.drawLine(Offset(x, size.height * 0.35), Offset(x, size.height * 0.5), paintSmall);
+      }
+    }
+  }
+
+  @override
+  bool shouldRepaint(covariant CustomPainter oldDelegate) => false;
+}
diff --git a/lib/presentation/symptoms_checker/user_info_selection/user_info_flow_manager.dart b/lib/presentation/symptoms_checker/user_info_selection/user_info_flow_manager.dart
new file mode 100644
index 0000000..43d485a
--- /dev/null
+++ b/lib/presentation/symptoms_checker/user_info_selection/user_info_flow_manager.dart
@@ -0,0 +1,209 @@
+import 'dart:developer';
+
+import 'package:flutter/material.dart';
+import 'package:hmg_patient_app_new/core/app_export.dart';
+import 'package:hmg_patient_app_new/extensions/route_extensions.dart';
+import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
+import 'package:hmg_patient_app_new/features/symptoms_checker/symptoms_checker_view_model.dart';
+import 'package:hmg_patient_app_new/presentation/symptoms_checker/user_info_selection/pages/age_selection_page.dart';
+import 'package:hmg_patient_app_new/presentation/symptoms_checker/user_info_selection/pages/gender_selection_page.dart';
+import 'package:hmg_patient_app_new/presentation/symptoms_checker/user_info_selection/pages/height_selection_page.dart';
+import 'package:hmg_patient_app_new/presentation/symptoms_checker/user_info_selection/pages/weight_selection_page.dart';
+import 'package:hmg_patient_app_new/theme/colors.dart';
+import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart';
+import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart';
+import 'package:provider/provider.dart';
+
+/// Manages the user info selection flow with PageView
+/// Only the page content changes, header and footer remain fixed
+class UserInfoFlowManager extends StatefulWidget {
+  const UserInfoFlowManager({super.key});
+
+  @override
+  State createState() => _UserInfoFlowManagerState();
+}
+
+class _UserInfoFlowManagerState extends State {
+  final PageController _pageController = PageController();
+  late SymptomsCheckerViewModel _viewModel;
+
+  // Page titles
+  final List _pageTitles = [
+    "Your Gender",
+    "Your Birth Date",
+    "Your Height",
+    "Your Weight",
+  ];
+
+  @override
+  void initState() {
+    super.initState();
+    _viewModel = context.read();
+    // _viewModel.resetUserInfo();
+  }
+
+  @override
+  void dispose() {
+    _pageController.dispose();
+    super.dispose();
+  }
+
+  void _onNext() {
+    if (_viewModel.userInfoCurrentPage < 3) {
+      _viewModel.nextUserInfoPage();
+      _pageController.animateToPage(
+        _viewModel.userInfoCurrentPage,
+        duration: const Duration(milliseconds: 300),
+        curve: Curves.easeInOut,
+      );
+    } else {
+      // Submit and navigate to next screen
+      _submitUserInfo();
+    }
+  }
+
+  void _onPrevious() {
+    if (_viewModel.userInfoCurrentPage > 0) {
+      _viewModel.previousUserInfoPage();
+      _pageController.animateToPage(
+        _viewModel.userInfoCurrentPage,
+        duration: const Duration(milliseconds: 300),
+        curve: Curves.easeInOut,
+      );
+    } else {
+      context.pop();
+    }
+  }
+
+  void _submitUserInfo() {
+    final userInfo = _viewModel.getUserInfoData();
+
+    // Log user info
+    log('User Info Submitted:');
+    log('Gender: ${userInfo['gender']}');
+    log('Age: ${userInfo['age']}');
+    log('Height: ${userInfo['height']} ${userInfo['heightUnit']}');
+    log('Weight: ${userInfo['weight']} ${userInfo['weightUnit']}');
+
+    // TODO: Save user info to backend/storage
+
+    // Navigate to symptoms checker or next screen
+    context.pop();
+  }
+
+  Widget _buildProgressBar(int currentPage) {
+    return Row(
+      children: List.generate(4, (index) {
+        final isActive = index <= currentPage;
+        return Expanded(
+          child: Container(
+            height: 4.h,
+            margin: EdgeInsets.symmetric(horizontal: 6.w),
+            decoration: BoxDecoration(
+              color: isActive ? AppColors.primaryRedColor : AppColors.greyLightColor,
+              borderRadius: BorderRadius.circular(8.r),
+            ),
+          ),
+        );
+      }),
+    );
+  }
+
+  Widget _buildStickyBottomCard(bool isLastPage) {
+    return Container(
+      decoration: BoxDecoration(
+        color: AppColors.whiteColor,
+        borderRadius: BorderRadius.vertical(top: Radius.circular(24.r)),
+      ),
+      padding: EdgeInsets.symmetric(horizontal: 24.w, vertical: 16.h),
+      child: SafeArea(
+        top: false,
+        child: Row(
+          children: [
+            Expanded(
+              child: CustomButton(
+                text: "Previous".needTranslation,
+                onPressed: _onPrevious,
+                backgroundColor: AppColors.primaryRedColor.withValues(alpha: 0.11),
+                borderColor: Colors.transparent,
+                textColor: AppColors.primaryRedColor,
+                fontSize: 16.f,
+              ),
+            ),
+            SizedBox(width: 12.w),
+            Expanded(
+              child: CustomButton(
+                text: isLastPage ? "Submit".needTranslation : "Next".needTranslation,
+                onPressed: _onNext,
+                backgroundColor: AppColors.primaryRedColor,
+                borderColor: AppColors.primaryRedColor,
+                textColor: AppColors.whiteColor,
+                fontSize: 16.f,
+              ),
+            ),
+          ],
+        ),
+      ),
+    );
+  }
+
+  @override
+  Widget build(BuildContext context) {
+    return Consumer(
+      builder: (context, viewModel, child) {
+        return Scaffold(
+          backgroundColor: AppColors.bgScaffoldColor,
+          body: Column(
+            children: [
+              Expanded(
+                child: CollapsingListView(
+                  title: _pageTitles[viewModel.userInfoCurrentPage].needTranslation,
+                  isLeading: true,
+                  child: Column(
+                    crossAxisAlignment: CrossAxisAlignment.start,
+                    children: [
+                      SizedBox(height: 24.h),
+                      _buildProgressBar(viewModel.userInfoCurrentPage),
+                      SizedBox(height: 24.h),
+                      SizedBox(
+                        height: 600.h,
+                        child: PageView(
+                          controller: _pageController,
+                          physics: const NeverScrollableScrollPhysics(), // Disable swipe
+                          onPageChanged: (index) {
+                            viewModel.setUserInfoPage(index);
+                          },
+                          children: [
+                            GenderSelectionPage(
+                              selectedGender: viewModel.selectedGender,
+                              onGenderSelected: viewModel.setGender,
+                            ),
+                            AgeSelectionPage(
+                              selectedAge: viewModel.selectedAge,
+                              onAgeSelected: viewModel.setAge,
+                            ),
+                            HeightSelectionPage(
+                              height: viewModel.selectedHeight ?? 178,
+                              isCm: viewModel.isHeightCm,
+                              onHeightChanged: viewModel.setHeight,
+                            ),
+                            WeightSelectionPage(
+                              weight: viewModel.selectedWeight ?? 70,
+                              isKg: viewModel.isWeightKg,
+                              onWeightChanged: viewModel.setWeight,
+                            ),
+                          ],
+                        ),
+                      ),
+                    ],
+                  ),
+                ),
+              ),
+              _buildStickyBottomCard(viewModel.isUserInfoLastPage),
+            ],
+          ),
+        );
+      },
+    );
+  }
+}
diff --git a/lib/presentation/symptoms_checker/user_info_selection/widgets/user_info_progress_bar.dart b/lib/presentation/symptoms_checker/user_info_selection/widgets/user_info_progress_bar.dart
new file mode 100644
index 0000000..6e6d762
--- /dev/null
+++ b/lib/presentation/symptoms_checker/user_info_selection/widgets/user_info_progress_bar.dart
@@ -0,0 +1,36 @@
+import 'package:flutter/material.dart';
+import 'package:hmg_patient_app_new/core/app_export.dart';
+import 'package:hmg_patient_app_new/theme/colors.dart';
+
+/// Progress bar widget showing the current step in user info selection flow
+/// Total steps: 4 (Gender -> Age -> Height -> Weight)
+class UserInfoProgressBar extends StatelessWidget {
+  final int currentStep;
+  final int totalSteps;
+
+  const UserInfoProgressBar({
+    super.key,
+    required this.currentStep,
+    this.totalSteps = 4,
+  });
+
+  @override
+  Widget build(BuildContext context) {
+    return Row(
+      children: List.generate(totalSteps, (index) {
+        final isActive = index < currentStep;
+        return Expanded(
+          child: Container(
+            height: 4.h,
+            margin: EdgeInsets.symmetric(horizontal: 6.w),
+            decoration: BoxDecoration(
+              color: isActive ? AppColors.primaryRedColor : AppColors.greyLightColor,
+              borderRadius: BorderRadius.circular(8.r),
+            ),
+          ),
+        );
+      }),
+    );
+  }
+}
+
diff --git a/lib/presentation/symptoms_checker/user_info_selection/widgets/user_info_selection_scaffold.dart b/lib/presentation/symptoms_checker/user_info_selection/widgets/user_info_selection_scaffold.dart
new file mode 100644
index 0000000..3390c31
--- /dev/null
+++ b/lib/presentation/symptoms_checker/user_info_selection/widgets/user_info_selection_scaffold.dart
@@ -0,0 +1,67 @@
+import 'package:flutter/material.dart';
+import 'package:hmg_patient_app_new/core/app_export.dart';
+import 'package:hmg_patient_app_new/presentation/symptoms_checker/user_info_selection/widgets/user_info_progress_bar.dart';
+import 'package:hmg_patient_app_new/presentation/symptoms_checker/user_info_selection/widgets/user_info_sticky_bottom_card.dart';
+import 'package:hmg_patient_app_new/theme/colors.dart';
+import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart';
+
+/// Base scaffold for user info selection flow pages
+/// Provides consistent layout with progress bar and sticky bottom card
+class UserInfoSelectionScaffold extends StatelessWidget {
+  final String title;
+  final int currentStep;
+  final Widget child;
+  final VoidCallback? onPrevious;
+  final VoidCallback? onNext;
+  final bool showPrevious;
+  final String? nextButtonText;
+  final bool isScrollable;
+
+  const UserInfoSelectionScaffold({
+    super.key,
+    required this.title,
+    required this.currentStep,
+    required this.child,
+    this.onPrevious,
+    this.onNext,
+    this.showPrevious = true,
+    this.nextButtonText,
+    this.isScrollable = true,
+  });
+
+  @override
+  Widget build(BuildContext context) {
+    return Scaffold(
+      backgroundColor: AppColors.bgScaffoldColor,
+      body: Column(
+        children: [
+          Expanded(
+            child: CollapsingListView(
+              title: title,
+              isLeading: true,
+              child: Column(
+                crossAxisAlignment: CrossAxisAlignment.start,
+                children: [
+                  SizedBox(height: 24.h),
+                  UserInfoProgressBar(currentStep: currentStep),
+                  SizedBox(height: 24.h),
+                  isScrollable
+                      ? SingleChildScrollView(
+                          child: child,
+                        )
+                      : child,
+                ],
+              ),
+            ),
+          ),
+          UserInfoStickyBottomCard(
+            onPrevious: onPrevious,
+            onNext: onNext,
+            showPrevious: showPrevious,
+            nextButtonText: nextButtonText,
+          ),
+        ],
+      ),
+    );
+  }
+}
diff --git a/lib/presentation/symptoms_checker/user_info_selection/widgets/user_info_sticky_bottom_card.dart b/lib/presentation/symptoms_checker/user_info_selection/widgets/user_info_sticky_bottom_card.dart
new file mode 100644
index 0000000..10fd934
--- /dev/null
+++ b/lib/presentation/symptoms_checker/user_info_selection/widgets/user_info_sticky_bottom_card.dart
@@ -0,0 +1,68 @@
+import 'package:flutter/material.dart';
+import 'package:hmg_patient_app_new/core/app_export.dart';
+import 'package:hmg_patient_app_new/extensions/route_extensions.dart';
+import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
+import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
+import 'package:hmg_patient_app_new/theme/colors.dart';
+import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart';
+
+/// Sticky bottom card with Previous/Next navigation buttons
+class UserInfoStickyBottomCard extends StatelessWidget {
+  final VoidCallback? onPrevious;
+  final VoidCallback? onNext;
+  final bool showPrevious;
+  final String? nextButtonText;
+
+  const UserInfoStickyBottomCard({
+    super.key,
+    this.onPrevious,
+    this.onNext,
+    this.showPrevious = true,
+    this.nextButtonText,
+  });
+
+  @override
+  Widget build(BuildContext context) {
+    return Container(
+      decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
+        color: AppColors.whiteColor,
+        borderRadius: 24.r,
+      ),
+      child: Column(
+        mainAxisSize: MainAxisSize.min,
+        children: [
+          SizedBox(height: 16.h),
+          Row(
+            children: [
+              if (showPrevious) ...[
+                Expanded(
+                  child: CustomButton(
+                    text: "Previous".needTranslation,
+                    onPressed: onPrevious ?? () => context.pop(),
+                    backgroundColor: AppColors.primaryRedColor.withValues(alpha: 0.11),
+                    borderColor: Colors.transparent,
+                    textColor: AppColors.primaryRedColor,
+                    fontSize: 16.f,
+                  ),
+                ),
+                SizedBox(width: 12.w),
+              ],
+              Expanded(
+                child: CustomButton(
+                  text: nextButtonText ?? "Next".needTranslation,
+                  onPressed: onNext ?? () {},
+                  backgroundColor: AppColors.primaryRedColor,
+                  borderColor: AppColors.primaryRedColor,
+                  textColor: AppColors.whiteColor,
+                  fontSize: 16.f,
+                ),
+              ),
+            ],
+          ),
+          SizedBox(height: 24.h),
+        ],
+      ).paddingSymmetrical(24.w, 0),
+    );
+  }
+}
+
diff --git a/lib/routes/app_routes.dart b/lib/routes/app_routes.dart
index f73eba3..183c2a0 100644
--- a/lib/routes/app_routes.dart
+++ b/lib/routes/app_routes.dart
@@ -3,6 +3,7 @@ import 'package:hmg_patient_app_new/presentation/authentication/login.dart';
 import 'package:hmg_patient_app_new/presentation/authentication/register.dart';
 import 'package:hmg_patient_app_new/presentation/authentication/register_step2.dart';
 import 'package:hmg_patient_app_new/presentation/blood_donation/blood_donation_page.dart';
+import 'package:hmg_patient_app_new/presentation/book_appointment/book_appointment_page.dart';
 import 'package:hmg_patient_app_new/presentation/comprehensive_checkup/comprehensive_checkup_page.dart';
 import 'package:hmg_patient_app_new/presentation/e_referral/new_e_referral.dart';
 import 'package:hmg_patient_app_new/presentation/home/navigation_screen.dart';
@@ -14,6 +15,8 @@ import 'package:hmg_patient_app_new/presentation/symptoms_checker/risk_factors_s
 import 'package:hmg_patient_app_new/presentation/symptoms_checker/suggestions_screen.dart';
 import 'package:hmg_patient_app_new/presentation/symptoms_checker/symptoms_selector_screen.dart';
 import 'package:hmg_patient_app_new/presentation/symptoms_checker/triage_screen.dart';
+import 'package:hmg_patient_app_new/presentation/symptoms_checker/user_info_selection.dart';
+import 'package:hmg_patient_app_new/presentation/symptoms_checker/user_info_selection/user_info_flow_manager.dart';
 import 'package:hmg_patient_app_new/presentation/tele_consultation/zoom/call_screen.dart';
 import 'package:hmg_patient_app_new/splashPage.dart';
 
@@ -30,14 +33,21 @@ class AppRoutes {
   static const String zoomCallPage = '/zoomCallPage';
   static const String bloodDonationPage = '/bloodDonationPage';
 
+  //appointments
+  static const String bookAppointmentPage = '/bookAppointmentPage';
+
   // Symptoms Checker
   static const String organSelectorPage = '/organSelectorPage';
-  static const String symptomsCheckerScreen = '/symptomsCheckerScreen';
+  static const String symptomsSelectorScreen = '/symptomsCheckerScreen';
   static const String suggestionsScreen = '/suggestionsScreen';
   static const String riskFactorsScreen = '/riskFactorsScreen';
   static const String possibleConditionsScreen = '/possibleConditionsScreen';
   static const String triageScreen = '/triageProgressScreen';
 
+  //UserInfoSelection
+  static const String userInfoSelection = '/userInfoSelection';
+  static const String userInfoFlowManager = '/userInfoFlowManager';
+
   static Map get routes => {
         initialRoute: (context) => SplashPage(),
         loginScreen: (context) => LoginScreen(),
@@ -50,12 +60,16 @@ class AppRoutes {
         comprehensiveCheckupPage: (context) => ComprehensiveCheckupPage(),
         homeHealthCarePage: (context) => HhcProceduresPage(),
         organSelectorPage: (context) => OrganSelectorPage(),
-        symptomsCheckerScreen: (context) => SymptomsSelectorScreen(),
+        symptomsSelectorScreen: (context) => SymptomsSelectorScreen(),
         riskFactorsScreen: (context) => RiskFactorsScreen(),
         suggestionsScreen: (context) => SuggestionsScreen(),
         possibleConditionsScreen: (context) => PossibleConditionsScreen(),
-        triageScreen: (context) => TriageScreen()
-        zoomCallPage: (context) => CallScreen(),
-        bloodDonationPage: (context) => BloodDonationPage()
+        triageScreen: (context) => TriageScreen(),
+        bloodDonationPage: (context) => BloodDonationPage(),
+        bookAppointmentPage: (context) => BookAppointmentPage(),
+        userInfoSelection: (context) => UserInfoSelectionScreen(),
+        userInfoFlowManager: (context) => UserInfoFlowManager(),
+
+        //
       };
 }
diff --git a/lib/widgets/appbar/collapsing_list_view.dart b/lib/widgets/appbar/collapsing_list_view.dart
index 3e20689..ad8e743 100644
--- a/lib/widgets/appbar/collapsing_list_view.dart
+++ b/lib/widgets/appbar/collapsing_list_view.dart
@@ -26,7 +26,7 @@ class CollapsingListView extends StatelessWidget {
   Widget? trailing;
   bool isClose;
   bool isLeading;
-  VoidCallback? onLeadingTapped;
+  VoidCallback? leadingCallback;
 
   CollapsingListView({
     super.key,
@@ -42,7 +42,7 @@ class CollapsingListView extends StatelessWidget {
     this.requests,
     this.isLeading = true,
     this.trailing,
-    this.onLeadingTapped,
+    this.leadingCallback,
   });
 
   @override
@@ -69,8 +69,8 @@ class CollapsingListView extends StatelessWidget {
                           icon: Utils.buildSvgWithAssets(icon: isClose ? AppAssets.closeBottomNav : AppAssets.arrow_back, width: 32.h, height: 32.h),
                           padding: EdgeInsets.only(left: 12),
                           onPressed: () {
-                            if (onLeadingTapped != null) {
-                              onLeadingTapped!();
+                            if (leadingCallback != null) {
+                              leadingCallback!();
                             } else {
                               context.pop();
                             }
diff --git a/lib/widgets/input_widget.dart b/lib/widgets/input_widget.dart
index c1a38ab..7992ece 100644
--- a/lib/widgets/input_widget.dart
+++ b/lib/widgets/input_widget.dart
@@ -215,8 +215,11 @@ class TextInputWidget extends StatelessWidget {
               language: appState.getLanguageCode()!,
               initialDate: DateTime.now(),
               fontFamily: appState.getLanguageCode() == "ar" ? "GESSTwo" : "Poppins",
-              okWidget: Padding(padding: EdgeInsets.only(right: 8.h), child: Utils.buildSvgWithAssets(icon: AppAssets.confirm, width: 24.h, height: 24.h)),
-              cancelWidget: Padding(padding: EdgeInsets.only(right: 8.h), child: Utils.buildSvgWithAssets(icon: AppAssets.cancel, iconColor: Colors.white, width: 24.h, height: 24.h)),
+              okWidget:
+                  Padding(padding: EdgeInsets.only(right: 8.h), child: Utils.buildSvgWithAssets(icon: AppAssets.confirm, width: 24.h, height: 24.h)),
+              cancelWidget: Padding(
+                  padding: EdgeInsets.only(right: 8.h),
+                  child: Utils.buildSvgWithAssets(icon: AppAssets.cancel, iconColor: Colors.white, width: 24.h, height: 24.h)),
               onCalendarTypeChanged: (bool value) {
             isGregorian = value;
           });
@@ -276,7 +279,12 @@ class TextInputWidget extends StatelessWidget {
       decoration: InputDecoration(
         isDense: true,
         hintText: hintText,
-        hintStyle: TextStyle(fontSize: 14.f, height: 21 / 16, fontWeight: FontWeight.w500, color: hintColor != null ? AppColors.textColor : Color(0xff898A8D), letterSpacing: -0.75),
+        hintStyle: TextStyle(
+            fontSize: 14.f,
+            height: 21 / 16,
+            fontWeight: FontWeight.w500,
+            color: hintColor != null ? AppColors.textColor : Color(0xff898A8D),
+            letterSpacing: -0.75),
         prefixIconConstraints: BoxConstraints(minWidth: 30.h),
         prefixIcon: prefix == null ? null : "+${prefix!}".toText14(letterSpacing: -1, color: AppColors.textColor, weight: FontWeight.w500),
         contentPadding: EdgeInsets.zero,
-- 
2.30.2


From cf26e716459f480cca34ff9b6d3333f34a1359e6 Mon Sep 17 00:00:00 2001
From: faizatflutter 
Date: Thu, 11 Dec 2025 17:00:00 +0300
Subject: [PATCH 37/39] Complete USerInfo Selectoiun

---
 .../symptoms_checker_view_model.dart          | 103 ++++----
 .../symptoms_checker/user_info_selection.dart | 227 +++++++++++-----
 .../pages/age_selection_page.dart             |  21 +-
 .../pages/height_selection_page.dart          | 177 +++++++------
 .../pages/weight_selection_page.dart          | 220 ++++++----------
 .../user_info_flow_manager.dart               | 246 +++++++++++-------
 .../widgets/custom_date_picker.dart           | 235 +++++++++++++++++
 .../widgets/height_scale.dart                 | 169 ++++++++++++
 .../widgets/triangle_indicator.dart           |  85 ++++++
 .../widgets/user_info_progress_bar.dart       |  36 ---
 .../widgets/user_info_selection_scaffold.dart |  67 -----
 .../widgets/user_info_sticky_bottom_card.dart |  68 -----
 .../widgets/weight_scale.dart                 | 180 +++++++++++++
 lib/widgets/appbar/collapsing_list_view.dart  |  20 +-
 14 files changed, 1221 insertions(+), 633 deletions(-)
 create mode 100644 lib/presentation/symptoms_checker/user_info_selection/widgets/custom_date_picker.dart
 create mode 100644 lib/presentation/symptoms_checker/user_info_selection/widgets/height_scale.dart
 create mode 100644 lib/presentation/symptoms_checker/user_info_selection/widgets/triangle_indicator.dart
 delete mode 100644 lib/presentation/symptoms_checker/user_info_selection/widgets/user_info_progress_bar.dart
 delete mode 100644 lib/presentation/symptoms_checker/user_info_selection/widgets/user_info_selection_scaffold.dart
 delete mode 100644 lib/presentation/symptoms_checker/user_info_selection/widgets/user_info_sticky_bottom_card.dart
 create mode 100644 lib/presentation/symptoms_checker/user_info_selection/widgets/weight_scale.dart

diff --git a/lib/features/symptoms_checker/symptoms_checker_view_model.dart b/lib/features/symptoms_checker/symptoms_checker_view_model.dart
index 34a1754..1b43fc2 100644
--- a/lib/features/symptoms_checker/symptoms_checker_view_model.dart
+++ b/lib/features/symptoms_checker/symptoms_checker_view_model.dart
@@ -39,10 +39,11 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
   // User Info Flow State
   int _userInfoCurrentPage = 0;
   String? _selectedGender;
+  DateTime? _dateOfBirth;
   int? _selectedAge;
-  double? _selectedHeight;
+  double _selectedHeight = 170;
   bool _isHeightCm = true;
-  double? _selectedWeight;
+  double _selectedWeight = 60;
   bool _isWeightKg = true;
 
   // Getters
@@ -51,11 +52,19 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
 
   // User Info Getters
   int get userInfoCurrentPage => _userInfoCurrentPage;
+
   String? get selectedGender => _selectedGender;
+
+  DateTime? get dateOfBirth => _dateOfBirth;
+
   int? get selectedAge => _selectedAge;
+
   double? get selectedHeight => _selectedHeight;
+
   bool get isHeightCm => _isHeightCm;
+
   double? get selectedWeight => _selectedWeight;
+
   bool get isWeightKg => _isWeightKg;
 
   BodyView get currentView => _currentView;
@@ -84,23 +93,22 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
   /// Get count of selected organs
   int get selectedOrgansCount => _selectedOrganIds.length;
 
-   List get organSymptomsResults {
+  List get organSymptomsResults {
     if (bodySymptomResponse?.dataDetails?.result == null) {
       return [];
     }
     return bodySymptomResponse!.dataDetails!.result ?? [];
   }
 
-   int get totalSelectedSymptomsCount {
+  int get totalSelectedSymptomsCount {
     return _selectedSymptomsByOrgan.values.fold(0, (sum, symptomIds) => sum + symptomIds.length);
   }
 
-   bool get hasSelectedSymptoms {
+  bool get hasSelectedSymptoms {
     return _selectedSymptomsByOrgan.values.any((symptomIds) => symptomIds.isNotEmpty);
   }
 
-
-   void toggleView() {
+  void toggleView() {
     _currentView = _currentView == BodyView.front ? BodyView.back : BodyView.front;
     notifyListeners();
   }
@@ -110,7 +118,7 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
     notifyListeners();
   }
 
-   void toggleOrganSelection(String organId) {
+  void toggleOrganSelection(String organId) {
     if (_selectedOrganIds.contains(organId)) {
       _selectedOrganIds.remove(organId);
     } else {
@@ -123,10 +131,10 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
     notifyListeners();
   }
 
-   void _showTooltip(String organId) {
-     _tooltipTimer?.cancel();
+  void _showTooltip(String organId) {
+    _tooltipTimer?.cancel();
 
-     _tooltipOrganId = organId;
+    _tooltipOrganId = organId;
     notifyListeners();
 
     // Hide tooltip after 2 seconds
@@ -143,39 +151,39 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
     notifyListeners();
   }
 
-   void removeOrgan(String organId) {
+  void removeOrgan(String organId) {
     _selectedOrganIds.remove(organId);
     notifyListeners();
   }
 
-   void clearAllSelections() {
+  void clearAllSelections() {
     _selectedOrganIds.clear();
     notifyListeners();
   }
 
-   void toggleBottomSheet() {
+  void toggleBottomSheet() {
     _isBottomSheetExpanded = !_isBottomSheetExpanded;
     notifyListeners();
   }
 
-   void setBottomSheetExpanded(bool isExpanded) {
+  void setBottomSheetExpanded(bool isExpanded) {
     _isBottomSheetExpanded = isExpanded;
     notifyListeners();
   }
 
-   bool validateSelection() {
+  bool validateSelection() {
     return _selectedOrganIds.isNotEmpty;
   }
 
-   List getSelectedOrganIds() {
+  List getSelectedOrganIds() {
     return _selectedOrganIds.toList();
   }
 
-   List getSelectedOrganNames() {
+  List getSelectedOrganNames() {
     return selectedOrgans.map((organ) => organ.description).toList();
   }
 
-   Future initializeSymptomGroups({
+  Future initializeSymptomGroups({
     Function()? onSuccess,
     Function(String)? onError,
   }) async {
@@ -186,12 +194,12 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
       return;
     }
 
-     List organNames = selectedOrgans.map((organ) => organ.name).toList();
+    List organNames = selectedOrgans.map((organ) => organ.name).toList();
 
-     await getBodySymptomsByName(
+    await getBodySymptomsByName(
       organNames: organNames,
       onSuccess: (response) {
-         if (onSuccess != null) {
+        if (onSuccess != null) {
           onSuccess();
         }
       },
@@ -203,7 +211,7 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
     );
   }
 
-   void toggleSymptomSelection(String organId, String symptomId) {
+  void toggleSymptomSelection(String organId, String symptomId) {
     if (!_selectedSymptomsByOrgan.containsKey(organId)) {
       _selectedSymptomsByOrgan[organId] = {};
     }
@@ -216,11 +224,11 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
     notifyListeners();
   }
 
-   bool isSymptomSelected(String organId, String symptomId) {
+  bool isSymptomSelected(String organId, String symptomId) {
     return _selectedSymptomsByOrgan[organId]?.contains(symptomId) ?? false;
   }
 
-   List getAllSelectedSymptoms() {
+  List getAllSelectedSymptoms() {
     List allSymptoms = [];
 
     if (bodySymptomResponse?.dataDetails?.result == null) {
@@ -228,7 +236,7 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
     }
 
     for (var organResult in bodySymptomResponse!.dataDetails!.result!) {
-       String? matchingOrganId;
+      String? matchingOrganId;
       for (var organ in selectedOrgans) {
         if (organ.name == organResult.name) {
           matchingOrganId = organ.id;
@@ -252,12 +260,12 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
     return allSymptoms;
   }
 
-   void clearAllSymptomSelections() {
+  void clearAllSymptomSelections() {
     _selectedSymptomsByOrgan.clear();
     notifyListeners();
   }
 
-   void reset() {
+  void reset() {
     _currentView = BodyView.front;
     _selectedOrganIds.clear();
     _selectedSymptomsByOrgan.clear();
@@ -268,10 +276,11 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
     // Reset user info flow
     _userInfoCurrentPage = 0;
     _selectedGender = null;
+    _dateOfBirth = null;
     _selectedAge = null;
-    _selectedHeight = null;
+    _selectedHeight = 170;
     _isHeightCm = true;
-    _selectedWeight = null;
+    _selectedWeight = 60;
     _isWeightKg = true;
     notifyListeners();
   }
@@ -312,6 +321,19 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
     notifyListeners();
   }
 
+  /// Set date of birth
+  void setDateOfBirth(DateTime dateOfBirth) {
+    _dateOfBirth = dateOfBirth;
+    // Calculate age from date of birth
+    final now = DateTime.now();
+    int age = now.year - dateOfBirth.year;
+    if (now.month < dateOfBirth.month || (now.month == dateOfBirth.month && now.day < dateOfBirth.day)) {
+      age--;
+    }
+    _selectedAge = age;
+    notifyListeners();
+  }
+
   /// Set selected height
   void setHeight(double height, bool isCm) {
     _selectedHeight = height;
@@ -329,10 +351,13 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
   /// Check if user info page is last
   bool get isUserInfoLastPage => _userInfoCurrentPage == 3;
 
+  bool get isUserInfoFirstPage => _userInfoCurrentPage == 0;
+
   /// Validate and submit user info
   Map getUserInfoData() {
     return {
       'gender': _selectedGender,
+      'dateOfBirth': _dateOfBirth?.toIso8601String(),
       'age': _selectedAge,
       'height': _selectedHeight,
       'heightUnit': _isHeightCm ? 'cm' : 'ft',
@@ -341,19 +366,7 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
     };
   }
 
-  /// Reset user info flow
-  void resetUserInfo() {
-    _userInfoCurrentPage = 0;
-    _selectedGender = null;
-    _selectedAge = null;
-    _selectedHeight = null;
-    _isHeightCm = true;
-    _selectedWeight = null;
-    _isWeightKg = true;
-    notifyListeners();
-  }
-
-   Future getBodySymptomsByName({
+  Future getBodySymptomsByName({
     required List organNames,
     Function(BodySymptomResponseModel)? onSuccess,
     Function(String)? onError,
@@ -366,7 +379,7 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
     );
 
     result.fold(
-       (failure) async {
+      (failure) async {
         isBodySymptomsLoading = false;
         notifyListeners();
         await errorHandlerService.handleError(failure: failure);
@@ -374,7 +387,7 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
           onError(failure.toString());
         }
       },
-       (apiResponse) {
+      (apiResponse) {
         isBodySymptomsLoading = false;
         if (apiResponse.messageStatus == 1 && apiResponse.data != null) {
           bodySymptomResponse = apiResponse.data;
diff --git a/lib/presentation/symptoms_checker/user_info_selection.dart b/lib/presentation/symptoms_checker/user_info_selection.dart
index 2fb6cc9..9a66a65 100644
--- a/lib/presentation/symptoms_checker/user_info_selection.dart
+++ b/lib/presentation/symptoms_checker/user_info_selection.dart
@@ -7,13 +7,63 @@ import 'package:hmg_patient_app_new/core/utils/utils.dart';
 import 'package:hmg_patient_app_new/extensions/route_extensions.dart';
 import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
 import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
+import 'package:hmg_patient_app_new/features/symptoms_checker/symptoms_checker_view_model.dart';
 import 'package:hmg_patient_app_new/theme/colors.dart';
 import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart';
 import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart';
+import 'package:provider/provider.dart';
 
-class UserInfoSelectionScreen extends StatelessWidget {
+class UserInfoSelectionScreen extends StatefulWidget {
   const UserInfoSelectionScreen({super.key});
 
+  @override
+  State createState() => _UserInfoSelectionScreenState();
+}
+
+class _UserInfoSelectionScreenState extends State {
+  @override
+  void initState() {
+    super.initState();
+    WidgetsBinding.instance.addPostFrameCallback((_) {
+      _initializeUserInfo();
+    });
+  }
+
+  /// Initialize user info from appState if user is logged in
+  void _initializeUserInfo() {
+    final appState = getIt.get();
+    final viewModel = context.read();
+
+    if (appState.isAuthenticated) {
+      final user = appState.getAuthenticatedUser();
+
+      if (user == null) return;
+
+      // Populate gender (gender is int: 1=Male, 2=Female)
+      if (user.gender != null) {
+        String genderStr = user.gender == 1
+            ? "Male"
+            : user.gender == 2
+                ? "Female"
+                : "Other";
+        viewModel.setGender(genderStr);
+      }
+
+      if (user.dateofBirth != null && user.dateofBirth!.isNotEmpty) {
+        try {
+          DateTime dob = DateTime.parse(user.dateofBirth!);
+          viewModel.setDateOfBirth(dob);
+        } catch (e) {
+          // If date parsing fails, ignore and let user fill manually
+        }
+      }
+
+      // Note: AuthenticatedUser doesn't have height/weight fields
+      // User will need to fill these manually
+    }
+    // If not authenticated or fields are empty, user will fill them manually
+  }
+
   _buildEditInfoTile({
     required String leadingIcon,
     required String title,
@@ -69,79 +119,111 @@ class UserInfoSelectionScreen extends StatelessWidget {
     } else {
       name = "Guest";
     }
+
     return Scaffold(
       backgroundColor: AppColors.bgScaffoldColor,
-      body: Column(
-        children: [
-          Expanded(
-            child: CollapsingListView(
-              title: "Symptoms Checker".needTranslation,
-              isLeading: true,
-              child: SingleChildScrollView(
-                child: Column(
-                  children: [
-                    Container(
-                      width: double.infinity,
-                      decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24.r),
-                      padding: EdgeInsets.symmetric(vertical: 24.h, horizontal: 16.w),
-                      child: Column(
-                        children: [
-                          "Hi $name, Is your information up to date?".needTranslation.toText18(
-                                weight: FontWeight.w600,
-                                color: AppColors.textColor,
+      body: Consumer(
+        builder: (context, viewModel, child) {
+          // Check if any field is empty
+          bool hasEmptyFields = viewModel.selectedGender == null ||
+              viewModel.selectedAge == null ||
+              viewModel.selectedHeight == null ||
+              viewModel.selectedWeight == null;
+
+          // Get display values
+          String genderText = viewModel.selectedGender ?? "Not set";
+          // Show age calculated from DOB, not the DOB itself
+          String ageText = viewModel.selectedAge != null ? "${viewModel.selectedAge} Years" : "Not set";
+          String heightText =
+              viewModel.selectedHeight != null ? "${viewModel.selectedHeight!.round()} ${viewModel.isHeightCm ? 'cm' : 'ft'}" : "Not set";
+          String weightText =
+              viewModel.selectedWeight != null ? "${viewModel.selectedWeight!.round()} ${viewModel.isWeightKg ? 'kg' : 'lbs'}" : "Not set";
+
+          return Column(
+            children: [
+              Expanded(
+                child: CollapsingListView(
+                  title: "Symptoms Checker".needTranslation,
+                  isLeading: true,
+                  child: SingleChildScrollView(
+                    child: Column(
+                      children: [
+                        Container(
+                          width: double.infinity,
+                          decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24.r),
+                          padding: EdgeInsets.symmetric(vertical: 24.h, horizontal: 16.w),
+                          child: Column(
+                            children: [
+                              "Hello $name, Is your information up to date?".needTranslation.toText18(
+                                    weight: FontWeight.w600,
+                                    color: AppColors.textColor,
+                                  ),
+                              SizedBox(height: 24.h),
+                              _buildEditInfoTile(
+                                context: context,
+                                leadingIcon: AppAssets.genderIcon,
+                                title: "Gender".needTranslation,
+                                subTitle: genderText,
+                                onTap: () {
+                                  viewModel.setUserInfoPage(0);
+                                  context.navigateWithName(AppRoutes.userInfoFlowManager);
+                                },
+                                trailingIcon: AppAssets.edit_icon,
                               ),
-                          SizedBox(height: 24.h),
-                          _buildEditInfoTile(
-                            context: context,
-                            leadingIcon: AppAssets.genderIcon,
-                            title: "Gender".needTranslation,
-                            subTitle: "Male".needTranslation,
-                            onTap: () {},
-                            trailingIcon: AppAssets.edit_icon,
-                          ),
-                          _getDivider(),
-                          _buildEditInfoTile(
-                            context: context,
-                            leadingIcon: AppAssets.calendar,
-                            title: "Age".needTranslation,
-                            subTitle: "32 Years",
-                            iconColor: AppColors.greyTextColor,
-                            onTap: () {},
-                            trailingIcon: AppAssets.edit_icon,
-                          ),
-                          _getDivider(),
-                          _buildEditInfoTile(
-                            context: context,
-                            leadingIcon: AppAssets.rulerIcon,
-                            title: "Height".needTranslation,
-                            subTitle: "17 8cm",
-                            onTap: () {},
-                            trailingIcon: AppAssets.edit_icon,
-                          ),
-                          _getDivider(),
-                          _buildEditInfoTile(
-                            context: context,
-                            leadingIcon: AppAssets.weightScale,
-                            title: "Weight".needTranslation,
-                            subTitle: "88 kg",
-                            onTap: () {},
-                            trailingIcon: AppAssets.edit_icon,
+                              _getDivider(),
+                              _buildEditInfoTile(
+                                context: context,
+                                leadingIcon: AppAssets.calendarGrey,
+                                title: "Age".needTranslation,
+                                subTitle: ageText,
+                                iconColor: AppColors.greyTextColor,
+                                onTap: () {
+                                  viewModel.setUserInfoPage(1);
+                                  context.navigateWithName(AppRoutes.userInfoFlowManager);
+                                },
+                                trailingIcon: AppAssets.edit_icon,
+                              ),
+                              _getDivider(),
+                              _buildEditInfoTile(
+                                context: context,
+                                leadingIcon: AppAssets.rulerIcon,
+                                title: "Height".needTranslation,
+                                subTitle: heightText,
+                                onTap: () {
+                                  viewModel.setUserInfoPage(2);
+                                  context.navigateWithName(AppRoutes.userInfoFlowManager);
+                                },
+                                trailingIcon: AppAssets.edit_icon,
+                              ),
+                              _getDivider(),
+                              _buildEditInfoTile(
+                                context: context,
+                                leadingIcon: AppAssets.weightScale,
+                                title: "Weight".needTranslation,
+                                subTitle: weightText,
+                                onTap: () {
+                                  viewModel.setUserInfoPage(3);
+                                  context.navigateWithName(AppRoutes.userInfoFlowManager);
+                                },
+                                trailingIcon: AppAssets.edit_icon,
+                              ),
+                            ],
                           ),
-                        ],
-                      ),
-                    ),
-                  ],
-                ).paddingAll(24.w),
+                        ),
+                      ],
+                    ).paddingAll(24.w),
+                  ),
+                ),
               ),
-            ),
-          ),
-          _buildBottomCard(context),
-        ],
+              _buildBottomCard(context, hasEmptyFields),
+            ],
+          );
+        },
       ),
     );
   }
 
-  Widget _buildBottomCard(BuildContext context) {
+  Widget _buildBottomCard(BuildContext context, bool hasEmptyFields) {
     return Container(
       decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24.r),
       child: SafeArea(
@@ -157,7 +239,10 @@ class UserInfoSelectionScreen extends StatelessWidget {
                     text: "No, Edit all".needTranslation,
                     icon: AppAssets.edit_icon,
                     iconColor: AppColors.primaryRedColor,
-                    onPressed: () => context.navigateWithName(AppRoutes.userInfoFlowManager),
+                    onPressed: () {
+                      context.read().setUserInfoPage(0);
+                      context.navigateWithName(AppRoutes.userInfoFlowManager);
+                    },
                     backgroundColor: AppColors.primaryRedColor.withValues(alpha: 0.11),
                     borderColor: Colors.transparent,
                     textColor: AppColors.primaryRedColor,
@@ -170,10 +255,12 @@ class UserInfoSelectionScreen extends StatelessWidget {
                     text: "Yes, It is".needTranslation,
                     icon: AppAssets.tickIcon,
                     iconColor: AppColors.whiteColor,
-                    onPressed: () => () {},
-                    backgroundColor: AppColors.primaryRedColor,
-                    borderColor: AppColors.primaryRedColor,
-                    textColor: AppColors.whiteColor,
+                    onPressed: hasEmptyFields
+                        ? () {} // Empty function for disabled state
+                        : () => context.navigateWithName(AppRoutes.organSelectorPage),
+                    backgroundColor: hasEmptyFields ? AppColors.greyLightColor : AppColors.primaryRedColor,
+                    borderColor: hasEmptyFields ? AppColors.greyLightColor : AppColors.primaryRedColor,
+                    textColor: hasEmptyFields ? AppColors.greyTextColor : AppColors.whiteColor,
                     fontSize: 16.f,
                   ),
                 ),
diff --git a/lib/presentation/symptoms_checker/user_info_selection/pages/age_selection_page.dart b/lib/presentation/symptoms_checker/user_info_selection/pages/age_selection_page.dart
index 6433b93..d73f387 100644
--- a/lib/presentation/symptoms_checker/user_info_selection/pages/age_selection_page.dart
+++ b/lib/presentation/symptoms_checker/user_info_selection/pages/age_selection_page.dart
@@ -1,7 +1,11 @@
-import 'package:flutter/material.dart';
+import 'dart:developer';
+
+import 'package:flutter/cupertino.dart';
 import 'package:hmg_patient_app_new/core/app_export.dart';
 import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
+import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
 import 'package:hmg_patient_app_new/features/symptoms_checker/symptoms_checker_view_model.dart';
+import 'package:hmg_patient_app_new/presentation/symptoms_checker/user_info_selection/widgets/custom_date_picker.dart';
 import 'package:hmg_patient_app_new/theme/colors.dart';
 import 'package:provider/provider.dart';
 
@@ -19,14 +23,21 @@ class AgeSelectionPage extends StatelessWidget {
   @override
   Widget build(BuildContext context) {
     return SingleChildScrollView(
-      padding: EdgeInsets.all(24.w),
       child: Consumer(
         builder: (BuildContext context, symptomsViewModel, Widget? child) {
           return Column(
             children: [
-              "What is your gender?".needTranslation.toText18(weight: FontWeight.w600, color: AppColors.textColor),
-              SizedBox(height: 70.h),
-              "< Age Widget Here >".needTranslation.toText18(weight: FontWeight.w600, color: AppColors.greyTextColor),
+              "What is your Date of Birth?".needTranslation.toText18(weight: FontWeight.w600, color: AppColors.textColor).paddingAll(24.w),
+              SizedBox(height: 30.h),
+              ThreeColumnDatePicker(
+                enableHaptic: true,
+                enableSound: true,
+                initialDate: symptomsViewModel.dateOfBirth ?? DateTime(2000, 1, 1),
+                onDateChanged: (date) {
+                  symptomsViewModel.setDateOfBirth(date);
+                  log('DOB saved: $date, Age: ${symptomsViewModel.selectedAge}');
+                },
+              )
             ],
           );
         },
diff --git a/lib/presentation/symptoms_checker/user_info_selection/pages/height_selection_page.dart b/lib/presentation/symptoms_checker/user_info_selection/pages/height_selection_page.dart
index e10aca3..0744e81 100644
--- a/lib/presentation/symptoms_checker/user_info_selection/pages/height_selection_page.dart
+++ b/lib/presentation/symptoms_checker/user_info_selection/pages/height_selection_page.dart
@@ -1,36 +1,19 @@
+import 'dart:developer';
+
 import 'package:flutter/material.dart';
 import 'package:hmg_patient_app_new/core/app_export.dart';
 import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
 import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
+import 'package:hmg_patient_app_new/features/symptoms_checker/symptoms_checker_view_model.dart';
+import 'package:hmg_patient_app_new/presentation/symptoms_checker/user_info_selection/widgets/height_scale.dart';
 import 'package:hmg_patient_app_new/theme/colors.dart';
+import 'package:provider/provider.dart';
 
 /// Height selection page content
-class HeightSelectionPage extends StatefulWidget {
-  final double height;
-  final bool isCm;
-  final Function(double, bool) onHeightChanged;
-
-  const HeightSelectionPage({
-    super.key,
-    required this.height,
-    required this.isCm,
-    required this.onHeightChanged,
-  });
+class HeightSelectionPage extends StatelessWidget {
+  const HeightSelectionPage({super.key});
 
-  @override
-  State createState() => _HeightSelectionPageState();
-}
-
-class _HeightSelectionPageState extends State {
-  late double heightValue;
-
-  @override
-  void initState() {
-    super.initState();
-    heightValue = widget.height;
-  }
-
-  Widget _unitSelector() {
+  Widget _unitSelector(SymptomsCheckerViewModel viewModel) {
     return Container(
       height: 54.h,
       padding: EdgeInsets.all(4.h),
@@ -43,13 +26,12 @@ class _HeightSelectionPageState extends State {
           final tabWidth = (constraints.maxWidth - 8.w) / 2;
           return Stack(
             children: [
-              // Animated sliding indicator
               AnimatedContainer(
                 duration: const Duration(milliseconds: 250),
                 curve: Curves.easeInOut,
                 width: tabWidth,
                 height: constraints.maxHeight,
-                margin: EdgeInsets.only(left: widget.isCm ? 0 : tabWidth + 8.w),
+                margin: EdgeInsets.only(left: viewModel.isHeightCm ? 0 : tabWidth + 8.w),
                 decoration: BoxDecoration(
                   color: AppColors.bottomNAVBorder,
                   borderRadius: BorderRadius.circular(7.r),
@@ -61,10 +43,9 @@ class _HeightSelectionPageState extends State {
                   Expanded(
                     child: GestureDetector(
                       onTap: () {
-                        if (!widget.isCm) {
-                          // Convert from FT to CM (1 ft = 30.48 cm)
-                          final convertedHeight = heightValue * 30.48;
-                          widget.onHeightChanged(convertedHeight, true);
+                        if (!viewModel.isHeightCm) {
+                          final convertedHeight = viewModel.selectedHeight! * 30.48;
+                          viewModel.setHeight(convertedHeight, true);
                         }
                       },
                       child: Container(
@@ -75,7 +56,7 @@ class _HeightSelectionPageState extends State {
                           style: TextStyle(
                             fontWeight: FontWeight.w700,
                             fontSize: 14.f,
-                            color: widget.isCm ? AppColors.textColor : AppColors.textColor.withValues(alpha: 0.6),
+                            color: viewModel.isHeightCm ? AppColors.textColor : AppColors.textColor.withValues(alpha: 0.6),
                           ),
                         ),
                       ),
@@ -84,10 +65,9 @@ class _HeightSelectionPageState extends State {
                   Expanded(
                     child: GestureDetector(
                       onTap: () {
-                        if (widget.isCm) {
-                          // Convert from CM to FT (1 cm = 0.0328084 ft)
-                          final convertedHeight = heightValue / 30.48;
-                          widget.onHeightChanged(convertedHeight, false);
+                        if (viewModel.isHeightCm) {
+                          final convertedHeight = viewModel.selectedHeight! / 30.48;
+                          viewModel.setHeight(convertedHeight, false);
                         }
                       },
                       child: Container(
@@ -98,7 +78,7 @@ class _HeightSelectionPageState extends State {
                           style: TextStyle(
                             fontWeight: FontWeight.w700,
                             fontSize: 14.f,
-                            color: !widget.isCm ? AppColors.textColor : AppColors.textColor.withValues(alpha: 0.6),
+                            color: !viewModel.isHeightCm ? AppColors.textColor : AppColors.textColor.withValues(alpha: 0.6),
                           ),
                         ),
                       ),
@@ -115,61 +95,80 @@ class _HeightSelectionPageState extends State {
 
   @override
   Widget build(BuildContext context) {
-    return Column(
-      crossAxisAlignment: CrossAxisAlignment.start,
-      children: [
-        SizedBox(height: 24.h),
-        Center(
-          child: Text(
-            'How tall are you?'.needTranslation,
-            style: TextStyle(fontSize: 18.f, fontWeight: FontWeight.w600, color: AppColors.textColor),
-          ),
-        ),
-        SizedBox(height: 24.h),
-        Padding(
-          padding: EdgeInsets.symmetric(horizontal: 24.w),
-          child: _unitSelector(),
-        ),
-        SizedBox(height: 90.h),
-        Row(
-          crossAxisAlignment: CrossAxisAlignment.end,
-          mainAxisAlignment: MainAxisAlignment.center,
+    return Consumer(
+      builder: (context, viewModel, child) {
+        // Define min/max values based on unit
+        final minValue = viewModel.isHeightCm ? 50.0 : 1.6; // 50cm or 1.6ft (approx. 1'7")
+        final maxValue = viewModel.isHeightCm ? 280.0 : 9.2; // 280cm or 9.2ft (approx. 9'2")
+
+        return Column(
+          crossAxisAlignment: CrossAxisAlignment.start,
           children: [
-            Text(
-              heightValue.round().toString(),
-              style: TextStyle(fontSize: 100.f, color: AppColors.textColor, height: 1),
+            SizedBox(height: 24.h),
+            Center(
+              child: Text(
+                'How tall are you?'.needTranslation,
+                style: TextStyle(fontSize: 18.f, fontWeight: FontWeight.w600, color: AppColors.textColor),
+              ),
+            ),
+            SizedBox(height: 24.h),
+            Padding(
+              padding: EdgeInsets.symmetric(horizontal: 24.w),
+              child: _unitSelector(viewModel),
+            ),
+            SizedBox(height: 20.h),
+            Row(
+              mainAxisAlignment: MainAxisAlignment.spaceBetween,
+              children: [
+                Spacer(flex: 1),
+                Expanded(
+                  flex: 3,
+                  child: Consumer(
+                    builder: (context, viewModel, child) {
+                      return Text.rich(
+                        TextSpan(
+                          children: [
+                            TextSpan(
+                              text:
+                                  viewModel.isHeightCm ? viewModel.selectedHeight?.round().toString() : viewModel.selectedHeight?.toStringAsFixed(1),
+                              style: TextStyle(
+                                fontSize: 90.f,
+                                color: AppColors.textColor,
+                                height: 1,
+                              ),
+                            ),
+                            TextSpan(
+                              text: viewModel.isHeightCm ? 'cm' : 'ft',
+                              style: TextStyle(
+                                fontWeight: FontWeight.w700,
+                                fontSize: 24.f,
+                              ),
+                            ),
+                          ],
+                        ),
+                      ).paddingOnly(bottom: 100.h, left: 20.w);
+                    },
+                  ),
+                ),
+                Expanded(
+                  child: HeightScale(
+                    enableHaptic: true,
+                    enableSound: true,
+                    minValue: minValue,
+                    maxValue: maxValue,
+                    initialHeight: viewModel.selectedHeight ?? 100,
+                    isCm: viewModel.isHeightCm,
+                    onHeightChanged: (newHeight) {
+                      log("height: $newHeight");
+                      viewModel.setHeight(newHeight, viewModel.isHeightCm);
+                    },
+                  ),
+                ),
+              ],
             ),
-            SizedBox(width: 8.w),
-            Text(widget.isCm ? 'cm' : 'ft', style: TextStyle(fontWeight: FontWeight.w700, fontSize: 24.f)).paddingOnly(bottom: 10.h, left: 8.w),
           ],
-        ),
-      ],
+        );
+      },
     );
   }
 }
-
-class _RulerPainter extends CustomPainter {
-  @override
-  void paint(Canvas canvas, Size size) {
-    final paintTick = Paint()..color = const Color(0xFF222222);
-    final paintSmall = Paint()..color = const Color(0xFF222222).withValues(alpha: 0.6);
-
-    final width = size.width;
-    final start = 120;
-    final end = 210;
-    final steps = end - start;
-    for (int i = 0; i <= steps; i++) {
-      final x = (i / steps) * width;
-      if (i % 10 == 0) {
-        canvas.drawLine(Offset(x, size.height * 0.1), Offset(x, size.height * 0.6), paintTick);
-      } else if (i % 5 == 0) {
-        canvas.drawLine(Offset(x, size.height * 0.2), Offset(x, size.height * 0.5), paintSmall);
-      } else {
-        canvas.drawLine(Offset(x, size.height * 0.35), Offset(x, size.height * 0.5), paintSmall);
-      }
-    }
-  }
-
-  @override
-  bool shouldRepaint(covariant CustomPainter oldDelegate) => false;
-}
diff --git a/lib/presentation/symptoms_checker/user_info_selection/pages/weight_selection_page.dart b/lib/presentation/symptoms_checker/user_info_selection/pages/weight_selection_page.dart
index 0319f4b..1d38a91 100644
--- a/lib/presentation/symptoms_checker/user_info_selection/pages/weight_selection_page.dart
+++ b/lib/presentation/symptoms_checker/user_info_selection/pages/weight_selection_page.dart
@@ -1,36 +1,22 @@
+import 'dart:developer';
+
 import 'package:flutter/material.dart';
 import 'package:hmg_patient_app_new/core/app_export.dart';
 import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
 import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
+import 'package:hmg_patient_app_new/features/symptoms_checker/symptoms_checker_view_model.dart';
+import 'package:hmg_patient_app_new/presentation/symptoms_checker/user_info_selection/widgets/weight_scale.dart';
 import 'package:hmg_patient_app_new/theme/colors.dart';
+import 'package:provider/provider.dart';
 
 /// Weight selection page content
-class WeightSelectionPage extends StatefulWidget {
-  final double weight;
-  final bool isKg;
+class WeightSelectionPage extends StatelessWidget {
   final Function(double, bool) onWeightChanged;
 
-  const WeightSelectionPage({
-    super.key,
-    required this.weight,
-    required this.isKg,
-    required this.onWeightChanged,
-  });
-
-  @override
-  State createState() => _WeightSelectionPageState();
-}
-
-class _WeightSelectionPageState extends State {
-  late double weightValue;
+  const WeightSelectionPage({super.key, required this.onWeightChanged});
 
-  @override
-  void initState() {
-    super.initState();
-    weightValue = widget.weight;
-  }
-
-  Widget _unitSelector() {
+  Widget _unitSelector(SymptomsCheckerViewModel viewModel) {
+    bool isKg = viewModel.isWeightKg;
     return Container(
       height: 54.h,
       padding: EdgeInsets.all(4.h),
@@ -49,7 +35,7 @@ class _WeightSelectionPageState extends State {
                 curve: Curves.easeInOut,
                 width: tabWidth,
                 height: constraints.maxHeight,
-                margin: EdgeInsets.only(left: widget.isKg ? 0 : tabWidth + 8.w),
+                margin: EdgeInsets.only(left: isKg ? 0 : tabWidth + 8.w),
                 decoration: BoxDecoration(
                   color: AppColors.bottomNAVBorder,
                   borderRadius: BorderRadius.circular(7.r),
@@ -61,10 +47,10 @@ class _WeightSelectionPageState extends State {
                   Expanded(
                     child: GestureDetector(
                       onTap: () {
-                        if (!widget.isKg) {
+                        if (!isKg) {
                           // Convert from LBS to KG (1 lb = 0.453592 kg)
-                          final convertedWeight = weightValue / 2.20462;
-                          widget.onWeightChanged(convertedWeight, true);
+                          final convertedWeight = viewModel.selectedWeight! / 2.20462;
+                          Future.microtask(() => onWeightChanged(convertedWeight, true));
                         }
                       },
                       child: Container(
@@ -75,7 +61,7 @@ class _WeightSelectionPageState extends State {
                           style: TextStyle(
                             fontWeight: FontWeight.w700,
                             fontSize: 14.f,
-                            color: widget.isKg ? AppColors.textColor : AppColors.textColor.withValues(alpha: 0.6),
+                            color: isKg ? AppColors.textColor : AppColors.textColor.withValues(alpha: 0.6),
                           ),
                         ),
                       ),
@@ -84,10 +70,10 @@ class _WeightSelectionPageState extends State {
                   Expanded(
                     child: GestureDetector(
                       onTap: () {
-                        if (widget.isKg) {
+                        if (isKg) {
                           // Convert from KG to LBS (1 kg = 2.20462 lbs)
-                          final convertedWeight = weightValue * 2.20462;
-                          widget.onWeightChanged(convertedWeight, false);
+                          final convertedWeight = viewModel.selectedWeight! * 2.20462;
+                          Future.microtask(() => onWeightChanged(convertedWeight, false));
                         }
                       },
                       child: Container(
@@ -98,7 +84,7 @@ class _WeightSelectionPageState extends State {
                           style: TextStyle(
                             fontWeight: FontWeight.w700,
                             fontSize: 14.f,
-                            color: !widget.isKg ? AppColors.textColor : AppColors.textColor.withValues(alpha: 0.6),
+                            color: !isKg ? AppColors.textColor : AppColors.textColor.withValues(alpha: 0.6),
                           ),
                         ),
                       ),
@@ -113,124 +99,64 @@ class _WeightSelectionPageState extends State {
     );
   }
 
-  Widget _weightSlider() {
-    return Column(
-      children: [
-        SizedBox(height: 18.h),
-        SizedBox(height: 12.h),
-        SizedBox(
-          height: 80.h,
-          child: Row(
-            children: [
-              Expanded(child: Container()),
-              Expanded(
-                flex: 6,
-                child: Stack(
-                  alignment: Alignment.center,
-                  children: [
-                    Positioned.fill(
-                      child: CustomPaint(
-                        painter: _WeightRulerPainter(),
-                      ),
-                    ),
-                    SliderTheme(
-                      data: SliderTheme.of(context).copyWith(
-                        trackHeight: 6.h,
-                        thumbShape: const RoundSliderThumbShape(enabledThumbRadius: 0),
-                        overlayShape: const RoundSliderOverlayShape(overlayRadius: 0),
-                        activeTrackColor: AppColors.primaryRedColor,
-                        inactiveTrackColor: AppColors.lightRedButtonColor,
-                      ),
-                      child: Slider(
-                        min: 30,
-                        max: 150,
-                        value: weightValue,
-                        onChanged: (v) {
-                          setState(() => weightValue = v);
-                          widget.onWeightChanged(v, widget.isKg);
-                        },
-                      ),
-                    ),
-                    Positioned(
-                      right: 0,
-                      child: Container(
-                        width: 18.w,
-                        height: 18.h,
-                        decoration: BoxDecoration(
-                          color: AppColors.primaryRedColor,
-                          shape: BoxShape.rectangle,
-                          borderRadius: BorderRadius.circular(4.r),
-                        ),
-                      ),
-                    ),
-                  ],
-                ),
-              ),
-              Expanded(child: Container()),
-            ],
-          ),
-        ),
-      ],
-    );
-  }
-
   @override
   Widget build(BuildContext context) {
-    return Column(
-      crossAxisAlignment: CrossAxisAlignment.start,
-      children: [
-        SizedBox(height: 24.h),
-        Center(
-          child: Text(
-            'What is your weight?'.needTranslation,
-            style: TextStyle(fontSize: 18.f, fontWeight: FontWeight.w600, color: AppColors.textColor),
+    return Consumer(builder: (context, viewModel, child) {
+      bool isKg = viewModel.isWeightKg;
+      // Define min/max values based on unit
+      final minValue = isKg ? 10.0 : 22.0; // 10kg or 22lbs
+      final maxValue = isKg ? 200.0 : 440.0; // 200kg or 440lbs
+
+      return Column(
+        crossAxisAlignment: CrossAxisAlignment.start,
+        children: [
+          SizedBox(height: 24.h),
+          Center(
+            child: Text(
+              'What is your weight?'.needTranslation,
+              style: TextStyle(fontSize: 18.f, fontWeight: FontWeight.w600, color: AppColors.textColor),
+            ),
+          ),
+          SizedBox(height: 24.h),
+          Padding(
+            padding: EdgeInsets.symmetric(horizontal: 24.w),
+            child: _unitSelector(viewModel),
           ),
-        ),
-        SizedBox(height: 20.h),
-        Padding(
-          padding: EdgeInsets.symmetric(horizontal: 24.w),
-          child: _unitSelector(),
-        ),
-        SizedBox(height: 90.h),
-        Row(
-          mainAxisAlignment: MainAxisAlignment.center,
-          crossAxisAlignment: CrossAxisAlignment.end,
-          children: [
-            Text(
-              weightValue.round().toString(),
-              style: TextStyle(fontSize: 100.f, color: AppColors.textColor, height: 1),
+          SizedBox(height: 60.h),
+          // Weight display centered
+          Center(
+            child: Row(
+              mainAxisSize: MainAxisSize.min,
+              crossAxisAlignment: CrossAxisAlignment.end,
+              children: [
+                Text(
+                  viewModel.selectedWeight!.round().toString(),
+                  style: TextStyle(fontSize: 100.f, color: AppColors.textColor, height: 1),
+                ),
+                SizedBox(width: 8.w),
+                Text(
+                  isKg ? 'kg' : 'lbs',
+                  style: TextStyle(fontWeight: FontWeight.w700, fontSize: 24.f),
+                ).paddingOnly(bottom: 10.h),
+              ],
             ),
-            SizedBox(width: 8.w),
-            Text(widget.isKg ? 'kg' : 'lbs', style: TextStyle(fontWeight: FontWeight.w700, fontSize: 24.f)).paddingOnly(bottom: 10.h, left: 8.w),
-          ],
-        ),
-      ],
-    );
-  }
-}
-
-class _WeightRulerPainter extends CustomPainter {
-  @override
-  void paint(Canvas canvas, Size size) {
-    final paintTick = Paint()..color = const Color(0xFF222222);
-    final paintSmall = Paint()..color = const Color(0xFF222222).withValues(alpha: 0.6);
-
-    final width = size.width;
-    final start = 30;
-    final end = 150;
-    final steps = end - start;
-    for (int i = 0; i <= steps; i++) {
-      final x = (i / steps) * width;
-      if (i % 10 == 0) {
-        canvas.drawLine(Offset(x, size.height * 0.1), Offset(x, size.height * 0.6), paintTick);
-      } else if (i % 5 == 0) {
-        canvas.drawLine(Offset(x, size.height * 0.2), Offset(x, size.height * 0.5), paintSmall);
-      } else {
-        canvas.drawLine(Offset(x, size.height * 0.35), Offset(x, size.height * 0.5), paintSmall);
-      }
-    }
+          ),
+          SizedBox(height: 40.h),
+          // Horizontal weight picker
+          WeightScale(
+            enableHaptic: true,
+            enableSound: true,
+            minValue: minValue,
+            maxValue: maxValue,
+            initialWeight: viewModel.selectedWeight!,
+            isKg: isKg,
+            onWeightChanged: (newWeight) {
+              log("weight: $newWeight");
+              Future.microtask(() => onWeightChanged(newWeight, isKg));
+            },
+          ),
+        ],
+      );
+    });
   }
-
-  @override
-  bool shouldRepaint(covariant CustomPainter oldDelegate) => false;
 }
diff --git a/lib/presentation/symptoms_checker/user_info_selection/user_info_flow_manager.dart b/lib/presentation/symptoms_checker/user_info_selection/user_info_flow_manager.dart
index 43d485a..725d78e 100644
--- a/lib/presentation/symptoms_checker/user_info_selection/user_info_flow_manager.dart
+++ b/lib/presentation/symptoms_checker/user_info_selection/user_info_flow_manager.dart
@@ -39,7 +39,6 @@ class _UserInfoFlowManagerState extends State {
   void initState() {
     super.initState();
     _viewModel = context.read();
-    // _viewModel.resetUserInfo();
   }
 
   @override
@@ -57,7 +56,6 @@ class _UserInfoFlowManagerState extends State {
         curve: Curves.easeInOut,
       );
     } else {
-      // Submit and navigate to next screen
       _submitUserInfo();
     }
   }
@@ -91,119 +89,165 @@ class _UserInfoFlowManagerState extends State {
     context.pop();
   }
 
-  Widget _buildProgressBar(int currentPage) {
-    return Row(
-      children: List.generate(4, (index) {
-        final isActive = index <= currentPage;
-        return Expanded(
-          child: Container(
-            height: 4.h,
-            margin: EdgeInsets.symmetric(horizontal: 6.w),
-            decoration: BoxDecoration(
-              color: isActive ? AppColors.primaryRedColor : AppColors.greyLightColor,
-              borderRadius: BorderRadius.circular(8.r),
-            ),
-          ),
+  Widget _buildProgressBar() {
+    return Consumer(
+      builder: (BuildContext context, viewModel, child) {
+        return Row(
+          children: List.generate(4, (index) {
+            final isCompleted = index < viewModel.userInfoCurrentPage;
+            final isCurrentStep = index == viewModel.userInfoCurrentPage;
+
+            return Expanded(
+              child: Padding(
+                padding: EdgeInsets.symmetric(horizontal: 6.w),
+                child: ClipRRect(
+                  borderRadius: BorderRadius.circular(8.r),
+                  child: Stack(
+                    children: [
+                      // Background (grey)
+                      Container(
+                        height: 4.h,
+                        decoration: BoxDecoration(
+                          color: AppColors.greyLightColor,
+                          borderRadius: BorderRadius.circular(8.r),
+                        ),
+                      ),
+                      // Animated red fill from left to right
+                      TweenAnimationBuilder(
+                        duration: const Duration(milliseconds: 400),
+                        curve: Curves.easeInOut,
+                        tween: Tween(
+                          begin: 0.0,
+                          end: isCompleted
+                              ? 1.0
+                              : isCurrentStep
+                                  ? 1.0
+                                  : 0.0,
+                        ),
+                        builder: (context, value, child) {
+                          return FractionallySizedBox(
+                            alignment: Alignment.centerLeft,
+                            widthFactor: value,
+                            child: Container(
+                              height: 4.h,
+                              decoration: BoxDecoration(
+                                color: AppColors.primaryRedColor,
+                                borderRadius: BorderRadius.circular(8.r),
+                                boxShadow: isCurrentStep && value > 0
+                                    ? [
+                                        BoxShadow(
+                                          color: AppColors.primaryRedColor.withValues(alpha: 0.4),
+                                          blurRadius: 8.r,
+                                          spreadRadius: 1.r,
+                                        ),
+                                      ]
+                                    : null,
+                              ),
+                            ),
+                          );
+                        },
+                      ),
+                    ],
+                  ),
+                ),
+              ),
+            );
+          }),
         );
-      }),
+      },
     );
   }
 
-  Widget _buildStickyBottomCard(bool isLastPage) {
-    return Container(
-      decoration: BoxDecoration(
-        color: AppColors.whiteColor,
-        borderRadius: BorderRadius.vertical(top: Radius.circular(24.r)),
-      ),
-      padding: EdgeInsets.symmetric(horizontal: 24.w, vertical: 16.h),
-      child: SafeArea(
-        top: false,
-        child: Row(
-          children: [
-            Expanded(
-              child: CustomButton(
-                text: "Previous".needTranslation,
-                onPressed: _onPrevious,
-                backgroundColor: AppColors.primaryRedColor.withValues(alpha: 0.11),
-                borderColor: Colors.transparent,
-                textColor: AppColors.primaryRedColor,
-                fontSize: 16.f,
-              ),
-            ),
-            SizedBox(width: 12.w),
-            Expanded(
-              child: CustomButton(
-                text: isLastPage ? "Submit".needTranslation : "Next".needTranslation,
-                onPressed: _onNext,
-                backgroundColor: AppColors.primaryRedColor,
-                borderColor: AppColors.primaryRedColor,
-                textColor: AppColors.whiteColor,
-                fontSize: 16.f,
+  Widget _buildStickyBottomCard() {
+    return Consumer(builder: (BuildContext context, viewModel, child) {
+      bool isLastPage = viewModel.isUserInfoLastPage;
+      bool isFirstPage = viewModel.isUserInfoFirstPage;
+      return Container(
+        decoration: BoxDecoration(
+          color: AppColors.whiteColor,
+          borderRadius: BorderRadius.vertical(top: Radius.circular(24.r)),
+        ),
+        padding: EdgeInsets.only(left: 24.w, right: 24.w, top: 16.h),
+        child: SafeArea(
+          top: false,
+          child: Row(
+            children: [
+              if (!isFirstPage) ...[
+                Expanded(
+                  child: CustomButton(
+                    text: "Previous".needTranslation,
+                    onPressed: _onPrevious,
+                    backgroundColor: AppColors.primaryRedColor.withValues(alpha: 0.11),
+                    borderColor: Colors.transparent,
+                    textColor: AppColors.primaryRedColor,
+                    fontSize: 16.f,
+                  ),
+                ),
+                SizedBox(width: 12.w),
+              ],
+              Expanded(
+                child: CustomButton(
+                  text: isLastPage ? "Submit".needTranslation : "Next".needTranslation,
+                  onPressed: _onNext,
+                  backgroundColor: AppColors.primaryRedColor,
+                  borderColor: AppColors.primaryRedColor,
+                  textColor: AppColors.whiteColor,
+                  fontSize: 16.f,
+                ),
               ),
-            ),
-          ],
+            ],
+          ),
         ),
-      ),
-    );
+      );
+    });
   }
 
   @override
   Widget build(BuildContext context) {
-    return Consumer(
-      builder: (context, viewModel, child) {
-        return Scaffold(
-          backgroundColor: AppColors.bgScaffoldColor,
-          body: Column(
-            children: [
-              Expanded(
-                child: CollapsingListView(
-                  title: _pageTitles[viewModel.userInfoCurrentPage].needTranslation,
-                  isLeading: true,
-                  child: Column(
-                    crossAxisAlignment: CrossAxisAlignment.start,
-                    children: [
-                      SizedBox(height: 24.h),
-                      _buildProgressBar(viewModel.userInfoCurrentPage),
-                      SizedBox(height: 24.h),
-                      SizedBox(
-                        height: 600.h,
-                        child: PageView(
-                          controller: _pageController,
-                          physics: const NeverScrollableScrollPhysics(), // Disable swipe
-                          onPageChanged: (index) {
-                            viewModel.setUserInfoPage(index);
-                          },
-                          children: [
-                            GenderSelectionPage(
-                              selectedGender: viewModel.selectedGender,
-                              onGenderSelected: viewModel.setGender,
-                            ),
-                            AgeSelectionPage(
-                              selectedAge: viewModel.selectedAge,
-                              onAgeSelected: viewModel.setAge,
-                            ),
-                            HeightSelectionPage(
-                              height: viewModel.selectedHeight ?? 178,
-                              isCm: viewModel.isHeightCm,
-                              onHeightChanged: viewModel.setHeight,
-                            ),
-                            WeightSelectionPage(
-                              weight: viewModel.selectedWeight ?? 70,
-                              isKg: viewModel.isWeightKg,
-                              onWeightChanged: viewModel.setWeight,
-                            ),
-                          ],
+    return Scaffold(
+      backgroundColor: AppColors.bgScaffoldColor,
+      body: Column(
+        children: [
+          Expanded(
+            child: CollapsingListView(
+              physics: NeverScrollableScrollPhysics(),
+              title: _pageTitles[_viewModel.userInfoCurrentPage].needTranslation,
+              isLeading: true,
+              child: Column(
+                crossAxisAlignment: CrossAxisAlignment.start,
+                children: [
+                  SizedBox(height: 24.h),
+                  _buildProgressBar(),
+                  SizedBox(height: 24.h),
+                  SizedBox(
+                    height: 600.h,
+                    child: PageView(
+                      controller: _pageController,
+                      physics: const NeverScrollableScrollPhysics(), // Disable swipe
+                      onPageChanged: (index) {
+                        _viewModel.setUserInfoPage(index);
+                      },
+                      children: [
+                        GenderSelectionPage(
+                          selectedGender: _viewModel.selectedGender,
+                          onGenderSelected: _viewModel.setGender,
                         ),
-                      ),
-                    ],
+                        AgeSelectionPage(
+                          selectedAge: _viewModel.selectedAge,
+                          onAgeSelected: _viewModel.setAge,
+                        ),
+                        HeightSelectionPage(),
+                        WeightSelectionPage(onWeightChanged: _viewModel.setWeight),
+                      ],
+                    ),
                   ),
-                ),
+                ],
               ),
-              _buildStickyBottomCard(viewModel.isUserInfoLastPage),
-            ],
+            ),
           ),
-        );
-      },
+          _buildStickyBottomCard(),
+        ],
+      ),
     );
   }
 }
diff --git a/lib/presentation/symptoms_checker/user_info_selection/widgets/custom_date_picker.dart b/lib/presentation/symptoms_checker/user_info_selection/widgets/custom_date_picker.dart
new file mode 100644
index 0000000..98051e0
--- /dev/null
+++ b/lib/presentation/symptoms_checker/user_info_selection/widgets/custom_date_picker.dart
@@ -0,0 +1,235 @@
+import 'dart:async';
+
+import 'package:flutter/material.dart';
+import 'package:flutter/services.dart';
+import 'package:hmg_patient_app_new/core/app_export.dart';
+import 'package:hmg_patient_app_new/presentation/symptoms_checker/user_info_selection/widgets/triangle_indicator.dart';
+import 'package:hmg_patient_app_new/theme/colors.dart';
+
+class ThreeColumnDatePicker extends StatefulWidget {
+  final DateTime initialDate;
+  final ValueChanged? onDateChanged;
+
+  // Feedback config
+  final bool enableHaptic;
+  final bool enableSound;
+  final Duration feedbackDebounce;
+
+  const ThreeColumnDatePicker({
+    super.key,
+    required this.initialDate,
+    this.onDateChanged,
+    this.enableHaptic = true,
+    this.enableSound = true,
+    this.feedbackDebounce = const Duration(milliseconds: 80),
+  });
+
+  @override
+  State createState() => _ThreeColumnDatePickerState();
+}
+
+class _ThreeColumnDatePickerState extends State {
+  static const int yearRange = 100;
+  static const double _defaultItemExtent = 48.0; // will be scaled with .h
+
+  late final List _days;
+  late final List _months;
+  late final List _years;
+
+  late FixedExtentScrollController _dayController;
+  late FixedExtentScrollController _monthController;
+  late FixedExtentScrollController _yearController;
+
+  int _selectedDay = 0;
+  int _selectedMonth = 0;
+  int _selectedYearIndex = 0;
+
+  // Debounce timer used for playing feedback only after small pause
+  Timer? _feedbackTimer;
+
+  double get _itemExtent => _defaultItemExtent.h;
+
+  @override
+  void initState() {
+    super.initState();
+
+    _days = List.generate(31, (i) => (i + 1).toString().padLeft(2, '0'));
+    _months = const ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
+    final currentYear = DateTime.now().year;
+    _years = List.generate(yearRange, (i) => currentYear - i);
+
+    _selectedDay = (widget.initialDate.day - 1).clamp(0, _days.length - 1);
+    _selectedMonth = (widget.initialDate.month - 1).clamp(0, _months.length - 1);
+    _selectedYearIndex = _years.indexOf(widget.initialDate.year);
+    if (_selectedYearIndex == -1) _selectedYearIndex = 0;
+
+    _dayController = FixedExtentScrollController(initialItem: _selectedDay);
+    _monthController = FixedExtentScrollController(initialItem: _selectedMonth);
+    _yearController = FixedExtentScrollController(initialItem: _selectedYearIndex);
+  }
+
+  @override
+  void dispose() {
+    _feedbackTimer?.cancel();
+    _dayController.dispose();
+    _monthController.dispose();
+    _yearController.dispose();
+    super.dispose();
+  }
+
+  void _emitDate() {
+    final day = int.parse(_days[_selectedDay]);
+    final month = _selectedMonth + 1;
+    final year = _years[_selectedYearIndex];
+    final date = DateTime(year, month, day);
+    widget.onDateChanged?.call(date);
+  }
+
+  // Schedule haptic + sound feedback with debounce (prevents spamming during fling)
+  void _scheduleFeedback() {
+    if (!(widget.enableHaptic || widget.enableSound)) return;
+
+    _feedbackTimer?.cancel();
+    _feedbackTimer = Timer(widget.feedbackDebounce, () {
+      // Haptic
+      if (widget.enableHaptic) {
+        // selection click is lightweight and appropriate for wheel ticks
+        HapticFeedback.selectionClick();
+      }
+      // Sound
+      if (widget.enableSound) {
+        // simple system click - note: may be muted by device settings
+        SystemSound.play(SystemSoundType.click);
+      }
+    });
+  }
+
+  Widget _wheel({
+    required FixedExtentScrollController controller,
+    required int itemCount,
+    required Widget Function(int index, bool selected) itemBuilder,
+    required ValueChanged onSelectedItemChanged,
+    required int currentlySelectedIndex,
+  }) {
+    return Expanded(
+      child: SizedBox(
+        height: _itemExtent * 5, // show ~5 rows
+        child: ListWheelScrollView.useDelegate(
+          controller: controller,
+          itemExtent: _itemExtent,
+          physics: const BouncingScrollPhysics(),
+          diameterRatio: 2.2,
+          squeeze: 1.2,
+          perspective: 0.004,
+          // overAndUnderCenterOpacity: 0.6,
+          onSelectedItemChanged: (i) {
+            // update selected index, emit date and schedule feedback
+            onSelectedItemChanged(i);
+            _scheduleFeedback();
+          },
+          childDelegate: ListWheelChildBuilderDelegate(
+            builder: (context, index) {
+              if (index < 0 || index >= itemCount) return null;
+              final bool selected = index == currentlySelectedIndex;
+              return Center(child: itemBuilder(index, selected));
+            },
+            childCount: itemCount,
+          ),
+        ),
+      ),
+    );
+  }
+
+  Widget _styledText(String text, bool selected) {
+    return Text(
+      text,
+      textAlign: TextAlign.center,
+      style: TextStyle(
+        fontSize: selected ? 22.f : 20.f,
+        fontWeight: selected ? FontWeight.w600 : FontWeight.w500,
+        color: selected ? AppColors.textColor : AppColors.greyTextColor.withValues(alpha: 0.9),
+        height: 1.0,
+        letterSpacing: selected ? -0.02 * 30 : -0.02 * 18,
+      ),
+    );
+  }
+
+  @override
+  Widget build(BuildContext context) {
+    final pickerHeight = _itemExtent * 5;
+    final pointerSize = 20.w;
+    final pointerTop = (pickerHeight / 2) - (pointerSize / 2);
+
+    return LayoutBuilder(builder: (context, constraints) {
+      return SizedBox(
+        height: pickerHeight,
+        child: Stack(
+          children: [
+            Row(
+              children: [
+                // Day wheel
+                _wheel(
+                  controller: _dayController,
+                  itemCount: _days.length,
+                  currentlySelectedIndex: _selectedDay,
+                  onSelectedItemChanged: (i) {
+                    setState(() => _selectedDay = i);
+                    _emitDate();
+                  },
+                  itemBuilder: (index, selected) => _styledText(_days[index], selected),
+                ),
+
+                // Month wheel
+                _wheel(
+                  controller: _monthController,
+                  itemCount: _months.length,
+                  currentlySelectedIndex: _selectedMonth,
+                  onSelectedItemChanged: (i) {
+                    setState(() => _selectedMonth = i);
+                    _emitDate();
+                  },
+                  itemBuilder: (index, selected) => _styledText(_months[index], selected),
+                ),
+
+                // Year wheel
+                _wheel(
+                  controller: _yearController,
+                  itemCount: _years.length,
+                  currentlySelectedIndex: _selectedYearIndex,
+                  onSelectedItemChanged: (i) {
+                    setState(() => _selectedYearIndex = i);
+                    _emitDate();
+                  },
+                  itemBuilder: (index, selected) => _styledText(_years[index].toString(), selected),
+                ),
+              ],
+            ),
+
+            // subtle center overlay (optional — keeps layout consistent & highlights center row)
+            Positioned.fill(
+              child: IgnorePointer(
+                child: Center(
+                  child: SizedBox(
+                    height: _itemExtent,
+                  ),
+                ),
+              ),
+            ),
+
+            // left red triangular pointer aligned to center row
+            Positioned(
+              left: 0.w,
+              top: pointerTop,
+              child: TriangleIndicator(
+                pointerSize: pointerSize,
+                // your TriangleIndicator supports direction param; use left as in the original
+                // if your TriangleIndicator doesn't accept direction, remove the param
+                direction: TriangleDirection.left,
+              ),
+            ),
+          ],
+        ),
+      );
+    });
+  }
+}
diff --git a/lib/presentation/symptoms_checker/user_info_selection/widgets/height_scale.dart b/lib/presentation/symptoms_checker/user_info_selection/widgets/height_scale.dart
new file mode 100644
index 0000000..29baf64
--- /dev/null
+++ b/lib/presentation/symptoms_checker/user_info_selection/widgets/height_scale.dart
@@ -0,0 +1,169 @@
+import 'dart:async';
+
+import 'package:flutter/material.dart';
+import 'package:flutter/services.dart';
+import 'package:hmg_patient_app_new/core/app_export.dart';
+import 'package:hmg_patient_app_new/presentation/symptoms_checker/user_info_selection/widgets/triangle_indicator.dart';
+import 'package:hmg_patient_app_new/theme/colors.dart';
+
+class HeightScale extends StatefulWidget {
+  final double minValue;
+  final double maxValue;
+  final double initialHeight;
+  final bool isCm;
+  final ValueChanged? onHeightChanged;
+
+  // Feedback config
+  final bool enableHaptic;
+  final bool enableSound;
+  final Duration feedbackDebounce;
+
+  const HeightScale({
+    super.key,
+    required this.minValue,
+    required this.maxValue,
+    required this.initialHeight,
+    required this.isCm,
+    this.onHeightChanged,
+    this.enableHaptic = true,
+    this.enableSound = true,
+    this.feedbackDebounce = const Duration(milliseconds: 80),
+  });
+
+  @override
+  State createState() => _HeightScaleState();
+}
+
+class _HeightScaleState extends State {
+  late FixedExtentScrollController _scrollController;
+
+  // Debounce timer used for playing feedback only after small pause
+  Timer? _feedbackTimer;
+
+  // Get increment based on unit (CM = 1.0, FT = 0.1)
+  double get _increment => widget.isCm ? 1.0 : 0.1;
+
+  @override
+  void initState() {
+    super.initState();
+    int initialIndex = ((widget.initialHeight - widget.minValue) / _increment).round();
+    _scrollController = FixedExtentScrollController(initialItem: initialIndex);
+  }
+
+  // Schedule haptic + sound feedback with debounce (prevents spamming during fling)
+  void _scheduleFeedback() {
+    if (!(widget.enableHaptic || widget.enableSound)) return;
+
+    _feedbackTimer?.cancel();
+    _feedbackTimer = Timer(widget.feedbackDebounce, () {
+      // Haptic
+      if (widget.enableHaptic) {
+        // selection click is lightweight and appropriate for wheel ticks
+        HapticFeedback.selectionClick();
+      }
+      // Sound
+      if (widget.enableSound) {
+        // simple system click - note: may be muted by device settings
+        SystemSound.play(SystemSoundType.click);
+      }
+    });
+  }
+
+  @override
+  void dispose() {
+    _feedbackTimer?.cancel();
+    _scrollController.dispose();
+    super.dispose();
+  }
+
+  @override
+  Widget build(BuildContext context) {
+    final pointerSize = 20.w;
+    final pickerHeight = 300.h;
+    final pointerTop = (pickerHeight / 2) - (pointerSize / 2);
+
+    return SizedBox(
+      height: pickerHeight,
+      child: Stack(
+        children: [
+          // Scrollable wheel picker
+          ListWheelScrollView.useDelegate(
+            controller: _scrollController,
+            itemExtent: 10.h,
+            diameterRatio: 2.0,
+            squeeze: 1.2,
+            perspective: 0.001,
+            physics: const BouncingScrollPhysics(),
+            onSelectedItemChanged: (index) {
+              final selectedValue = widget.minValue + (index * _increment);
+              widget.onHeightChanged?.call(selectedValue);
+              _scheduleFeedback();
+            },
+            childDelegate: ListWheelChildBuilderDelegate(
+              childCount: ((widget.maxValue - widget.minValue) / _increment).round() + 1,
+              builder: (context, index) {
+                final height = widget.minValue + (index * _increment);
+
+                // For CM: main mark every 10, mid mark every 5
+                // For FT: main mark every 1.0 (10 ticks), mid mark every 0.5 (5 ticks)
+                final isMainMark = widget.isCm ? height % 10 == 0 : (height * 10).round() % 10 == 0;
+                final isMidMark = widget.isCm ? height % 5 == 0 : (height * 10).round() % 5 == 0;
+
+                return SizedBox(
+                  width: 100.w,
+                  child: Row(
+                    crossAxisAlignment: CrossAxisAlignment.center,
+                    mainAxisAlignment: MainAxisAlignment.end,
+                    children: [
+                      // Number label for main marks
+                      if (isMainMark)
+                        SizedBox(
+                          width: 30.w,
+                          child: Text(
+                            widget.isCm ? height.round().toString() : height.toStringAsFixed(1),
+                            style: TextStyle(
+                              fontSize: 11.f,
+                              color: AppColors.greyTextColor,
+                              fontWeight: FontWeight.w500,
+                              height: 1,
+                            ),
+                            textAlign: TextAlign.right,
+                          ),
+                        )
+                      else
+                        SizedBox(width: 30.w),
+                      SizedBox(width: 4.w),
+                      // Ruler mark
+                      Container(
+                        width: isMainMark
+                            ? 40.w
+                            : isMidMark
+                                ? 30.w
+                                : 25.w,
+                        height: isMainMark || isMidMark ? 2.5.h : 1.5.h,
+                        decoration: BoxDecoration(
+                          color: isMainMark
+                              ? AppColors.textColor
+                              : isMidMark
+                                  ? AppColors.textColorLight
+                                  : AppColors.textColorLight.withValues(alpha: 0.5),
+                          borderRadius: BorderRadius.circular(2.r),
+                        ),
+                      ),
+                    ],
+                  ),
+                );
+              },
+            ),
+          ),
+          // Triangle indicator pointing to selected value
+          Positioned(
+            right: 0,
+            top: pointerTop,
+            child: TriangleIndicator(pointerSize: pointerSize),
+          ),
+        ],
+      ),
+    );
+  }
+}
diff --git a/lib/presentation/symptoms_checker/user_info_selection/widgets/triangle_indicator.dart b/lib/presentation/symptoms_checker/user_info_selection/widgets/triangle_indicator.dart
new file mode 100644
index 0000000..429279d
--- /dev/null
+++ b/lib/presentation/symptoms_checker/user_info_selection/widgets/triangle_indicator.dart
@@ -0,0 +1,85 @@
+import 'package:flutter/material.dart';
+import 'package:hmg_patient_app_new/theme/colors.dart';
+
+enum TriangleDirection { left, right, up, down }
+
+class TriangleIndicator extends StatelessWidget {
+  final double pointerSize;
+  final Color? color;
+  final TriangleDirection direction;
+
+  const TriangleIndicator({
+    super.key,
+    required this.pointerSize,
+    this.color,
+    this.direction = TriangleDirection.right,
+  });
+
+  @override
+  Widget build(BuildContext context) {
+    return CustomPaint(
+      size: Size(pointerSize, pointerSize),
+      painter: _TrianglePainter(
+        color: color ?? AppColors.primaryRedColor,
+        direction: direction,
+      ),
+    );
+  }
+}
+
+class _TrianglePainter extends CustomPainter {
+  final Color color;
+  final TriangleDirection direction;
+
+  _TrianglePainter({required this.color, required this.direction});
+
+  @override
+  void paint(Canvas canvas, Size size) {
+    final paint = Paint()
+      ..color = color
+      ..style = PaintingStyle.fill
+      ..isAntiAlias = true;
+
+    final path = Path();
+    final w = size.width;
+    final h = size.height;
+
+    switch (direction) {
+      case TriangleDirection.right:
+        // apex on the right, base on the left
+        path.moveTo(0, h / 2);
+        path.lineTo(w, 0);
+        path.lineTo(w, h);
+        path.close();
+        break;
+      case TriangleDirection.left:
+        // apex on the left, base on the right
+        path.moveTo(w, h / 2);
+        path.lineTo(0, 0);
+        path.lineTo(0, h);
+        path.close();
+        break;
+      case TriangleDirection.up:
+        // apex on top, base on bottom
+        path.moveTo(w / 2, 0);
+        path.lineTo(0, h);
+        path.lineTo(w, h);
+        path.close();
+        break;
+      case TriangleDirection.down:
+        // apex on bottom, base on top
+        path.moveTo(w / 2, h);
+        path.lineTo(0, 0);
+        path.lineTo(w, 0);
+        path.close();
+        break;
+    }
+
+    canvas.drawPath(path, paint);
+  }
+
+  @override
+  bool shouldRepaint(covariant _TrianglePainter oldDelegate) {
+    return oldDelegate.color != color || oldDelegate.direction != direction;
+  }
+}
diff --git a/lib/presentation/symptoms_checker/user_info_selection/widgets/user_info_progress_bar.dart b/lib/presentation/symptoms_checker/user_info_selection/widgets/user_info_progress_bar.dart
deleted file mode 100644
index 6e6d762..0000000
--- a/lib/presentation/symptoms_checker/user_info_selection/widgets/user_info_progress_bar.dart
+++ /dev/null
@@ -1,36 +0,0 @@
-import 'package:flutter/material.dart';
-import 'package:hmg_patient_app_new/core/app_export.dart';
-import 'package:hmg_patient_app_new/theme/colors.dart';
-
-/// Progress bar widget showing the current step in user info selection flow
-/// Total steps: 4 (Gender -> Age -> Height -> Weight)
-class UserInfoProgressBar extends StatelessWidget {
-  final int currentStep;
-  final int totalSteps;
-
-  const UserInfoProgressBar({
-    super.key,
-    required this.currentStep,
-    this.totalSteps = 4,
-  });
-
-  @override
-  Widget build(BuildContext context) {
-    return Row(
-      children: List.generate(totalSteps, (index) {
-        final isActive = index < currentStep;
-        return Expanded(
-          child: Container(
-            height: 4.h,
-            margin: EdgeInsets.symmetric(horizontal: 6.w),
-            decoration: BoxDecoration(
-              color: isActive ? AppColors.primaryRedColor : AppColors.greyLightColor,
-              borderRadius: BorderRadius.circular(8.r),
-            ),
-          ),
-        );
-      }),
-    );
-  }
-}
-
diff --git a/lib/presentation/symptoms_checker/user_info_selection/widgets/user_info_selection_scaffold.dart b/lib/presentation/symptoms_checker/user_info_selection/widgets/user_info_selection_scaffold.dart
deleted file mode 100644
index 3390c31..0000000
--- a/lib/presentation/symptoms_checker/user_info_selection/widgets/user_info_selection_scaffold.dart
+++ /dev/null
@@ -1,67 +0,0 @@
-import 'package:flutter/material.dart';
-import 'package:hmg_patient_app_new/core/app_export.dart';
-import 'package:hmg_patient_app_new/presentation/symptoms_checker/user_info_selection/widgets/user_info_progress_bar.dart';
-import 'package:hmg_patient_app_new/presentation/symptoms_checker/user_info_selection/widgets/user_info_sticky_bottom_card.dart';
-import 'package:hmg_patient_app_new/theme/colors.dart';
-import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart';
-
-/// Base scaffold for user info selection flow pages
-/// Provides consistent layout with progress bar and sticky bottom card
-class UserInfoSelectionScaffold extends StatelessWidget {
-  final String title;
-  final int currentStep;
-  final Widget child;
-  final VoidCallback? onPrevious;
-  final VoidCallback? onNext;
-  final bool showPrevious;
-  final String? nextButtonText;
-  final bool isScrollable;
-
-  const UserInfoSelectionScaffold({
-    super.key,
-    required this.title,
-    required this.currentStep,
-    required this.child,
-    this.onPrevious,
-    this.onNext,
-    this.showPrevious = true,
-    this.nextButtonText,
-    this.isScrollable = true,
-  });
-
-  @override
-  Widget build(BuildContext context) {
-    return Scaffold(
-      backgroundColor: AppColors.bgScaffoldColor,
-      body: Column(
-        children: [
-          Expanded(
-            child: CollapsingListView(
-              title: title,
-              isLeading: true,
-              child: Column(
-                crossAxisAlignment: CrossAxisAlignment.start,
-                children: [
-                  SizedBox(height: 24.h),
-                  UserInfoProgressBar(currentStep: currentStep),
-                  SizedBox(height: 24.h),
-                  isScrollable
-                      ? SingleChildScrollView(
-                          child: child,
-                        )
-                      : child,
-                ],
-              ),
-            ),
-          ),
-          UserInfoStickyBottomCard(
-            onPrevious: onPrevious,
-            onNext: onNext,
-            showPrevious: showPrevious,
-            nextButtonText: nextButtonText,
-          ),
-        ],
-      ),
-    );
-  }
-}
diff --git a/lib/presentation/symptoms_checker/user_info_selection/widgets/user_info_sticky_bottom_card.dart b/lib/presentation/symptoms_checker/user_info_selection/widgets/user_info_sticky_bottom_card.dart
deleted file mode 100644
index 10fd934..0000000
--- a/lib/presentation/symptoms_checker/user_info_selection/widgets/user_info_sticky_bottom_card.dart
+++ /dev/null
@@ -1,68 +0,0 @@
-import 'package:flutter/material.dart';
-import 'package:hmg_patient_app_new/core/app_export.dart';
-import 'package:hmg_patient_app_new/extensions/route_extensions.dart';
-import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
-import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
-import 'package:hmg_patient_app_new/theme/colors.dart';
-import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart';
-
-/// Sticky bottom card with Previous/Next navigation buttons
-class UserInfoStickyBottomCard extends StatelessWidget {
-  final VoidCallback? onPrevious;
-  final VoidCallback? onNext;
-  final bool showPrevious;
-  final String? nextButtonText;
-
-  const UserInfoStickyBottomCard({
-    super.key,
-    this.onPrevious,
-    this.onNext,
-    this.showPrevious = true,
-    this.nextButtonText,
-  });
-
-  @override
-  Widget build(BuildContext context) {
-    return Container(
-      decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
-        color: AppColors.whiteColor,
-        borderRadius: 24.r,
-      ),
-      child: Column(
-        mainAxisSize: MainAxisSize.min,
-        children: [
-          SizedBox(height: 16.h),
-          Row(
-            children: [
-              if (showPrevious) ...[
-                Expanded(
-                  child: CustomButton(
-                    text: "Previous".needTranslation,
-                    onPressed: onPrevious ?? () => context.pop(),
-                    backgroundColor: AppColors.primaryRedColor.withValues(alpha: 0.11),
-                    borderColor: Colors.transparent,
-                    textColor: AppColors.primaryRedColor,
-                    fontSize: 16.f,
-                  ),
-                ),
-                SizedBox(width: 12.w),
-              ],
-              Expanded(
-                child: CustomButton(
-                  text: nextButtonText ?? "Next".needTranslation,
-                  onPressed: onNext ?? () {},
-                  backgroundColor: AppColors.primaryRedColor,
-                  borderColor: AppColors.primaryRedColor,
-                  textColor: AppColors.whiteColor,
-                  fontSize: 16.f,
-                ),
-              ),
-            ],
-          ),
-          SizedBox(height: 24.h),
-        ],
-      ).paddingSymmetrical(24.w, 0),
-    );
-  }
-}
-
diff --git a/lib/presentation/symptoms_checker/user_info_selection/widgets/weight_scale.dart b/lib/presentation/symptoms_checker/user_info_selection/widgets/weight_scale.dart
new file mode 100644
index 0000000..8526a52
--- /dev/null
+++ b/lib/presentation/symptoms_checker/user_info_selection/widgets/weight_scale.dart
@@ -0,0 +1,180 @@
+import 'dart:async';
+
+import 'package:flutter/material.dart';
+import 'package:flutter/services.dart';
+import 'package:hmg_patient_app_new/core/app_export.dart';
+import 'package:hmg_patient_app_new/presentation/symptoms_checker/user_info_selection/widgets/triangle_indicator.dart';
+import 'package:hmg_patient_app_new/theme/colors.dart';
+
+class WeightScale extends StatefulWidget {
+  final double minValue;
+  final double maxValue;
+  final double initialWeight;
+  final bool isKg;
+  final ValueChanged? onWeightChanged;
+
+  // Feedback config
+  final bool enableHaptic;
+  final bool enableSound;
+  final Duration feedbackDebounce;
+
+  const WeightScale({
+    super.key,
+    required this.minValue,
+    required this.maxValue,
+    required this.initialWeight,
+    required this.isKg,
+    this.onWeightChanged,
+    this.enableHaptic = true,
+    this.enableSound = true,
+    this.feedbackDebounce = const Duration(milliseconds: 80),
+  });
+
+  @override
+  State createState() => _WeightScaleState();
+}
+
+class _WeightScaleState extends State {
+  late ScrollController _scrollController;
+
+  // Debounce timer used for playing feedback only after small pause
+  Timer? _feedbackTimer;
+
+  int? _lastReportedIndex;
+  final double _itemWidth = 8.0; // Width per weight unit
+
+  @override
+  void initState() {
+    super.initState();
+    int initialIndex = (widget.initialWeight - widget.minValue).round();
+    final initialOffset = initialIndex * _itemWidth;
+    _scrollController = ScrollController(initialScrollOffset: initialOffset);
+    _scrollController.addListener(_onScroll);
+  }
+
+  void _onScroll() {
+    if (!_scrollController.hasClients) return;
+
+    final offset = _scrollController.offset;
+    final index = (offset / _itemWidth).round();
+    final maxIndex = (widget.maxValue - widget.minValue).round();
+
+    if (index != _lastReportedIndex && index >= 0 && index <= maxIndex) {
+      _lastReportedIndex = index;
+      final selectedValue = widget.minValue + index;
+      widget.onWeightChanged?.call(selectedValue);
+      _scheduleFeedback();
+    }
+  }
+
+  // Schedule haptic + sound feedback with debounce (prevents spamming during fling)
+  void _scheduleFeedback() {
+    if (!(widget.enableHaptic || widget.enableSound)) return;
+
+    _feedbackTimer?.cancel();
+    _feedbackTimer = Timer(widget.feedbackDebounce, () {
+      // Haptic
+      if (widget.enableHaptic) {
+        // selection click is lightweight and appropriate for wheel ticks
+        HapticFeedback.selectionClick();
+      }
+      // Sound
+      if (widget.enableSound) {
+        // simple system click - note: may be muted by device settings
+        SystemSound.play(SystemSoundType.click);
+      }
+    });
+  }
+
+  @override
+  void dispose() {
+    _feedbackTimer?.cancel();
+    _scrollController.removeListener(_onScroll);
+    _scrollController.dispose();
+    super.dispose();
+  }
+
+  @override
+  Widget build(BuildContext context) {
+    final pointerSize = 20.h;
+    final pickerHeight = 100.h;
+    final itemCount = (widget.maxValue - widget.minValue).round() + 1;
+
+    return SizedBox(
+      height: pickerHeight,
+      child: Stack(
+        alignment: Alignment.center,
+        children: [
+          // Horizontal scrollable ruler with gradient fade
+          ListView.builder(
+            controller: _scrollController,
+            scrollDirection: Axis.horizontal,
+            physics: const BouncingScrollPhysics(),
+            padding: EdgeInsets.symmetric(horizontal: MediaQuery.of(context).size.width / 2),
+            itemCount: itemCount,
+            itemBuilder: (context, index) {
+              final weight = (widget.minValue + index).round();
+              final isMainMark = weight % 10 == 0;
+              final isMidMark = weight % 5 == 0;
+
+              return SizedBox(
+                width: _itemWidth,
+                child: Stack(
+                  alignment: Alignment.bottomCenter,
+                  clipBehavior: Clip.none,
+                  children: [
+                    // Ruler mark (vertical line)
+                    Positioned(
+                      bottom: 0,
+                      child: Container(
+                        width: isMainMark || isMidMark ? 2.5.w : 1.5.w,
+                        height: isMainMark
+                            ? 40.h
+                            : isMidMark
+                                ? 30.h
+                                : 25.h,
+                        decoration: BoxDecoration(
+                          color: isMainMark
+                              ? AppColors.textColor
+                              : isMidMark
+                                  ? AppColors.textColorLight
+                                  : AppColors.textColorLight.withValues(alpha: 0.5),
+                          borderRadius: BorderRadius.circular(2.r),
+                        ),
+                      ),
+                    ),
+                    // Number label for main marks
+                    if (isMainMark)
+                      Positioned(
+                        bottom: 45.h,
+                        child: Text(
+                          weight.toString(),
+                          style: TextStyle(
+                            fontSize: 11.f,
+                            color: AppColors.greyTextColor,
+                            fontWeight: FontWeight.w500,
+                            height: 1,
+                          ),
+                          textAlign: TextAlign.center,
+                          maxLines: 1,
+                          overflow: TextOverflow.visible,
+                        ),
+                      ),
+                  ],
+                ),
+              );
+            },
+          ),
+          // Triangle indicator pointing to selected value
+          Positioned(
+            bottom: 0,
+            child: TriangleIndicator(
+              pointerSize: pointerSize,
+              direction: TriangleDirection.up,
+            ),
+          ),
+        ],
+      ),
+    );
+  }
+}
diff --git a/lib/widgets/appbar/collapsing_list_view.dart b/lib/widgets/appbar/collapsing_list_view.dart
index ad8e743..7329de9 100644
--- a/lib/widgets/appbar/collapsing_list_view.dart
+++ b/lib/widgets/appbar/collapsing_list_view.dart
@@ -27,6 +27,7 @@ class CollapsingListView extends StatelessWidget {
   bool isClose;
   bool isLeading;
   VoidCallback? leadingCallback;
+  ScrollPhysics? physics;
 
   CollapsingListView({
     super.key,
@@ -43,6 +44,7 @@ class CollapsingListView extends StatelessWidget {
     this.isLeading = true,
     this.trailing,
     this.leadingCallback,
+    this.physics,
   });
 
   @override
@@ -53,6 +55,7 @@ class CollapsingListView extends StatelessWidget {
       body: Column(
         children: [
           CustomScrollView(
+            physics: physics,
             slivers: [
               SliverAppBar(
                 automaticallyImplyLeading: false,
@@ -119,11 +122,18 @@ class CollapsingListView extends StatelessWidget {
                                         color: AppColors.blackColor,
                                         letterSpacing: -0.5),
                                   ).expanded,
-                                  if (logout != null) actionButton(context, t, title: "Logout".needTranslation, icon: AppAssets.logout).onPress(logout!),
-                                  if (report != null) actionButton(context, t, title: "Feedback".needTranslation, icon: AppAssets.report_icon).onPress(report!),
-                                  if (history != null) actionButton(context, t, title: "History".needTranslation, icon: AppAssets.insurance_history_icon).onPress(history!),
-                                  if (instructions != null) actionButton(context, t, title: "Instructions".needTranslation, icon: AppAssets.requests).onPress(instructions!),
-                                  if (requests != null) actionButton(context, t, title: "Requests".needTranslation, icon: AppAssets.insurance_history_icon).onPress(requests!),
+                                  if (logout != null)
+                                    actionButton(context, t, title: "Logout".needTranslation, icon: AppAssets.logout).onPress(logout!),
+                                  if (report != null)
+                                    actionButton(context, t, title: "Feedback".needTranslation, icon: AppAssets.report_icon).onPress(report!),
+                                  if (history != null)
+                                    actionButton(context, t, title: "History".needTranslation, icon: AppAssets.insurance_history_icon)
+                                        .onPress(history!),
+                                  if (instructions != null)
+                                    actionButton(context, t, title: "Instructions".needTranslation, icon: AppAssets.requests).onPress(instructions!),
+                                  if (requests != null)
+                                    actionButton(context, t, title: "Requests".needTranslation, icon: AppAssets.insurance_history_icon)
+                                        .onPress(requests!),
                                   if (search != null) Utils.buildSvgWithAssets(icon: AppAssets.search_icon).onPress(search!).paddingOnly(right: 24),
                                   if (trailing != null) trailing!,
                                 ],
-- 
2.30.2


From fbe124f6ee76c8df0b6667cc4c11b166315468c0 Mon Sep 17 00:00:00 2001
From: faizatflutter 
Date: Sun, 14 Dec 2025 09:00:57 +0300
Subject: [PATCH 38/39] Complete UserInfo Selection Module

---
 .../symptoms_checker_view_model.dart          | 13 +++-
 .../symptoms_checker/user_info_selection.dart | 12 ++--
 .../user_info_flow_manager.dart               | 71 ++++++++++++-------
 3 files changed, 65 insertions(+), 31 deletions(-)

diff --git a/lib/features/symptoms_checker/symptoms_checker_view_model.dart b/lib/features/symptoms_checker/symptoms_checker_view_model.dart
index 1b43fc2..fe66cf7 100644
--- a/lib/features/symptoms_checker/symptoms_checker_view_model.dart
+++ b/lib/features/symptoms_checker/symptoms_checker_view_model.dart
@@ -38,6 +38,7 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
 
   // User Info Flow State
   int _userInfoCurrentPage = 0;
+  bool _isSinglePageEditMode = false; // Track if editing single page or full flow
   String? _selectedGender;
   DateTime? _dateOfBirth;
   int? _selectedAge;
@@ -53,6 +54,8 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
   // User Info Getters
   int get userInfoCurrentPage => _userInfoCurrentPage;
 
+  bool get isSinglePageEditMode => _isSinglePageEditMode;
+
   String? get selectedGender => _selectedGender;
 
   DateTime? get dateOfBirth => _dateOfBirth;
@@ -275,6 +278,7 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
     _tooltipOrganId = null;
     // Reset user info flow
     _userInfoCurrentPage = 0;
+    _isSinglePageEditMode = false;
     _selectedGender = null;
     _dateOfBirth = null;
     _selectedAge = null;
@@ -288,8 +292,15 @@ class SymptomsCheckerViewModel extends ChangeNotifier {
   // User Info Flow Methods
 
   /// Set current page in user info flow
-  void setUserInfoPage(int page) {
+  void setUserInfoPage(int page, {bool isSinglePageEdit = false}) {
     _userInfoCurrentPage = page;
+    _isSinglePageEditMode = isSinglePageEdit;
+    notifyListeners();
+  }
+
+  /// Set single page edit mode
+  void setSinglePageEditMode(bool isSingleEdit) {
+    _isSinglePageEditMode = isSingleEdit;
     notifyListeners();
   }
 
diff --git a/lib/presentation/symptoms_checker/user_info_selection.dart b/lib/presentation/symptoms_checker/user_info_selection.dart
index 9a66a65..91f3d36 100644
--- a/lib/presentation/symptoms_checker/user_info_selection.dart
+++ b/lib/presentation/symptoms_checker/user_info_selection.dart
@@ -165,7 +165,7 @@ class _UserInfoSelectionScreenState extends State {
                                 title: "Gender".needTranslation,
                                 subTitle: genderText,
                                 onTap: () {
-                                  viewModel.setUserInfoPage(0);
+                                  viewModel.setUserInfoPage(0, isSinglePageEdit: true);
                                   context.navigateWithName(AppRoutes.userInfoFlowManager);
                                 },
                                 trailingIcon: AppAssets.edit_icon,
@@ -178,7 +178,7 @@ class _UserInfoSelectionScreenState extends State {
                                 subTitle: ageText,
                                 iconColor: AppColors.greyTextColor,
                                 onTap: () {
-                                  viewModel.setUserInfoPage(1);
+                                  viewModel.setUserInfoPage(1, isSinglePageEdit: true);
                                   context.navigateWithName(AppRoutes.userInfoFlowManager);
                                 },
                                 trailingIcon: AppAssets.edit_icon,
@@ -190,7 +190,7 @@ class _UserInfoSelectionScreenState extends State {
                                 title: "Height".needTranslation,
                                 subTitle: heightText,
                                 onTap: () {
-                                  viewModel.setUserInfoPage(2);
+                                  viewModel.setUserInfoPage(2, isSinglePageEdit: true);
                                   context.navigateWithName(AppRoutes.userInfoFlowManager);
                                 },
                                 trailingIcon: AppAssets.edit_icon,
@@ -202,7 +202,7 @@ class _UserInfoSelectionScreenState extends State {
                                 title: "Weight".needTranslation,
                                 subTitle: weightText,
                                 onTap: () {
-                                  viewModel.setUserInfoPage(3);
+                                  viewModel.setUserInfoPage(3, isSinglePageEdit: true);
                                   context.navigateWithName(AppRoutes.userInfoFlowManager);
                                 },
                                 trailingIcon: AppAssets.edit_icon,
@@ -240,7 +240,7 @@ class _UserInfoSelectionScreenState extends State {
                     icon: AppAssets.edit_icon,
                     iconColor: AppColors.primaryRedColor,
                     onPressed: () {
-                      context.read().setUserInfoPage(0);
+                      context.read().setUserInfoPage(0, isSinglePageEdit: false);
                       context.navigateWithName(AppRoutes.userInfoFlowManager);
                     },
                     backgroundColor: AppColors.primaryRedColor.withValues(alpha: 0.11),
@@ -254,7 +254,7 @@ class _UserInfoSelectionScreenState extends State {
                   child: CustomButton(
                     text: "Yes, It is".needTranslation,
                     icon: AppAssets.tickIcon,
-                    iconColor: AppColors.whiteColor,
+                    iconColor: hasEmptyFields ? AppColors.greyTextColor : AppColors.whiteColor,
                     onPressed: hasEmptyFields
                         ? () {} // Empty function for disabled state
                         : () => context.navigateWithName(AppRoutes.organSelectorPage),
diff --git a/lib/presentation/symptoms_checker/user_info_selection/user_info_flow_manager.dart b/lib/presentation/symptoms_checker/user_info_selection/user_info_flow_manager.dart
index 725d78e..523470e 100644
--- a/lib/presentation/symptoms_checker/user_info_selection/user_info_flow_manager.dart
+++ b/lib/presentation/symptoms_checker/user_info_selection/user_info_flow_manager.dart
@@ -24,7 +24,7 @@ class UserInfoFlowManager extends StatefulWidget {
 }
 
 class _UserInfoFlowManagerState extends State {
-  final PageController _pageController = PageController();
+  late PageController _pageController;
   late SymptomsCheckerViewModel _viewModel;
 
   // Page titles
@@ -39,6 +39,8 @@ class _UserInfoFlowManagerState extends State {
   void initState() {
     super.initState();
     _viewModel = context.read();
+    // Initialize PageController with the current page from ViewModel
+    _pageController = PageController(initialPage: _viewModel.userInfoCurrentPage);
   }
 
   @override
@@ -48,6 +50,13 @@ class _UserInfoFlowManagerState extends State {
   }
 
   void _onNext() {
+    // If in single page edit mode, just save and go back
+    if (_viewModel.isSinglePageEditMode) {
+      context.pop();
+      return;
+    }
+
+    // Otherwise, continue with normal flow
     if (_viewModel.userInfoCurrentPage < 3) {
       _viewModel.nextUserInfoPage();
       _pageController.animateToPage(
@@ -162,6 +171,8 @@ class _UserInfoFlowManagerState extends State {
     return Consumer(builder: (BuildContext context, viewModel, child) {
       bool isLastPage = viewModel.isUserInfoLastPage;
       bool isFirstPage = viewModel.isUserInfoFirstPage;
+      bool isSingleEdit = viewModel.isSinglePageEditMode;
+
       return Container(
         decoration: BoxDecoration(
           color: AppColors.whiteColor,
@@ -170,33 +181,44 @@ class _UserInfoFlowManagerState extends State {
         padding: EdgeInsets.only(left: 24.w, right: 24.w, top: 16.h),
         child: SafeArea(
           top: false,
-          child: Row(
-            children: [
-              if (!isFirstPage) ...[
-                Expanded(
-                  child: CustomButton(
-                    text: "Previous".needTranslation,
-                    onPressed: _onPrevious,
-                    backgroundColor: AppColors.primaryRedColor.withValues(alpha: 0.11),
-                    borderColor: Colors.transparent,
-                    textColor: AppColors.primaryRedColor,
-                    fontSize: 16.f,
-                  ),
-                ),
-                SizedBox(width: 12.w),
-              ],
-              Expanded(
-                child: CustomButton(
-                  text: isLastPage ? "Submit".needTranslation : "Next".needTranslation,
+          child: isSingleEdit
+              ? // Single page edit mode - show only Save button
+              CustomButton(
+                  text: "Save".needTranslation,
                   onPressed: _onNext,
                   backgroundColor: AppColors.primaryRedColor,
                   borderColor: AppColors.primaryRedColor,
                   textColor: AppColors.whiteColor,
                   fontSize: 16.f,
+                )
+              : // Complete flow mode - show Previous/Next buttons
+              Row(
+                  children: [
+                    if (!isFirstPage) ...[
+                      Expanded(
+                        child: CustomButton(
+                          text: "Previous".needTranslation,
+                          onPressed: _onPrevious,
+                          backgroundColor: AppColors.primaryRedColor.withValues(alpha: 0.11),
+                          borderColor: Colors.transparent,
+                          textColor: AppColors.primaryRedColor,
+                          fontSize: 16.f,
+                        ),
+                      ),
+                      SizedBox(width: 12.w),
+                    ],
+                    Expanded(
+                      child: CustomButton(
+                        text: isLastPage ? "Submit".needTranslation : "Next".needTranslation,
+                        onPressed: _onNext,
+                        backgroundColor: AppColors.primaryRedColor,
+                        borderColor: AppColors.primaryRedColor,
+                        textColor: AppColors.whiteColor,
+                        fontSize: 16.f,
+                      ),
+                    ),
+                  ],
                 ),
-              ),
-            ],
-          ),
         ),
       );
     });
@@ -217,8 +239,9 @@ class _UserInfoFlowManagerState extends State {
                 crossAxisAlignment: CrossAxisAlignment.start,
                 children: [
                   SizedBox(height: 24.h),
-                  _buildProgressBar(),
-                  SizedBox(height: 24.h),
+                  // Only show progress bar in complete flow mode
+                  if (!_viewModel.isSinglePageEditMode) _buildProgressBar(),
+                  if (!_viewModel.isSinglePageEditMode) SizedBox(height: 24.h),
                   SizedBox(
                     height: 600.h,
                     child: PageView(
-- 
2.30.2


From 5fd1905d8cb7acd071f75e1419418e7f1defa85d Mon Sep 17 00:00:00 2001
From: faizatflutter 
Date: Sun, 14 Dec 2025 09:05:35 +0300
Subject: [PATCH 39/39] Complete UserInfo Selection Module

---
 lib/presentation/hmg_services/services_page.dart | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/presentation/hmg_services/services_page.dart b/lib/presentation/hmg_services/services_page.dart
index ab70265..a3f286a 100644
--- a/lib/presentation/hmg_services/services_page.dart
+++ b/lib/presentation/hmg_services/services_page.dart
@@ -244,7 +244,7 @@ class ServicesPage extends StatelessWidget {
                                 fit: BoxFit.contain,
                               ),
                               Utils.buildImgWithAssets(
-                                icon: AppAssets.male_img,
+                                icon: AppAssets.maleImg,
                                 height: 28.h,
                                 width: 28.w,
                                 border: 1,
-- 
2.30.2