@php $tabs = [ 'protocollo-comunicazioni' => 'Protocollo comunicazioni', 'archivio' => 'Archivio', 'scansione-documenti' => 'Acquisizione Documenti', 'etichette-generiche' => 'Etichette generiche', 'movimentazione-codici' => 'Movimentazione per codice', 'lettore-codici' => 'Lettore codici', 'template-drive' => 'Template Drive', 'permessi' => 'Permessi e cartelle', ]; $stats = $this->hubStats; $protocolloStats = $this->protocolloComunicazioniStats; @endphp
Hub Documenti

Archivio digitale e fisico nello stesso flusso

Questa pagina diventa la base unica per PDF, struttura Drive, contenitori fisici e regole di visibilita. Il modello resta coerente con il passaggio consegne dello stabile e con la futura gestione studio.

Codice mnemonico suggerito
{{ $this->mnemonicCodeHint ?? 'STB00000' }}
Formato guida per etichette, QR e archivio fisico.
Documenti
{{ $stats['documenti'] ?? 0 }}
Archivio PDF censito.
Archiviati
{{ $stats['archiviati'] ?? 0 }}
Documenti chiusi e consolidati.
In scadenza
{{ $stats['in_scadenza'] ?? 0 }}
Finestra dei prossimi 30 giorni.
Template Drive
{{ $stats['template_drive'] ?? 0 }}
Cartelle base replicabili per stabile.
@foreach($tabs as $tabKey => $tabLabel) @endforeach
@if($this->hubTab === 'archivio')
@endif @if($this->hubTab === 'protocollo-comunicazioni') Protocollo comunicazioni Prima tab operativa per l'amministratore: ultimi documenti protocollati, filtri rapidi e vista a box universale per PDF, immagini, Office e allegati testuali.
Protocollo visibile
{{ $protocolloStats['totale'] ?? 0 }}
Documenti non fattura nello stabile attivo.
Con allegato
{{ $protocolloStats['con_file'] ?? 0 }}
Apribili inline o scaricabili secondo il tipo file.
Questo mese
{{ $protocolloStats['questo_mese'] ?? 0 }}
Nuovi inserimenti recenti.
Categorie
{{ $protocolloStats['categorie'] ?? 0 }}
Tipologie disponibili nei filtri.
@if($this->protocolloView === 'cards')
@forelse($this->protocolloComunicazioniRows as $row)
{{ $row['protocollo'] }} {{ $row['categoria'] }} {{ $row['file_badge'] }} {{ $row['data'] }}

{{ $row['titolo'] }}

{{ $row['descrizione'] !== '' ? $row['descrizione'] : 'Nessuna descrizione registrata.' }}

