From 7ddb14accc1fa640ab5a728fb8d7d0dbc1dce38f Mon Sep 17 00:00:00 2001 From: Munawwirul Jamal Date: Mon, 13 Oct 2025 16:38:23 +0700 Subject: [PATCH 01/35] dev: hotfix, added userQueryCRUD --- app/composables/useQueryCRUD.ts | 54 +++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 app/composables/useQueryCRUD.ts diff --git a/app/composables/useQueryCRUD.ts b/app/composables/useQueryCRUD.ts new file mode 100644 index 00000000..a5c532b7 --- /dev/null +++ b/app/composables/useQueryCRUD.ts @@ -0,0 +1,54 @@ +import { computed } from 'vue' +import { useRoute, useRouter } from 'vue-router' + +export function useQueryCRUDMode(key: string = 'mode') { + const route = useRoute() + const router = useRouter() + + type ModeType = 'list' | 'entry' + const mode = useState('route-query-' + key, () => 'list') + const modeSrc = computed({ + get: () => (route.query[key] && route.query[key] === 'entry' ? 'entry' : 'list'), + set: (val) => { + mode.value = val + router.push({ + path: route.path, + query: { + ...route.query, + [key]: val, + }, + }) + }, + }) + + const goToEntry = () => { + modeSrc.value = 'entry' + } + const backToList = () => { + modeSrc.value = 'list' + } + + return { mode, goToEntry, backToList } +} + +export function useQueryCRUDRecordId(key: string = 'record-id') { + const route = useRoute() + const router = useRouter() + + const recordId = useState('route-query-' + key, () => '') + computed({ + get: () => route.query[key], + set: (val: string) => { + recordId.value = val + router.replace({ + path: route.path, + query: { + ...route.query, + [key]: val, + }, + }) + }, + }) + + return { recordId } +} From 39af6052e729186ae9eae74d435352c178873110 Mon Sep 17 00:00:00 2001 From: Andrian Roshandy Date: Mon, 20 Oct 2025 11:22:54 +0700 Subject: [PATCH 02/35] feat/device-order-58: wip --- .../device-order-item/list-entry.config.ts | 36 +++++ .../app/device-order-item/list-entry.vue | 13 ++ .../app/device-order/entry-form.vue | 6 + .../app/device-order/list.config.ts | 42 +++++ app/components/app/device-order/list.vue | 35 +++++ app/components/content/device-order/entry.vue | 37 +++++ app/components/content/device-order/list.vue | 145 ++++++++++++++++++ app/components/content/device-order/main.vue | 12 ++ app/handlers/device-order-item.handler.ts | 24 +++ app/handlers/device-order.handler.ts | 24 +++ app/schemas/device-order.schema.ts | 12 ++ app/services/device-order-item.service.ts | 26 ++++ app/services/device-order.service.ts | 26 ++++ 13 files changed, 438 insertions(+) create mode 100644 app/components/app/device-order-item/list-entry.config.ts create mode 100644 app/components/app/device-order-item/list-entry.vue create mode 100644 app/components/app/device-order/entry-form.vue create mode 100644 app/components/app/device-order/list.config.ts create mode 100644 app/components/app/device-order/list.vue create mode 100644 app/components/content/device-order/entry.vue create mode 100644 app/components/content/device-order/list.vue create mode 100644 app/components/content/device-order/main.vue create mode 100644 app/handlers/device-order-item.handler.ts create mode 100644 app/handlers/device-order.handler.ts create mode 100644 app/schemas/device-order.schema.ts create mode 100644 app/services/device-order-item.service.ts create mode 100644 app/services/device-order.service.ts diff --git a/app/components/app/device-order-item/list-entry.config.ts b/app/components/app/device-order-item/list-entry.config.ts new file mode 100644 index 00000000..f2f3ef86 --- /dev/null +++ b/app/components/app/device-order-item/list-entry.config.ts @@ -0,0 +1,36 @@ +import { defineAsyncComponent } from 'vue' +import type { Config } from '~/components/pub/my-ui/data-table' + + +const action = defineAsyncComponent(() => import('~/components/pub/my-ui/data/dropdown-action-ud.vue')) + +export const config: Config = { + cols: [{}, {}, { width: 50 }], + headers: [[{ label: 'Nama' }, { label: 'Jumlah' }, { label: '' }]], + keys: ['name', 'count', 'action'], + delKeyNames: [ + { key: 'name', label: 'Nama' }, + { key: 'count', label: 'Jumlah' }, + ], + skeletonSize: 10 + // funcParsed: { + // parent: (rec: unknown): unknown => { + // const recX = rec as SmallDetailDto + // return recX.parent?.name || '-' + // }, + // }, + // funcComponent: { + // action(rec: object, idx: any) { + // const res: RecComponent = { + // idx, + // rec: rec as object, + // component: action, + // props: { + // size: 'sm', + // }, + // } + // return res + // }, + // } +} + diff --git a/app/components/app/device-order-item/list-entry.vue b/app/components/app/device-order-item/list-entry.vue new file mode 100644 index 00000000..26f6691d --- /dev/null +++ b/app/components/app/device-order-item/list-entry.vue @@ -0,0 +1,13 @@ + + + diff --git a/app/components/app/device-order/entry-form.vue b/app/components/app/device-order/entry-form.vue new file mode 100644 index 00000000..bea2b6eb --- /dev/null +++ b/app/components/app/device-order/entry-form.vue @@ -0,0 +1,6 @@ + + + diff --git a/app/components/app/device-order/list.config.ts b/app/components/app/device-order/list.config.ts new file mode 100644 index 00000000..7580c576 --- /dev/null +++ b/app/components/app/device-order/list.config.ts @@ -0,0 +1,42 @@ +import type { Config } from '~/components/pub/my-ui/data-table' +import type { DeviceOrder } from '~/models/device-order' +import { defineAsyncComponent } from 'vue' + +const action = defineAsyncComponent(() => import('~/components/pub/my-ui/data/dropdown-action-ud.vue')) + +export const config: Config = { + cols: [{ width: 120 }, { }, { }, { width: 50 }], + headers: [[{ label: 'Tanggal' }, { label: 'DPJP' }, { label: 'Alat Kesehatan' }, { label: '' }]], + keys: ['createdAt', 'encounter.doctor.person.name', 'items', 'action'], + delKeyNames: [ + { key: 'code', label: 'Kode' }, + { key: 'name', label: 'Nama' }, + ], + skeletonSize: 10, + htmls: { + items: (rec: unknown): unknown => { + const recX = rec as DeviceOrder + return recX.items?.length || 0 + }, + } + // funcParsed: { + // parent: (rec: unknown): unknown => { + // const recX = rec as SmallDetailDto + // return recX.parent?.name || '-' + // }, + // }, + // funcComponent: { + // action(rec: object, idx: any) { + // const res: RecComponent = { + // idx, + // rec: rec as object, + // component: action, + // props: { + // size: 'sm', + // }, + // } + // return res + // }, + // } +} + diff --git a/app/components/app/device-order/list.vue b/app/components/app/device-order/list.vue new file mode 100644 index 00000000..37b24ea3 --- /dev/null +++ b/app/components/app/device-order/list.vue @@ -0,0 +1,35 @@ + + + diff --git a/app/components/content/device-order/entry.vue b/app/components/content/device-order/entry.vue new file mode 100644 index 00000000..6d76d685 --- /dev/null +++ b/app/components/content/device-order/entry.vue @@ -0,0 +1,37 @@ + + + diff --git a/app/components/content/device-order/list.vue b/app/components/content/device-order/list.vue new file mode 100644 index 00000000..e62a2fbd --- /dev/null +++ b/app/components/content/device-order/list.vue @@ -0,0 +1,145 @@ + + + diff --git a/app/components/content/device-order/main.vue b/app/components/content/device-order/main.vue new file mode 100644 index 00000000..ae5a9ca8 --- /dev/null +++ b/app/components/content/device-order/main.vue @@ -0,0 +1,12 @@ + + + diff --git a/app/handlers/device-order-item.handler.ts b/app/handlers/device-order-item.handler.ts new file mode 100644 index 00000000..b1df996b --- /dev/null +++ b/app/handlers/device-order-item.handler.ts @@ -0,0 +1,24 @@ +// Handlers +import { genCrudHandler } from '~/handlers/_handler' + +// Services +import { create, update, remove } from '~/services/device-order-item.service' + +export const { + recId, + recAction, + recItem, + isReadonly, + isProcessing, + isFormEntryDialogOpen, + isRecordConfirmationOpen, + onResetState, + handleActionSave, + handleActionEdit, + handleActionRemove, + handleCancelForm, +} = genCrudHandler({ + create, + update, + remove, +}) diff --git a/app/handlers/device-order.handler.ts b/app/handlers/device-order.handler.ts new file mode 100644 index 00000000..b1df996b --- /dev/null +++ b/app/handlers/device-order.handler.ts @@ -0,0 +1,24 @@ +// Handlers +import { genCrudHandler } from '~/handlers/_handler' + +// Services +import { create, update, remove } from '~/services/device-order-item.service' + +export const { + recId, + recAction, + recItem, + isReadonly, + isProcessing, + isFormEntryDialogOpen, + isRecordConfirmationOpen, + onResetState, + handleActionSave, + handleActionEdit, + handleActionRemove, + handleCancelForm, +} = genCrudHandler({ + create, + update, + remove, +}) diff --git a/app/schemas/device-order.schema.ts b/app/schemas/device-order.schema.ts new file mode 100644 index 00000000..b0c2a56c --- /dev/null +++ b/app/schemas/device-order.schema.ts @@ -0,0 +1,12 @@ +import { z } from 'zod' +import type { DeviceOrder } from '~/models/device-order' + +const DeviceOrderSchema = z.object({ + encounter_id: z.number({ required_error: 'Kode harus diisi' }), + doctor_id: z.number({ required_error: 'Kode harus diisi' }), +}) + +type DeviceOrderFormData = z.infer & Partial + +export { DeviceOrderSchema } +export type { DeviceOrderFormData } diff --git a/app/services/device-order-item.service.ts b/app/services/device-order-item.service.ts new file mode 100644 index 00000000..33b92b8c --- /dev/null +++ b/app/services/device-order-item.service.ts @@ -0,0 +1,26 @@ +// Base +import * as base from './_crud-base' + +const path = '/api/v1/device-order-item' +const name = 'device-order-item' + +export function create(data: any) { + console.log('service create', data) + return base.create(path, data, name) +} + +export function getList(params: any = null) { + return base.getList(path, params, name) +} + +export function getDetail(id: number | string) { + return base.getDetail(path, id, name) +} + +export function update(id: number | string, data: any) { + return base.update(path, id, data, name) +} + +export function remove(id: number | string) { + return base.remove(path, id, name) +} diff --git a/app/services/device-order.service.ts b/app/services/device-order.service.ts new file mode 100644 index 00000000..b8d5372c --- /dev/null +++ b/app/services/device-order.service.ts @@ -0,0 +1,26 @@ +// Base +import * as base from './_crud-base' + +const path = '/api/v1/device-order' +const name = 'device-order' + +export function create(data: any) { + console.log('service create', data) + return base.create(path, data, name) +} + +export function getList(params: any = null) { + return base.getList(path, params, name) +} + +export function getDetail(id: number | string) { + return base.getDetail(path, id, name) +} + +export function update(id: number | string, data: any) { + return base.update(path, id, data, name) +} + +export function remove(id: number | string) { + return base.remove(path, id, name) +} From 7f3fe813c547c6fdc58a0194827aca885d49a344 Mon Sep 17 00:00:00 2001 From: Andrian Roshandy Date: Thu, 23 Oct 2025 14:09:01 +0700 Subject: [PATCH 03/35] feat/device-order: wip --- app/components/content/device-order/list.vue | 24 ++++++++++++++------ app/components/content/encounter/process.vue | 3 ++- app/handlers/device-order.handler.ts | 5 ++-- app/services/device-order-item.service.ts | 1 - 4 files changed, 22 insertions(+), 11 deletions(-) diff --git a/app/components/content/device-order/list.vue b/app/components/content/device-order/list.vue index e62a2fbd..8c53f244 100644 --- a/app/components/content/device-order/list.vue +++ b/app/components/content/device-order/list.vue @@ -32,8 +32,15 @@ import { handleCancelForm, } from '~/handlers/device-order.handler' -// Services +// import { getList } from '~/services/device-order.service' +import type { Encounter } from '~/models/encounter' + +// Props +interface Props { + encounter: Encounter +} +const props = defineProps() const route = useRoute() const title = ref('') @@ -57,7 +64,7 @@ const { sort: 'createdAt:asc', 'page-number': params['page-number'] || 0, 'page-size': params['page-size'] || 10, - includes: 'parent,childrens', + includes: 'encounter', }) return { success: result.success || false, body: result.body || {} } }, @@ -82,11 +89,14 @@ const headerPrep: HeaderPrep = { label: 'Tambah', icon: 'i-lucide-plus', onClick: async () => { - recItem.value = null - recId.value = 0 - isReadonly.value = false - // await handleActionSave(recItem, getMyList, () => {}, () => {}) - goToEntry() + const data = { + encounter_id: props.encounter.id, + } + const dateResp = await handleActionSave(data, getMyList, () => {}, () => {}) + if (dateResp.success) { + const currentData = dateResp.body.data || [] + // goToEntry() + } }, }, } diff --git a/app/components/content/encounter/process.vue b/app/components/content/encounter/process.vue index 6fc620b5..d4279504 100644 --- a/app/components/content/encounter/process.vue +++ b/app/components/content/encounter/process.vue @@ -17,6 +17,7 @@ import EarlyMedicalAssesmentList from '~/components/content/soapi/entry.vue' // import AssesmentFunctionList from '~/components/content/assesment-function/list.vue' import PrescriptionList from '~/components/content/prescription/list.vue' import EarlyMedicalRehabList from '~/components/content/soapi/entry.vue' +import DeviceOrder from '~/components/content/device-order/main.vue' import Consultation from '~/components/content/consultation/list.vue' const route = useRoute() @@ -49,7 +50,7 @@ const tabs: TabItem[] = [ { value: 'consent', label: 'General Consent' }, { value: 'patient-note', label: 'CPRJ' }, { value: 'prescription', label: 'Order Obat', component: PrescriptionList }, - { value: 'device', label: 'Order Alkes' }, + { value: 'device-order', label: 'Order Alkes', component: DeviceOrder, props: { encounter: data } }, { value: 'mcu-radiology', label: 'Order Radiologi' }, { value: 'mcu-lab-pc', label: 'Order Lab PK' }, { value: 'mcu-lab-micro', label: 'Order Lab Mikro' }, diff --git a/app/handlers/device-order.handler.ts b/app/handlers/device-order.handler.ts index b1df996b..25529894 100644 --- a/app/handlers/device-order.handler.ts +++ b/app/handlers/device-order.handler.ts @@ -1,8 +1,9 @@ // Handlers import { genCrudHandler } from '~/handlers/_handler' +import type { DeviceOrder, CreateDto } from '~/models/device-order' // Services -import { create, update, remove } from '~/services/device-order-item.service' +import { create, update, remove } from '~/services/device-order.service' export const { recId, @@ -17,7 +18,7 @@ export const { handleActionEdit, handleActionRemove, handleCancelForm, -} = genCrudHandler({ +} = genCrudHandler({ create, update, remove, diff --git a/app/services/device-order-item.service.ts b/app/services/device-order-item.service.ts index 33b92b8c..b2eab0f4 100644 --- a/app/services/device-order-item.service.ts +++ b/app/services/device-order-item.service.ts @@ -5,7 +5,6 @@ const path = '/api/v1/device-order-item' const name = 'device-order-item' export function create(data: any) { - console.log('service create', data) return base.create(path, data, name) } From fc308809b848512a664659a51475e634e08f06f4 Mon Sep 17 00:00:00 2001 From: hasyim_kai Date: Wed, 29 Oct 2025 14:57:19 +0700 Subject: [PATCH 04/35] Feat: add UI Rehab Medik > Proses > Resume --- .../app/resume/_common/select-arrangement.vue | 72 +++++++ .../app/resume/_common/select-date.vue | 121 ++++++++++++ .../app/resume/_common/select-death-cause.vue | 71 +++++++ .../app/resume/_common/select-faskes.vue | 70 +++++++ .../_common/select-primary-diagnosis.vue | 70 +++++++ .../_common/select-secondary-diagnosis.vue | 71 +++++++ app/components/app/resume/add.vue | 185 ++++++++++++++++++ app/components/app/resume/list.cfg.ts | 93 +++++++++ app/components/app/resume/list.vue | 43 ++++ app/components/content/encounter/process.vue | 3 +- app/components/content/resume/add.vue | 104 ++++++++++ app/components/content/resume/list.vue | 151 ++++++++++++++ .../pub/my-ui/form/text-area-input.vue | 86 ++++++++ .../pub/my-ui/nav-footer/ba-dr-su.vue | 3 +- app/pages/(features)/resume/add.vue | 41 ++++ app/schemas/resume.schema.ts | 42 ++++ 16 files changed, 1224 insertions(+), 2 deletions(-) create mode 100644 app/components/app/resume/_common/select-arrangement.vue create mode 100644 app/components/app/resume/_common/select-date.vue create mode 100644 app/components/app/resume/_common/select-death-cause.vue create mode 100644 app/components/app/resume/_common/select-faskes.vue create mode 100644 app/components/app/resume/_common/select-primary-diagnosis.vue create mode 100644 app/components/app/resume/_common/select-secondary-diagnosis.vue create mode 100644 app/components/app/resume/add.vue create mode 100644 app/components/app/resume/list.cfg.ts create mode 100644 app/components/app/resume/list.vue create mode 100644 app/components/content/resume/add.vue create mode 100644 app/components/content/resume/list.vue create mode 100644 app/components/pub/my-ui/form/text-area-input.vue create mode 100644 app/pages/(features)/resume/add.vue create mode 100644 app/schemas/resume.schema.ts diff --git a/app/components/app/resume/_common/select-arrangement.vue b/app/components/app/resume/_common/select-arrangement.vue new file mode 100644 index 00000000..9a945d44 --- /dev/null +++ b/app/components/app/resume/_common/select-arrangement.vue @@ -0,0 +1,72 @@ + + + diff --git a/app/components/app/resume/_common/select-date.vue b/app/components/app/resume/_common/select-date.vue new file mode 100644 index 00000000..74245e7e --- /dev/null +++ b/app/components/app/resume/_common/select-date.vue @@ -0,0 +1,121 @@ + + + diff --git a/app/components/app/resume/_common/select-death-cause.vue b/app/components/app/resume/_common/select-death-cause.vue new file mode 100644 index 00000000..a155b139 --- /dev/null +++ b/app/components/app/resume/_common/select-death-cause.vue @@ -0,0 +1,71 @@ + + + diff --git a/app/components/app/resume/_common/select-faskes.vue b/app/components/app/resume/_common/select-faskes.vue new file mode 100644 index 00000000..0852195b --- /dev/null +++ b/app/components/app/resume/_common/select-faskes.vue @@ -0,0 +1,70 @@ + + + diff --git a/app/components/app/resume/_common/select-primary-diagnosis.vue b/app/components/app/resume/_common/select-primary-diagnosis.vue new file mode 100644 index 00000000..0852195b --- /dev/null +++ b/app/components/app/resume/_common/select-primary-diagnosis.vue @@ -0,0 +1,70 @@ + + + diff --git a/app/components/app/resume/_common/select-secondary-diagnosis.vue b/app/components/app/resume/_common/select-secondary-diagnosis.vue new file mode 100644 index 00000000..a155b139 --- /dev/null +++ b/app/components/app/resume/_common/select-secondary-diagnosis.vue @@ -0,0 +1,71 @@ + + + diff --git a/app/components/app/resume/add.vue b/app/components/app/resume/add.vue new file mode 100644 index 00000000..2e12f872 --- /dev/null +++ b/app/components/app/resume/add.vue @@ -0,0 +1,185 @@ + + + diff --git a/app/components/app/resume/list.cfg.ts b/app/components/app/resume/list.cfg.ts new file mode 100644 index 00000000..38f8f5d7 --- /dev/null +++ b/app/components/app/resume/list.cfg.ts @@ -0,0 +1,93 @@ +import type { Config } from '~/components/pub/my-ui/data-table' +import type { Patient } from '~/models/patient' +import { defineAsyncComponent } from 'vue' +import { educationCodes, genderCodes } from '~/lib/constants' +import { calculateAge } from '~/lib/utils' + +const action = defineAsyncComponent(() => import('~/components/pub/my-ui/data/dropdown-action-dud.vue')) + +export const config: Config = { + cols: [{}, {}, {}, {}, {width: 3},], + + headers: [ + [ + { label: 'Tgl Rencana Kontrol' }, + { label: 'Spesialis/Sub Spesialis' }, + { label: 'DPJP' }, + { label: 'Status SEP' }, + { label: 'Action' }, + ], + ], + + keys: ['birth_date', 'number', 'person.name', 'birth_date', 'action'], + + delKeyNames: [ + { key: 'code', label: 'Kode' }, + { key: 'name', label: 'Nama' }, + ], + + parses: { + patientId: (rec: unknown): unknown => { + const patient = rec as Patient + return patient.number + }, + identity_number: (rec: unknown): unknown => { + const { person } = rec as Patient + + if (person.nationality == 'WNA') { + return person.passportNumber + } + + return person.residentIdentityNumber || '-' + }, + birth_date: (rec: unknown): unknown => { + const { person } = rec as Patient + + if (typeof person.birthDate == 'object' && person.birthDate) { + return (person.birthDate as Date).toLocaleDateString('id-ID') + } else if (typeof person.birthDate == 'string') { + return (person.birthDate as string).substring(0, 10) + } + return person.birthDate + }, + patient_age: (rec: unknown): unknown => { + const { person } = rec as Patient + return calculateAge(person.birthDate) + }, + gender: (rec: unknown): unknown => { + const { person } = rec as Patient + + if (typeof person.gender_code == 'number' && person.gender_code >= 0) { + return person.gender_code + } else if (typeof person.gender_code === 'string' && person.gender_code) { + return genderCodes[person.gender_code] || '-' + } + return '-' + }, + education: (rec: unknown): unknown => { + const { person } = rec as Patient + if (typeof person.education_code == 'number' && person.education_code >= 0) { + return person.education_code + } else if (typeof person.education_code === 'string' && person.education_code) { + return educationCodes[person.education_code] || '-' + } + return '-' + }, + }, + + components: { + action(rec, idx) { + return { + idx, + rec: rec as object, + component: action, + } + }, + }, + + htmls: { + patient_address(_rec) { + return '-' + }, + }, +} diff --git a/app/components/app/resume/list.vue b/app/components/app/resume/list.vue new file mode 100644 index 00000000..c4c101e5 --- /dev/null +++ b/app/components/app/resume/list.vue @@ -0,0 +1,43 @@ + + + diff --git a/app/components/content/encounter/process.vue b/app/components/content/encounter/process.vue index 71c7fe3d..9b6308f2 100644 --- a/app/components/content/encounter/process.vue +++ b/app/components/content/encounter/process.vue @@ -16,6 +16,7 @@ import EarlyMedicalAssesmentList from '~/components/content/soapi/entry.vue' import EarlyMedicalRehabList from '~/components/content/soapi/entry.vue' import PrescriptionList from '~/components/content/prescription/list.vue' import Consultation from '~/components/content/consultation/list.vue' +import ResumeList from '~/components/content/resume/list.vue' const route = useRoute() const router = useRouter() @@ -58,7 +59,7 @@ const tabs: TabItem[] = [ { value: 'medical-action', label: 'Order Ruang Tindakan' }, { value: 'mcu-result', label: 'Hasil Penunjang' }, { value: 'consultation', label: 'Konsultasi', component: Consultation, props: { encounter: data } }, - { value: 'resume', label: 'Resume' }, + { value: 'resume', label: 'Resume', component: ResumeList, props: { encounter: data } }, { value: 'control', label: 'Surat Kontrol' }, { value: 'screening', label: 'Skrinning MPP' }, { value: 'supporting-document', label: 'Upload Dokumen Pendukung' }, diff --git a/app/components/content/resume/add.vue b/app/components/content/resume/add.vue new file mode 100644 index 00000000..6df169c6 --- /dev/null +++ b/app/components/content/resume/add.vue @@ -0,0 +1,104 @@ + + + diff --git a/app/components/content/resume/list.vue b/app/components/content/resume/list.vue new file mode 100644 index 00000000..5c5e3658 --- /dev/null +++ b/app/components/content/resume/list.vue @@ -0,0 +1,151 @@ + + + \ No newline at end of file diff --git a/app/components/pub/my-ui/form/text-area-input.vue b/app/components/pub/my-ui/form/text-area-input.vue new file mode 100644 index 00000000..7747e727 --- /dev/null +++ b/app/components/pub/my-ui/form/text-area-input.vue @@ -0,0 +1,86 @@ + + +