@php $tabs = [ 'protocollo-comunicazioni' => 'Protocollo comunicazioni', 'archivio-digitale' => 'Archivio digitale', 'scansione-documenti' => 'Scansione documenti', 'etichette-generiche' => 'Etichette generiche', 'movimentazione-codici' => 'Movimentazione per codice', 'lettore-codici' => 'Lettore codici', 'template-drive' => 'Template Drive', 'archivio-fisico' => 'Archivio fisico', '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 === '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-digitale') Archivio digitale Navigazione a cartelle per lo stabile attivo: root stabile, cartella fatture_PDF, anno di arrivo. Le azioni restano operative ma visibili solo come icone.
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') Scansione documenti Acquisizione staging-ready per PDF generati da scanner Epson, cartelle di rete o caricamento manuale. Il salvataggio usa lo stesso motore documento, quindi protocollo, archivio e OCR restano allineati.
Nuova acquisizione scanner
Carica il PDF prodotto dallo scanner, assegna subito stabile, cartella e classe archivio, poi lascia al backend rinomina, protocollo e OCR.
OCR automatico
Caricamento PDF in corso...
Flusso pratico per staging
Lo scanner genera un PDF. 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.
La pipeline OCR esistente parte subito dopo il salvataggio, senza creare un ramo tecnico separato.
La cartella archivio puo essere fissata subito oppure lasciata automatica in base a categoria e anno.
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.
@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 }}
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-fisico') Archivio fisico Registro operativo del cartaceo: inserimento manuale, contenitori annidati e collegamento al digitale. La stampa rapida delle etichette generiche e la movimentazione hanno ora una tab dedicata.
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