Backport de mejoras genéricas de frontend (desde cliente/tagumedica)

- Nuevo Icon.tsx (reemplaza emojis en toda la app), FieldTooltip, ConfirmModal, PageLoader, SecondaryButton, hook useSapCatalog, utils/errors (getErrorMessage).
- App.tsx: code-splitting con lazy()+Suspense+PageLoader para todas las rutas.
- MainLayout.tsx: menú usa Icon.tsx en vez de emojis.
- FormattedField/SelectField: soporte de dbField+tooltip, multiline.
- DenseTable/FilterBar/ListViewTemplate: onClear, mejoras varias.
- PrimaryButton: variante de tamaño sm/md.
- Renombres *View.tsx para uniformar el naming de vistas de detalle/mantenimiento (Dashboard, Items, BatchNumberDetails, Customers, Suppliers, Invoices, Orders, PurchaseOrders, PurchaseInvoices) y SapLogin -> SapLoginForm.
- BatchNumberDetailsList: filtros y columna de descripción de artículo.
- Configs de reportes e iconos de módulos actualizados a Icon.tsx.
- Ajustes de paleta en los 4 temas CSS.
- Docs actualizadas.

Se excluyó explícitamente del backport (queda solo en cliente/tagumedica, no es reusable sin adaptar a los UDFs propios de cada cliente):
- Vistas InmovilizarLotesView, LiberarLotesView, ConfirmarLiberacionLoteView y sus rutas/ítems de menú.
- types/sapInventoryLock.ts (contrato con los UDFs U_SIS_MOVINV/U_EXX_TIPOOPER/U_SIS_TIPDESP/U_SIS_MOTALM de Tagumedica).
- En BatchForm.tsx: los 3 campos U_SIS_MOTEST/U_SIS_COMEST/U_SIS_ACCTOM (Motivo/Comentario/Acción), manteniendo el resto de mejoras genéricas del archivo y reactivando el campo estándar "Detalles/Observaciones" que en tagumedica había quedado comentado sin justificación genérica.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
GeorgeandClaude Sonnet 5 committed 2026-09-28 14:28:29 -05:00
1 parent fef21898f9
commit f58f4292c3
55 files changed
+1014 -356

No files matched your search

@@ -2,6 +2,7 @@ import { useState, useEffect } from "react";
import type { ChangeEvent, FormEvent } from "react";
import { useSearchParams, useNavigate } from "react-router-dom";
import { API_URL, apiFetch } from "../utils/api";
import FieldTooltip from "./ui/FieldTooltip";
interface BPAddress {
AddressName: string;
@@ -287,7 +288,8 @@ export default function BusinessPartnerForm({
<div className="grid grid-cols-1 md:grid-cols-2 gap-x-8 gap-y-4 max-w-4xl text-xs">
<div>
<label className="block text-[var(--color-text-muted)] font-medium mb-1">
Código de {entityLabel} (CardCode)
Código de {entityLabel}
<FieldTooltip text="CardCode" />
</label>
<input
type="text"
@@ -303,7 +305,8 @@ export default function BusinessPartnerForm({
<div>
<label className="block text-[var(--color-text-muted)] font-medium mb-1">
RUC / Documento de Identidad (FederalTaxID)
RUC / Documento de Identidad
<FieldTooltip text="FederalTaxID" />
</label>
<input
type="text"
@@ -317,7 +320,8 @@ export default function BusinessPartnerForm({
<div className="md:col-span-2">
<label className="block text-[var(--color-text-muted)] font-medium mb-1">
Nombre o Razón Social (CardName)
Nombre o Razón Social
<FieldTooltip text="CardName" />
</label>
<input
type="text"
@@ -333,6 +337,7 @@ export default function BusinessPartnerForm({
<div key={f.name} className={f.fullWidth ? "md:col-span-2" : ""}>
<label className="block text-[var(--color-text-muted)] font-medium mb-1">
{f.label}
<FieldTooltip text={f.name} />
</label>
{f.type === "select" ? (
<select
@@ -361,7 +366,8 @@ export default function BusinessPartnerForm({
<div>
<label className="block text-[var(--color-text-muted)] font-medium mb-1">
Teléfono Principal (Phone1)
Teléfono Principal
<FieldTooltip text="Phone1" />
</label>
<input
type="text"
@@ -374,7 +380,8 @@ export default function BusinessPartnerForm({
<div>
<label className="block text-[var(--color-text-muted)] font-medium mb-1">
Correo Electrónico (EmailAddress)
Correo Electrónico
<FieldTooltip text="EmailAddress" />
</label>
<input
type="email"
@@ -406,7 +413,8 @@ export default function BusinessPartnerForm({
<div className="grid grid-cols-1 md:grid-cols-2 gap-4">
<div>
<label className="block text-[var(--color-text-muted)] font-medium mb-1">
Calle / Avenida (Street)
Calle / Avenida
<FieldTooltip text="Street" />
</label>
<input
type="text"
@@ -419,7 +427,8 @@ export default function BusinessPartnerForm({
</div>
<div>
<label className="block text-[var(--color-text-muted)] font-medium mb-1">
Ciudad (City)
Ciudad
<FieldTooltip text="City" />
</label>
<input
type="text"
@@ -432,7 +441,8 @@ export default function BusinessPartnerForm({
</div>
<div>
<label className="block text-[var(--color-text-muted)] font-medium mb-1">
Condado (County)
Condado
<FieldTooltip text="County" />
</label>
<input
type="text"
@@ -445,7 +455,8 @@ export default function BusinessPartnerForm({
</div>
<div>
<label className="block text-[var(--color-text-muted)] font-medium mb-1">
Numero Exterior (GlobalLocationNumber)
Numero Exterior
<FieldTooltip text="GlobalLocationNumber" />
</label>
<input
type="text"