Cartella: {{ $row['cartella'] }}
@if($row['fornitore'] !== '')
Ente / referente: {{ $row['fornitore'] }}
@endif @if($row['archive_code'] !== '')
Codice archivio: {{ $row['archive_code'] }}
@endif @if($row['archive_reference'] !== '' && $row['archive_reference'] !== $row['archive_code'])
Rif. archivio: {{ $row['archive_reference'] }}
@endif
@if($row['has_file'] && $row['preview_url']) Apri Scarica @else Solo metadati @endif @if($row['can_print'] && $row['print_url']) Stampa @endif
@empty
Nessun documento protocollato trovato con i filtri correnti.
@endforelse
@else
Protocollo
Documento
Categoria / cartella
Azioni
@forelse($this->protocolloComunicazioniRows as $row)
{{ $row['protocollo'] }}
{{ $row['data'] }}
{{ $row['titolo'] }}
{{ $row['descrizione'] !== '' ? $row['descrizione'] : 'Nessuna descrizione registrata.' }}
@if($row['archive_code'] !== '')
{{ $row['archive_code'] }}
@endif @if($row['archive_reference'] !== '' && $row['archive_reference'] !== $row['archive_code'])
{{ $row['archive_reference'] }}
@endif
{{ $row['categoria'] }}
{{ $row['cartella'] }}
@if($row['has_file'] && $row['preview_url']) Apri @endif @if($row['can_print'] && $row['print_url']) Stampa @endif
@empty
Nessun documento protocollato trovato con i filtri correnti.
@endforelse
@endif
@elseif($this->hubTab === 'archivio' && $this->archiveSection === 'digitale') Archivio digitale Voce unica archivio: da qui entri nella struttura digitale dello stabile attivo e, con lo switch sopra, passi al registro fisico senza uscire dal flusso archivistico.
Percorso corrente
@foreach($this->digitalArchiveBreadcrumbs as $crumb) @endforeach
Nomi file fatture ordinati per data e protocollo, cosi la ricerca e l'elenco restano leggibili anche senza aprire il PDF.
@forelse($this->digitalArchiveFolders as $folder) @empty
Nessuna sottocartella disponibile nel livello corrente.
@endforelse
Cartella attiva
{{ $this->digitalArchiveCurrentFolder?->nome ?? 'Nessuna cartella selezionata' }}
{{ $this->digitalArchiveCurrentFolderHint }}
Documenti nel livello
{{ $this->digitalArchiveCurrentFolderDocumentCount }}
Solo fatture PDF collegate alla cartella corrente.
Operatività
Archivio digitale e fisico allineati
Da qui puoi aprire, stampare, watermarkare e assegnare subito la collocazione cartacea.
{{ $this->table }}
@elseif($this->hubTab === 'scansione-documenti') Acquisizione Documenti Acquisizione operativa unica per documenti scannerizzati e nativi/digitali. Il salvataggio usa lo stesso motore documento, quindi protocollo, archivio, OCR ed etichetta restano allineati lungo la catena documento -> faldone -> contenitore.
Nuova acquisizione
Carica il PDF prodotto dallo scanner o un documento digitale libero, assegna subito stabile, cartella e classe archivio, poi lascia al backend protocollo, rinomina, OCR ed etichetta 11354.
OCR automatico
Caricamento PDF in corso...
Flusso pratico di acquisizione
Lo scanner genera un PDF oppure il documento nasce digitale. Qui lo carichi una sola volta e il sistema lo rinomina secondo stabile, anno e protocollo.
I metadati di acquisizione restano nel documento per distinguere upload manuale, cartella Epson, email o mobile.
Il protocollo viene assegnato subito e resta il riferimento base per stampa, archivio fisico e caricamento nel faldone o nel contenitore.
La cartella archivio puo essere fissata subito oppure lasciata automatica in base a categoria e anno, con modello etichetta operativo 11354.
EPSON e browser
Per la prova staging non serve pilotare lo scanner dal browser. Il percorso operativo corretto resta: scansione su PDF dal dispositivo, poi acquisizione da questa tab con OCR e metadati gia coerenti col resto dell'archivio.
Effetti del salvataggio
Numero protocollo generato automaticamente in base a categoria e anno del documento.
Rinominazione ordinata del file nello storage locale del progetto.
Metadati archivio pronti per QR, collocazione fisica e ricerche OCR successive.
Primo QR XML del singolo atto
Anteprima del payload che verrà salvato nei metadati archivio del documento: XML aperto per il QR stampato, envelope compresso opzionale e profilo NFC ridotto.
Codice archivio preview: {{ $this->scannerQrPreview['code'] !== '' ? $this->scannerQrPreview['code'] : 'in attesa dei dati minimi' }}
QR XML aperto · {{ (int) ($this->scannerQrPreview['xml_open_length'] ?? 0) }} caratteri
QR XML compresso
NFC lite · {{ (int) ($this->scannerQrPreview['xml_nfc_length'] ?? 0) }} caratteri
@elseif($this->hubTab === 'etichette-generiche') @include('filament.pages.strumenti.partials.generic-label-builder') @elseif($this->hubTab === 'movimentazione-codici') Movimentazione per codice Pagina autonoma per spostare contenitori e documenti tramite codice o scansione. Serve da base alla catena annidata e ai futuri flussi con scanner EPSON.
Sposta per codice
Scansiona o inserisci codice sorgente e codice destinazione. Qui aggiorni anche supporto e ubicazione operativa senza rientrare nella scheda di censimento.
Ubicazione dopo lo spostamento
Se lasci i campi vuoti, il sistema eredita la posizione del contenitore destinazione e conserva il supporto attuale.
Operativo
Catena QR prevista
QR Foglio -> QR Cartellina -> QR Busta ad anelli -> QR Faldone -> QR Faldone con lacci -> QR Scatola -> QR Scaffale -> QR Posto. Questa tab separa il movimento dal censimento del contenuto.
Contenitori di primo livello
@forelse($this->physicalArchiveContainerTree as $item)
{{ $item['codice_univoco'] }}
{{ $item['titolo'] }}
{{ $item['tipo'] }} · {{ $item['children_count'] }} elementi interni
@empty
Nessun contenitore creato ancora per lo stabile attivo.
@endforelse
@elseif($this->hubTab === 'lettore-codici') Lettore codici archivio Scansiona un QR, passa un tag NFC o inserisci un codice archivio per vedere subito il contenuto di una cartella, di un faldone o di una scatola. @php $selectedLookupItem = $this->archiveLookupSelectedItem; $selectedLookupChain = $this->archiveLookupSelectedChain; @endphp
Leggi QR / NFC / codice archivio
Il sistema estrae il codice archivio dal payload QR e ti mostra subito padre, contenuto interno e documento digitale collegato.
QR e NFC ready
Usa questa pagina anche per i contenitori di trasferimento amministratore: i protocolli si muovono nel contenitore generale senza cambiare i QR già stampati.
Risultati archivio
{{ count($this->archiveLookupResults) }} risultati
@forelse($this->archiveLookupResults as $row) @empty
Nessun nodo archivio trovato con i filtri correnti.
@endforelse
Contenuto del nodo selezionato
@if($selectedLookupItem)
{{ $selectedLookupItem->codice_univoco }} {{ $selectedLookupItem->tipo_label }} @if($selectedLookupItem->nfc_reference) NFC {{ $selectedLookupItem->nfc_reference }} @endif
{{ $selectedLookupItem->titolo }}
{{ $selectedLookupItem->percorso_fisico }}
@php $lookupMeta = is_array($selectedLookupItem->metadati ?? null) ? $selectedLookupItem->metadati : []; $lineaSecondaria = trim((string) data_get($lookupMeta, 'linea_secondaria', '')); $supportoLabel = trim((string) ($selectedLookupItem->supporto_fisico ?? '')); $pathLabel = trim((string) ($selectedLookupItem->percorso_fisico ?? '')); $tipoEtichetta = trim((string) ($selectedLookupItem->modello_etichetta ?? '11354')); @endphp
Testo etichetta archivio
{{ $selectedLookupItem->codice_univoco }} @if($supportoLabel !== '') / {{ $supportoLabel }} @endif
{{ $selectedLookupItem->titolo }}
@if($lineaSecondaria !== '')
{{ $lineaSecondaria }}
@endif
Percorso: {{ $pathLabel !== '' ? $pathLabel : '—' }}
Modello etichetta operativo: {{ $tipoEtichetta !== '' ? $tipoEtichetta : '11354' }}
Payload QR: {{ $selectedLookupItem->qr_code_data }}
@if($selectedLookupChain !== [])
Catena contenitori
@foreach($selectedLookupChain as $node) @endforeach
@endif
Ubicazione
{{ collect([$selectedLookupItem->magazzino, $selectedLookupItem->scaffale, $selectedLookupItem->ripiano, $selectedLookupItem->ubicazione_dettaglio])->filter()->implode(' · ') ?: 'Non definita' }}
Data archiviazione
{{ $selectedLookupItem->data_archiviazione?->format('d-m-Y') ?: '—' }}
@if($selectedLookupItem->documento)
Documento digitale collegato
{{ $selectedLookupItem->documento->nome_file ?: $selectedLookupItem->documento->nome }}
{{ $selectedLookupItem->documento->resolveArchiveDisplayReference() }}
@endif
Contenuto interno
@forelse($selectedLookupItem->children as $child) @empty
Questo nodo non contiene ancora altri elementi interni.
@endforelse
@else
Scansiona un QR, passa un tag NFC o seleziona un risultato a sinistra per vedere il contenuto del contenitore.
@endif
@elseif($this->hubTab === 'template-drive') Template cartelle Drive Questa struttura resta la base comune per archivio digitale, passaggio consegne e futura sincronizzazione Google. Ora puo essere gestita da database a livello super-admin, con fallback automatico alla config storica.
Origine struttura
Fonte attuale: {{ $this->driveTemplateSource === 'database' ? 'database' : 'config' }}
{{ count($this->driveTemplateFolders) }} cartelle logiche
@if($this->canManageDriveTemplates)
@else
La modifica del template e dei parametri Amazon e riservata al super-admin. Gli altri ruoli vedono comunque la struttura effettiva.
@endif
@foreach($this->driveTemplateFolders as $folder)
{{ $folder }}
@endforeach
@elseif($this->hubTab === 'archivio' && $this->archiveSection === 'fisico') Archivio fisico Voce unica archivio: qui gestisci registro cartaceo, contenitori annidati e collegamento con il digitale dello stesso stabile.
Elenco archivio condominiale
Inserimento manuale come ticket: data, voce, titolo, nota, contenitore iniziale e posizione finale.
DB operativo
Dopo il primo censimento usa la tab Movimentazione per codice per assegnare supporto operativo, magazzino, scaffale, ripiano e dettaglio ubicazione ai passaggi successivi.
Contenitori di primo livello
@forelse($this->physicalArchiveContainerTree as $item)
{{ $item['codice_univoco'] }}
{{ $item['titolo'] }}
{{ $item['tipo'] }} · {{ $item['children_count'] }} elementi interni
@empty
Nessun contenitore creato ancora per lo stabile attivo.
@endforelse
Standard etichette
Modelli attivi: 11354 e 99014.
Formato suggerito: {{ $this->mnemonicCodeHint ?? 'STB00000' }} · contenuto · anno · busta · fascicolo.
QR in stampa su etichetta e predisposizione NFC per scatole e fascicoli.
Formato data archivio: AAAA-MM-GG o YYYYMMDD per aggancio automatico ai file gia codificati.
Registro e ricerca
Titolo manuale, ricerca testuale, contenimento annidato
@forelse($this->physicalArchiveRows as $row)
{{ $row['codice_univoco'] }} {{ $row['tipo'] }} {{ $row['data_archiviazione'] }}
{{ $row['titolo'] }}
@if($row['voce'] !== '')
{{ $row['voce'] }}
@endif
Dentro: {{ $row['parent'] }}
Percorso: {{ $row['percorso'] }}
@if($row['ubicazione'] !== '')
Ubicazione: {{ $row['ubicazione'] }}
@endif @if($row['documento'])
Digitale collegato: {{ $row['documento'] }}
@endif
@empty
Nessuna voce archivio fisico trovata con i filtri correnti.
@endforelse
Uso operativo
Puoi registrare direttamente un pezzo di carta senza scansione, poi metterlo in una busta etichettata, spostare la busta in un faldone e il faldone in una scatola usando solo i codici stampati.
@else Permessi e visibilita Qui prepariamo la classificazione dei documenti per audience e le cartelle visibili solo a ruoli, gruppi o utenti selezionati.
@foreach($this->visibleFolderRows as $folder)
{{ $folder['nome'] }}
{{ $folder['stabile'] }}
{{ $folder['scope'] }}
{{ $folder['path'] }}
Documenti collegati: {{ $folder['documents_count'] }}
Ruoli: {{ $folder['roles'] !== [] ? implode(', ', $folder['roles']) : 'nessun filtro' }}
Gruppi: {{ $folder['groups'] !== [] ? implode(', ', $folder['groups']) : 'nessun filtro' }}
Utenti: {{ $folder['users'] !== [] ? implode(', ', $folder['users']) : 'nessun utente specifico' }}
@endforeach @if(empty($this->visibleFolderRows))
Nessuna cartella archivio configurata per lo stabile attivo. Usa “Nuova cartella archivio” per iniziare a separare visibilita e struttura.
@endif
@foreach($this->audienceGroups as $group)
{{ $group }}
Audience candidata per visibilita documentale, export e portali dedicati.
@endforeach
Le cartelle ristrette sono applicate sia nella lista documenti sia nei download diretti, cosi l'ID del file non bypassa i permessi dello stabile o della cartella.
@endif