Nenhum documento corresponde aos filtros nas fontes disponíveis.
}>}
Valores documentais preservados, sem recálculo. Não são somadas moedas diferentes. Ausência de saldo ou vencimento não significa zero, factura paga ou atraso. Filtros de emissão excluem rascunhos e datas desconhecidas.
;
}
export default function BillingMenuWorkspace({section,context,can,api,navigate}) {
const unit=context.unit?.id??null;
const [result,setResult]=useState(null),[loading,setLoading]=useState(false),[reload,setReload]=useState(0),[filters,setFilters]=useState(emptyFilters),[selected,setSelected]=useState(null);
const active=billingSections.find(s=>s.id===section);
useEffect(()=>{setSelected(null);},[section]);
useEffect(()=>{
let current=true;setResult(null);setSelected(null);
if(unit===null||active?.pending||(context.service_documents_enabled&&['billing_all','service_invoices'].includes(section)))return ()=>{current=false;};
setLoading(true);
loadBillingRows(api,can,unit).then(r=>{if(current){setResult(r);setLoading(false);}});
return ()=>{current=false;};
},[context.token,section,reload]);
if(!active)return null;
if(context.service_documents_enabled&&['billing_all','service_invoices'].includes(section))return A abrir documentos…
A criação reutiliza uma prestação existente e não emite automaticamente. Guardar rascunho, confirmar internamente, emitir em teste e receber mantêm os seus circuitos próprios.
{loading&&
A carregar documentos autorizados…
}
{result?.sources.map(s=>s.error?
{s.label}: consulta indisponível. {s.error} Use Actualizar lista para tentar novamente.
#{c.id}: {c.reason} · {c.created_at} · Pendente, sem efeito fiscal.
):
Nenhum pedido registado.
}
Enviar ao cliente, duplicar documentos, exportar selecções e emitir notas de crédito ainda não estão disponíveis neste menu. Não existe emissão ou rectificação em massa.