appventure-medical-televisit-mobile-prebuild
Mobile icon

APPventure Medical Televisit Mobile PREBUILD

version 0.0.2 (Compatible with OutSystems 11)
Uploaded
 on 09 March 2022
 by 
5.0
 (1 rating)
appventure-medical-televisit-mobile-prebuild

APPventure Medical Televisit Mobile PREBUILD

Documentation
0.0.2

APPventure Medical Televisit

1 Core Mobile App


1.1 Create App

  1. New Mobile App
  2. APPventureMedicalTelevisitMobile

1.2 Create Screens

  1. Create “Home” screen, blank
  2. Create “Patients” screen, Employees Directory
  3. Create “CurrentSession” screen, blank
    1. Add ScheduleId input parameter
  4. Open BottomBar
    1. BottomBarItem
      1. Icon - Calendar
      2. Calendar
      3. Link to Home
    2. BottomBarItem
      1. Icon - Phone
      2. Current Session
      3. Enabled: Client.CurrentSessionId <> NullIdentifier()
      4. Link to CurrentSession
        1. ScheduleId = Client.CurrentSessionId
    3. BottomBarItem
      1. Icon - Users
      2. Patients
      3. Link to Patients
      4. Add Data Source
        1. GetPermissions
        2. Out IsAdmin
        3. Call CheckAdministratorRole
      5. Wrap in If
        1. GetPermissions.IsAdmin
  5. Open Menu
    1. Add Calendar, Current Session, and Patients

1.3 Logic


1.3.1 GetMedicalStaffTypePrefix

Used in the web version, will need to show Dr, RN, NP

  1. Switch
    1. MedicalStaffTypeId = Entities.MedicalStaffType.Doctor
      1. Dr.
    2. MedicalStaffTypeId = Entities.MedicalStaffType.Nurse
      1. RN
    3. MedicalStaffTypeId = Entities.MedicalStaffType.NursePractitioner
      1. NP

1.4 Home Screen

  1. Data Source - GetSchedule
    1. GetCurrentUserFullSchedule (IsAsc True)
    2. Output “Schedules” ScheduleAndPatientStructure List
  2. Title: APPventure
  3. List
    1. GetSchedule.Schedules
    2. Container
      1. Expression
        FormatDateTime(GetSchedule.Schedules.Current.StartDateTime,"dd MMMM")
        1. heading4
      2. ListItem
        1. OnClick = CurrentSession We will do this for testing purposes
          LongIntegerToIdentifier(GetSchedule.Schedules.Current.Id)
        2. Container
          1. Expression
            GetMedicalStaffTypePrefix(GetSchedule.Schedules.Current.MedicalStaffTypeId)
            + " "
            + GetSchedule.Schedules.Current.MedicalStaffLastName
          2. Expression
            FormatDateTime(GetSchedule.Schedules.Current.StartDateTime, "HH:mm")
            + " - "
            + FormatDateTime(GetSchedule.Schedules.Current.EndDateTime, "HH:mm")
          3. Expression
            GetSchedule.Schedules.Current.Purpose
        3. If - Show Join Session button
          // Upcoming
          (GetSchedule.Schedules.Current.StartDateTime >= CurrDateTime() and GetSchedule.Schedules.Current.StartDateTime < AddMinutes(CurrDateTime(), 5))
          or
          // In Progress / Just Ending
          (GetSchedule.Schedules.Current.StartDateTime < CurrDateTime() and GetSchedule.Schedules.Current.EndDateTime >= AddMinutes(CurrDateTime(), -5))
          1. Button
            1. btn btn-primary
            2. CurrentSession
              1. LongIntegerToIdentifier(GetSchedule.Schedules.Current.Id)

