{{ activeAccount ? (activeAccount.label || activeAccount.display_name || activeAccount.username) : 'S4SaaS' }}
{{ activeAccount ? (activeAccount.email || activeAccount.username) : 'Selecione uma conta na sidebar' }}
Nenhuma conta selecionada
Conecte uma conta Agriness para começar
Suínos ativos
{{ lotes.reduce((s, l) => s + (l.total_balance || 0), 0) || "—" }}
Lotes abertos
{{ lotes.length || "—" }}
Lote mais velho
{{ lotes.reduce((mx, l) => Math.max(mx, l.on_stage?.days_on_stage || 0), 0) ? lotes.reduce((mx, l) => Math.max(mx, l.on_stage?.days_on_stage || 0), 0) + ' dias' : '—' }}
Lotes abertos
Carregando lotes...
{{ lote.name }} {{ lote.is_open ? 'Aberto' : 'Fechado' }}
{{ lote.total_balance ?? '—' }}
Animais
{{ lote.on_stage?.days_on_stage ?? '—' }}
Dias na fase
{{ lote.on_stage?.birthdate?.age ?? '—' }}
Idade (dias)
Nenhum lote aberto neste stage.
Ações disponíveis
{{ group[0].icon }}
{{ group[0].label }}
{{ group[0].desc }}
{{ group[1].icon }}
{{ group[1].label }}
{{ group[1].desc }}

Entrada Manual

Carregando lotes e locais...
{{ imp.optionsError.value }}
Animal inserido com sucesso!
{{ imp.singleError.value }}
{{ imp.step.value > n ? '✓' : n }}
{{ ['Parâmetros','Planilha','Mapeamento','Execução'][n-1] }}

Parâmetros da fazenda

Carregando lotes e locais...
{{ imp.optionsError.value }}

Upload da planilha

📄
Arraste o arquivo Excel aqui ou
.xlsx ou .xls
Enviando...
{{ imp.uploadError.value }}

Mapeamento de colunas {{ imp.filename.value }} · {{ imp.totalRows.value }} linhas

Intervalo: De até
Campo Modo Valor fixo Coluna da planilha
{{ f.label }}
{{ f.label }}

Execução

✓ {{ imp.nOk.value }} ✗ {{ imp.nFail.value }} / {{ imp.nTotal.value }}
{{ line }}
Aguardando início...

Inspeção Manual

Causa de reprovação *
{{ insp.selectedCause.value.name }} cod. {{ insp.selectedCause.value.code }}
{{ c.name }} cod. {{ c.code }}
Inspeção registrada com sucesso!
{{ insp.singleError.value }}
{{ insp.candidatesTotal.value }} animais encontrados{{ insp.candidatesTotal.value > insp.candidates.value.length ? ' (exibindo os primeiros ' + insp.candidates.value.length + ')' : '' }} — selecione um:
{{ a.primary_identification }} / {{ a.secondary_identification }} {{ a.animal_group?.name ?? '' }} {{ a.location?.name ? '· ' + a.location.name : '' }}
{{ insp.step.value > n ? '✓' : n }}
{{ ['Parâmetros','Planilha','Mapeamento','Execução'][n-1] }}

Parâmetros

Upload da planilha

📄
Arraste o arquivo Excel aqui ou
.xlsx ou .xls
Enviando...
{{ insp.uploadError.value }}

Mapeamento de colunas {{ insp.filename.value }} · {{ insp.totalRows.value }} linhas

Intervalo: De até
Campo Modo Valor fixo Coluna da planilha
{{ f.label }}

Execução

✓ {{ insp.nOk.value }} ✗ {{ insp.nFail.value }} / {{ insp.nTotal.value }}
Causas não encontradas no S4Farm — corrija antes de iniciar:
  • {{ c }}
Verifique o nome exato no S4Farm (distinção entre maiúsculas/minúsculas não é exigida).
{{ line }}
Aguardando início...

Não Inspecionados

{{ insp.autoError.value }}
{{ insp.autoItems.value.length }} animal(is) não inspecionado(s) (máx. 500 — refine as datas)
{{ insp.autoProgress.value.current }}/{{ insp.autoProgress.value.total }} inspecionados
{{ insp.autoInspectResult.value.nOk }} inspeção(ões) registrada(s) com sucesso!
{{ insp.autoInspectResult.value.nFail }} falha(s):
  • {{ e }}
ID Primária Lote Stage Nascimento
{{ item.primary_identification || '—' }} {{ item.animal_group?.name || '—' }} {{ item.stage?.name || '—' }} {{ item.birthdate || '—' }}
Nenhum animal sem inspeção no período selecionado.

Venda Manual

