diff --git a/src/boot/quasar.js b/src/boot/quasar.js
index e2035c880..5db6edd24 100644
--- a/src/boot/quasar.js
+++ b/src/boot/quasar.js
@@ -2,9 +2,15 @@ import { boot } from 'quasar/wrappers';
 import qFormMixin from './qformMixin';
 import mainShortcutMixin from './mainShortcutMixin';
 import keyShortcut from './keyShortcut';
+import useNotify from 'src/composables/useNotify.js';
+const { notify } = useNotify();
 
 export default boot(({ app }) => {
     app.mixin(qFormMixin);
     app.mixin(mainShortcutMixin);
     app.directive('shortcut', keyShortcut);
+    app.config.errorHandler = function (err) {
+        console.error(err);
+        notify('globals.error', 'negative', 'error');
+    };
 });
diff --git a/src/components/VnTable/VnTable.vue b/src/components/VnTable/VnTable.vue
index a3c439cc7..3e982919b 100644
--- a/src/components/VnTable/VnTable.vue
+++ b/src/components/VnTable/VnTable.vue
@@ -69,10 +69,7 @@ const $props = defineProps({
         type: Boolean,
         default: false,
     },
-    disableInfiniteScroll: {
-        type: Boolean,
-        default: false,
-    },
+
     hasSubToolbar: {
         type: Boolean,
         default: null,
@@ -373,9 +370,7 @@ function handleOnDataSaved(_) {
         ref="CrudModelRef"
         @on-fetch="(...args) => emit('onFetch', ...args)"
         :search-url="searchUrl"
-        :disable-infinite-scroll="
-            $attrs['disableInfiniteScroll'] ? isTableMode : !disableInfiniteScroll
-        "
+        :disable-infinite-scroll="isTableMode"
         @save-changes="reload"
         :has-sub-toolbar="$props.hasSubToolbar ?? isEditable"
         :auto-load="hasParams || $attrs['auto-load']"
@@ -395,7 +390,7 @@ function handleOnDataSaved(_) {
                 card-container-class="grid-three"
                 flat
                 :style="isTableMode && `max-height: ${tableHeight}`"
-                :virtual-scroll="!isTableMode"
+                :virtual-scroll="isTableMode"
                 @virtual-scroll="
                     (event) =>
                         event.index > rows.length - 2 &&
diff --git a/src/i18n/locale/en.yml b/src/i18n/locale/en.yml
index e27dc7bd4..2e2365f7b 100644
--- a/src/i18n/locale/en.yml
+++ b/src/i18n/locale/en.yml
@@ -103,6 +103,7 @@ globals:
     ticket: Ticket
     campaign: Campaign
     weight: Weight
+    error: Ups! Something went wrong
     pageTitles:
         logIn: Login
         addressEdit: Update address
diff --git a/src/i18n/locale/es.yml b/src/i18n/locale/es.yml
index ed34c8761..53b487e9f 100644
--- a/src/i18n/locale/es.yml
+++ b/src/i18n/locale/es.yml
@@ -105,6 +105,7 @@ globals:
     ticket: Ticket
     campaign: Campaña
     weight: Peso
+    error: ¡Ups! Algo salió mal
     pageTitles:
         logIn: Inicio de sesión
         addressEdit: Modificar consignatario
diff --git a/src/pages/Customer/components/CustomerSummaryTable.vue b/src/pages/Customer/components/CustomerSummaryTable.vue
index 374769a57..946296e67 100644
--- a/src/pages/Customer/components/CustomerSummaryTable.vue
+++ b/src/pages/Customer/components/CustomerSummaryTable.vue
@@ -35,6 +35,7 @@ const filter = {
     ],
     where: { clientFk: route.params.id },
     order: ['shipped DESC', 'id'],
+    limit: 30,
 };
 
 const columns = computed(() => [
@@ -149,7 +150,6 @@ const setShippedColor = (date) => {
         auto-load
         order="shipped DESC, id"
         :disable-option="{ card: true, table: true }"
-        limit="5"
         class="full-width"
         :disable-infinite-scroll="true"
     >
diff --git a/src/pages/Wagon/Type/WagonTypeList.vue b/src/pages/Wagon/Type/WagonTypeList.vue
index 2f0d55fbe..c0943c58e 100644
--- a/src/pages/Wagon/Type/WagonTypeList.vue
+++ b/src/pages/Wagon/Type/WagonTypeList.vue
@@ -103,7 +103,7 @@ async function remove(row) {
                         url-create="WagonTypes"
                         model="WagonType"
                         :form-initial-data="initialData"
-                        @on-data-saved="window.location.reload()"
+                        @on-data-saved="tableRef.reload()"
                         auto-load
                     >
                         <template #form-inputs="{ data }">
diff --git a/src/pages/Wagon/WagonList.vue b/src/pages/Wagon/WagonList.vue
index 129e803f5..02e3b6d16 100644
--- a/src/pages/Wagon/WagonList.vue
+++ b/src/pages/Wagon/WagonList.vue
@@ -5,7 +5,7 @@ import { useArrayData } from 'src/composables/useArrayData';
 import { useI18n } from 'vue-i18n';
 import { useRouter } from 'vue-router';
 import VnTable from 'src/components/VnTable/VnTable.vue';
-import { computed } from 'vue';
+import { computed, ref } from 'vue';
 import VnSelect from 'src/components/common/VnSelect.vue';
 import VnInput from 'src/components/common/VnInput.vue';
 
@@ -14,7 +14,7 @@ const arrayData = useArrayData('WagonList');
 const store = arrayData.store;
 const router = useRouter();
 const { t } = useI18n();
-
+const tableRef = ref();
 const filter = {
     include: {
         relation: 'type',
@@ -107,9 +107,7 @@ async function remove(row) {
             :create="{
                 urlCreate: 'Wagons',
                 title: t('Create new wagon'),
-                onDataSaved: () => {
-                    window.location.reload();
-                },
+                onDataSaved: () => tableRef.reload(),
                 formInitialData: {},
             }"
         >
diff --git a/src/pages/Worker/Card/WorkerDescriptor.vue b/src/pages/Worker/Card/WorkerDescriptor.vue
index be30537df..3675d40f8 100644
--- a/src/pages/Worker/Card/WorkerDescriptor.vue
+++ b/src/pages/Worker/Card/WorkerDescriptor.vue
@@ -152,7 +152,11 @@ const refetch = async () => await cardDescriptorRef.value.getData();
         </template>
         <template #body="{ entity }">
             <VnLv :label="t('worker.card.user')" :value="entity.user?.name" />
-            <VnLv :label="t('worker.card.email')" :value="entity.user?.email" copy />
+            <VnLv
+                :label="t('worker.card.email')"
+                :value="entity.user?.emailUser?.email"
+                copy
+            />
             <VnLv
                 :label="t('worker.list.department')"
                 :value="entity.department ? entity.department.department.name : null"
diff --git a/src/pages/Worker/Card/WorkerSummary.vue b/src/pages/Worker/Card/WorkerSummary.vue
index 0e7bfd863..8fee52dd3 100644
--- a/src/pages/Worker/Card/WorkerSummary.vue
+++ b/src/pages/Worker/Card/WorkerSummary.vue
@@ -1,9 +1,9 @@
 <script setup>
-import { ref, onMounted, computed } from 'vue';
+import { ref, onBeforeMount, computed } from 'vue';
 import { useRoute } from 'vue-router';
 import { useI18n } from 'vue-i18n';
+import axios from 'axios';
 import { dashIfEmpty, toDate } from 'src/filters';
-import { getUrl } from 'src/composables/getUrl';
 import VnLv from 'src/components/ui/VnLv.vue';
 import VnLinkPhone from 'src/components/ui/VnLinkPhone.vue';
 import CardSummary from 'components/ui/CardSummary.vue';
@@ -11,6 +11,7 @@ import VnUserLink from 'src/components/ui/VnUserLink.vue';
 import VnTitle from 'src/components/common/VnTitle.vue';
 import RoleDescriptorProxy from 'src/pages/Account/Role/Card/RoleDescriptorProxy.vue';
 import DepartmentDescriptorProxy from 'src/pages/Department/Card/DepartmentDescriptorProxy.vue';
+import { useRole } from 'src/composables/useRole';
 
 const route = useRoute();
 const { t } = useI18n();
@@ -23,64 +24,27 @@ const $props = defineProps({
 });
 
 const entityId = computed(() => $props.id || route.params.id);
-const workerUrl = ref();
+const basicDataUrl = ref(null);
+const isHr = computed(() => useRole().hasAny(['hr']));
+const advancedSummary = ref();
 
-onMounted(async () => {
-    workerUrl.value = (await getUrl('')) + `worker/${entityId.value}/`;
+onBeforeMount(async () => {
+    if (isHr.value) {
+        advancedSummary.value = (
+            await axios.get('Workers/advancedSummary', {
+                params: { filter: { where: { id: entityId.value } } },
+            })
+        ).data[0];
+        basicDataUrl.value = `#/worker/${entityId.value}/basic-data`;
+    }
 });
-
-const filter = {
-    include: [
-        {
-            relation: 'user',
-            scope: {
-                fields: ['name', 'nickname', 'roleFk'],
-
-                include: [
-                    {
-                        relation: 'role',
-                        scope: {
-                            fields: ['name'],
-                        },
-                    },
-                    {
-                        relation: 'emailUser',
-                        scope: {
-                            fields: ['email'],
-                        },
-                    },
-                ],
-            },
-        },
-        {
-            relation: 'department',
-            scope: {
-                include: {
-                    relation: 'department',
-                    scope: {
-                        fields: ['name'],
-                    },
-                },
-            },
-        },
-        {
-            relation: 'boss',
-        },
-        {
-            relation: 'client',
-        },
-        {
-            relation: 'sip',
-        },
-    ],
-};
 </script>
 
 <template>
     <CardSummary
         ref="summary"
-        :url="`Workers/${entityId}`"
-        :filter="filter"
+        :url="`Workers/summary`"
+        :filter="{ where: { id: entityId } }"
         data-key="WorkerSummary"
     >
         <template #header="{ entity }">
@@ -88,10 +52,7 @@ const filter = {
         </template>
         <template #body="{ entity: worker }">
             <QCard class="vn-one">
-                <VnTitle
-                    :url="`#/worker/${entityId}/basic-data`"
-                    :text="t('worker.summary.basicData')"
-                />
+                <VnTitle :url="basicDataUrl" :text="t('worker.summary.basicData')" />
                 <VnLv :label="t('worker.card.name')" :value="worker.user?.nickname" />
                 <VnLv :label="t('worker.list.department')">
                     <template #value>
@@ -128,13 +89,9 @@ const filter = {
                         <VnLinkPhone :phone-number="worker.client?.phone" />
                     </template>
                 </VnLv>
-                <VnLv :label="t('worker.summary.locker')" :value="worker.locker" />
             </QCard>
-            <QCard class="vn-one">
-                <VnTitle
-                    :url="`#/worker/${entityId}/basic-data`"
-                    :text="t('worker.summary.basicData')"
-                />
+            <QCard class="vn-one" v-if="advancedSummary">
+                <VnTitle :url="basicDataUrl" :text="t('worker.summary.basicData')" />
                 <VnLv
                     :label="t('worker.summary.fiDueDate')"
                     :value="toDate(worker.fiDueDate)"
@@ -162,7 +119,6 @@ const filter = {
             </QCard>
             <QCard class="vn-one">
                 <VnTitle :text="t('worker.summary.userData')" />
-                <VnLv :label="t('worker.summary.userId')" :value="worker?.user?.id" />
                 <VnLv :label="t('worker.card.name')" :value="worker?.user?.nickname" />
                 <VnLv
                     :label="t('worker.list.email')"