diff --git a/apps/api/src/services/cfdi.service.ts b/apps/api/src/services/cfdi.service.ts index 9d98605..207c9b0 100644 --- a/apps/api/src/services/cfdi.service.ts +++ b/apps/api/src/services/cfdi.service.ts @@ -181,6 +181,7 @@ export async function getConceptosList( uuidLike?: string; claveProdServ?: string; descripcionConcepto?: string; + noIdentificacion?: string; orderBy?: 'fecha' | 'importe'; orderDir?: 'asc' | 'desc'; }, @@ -261,6 +262,10 @@ export async function getConceptosList( whereClause += ` AND cc.descripcion ILIKE $${paramIndex++}`; params.push(`%${filters.descripcionConcepto}%`); } + if (filters.noIdentificacion) { + whereClause += ` AND cc.no_identificacion ILIKE $${paramIndex++}`; + params.push(`%${filters.noIdentificacion}%`); + } // Ordenamiento configurable. Default: fecha DESC, id ASC (estable). const orderDir = filters.orderDir === 'asc' ? 'ASC' : 'DESC'; diff --git a/apps/web/app/(dashboard)/cfdi/page.tsx b/apps/web/app/(dashboard)/cfdi/page.tsx index 9ec4eea..620fc92 100644 --- a/apps/web/app/(dashboard)/cfdi/page.tsx +++ b/apps/web/app/(dashboard)/cfdi/page.tsx @@ -325,10 +325,11 @@ export default function CfdiPage() { uuidLike: string; claveProdServ: string; descripcionConcepto: string; + noIdentificacion: string; orderBy?: 'fecha' | 'importe'; orderDir?: 'asc' | 'desc'; - }>({ uuidLike: '', claveProdServ: '', descripcionConcepto: '' }); - const [conceptosOpenFilter, setConceptosOpenFilter] = useState<'uuid' | 'clave' | 'descripcion' | null>(null); + }>({ uuidLike: '', claveProdServ: '', descripcionConcepto: '', noIdentificacion: '' }); + const [conceptosOpenFilter, setConceptosOpenFilter] = useState<'uuid' | 'clave' | 'descripcion' | 'noIdentificacion' | null>(null); const conceptosQuery = useQuery({ queryKey: ['cfdi-conceptos', filters, selectedContribuyenteId, conceptosFilters], @@ -338,6 +339,7 @@ export default function CfdiPage() { uuidLike: conceptosFilters.uuidLike || undefined, claveProdServ: conceptosFilters.claveProdServ || undefined, descripcionConcepto: conceptosFilters.descripcionConcepto || undefined, + noIdentificacion: conceptosFilters.noIdentificacion || undefined, orderBy: conceptosFilters.orderBy, orderDir: conceptosFilters.orderDir, }), @@ -481,6 +483,7 @@ export default function CfdiPage() { uuidLike: conceptosFilters.uuidLike || undefined, claveProdServ: conceptosFilters.claveProdServ || undefined, descripcionConcepto: conceptosFilters.descripcionConcepto || undefined, + noIdentificacion: conceptosFilters.noIdentificacion || undefined, orderBy: conceptosFilters.orderBy, orderDir: conceptosFilters.orderDir, page: 1, @@ -1647,6 +1650,28 @@ export default function CfdiPage() { +