Venda registrada com sucesso!
{{ sell.singleError.value }}
{{ sell.candidatesTotal.value }} animais encontrados{{ sell.candidatesTotal.value > sell.candidates.value.length ? ' (exibindo os primeiros ' + sell.candidates.value.length + ')' : '' }} — selecione um:
{{ a.primary_identification }} / {{ a.secondary_identification }} {{ a.animal_group?.name ?? '' }} {{ a.location?.name ? '· ' + a.location.name : '' }}
{{ sell.step.value > n ? '✓' : n }}
{{ ['Parâmetros','Planilha','Mapeamento','Execução'][n-1] }}

Parâmetros

Planilha

📄
Arraste o arquivo Excel aqui
.xlsx ou .xls
Enviando...
{{ sell.uploadError.value }}

Mapeamento de colunas {{ sell.filename.value }} · {{ sell.totalRows.value }} linhas

Intervalo: De até
Campo Modo Valor fixo Coluna da planilha
{{ f.label }}

Execução

✓ {{ sell.nOk.value }} ✗ {{ sell.nFail.value }} / {{ sell.nTotal.value }}
{{ line }}
Log de execução aparece aqui.

Lançamento de Morte Manual

Morte registrada com sucesso!
{{ deat.singleError.value }}
{{ deat.candidatesTotal.value }} animais encontrados{{ deat.candidatesTotal.value > deat.candidates.value.length ? ' (exibindo os primeiros ' + deat.candidates.value.length + ')' : '' }} — selecione um:
{{ a.primary_identification }} / {{ a.secondary_identification }} {{ a.animal_group?.name ?? '' }} {{ a.location?.name ? '· ' + a.location.name : '' }}
{{ deat.step.value > n ? '✓' : n }}
{{ ['Parâmetros','Planilha','Mapeamento','Execução'][n-1] }}

Parâmetros

Planilha

📄
Arraste o arquivo Excel aqui
.xlsx ou .xls
Enviando...
{{ deat.uploadError.value }}

Mapeamento de colunas {{ deat.filename.value }} · {{ deat.totalRows.value }} linhas

Intervalo: De até
Campo Modo Valor fixo Coluna da planilha
{{ f.label }}

Execução

✓ {{ deat.nOk.value }} ✗ {{ deat.nFail.value }} / {{ deat.nTotal.value }}
{{ line }}
Log de execução aparece aqui.

Apagar Inspeções

{{ del_ins.searchError.value }}
{{ del_ins.filteredItems.value.length }} inspeção(ões) encontrada(s)
{{ del_ins.deleteProgress.value.current }}/{{ del_ins.deleteProgress.value.total }} apagados
{{ del_ins.deleteResult.value.nOk }} excluído(s) com sucesso.
{{ del_ins.deleteResult.value.nFail }} falha(s):
  • {{ e }}
ID Primária Data Status Causa Lote
{{ item.piglet?.primary_identification ?? '—' }} {{ item.event_date }} {{ del_ins.statusLabel(item.inspection_status) }} {{ item.cause_name || '—' }} {{ item.detail?.animal_group?.name ?? '—' }}
Nenhuma inspeção encontrada para os filtros selecionados.

Apagar Importações (Compras)

{{ del_imp.searchError.value }}
{{ del_imp.items.value.length }} compra(s) exibida(s) (total {{ del_imp.totalCount.value }} — refine as datas para ver menos)
{{ del_imp.deleteProgress.value.current }}/{{ del_imp.deleteProgress.value.total }} apagados
{{ del_imp.deleteResult.value.nOk }} excluído(s) com sucesso.
{{ del_imp.deleteResult.value.nFail }} falha(s):
  • {{ e }}
ID Primária Data Lote Local Qtd Peso (kg)
{{ item.piglet?.primary_identification ?? '—' }} {{ item.event_date }} {{ item.animal_group?.name ?? '—' }} {{ item.location?.name ?? '—' }} {{ item.animal_number }} {{ item.weight != null ? item.weight.toFixed(1) : '—' }}
Nenhuma compra encontrada para os filtros selecionados.
{{ ACTIONS.find(a => a.id === currentAction)?.label }} Ação destrutiva — em construção.
Precisará de: capturar HAR da exclusão no S4Farm → implementar endpoint DELETE no backend.
Ação ainda não implementada.
→ frontend/js/{{ currentAction }}.js
Conta
Importar
🔍
Insp.
💰
Vender
📋
Morte
···
Mais
Apagar Inspeção
Apagar Importação
Contas
Nenhuma conta conectada
{{ initials(account) }}
{{ account.label || account.display_name || account.username }}
{{ account.email || account.username }}