Contextual Attachment
Pattern canonico per allegare un file nel punto a cui appartiene, senza esporre riferimenti o dettagli tecnici del modello dati.
Allega il file qui
Usa l’upload contestuale quando il file nasce dentro una richiesta, una proposta, un pagamento o un disaccordo. L’utente vede il nome dell’elemento; il form riceve internamente l’associazione già nota dalla vista. Sirio documenta la composizione del flusso reale e non introduce un nuovo servizio di upload.
Contratto della composizione
Contesto, selezione, visibilità ed esito devono rispondere a domande umane, mentre i riferimenti tecnici restano nel codice.
- Contesto visibile
- Nomina l’elemento corrente con un titolo umano: richiesta, proposta, pagamento o disaccordo.
- Associazione automatica
- La composizione riceve il riferimento dall’elemento che contiene il form e lo invia internamente. Non chiede mai all’utente di copiarlo o sceglierlo.
- File e limiti
- Mostra label, tipi consentiti e limite reale prima della selezione; dopo la scelta ripete nome e tipo in linguaggio umano.
- Visibilità
- L’Azienda sceglie tra “Solo Azienda” e “Condiviso con il cliente”. Nel flusso Cliente il file è condiviso e il selettore non viene mostrato.
- Esito
- Dopo il caricamento il file compare accanto all’elemento e nella libreria File con contesto, visibilità, data e dimensione leggibili.
Specimen canonici
Gli esempi usano i contesti, i tipi di file, il limite e le regole di visibilità presenti oggi nei flussi Azienda e Cliente. La validazione del campo segue il pattern Form Validation.
Contesti supportati
- Richiesta
Allega un file alla richiesta
Richiesta: Conferma finitura parete
- Il file compare nella conversazione della richiesta e nella libreria File.
- Proposta o modifica
Allega un file alla proposta
Proposta: Sostituzione rivestimento
- Il file resta vicino alla proposta valutata e compare anche nella libreria File.
- Pagamento documentato
Allega una ricevuta
Pagamento: Acconto lavori
- Il file viene collegato alla richiesta di pagamento corrente, senza indicare che Qoovex lo verifichi.
- Disaccordo
Allega un file al disaccordo
Disaccordo: Finitura non corrispondente
- Il file compare nel disaccordo a cui si riferisce e nella libreria File.
- File del cantiere
Carica un file nel cantiere
Cantiere: Ristrutturazione appartamento
- Solo l’Azienda usa questo ingresso per file che non appartengono naturalmente a un elemento specifico.
Upload contestuale del Cliente
Pagamento: Acconto lavori
La ricevuta sarà collegata automaticamente a questa richiesta di pagamento.
PDF e immagini JPG, PNG o WebP, fino a 4 MB.
Dopo il caricamento
Il file resta vicino all’elemento di origine e compare nella libreria con contesto e visibilità leggibili.
- capitolato-rivestimenti.pdf
- Contesto
- Richiesta: Conferma finitura parete
- Tipo di file
- Documento PDF
- Visibilità
- Visibilità: Condiviso con il cliente
- Data
- Caricato il 17 ago 2026, 10:30
- Dimensione
- 1,2 MB
Pending, errore e successo
Gli stati preservano il contesto e usano testo esplicito; colore e icona restano supporti secondari.
Caricamento in corso
Il controllo e il submit restano disabilitati finché l’invio non termina.
Caricamento del file in corso.
Caricamento non riuscito
Il messaggio indica il problema e lascia il contesto disponibile per riprovare.
File caricato
L’esito nomina il file e conferma dove è stato allegato.
Quando mantenere l’upload generico
L’upload generico resta disponibile all’Azienda per file che riguardano il cantiere nel suo insieme e non appartengono naturalmente a una richiesta, proposta, disaccordo o richiesta di pagamento.
In quel solo ingresso l’Azienda sceglie anche il tipo umano del file e può caricare PDF, immagini o video MP4, WebM e MOV fino a 4 MB. Il Cliente non dispone di un upload generico: i suoi file nascono sempre da uno dei contesti supportati e vengono condivisi con l’Azienda.
Responsive e accessibilità
Il contesto deve restare comprensibile prima, durante e dopo l’upload, con ogni modalità di input.
- Associa sempre una label visibile al file input e collega descrizione, stato del file selezionato ed errore con aria-describedby.
- Annuncia il nome del file selezionato con una regione polite; l’errore locale usa aria-invalid e porta il focus al controllo soltanto quando serve recuperare.
- Durante il caricamento usa aria-busy, impedisci invii ripetuti e mantieni un solo messaggio di stato comprensibile.
- Dopo il successo non spostare arbitrariamente il focus: aggiorna la lista nel contesto corrente e comunica dove è comparso il file.
- Su viewport stretti nome, contesto e metadati vanno a capo; il file input, il focus ring e le azioni non devono essere tagliati.
- Le icone interne a testo già esplicito sono decorative e restano nascoste agli screen reader.
Errori da evitare
Un upload è contestuale soltanto se l’utente sa dove finirà il file senza conoscere il backend.
- Chiedere all’utente un ID, un riferimento collegato o il nome di una proprietà backend.
- Aprire un upload generico quando richiesta, proposta, pagamento o disaccordo sono già noti dalla pagina.
- Mostrare codici di categoria, visibilità tecniche, MIME type, chiavi storage o altri metadati interni.
- Lasciare ambiguo se il file finirà nel cantiere, in un elemento specifico o tra i documenti condivisi.
- Nascondere tipi consentiti e limite fino a quando il caricamento fallisce.
- Promettere anteprima, versioning, approvazione o validazione automatica del contenuto.