diff --git a/src/boot/keyShortcut.js b/src/boot/keyShortcut.js
index 5afb5b74a..6da06c8bf 100644
--- a/src/boot/keyShortcut.js
+++ b/src/boot/keyShortcut.js
@@ -1,6 +1,6 @@
 export default {
-    mounted: function (el, binding) {
-        const shortcut = binding.value ?? '+';
+    mounted(el, binding) {
+        const shortcut = binding.value || '+';
 
         const { key, ctrl, alt, callback } =
             typeof shortcut === 'string'
@@ -8,25 +8,24 @@ export default {
                       key: shortcut,
                       ctrl: true,
                       alt: true,
-                      callback: () =>
-                          document
-                              .querySelector(`button[shortcut="${shortcut}"]`)
-                              ?.click(),
+                      callback: () => el?.click(),
                   }
                 : binding.value;
 
+        if (!el.hasAttribute('shortcut')) {
+            el.setAttribute('shortcut', key);
+        }
+
         const handleKeydown = (event) => {
             if (event.key === key && (!ctrl || event.ctrlKey) && (!alt || event.altKey)) {
                 callback();
             }
         };
 
-        // Attach the event listener to the window
         window.addEventListener('keydown', handleKeydown);
-
         el._handleKeydown = handleKeydown;
     },
-    unmounted: function (el) {
+    unmounted(el) {
         if (el._handleKeydown) {
             window.removeEventListener('keydown', el._handleKeydown);
         }
diff --git a/src/components/ItemsFilterPanel.vue b/src/components/ItemsFilterPanel.vue
index dc2a34435..48f607a30 100644
--- a/src/components/ItemsFilterPanel.vue
+++ b/src/components/ItemsFilterPanel.vue
@@ -282,7 +282,7 @@ const setCategoryList = (data) => {
             <QItem class="q-mt-lg">
                 <QBtn
                     icon="add_circle"
-                    shortcut="+"
+                    v-shortcut="'+'"
                     flat
                     class="fill-icon-on-hover q-px-xs"
                     color="primary"
diff --git a/src/components/VnTable/VnTable.vue b/src/components/VnTable/VnTable.vue
index 185d41ebb..04b7c0a46 100644
--- a/src/components/VnTable/VnTable.vue
+++ b/src/components/VnTable/VnTable.vue
@@ -629,7 +629,7 @@ function handleSelection({ evt, added, rows: selectedRows }, rows) {
                     size="md"
                     round
                     flat
-                    shortcut="+"
+                    v-shortcut="'+'"
                     :disabled="!disabledAttr"
                 />
                 <QTooltip>
@@ -647,7 +647,7 @@ function handleSelection({ evt, added, rows: selectedRows }, rows) {
             color="primary"
             fab
             icon="add"
-            shortcut="+"
+            v-shortcut="'+'"
             data-cy="vnTableCreateBtn"
         />
         <QTooltip self="top right">
diff --git a/src/components/common/VnDmsList.vue b/src/components/common/VnDmsList.vue
index 59a4f9f90..424781a26 100644
--- a/src/components/common/VnDmsList.vue
+++ b/src/components/common/VnDmsList.vue
@@ -413,7 +413,7 @@ defineExpose({
             fab
             color="primary"
             icon="add"
-            shortcut="+"
+            v-shortcut
             @click="showFormDialog()"
             class="fill-icon"
         >
diff --git a/src/layouts/MainLayout.vue b/src/layouts/MainLayout.vue
index 2a84e5aa1..3ad1c79bc 100644
--- a/src/layouts/MainLayout.vue
+++ b/src/layouts/MainLayout.vue
@@ -2,7 +2,7 @@
 import Navbar from 'src/components/NavBar.vue';
 </script>
 <template>
-    <QLayout view="hHh LpR fFf" v-shortcut>
+    <QLayout view="hHh LpR fFf">
         <Navbar />
         <RouterView></RouterView>
         <QFooter v-if="$q.platform.is.mobile"></QFooter>
diff --git a/src/pages/Account/Card/AccountMailAlias.vue b/src/pages/Account/Card/AccountMailAlias.vue
index efd2b481b..54798d6ab 100644
--- a/src/pages/Account/Card/AccountMailAlias.vue
+++ b/src/pages/Account/Card/AccountMailAlias.vue
@@ -86,7 +86,7 @@ watch(
     () => route.params.id,
     () => {
         getAccountData();
-    }
+    },
 );
 
 onMounted(async () => await getAccountData(false));
@@ -130,7 +130,8 @@ onMounted(async () => await getAccountData(false));
                                             openConfirmationModal(
                                                 t('User will be removed from alias'),
                                                 t('¿Seguro que quieres continuar?'),
-                                                () => deleteMailAlias(row, rows, rowIndex)
+                                                () =>
+                                                    deleteMailAlias(row, rows, rowIndex),
                                             )
                                         "
                                     >
@@ -157,7 +158,7 @@ onMounted(async () => await getAccountData(false));
                 icon="add"
                 color="primary"
                 @click="openCreateMailAliasForm()"
-                shortcut="+"
+                v-shortcut="'+'"
             >
                 <QTooltip>{{ t('warehouses.add') }}</QTooltip>
             </QBtn>
diff --git a/src/pages/Account/Role/Card/SubRoles.vue b/src/pages/Account/Role/Card/SubRoles.vue
index 6cac94667..d1a146375 100644
--- a/src/pages/Account/Role/Card/SubRoles.vue
+++ b/src/pages/Account/Role/Card/SubRoles.vue
@@ -63,7 +63,7 @@ watch(
         store.url = urlPath.value;
         store.filter = filter.value;
         fetchSubRoles();
-    }
+    },
 );
 
 const fetchSubRoles = () => paginateRef.value.fetch();
@@ -109,7 +109,7 @@ const redirectToRoleSummary = (id) =>
                                             openConfirmationModal(
                                                 t('El rol va a ser eliminado'),
                                                 t('¿Seguro que quieres continuar?'),
-                                                () => deleteSubRole(row, rows, rowIndex)
+                                                () => deleteSubRole(row, rows, rowIndex),
                                             )
                                         "
                                     >
@@ -131,7 +131,7 @@ const redirectToRoleSummary = (id) =>
             <QBtn
                 fab
                 icon="add"
-                shortcut="+"
+                v-shortcut="'+'"
                 color="primary"
                 @click="openCreateSubRoleForm()"
             >
diff --git a/src/pages/Claim/Card/ClaimLines.vue b/src/pages/Claim/Card/ClaimLines.vue
index 7c545b15b..27d614049 100644
--- a/src/pages/Claim/Card/ClaimLines.vue
+++ b/src/pages/Claim/Card/ClaimLines.vue
@@ -57,7 +57,6 @@ function onFetch(rows, newRows) {
         const price = row.quantity * sale.price;
         const discount = (sale.discount * price) / 100;
         amountClaimed.value = amountClaimed.value + (price - discount);
-
     }
 }
 
@@ -208,7 +207,6 @@ async function saveWhenHasChanges() {
                     selection="multiple"
                     v-model:selected="selected"
                     :grid="$q.screen.lt.md"
-                    
                 >
                     <template #body-cell-claimed="{ row }">
                         <QTd auto-width align="right" class="text-primary shrink">
@@ -319,7 +317,13 @@ async function saveWhenHasChanges() {
     </div>
 
     <QPageSticky position="bottom-right" :offset="[25, 25]">
-        <QBtn fab color="primary" shortcut="+" icon="add" @click="showImportDialog()" />
+        <QBtn
+            fab
+            color="primary"
+            v-shortcut="'+'"
+            icon="add"
+            @click="showImportDialog()"
+        />
     </QPageSticky>
 </template>
 
@@ -330,9 +334,10 @@ async function saveWhenHasChanges() {
     width: 100%;
 }
 .grid-style-transition {
-    transition: transform 0.28s, background-color 0.28s;
+    transition:
+        transform 0.28s,
+        background-color 0.28s;
 }
-
 </style>
 
 <i18n>
diff --git a/src/pages/Claim/Card/ClaimPhoto.vue b/src/pages/Claim/Card/ClaimPhoto.vue
index ec619cc7d..fb2f818c1 100644
--- a/src/pages/Claim/Card/ClaimPhoto.vue
+++ b/src/pages/Claim/Card/ClaimPhoto.vue
@@ -61,7 +61,7 @@ watch(
     () => {
         claimDmsFilter.value.where.id = router.currentRoute.value.params.id;
         claimDmsRef.value.fetch();
-    }
+    },
 );
 
 function openDialog(dmsId) {
@@ -249,7 +249,7 @@ function onDrag() {
             <QBtn
                 fab
                 @click="inputFile.nativeEl.click()"
-                shortcut="+"
+                v-shortcut="'+'"
                 icon="add"
                 color="primary"
             >
diff --git a/src/pages/Customer/Card/CustomerAddress.vue b/src/pages/Customer/Card/CustomerAddress.vue
index 657cc7ae7..b94c41454 100644
--- a/src/pages/Customer/Card/CustomerAddress.vue
+++ b/src/pages/Customer/Card/CustomerAddress.vue
@@ -61,7 +61,7 @@ watch(
     (newValue) => {
         if (!newValue) return;
         getClientData(newValue);
-    }
+    },
 );
 
 const getClientData = async (id) => {
@@ -137,7 +137,7 @@ const toCustomerAddressEdit = (addressId) => {
                         <QIcon
                             :style="{
                                 'font-variation-settings': `'FILL' ${isDefaultAddress(
-                                    item
+                                    item,
                                 )}`,
                             }"
                             color="primary"
@@ -150,7 +150,7 @@ const toCustomerAddressEdit = (addressId) => {
                                     t(
                                         isDefaultAddress(item)
                                             ? 'Default address'
-                                            : 'Set as default'
+                                            : 'Set as default',
                                     )
                                 }}
                             </QTooltip>
@@ -216,7 +216,7 @@ const toCustomerAddressEdit = (addressId) => {
             color="primary"
             fab
             icon="add"
-            shortcut="+"
+            v-shortcut="'+'"
         />
         <QTooltip>
             {{ t('New consignee') }}
diff --git a/src/pages/Customer/Card/CustomerBalance.vue b/src/pages/Customer/Card/CustomerBalance.vue
index 04ef5f882..11db92eab 100644
--- a/src/pages/Customer/Card/CustomerBalance.vue
+++ b/src/pages/Customer/Card/CustomerBalance.vue
@@ -158,7 +158,7 @@ const columns = computed(() => [
                     openConfirmationModal(
                         t('Send compensation'),
                         t('Do you want to report compensation to the client by mail?'),
-                        () => sendEmail(`Receipts/${id}/balance-compensation-email`)
+                        () => sendEmail(`Receipts/${id}/balance-compensation-email`),
                     ),
             },
         ],
@@ -291,7 +291,7 @@ const showBalancePdf = ({ id }) => {
             color="primary"
             fab
             icon="add"
-            shortcut="+"
+            v-shortcut="'+'"
         />
         <QTooltip>
             {{ t('New payment') }}
diff --git a/src/pages/Customer/Card/CustomerContacts.vue b/src/pages/Customer/Card/CustomerContacts.vue
index c420f650e..d03f71244 100644
--- a/src/pages/Customer/Card/CustomerContacts.vue
+++ b/src/pages/Customer/Card/CustomerContacts.vue
@@ -62,7 +62,7 @@ const customerContactsRef = ref(null);
                                 color="primary"
                                 flat
                                 icon="add"
-                                shortcut="+"
+                                v-shortcut="'+'"
                             >
                                 <QTooltip>
                                     {{ t('Add contact') }}
diff --git a/src/pages/Customer/Card/CustomerCreditContracts.vue b/src/pages/Customer/Card/CustomerCreditContracts.vue
index 0ff074793..09f7d2ee3 100644
--- a/src/pages/Customer/Card/CustomerCreditContracts.vue
+++ b/src/pages/Customer/Card/CustomerCreditContracts.vue
@@ -195,7 +195,7 @@ const updateData = () => {
             color="primary"
             fab
             icon="add"
-            shortcut="+"
+            v-shortcut="'+'"
         />
         <QTooltip>
             {{ t('New contract') }}
diff --git a/src/pages/Customer/Card/CustomerFileManagement.vue b/src/pages/Customer/Card/CustomerFileManagement.vue
index 134d8dbd6..b565db6e7 100644
--- a/src/pages/Customer/Card/CustomerFileManagement.vue
+++ b/src/pages/Customer/Card/CustomerFileManagement.vue
@@ -236,7 +236,7 @@ const toCustomerFileManagementCreate = () => {
             @click.stop="toCustomerFileManagementCreate()"
             color="primary"
             fab
-            shortcut="+"
+            v-shortcut="'+'"
             icon="add"
         />
         <QTooltip>
diff --git a/src/pages/Customer/Card/CustomerSamples.vue b/src/pages/Customer/Card/CustomerSamples.vue
index f12691112..19a7f8759 100644
--- a/src/pages/Customer/Card/CustomerSamples.vue
+++ b/src/pages/Customer/Card/CustomerSamples.vue
@@ -104,7 +104,7 @@ const tableRef = ref();
             color="primary"
             fab
             icon="add"
-            shortcut="+"
+            v-shortcut="'+'"
         />
         <QTooltip>
             {{ t('Send sample') }}
diff --git a/src/pages/Customer/components/CustomerAddressEdit.vue b/src/pages/Customer/components/CustomerAddressEdit.vue
index 10d5107e2..5b36650f7 100644
--- a/src/pages/Customer/components/CustomerAddressEdit.vue
+++ b/src/pages/Customer/components/CustomerAddressEdit.vue
@@ -49,7 +49,7 @@ const getData = async (observations) => {
             notes.value = originalNotes
                 .map((observation) => {
                     const type = observationTypes.value.find(
-                        (type) => type.id === observation.observationTypeFk
+                        (type) => type.id === observation.observationTypeFk,
                     );
                     return type
                         ? {
@@ -112,8 +112,8 @@ function getPayload() {
                     (oNote) =>
                         oNote.id === note.id &&
                         (note.description !== oNote.description ||
-                            note.observationTypeFk !== oNote.observationTypeFk)
-                )
+                            note.observationTypeFk !== oNote.observationTypeFk),
+                ),
             )
             .map((note) => ({
                 data: note,
@@ -130,9 +130,7 @@ async function handleDialog(data) {
             .dialog({
                 component: VnConfirm,
                 componentProps: {
-                    title: t(
-                        'confirmTicket'
-                    ),
+                    title: t('confirmTicket'),
                     message: t('confirmDeletionMessage'),
                 },
             })
@@ -341,7 +339,7 @@ function handleLocation(data, location) {
                 class="cursor-pointer add-icon q-mt-md"
                 flat
                 icon="add"
-                shortcut="+"
+                v-shortcut="'+'"
             >
                 <QTooltip>
                     {{ t('Add note') }}
diff --git a/src/pages/Entry/Card/EntryNotes.vue b/src/pages/Entry/Card/EntryNotes.vue
index 55cac0437..459c3b069 100644
--- a/src/pages/Entry/Card/EntryNotes.vue
+++ b/src/pages/Entry/Card/EntryNotes.vue
@@ -17,7 +17,7 @@ const selected = ref([]);
 
 const sortEntryObservationOptions = (data) => {
     entryObservationsOptions.value = [...data].sort((a, b) =>
-        a.description.localeCompare(b.description)
+        a.description.localeCompare(b.description),
     );
 };
 
@@ -142,7 +142,7 @@ const columns = computed(() => [
             fab
             color="primary"
             icon="add"
-            shortcut="+"
+            v-shortcut="'+'"
             @click="entryObservationsRef.insert()"
         />
     </QPageSticky>
diff --git a/src/pages/InvoiceIn/Card/InvoiceInBasicData.vue b/src/pages/InvoiceIn/Card/InvoiceInBasicData.vue
index c01ec4ab4..a3beabdb6 100644
--- a/src/pages/InvoiceIn/Card/InvoiceInBasicData.vue
+++ b/src/pages/InvoiceIn/Card/InvoiceInBasicData.vue
@@ -215,7 +215,7 @@ function deleteFile(dmsFk) {
                         v-else
                         icon="add_circle"
                         round
-                        shortcut="+"
+                        v-shortcut="'+'"
                         padding="xs"
                         @click="
                             () => {
diff --git a/src/pages/InvoiceIn/Card/InvoiceInDueDay.vue b/src/pages/InvoiceIn/Card/InvoiceInDueDay.vue
index d2c6d0a2d..cb3271dc1 100644
--- a/src/pages/InvoiceIn/Card/InvoiceInDueDay.vue
+++ b/src/pages/InvoiceIn/Card/InvoiceInDueDay.vue
@@ -232,7 +232,7 @@ async function insert() {
         <QBtn
             color="primary"
             icon="add"
-            shortcut="+"
+            v-shortcut="'+'"
             size="lg"
             round
             @click="!areRows ? insert() : invoiceInFormRef.insert()"
diff --git a/src/pages/InvoiceIn/Card/InvoiceInIntrastat.vue b/src/pages/InvoiceIn/Card/InvoiceInIntrastat.vue
index e529ea6cd..6f8642313 100644
--- a/src/pages/InvoiceIn/Card/InvoiceInIntrastat.vue
+++ b/src/pages/InvoiceIn/Card/InvoiceInIntrastat.vue
@@ -218,7 +218,7 @@ const columns = computed(() => [
         <QBtn
             color="primary"
             icon="add"
-            shortcut="+"
+            v-shortcut="'+'"
             size="lg"
             round
             @click="invoiceInFormRef.insert()"
diff --git a/src/pages/InvoiceIn/Card/InvoiceInVat.vue b/src/pages/InvoiceIn/Card/InvoiceInVat.vue
index f99e060b8..edb43375f 100644
--- a/src/pages/InvoiceIn/Card/InvoiceInVat.vue
+++ b/src/pages/InvoiceIn/Card/InvoiceInVat.vue
@@ -117,7 +117,7 @@ const isNotEuro = (code) => code != 'EUR';
 function taxRate(invoiceInTax) {
     const sageTaxTypeId = invoiceInTax.taxTypeSageFk;
     const taxRateSelection = sageTaxTypes.value.find(
-        (transaction) => transaction.id == sageTaxTypeId
+        (transaction) => transaction.id == sageTaxTypeId,
     );
     const taxTypeSage = taxRateSelection?.rate ?? 0;
     const taxableBase = invoiceInTax?.taxableBase ?? 0;
@@ -131,14 +131,14 @@ function autocompleteExpense(evt, row, col) {
 
     const param = isNaN(val) ? row[col.model] : val;
     const lookup = expenses.value.find(
-        ({ id }) => id == useAccountShortToStandard(param)
+        ({ id }) => id == useAccountShortToStandard(param),
     );
 
     expenseRef.value.vnSelectDialogRef.vnSelectRef.toggleOption(lookup);
 }
 
-const taxableBaseTotal = computed(() => {   
-    return getTotal(invoiceInFormRef.value.formData, 'taxableBase', );
+const taxableBaseTotal = computed(() => {
+    return getTotal(invoiceInFormRef.value.formData, 'taxableBase');
 });
 
 const taxRateTotal = computed(() => {
@@ -147,13 +147,9 @@ const taxRateTotal = computed(() => {
     });
 });
 
-
 const combinedTotal = computed(() => {
     return +taxableBaseTotal.value + +taxRateTotal.value;
 });
-
-
-
 </script>
 <template>
     <FetchData
@@ -283,7 +279,7 @@ const combinedTotal = computed(() => {
                                     row.taxableBase = await getExchange(
                                         val,
                                         row.currencyFk,
-                                        invoiceIn.issued
+                                        invoiceIn.issued,
                                     );
                                 }
                             "
@@ -426,7 +422,7 @@ const combinedTotal = computed(() => {
             color="primary"
             icon="add"
             size="lg"
-            shortcut="+"
+            v-shortcut="'+'"
             round
             @click="invoiceInFormRef.insert()"
         >
diff --git a/src/pages/Item/Card/ItemBarcode.vue b/src/pages/Item/Card/ItemBarcode.vue
index 6db5943c7..590b524cd 100644
--- a/src/pages/Item/Card/ItemBarcode.vue
+++ b/src/pages/Item/Card/ItemBarcode.vue
@@ -92,7 +92,7 @@ const submit = async (rows) => {
                             class="cursor-pointer fill-icon-on-hover"
                             color="primary"
                             icon="add_circle"
-                            shortcut="+"
+                            v-shortcut="'+'"
                             flat
                         >
                             <QTooltip>
diff --git a/src/pages/Item/Card/ItemTags.vue b/src/pages/Item/Card/ItemTags.vue
index 5876cf8dc..ed23ab5a6 100644
--- a/src/pages/Item/Card/ItemTags.vue
+++ b/src/pages/Item/Card/ItemTags.vue
@@ -175,7 +175,7 @@ const insertTag = (rows) => {
                             @click="insertTag(rows)"
                             color="primary"
                             icon="add"
-                            shortcut="+"
+                            v-shortcut="'+'"
                             fab
                         >
                             <QTooltip>
diff --git a/src/pages/Order/Card/CatalogFilterValueDialog.vue b/src/pages/Order/Card/CatalogFilterValueDialog.vue
index b91e7d229..d1bd48c9e 100644
--- a/src/pages/Order/Card/CatalogFilterValueDialog.vue
+++ b/src/pages/Order/Card/CatalogFilterValueDialog.vue
@@ -110,7 +110,7 @@ const getSelectedTagValues = async (tag) => {
             </div>
             <QBtn
                 icon="add_circle"
-                shortcut="+"
+                v-shortcut="'+'"
                 flat
                 class="filter-icon q-mb-md"
                 size="md"
diff --git a/src/pages/Order/Card/OrderCatalogFilter.vue b/src/pages/Order/Card/OrderCatalogFilter.vue
index 262f503fd..76e608983 100644
--- a/src/pages/Order/Card/OrderCatalogFilter.vue
+++ b/src/pages/Order/Card/OrderCatalogFilter.vue
@@ -184,7 +184,7 @@ function addOrder(value, field, params) {
                         {{
                             t(
                                 categoryList.find((c) => c.id == customTag.value)?.name ||
-                                    ''
+                                    '',
                             )
                         }}
                     </strong>
@@ -296,7 +296,7 @@ function addOrder(value, field, params) {
                     <template #append>
                         <QBtn
                             icon="add_circle"
-                            shortcut="+"
+                            v-shortcut="'+'"
                             flat
                             color="primary"
                             size="md"
diff --git a/src/pages/Route/Agency/Card/AgencyWorkcenter.vue b/src/pages/Route/Agency/Card/AgencyWorkcenter.vue
index 7103ea9ce..576933883 100644
--- a/src/pages/Route/Agency/Card/AgencyWorkcenter.vue
+++ b/src/pages/Route/Agency/Card/AgencyWorkcenter.vue
@@ -88,7 +88,7 @@ async function deleteWorCenter(id) {
         </VnPaginate>
     </div>
     <QPageSticky :offset="[18, 18]">
-        <QBtn @click.stop="dialog.show()" color="primary" fab shortcut="+" icon="add">
+        <QBtn @click.stop="dialog.show()" color="primary" fab v-shortcut="'+'" icon="add">
             <QDialog ref="dialog">
                 <FormModelPopup
                     :title="t('Add work center')"
diff --git a/src/pages/Route/Roadmap/RoadmapStops.vue b/src/pages/Route/Roadmap/RoadmapStops.vue
index d8215ea49..e4085d572 100644
--- a/src/pages/Route/Roadmap/RoadmapStops.vue
+++ b/src/pages/Route/Roadmap/RoadmapStops.vue
@@ -68,7 +68,7 @@ const updateDefaultStop = (data) => {
                         <QBtn
                             flat
                             icon="add"
-                            shortcut="+"
+                            v-shortcut="'+'"
                             class="cursor-pointer"
                             color="primary"
                             @click="roadmapStopsCrudRef.insert()"
diff --git a/src/pages/Route/RouteTickets.vue b/src/pages/Route/RouteTickets.vue
index 56e3143b4..4278e0c71 100644
--- a/src/pages/Route/RouteTickets.vue
+++ b/src/pages/Route/RouteTickets.vue
@@ -120,8 +120,8 @@ const deletePriorities = async () => {
     try {
         await Promise.all(
             selectedRows.value.map((ticket) =>
-                axios.patch(`Tickets/${ticket?.id}/`, { priority: null })
-            )
+                axios.patch(`Tickets/${ticket?.id}/`, { priority: null }),
+            ),
         );
     } finally {
         refreshKey.value++;
@@ -132,8 +132,8 @@ const setOrderedPriority = async () => {
     try {
         await Promise.all(
             ticketList.value.map((ticket, index) =>
-                axios.patch(`Tickets/${ticket?.id}/`, { priority: index + 1 })
-            )
+                axios.patch(`Tickets/${ticket?.id}/`, { priority: index + 1 }),
+            ),
         );
     } finally {
         refreshKey.value++;
@@ -162,7 +162,7 @@ const setHighestPriority = async (ticket, ticketList) => {
 const goToBuscaman = async (ticket = null) => {
     await openBuscaman(
         routeEntity.value?.vehicleFk,
-        ticket ? [ticket] : selectedRows.value
+        ticket ? [ticket] : selectedRows.value,
     );
 };
 
@@ -393,7 +393,13 @@ const openSmsDialog = async () => {
             </VnPaginate>
         </div>
         <QPageSticky :offset="[20, 20]">
-            <QBtn fab icon="add" shortcut="+" color="primary" @click="openTicketsDialog">
+            <QBtn
+                fab
+                icon="add"
+                v-shortcut="'+'"
+                color="primary"
+                @click="openTicketsDialog"
+            >
                 <QTooltip>
                     {{ t('Add ticket') }}
                 </QTooltip>
diff --git a/src/pages/Shelving/ShelvingList.vue b/src/pages/Shelving/ShelvingList.vue
index cf158e76b..557173496 100644
--- a/src/pages/Shelving/ShelvingList.vue
+++ b/src/pages/Shelving/ShelvingList.vue
@@ -84,7 +84,7 @@ function exprBuilder(param, value) {
                 </div>
                 <QPageSticky :offset="[20, 20]">
                     <RouterLink :to="{ name: 'ShelvingCreate' }">
-                        <QBtn fab icon="add" color="primary" shortcut="+" />
+                        <QBtn fab icon="add" color="primary" v-shortcut="'+'" />
                         <QTooltip>
                             {{ t('shelving.list.newShelving') }}
                         </QTooltip>
diff --git a/src/pages/Supplier/Card/SupplierAccounts.vue b/src/pages/Supplier/Card/SupplierAccounts.vue
index 4a6901d1d..365eb67a1 100644
--- a/src/pages/Supplier/Card/SupplierAccounts.vue
+++ b/src/pages/Supplier/Card/SupplierAccounts.vue
@@ -71,7 +71,7 @@ function bankEntityFilter(val, update) {
         filteredBankEntitiesOptions.value = bankEntitiesOptions.value.filter(
             (bank) =>
                 bank.bic.toLowerCase().startsWith(needle) ||
-                bank.name.toLowerCase().includes(needle)
+                bank.name.toLowerCase().includes(needle),
         );
     });
 }
@@ -170,7 +170,7 @@ function bankEntityFilter(val, update) {
                             <QIcon name="info" class="cursor-pointer">
                                 <QTooltip>{{
                                     t(
-                                        'Name of the bank account holder if different from the provider'
+                                        'Name of the bank account holder if different from the provider',
                                     )
                                 }}</QTooltip>
                             </QIcon>
@@ -194,7 +194,7 @@ function bankEntityFilter(val, update) {
                     <QBtn
                         flat
                         icon="add"
-                        shortcut="+"
+                        v-shortcut
                         class="cursor-pointer"
                         color="primary"
                         @click="supplierAccountRef.insert()"
diff --git a/src/pages/Supplier/Card/SupplierAddresses.vue b/src/pages/Supplier/Card/SupplierAddresses.vue
index f1e95b8de..1b074b82f 100644
--- a/src/pages/Supplier/Card/SupplierAddresses.vue
+++ b/src/pages/Supplier/Card/SupplierAddresses.vue
@@ -89,7 +89,7 @@ const redirectToUpdateView = (addressData) => {
                 icon="add"
                 color="primary"
                 @click="redirectToCreateView()"
-                shortcut="+"
+                v-shortcut="'+'"
             />
             <QTooltip>
                 {{ t('New address') }}
diff --git a/src/pages/Supplier/Card/SupplierAgencyTerm.vue b/src/pages/Supplier/Card/SupplierAgencyTerm.vue
index 99b672cc4..ab21f1f76 100644
--- a/src/pages/Supplier/Card/SupplierAgencyTerm.vue
+++ b/src/pages/Supplier/Card/SupplierAgencyTerm.vue
@@ -114,7 +114,7 @@ const redirectToCreateView = () => {
             icon="add"
             color="primary"
             @click="redirectToCreateView()"
-            shortcut="+"
+            v-shortcut="'+'"
         />
         <QTooltip>
             {{ t('supplier.agencyTerms.addRow') }}
diff --git a/src/pages/Supplier/Card/SupplierContacts.vue b/src/pages/Supplier/Card/SupplierContacts.vue
index 6781c8d34..f96d92ab1 100644
--- a/src/pages/Supplier/Card/SupplierContacts.vue
+++ b/src/pages/Supplier/Card/SupplierContacts.vue
@@ -78,7 +78,7 @@ const insertRow = () => {
                     <QBtn
                         flat
                         icon="add"
-                        shortcut="+"
+                        v-shortcut="'+'"
                         class="cursor-pointer"
                         color="primary"
                         @click="insertRow()"
diff --git a/src/pages/Ticket/Card/TicketNotes.vue b/src/pages/Ticket/Card/TicketNotes.vue
index f558b71cc..feb88bf84 100644
--- a/src/pages/Ticket/Card/TicketNotes.vue
+++ b/src/pages/Ticket/Card/TicketNotes.vue
@@ -32,7 +32,7 @@ watch(
         crudModelFilter.where.ticketFk = route.params.id;
         store.filter = crudModelFilter;
         await ticketNotesCrudRef.value.reload();
-    }
+    },
 );
 function handleDelete(row) {
     ticketNotesCrudRef.value.remove([row]);
@@ -105,7 +105,7 @@ async function handleSave() {
                     <VnRow v-if="observationTypes.length > rows.length">
                         <QBtn
                             icon="add_circle"
-                            shortcut="+"
+                            v-shortcut="'+'"
                             flat
                             class="fill-icon-on-hover q-ml-md"
                             color="primary"
diff --git a/src/pages/Ticket/Card/TicketPackage.vue b/src/pages/Ticket/Card/TicketPackage.vue
index 04d6020f3..8bfb73682 100644
--- a/src/pages/Ticket/Card/TicketPackage.vue
+++ b/src/pages/Ticket/Card/TicketPackage.vue
@@ -41,7 +41,7 @@ watch(
         crudModelFilter.where.ticketFk = route.params.id;
         store.filter = crudModelFilter;
         await ticketPackagingsCrudRef.value.reload();
-    }
+    },
 );
 </script>
 
@@ -118,7 +118,7 @@ watch(
                     <VnRow>
                         <QBtn
                             icon="add_circle"
-                            shortcut="+"
+                            v-shortcut="'+'"
                             flat
                             class="fill-icon-on-hover q-ml-md"
                             color="primary"
diff --git a/src/pages/Ticket/Card/TicketSale.vue b/src/pages/Ticket/Card/TicketSale.vue
index adbd4ee00..25591dd99 100644
--- a/src/pages/Ticket/Card/TicketSale.vue
+++ b/src/pages/Ticket/Card/TicketSale.vue
@@ -811,7 +811,7 @@ watch(
             color="primary"
             fab
             icon="add"
-            shortcut="+"
+            v-shortcut="'+'"
             data-cy="ticketSaleAddToBasketBtn"
         />
         <QTooltip class="text-no-wrap">
diff --git a/src/pages/Ticket/Card/TicketService.vue b/src/pages/Ticket/Card/TicketService.vue
index d045eadee..6ce69a6aa 100644
--- a/src/pages/Ticket/Card/TicketService.vue
+++ b/src/pages/Ticket/Card/TicketService.vue
@@ -40,7 +40,7 @@ watch(
     async () => {
         store.filter = crudModelFilter.value;
         await ticketServiceCrudRef.value.reload();
-    }
+    },
 );
 
 onMounted(async () => await getDefaultTaxClass());
@@ -59,7 +59,7 @@ const createRefund = async () => {
         t('service.createRefundSuccess', {
             ticketId: refundTicket.id,
         }),
-        'positive'
+        'positive',
     );
     router.push({ name: 'TicketSale', params: { id: refundTicket.id } });
 };
@@ -225,7 +225,7 @@ async function handleSave() {
             color="primary"
             icon="add"
             @click="ticketServiceCrudRef.insert()"
-            shortcut="+"
+            v-shortcut="'+'"
         />
     </QPageSticky>
 </template>
diff --git a/src/pages/Ticket/Card/TicketTracking.vue b/src/pages/Ticket/Card/TicketTracking.vue
index f5ed03b0d..8bf7fe6b8 100644
--- a/src/pages/Ticket/Card/TicketTracking.vue
+++ b/src/pages/Ticket/Card/TicketTracking.vue
@@ -19,7 +19,7 @@ watch(
     async (val) => {
         paginateFilter.where.ticketFk = val;
         paginateRef.value.fetch();
-    }
+    },
 );
 
 const paginateFilter = reactive({
@@ -119,7 +119,7 @@ const openCreateModal = () => createTrackingDialogRef.value.show();
                 color="primary"
                 fab
                 icon="add"
-                shortcut="+"
+                v-shortcut="'+'"
             />
             <QTooltip class="text-no-wrap">
                 {{ t('tracking.addState') }}
diff --git a/src/pages/Travel/Card/TravelThermographs.vue b/src/pages/Travel/Card/TravelThermographs.vue
index b520166d3..4463378fd 100644
--- a/src/pages/Travel/Card/TravelThermographs.vue
+++ b/src/pages/Travel/Card/TravelThermographs.vue
@@ -217,7 +217,7 @@ const removeThermograph = async (id) => {
             icon="add"
             color="primary"
             @click="redirectToThermographForm('create')"
-            shortcut="+"
+            v-shortcut="'+'"
         />
         <QTooltip class="text-no-wrap">
             {{ t('Add thermograph') }}
diff --git a/src/pages/Travel/ExtraCommunityFilter.vue b/src/pages/Travel/ExtraCommunityFilter.vue
index b903aeabf..b22574632 100644
--- a/src/pages/Travel/ExtraCommunityFilter.vue
+++ b/src/pages/Travel/ExtraCommunityFilter.vue
@@ -113,7 +113,7 @@ warehouses();
                         <template #append>
                             <QBtn
                                 icon="add"
-                                shortcut="+"
+                                v-shortcut="'+'"
                                 flat
                                 dense
                                 size="12px"
diff --git a/src/pages/Wagon/Type/WagonTypeList.vue b/src/pages/Wagon/Type/WagonTypeList.vue
index c0943c58e..4c0b078a7 100644
--- a/src/pages/Wagon/Type/WagonTypeList.vue
+++ b/src/pages/Wagon/Type/WagonTypeList.vue
@@ -96,7 +96,13 @@ async function remove(row) {
         >
         </VnTable>
         <QPageSticky :offset="[18, 18]">
-            <QBtn @click.stop="dialog.show()" color="primary" fab icon="add" shortcut="+">
+            <QBtn
+                @click.stop="dialog.show()"
+                color="primary"
+                fab
+                icon="add"
+                v-shortcut="'+'"
+            >
                 <QDialog ref="dialog">
                     <FormModelPopup
                         :title="t('Create new Wagon type')"
diff --git a/src/pages/Worker/Card/WorkerPda.vue b/src/pages/Worker/Card/WorkerPda.vue
index c1beef40d..2c2f494a4 100644
--- a/src/pages/Worker/Card/WorkerPda.vue
+++ b/src/pages/Worker/Card/WorkerPda.vue
@@ -101,7 +101,7 @@ function reloadData() {
                                 openConfirmationModal(
                                     t(`Remove PDA`),
                                     t('Do you want to remove this PDA?'),
-                                    () => deallocatePDA(row.deviceProductionFk)
+                                    () => deallocatePDA(row.deviceProductionFk),
                                 )
                             "
                         >
@@ -114,7 +114,13 @@ function reloadData() {
             </template>
         </VnPaginate>
         <QPageSticky :offset="[18, 18]">
-            <QBtn @click.stop="dialog.show()" color="primary" fab icon="add" shortcut="+">
+            <QBtn
+                @click.stop="dialog.show()"
+                color="primary"
+                fab
+                icon="add"
+                v-shortcut="'+'"
+            >
                 <QDialog ref="dialog">
                     <FormModelPopup
                         :title="t('Add new device')"
diff --git a/src/pages/Worker/Card/WorkerPit.vue b/src/pages/Worker/Card/WorkerPit.vue
index 79cf1a04f..40e814452 100644
--- a/src/pages/Worker/Card/WorkerPit.vue
+++ b/src/pages/Worker/Card/WorkerPit.vue
@@ -221,7 +221,7 @@ const deleteRelative = async (id) => {
                                 color="primary"
                                 flat
                                 icon="add"
-                                shortcut="+"
+                                v-shortcut="'+'"
                                 style="flex: 0"
                                 data-cy="addRelative"
                             />
diff --git a/src/pages/Worker/Card/WorkerTimeControl.vue b/src/pages/Worker/Card/WorkerTimeControl.vue
index c580e5202..ad6aa31cb 100644
--- a/src/pages/Worker/Card/WorkerTimeControl.vue
+++ b/src/pages/Worker/Card/WorkerTimeControl.vue
@@ -69,12 +69,12 @@ const acl = useAcl();
 const selectedDateYear = computed(() => moment(selectedDate.value).isoWeekYear());
 const worker = computed(() => arrayData.store?.data);
 const canSend = computed(() =>
-    acl.hasAny([{ model: 'WorkerTimeControl', props: 'sendMail', accessType: 'WRITE' }])
+    acl.hasAny([{ model: 'WorkerTimeControl', props: 'sendMail', accessType: 'WRITE' }]),
 );
 const canUpdate = computed(() =>
     acl.hasAny([
         { model: 'WorkerTimeControl', props: 'updateMailState', accessType: 'WRITE' },
-    ])
+    ]),
 );
 const isHimself = computed(() => user.value.id === Number(route.params.id));
 
@@ -100,7 +100,7 @@ const getHeaderFormattedDate = (date) => {
 };
 
 const formattedWeekTotalHours = computed(() =>
-    secondsToHoursMinutes(weekTotalHours.value)
+    secondsToHoursMinutes(weekTotalHours.value),
 );
 
 const onInputChange = async (date) => {
@@ -320,7 +320,7 @@ const getFinishTime = () => {
     today.setHours(0, 0, 0, 0);
 
     let todayInWeek = weekDays.value.find(
-        (day) => day.dated.getTime() === today.getTime()
+        (day) => day.dated.getTime() === today.getTime(),
     );
 
     if (todayInWeek && todayInWeek.hours && todayInWeek.hours.length) {
@@ -472,7 +472,7 @@ onMounted(async () => {
                         openConfirmationModal(
                             t('Send time control email'),
                             t('Are you sure you want to send it?'),
-                            resendEmail
+                            resendEmail,
                         )
                     "
                 >
@@ -561,7 +561,7 @@ onMounted(async () => {
                                 @show-worker-time-form="
                                     showWorkerTimeForm(
                                         { id: hour.id, entryCode: hour.direction },
-                                        'edit'
+                                        'edit',
                                     )
                                 "
                                 class="hour-chip"
@@ -577,7 +577,7 @@ onMounted(async () => {
                             </span>
                             <QBtn
                                 icon="add_circle"
-                                shortcut="+"
+                                v-shortcut="'+'"
                                 flat
                                 color="primary"
                                 class="fill-icon cursor-pointer"
diff --git a/src/pages/Worker/WorkerDepartmentTree.vue b/src/pages/Worker/WorkerDepartmentTree.vue
index 9abf4e312..14009134b 100644
--- a/src/pages/Worker/WorkerDepartmentTree.vue
+++ b/src/pages/Worker/WorkerDepartmentTree.vue
@@ -173,7 +173,7 @@ function handleEvent(type, event, node) {
                             color="primary"
                             flat
                             icon="add"
-                            shortcut="+"
+                            v-shortcut="'+'"
                             class="cursor-pointer"
                             @click.stop="showCreateNodeForm(node.id)"
                         >
diff --git a/src/pages/Zone/Card/ZoneEvents.vue b/src/pages/Zone/Card/ZoneEvents.vue
index a5806bab9..1e6debd25 100644
--- a/src/pages/Zone/Card/ZoneEvents.vue
+++ b/src/pages/Zone/Card/ZoneEvents.vue
@@ -78,13 +78,13 @@ const onZoneEventFormClose = () => {
                         {
                             isNewMode: true,
                         },
-                        true
+                        true,
                     )
                 "
                 color="primary"
                 fab
                 icon="add"
-                shortcut="+"
+                v-shortcut="'+'"
             />
             <QTooltip class="text-no-wrap">
                 {{ t('eventsInclusionForm.addEvent') }}
diff --git a/src/pages/Zone/Card/ZoneWarehouses.vue b/src/pages/Zone/Card/ZoneWarehouses.vue
index d3b1d7a1c..f14658dd0 100644
--- a/src/pages/Zone/Card/ZoneWarehouses.vue
+++ b/src/pages/Zone/Card/ZoneWarehouses.vue
@@ -49,7 +49,7 @@ watch(
         store.url = urlPath.value;
         store.filter.include = 'warehouse';
         fetchWarehouses();
-    }
+    },
 );
 
 const fetchWarehouses = () => paginateRef.value.fetch();
@@ -84,7 +84,8 @@ const openCreateWarehouseForm = () => createWarehouseDialogRef.value.show();
                                             openConfirmationModal(
                                                 t('zone.deleteTitle'),
                                                 t('zone.deleteSubtitle'),
-                                                () => deleteWarehouse(row, rows, rowIndex)
+                                                () =>
+                                                    deleteWarehouse(row, rows, rowIndex),
                                             )
                                         "
                                     >
@@ -108,7 +109,7 @@ const openCreateWarehouseForm = () => createWarehouseDialogRef.value.show();
                 icon="add"
                 color="primary"
                 @click="openCreateWarehouseForm()"
-                shortcut="+"
+                v-shortcut="'+'"
             >
                 <QTooltip>{{ t('warehouses.add') }}</QTooltip>
             </QBtn>
diff --git a/src/pages/Zone/Delivery/ZoneDeliveryList.vue b/src/pages/Zone/Delivery/ZoneDeliveryList.vue
index 975cbdb67..e3ec8cb2d 100644
--- a/src/pages/Zone/Delivery/ZoneDeliveryList.vue
+++ b/src/pages/Zone/Delivery/ZoneDeliveryList.vue
@@ -74,7 +74,7 @@ async function remove(row) {
             </VnPaginate>
         </div>
         <QPageSticky position="bottom-right" :offset="[18, 18]">
-            <QBtn @click="create" fab icon="add" shortcut="+" color="primary" />
+            <QBtn @click="create" fab icon="add" v-shortcut="'+'" color="primary" />
         </QPageSticky>
     </QPage>
 </template>
diff --git a/src/pages/Zone/Upcoming/ZoneUpcomingList.vue b/src/pages/Zone/Upcoming/ZoneUpcomingList.vue
index 5a7f0bb4c..7b5c2ddbc 100644
--- a/src/pages/Zone/Upcoming/ZoneUpcomingList.vue
+++ b/src/pages/Zone/Upcoming/ZoneUpcomingList.vue
@@ -74,7 +74,7 @@ async function remove(row) {
             </VnPaginate>
         </div>
         <QPageSticky position="bottom-right" :offset="[18, 18]">
-            <QBtn @click="create" fab icon="add" shortcut="+" color="primary" />
+            <QBtn @click="create" fab icon="add" v-shortcut="'+'" color="primary" />
         </QPageSticky>
     </QPage>
 </template>
diff --git a/test/cypress/integration/vnComponent/VnShortcut.spec.js b/test/cypress/integration/vnComponent/VnShortcut.spec.js
index b49b4e964..e08c44635 100644
--- a/test/cypress/integration/vnComponent/VnShortcut.spec.js
+++ b/test/cypress/integration/vnComponent/VnShortcut.spec.js
@@ -28,6 +28,17 @@ describe('VnShortcuts', () => {
             });
 
             cy.url().should('include', module);
+            if (['monitor', 'claim'].includes(module)) {
+                return;
+            }
+            cy.waitForElement('.q-page').should('exist');
+            cy.dataCy('vnTableCreateBtn').should('exist');
+            cy.get('.q-page').trigger('keydown', {
+                ctrlKey: true,
+                altKey: true,
+                key: '+',
+            });
+            cy.get('#formModel').should('exist');
         });
     }
 });