fix(fiel/csd): usa contribuyente seleccionado sin depender de isDespachoTenant

Problema: isDespachoTenant(user?.tenantRfc) compara contra prefijo
'DESPACHO_' que ningun tenant real usa. Esto hacia que sat/page.tsx
siempre usara el endpoint legacy a nivel tenant, ignorando el contribuyente
seleccionado y mostrando datos del tenant en lugar del contribuyente.

Cambios:
- sat/page.tsx: elimina isDespachoTenant, usa selectedContribuyenteId
  directamente para determinar contribId. Muestra banner cuando no hay
  contribuyente seleccionado.
- csd/page.tsx: agrega banner de contribuyente seleccionado y oculta
  la UI de CSD cuando no hay contribuyente seleccionado.
- tenant-selector.tsx: limpia selectedContribuyenteId al cambiar de
  tenant para evitar stale state.
This commit is contained in:
Horux Dev
2026-05-16 15:53:17 +00:00
parent 414e862a44
commit a8503fd574
3 changed files with 44 additions and 20 deletions

View File

@@ -7,7 +7,7 @@ import { useTimbres } from '@/lib/hooks/use-facturacion';
import { apiClient } from '@/lib/api/client';
import { useQuery, useQueryClient } from '@tanstack/react-query';
import { useContribuyenteStore } from '@/stores/contribuyente-store';
import { Shield, Upload, Check, AlertCircle, Receipt, Palette, Image } from 'lucide-react';
import { Shield, Upload, Check, AlertCircle, Receipt, Palette, Image, Building2 } from 'lucide-react';
function CustomizationSection() {
const queryClient = useQueryClient();
@@ -147,7 +147,7 @@ function CustomizationSection() {
}
export default function CsdConfigPage() {
const { selectedContribuyenteId } = useContribuyenteStore();
const { selectedContribuyenteId, selectedContribuyenteRfc, selectedContribuyenteNombre } = useContribuyenteStore();
const { data: orgStatus, isLoading } = useQuery({
queryKey: ['facturapi-org-contrib', selectedContribuyenteId],
queryFn: () => selectedContribuyenteId
@@ -228,8 +228,28 @@ export default function CsdConfigPage() {
<>
<Header title="Configuración CSD" />
<main className="p-6 space-y-6">
{/* Show which contribuyente or prompt to select */}
{!selectedContribuyenteId && (
<Card className="border-amber-200 bg-amber-50 dark:bg-amber-950/20">
<CardContent className="py-4 flex items-center gap-3">
<Building2 className="h-5 w-5 text-amber-600" />
<p className="text-sm text-amber-800 dark:text-amber-300">Selecciona un contribuyente en el header para ver y configurar su CSD.</p>
</CardContent>
</Card>
)}
{selectedContribuyenteId && (
<Card className="bg-primary/5 border-primary/20">
<CardContent className="py-3 px-5 flex items-center gap-2">
<Building2 className="h-4 w-4 text-primary" />
<span className="text-sm font-medium">CSD de: {selectedContribuyenteNombre}</span>
<span className="text-xs text-muted-foreground font-mono">{selectedContribuyenteRfc}</span>
</CardContent>
</Card>
)}
{/* Estado de la organización */}
<Card>
{selectedContribuyenteId && <Card>
<CardHeader>
<CardTitle className="flex items-center gap-2 text-base">
<Shield className="h-4 w-4" />
@@ -262,10 +282,10 @@ export default function CsdConfigPage() {
</div>
)}
</CardContent>
</Card>
</Card>}
{/* Subir CSD */}
{orgStatus?.configured && !orgStatus.hasCsd && (
{selectedContribuyenteId && orgStatus?.configured && !orgStatus.hasCsd && (
<Card>
<CardHeader>
<CardTitle className="flex items-center gap-2 text-base">
@@ -299,7 +319,7 @@ export default function CsdConfigPage() {
)}
{/* CSD ya configurado */}
{orgStatus?.configured && orgStatus.hasCsd && (
{selectedContribuyenteId && orgStatus?.configured && orgStatus.hasCsd && (
<Card>
<CardContent className="pt-6 text-center space-y-2">
<div className="h-12 w-12 rounded-full bg-green-100 dark:bg-green-900 flex items-center justify-center mx-auto">
@@ -314,10 +334,10 @@ export default function CsdConfigPage() {
)}
{/* Personalización de factura */}
{orgStatus?.configured && <CustomizationSection />}
{selectedContribuyenteId && orgStatus?.configured && <CustomizationSection />}
{/* Timbres */}
<Card>
{selectedContribuyenteId && <Card>
<CardHeader>
<CardTitle className="flex items-center gap-2 text-base">
<Receipt className="h-4 w-4" />
@@ -356,10 +376,10 @@ export default function CsdConfigPage() {
</p>
)}
</CardContent>
</Card>
</Card>}
{/* Mensajes */}
{message && (
{selectedContribuyenteId && message && (
<div className={`p-3 rounded-lg text-sm flex items-center gap-2 ${
message.type === 'success' ? 'bg-green-50 text-green-800 dark:bg-green-950 dark:text-green-200'
: 'bg-red-50 text-red-800 dark:bg-red-950 dark:text-red-200'