1.5 Patients Screen

  1. Variables:
    1. DetailOpened
    2. SelectedPatient
    3. SearchKeyword
  2. Data Sources:
    1. GetPatients
      1. GetPatients
    2. GetPatientDetail
      1. GetPatientById
  3. Screen:
    1. List:
      1. PatientFirstName PatientLastName
        1. 18px Bold
      2. Prefix DoctorLastName
        1. 14px Normal
    2. Detail:
      1. ColumnsMediumRight
        1. Right:
          1. Image = UserAvatar
          2. FirstName LastName
          3. Prefix DoctorLastName
        2. Left:
          1. Login Button
      2. Date of Birth
      3. E-mail
  4. Actions:
    1. LoginOnClick
      1. LoginAsPatient
        1. SelectedPatient
      2. Redirect to Home
    2. MasterDetailDetailClose
    3. OnSearch
      1. Just refresh GetPatients
    4. SelectPatient
      1. Input PatientId

1.6 Current Session Screen


1.6.1 OnInitialize

  1. Assign Client.CurrentSessionId to ScheduleId

1.6.2 Screen

  1. Title: APPventure Appointment
    1. Right Action: End Session Link
  2. Content:
    1. If IsActive
      1. Container - Publisher
        1. If False
          1. True - Image User
      2. Container - Subscriber
        1. If False
          1. True - Image User
    2. Else
      1. Start Session Button

1.6.3 Data Sources

  1. GetSessionID
    1. On Demand
    2. Out - SessionId (Text)
    3. Out - APIKey (Integer)
    4. Out - APISecret (Text)
    5. GetScheduleVonageSessionId
    6. GetVonageKeys
    7. After Fetch:
      1. JoinSession
        1. GetSessionID.APIKey
        2. GetSessionID.APISecret
        3. GetSessionID.SessionId
        4. Publisher.Id
        5. Subscriber.Id
        6. Client.Username
      2. Set IsActive

1.6.4 Actions

  1. StartSessionOnClick
    1. Refresh GetSessionID
  2. EndSessionOnClick
    1. EndVonageSession Set IsActive

1.7 Generate Native Builds

  1. Android
    1. Debug (apk)
    2. com.netlink.appventure.televisit
  2. iOS
    1. Development
    2. com.netlink.appventure.televisit
    3. development.p12
    4. Provisioning profile


2 Addons


2.1 Automated Unit Tests with BDDFramework

  1. Create new app
    1. Template: BDD Framework Client Side
    2. Add Screen
      1. BDDFramework -> New Test Suite

2.2 Biometric Authentication (Fingerprint / Face ID)

  1. Dependencies
    1. TouchIdPlugin
      1. CheckBiometricType
      2. CheckTouchIdPlugin
      3. TouchID
      4. BiometricType
  2. Entities - Local Storage
    1. Add AppConfiguration
      1. Key (50), IntValue, BoolValue
  3. Change Remember Me to use TouchID
    1. Add OnReady
      1. CheckTouchIdPlugin
      2. If Available
      3. CheckBiometricType
      4. Set local BiometricTypeId to None
      5. If type is not None
      6. Get AppConfigurations
        1. Key = “Biometric”
      7. Set Remember to BoolValue
      8. If Remember, set BiometricTypeId and call BiometricLogin
    2. BiometricLogin
      1. TouchID
      2. If Success
      3. IsExecuting = True
      4. Get AppConfigurations
        1. Key = “UserId”
      5. Call DoBiometricLogin Server Action
        1. Warn that this is insecure, should use OIDC, or a signed HMAC from the server of some sort
      6. Call PostLogin
    3. DoBiometricLogin
      1. Login
    4. Login
      1. Refactor everything after FeedbackMessageClose to PostLogin
    5. PostLogin
      1. InitCloudMessaging
      2. FeedbackMessageClose
      3. Get AppConfiguration (Key = “UserId”)
      4. Get AppConfiguration (Key = “Biometric”)
      5. If Remember
        1. True
          1. Assign Key = “UserId”, Value = GetUserId()
          2. Update Config
          3. Assign Key = “Biometric”, Value = True
          4. Update Config
        2. False
          1. If UserId config is not empty, delete it
          2. Assign Key = “Biometric”, Value = False
          3. Update Config
      6. Continue with OfflineDataSyncConfiguration and such
  4. Add DeleteAllAppConfigurations to Logout Action

