import React, {useEffect,useState} from 'react'; const notice='TESTE — SEM VALIDADE FISCAL'; export default function ServiceInvoiceWorkspace({api,context,can,perform,busy}) { const [list,setList]=useState(null),[error,setError]=useState(''),[review,setReview]=useState(null),[document,setDocument]=useState(null),[key,setKey]=useState(crypto.randomUUID()); const [choice,setChoice]=useState({draft_id:'',series_id:'',rule_id:''}),[reason,setReason]=useState(''),[reasons,setReasons]=useState({}); const [kind,setKind]=useState('series'),[f,setF]=useState({identifier:'',previous_id:'',code:'',first_number:'',state:'open',valid_from:'',valid_until:'',evidence:'',draft_id:'',draft_version:'',preparation_version:'',profile_proposal_id:'',period_start:'',period_end:'',issue_window_start:'',issue_window_end:'',readiness_basis:''}); async function load(){setList(await api('/api/service-invoices'));} useEffect(()=>{setList(null);setReview(null);setDocument(null);setError('');if(context.unit)load().catch(e=>setError(e.message));},[context.token]); const unit=context.unit?.id; const fields=kind==='series'?{code:'Código da série de teste (TEST-...)',first_number:'Primeiro número de teste',valid_from:'Vigência desde',valid_until:'Vigência até (opcional)',evidence:'Fundamento da configuração sintética'}:{draft_id:'Rascunho existente',draft_version:'Versão do rascunho',preparation_version:'Versão da preparação',profile_proposal_id:'Proposta do perfil fiscal',valid_from:'Vigência desde',valid_until:'Vigência até (opcional)',period_start:'Início da cobertura',period_end:'Fim da cobertura',issue_window_start:'Janela fundamentada de emissão desde',issue_window_end:'Janela fundamentada até',readiness_basis:'Fundamento da prontidão documental e representação',evidence:'Evidências e pressupostos sintéticos'}; async function propose(e){e.preventDefault();await perform(async()=>{const data={};for(const field of Object.keys(fields))if(f[field]!=='')data[field]=field.endsWith('_id')||field.endsWith('_version')||field==='first_number'?Number(f[field]):f[field];if(kind==='series')data.state=f.state;else data.event='on_issue_within_deadline';await api('/api/service-invoices/proposals','POST',{kind,identifier:kind==='series'?f.code:f.identifier,...(f.previous_id?{previous_id:Number(f.previous_id)}:{}),data});await load();},'Proposta de teste submetida para validação.');} return

{context.single_installation?'SGF · COMERCIAL':'DEMONSTRAÇÃO DOCUMENTAL ISOLADA'}

Facturas de teste

{notice}Emissão real bloqueada. Sem comunicação à AT ou envio automático. Recebimentos e lançamentos mantêm decisões próprias.
{error&&

{error}

} {!context.unit?

Seleccione uma unidade autorizada.

:!list?

A carregar…

:!list.test_enabled?

Emissão real indisponível

{list.notice}

:<> {(can('invoice_series.propose')||can('service_fiscal.propose'))&&
Preparar série ou regra temporal de teste
{kind==='temporal'&&}{kind==='series'&&}{Object.entries(fields).map(([field,label])=>