{"version":3,"sources":["webpack:///./node_modules/core-js/internals/string-pad.js","webpack:///./node_modules/core-js/modules/es.set.constructor.js","webpack:///./src/helpers/date-utils.js","webpack:///./node_modules/core-js/modules/es.string.pad-start.js","webpack:///./node_modules/core-js/modules/es.set.js","webpack:///./src/store/static/PatientDocumentOptions.js","webpack:///./node_modules/core-js/internals/string-pad-webkit-bug.js","webpack:///./src/views/dashboard/connector-logs/list/ConnectorLogList.vue?feae","webpack:///./src/views/dashboard/connector-logs/list/ConnectorLogList.store.js","webpack:///./src/views/dashboard/components/lists/ConnectorLogList.vue?fa94","webpack:///src/views/dashboard/components/lists/ConnectorLogList.vue","webpack:///./src/views/dashboard/components/lists/ConnectorLogList.vue?5091","webpack:///./src/views/dashboard/components/lists/ConnectorLogList.vue","webpack:///src/views/dashboard/connector-logs/list/ConnectorLogList.vue","webpack:///./src/views/dashboard/connector-logs/list/ConnectorLogList.vue?4e4e","webpack:///./src/views/dashboard/connector-logs/list/ConnectorLogList.vue","webpack:///./src/views/dashboard/image-consultations/components/ErrorMessage.vue?7268","webpack:///src/views/dashboard/image-consultations/components/ErrorMessage.vue","webpack:///./src/views/dashboard/image-consultations/components/ErrorMessage.vue?97c9","webpack:///./src/views/dashboard/image-consultations/components/ErrorMessage.vue","webpack:///./src/views/dashboard/components/lists/utils/parserUtils.js"],"names":["uncurryThis","toLength","toString","$repeat","requireObjectCoercible","repeat","stringSlice","slice","ceil","Math","createMethod","IS_END","$this","maxLength","fillString","fillLen","stringFiller","S","intMaxLength","stringLength","length","fillStr","undefined","module","exports","start","end","collection","collectionStrong","init","this","arguments","dateUtils","isToday","date","today","Date","getDate","getMonth","getFullYear","isThisIsoWeek","todayIsoWeek","_getWeek","todayIsoYear","_getWeekYear","dateIsoWeek","dateIsoYear","someDate","getTime","setHours","setDate","getDay","week1","round","subtractDaysFromToday","dateObj","days","includeToday","Error","offsetDays","daysBetweenDatesForRange","date0","date1","ONE_DAY","utc0","UTC","utc1","floor","abs","formatDateToYYYYMMDD","dateString","delimiter","day","month","year","padStart","formatDateToDDMMYYYY","formatDateToDDMMYYYYTime","hour","getHours","minute","getMinutes","isValidDate","d","isNaN","$","$padStart","WEBKIT_BUG","target","proto","forced","title","color","value","format","userAgent","test","render","_vm","_h","$createElement","_c","_self","attrs","itemList","isLoading","isDownloading","on","downloadAsPdf","downloadAsZip","markAsIsJournalized","markAsBookmarked","pushToDetail","errorMessage","_b","snackbarColor","model","callback","$$v","snackbar","expression","top","center","_v","_s","snackbarText","staticRenderFns","getters","state","initialState","mutations","setListData","payload","items","parserUtils","parseConnectorLogList","setErrorMessage","clear","Object","assign","actions","getList","commit","endpoint","axios","get","process","response","defaultText","statusText","data","namespaced","staticClass","staticStyle","$t","search","headers","$event","rowClick","scopedSlots","_u","key","fn","ref","item","requestTypeName","isRequested","isImported","isProcessed","name","props","type","required","default","computed","text","methods","context","clickSelect","clickDownloadPdf","id","createdAt","patientName","clickDownloadZip","clickIsJournalized","isJournalized","clickIsBookmarked","isBookmarked","component","VContainer","VDataTable","VDivider","VIcon","VTextField","components","ConnectorLogList","ErrorMessage","snackbarDuration","successShowDuration","errorShowDuration","mapState","mapGetters","created","mounted","endAtDefault","startAtDefault","mapActions","mapMutations","event","window","document","console","errorCaptured","err","vm","info","domProps","VCol","VRow","TREATMENT_TYPE__PLANNED","TREATMENT_TYPE__COMPLETED","parseApiPayloadToAssessmentDataTableList","dateOptions","dataTableItems","i","resource","attribs","attributes","relationships","relatedImageAsJsonApi","uploaded_images","status","isPending","is_pending","isAnamnesisQuestionnaire","is_anamnesis_questionnaire","is_journalized","is_journalized_by_clinic","imageUrls","guiUrls","thumbnailUrls","j","imageResource","url","guiUrl","gui_url","thumbnailUrl","thumbnail_url","push","_createdAt","created_at","createdAtDate","toLocaleDateString","now","diffInMs","diffInHours","roundedDiffInHours","toFixed","uuid","isUserVerifiedByClinic","is_user_verified_by_clinic","isFromAdentAssessmentWidget","is_from_adent_assessment_widget","parseApiPayloadToMedicalHistoryDataTableList","patient","patientFullname","full_name","phone_number","supportId","cognito_id","_updatedAt","updated_at","updatedAt","updatedAtDate","_completedAt","completed_at","completedAt","completedAtDate","sortableAt","is_bookmarked","isJournalizedByConnector","is_journalized_by_connector","parseApiPayloadToInstallmentDataTableList","cognitoId","_sentAt","sent_at","sentAtDate","_confirmedAt","confirmed_at","confirmedAtDate","_initialPaymentReceivedAt","initial_payment_received_at","initialPaymentReceivedAtDate","isSent","is_sent","isConfirmed","is_confirmed","confirmedAt","isInitialPaymentReceived","is_initial_payment_received","initialPaymentReceivedAt","groupByDocumentType","fallbackTitle","allowSubgroup","primarySubgroupKey","groupDict","categoryUuid","documentType","categoryTitle","documentTitle","categoryPrecedence","precedence","_addToGroupDocumentDict","asList0","asList1","elem","groupBySystemInitial","byInitial","sort","a","b","parseDocumentList","_rejectedAt","rejected_at","rejectedAtDate","document_type","documentText","getDocumentText","documentPrecedence","isRejected","is_rejected","rejectedAt","amountTotal","amount_total","systemInitial","system_user_initials","parseInstructionList","dateOptionsShort","instructionCard","instruction_card","imageListJson","images","imageList","_parseImageList","imagePovList","_parseimagePovList","shareLogListJson","share_logs","shareLogList","_parseShareLogList","digitalConsultListJson","digital_consult_logs","digitalConsultList","_parseDigitalConsultList","patientFirstname","first_name","instructionCardUuid","instructionCardTitle","title_da","createdAtDateShort","updatedAtDateShort","sentAt","_openedAt","opened_at","openedAt","openedAtDate","_bookmarkedAt","bookmarked_at","bookmarkedAt","bookmarkedAtDate","_nextDigitalConsultAt","next_digital_consult_at","nextDigitalConsultAt","nextDigitalConsultAtDate","nextDigitalConsultAtDateShort","_latestDigitalConsultAt","latest_digital_consult_at","latestDigitalConsultAt","latestDigitalConsultAtDate","latestDigitalConsultAtDateShort","_latestImageReceivedAt","latest_image_received_at","latestImageReceivedAt","latestImageReceivedAtDate","latestImageReceivedAtDateShort","_journalizedAt","journalized_at","journalizedAt","journalizedAtDate","_beforeScanCompletedAt","before_scan_completed_at","beforeScanCompleted_at","beforeScanCompletedAt","beforeScanCompletedAtDate","_afterScanCompletedAt","after_scan_completed_at","afterScanCompleted_at","afterScanCompletedAt","afterScanCompletedAtDate","_latestScanCompletedAt","latest_scan_completed_at","latestScanCompletedAt","latestScanCompletedAtDate","latestMessageToPatientSentAtRaw","latest_message_to_patient_sent_at_raw","latestMessageToPatientSentAtTitle","latest_message_to_patient_sent_at_title","_latestMessageToPatientSentAt","latest_message_to_patient_sent_at","latestMessageToPatientSentAt","latestMessageToPatientSentAtDate","hasAnyImageReady","has_any_image_ready","completedScanCount","completed_scan_count","isAutomaticallyUpdatedSinceViewed","is_automatically_updated_since_viewed","automaticallyUpdatedSinceViewedRaw","automatically_updated_since_viewed_raw","automaticallyUpdatedSinceViewedTitle","automatically_updated_since_viewed_title","_automaticallyUpdatedSinceViewedAt","automatically_updated_since_viewed_at","automaticallyUpdatedSinceViewedAt","automaticallyUpdatedSinceViewedAtDate","_noteLog","note_log","noteLog","_parseNoteLog","_clinic","clinic","clinicAttribs","clinicRels","instructionSmsTemplates","instruction_sms_templates","instructionInternalMessageTemplates","instruction_internal_message_templates","clinicEmail","email","_recipientEmails","organization","organizationAttribs","recipient_emails","recipientEmails","Set","firstname","isOpened","is_opened","isStarted","is_started","isCompleted","is_completed","isBeforeScanCompleted","is_before_scan_completed","isAfterScanCompleted","is_after_scan_completed","isLatestScanCompleted","is_latest_scan_completed","isMessageToPatientSentToday","is_message_to_patient_sent_today","isMessageToPatientSentThisWeek","is_message_to_patient_sent_this_week","isPendingDigitalConsult","is_pending_digital_consult","latestMessageToPatientSentAtTs","isDigitalConsultCompletedToday","is_digital_consult_completed_today","isDigitalConsultCompletedThisWeek","is_digital_consult_completed_this_week","nextDigitalConsultAtTs","latestDigitalConsultAtTs","latestImageReceivedAtTs","scanWeekday","scan_weekday","scanIntervalDays","scan_interval_days","createdAtTs","prettyCreatedAt","messageType","message_type","messageBodyTrunc","message_body_trunc","body","ts","description","timestamp","note","tagList","uniqueList","pointOfView","point_of_view","includes","meta","_getPointOfViewMeta","tag","isFacePov","image","rawCroppedUrl","raw_cropped_url","hueCroppedUrl","hue_color_cropped_url","pointOfViewTitle","pointOfViewPrecedence","_sortListByDateAndPrecedence","dateA","dateB","condition0","condition1","povClean","trim","_capitalize","arr","split","capital","map","charAt","toUpperCase","toLowerCase","capitalString","join","parseReviewLogList","patAttribs","patientPhoneNumber","patientEmail","contact_email","_resolvedAt","resolved_at","resolvedAt","resolvedAtDate","patientNote","patient_note","maxNoteLength","patientNoteTruncated","score","scoreRaw","score_raw","isResolved","is_resolved","_dataList","parseClinicalPhotoList","patient_phone_number","patient_full_name","patientCognitoId","patient_cognito_id","nameList","hasAnyImagePending","has_any_image_pending","requestType","is_requested","isDownloaded","is_downloaded","is_imported","is_processed","shouldDownload","should_download","shouldImport","should_import","parseDentistList","locales","dentistList","parseDentist","dentist","dentistListSorted","localeCompare","parseSystemInitialList","systemInitialList","last_name","label","systemInitialListSorted","parseTreatmentItemCollectionMeta","dentistListJson","dentist_list","systemInitialListJson","system_initials_list","primaryTreatmentGroupList","primary_treatment_group_list","isNumber","parseTreatmentItemCollectionList","resources","parseTreatmentItemCollection","options","patient_first_name","lastname","patient_last_name","birthdate","patient_birthdate","phonenumber","patient_email","_parseLog","dataList","_billedAtLog","billed_at_log","billedAtLog","_journalChangeLog","journal_change_log","journalChangeLog","_parseJournalChangeLog","_pipelineChangeLog","pipeline_status_log","pipelineChangeLog","excludeTooSimilar","bookedAt","booked_at","billedAt","billed_at","smsSentAt","reminder_sms_sent_at","emailSentAt","reminder_email_sent_at","anySentAt","autoUpdateAt","pipeline_status_auto_updated_at","hostedPatientLink","deeplink_to_web","prettyDate","displayName","_documents","documents","parsePatientDocumentList","docs","documentList","_treatments","treatment_items","groupTreatmentItemListByType","groupedTreatmentItemList","clinicTitle","treatmentSmsTemplates","treatment_sms_templates","reminderSmsTemplates","reminder_sms_templates","reminderEmailTemplates","reminder_email_templates","_dentist","dentistUuid","dentistName","dentistAttribs","dentistNameRaw","dentist_first_name_raw","dentist_last_name_raw","prettySentAt","prettyOpenedAt","prettyBookmarkedAt","prettyConfirmedAt","prettyCompletedAt","prettyBookedAt","prettyBilledAt","prettySmsSentAt","prettyEmailSentAt","prettyAnySentAt","prettyAutoUpdateAt","isSmsSentToday","isEmailSentToday","isSmsSentThisWeek","isEmailSentThisWeek","isAnySentToday","isAnySentThisWeek","daysAgo","_action","automated_action","action","_parseAutomatedAction","commonList","sortedCommonList","searchtext","isReminderCallAny","is_reminder_call_any","isReminderMessageAny","is_reminder_message_any","isReminderAny","isReceived","is_received","openedCount","opened_count","isBooked","is_booked","isBilled","is_billed","uuidSms","uuidEmail","uuidCall","amountTotalPlanned","amount_total_planned","amountTotalCompleted","amount_total_completed","pipeline_status","systemUserInitials","didChangeThisWeek","did_pipeline_status_change_this_week","includeAutoReminderToPatient","include_auto_reminder_message_to_patient","parseTreatmentItemList","_treatment","treatment","_document","parseTreatmentOption","option","parseTreatmentGroupFromOption","treatmentGroup","parsePatientDocument","doc","group","price","isPaid","is_paid","then","timeDifference","daysDifference","groupedDict","uuidPrefix","itemType","documentUuid","coveragePublic","coverage_public","coverageDanmark","coverage_danmark","coverageDanmarkMax","coverage_danmark_max","displayImage","titleLookup","recapDescriptionLookup","treatmentAttribs","display_image","recap_description_da","current","currentList","planned","completed","isScanned","_total","plannedPriceTotal","completedPriceTotal","issuedAt","issued_at","is_opened_list","_options","PatientDocumentOptions","_option","readableDocumentType","i18n","t","isPendingAnyAmount","is_pending_any_amount","isPrevThisWeek","is_prev_this_week","isBelowAmount","is_below_amount","actionType","action_type","prevRegisteredAt","prev_registered_at","prevScheduledAt","prev_scheduled_at","nextScheduledAt","next_scheduled_at","prettyPrevRegisteredAt","prettyPrevScheduledAt","prettyNextScheduledAt","groupData","parseTreatmentGroup","parseTreatmentGroupList","groupList","groupByTreatmentOption","category","_addToGroupTreatmentDict","asList","groupByDate","groupByTotalSumTreatment","groupByTotalSumDocument","groupByDateFlattenValue","newList","groupByDateFlattenLabel","isFirst","isLast","groupByTreatmentGroup","groupByDentist","byDentist","newGroupDict","amount","curr","amountTotalBilled","amountTotalPaid","countPlanned","countCompleted","countBilled","countPaid","entry","amountNew","count","precedenceOrFallback","byGroup","_similarityStrList","subtitle","recap_description","similarityStr"],"mappings":"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","file":"js/chunk-7848da2d.dc2fbf90.js","sourcesContent":["// https://github.com/tc39/proposal-string-pad-start-end\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar $repeat = require('../internals/string-repeat');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar repeat = uncurryThis($repeat);\nvar stringSlice = uncurryThis(''.slice);\nvar ceil = Math.ceil;\n\n// `String.prototype.{ padStart, padEnd }` methods implementation\nvar createMethod = function (IS_END) {\n return function ($this, maxLength, fillString) {\n var S = toString(requireObjectCoercible($this));\n var intMaxLength = toLength(maxLength);\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : toString(fillString);\n var fillLen, stringFiller;\n if (intMaxLength <= stringLength || fillStr == '') return S;\n fillLen = intMaxLength - stringLength;\n stringFiller = repeat(fillStr, ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringSlice(stringFiller, 0, fillLen);\n return IS_END ? S + stringFiller : stringFiller + S;\n };\n};\n\nmodule.exports = {\n // `String.prototype.padStart` method\n // https://tc39.es/ecma262/#sec-string.prototype.padstart\n start: createMethod(false),\n // `String.prototype.padEnd` method\n // https://tc39.es/ecma262/#sec-string.prototype.padend\n end: createMethod(true)\n};\n","'use strict';\nvar collection = require('../internals/collection');\nvar collectionStrong = require('../internals/collection-strong');\n\n// `Set` constructor\n// https://tc39.es/ecma262/#sec-set-objects\ncollection('Set', function (init) {\n return function Set() { return init(this, arguments.length ? arguments[0] : undefined); };\n}, collectionStrong);\n","const dateUtils = {\n isToday(date) {\n if (!date) {\n return false\n }\n const today = new Date()\n return date.getDate() == today.getDate() &&\n date.getMonth() == today.getMonth() &&\n date.getFullYear() == today.getFullYear()\n },\n\n isThisIsoWeek(date) {\n if (!date) {\n return false;\n }\n const today = new Date();\n const todayIsoWeek = this._getWeek(today);\n const todayIsoYear = this._getWeekYear(today);\n const dateIsoWeek = this._getWeek(date);\n const dateIsoYear = this._getWeekYear(date);\n return dateIsoWeek === todayIsoWeek && dateIsoYear === todayIsoYear;\n },\n\n _getWeek(someDate) {\n var date = new Date(someDate.getTime());\n date.setHours(0, 0, 0, 0);\n date.setDate(date.getDate() + 3 - (date.getDay() + 6) % 7);\n var week1 = new Date(date.getFullYear(), 0, 4);\n return 1 + Math.round(((date.getTime() - week1.getTime()) / 86400000 - 3 + (week1.getDay() + 6) % 7) / 7);\n },\n\n _getWeekYear(someDate) {\n var date = new Date(someDate.getTime());\n date.setDate(date.getDate() + 3 - (date.getDay() + 6) % 7);\n return date.getFullYear();\n },\n\n subtractDaysFromToday({ date, days, includeToday = true }) {\n let dateObj;\n if (typeof date === \"string\") {\n dateObj = new Date(date);\n } else if (date instanceof Date) {\n dateObj = date;\n } else {\n throw new Error(\n \"Invalid date format. Expected either a Date object or a valid date string.\"\n );\n }\n let offsetDays = days;\n if (includeToday) {\n offsetDays = days - 1;\n }\n return new Date(dateObj.getTime() - offsetDays * 24 * 60 * 60 * 1000);\n },\n\n daysBetweenDatesForRange({ date0, date1, includeToday = true }) {\n const ONE_DAY = 1000 * 60 * 60 * 24;\n\n // Convert dates to UTC timestamps\n const utc0 = Date.UTC(\n date0.getFullYear(),\n date0.getMonth(),\n date0.getDate()\n );\n const utc1 = Date.UTC(\n date1.getFullYear(),\n date1.getMonth(),\n date1.getDate()\n );\n\n // Calculate difference in days\n let days = Math.floor(Math.abs(utc1 - utc0) / ONE_DAY);\n if (includeToday) {\n days = days + 1\n }\n\n return days;\n },\n\n formatDateToYYYYMMDD({ date, dateString, delimiter = '-' }) {\n if (!date && !dateString) return;\n let date0 = date\n if (!date0) {\n date0 = new Date(dateString)\n }\n let day = date0.getDate().toString();\n let month = (date0.getMonth() + 1).toString();\n let year = date0.getFullYear().toString().slice(-4);\n day = day.padStart(2, '0');\n month = month.padStart(2, '0');\n return `${year}${delimiter}${month}${delimiter}${day}`;\n },\n\n formatDateToDDMMYYYY({ date, dateString, delimiter = '-' }) {\n if (!date && !dateString) return;\n let date0 = date\n if (!date0) {\n date0 = new Date(dateString);\n }\n let day = date0.getDate().toString();\n let month = (date0.getMonth() + 1).toString();\n let year = date0.getFullYear().toString().slice(-4);\n day = day.padStart(2, '0');\n month = month.padStart(2, '0');\n return `${day}${delimiter}${month}${delimiter}${year}`;\n },\n\n formatDateToDDMMYYYYTime({ date, dateString, delimiter = '-' }) {\n if (!date && !dateString) return;\n let date0 = date\n if (!date0) {\n date0 = new Date(dateString);\n }\n let day = date0.getDate().toString();\n let month = (date0.getMonth() + 1).toString();\n let year = date0.getFullYear().toString().slice(-4);\n let hour = date0.getHours().toString();\n let minute = date0.getMinutes().toString();\n day = day.padStart(2, '0');\n month = month.padStart(2, '0');\n hour = hour.padStart(2, '0');\n minute = minute.padStart(2, '0');\n return `${day}${delimiter}${month}${delimiter}${year}, ${hour}:${minute}`;\n },\n\n isValidDate(d) {\n return d instanceof Date && !isNaN(d);\n }\n}\n\nexport default dateUtils\n","'use strict';\nvar $ = require('../internals/export');\nvar $padStart = require('../internals/string-pad').start;\nvar WEBKIT_BUG = require('../internals/string-pad-webkit-bug');\n\n// `String.prototype.padStart` method\n// https://tc39.es/ecma262/#sec-string.prototype.padstart\n$({ target: 'String', proto: true, forced: WEBKIT_BUG }, {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $padStart(this, maxLength, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","// TODO: Remove this module from `core-js@4` since it's replaced to module below\nrequire('../modules/es.set.constructor');\n","export default [\n // NOTE: `value` and `format` is aligned with API\n {\n title: \"DOCUMENT_TYPE_TREATMENT_SUGGESTION_TITLE\",\n color: \"black\",\n value: \"treatment\",\n format: \"pdf\",\n },\n {\n title: \"DOCUMENT_TYPE_BILL_TITLE\",\n color: \"black\",\n value: \"bill\",\n format: \"pdf\",\n },\n {\n title: \"DOCUMENT_TYPE_INSTRUCTIONS_TITLE\",\n color: \"black\",\n value: \"instruction\",\n format: \"pdf\",\n },\n {\n title: \"DOCUMENT_TYPE_JOURNAL_TITLE\",\n color: \"black\",\n value: \"journal_item\",\n format: \"pdf\",\n },\n {\n title: \"DOCUMENT_TYPE_OTHER_PDF_TITLE\",\n color: \"black\",\n value: \"other_pdf\",\n format: \"pdf\",\n },\n // {\n // title: 'Røntgenbillede (JPG)',\n // value: '',\n // format: 'jpg',\n // },\n {\n title: \"No attachment\",\n color: \"red\",\n value: \"\",\n format: \"\",\n },\n]","// https://github.com/zloirock/core-js/issues/280\nvar userAgent = require('../internals/engine-user-agent');\n\nmodule.exports = /Version\\/10(?:\\.\\d+){1,2}(?: [\\w./]+)?(?: Mobile\\/\\w+)? Safari\\//.test(userAgent);\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('connector-log-list',{attrs:{\"title\":\"\",\"items\":_vm.itemList,\"isLoading\":_vm.isLoading,\"isDownloading\":_vm.isDownloading},on:{\"download\":_vm.downloadAsPdf,\"download-zip\":_vm.downloadAsZip,\"journalize\":_vm.markAsIsJournalized,\"bookmark\":_vm.markAsBookmarked,\"clickSelect\":_vm.pushToDetail}}),_c('error-message',{attrs:{\"error-message\":_vm.errorMessage}}),_c('base-material-snackbar',_vm._b({attrs:{\"type\":\"success\",\"color\":_vm.snackbarColor},model:{value:(_vm.snackbar),callback:function ($$v) {_vm.snackbar=$$v},expression:\"snackbar\"}},'base-material-snackbar',{\n top: true,\n center: true,\n },false),[_vm._v(\" \"+_vm._s(_vm.snackbarText)+\" \")])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import axios from '@/helpers/axios'\nimport parserUtils from '@/views/dashboard/components/lists/utils/parserUtils'\n\nconst getters = {\n errorMessage(state) {\n return state.errorMessage\n },\n}\n\nconst initialState = {\n itemList: [],\n errorMessage: '',\n}\n\nconst mutations = {\n setListData(state, payload = []) {\n const items = parserUtils.parseConnectorLogList(payload)\n state.itemList = [...items]\n },\n setErrorMessage(state, payload) {\n state.errorMessage = payload\n },\n clear(state) {\n Object.assign(state, initialState)\n },\n}\n\nconst actions = {\n async getList({ commit }) {\n const endpoint = 'clinics/connector_log_list'\n let response\n try {\n response = await axios.get(`${process.env.VUE_APP_API_ASSESSMENTS_URL}/${endpoint}/`)\n } catch (e) {\n const defaultText = 'Noget gik galt'; // TODO: Localization\n commit('setErrorMessage', `${!!e.response ? e.response.statusText : defaultText}`)\n throw e;\n }\n const data = response.data.data\n commit('setListData', data)\n },\n}\n\nexport default {\n namespaced: true,\n state: { ...initialState },\n getters,\n actions,\n mutations,\n}\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-container',{attrs:{\"id\":\"data-tables\",\"tag\":\"section\"}},[_c('base-material-card',{attrs:{\"isLoading\":_vm.isLoading || _vm.isDownloading}},[_c('v-text-field',{staticClass:\"ml-auto mr-4\",staticStyle:{\"max-width\":\"250px\"},attrs:{\"append-icon\":\"mdi-magnify\",\"label\":_vm.$t('GENERIC_SEARCH'),\"hide-details\":\"\",\"single-line\":\"\"},model:{value:(_vm.search),callback:function ($$v) {_vm.search=$$v},expression:\"search\"}}),_c('v-divider',{staticClass:\"mt-3\"}),_c('v-data-table',{attrs:{\"headers\":_vm.headers,\"items\":_vm.items,\"search\":_vm.search,\"sort-by\":['createdAt'],\"sort-desc\":[true],\"items-per-page\":50},on:{\"update:search\":function($event){_vm.search=$event},\"click:row\":_vm.rowClick},scopedSlots:_vm._u([{key:\"item.date\",fn:function(ref){\nvar item = ref.item;\nreturn [_c('span',{staticClass:\"grey--text\"},[_vm._v(_vm._s(item.date))])]}},{key:\"item.requestTypeName\",fn:function(ref){\nvar item = ref.item;\nreturn [_c('span',{staticClass:\"grey--text\"},[_vm._v(_vm._s(item.requestTypeName))])]}},{key:\"item.isRequested\",fn:function(ref){\nvar item = ref.item;\nreturn [_c('v-icon',{attrs:{\"color\":item.isRequested ? 'success' : 'grey lighten-2'}},[_vm._v(\" \"+_vm._s(item.isRequested ? \"mdi-check\" : \"mdi-minus\")+\" \")])]}},{key:\"item.isImported\",fn:function(ref){\nvar item = ref.item;\nreturn [_c('v-icon',{attrs:{\"color\":item.isImported ? 'success' : 'grey lighten-2'}},[_vm._v(\" \"+_vm._s(item.isImported ? \"mdi-check\" : \"mdi-minus\")+\" \")])]}},{key:\"item.isProcessed\",fn:function(ref){\nvar item = ref.item;\nreturn [_c('v-icon',{attrs:{\"color\":item.isProcessed ? 'success' : 'grey lighten-2'}},[_vm._v(\" \"+_vm._s(item.isProcessed ? \"mdi-check\" : \"mdi-minus\")+\" \")])]}}])})],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n \n","import mod from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ConnectorLogList.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ConnectorLogList.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ConnectorLogList.vue?vue&type=template&id=1252f4d6&\"\nimport script from \"./ConnectorLogList.vue?vue&type=script&lang=js&\"\nexport * from \"./ConnectorLogList.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VContainer } from 'vuetify/lib/components/VGrid';\nimport { VDataTable } from 'vuetify/lib/components/VDataTable';\nimport { VDivider } from 'vuetify/lib/components/VDivider';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VTextField } from 'vuetify/lib/components/VTextField';\ninstallComponents(component, {VContainer,VDataTable,VDivider,VIcon,VTextField})\n","\n\n \n","import mod from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ConnectorLogList.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ConnectorLogList.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ConnectorLogList.vue?vue&type=template&id=5a5a5af2&\"\nimport script from \"./ConnectorLogList.vue?vue&type=script&lang=js&\"\nexport * from \"./ConnectorLogList.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-container',{attrs:{\"id\":\"dashboard\",\"fluid\":\"\",\"tag\":\"section\"}},[_c('v-row',[_c('v-col',{attrs:{\"cols\":\"12\",\"sm\":\"12\"}},[_c('span',{staticClass:\"error--text\",domProps:{\"textContent\":_vm._s(_vm.errorMessage)}})])],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ErrorMessage.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ErrorMessage.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ErrorMessage.vue?vue&type=template&id=8ce2a30a&\"\nimport script from \"./ErrorMessage.vue?vue&type=script&lang=js&\"\nexport * from \"./ErrorMessage.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VContainer } from 'vuetify/lib/components/VGrid';\nimport { VRow } from 'vuetify/lib/components/VGrid';\ninstallComponents(component, {VCol,VContainer,VRow})\n","import PatientDocumentOptions from \"@/store/static/PatientDocumentOptions\";\nimport dateUtils from '@/helpers/date-utils';\nimport i18n from '@/i18n'\n\nconst TREATMENT_TYPE__PLANNED = \"planned\"\nconst TREATMENT_TYPE__COMPLETED = \"completed\"\n\nconst parserUtils = {\n parseApiPayloadToAssessmentDataTableList(payload) {\n /** Converts a *standardized* API payload to a *standardized* assessment\n *\n * DEVELOPER NOTE:\n * This is a SUPER coupled implementation. Break it as soon as it\n * becomes constraining, but the intention is to help keep\n * assessment lists aligned and avoid regression (i.e. forgetting\n * to update one place when others are updated):\n *\n * - Assessment list for all patients\n * - Assessment list for individual patients\n *\n * Typical use case: When updating one place, we are 'forced' to come\n * here (probably why you are reading it now), and please search the\n * repo for the above function name to get reminded where similar lists\n * might need to be updated.\n */\n const dateOptions = { year: 'numeric', month: 'short', day: 'numeric' };\n\n const dataTableItems = []\n let i = 0\n for (i in payload) {\n const resource = payload[i]\n const attribs = resource.attributes\n const relationships = resource.relationships\n const relatedImageAsJsonApi = relationships.uploaded_images.data\n\n let color = 'warning'\n let status = 'Pending Consult'\n const isPending = attribs.is_pending\n const isAnamnesisQuestionnaire = attribs.is_anamnesis_questionnaire\n const isJournalized = attribs.is_journalized ?? attribs.is_journalized_by_clinic;\n if (isAnamnesisQuestionnaire) {\n color = 'grey'\n status = 'No action needed'\n } else if (isJournalized) {\n color = 'success'\n status = 'Journalized'\n } else if (!isPending) {\n color = 'success'\n status = 'Handled'\n }\n\n const imageUrls = []\n const guiUrls = []\n const thumbnailUrls = []\n let j = 0\n for (j in relatedImageAsJsonApi) {\n const imageResource = relatedImageAsJsonApi[j]\n const url = imageResource.attributes.url\n const guiUrl = imageResource.attributes.gui_url\n const thumbnailUrl = imageResource.attributes.thumbnail_url\n imageUrls.push(url)\n guiUrls.push(guiUrl)\n thumbnailUrls.push(thumbnailUrl)\n }\n\n const _createdAt = !!attribs.created_at ? new Date(attribs.created_at) : null;\n const createdAt = !!_createdAt ? _createdAt.getTime() : null;\n const createdAtDate = !!_createdAt ? _createdAt.toLocaleDateString('da-DK', dateOptions) : null;\n\n const now = new Date();\n const diffInMs = !!_createdAt ? now - _createdAt : 0;\n const diffInHours = diffInMs / 3600000;\n const roundedDiffInHours = diffInHours.toFixed(1)\n\n const item = {\n uuid: attribs.uuid,\n name: attribs.name,\n createdAt: createdAt,\n date: createdAtDate,\n diffInHours: roundedDiffInHours,\n status: status,\n color: color,\n isUserVerifiedByClinic: attribs.is_user_verified_by_clinic,\n isFromAdentAssessmentWidget: attribs.is_from_adent_assessment_widget,\n isAnamnesisQuestionnaire: isAnamnesisQuestionnaire,\n isJournalized: isJournalized,\n imageUrls: imageUrls,\n guiUrls: guiUrls,\n thumbnailUrls: thumbnailUrls,\n }\n dataTableItems.push(item)\n }\n return dataTableItems\n },\n\n parseApiPayloadToMedicalHistoryDataTableList(payload) {\n const dateOptions = { year: 'numeric', month: 'short', day: 'numeric' };\n\n const dataTableItems = []\n let i = 0\n for (i in payload) {\n const resource = payload[i]\n const attribs = resource.attributes\n const relationships = resource.relationships\n const patient = relationships.patient.data\n\n let patientFullname = !!patient ? patient.attributes.full_name : null\n if (patientFullname == null || patientFullname.length == 0) {\n patientFullname = patient.attributes.phone_number\n }\n if (patientFullname == null || patientFullname.length == 0) {\n const supportId = patient.attributes.cognito_id.slice(0, 8)\n patientFullname = `Navn mangler (Support id: ${supportId})`\n }\n\n const _createdAt = new Date(attribs.created_at)\n const createdAt = _createdAt.getTime()\n const createdAtDate = _createdAt.toLocaleDateString('da-DK', dateOptions);\n\n const _updatedAt = new Date(attribs.updated_at)\n const updatedAt = _updatedAt.getTime()\n const updatedAtDate = _updatedAt.toLocaleDateString('da-DK', dateOptions);\n\n const _completedAt = new Date(attribs.completed_at)\n const completedAt = _completedAt.getTime()\n const completedAtDate = _completedAt.toLocaleDateString('da-DK', dateOptions);\n\n let sortableAt = completedAt;\n if (!isValidDate(_completedAt)) {\n sortableAt = createdAt;\n }\n\n const item = {\n uuid: attribs.uuid,\n name: patientFullname,\n createdAt: createdAt,\n updatedAt: updatedAt,\n completedAt: completedAt,\n date: completedAtDate,\n sortableAt: sortableAt,\n isBookmarked: attribs.is_bookmarked,\n isJournalized: attribs.is_journalized,\n isJournalizedByConnector: attribs.is_journalized_by_connector,\n updatedAtDate: updatedAtDate,\n createdAtDate: createdAtDate,\n completedAtDate: completedAtDate,\n }\n dataTableItems.push(item)\n }\n return dataTableItems\n },\n\n parseApiPayloadToInstallmentDataTableList(payload) {\n const dateOptions = { year: 'numeric', month: 'short', day: 'numeric' };\n\n const dataTableItems = []\n let i = 0\n for (i in payload) {\n const resource = payload[i]\n const attribs = resource.attributes\n const relationships = resource.relationships\n const patient = relationships.patient.data\n\n const supportId = attribs.uuid.slice(0, 8);\n\n let patientFullname = !!patient ? patient.attributes.full_name : null\n if (patientFullname == null || patientFullname.length == 0) {\n patientFullname = patient.attributes.phone_number\n }\n if (patientFullname == null || patientFullname.length == 0) {\n const cognitoId = patient.attributes.cognito_id.slice(0, 8)\n patientFullname = `Navn mangler (Support id: ${cognitoId})`\n }\n\n const _createdAt = new Date(attribs.created_at)\n const createdAt = _createdAt.getTime()\n const createdAtDate = _createdAt.toLocaleDateString('da-DK', dateOptions);\n\n const _updatedAt = new Date(attribs.updated_at)\n const updatedAtDate = _updatedAt.toLocaleDateString('da-DK', dateOptions);\n\n const _sentAt = new Date(attribs.sent_at)\n const sentAtDate = _sentAt.toLocaleDateString('da-DK', dateOptions);\n\n const _confirmedAt = attribs.confirmed_at == null ? null : new Date(attribs.confirmed_at)\n const confirmedAtDate = _confirmedAt == null ? null : _confirmedAt.toLocaleDateString('da-DK', dateOptions);\n\n const _initialPaymentReceivedAt = attribs.initial_payment_received_at == null ? null : new Date(attribs.initial_payment_received_at)\n const initialPaymentReceivedAtDate = _initialPaymentReceivedAt == null ? null : _initialPaymentReceivedAt.toLocaleDateString('da-DK', dateOptions);\n\n const item = {\n uuid: attribs.uuid,\n name: patientFullname,\n createdAt: createdAt,\n date: createdAtDate,\n createdAtDate: createdAtDate,\n updatedAtDate: updatedAtDate,\n isSent: attribs.is_sent,\n isConfirmed: attribs.is_confirmed,\n confirmedAt: confirmedAtDate,\n isInitialPaymentReceived: attribs.is_initial_payment_received,\n initialPaymentReceivedAt: initialPaymentReceivedAtDate,\n isBookmarked: attribs.is_bookmarked,\n isJournalized: attribs.is_journalized,\n sentAtDate: sentAtDate,\n supportId: supportId,\n }\n dataTableItems.push(item)\n }\n return dataTableItems\n },\n\n async groupByDocumentType({\n items,\n fallbackTitle = 'ٴ Øvrig: Uden kategori', // @sortprefix: Note the arabic prefix for alphatic sort\n allowSubgroup = false,\n primarySubgroupKey = 'byInitial',\n }) {\n let groupDict = {}\n for (let i in items) {\n const item = items[i]\n const categoryUuid = item.documentType\n const categoryTitle = item.documentTitle ?? fallbackTitle\n const categoryPrecedence = !item ? 0 : (item.precedence ?? 0)\n\n groupDict = await this._addToGroupDocumentDict({\n item: item,\n groupDict: groupDict,\n categoryUuid: categoryUuid,\n categoryTitle: categoryTitle,\n categoryPrecedence: categoryPrecedence,\n })\n }\n let asList0 = []\n for (let uuid in groupDict) {\n asList0.push(groupDict[uuid])\n }\n\n let asList1 = []\n for (let j in asList0) {\n const elem = asList0[j]\n if (allowSubgroup) {\n const byInitial = await this.groupBySystemInitial({\n items: elem.items,\n allowSubgroup: false,\n })\n elem['byInitial'] = byInitial\n elem['subgroup'] = elem[primarySubgroupKey]\n }\n asList1.push(elem)\n }\n\n return asList1.sort((a, b) => (b.precedence ?? 0) - (a.precedence ?? 0))\n },\n\n parseDocumentList(payload) {\n const dateOptions = { year: 'numeric', month: 'short', day: 'numeric' };\n\n const dataTableItems = []\n let i = 0\n for (i in payload) {\n const resource = payload[i]\n const attribs = resource.attributes\n const relationships = resource.relationships\n const patient = relationships.patient.data\n\n const supportId = attribs.uuid.slice(0, 8);\n\n let patientFullname = !!patient ? patient.attributes.full_name : null\n if (patientFullname == null || patientFullname.length == 0) {\n patientFullname = !!patient ? patient.attributes.phone_number : null\n }\n if (patientFullname == null || patientFullname.length == 0) {\n const cognitoId = !!patient ? patient.attributes.cognito_id.slice(0, 8) : null\n patientFullname = `Navn mangler (Support id: ${cognitoId})`\n }\n\n const _createdAt = new Date(attribs.created_at)\n const createdAt = _createdAt.getTime()\n const createdAtDate = _createdAt.toLocaleDateString('da-DK', dateOptions);\n\n const _updatedAt = new Date(attribs.updated_at)\n const updatedAtDate = _updatedAt.toLocaleDateString('da-DK', dateOptions);\n\n const _sentAt = new Date(attribs.sent_at)\n const sentAtDate = _sentAt.toLocaleDateString('da-DK', dateOptions);\n\n const _confirmedAt = attribs.confirmed_at == null ? null : new Date(attribs.confirmed_at)\n const confirmedAtDate = _confirmedAt == null ? null : _confirmedAt.toLocaleDateString('da-DK', dateOptions);\n\n const _rejectedAt = attribs.rejected_at == null ? null : new Date(attribs.rejected_at)\n const rejectedAtDate = _rejectedAt == null ? null : _rejectedAt.toLocaleDateString('da-DK', dateOptions);\n\n const documentType = attribs.document_type;\n const documentText = this.getDocumentText({ documentType: documentType });\n const documentTitle = documentText.title\n const documentPrecedence = documentText.precedence\n\n const item = {\n uuid: attribs.uuid,\n name: patientFullname,\n documentType: documentType,\n documentTitle: documentTitle,\n precedence: documentPrecedence,\n createdAt: createdAt,\n date: createdAtDate,\n createdAtDate: createdAtDate,\n updatedAtDate: updatedAtDate,\n isSent: attribs.is_sent,\n isConfirmed: attribs.is_confirmed,\n confirmedAt: confirmedAtDate,\n isRejected: attribs.is_rejected,\n rejectedAt: rejectedAtDate,\n isBookmarked: attribs.is_bookmarked,\n isJournalized: attribs.is_journalized,\n sentAtDate: sentAtDate,\n amountTotal: attribs.amount_total,\n url: attribs.url,\n supportId: supportId,\n systemInitial: attribs.system_user_initials,\n }\n dataTableItems.push(item)\n }\n return dataTableItems\n },\n\n\n parseInstructionList(payload) {\n const dateOptions = { year: 'numeric', month: 'short', day: 'numeric' };\n const dateOptionsShort = { month: 'short', day: 'numeric' };\n\n const dataTableItems = []\n let i = 0\n for (i in payload) {\n const resource = payload[i]\n const attribs = resource.attributes\n const relationships = resource.relationships\n const patient = relationships.patient.data\n const instructionCard = relationships.instruction_card.data\n\n const imageListJson = relationships.images.data\n const imageList = this._parseImageList({ payload: imageListJson })\n const imagePovList = this._parseimagePovList({ payload: imageListJson })\n\n const shareLogListJson = !relationships.share_logs ? [] : relationships.share_logs.data\n const shareLogList = this._parseShareLogList({ payload: shareLogListJson })\n\n const digitalConsultListJson = relationships.digital_consult_logs.data\n const digitalConsultList = this._parseDigitalConsultList({ payload: digitalConsultListJson })\n\n const cognitoId = !!patient ? patient.attributes.cognito_id : null\n\n let patientFirstname = !!patient ? patient.attributes.first_name : null\n let patientFullname = !!patient ? patient.attributes.full_name : null\n if (patientFullname == null || patientFullname.length == 0) {\n patientFullname = !!patient ? patient.attributes.phone_number : null\n }\n if (patientFullname == null || patientFullname.length == 0) {\n const supportId = cognitoId.slice(0, 8)\n patientFullname = `Navn mangler (Support id: ${supportId})`\n }\n\n let instructionCardUuid = null\n let instructionCardTitle = null\n if (!!instructionCard) {\n instructionCardUuid = instructionCard.attributes.uuid\n instructionCardTitle = instructionCard.attributes.title_da\n }\n\n const _createdAt = !!attribs.created_at ? new Date(attribs.created_at) : null;\n const createdAt = !!_createdAt ? _createdAt.getTime() : null;\n const createdAtDate = !!_createdAt ? _createdAt.toLocaleDateString('da-DK', dateOptions) : null;\n const createdAtDateShort = !!_createdAt ? _createdAt.toLocaleDateString('da-DK', dateOptionsShort) : null;\n\n const _updatedAt = !!attribs.updated_at ? new Date(attribs.updated_at) : null;\n const updatedAt = !!_updatedAt ? _updatedAt.getTime() : null;\n const updatedAtDate = !!_updatedAt ? _updatedAt.toLocaleDateString('da-DK', dateOptions) : null;\n const updatedAtDateShort = !!_updatedAt ? _updatedAt.toLocaleDateString('da-DK', dateOptionsShort) : null;\n\n const _sentAt = !!attribs.sent_at ? new Date(attribs.sent_at) : null;\n const sentAt = !!_sentAt ? _sentAt.getTime() : null;\n const sentAtDate = !!_sentAt ? _sentAt.toLocaleDateString('da-DK', dateOptions) : null;\n\n const _completedAt = !!attribs.completed_at ? new Date(attribs.completed_at) : null;\n const completedAt = !!_completedAt ? _completedAt.getTime() : null;\n const completedAtDate = !!_completedAt ? _completedAt.toLocaleDateString('da-DK', dateOptions) : null;\n\n const _confirmedAt = !!attribs.confirmed_at ? new Date(attribs.confirmed_at) : null;\n const confirmedAt = !!_confirmedAt ? _confirmedAt.getTime() : null;\n const confirmedAtDate = !!_confirmedAt ? _confirmedAt.toLocaleDateString('da-DK', dateOptions) : null;\n\n const _openedAt = !!attribs.opened_at ? new Date(attribs.opened_at) : null;\n const openedAt = !!_openedAt ? _openedAt.getTime() : null;\n const openedAtDate = !!_openedAt ? _openedAt.toLocaleDateString('da-DK', dateOptions) : null;\n\n const _bookmarkedAt = !!attribs.bookmarked_at ? new Date(attribs.bookmarked_at) : null;\n const bookmarkedAt = !!_bookmarkedAt ? _bookmarkedAt.getTime() : null;\n const bookmarkedAtDate = !!_bookmarkedAt ? _bookmarkedAt.toLocaleDateString('da-DK', dateOptions) : null;\n\n const _nextDigitalConsultAt = !!attribs.next_digital_consult_at ? new Date(attribs.next_digital_consult_at) : null;\n const nextDigitalConsultAt = !!_nextDigitalConsultAt ? _nextDigitalConsultAt.getTime() : null;\n const nextDigitalConsultAtDate = !!_nextDigitalConsultAt ? _nextDigitalConsultAt.toLocaleDateString('da-DK', dateOptions) : null;\n const nextDigitalConsultAtDateShort = !!_nextDigitalConsultAt ? _nextDigitalConsultAt.toLocaleDateString('da-DK', dateOptionsShort) : null;\n\n const _latestDigitalConsultAt = !!attribs.latest_digital_consult_at ? new Date(attribs.latest_digital_consult_at) : null;\n const latestDigitalConsultAt = !!_latestDigitalConsultAt ? _latestDigitalConsultAt.getTime() : null;\n const latestDigitalConsultAtDate = !!_latestDigitalConsultAt ? _latestDigitalConsultAt.toLocaleDateString('da-DK', dateOptions) : null;\n const latestDigitalConsultAtDateShort = !!_latestDigitalConsultAt ? _latestDigitalConsultAt.toLocaleDateString('da-DK', dateOptionsShort) : null;\n\n const _latestImageReceivedAt = !!attribs.latest_image_received_at ? new Date(attribs.latest_image_received_at) : null;\n const latestImageReceivedAt = !!_latestImageReceivedAt ? _latestImageReceivedAt.getTime() : null;\n const latestImageReceivedAtDate = !!_latestImageReceivedAt ? _latestImageReceivedAt.toLocaleDateString('da-DK', dateOptions) : null;\n const latestImageReceivedAtDateShort = !!_latestImageReceivedAt ? _latestImageReceivedAt.toLocaleDateString('da-DK', dateOptionsShort) : null;\n\n const _journalizedAt = !!attribs.journalized_at ? new Date(attribs.journalized_at) : null;\n const journalizedAt = !!_journalizedAt ? _journalizedAt.getTime() : null;\n const journalizedAtDate = !!_journalizedAt ? _journalizedAt.toLocaleDateString('da-DK', dateOptions) : null;\n\n const _beforeScanCompletedAt = !!attribs.before_scan_completed_at ? new Date(attribs.beforeScanCompleted_at) : null;\n const beforeScanCompletedAt = !!_beforeScanCompletedAt ? _beforeScanCompletedAt.getTime() : null;\n const beforeScanCompletedAtDate = !!_beforeScanCompletedAt ? _beforeScanCompletedAt.toLocaleDateString('da-DK', dateOptions) : null;\n\n const _afterScanCompletedAt = !!attribs.after_scan_completed_at ? new Date(attribs.afterScanCompleted_at) : null;\n const afterScanCompletedAt = !!_afterScanCompletedAt ? _afterScanCompletedAt.getTime() : null;\n const afterScanCompletedAtDate = !!_afterScanCompletedAt ? _afterScanCompletedAt.toLocaleDateString('da-DK', dateOptions) : null;\n\n const _latestScanCompletedAt = !!attribs.latest_scan_completed_at ? new Date(attribs.latest_scan_completed_at) : null;\n const latestScanCompletedAt = !!_latestScanCompletedAt ? _latestScanCompletedAt.getTime() : null;\n const latestScanCompletedAtDate = !!_latestScanCompletedAt ? _latestScanCompletedAt.toLocaleDateString('da-DK', dateOptions) : null;\n\n const latestMessageToPatientSentAtRaw = attribs.latest_message_to_patient_sent_at_raw;\n const latestMessageToPatientSentAtTitle = attribs.latest_message_to_patient_sent_at_title;\n const _latestMessageToPatientSentAt = !!attribs.latest_scan_completed_at ? new Date(attribs.latest_message_to_patient_sent_at) : null;\n const latestMessageToPatientSentAt = !!_latestMessageToPatientSentAt ? _latestMessageToPatientSentAt.getTime() : null;\n const latestMessageToPatientSentAtDate = !!_latestMessageToPatientSentAt ? _latestMessageToPatientSentAt.toLocaleDateString('da-DK', dateOptions) : null;\n\n const hasAnyImageReady = attribs.has_any_image_ready\n const completedScanCount = attribs.completed_scan_count\n\n const isAutomaticallyUpdatedSinceViewed = attribs.is_automatically_updated_since_viewed;\n const automaticallyUpdatedSinceViewedRaw = attribs.automatically_updated_since_viewed_raw;\n const automaticallyUpdatedSinceViewedTitle = attribs.automatically_updated_since_viewed_title;\n const _automaticallyUpdatedSinceViewedAt = !!attribs.automatically_updated_since_viewed_at ? new Date(attribs.automatically_updated_since_viewed_at) : null;\n const automaticallyUpdatedSinceViewedAt = !!_automaticallyUpdatedSinceViewedAt ? _automaticallyUpdatedSinceViewedAt.getTime() : null;\n const automaticallyUpdatedSinceViewedAtDate = !!_automaticallyUpdatedSinceViewedAt ? _automaticallyUpdatedSinceViewedAt.toLocaleDateString('da-DK', dateOptions) : null;\n\n const _noteLog = attribs.note_log\n const noteLog = this._parseNoteLog(_noteLog);\n\n const _clinic = relationships.clinic.data\n const clinicAttribs = _clinic.attributes\n const clinicRels = _clinic.relationships\n const instructionSmsTemplates = clinicAttribs.instruction_sms_templates ?? []\n const instructionInternalMessageTemplates = clinicAttribs.instruction_internal_message_templates ?? []\n const clinicEmail = clinicAttribs.email\n\n let _recipientEmails = [];\n if (!!clinicRels && !!clinicRels.organization && !!clinicRels.organization.data) {\n const organizationAttribs = clinicRels.organization.data.attributes\n _recipientEmails = organizationAttribs.recipient_emails ?? [];\n }\n _recipientEmails.push(clinicEmail);\n const recipientEmails = [...new Set(_recipientEmails)];\n\n const item = {\n uuid: attribs.uuid,\n title: instructionCardTitle,\n name: patientFullname,\n firstname: patientFirstname,\n cognitoId: cognitoId,\n isSent: attribs.is_sent,\n isConfirmed: attribs.is_confirmed,\n isOpened: attribs.is_opened,\n isStarted: attribs.is_started,\n isCompleted: attribs.is_completed,\n isBookmarked: attribs.is_bookmarked,\n isJournalized: attribs.is_journalized,\n isBeforeScanCompleted: attribs.is_before_scan_completed,\n isAfterScanCompleted: attribs.is_after_scan_completed,\n isLatestScanCompleted: attribs.is_latest_scan_completed,\n completedScanCount: completedScanCount,\n createdAt: createdAt,\n updatedAt: updatedAt,\n createdAtDate: createdAtDate,\n createdAtDateShort: createdAtDateShort,\n updatedAtDate: updatedAtDate,\n updatedAtDateShort: updatedAtDateShort,\n sentAt: sentAt,\n sentAtDate: sentAtDate,\n journalizedAt: journalizedAt,\n journalizedAtDate: journalizedAtDate,\n completedAt: completedAt,\n completedAtDate: completedAtDate,\n confirmedAt: confirmedAt,\n confirmedAtDate: confirmedAtDate,\n openedAt: openedAt,\n openedAtDate: openedAtDate,\n bookmarkedAt: bookmarkedAt,\n bookmarkedAtDate: bookmarkedAtDate,\n isMessageToPatientSentToday: attribs.is_message_to_patient_sent_today,\n isMessageToPatientSentThisWeek: attribs.is_message_to_patient_sent_this_week,\n isPendingDigitalConsult: attribs.is_pending_digital_consult,\n latestMessageToPatientSentAt: latestMessageToPatientSentAt,\n latestMessageToPatientSentAtTs: _latestMessageToPatientSentAt,\n latestMessageToPatientSentAtDate: latestMessageToPatientSentAtDate,\n latestMessageToPatientSentAtRaw: latestMessageToPatientSentAtRaw,\n latestMessageToPatientSentAtTitle: latestMessageToPatientSentAtTitle,\n isDigitalConsultCompletedToday: attribs.is_digital_consult_completed_today,\n isDigitalConsultCompletedThisWeek: attribs.is_digital_consult_completed_this_week,\n nextDigitalConsultAt: nextDigitalConsultAt,\n nextDigitalConsultAtTs: _nextDigitalConsultAt,\n nextDigitalConsultAtDate: nextDigitalConsultAtDate,\n nextDigitalConsultAtDateShort: nextDigitalConsultAtDateShort,\n latestDigitalConsultAt: latestDigitalConsultAt,\n latestDigitalConsultAtTs: _latestDigitalConsultAt,\n latestDigitalConsultAtDate: latestDigitalConsultAtDate,\n latestDigitalConsultAtDateShort: latestDigitalConsultAtDateShort,\n latestImageReceivedAt: latestImageReceivedAt,\n latestImageReceivedAtTs: _latestImageReceivedAt,\n latestImageReceivedAtDate: latestImageReceivedAtDate,\n latestImageReceivedAtDateShort: latestImageReceivedAtDateShort,\n hasAnyImageReady: hasAnyImageReady,\n noteLog: noteLog,\n beforeScanCompletedAt: beforeScanCompletedAt,\n beforeScanCompletedAtDate: beforeScanCompletedAtDate,\n afterScanCompletedAt: afterScanCompletedAt,\n afterScanCompletedAtDate: afterScanCompletedAtDate,\n latestScanCompletedAt: latestScanCompletedAt,\n latestScanCompletedAtDate: latestScanCompletedAtDate,\n isAutomaticallyUpdatedSinceViewed: isAutomaticallyUpdatedSinceViewed,\n automaticallyUpdatedSinceViewedRaw: automaticallyUpdatedSinceViewedRaw,\n automaticallyUpdatedSinceViewedTitle: automaticallyUpdatedSinceViewedTitle,\n automaticallyUpdatedSinceViewedAt: automaticallyUpdatedSinceViewedAt,\n automaticallyUpdatedSinceViewedAtDate: automaticallyUpdatedSinceViewedAtDate,\n instructionCardUuid: instructionCardUuid,\n images: imageList,\n imagePovList: imagePovList,\n shareLogList: shareLogList,\n digitalConsultList: digitalConsultList,\n recipientEmails: recipientEmails,\n instructionSmsTemplates: instructionSmsTemplates,\n instructionInternalMessageTemplates: instructionInternalMessageTemplates,\n scanWeekday: attribs.scan_weekday,\n scanIntervalDays: attribs.scan_interval_days,\n }\n dataTableItems.push(item)\n }\n return dataTableItems\n },\n\n _parseShareLogList({ payload }) {\n let itemList = []\n for (let i in payload) {\n const item = payload[i];\n const attribs = item.attributes\n const createdAt = new Date(attribs.created_at);\n const createdAtTs = createdAt.getTime();\n const prettyCreatedAt = dateUtils.formatDateToDDMMYYYYTime({ date: createdAt })\n const messageType = attribs.message_type\n const messageBodyTrunc = attribs.message_body_trunc\n const elem = {\n uuid: attribs.uuid,\n body: attribs.title,\n createdAt: createdAt,\n prettyCreatedAt: prettyCreatedAt,\n ts: createdAtTs,\n type: messageType,\n description: messageBodyTrunc,\n }\n itemList.push(elem)\n }\n return itemList.sort((a, b) => b.ts - a.ts);\n },\n\n _parseDigitalConsultList({ payload }) {\n let itemList = []\n for (let i in payload) {\n const item = payload[i];\n const attribs = item.attributes\n const createdAt = new Date(attribs.timestamp);\n const createdAtTs = createdAt.getTime();\n const prettyCreatedAt = dateUtils.formatDateToDDMMYYYYTime({ date: createdAt })\n const elem = {\n uuid: attribs.uuid,\n body: attribs.note,\n type: 'consult',\n description: null,\n createdAt: createdAt,\n prettyCreatedAt: prettyCreatedAt,\n ts: createdAtTs,\n }\n itemList.push(elem)\n }\n return itemList.sort((a, b) => b.ts - a.ts);\n },\n\n _parseimagePovList({ payload }) {\n let tagList = []\n let uniqueList = []\n for (let i in payload) {\n const item = payload[i];\n const attribs = item.attributes\n const pointOfView = attribs.point_of_view\n if (uniqueList.includes(pointOfView)) {\n continue;\n }\n uniqueList.push(pointOfView)\n const meta = this._getPointOfViewMeta({ pointOfView: pointOfView })\n const tag = {\n id: pointOfView,\n title: meta.title,\n precedence: meta.precedence,\n isFacePov: meta.isFacePov,\n }\n tagList.push(tag)\n }\n tagList.sort((a, b) => a.precedence - b.precedence);\n return tagList;\n },\n\n _parseImageList({ payload }) {\n let imageList = []\n for (let i in payload) {\n const item = payload[i];\n const attribs = item.attributes\n const createdAt = new Date(attribs.created_at);\n const prettyCreatedAt = dateUtils.formatDateToDDMMYYYYTime({ date: createdAt })\n const pointOfView = attribs.point_of_view\n const meta = this._getPointOfViewMeta({ pointOfView: pointOfView })\n const image = {\n uuid: attribs.uuid,\n url: attribs.url,\n rawCroppedUrl: attribs.raw_cropped_url,\n hueCroppedUrl: attribs.hue_color_cropped_url,\n createdAt: createdAt,\n prettyCreatedAt: prettyCreatedAt,\n pointOfView: pointOfView,\n pointOfViewTitle: meta.title,\n pointOfViewPrecedence: meta.precedence,\n isFacePov: meta.isFacePov,\n }\n imageList.push(image)\n }\n return this._sortListByDateAndPrecedence({ items: imageList });\n },\n\n _sortListByDateAndPrecedence({ items }) {\n return items.sort((a, b) => {\n const dateA = a.createdAt;\n const dateB = b.createdAt;\n const condition0 = dateA.getDate() !== dateB.getDate();\n const condition1 = a.pointOfViewPrecedence - b.pointOfViewPrecedence;\n // Compare dates\n if (dateA.getDate() !== dateB.getDate()) {\n return condition0;\n } else {\n // If dates are the same, compare precedence\n return condition1;\n }\n });\n },\n\n getDocumentText({ documentType }) {\n let title = 'Andet' // this._capitalize({ value: documentType })\n let precedence = 0\n if (documentType == 'instruction') {\n title = 'Vejledning'\n precedence = 17\n } else if (documentType == 'receipt') {\n title = 'Kvittering'\n precedence = 19\n } else if (documentType == 'giro') {\n title = 'Afdragsordning'\n precedence = 15\n } else if (documentType == 'bill') {\n title = 'Regning'\n precedence = 18\n } else if (documentType == 'overdue_bill') {\n title = 'Rykker (regning)'\n precedence = 16\n } else if (documentType == 'medical_history') {\n title = 'Helbredsskema'\n precedence = 10\n } else if (documentType == 'treatment') {\n title = 'Overslag'\n precedence = 20\n } else if (documentType == 'journal_item') {\n title = 'Journal'\n precedence = 10\n } else if (documentType == 'other_pdf') {\n title = 'PDF'\n precedence = 9\n } else if (documentType == 'other_jpg') {\n title = 'Billede eller røntgen'\n precedence = 5\n } else if (documentType == 'standalone_free_text') {\n title = 'Fritekst'\n precedence = 11\n }\n return { title: title, precedence: precedence };\n },\n\n _getPointOfViewMeta({ pointOfView }) {\n const povClean = !!pointOfView ? pointOfView.trim('.jpg') : '';\n let title = this._capitalize({ value: pointOfView })\n let precedence = 20;\n if (povClean == 'face-smile') {\n title = 'Naturligt smil (på afstand)';\n precedence = 15;\n } else if (povClean == 'face-smile-front') {\n title = 'Naturligt smil (på afstand)';\n precedence = 15;\n } else if (povClean == 'bite-front') {\n title = 'Tænder (tæt på)';\n precedence = 1;\n } else if (povClean == 'bite-left') {\n title = 'Tænder (tæt på, venstre)';\n precedence = 5;\n } else if (povClean == 'bite-right') {\n title = 'Tænder (tæt på, højre)';\n precedence = 6;\n } else if (povClean == 'upper-arch') {\n title = 'Øvre kæbe';\n precedence = 12;\n } else if (povClean == 'bottom-arch') {\n title = 'Nedre kæbe';\n precedence = 11;\n } else if (povClean == 'closed-bite-front') {\n title = 'Sammenbid med skinne forfra'\n precedence = 3;\n } else if (povClean == 'closed-bite-left') {\n title = 'Sammenbid fra venstre'\n precedence = 5;\n } else if (povClean == 'closed-bite-right') {\n title = 'Sammenbid fra højre'\n precedence = 7;\n } else if (povClean == 'closed-bite-front-excl-aligners') {\n title = 'Sammenbid u. skinne og forfra'\n precedence = 1;\n } else if (povClean == 'closed-bite-front-incl-aligners') {\n title = 'Sammenbid med skinne og forfra'\n precedence = 2;\n } else if (povClean == 'closed-bite-left-incl-aligners') {\n title = 'Sammenbid med skinne fra venstre'\n precedence = 6;\n } else if (povClean == 'closed-bite-right-incl-aligners') {\n title = 'Sammenbid med skinne fra højre'\n precedence = 8;\n } else if (povClean == 'open-bite-front-incl-aligners') {\n title = 'Let åben mund med skinne og forfra'\n precedence = 10;\n }\n const isFacePov = povClean.includes('face');\n return { title: title, precedence: precedence, isFacePov: isFacePov }\n },\n\n _capitalize({ value }) {\n let arr = value.split('-');\n let capital = arr.map(item => item.charAt(0).toUpperCase() + item.slice(1).toLowerCase());\n let capitalString = capital.join(\" \");\n return capitalString\n },\n\n parseReviewLogList(payload) {\n const dateOptions = { year: 'numeric', month: 'short', day: 'numeric' };\n\n const dataTableItems = []\n let i = 0\n for (i in payload) {\n const resource = payload[i]\n const attribs = resource.attributes\n const relationships = resource.relationships\n const patient = relationships.patient.data\n const patAttribs = !!patient ? patient.attributes : null\n\n const patientPhoneNumber = !!patAttribs ? patAttribs.phone_number : null\n const patientEmail = !!patAttribs ? patAttribs.contact_email : null\n\n let patientFullname = !!patAttribs ? patAttribs.full_name : null\n if (patientFullname == null || patientFullname.length == 0) {\n patientFullname = patientPhoneNumber\n }\n if (patientFullname == null || patientFullname.length == 0) {\n const supportId = !!patAttribs ? patAttribs.cognito_id.slice(0, 8) : null\n patientFullname = `Navn mangler (Support id: ${supportId})`\n }\n\n const _createdAt = !!attribs.created_at ? new Date(attribs.created_at) : null;\n const createdAt = !!_createdAt ? _createdAt.getTime() : null;\n const createdAtDate = !!_createdAt ? _createdAt.toLocaleDateString('da-DK', dateOptions) : null;\n\n const _updatedAt = !!attribs.updated_at ? new Date(attribs.updated_at) : null;\n const updatedAt = !!_updatedAt ? _updatedAt.getTime() : null;\n const updatedAtDate = !!_updatedAt ? _updatedAt.toLocaleDateString('da-DK', dateOptions) : null;\n\n const _sentAt = !!attribs.sent_at ? new Date(attribs.sent_at) : null;\n const sentAt = !!_sentAt ? _sentAt.getTime() : null;\n const sentAtDate = !!_sentAt ? _sentAt.toLocaleDateString('da-DK', dateOptions) : null;\n\n const _completedAt = !!attribs.completed_at ? new Date(attribs.completed_at) : null;\n const completedAt = !!_completedAt ? _completedAt.getTime() : null;\n const completedAtDate = !!_completedAt ? _completedAt.toLocaleDateString('da-DK', dateOptions) : null;\n\n const _resolvedAt = !!attribs.resolved_at ? new Date(attribs.resolved_at) : null;\n const resolvedAt = !!_resolvedAt ? _resolvedAt.getTime() : null;\n const resolvedAtDate = !!_resolvedAt ? _resolvedAt.toLocaleDateString('da-DK', dateOptions) : null;\n\n const _openedAt = !!attribs.opened_at ? new Date(attribs.opened_at) : null;\n const openedAt = !!_openedAt ? _openedAt.getTime() : null;\n const openedAtDate = !!_openedAt ? _openedAt.toLocaleDateString('da-DK', dateOptions) : null;\n\n const _bookmarkedAt = !!attribs.bookmarked_at ? new Date(attribs.bookmarked_at) : null;\n const bookmarkedAt = !!_bookmarkedAt ? _bookmarkedAt.getTime() : null;\n const bookmarkedAtDate = !!_bookmarkedAt ? _bookmarkedAt.toLocaleDateString('da-DK', dateOptions) : null;\n\n const _journalizedAt = !!attribs.journalized_at ? new Date(attribs.journalized_at) : null;\n const journalizedAt = !!_journalizedAt ? _journalizedAt.getTime() : null;\n const journalizedAtDate = !!_journalizedAt ? _journalizedAt.toLocaleDateString('da-DK', dateOptions) : null;\n\n const _noteLog = attribs.note_log\n const noteLog = this._parseNoteLog(_noteLog);\n\n const patientNote = attribs.patient_note ?? '';\n const maxNoteLength = 25;\n let patientNoteTruncated = patientNote.length > maxNoteLength ? `${patientNote.slice(0, maxNoteLength)}...` : patientNote;\n\n const item = {\n uuid: attribs.uuid,\n score: attribs.score,\n scoreRaw: attribs.score_raw,\n patientNote: patientNote,\n patientNoteTruncated: patientNoteTruncated,\n name: patientFullname,\n patientPhoneNumber: patientPhoneNumber,\n patientEmail: patientEmail,\n createdAt: createdAt,\n updatedAt: updatedAt,\n date: updatedAtDate,\n timestamp: updatedAt,\n isSent: attribs.is_sent,\n isOpened: attribs.is_opened,\n isCompleted: attribs.is_completed,\n isResolved: attribs.is_resolved,\n isBookmarked: attribs.is_bookmarked,\n isJournalized: attribs.is_journalized,\n createdAtDate: createdAtDate,\n updatedAtDate: updatedAtDate,\n sentAt: sentAt,\n sentAtDate: sentAtDate,\n journalizedAt: journalizedAt,\n journalizedAtDate: journalizedAtDate,\n completedAt: completedAt,\n completedAtDate: completedAtDate,\n resolvedAt: resolvedAt,\n resolvedAtDate: resolvedAtDate,\n openedAt: openedAt,\n openedAtDate: openedAtDate,\n bookmarkedAt: bookmarkedAt,\n bookmarkedAtDate: bookmarkedAtDate,\n noteLog: noteLog,\n }\n dataTableItems.push(item)\n }\n return dataTableItems\n },\n\n _parseNoteLog(payload) {\n if (!payload) {\n return []\n }\n let _dataList = []\n for (let item of payload) {\n if (!item) {\n continue\n }\n const createdAt = new Date(item.timestamp)\n const ts = createdAt.getTime();\n const prettyCreatedAt = dateUtils.formatDateToDDMMYYYYTime({ date: createdAt })\n _dataList.push({\n uuid: item.uuid,\n ts: ts,\n createdAt: createdAt,\n body: item.note,\n type: 'note',\n description: null,\n prettyCreatedAt: prettyCreatedAt,\n })\n }\n // NOTE: If you update sorting, also check (latest) note in list is as expected.\n return _dataList.sort((a, b) => b.ts - a.ts);\n },\n\n\n parseClinicalPhotoList(payload) {\n const dateOptions = { year: 'numeric', month: 'short', day: 'numeric' };\n\n const dataTableItems = []\n let i = 0\n for (i in payload) {\n const resource = payload[i]\n const attribs = resource.attributes\n const relationships = resource.relationships\n const patient = relationships.patient.data\n\n let patientPhoneNumber = attribs.patient_phone_number\n let patientFullname = attribs.patient_full_name\n let patientCognitoId = attribs.patient_cognito_id\n\n if (patient != null && patient.attributes != null) {\n let patAttribs = patient.attributes\n patientPhoneNumber = patAttribs.phone_number\n patientFullname = patAttribs.full_name\n patientCognitoId = patAttribs.cognito_id\n }\n\n let nameList = []\n if (patientFullname != null && patientFullname.length > 0) {\n nameList.push(patientFullname)\n } else if (patientPhoneNumber != null && patientPhoneNumber.length > 0) {\n nameList.push(patientPhoneNumber)\n } else if (patientCognitoId != null && patientCognitoId.length > 0) {\n nameList.push(patientCognitoId)\n }\n\n const _createdAt = !!attribs.created_at ? new Date(attribs.created_at) : null;\n const createdAt = !!_createdAt ? _createdAt.getTime() : null;\n const createdAtDate = !!_createdAt ? _createdAt.toLocaleDateString('da-DK', dateOptions) : null;\n\n const hasAnyImageReady = attribs.has_any_image_ready\n const hasAnyImagePending = attribs.has_any_image_pending\n\n let name = nameList.join(' • ')\n\n const item = {\n uuid: attribs.uuid,\n name: name,\n createdAt: createdAt,\n date: createdAtDate,\n isBookmarked: attribs.is_bookmarked,\n isJournalized: attribs.is_journalized,\n hasAnyImageReady: hasAnyImageReady,\n hasAnyImagePending: hasAnyImagePending,\n }\n dataTableItems.push(item)\n }\n return dataTableItems\n },\n\n parseConnectorLogList(payload) {\n const dateOptions = { year: 'numeric', month: 'short', day: 'numeric' };\n\n const dataTableItems = []\n let i = 0\n for (i in payload) {\n const resource = payload[i]\n const attribs = resource.attributes\n const relationships = resource.relationships\n const patient = relationships.patient.data\n\n let requestType = attribs.type\n let requestTypeName = '-'\n if (requestType == 'medical_history_completed') {\n requestTypeName = 'Helbredsskema'\n } else if (requestType = 'treatment_sent') {\n requestTypeName = 'Sendt overslag'\n } else if (requestType = 'treatment_comfirmed') {\n requestTypeName = 'Informeret samtykke'\n } else if (requestType = 'treatment_billed') {\n requestTypeName = 'Informeret samtykke (faktureret)'\n } else if (requestType = 'instruction_sent') {\n requestTypeName = 'Sendt patientbrev/-vejledning'\n } else if (requestType = 'instruction_sent_by_receipt') {\n requestTypeName = 'Sendt patientbrev/-vejledning via regning'\n }\n\n let patientFullname = null\n let patientCognitoId = null\n\n if (patient != null && patient.attributes != null) {\n let patAttribs = patient.attributes\n patientFullname = patAttribs.full_name\n patientCognitoId = patAttribs.cognito_id\n }\n\n let nameList = []\n if (patientFullname != null && patientFullname.length > 0) {\n nameList.push(patientFullname)\n } else if (patientCognitoId != null && patientCognitoId.length > 0) {\n nameList.push(patientCognitoId)\n }\n\n const _createdAt = !!attribs.created_at ? new Date(attribs.created_at) : null;\n const createdAt = !!_createdAt ? _createdAt.getTime() : null;\n const createdAtDate = !!_createdAt ? _createdAt.toLocaleDateString('da-DK', dateOptions) : null;\n\n let name = nameList.join(' • ')\n\n const item = {\n uuid: attribs.uuid,\n name: name,\n requestType: requestType,\n requestTypeName: requestTypeName,\n createdAt: createdAt,\n date: createdAtDate,\n isBookmarked: attribs.is_bookmarked,\n isRequested: attribs.is_requested,\n isDownloaded: attribs.is_downloaded,\n isImported: attribs.is_imported,\n isProcessed: attribs.is_processed,\n shouldDownload: attribs.should_download,\n shouldImport: attribs.should_import,\n }\n dataTableItems.push(item)\n }\n return dataTableItems\n },\n\n async parseDentistList({ items }) {\n const locales = \"da-DK\";\n let dentistList = []\n for (const i in items) {\n const item = items[i]\n const dentist = await this.parseDentist({ dentist: item })\n dentistList.push(dentist)\n }\n\n const dentistListSorted = dentistList.sort((a, b) => a.name.toLowerCase().localeCompare(b.name.toLowerCase(), locales))\n return dentistListSorted\n },\n\n async parseSystemInitialList({ items }) {\n const locales = \"da-DK\";\n let systemInitialList = []\n for (const i in items) {\n const item = items[i]\n const attribs = item.attributes\n const value = attribs.value\n if (!value) {\n continue\n }\n const firstname = attribs.first_name\n const name = `${firstname} ${attribs.last_name}`\n const label = !firstname ? value : `${value} (${firstname})`\n const elem = {\n value: value,\n uuid: attribs.uuid,\n name: name,\n label: label,\n }\n systemInitialList.push(elem)\n }\n const systemInitialListSorted = systemInitialList.sort((a, b) => a.value.toLowerCase().localeCompare(b.value.toLowerCase(), locales))\n return systemInitialListSorted;\n },\n\n async parseTreatmentItemCollectionMeta(meta) {\n if (!meta) {\n return null;\n }\n\n const dentistListJson = meta.dentist_list ?? []\n const dentistList = await this.parseDentistList({ items: dentistListJson })\n\n const systemInitialListJson = meta.system_initials_list ?? []\n const systemInitialList = await this.parseSystemInitialList({ items: systemInitialListJson })\n\n const primaryTreatmentGroupList = meta.primary_treatment_group_list;\n\n return {\n dentistList: dentistList,\n systemInitialList: systemInitialList,\n primaryTreatmentGroupList: primaryTreatmentGroupList,\n }\n },\n\n isNumber(value) {\n return typeof value == 'number'\n },\n\n async parseTreatmentItemCollectionList(resources) {\n const items = []\n let i = 0\n for (i in resources) {\n const resource = resources[i]\n const item = await this.parseTreatmentItemCollection(resource)\n items.push(item)\n }\n return items\n },\n\n async parseTreatmentItemCollection(resource) {\n const options = { year: 'numeric', month: 'long', day: 'numeric' };\n\n const attribs = resource.attributes\n const relationships = resource.relationships\n\n const uuid = attribs.uuid\n const cognitoId = attribs.cognito_id\n const firstname = attribs.patient_first_name\n const lastname = attribs.patient_last_name\n const birthdate = attribs.patient_birthdate\n const phonenumber = attribs.patient_phone_number\n const email = attribs.patient_email\n\n const _noteLog = attribs.note_log\n const noteLog = this._parseLog({ dataList: _noteLog, type: 'note' })\n\n const _billedAtLog = attribs.billed_at_log\n const billedAtLog = this._parseLog({ dataList: _billedAtLog, type: 'billed_at' })\n\n const _journalChangeLog = attribs.journal_change_log\n const journalChangeLog = this._parseJournalChangeLog({ dataList: _journalChangeLog })\n\n const _pipelineChangeLog = attribs.pipeline_status_log\n const pipelineChangeLog = this._parseLog({\n dataList: _pipelineChangeLog,\n type: 'change_log',\n excludeTooSimilar: true,\n })\n\n let createdAt = null\n if (!!attribs.created_at) {\n createdAt = new Date(attribs.created_at)\n }\n let bookmarkedAt = null\n if (!!attribs.bookmarked_at) {\n bookmarkedAt = new Date(attribs.bookmarked_at)\n }\n let sentAt = null\n if (!!attribs.sent_at) {\n sentAt = new Date(attribs.sent_at)\n }\n let openedAt = null\n if (!!attribs.opened_at) {\n openedAt = new Date(attribs.opened_at)\n }\n let bookedAt = null\n if (!!attribs.booked_at) {\n bookedAt = new Date(attribs.booked_at)\n }\n let confirmedAt = null\n if (!!attribs.confirmed_at) {\n confirmedAt = new Date(attribs.confirmed_at)\n }\n let completedAt = null\n if (!!attribs.completed_at) {\n completedAt = new Date(attribs.completed_at)\n }\n let billedAt = null\n if (!!attribs.billed_at) {\n billedAt = new Date(attribs.billed_at)\n }\n let smsSentAt = null\n if (!!attribs.reminder_sms_sent_at) {\n smsSentAt = new Date(attribs.reminder_sms_sent_at)\n }\n let emailSentAt = null\n if (!!attribs.reminder_email_sent_at) {\n emailSentAt = new Date(attribs.reminder_email_sent_at)\n }\n let anySentAt = emailSentAt ?? smsSentAt;\n let autoUpdateAt = null\n if (!!attribs.pipeline_status_auto_updated_at) {\n autoUpdateAt = new Date(attribs.pipeline_status_auto_updated_at)\n }\n\n const hostedPatientLink = attribs.deeplink_to_web\n const prettyDate = createdAt.toLocaleDateString('da-DK', options);\n const displayName = `${firstname} ${lastname}`\n\n const _documents = relationships.documents.data\n const documentList = await this.parsePatientDocumentList({ docs: _documents })\n\n const _treatments = relationships.treatment_items.data\n const groupedTreatmentItemList = await this.groupTreatmentItemListByType({ data: _treatments })\n\n const _clinic = relationships.clinic.data\n const clinicAttribs = _clinic.attributes\n const clinicTitle = clinicAttribs.title\n const treatmentSmsTemplates = clinicAttribs.treatment_sms_templates ?? []\n const reminderSmsTemplates = clinicAttribs.reminder_sms_templates ?? []\n const reminderEmailTemplates = clinicAttribs.reminder_email_templates ?? []\n\n const _dentist = relationships.dentist.data\n let dentistUuid = null;\n let dentistName = ''\n if (!!_dentist) {\n const dentistAttribs = _dentist.attributes\n dentistUuid = dentistAttribs.uuid;\n dentistName = `${dentistAttribs.first_name} ${dentistAttribs.last_name}`\n }\n let dentistNameRaw = ''\n if (attribs.dentist_first_name_raw) {\n dentistNameRaw += attribs.dentist_first_name_raw\n }\n if (attribs.dentist_last_name_raw) {\n dentistNameRaw += ` ${attribs.dentist_last_name_raw}`\n }\n\n const prettySentAt = dateUtils.formatDateToDDMMYYYY({ date: sentAt });\n const prettyOpenedAt = dateUtils.formatDateToDDMMYYYY({ date: openedAt });\n const prettyBookmarkedAt = dateUtils.formatDateToDDMMYYYY({ date: bookmarkedAt });\n const prettyConfirmedAt = dateUtils.formatDateToDDMMYYYY({ date: confirmedAt });\n const prettyCompletedAt = dateUtils.formatDateToDDMMYYYY({ date: completedAt });\n const prettyBookedAt = dateUtils.formatDateToDDMMYYYY({ date: bookedAt });\n const prettyBilledAt = dateUtils.formatDateToDDMMYYYY({ date: billedAt });\n const prettySmsSentAt = dateUtils.formatDateToDDMMYYYY({ date: smsSentAt });\n const prettyEmailSentAt = dateUtils.formatDateToDDMMYYYY({ date: emailSentAt });\n const prettyAnySentAt = dateUtils.formatDateToDDMMYYYY({ date: anySentAt });\n const prettyAutoUpdateAt = dateUtils.formatDateToDDMMYYYY({ date: autoUpdateAt });\n const isSmsSentToday = dateUtils.isToday(smsSentAt)\n const isEmailSentToday = dateUtils.isToday(emailSentAt)\n const isSmsSentThisWeek = dateUtils.isThisIsoWeek(smsSentAt)\n const isEmailSentThisWeek = dateUtils.isThisIsoWeek(emailSentAt)\n const isAnySentToday = isSmsSentToday || isEmailSentToday;\n const isAnySentThisWeek = isSmsSentThisWeek || isEmailSentThisWeek;\n const daysAgo = this.daysAgo(createdAt);\n\n const _action = !relationships.automated_action ? null : relationships.automated_action.data;\n const action = _action == null ? null : this._parseAutomatedAction({ item: _action })\n\n const shareLogListJson = !relationships.share_logs ? [] : relationships.share_logs.data;\n const shareLogList = this._parseShareLogList({ payload: shareLogListJson })\n\n let commonList = [];\n if (shareLogList?.length) commonList.push(...shareLogList);\n if (noteLog?.length) commonList.push(...noteLog);\n\n const sortedCommonList = commonList.sort((a, b) => (b.ts ?? 0) - (a.ts ?? 0))\n\n const searchtext = `${displayName} ${dentistName} ${dentistNameRaw} ${birthdate}`.toLowerCase()\n\n const isReminderCallAny = attribs.is_reminder_call_any\n const isReminderMessageAny = attribs.is_reminder_message_any\n const isReminderAny = isReminderCallAny || isReminderMessageAny\n\n const item = {\n date: prettyDate,\n createdAt: createdAt,\n uuid: uuid,\n cognitoId: cognitoId,\n name: displayName,\n searchtext: searchtext,\n firstname: firstname,\n lastname: lastname,\n birthdate: birthdate,\n email: email,\n phonenumber: phonenumber,\n isSent: attribs.is_sent,\n sentAt: prettySentAt,\n isReceived: attribs.is_received,\n isOpened: attribs.is_opened,\n openedAt: prettyOpenedAt,\n openedCount: attribs.opened_count,\n isBooked: attribs.is_booked,\n bookedAt: prettyBookedAt,\n isConfirmed: attribs.is_confirmed,\n confirmedAt: prettyConfirmedAt,\n isCompleted: attribs.is_completed,\n completedAt: prettyCompletedAt,\n isBilled: attribs.is_billed,\n billedAt: prettyBilledAt,\n isBookmarked: attribs.is_bookmarked,\n isReminderAny: isReminderAny,\n isReminderCallAny: isReminderCallAny,\n isReminderMessageAny: isReminderMessageAny,\n bookmarkedAt: prettyBookmarkedAt,\n isAnySentToday: isAnySentToday,\n isAnySentThisWeek: isAnySentThisWeek,\n anySentAt: prettyAnySentAt,\n isSmsSentToday: isSmsSentToday,\n smsSentAt: prettySmsSentAt,\n isEmailSentToday: isEmailSentToday,\n emailSentAt: prettyEmailSentAt,\n hostedPatientLink: hostedPatientLink,\n documentList: documentList,\n groupedTreatmentItemList: groupedTreatmentItemList,\n uuidSms: uuid,\n uuidEmail: uuid,\n uuidCall: uuid,\n amountTotal: attribs.amount_total,\n amountTotalPlanned: attribs.amount_total_planned,\n amountTotalCompleted: attribs.amount_total_completed,\n status: attribs.pipeline_status,\n daysAgo: daysAgo,\n noteLog: noteLog,\n billedAtLog: billedAtLog,\n shareLogList: shareLogList,\n commonList: sortedCommonList,\n treatmentSmsTemplates: treatmentSmsTemplates,\n reminderSmsTemplates: reminderSmsTemplates,\n reminderEmailTemplates: reminderEmailTemplates,\n dentistUuid: dentistUuid,\n dentistName: dentistName,\n clinicTitle: clinicTitle,\n systemUserInitials: attribs.system_user_initials,\n action: action,\n journalChangeLog: journalChangeLog,\n pipelineChangeLog: pipelineChangeLog,\n autoUpdateAt: prettyAutoUpdateAt,\n didChangeThisWeek: attribs.did_pipeline_status_change_this_week,\n includeAutoReminderToPatient: attribs.include_auto_reminder_message_to_patient,\n }\n return item\n },\n\n async parseTreatmentItemList(resources) {\n const items = []\n let i = 0\n for (i in resources) {\n const resource = resources[i]\n const attribs = resource.attributes\n const relationships = resource.relationships\n const _treatment = !!relationships.treatment ? relationships.treatment.data : null\n const _document = !!relationships.document ? relationships.document.data : null\n const _dentist = !!relationships.dentist ? relationships.dentist.data : null\n\n const uuid = attribs.uuid\n let createdAt = null\n if (!!attribs.created_at) {\n createdAt = new Date(attribs.created_at)\n }\n\n const treatment = await this.parseTreatmentOption({ option: _treatment })\n const treatmentGroup = await this.parseTreatmentGroupFromOption({ option: _treatment })\n const document = await this.parsePatientDocument({ doc: _document })\n const dentist = await this.parseDentist({ dentist: _dentist })\n\n const item = {\n createdAt: createdAt,\n uuid: uuid,\n title: attribs.title_da,\n document: document,\n treatment: treatment,\n group: treatmentGroup,\n dentist: dentist,\n price: attribs.price,\n type: attribs.type,\n isCompleted: attribs.is_completed,\n isBilled: attribs.is_billed,\n isPaid: attribs.is_paid,\n }\n items.push(item)\n }\n return items\n },\n\n daysAgo(date) {\n if (!date) {\n return null;\n }\n const now = new Date();\n const then = new Date(date);\n // Set both dates to midnight\n now.setHours(0, 0, 0, 0);\n then.setHours(0, 0, 0, 0);\n const timeDifference = Math.abs(now.getTime() - then.getTime());\n const daysDifference = Math.floor(timeDifference / (1000 * 60 * 60 * 24));\n return daysDifference;\n },\n\n async groupTreatmentItemListByType({ items }) {\n // Output:\n // {\n // 'documentUuid: str': {\n // precedence: int,\n // documentUuid: str\n // planned: List[Dict[str, Any]],\n // completed: List[Dict[str, Any]],\n // plannedPriceTotal: float,\n // completedPriceTotal: float,\n // },\n // ...\n // }\n const options = { year: 'numeric', month: 'long', day: 'numeric' };\n let groupedDict = {}\n for (let i in items) {\n const item = items[i]\n const attribs = item.attributes\n const relationships = item.relationships\n const treatment = relationships.treatment.data\n const document = relationships.document.data\n const uuid = attribs.uuid\n const uuidPrefix = uuid.slice(0, 6)\n const createdAt = new Date(attribs.created_at)\n const prettyDate = createdAt.toLocaleDateString('da-DK', options);\n const itemType = attribs.type;\n const documentUuid = document?.attributes.uuid ?? ''\n\n let price = attribs.price\n if (!this.isNumber(price)) {\n price = 0\n }\n let coveragePublic = attribs.coverage_public\n if (!this.isNumber(coveragePublic)) {\n coveragePublic = 0\n }\n let coverageDanmark = attribs.coverage_danmark\n if (!this.isNumber(coverageDanmark)) {\n coverageDanmark = 0\n }\n let coverageDanmarkMax = attribs.coverage_danmark_max\n if (!this.isNumber(coverageDanmarkMax)) {\n coverageDanmarkMax = 0\n }\n\n let displayImage = null\n let titleLookup = null\n let recapDescriptionLookup = null\n if (treatment !== null) {\n const treatmentAttribs = treatment.attributes\n displayImage = treatmentAttribs.display_image\n // IMPORTANT: Using raw strings during development here.\n // TODO: Use `title_lookup` etc.\n titleLookup = treatmentAttribs.title_da\n recapDescriptionLookup = treatmentAttribs.recap_description_da\n }\n let current = groupedDict[documentUuid] ?? {}\n current.documentUuid = documentUuid\n current.precedence = 0 // TODO: update\n let currentList\n if (itemType === TREATMENT_TYPE__PLANNED) {\n currentList = current.planned ?? []\n } else if (itemType === TREATMENT_TYPE__COMPLETED) {\n currentList = current.completed ?? []\n }\n currentList.push({\n uuid: uuid,\n uuidPrefix: uuidPrefix,\n date: prettyDate,\n createdAt: createdAt,\n itemType: itemType,\n isScanned: true, // NOTE: Currently hardcoded\n title: attribs.title,\n price: price,\n coveragePublic: coveragePublic,\n coverageDanmark: coverageDanmark,\n coverageDanmarkMax: coverageDanmarkMax,\n precedence: attribs.precedence,\n displayImage: displayImage,\n titleLookup: titleLookup,\n recapDescriptionLookup: recapDescriptionLookup,\n })\n if (itemType === TREATMENT_TYPE__PLANNED) {\n current.planned = currentList\n let _total = current.plannedPriceTotal ?? 0\n current.plannedPriceTotal = _total + price\n } else if (itemType === TREATMENT_TYPE__COMPLETED) {\n current.completed = currentList\n let _total = current.completedPriceTotal ?? 0\n current.completedPriceTotal = _total + price\n }\n if (current.planned === undefined) {\n current.planned = []\n }\n if (current.completed === undefined) {\n current.completed = []\n }\n if (current.plannedPriceTotal === undefined) {\n current.plannedPriceTotal = 0\n }\n if (current.completedPriceTotal === undefined) {\n current.completedPriceTotal = 0\n }\n groupedDict[documentUuid] = current\n }\n return groupedDict\n },\n\n async parsePatientDocumentList({ docs }) {\n let _documents = []\n for (let i in docs) {\n const doc = docs[i]\n const resource = await this.parsePatientDocument({ doc: doc })\n _documents.push(resource)\n }\n return _documents\n },\n\n async parsePatientDocument({ doc }) {\n const options = { year: 'numeric', month: 'long', day: 'numeric' };\n const attribs = doc.attributes\n const uuid = attribs.uuid\n const uuidPrefix = uuid.slice(0, 6)\n const issuedAt = new Date(attribs.issued_at)\n const prettyDate = issuedAt.toLocaleDateString('da-DK', options);\n const isOpened = attribs.is_opened_list\n const documentType = attribs.document_type\n const url = attribs.url\n const _options = [...PatientDocumentOptions]\n let option = _options[0]\n for (let i in _options) {\n const _option = _options[i]\n if (_option.value === documentType) {\n option = _option\n break\n }\n }\n let readableDocumentType = i18n.t(option.title)\n let resource = {\n uuid: uuid,\n uuidPrefix: uuidPrefix,\n url: url,\n date: prettyDate,\n issuedAt: issuedAt,\n isSent: true, // NOTE: Currently hardcoded on this list\n isReceived: true,\n isOpened: isOpened,\n documentType: documentType,\n readableDocumentType: readableDocumentType,\n }\n return resource\n },\n\n _parseAutomatedAction({ item }) {\n const attribs = item.attributes\n const isPending = attribs.is_pending ?? false\n const isPendingAnyAmount = attribs.is_pending_any_amount ?? isPending\n const isPrevThisWeek = attribs.is_prev_this_week\n const isBelowAmount = attribs.is_below_amount\n const actionType = attribs.action_type\n let prevRegisteredAt = null\n if (!!attribs.prev_registered_at) {\n prevRegisteredAt = new Date(attribs.prev_registered_at)\n }\n let prevScheduledAt = null\n if (!!attribs.prev_scheduled_at) {\n prevScheduledAt = new Date(attribs.prev_scheduled_at)\n }\n let nextScheduledAt = null\n if (!!attribs.next_scheduled_at) {\n nextScheduledAt = new Date(attribs.next_scheduled_at)\n }\n\n const prettyPrevRegisteredAt = dateUtils.formatDateToDDMMYYYY({ date: prevRegisteredAt });\n const prettyPrevScheduledAt = dateUtils.formatDateToDDMMYYYY({ date: prevScheduledAt });\n const prettyNextScheduledAt = dateUtils.formatDateToDDMMYYYY({ date: nextScheduledAt });\n\n let resource = {\n uuid: attribs.uuid,\n title: attribs.title,\n description: attribs.description,\n isPending: isPending,\n isPendingAnyAmount: isPendingAnyAmount,\n isPrevThisWeek: isPrevThisWeek,\n actionType: actionType,\n isBelowAmount: isBelowAmount,\n prevRegisteredAt: prettyPrevRegisteredAt,\n prevScheduledAt: prettyPrevScheduledAt,\n nextScheduledAt: prettyNextScheduledAt,\n }\n\n return resource\n },\n\n async parseTreatmentOption({ option }) {\n if (!option) {\n return null\n }\n const attribs = option.attributes\n let group = await this.parseTreatmentGroupFromOption({ option })\n let resource = {\n uuid: attribs.uuid,\n title: attribs.title_da,\n precedence: attribs.precedence ?? 0,\n group: group,\n }\n return resource\n },\n\n async parseDentist({ dentist }) {\n if (!dentist) {\n return null\n }\n const attribs = dentist.attributes\n const firstname = attribs.first_name\n const lastname = attribs.last_name\n let resource = {\n uuid: attribs.uuid,\n name: `${firstname} ${lastname}`,\n firstname: firstname,\n lastname: lastname,\n title: attribs.title,\n email: attribs.email,\n }\n return resource\n },\n\n async parseTreatmentGroupFromOption({ option }) {\n if (!option) {\n return null\n }\n const relationships = option.relationships\n const groupData = !!relationships.group ? relationships.group.data : null\n const group = await this.parseTreatmentGroup({ group: groupData })\n return group\n },\n\n async parseTreatmentGroup({ group }) {\n if (!group) {\n return null;\n }\n const attribs = group.attributes\n let resource = {\n uuid: attribs.uuid,\n title: attribs.title_da,\n precedence: attribs.precedence ?? 0,\n }\n return resource\n },\n\n async parseTreatmentGroupList({ items }) {\n if (!items) {\n return null\n }\n let groupList = []\n for (let i in items) {\n const item = items[i]\n groupList.push(this.parseTreatmentGroup({ group: item }))\n }\n return groupList\n },\n\n async groupByTreatmentOption({\n items,\n key = 'treatment',\n fallbackTitle = 'ٴ Øvrig: Uden kategori', // NOTE: See @sortprefix\n }) {\n let groupDict = {}\n for (let i in items) {\n const item = items[i]\n const category = item[key]\n const categoryUuid = !category ? 'fallback' : category.uuid\n const categoryTitle = !category ? fallbackTitle : category.title\n const categoryPrecedence = !category ? 0 : (category.precedence ?? 0)\n\n groupDict = await this._addToGroupTreatmentDict({\n item: item,\n groupDict: groupDict,\n categoryUuid: categoryUuid,\n categoryTitle: categoryTitle,\n categoryPrecedence: categoryPrecedence,\n })\n }\n let asList = []\n for (let uuid in groupDict) {\n asList.push(groupDict[uuid])\n }\n const locales = \"da-DK\";\n return asList.sort((a, b) => a.title.toLowerCase().localeCompare(b.title.toLowerCase(), locales))\n },\n\n async groupByDate({ items }) {\n let groupDict = {}\n for (let i in items) {\n const item = items[i]\n const createdAt = item.createdAt\n if (!createdAt) {\n continue;\n }\n const categoryUuid = dateUtils.formatDateToYYYYMMDD({ date: createdAt })\n const categoryTitle = dateUtils.formatDateToDDMMYYYY({ date: createdAt })\n const categoryPrecedence = 0 // TODO: Add if needed\n\n groupDict = await this._addToGroupTreatmentDict({\n item: item,\n groupDict: groupDict,\n categoryUuid: categoryUuid,\n categoryTitle: categoryTitle,\n categoryPrecedence: categoryPrecedence,\n })\n }\n let asList = []\n for (let uuid in groupDict) {\n asList.push(groupDict[uuid])\n }\n const locales = \"da-DK\";\n return asList.sort((a, b) => a.uuid.toLowerCase().localeCompare(b.uuid.toLowerCase(), locales))\n },\n\n async groupByTotalSumTreatment({ items }) {\n let groupDict = {}\n for (let i in items) {\n const item = items[i]\n const createdAt = item.createdAt\n if (!createdAt) {\n continue;\n }\n const categoryUuid = 'total'\n const categoryTitle = 'I alt'\n const categoryPrecedence = 0\n\n groupDict = await this._addToGroupTreatmentDict({\n item: item,\n groupDict: groupDict,\n categoryUuid: categoryUuid,\n categoryTitle: categoryTitle,\n categoryPrecedence: categoryPrecedence,\n })\n }\n let asList = []\n for (let uuid in groupDict) {\n asList.push(groupDict[uuid])\n }\n return asList\n },\n\n async groupByTotalSumDocument({ items }) {\n let groupDict = {}\n for (let i in items) {\n const item = items[i]\n const createdAt = item.createdAt\n if (!createdAt) {\n continue;\n }\n const categoryUuid = 'total'\n const categoryTitle = 'I alt'\n const categoryPrecedence = 0\n\n groupDict = await this._addToGroupDocumentDict({\n item: item,\n groupDict: groupDict,\n categoryUuid: categoryUuid,\n categoryTitle: categoryTitle,\n categoryPrecedence: categoryPrecedence,\n })\n }\n let asList = []\n for (let uuid in groupDict) {\n asList.push(groupDict[uuid])\n }\n return asList\n },\n\n async groupByDateFlattenValue({ items }) {\n let newList = []\n for (let i in items) {\n const item = items[i]\n newList.push(item.amountTotalPlanned)\n }\n return newList\n },\n\n async groupByDateFlattenLabel({ items }) {\n let newList = []\n for (let i = 0; i < items.length; i++) {\n const item = items[i]\n const isFirst = i === 0\n const isLast = i === items.length - 1\n if (isFirst || isLast) {\n newList.push(item.uuid)\n } else {\n newList.push('-')\n }\n }\n return newList\n },\n\n async groupByTreatmentGroup({\n items,\n key = 'group',\n fallbackTitle = 'ٴ Øvrig: Uden kategori', // NOTE: See @sortprefix\n allowSubgroup = false,\n primarySubgroupKey = 'byDentist',\n }) {\n let groupDict = {}\n for (let i in items) {\n const item = items[i]\n const category = item[key]\n const categoryUuid = !category ? 'fallback' : category.uuid\n const categoryTitle = !category ? fallbackTitle : category.title\n const categoryPrecedence = !category ? 0 : (category.precedence ?? 0)\n\n groupDict = await this._addToGroupTreatmentDict({\n item: item,\n groupDict: groupDict,\n categoryUuid: categoryUuid,\n categoryTitle: categoryTitle,\n categoryPrecedence: categoryPrecedence,\n })\n }\n\n let asList0 = []\n for (let uuid in groupDict) {\n asList0.push(groupDict[uuid])\n }\n\n let asList1 = []\n for (let j in asList0) {\n const elem = asList0[j]\n if (allowSubgroup) {\n const byDentist = await this.groupByDentist({\n items: elem.items,\n allowSubgroup: false,\n })\n elem['byDentist'] = byDentist\n elem['subgroup'] = elem[primarySubgroupKey]\n }\n asList1.push(elem)\n }\n\n const locales = \"da-DK\";\n return asList1.sort((a, b) => a.title.toLowerCase().localeCompare(b.title.toLowerCase(), locales))\n },\n\n async _addToGroupTreatmentDict({\n item,\n groupDict,\n categoryUuid,\n categoryTitle,\n categoryPrecedence,\n }) {\n let newGroupDict = groupDict\n\n const isCompleted = item.isCompleted ?? false;\n const isBilled = item.isBilled ?? false;\n const isPaid = item.isPaid ?? false;\n const amount = item.price ?? 0\n\n const curr = newGroupDict[categoryUuid] ?? {}\n let amountTotalPlanned = curr.amountTotalPlanned ?? 0\n let amountTotalCompleted = curr.amountTotalCompleted ?? 0\n let amountTotalBilled = curr.amountTotalBilled ?? 0\n let amountTotalPaid = curr.amountTotalPaid ?? 0\n\n let countPlanned = curr.countPlanned ?? 0\n let countCompleted = curr.countCompleted ?? 0\n let countBilled = curr.countBilled ?? 0\n let countPaid = curr.countPaid ?? 0\n\n amountTotalPlanned += amount;\n countPlanned += 1\n if (isCompleted === true) {\n countCompleted += 1\n amountTotalCompleted += amount\n }\n if (isBilled === true) {\n countBilled += 1\n amountTotalBilled += amount\n }\n if (isPaid === true) {\n countPaid += 1\n amountTotalPaid += amount\n }\n\n let items = curr.items ?? []\n items.push(item) // NOTE: Adds reference to components used\n\n const entry = {\n title: categoryTitle,\n uuid: categoryUuid,\n amountTotalPlanned: amountTotalPlanned,\n amountTotalCompleted: amountTotalCompleted,\n amountTotalBilled: amountTotalBilled,\n amountTotalPaid: amountTotalPaid,\n countPlanned: countPlanned,\n countCompleted: countCompleted,\n countBilled: countBilled,\n countPaid: countPaid,\n precedence: categoryPrecedence,\n items: items,\n }\n newGroupDict[categoryUuid] = entry\n return newGroupDict\n },\n\n async _addToGroupDocumentDict({\n item,\n groupDict,\n categoryUuid,\n categoryTitle,\n categoryPrecedence,\n }) {\n let newGroupDict = groupDict\n\n const curr = newGroupDict[categoryUuid] ?? {}\n let amountNew = item.amountTotal ?? 0\n let amountTotal = curr.amountTotal ?? 0\n\n let count = curr.count ?? 0\n\n amountTotal += amountNew;\n count += 1\n\n let items = curr.items ?? []\n items.push(item) // NOTE: Adds reference to components used\n\n let precedenceOrFallback = categoryPrecedence\n if (categoryPrecedence === null) {\n precedenceOrFallback = amountTotal + count\n }\n\n const entry = {\n title: categoryTitle,\n uuid: categoryUuid,\n amountTotal: amountTotal,\n count: count,\n precedence: Math.ceil(precedenceOrFallback),\n items: items,\n }\n newGroupDict[categoryUuid] = entry\n return newGroupDict\n },\n\n async groupBySystemInitial({\n items,\n allowSubgroup = false,\n fallbackTitle = 'ٴ Ukendt', // NOTE: See @sortprefix\n }) {\n let groupDict = {}\n for (let i in items) {\n const item = items[i]\n const categoryUuid = !item.systemInitial ? 'fallback' : item.systemInitial\n const categoryTitle = !item.systemInitial ? fallbackTitle : item.systemInitial\n const categoryPrecedence = null // NOTE: Infers in function below\n\n groupDict = await this._addToGroupDocumentDict({\n item: item,\n groupDict: groupDict,\n categoryUuid: categoryUuid,\n categoryTitle: categoryTitle,\n categoryPrecedence: categoryPrecedence,\n })\n }\n let asList0 = []\n for (let uuid in groupDict) {\n asList0.push(groupDict[uuid])\n }\n\n const locales = \"da-DK\";\n return asList0.sort((a, b) => a.title.toLowerCase().localeCompare(b.title.toLowerCase(), locales))\n },\n\n async groupByDentist({\n items,\n key = 'dentist',\n fallbackTitle = 'ٴ Øvrig/Ukendt', // NOTE: See @sortprefix\n allowSubgroup = false,\n primarySubgroupKey = 'byGroup',\n }) {\n let groupDict = {}\n for (let i in items) {\n const item = items[i]\n const category = item[key]\n const categoryUuid = !category ? 'fallback' : category.uuid\n const categoryTitle = !category ? fallbackTitle : (category.name ?? '')\n const categoryPrecedence = !category ? 0 : (category.precedence ?? 0)\n\n groupDict = await this._addToGroupTreatmentDict({\n item: item,\n groupDict: groupDict,\n categoryUuid: categoryUuid,\n categoryTitle: categoryTitle,\n categoryPrecedence: categoryPrecedence,\n })\n }\n let asList0 = []\n for (let uuid in groupDict) {\n asList0.push(groupDict[uuid])\n }\n\n let asList1 = []\n for (let j in asList0) {\n const elem = asList0[j]\n if (allowSubgroup) {\n const byGroup = await this.groupByTreatmentGroup({\n items: elem.items,\n allowSubgroup: false,\n })\n elem['byGroup'] = byGroup\n elem['subgroup'] = elem[primarySubgroupKey]\n }\n asList1.push(elem)\n }\n\n const locales = \"da-DK\";\n return asList1.sort((a, b) => a.title.toLowerCase().localeCompare(b.title.toLowerCase(), locales))\n },\n\n _parseLog({ dataList, type, excludeTooSimilar = false }) {\n if (!dataList) {\n return []\n }\n let newList = []\n let _similarityStrList = []\n for (let item of dataList) {\n if (!item) {\n continue\n }\n if (!item.timestamp) {\n continue\n }\n const timestamp = new Date(item.timestamp)\n const ts = timestamp.getTime()\n const prettyCreatedAt = dateUtils.formatDateToDDMMYYYYTime({ date: timestamp });\n const title = item.title\n const subtitle = item.subtitle\n const description = item.recap_description\n const body = item.note\n const similarityStr = `${prettyCreatedAt}:${title}:${subtitle}:${description}`\n if (excludeTooSimilar && _similarityStrList.includes(similarityStr)) {\n continue\n }\n const elem = {\n uuid: item.uuid,\n timestamp: timestamp,\n ts: ts,\n type: type,\n body: body,\n prettyCreatedAt: prettyCreatedAt,\n title: title,\n subtitle: subtitle,\n description: description,\n }\n newList.push(elem)\n _similarityStrList.push(similarityStr)\n }\n return newList.sort((a, b) => b.ts - a.ts);\n },\n\n _parseJournalChangeLog({ dataList, excludeTooSimilar = true }) {\n if (!dataList) {\n return []\n }\n let newList = []\n let _similarityStrList = []\n for (let item of dataList) {\n if (!item) {\n continue\n }\n if (!item.timestamp) {\n continue\n }\n const timestamp = new Date(item.timestamp)\n const ts = timestamp.getTime()\n const prettyCreatedAt = dateUtils.formatDateToDDMMYYYYTime({ date: timestamp });\n const title = item.title\n const subtitle = item.subtitle\n const description = item.recap_description\n const similarityStr = `${prettyCreatedAt}:${title}:${subtitle}:${description}`\n if (excludeTooSimilar && _similarityStrList.includes(similarityStr)) {\n continue\n }\n const elem = {\n uuid: item.uuid,\n timestamp: timestamp,\n ts: ts,\n type: item.type,\n prettyCreatedAt: prettyCreatedAt,\n title: title,\n subtitle: subtitle,\n description: description,\n }\n newList.push(elem)\n _similarityStrList.push(similarityStr)\n }\n return newList.sort((a, b) => b.ts - a.ts);\n },\n}\n\nexport default parserUtils\n\nfunction isValidDate(d) {\n return d instanceof Date && !isNaN(d);\n}"],"sourceRoot":""}