2.3 Calendar Plugin

Add Appointments to Device Calendar

  1. Dependencies
    1. CalendarPlugin
      1. CheckCalendarPlugin
      2. CreateEvent
  2. Home Screen
    1. Add Swipe Right Action
      1. Icon - Calendar
      2. Add to Calendar (newline)
      3. OnClick
        1. CheckCalendarPlugin
        2. If Available
          1. False
            1. Message - Calendar is not available on this device.
            2. End
          2. True
            1. GetScheduleLink
              1. LongIntegerToIdentifier(GetSchedule.Schedules.Current.Id)
            2. CreateEvent
              1. “APPventure Appointment for ” + GetSchedule.Schedules.Current.PatientFirstName
              2. GetScheduleLink.Link

2.4 Camera Plugin for Image Upload

  1. Dependencies
    1. CameraPlugin
      1. CheckCameraPlugin
      2. TakePicture
  2. Current Session Screen
    1. Add Attach Image link if IsActive
    2. CheckCameraPlugin
    3. If Available
      1. False
        1. Message - Camera is not available on this device.
        2. End
      2. True
        1. TakePicture
          1. CorrectOrientation - True
          2. EncodingType - JPEG
          3. AllowEdit - True
        2. If Success
          1. AttachImageToCurrentUserSchedule
          2. Message - Image Sent

2.5 E-mail Export of Schedule in Excel

  1. Home Screen
    1. Add Export right action link
      1. Message - Sending appointments to your e-mail address on file
      2. SendCurrentUserAppointmentsAsExcel
        1. GetSchedules.Schedules
        2. cstjean@netlink.com
  2. Drill into SendCurrentUserAppointmentsAsExcel

2.6 Multi-Language Support

  1. Data -> Multilingual Locales
    1. Add pt-PT
      1. Explain
      2. Then copy from PREBUILD
  2. Menu
    1. Add Container after PageLinks
      1. “app-login-info ph”
      2. LanguageOnClick
        1. SetCurrentLocale

2.7 OutSystems Maps - Office Locator

  1. Add OfficeLocator Screen from template
    1. Remove GetOffices
    2. Add GetOffices
      1. GetFullLocations
    3. API Key: ""

2.8 Push Notifications

  1. Dependencies
    1. FirebaseMobile
      1. CloudMessaging
        1. InitCloudMessaging
        2. UnregisterDevice
      2. CloudNotification
        1. FirebvaseCloudMessaging
  2. System Event - OnApplicationReady
    1. If GetUserId() not Null
      1. InitCloudMessaging
  3. Login
    1. Login
      1. Add InitCloudMessaging after DoLogin
  4. UserInfo
    1. ClientLogout
      1. Add UnregisterDevice after DoLogout
  5. Patients
    1. LoginOnClick
      1. Add InitCloudMessaging after LoginAsPatient
  6. Layout
    1. Add FirebaseCloudMessaging at the end of Layout
      1. Handler:
        1. Message - NotificationData.Body
        2. Mention we could then handle deep linking and such if we wanted to
        3. Show SendNotificationToPatient in CS

2.9 Social Login

  1. Dependencies
    1. SL_CS
      1. OAuthService
    2. SL_Mobile
      1. LoginButton
      2. ValidateAuthorization
  2. Create ValidateAuthorization screen
    1. Inputs code, state, User (all Text)
    2. Add ValidateAuthorization block from SL_Mobile
    3. On authorized, redirect to Home
  3. Add LoginButton to Login screen
    1. OAuth Service = Apple
    2. Add Icon (Apple) inside of it
  4. Show https://netlink-dev.outsystemscloud.com/SL_Configurator