The Palliative Assessment Tool (PAT) is an iOS application that provides on call palliative nurses with a structured documentation system as they process with a call. Once the call is finished, a pdf is generated that is sent via email and uploaded to PARIS.
Full documenation on Backend AND iOS App can be found at https://docs.palliative.vchlearn.ca/
The iOS portion of the docs and also be found below.
# Install dependencies
npm install
# Build for production
tns build ios --bundle --device "iPad (5th generation)"
# Build, watch for changes and run the application on Simulator
tns run ios --bundle --device "iPad (5th generation)"
# Build, watch for changes and run the application on VCH Learning Tech iPad
tns run ios --bundle --device <DEVICE_IDENTIFIER>
# Deploy the application to VCH Learning Tech iPad
tns deploy ios --bundle --device <DEVICE_IDENTIFIER> --clean --provision <PROVISION_ID>
# Lists all devices
tns device
# Lists all provision profiles installed in computer
tns prepare ios --provision
# VCH Learning Tech Team Info
"Team ID": 5MYA8389GQ
"Device Identifier for VCH Learning Tech iPad": 93ff730c6579308b561791adafec2fc96d59eec4
This app is developed with Nativescript, optimized for iPad 9.7 inches
This project has very specific dependency requirements in order to compile. Further work would be needed to update from these speciifc package versions.
# nativescript and tns-core-modules version
"version": "5.4.3"
# nativescript tns-ios version
"version": "5.4.0"
# nativescript vue version
"version": "2.2.2"
# nativescript-dev-webpack version
"version": "0.25.0-next-2019-06-03-171607-01"
- jsPDF and jsPDF-AutoTable
npm install jspdf --save
npm install @types/jspdf --save
npm install base-64 --save
npm install utf8 --save
npm install jspdf-autotable
-
Masked Text Field
npm install nativescript-masked-text-field
-
IQ Keyboard Manager
npm install nativescript-iqkeyboardmanager
-
NativeScript Videoplayer
npm install nativescript-videoplayer
-
RadListView
tns plugin add nativescript-ui-listview
-
NativeScript Email
tns plugin add nativescript-email
-
NativeScript LocalStorage
tns plugin add nativescript-localstorage
With the current version of NativeScript we are using, we run into a memory leak issue, a.k.a. the app crashes and auto-exits after being used for a period of time, especially when lots of between-page navigation is happening. To fix this issue, we manually clear app memory every half second using nativescript's memory settings. There are two options to setup scheduled manually memory cleaning.nativescript's documentation. This app is currently using the first option.
- Via Schedule β
- "gcThrottleTime": 500
- Via Ratio β
- "memoryCheckInterval": 500,
- "freeMemoryRatio": 0.20
- assetsπ - folder for static assets
- dataπ - folder for local data json file
- imagesπ - folder for images
- videosπ - folder for tutorial videos
- componentsπ - folder for vue page and component files
- fontsπ - folder for font files
- scriptsπ - folder for global js files
- stylesπ - folder for scss files
- vuexπ - folder for data storage
- app.scssπ - entry for all style files
- main.tsπ - entry for all vue and js files
- curr_user_id π
- [Type] string, null state is -1
- [Description] - ID of the nurse currently logged in to the app
- [Related Places] - it will be changed mostly in Login/ AddUser/ Options page
- timer β³
- [Type] Object, null state is undefined
- [Description] - ID of the nurse currently logged in to the app
- [Related Places] - it will be changed mostly in Login/ AddUser/ Options page
- users π¬π
- [Type] Array, null state is []
- [Description] - list of users
- [Related Places] - it will be changed mostly in SelectUser/ Login/ AddUser/ EditCallInfo pages
- logs π
- [Type] Array, null state is []
- [Description] - list of users
- [Related Places] - it will be changed mostly in SelectUser/ Login/ AddUser/ EditCallInfo pages
- data_version π
- [Type] Number, 0
- [Description] - data version number
- [Related Places] - it will be changed mostly in Dashboard pages; local data loading and online data loading methods change it.
- tutorials π
- [Type] Array, null state is []
- [Description] - content of tutorials, saved only locally in vue/state
- [Related Places] - this is static content
- intro π
- [Type] Array, null state is []
- [Description] - data for introduction section
- [Related Places] - it will be loaded from local data json file or online data json
- protocols π
- [Type] Array, null state is []
- [Description] - data for protocols section
- [Related Places] - it will be loaded from local data json file or online data json
- assessment_letters π
- [Type] Array, null state is []
- [Description] - data for possible assessment letters used in protocols section
- [Related Places] - it will be loaded from local data json file or online data json
- plans π
- [Type] Array, null state is []
- [Description] - data for plans section
- [Related Places] - it will be loaded from local data json file or online data json
- id π
- [Type] String
- [Description] - employee ID of nurse user
- name βοΈ
- [Type] String
- [Description] - first name and initial of last name of nurse user
- fullname π
- [Type] String
- [Description] - first and last name of nurse user
- shift_start π
- [Type] String, in millitary time
- [Description] - shift start time
- shift_end π£
- [Type] String, in millitary time
- [Description] - shift end time, if the time is less than shift start time, auto increment date
- color π¨
- [Type] String
- [Description] - color code associated with this nurse user
- id π
- [Type] String, required field
- [Description] - unique ID of client used by this app only, unique string based on creation time
- phone βοΈ
- [Type] String, in format of XXXXXXXXXX, null state is 0000000000
- [Description] - call-back number of client
- caller π
- [Type] String
- [Description] - first and last name of caller
- client π€
- [Type] String
- [Description] - first and last name of caller
- [Related Places] - this info will be used in email subject line and pdf name
- relation π₯
- [Type] String
- [Description] - caller's relationship to client
- info π
- [Type] String
- [Description] - general info of client
- notes π
- [Type] String
- [Description] - notes related with client
- nurseID π
- [Type] String, in format of XXXXXX
- [Description] - intake nurse employee ID
- nurseFullname π
- [Type] String
- [Description] - first and last name of caller
- date π
- [Type] String, in format of DD MMM YYYY
- [Description] - creation date
- startTime π
- [Type] String, in millitary time
- [Description] - call start time
- endTime π£
- [Type] String, in millitary time
- [Description] - call end time
- status π©
- [Type] Boolean
- [Description] - whether the document has been compiled as PDF and sent via email
- progress π
- [Type] Array of Numbers, null state is [-1, -2, 0, 0, 0, 0, 0]
- [Description] The 6 items individually represents 1οΈβ£progress of the Introduction section, 2οΈβ£the selected protocol id, 3οΈβ£whether AssessItems page of current protocol is reached, 4οΈβ£whether AssessOthers page of current protocol is reached, 5οΈβ£whether Plans page is reached, 6οΈβ£whether Recommendations page is reached,7οΈβ£whether Summary page is reached.
- @param {Number} intro progress - current step id of intro section
- @param {Number} protocol id - current protocol id
- @param {Number} protocol assess items page - binary [0, 1], whether reached, if protocol id is set, this variable is usually set to true
- @param {Number} protocol assess others page - binary [0, 1], whether reached
- @param {Number} recommendations page - binary [0, 1], whether reached
- @param {Number} plans page - binary [0, 1], whether reached
- @param {Number} summary page - binary [0, 1], whether reached
- [Related Places] - this info is set in every pages in the linear flow of documenting. this info will be used in Client History section on Dashboard.
- e.g.
- [3, 3, 1, 1, 1, 1, 1] - currently reached Summary page
- [3, 3, 1, 1, 1, 1, 0] - currently reached Plans page
- [3, 3, 1, 1, 1, 0, 0] - currently reached Recommendations page of protocol 3
- [3, 3, 1, 1, 0, 0, 0] - currently reached Assess Others page of protocol 3
- [3, 3, 1, 0, 0, 0, 0] - currently reached Assess Items page of protocol 3
- [3, -1, 0, 0, 0, 0, 0] - currently reached ChooseProtocol page
- [3, -2, 0, 0, 0, 0, 0] - currently reached step 3 page of Introduction section
- editHistory π°
- [Type] Array, null state is []
- [Description] each item in the array represents a change history. note that the initial submission is not in this history.
- @param {String} nurse - take the id of the nurse currently logged in
- @param {String} recordTime - document change time, in millitary time
- @param {String} reason - reason and places for changes
- e.g. see below
- intro_answers π
- [Type] Array, null state is []
- [Description] each item in the array represents a responded question in intro section.
- @param {Number} q_id - question id
- @param {Array} a - array of strings, each is an answer entry
- e.g. see below
- items_answers π
- [Type] Array, null state is []
- [Description] each item in the array represents a responded protocol.
- @param {Number} q_id - question id
- @param {Array} a - array of objects, each is an answer entry of a items-assessment question in current protocol
- @param {Number} q_id - question id
- @param {String} q_type - question type
- @param {Number} l_id - letter id
- @param {Array} a - array of strings, each is an answer entry
- e.g. see below
- others_answers π
- [Type] Array, null state is []
- [Description] each item in the array represents a responded protocol.
- @param {Number} q_id - question id
- @param {Array} a - array of objects, each is an answer entry of a additional question in current protocol
- @param {Number} q_id - question id
- @param {String} q_type - question type
- @param {Array} a - array of strings, each is an answer entry
- e.g. see below
- plans_answers π
- [Type] Array, null state is []
- [Description] each item in the array represents a plan entry.
- e.g. see below
- Recommendations π
- [Type] String
- [Description] - recommendations given to client
editHistory: [{
"nurse": "777777",
"recordTime": "20 Aug 2019 | 12:00",
"reason": "Edited question 2 in intro section because of a spelling error"
}]
intro_answers: [{
"q_id": 4,
"a": ["Cannot breathe"]
}]
items_answers: [{
"id": 3,
"a": [{
"q_id": 10,
"q_type": "single_select",
"l_id": 1,
"a": [
"Yes β new symptom",
"Happened 10 minutes ago"
]
}]
}]
others_answers: [{
"id": 3,
"a": [{
"q_id": 3,
"q_type": "free_form",
"a": [
"Caller"
]
}]
}]
plans_answers: [
"Reach out for medical support (e.g. MRP)",
"Recommend going to UPCC (Urgent Primary Care Center)* if appropriate and unable to manage symptoms at home and if ambulatory and within clientβs goals of care",
""
]
- [Description] - folder for components of different types of answers
- [Members] - all answer typesare shared across sections
- BooleanSelect.vueπ - component for boolean answers
- FreeText.vueπ - component for free text answers
- MultiSelect.vueπ - component for multiple choice answers
- ScaleSelect.vueπ - component for scale selector answers
- SingleSelect.vueπ - component for single choice answers
- [Description] - folder for components and pages and components that is used across board
- [Members] - include pages and components
- partsπ - folder for sub-components
- ClientBlock.vueπ - component for the sticky yellow bar on top of any client page
- NavBar.vueπ - component for the sticky navigation bar on top of any page
- Catalogue.vueπ - pop-up frame/ page for choosing protocols, can be opened from ClientBlock
- EditClient.vueπ - pop-up frame/ page for editing client info, can be opened from ClientBlock and Summary
- Notes.vueπ - semi-page popup for additional nurse notes
- partsπ - folder for sub-components
- [Description] - folder for components and pages and components that is used in home/ dashboard screen
- [Members] - include pages and components
- partsπ - folder for sub-components
- Logs.vueπ - component for listview of client history, used in Dashboard
- UserBlock.vueπ - component for the user info at the top right corner of the Dashboard
- AddUser.vueπ - pop-up page for adding a new user, has to be opened from SelectUser frame
- Dashboard.vueπ - page for home screen/ dashboard
- LoginUser.vueπ - pop-up page for logging in an existing user, has to be opened from SelectUser frame
- Options.vueπ - pop-up frame/ page for option/ setting pages, opened from Dashboard
- SelectUser.vueπ - pop-up frame/ page for user management, can add, login, or delete a user here
- partsπ - folder for sub-components
- [Description] - folder for components and pages and components that is used in introduction section
- [Members] - include pages and components
- partsπ - folder for sub-components
- StepQuestion.vueπ - component to determine which answer component to display for introduction questions
- Introduction.vueπ - page to show introduction questions
- NewClient.vueπ - page to add a new client
- partsπ - folder for sub-components
- partsπ - folder for sub-components
- AssessItem.vueπ - component to determine which answer component to display for items-assessment questions
- OthersQuestion.vueπ - component to determine which answer component to display for additional questions
- RecommendButton.vueπ - component to open Recommend pop-up, used in all protocol related pages
- AssessItems.vueπ - page to show items-assessment questions related with a protocol
- AssessOthers.vueπ - page to show additional questions related with a protocol
- ChooseProtocol.vueπ - page to choose a protocol
- Plans.vueπ - page to show plans to a client
- Recommend.vueπ - pop-up frame/ page fto show related resources, protocols and recommendation of a protocol
- Recommenddations.vueπ - page to show recommendations to a client
- partsπ - folder for sub-components
- CallSummary.vueπ - component to show summary of the call information
- InfoSummary.vueπ - component to show summary of client information
- IntroSummary.vueπ - component to show summary of introduction section
- NoteSummary.vueπ - component to show summary of global additional notes
- PlanSummary.vueπ - component to show summary of plans
- ProtocolSummary.vueπ - component to show summary of one protocol
- QuestionSummary.vueπ - component to show summary of one question and its answers
- RecommendationsSummary.vueπ - component to show summary of recommendations
- SubmitButton.vueπ - component to generate PDF, and to send email
- EditCallInfo.vueπ - popup page/ frame to edit call information, opened from Summary
- Reason.vueπ - semi-page popup to record pdf modification history
- Summary.vueπ - page to show summary of a client
- FirstTime.vueπ - pop-up page to show tutorial welcome screen
- Journey.vueπ - pop-up page to show tutorials
- Tutorial.vueπ - pop-up frame, to either pull from Journey or FirstTime