The explorer
The table lists accessible files with pinned files first. Each row shows the name, linked source document, personal labels, size, type, extension, and created and updated metadata. Five views scope the list, switched by the tab rail down the left: Type is derived, not chosen. When a file is uploaded, Alforse reads its extension and classifies it into one of eleven types:Archive, Document, Presentation, PDF, Spreadsheet, Text, Image, Video, Audio, Model (supported 3D formats), or Other. The File Extension column comes from the filename itself (the text after the last dot), so it always matches the real file.
Uploading
Upload accepts any file. The browser uploads it to private storage at{companyId}/{random}.{ext}, then creates a document row with its path, name, and size. Uploads, downloads, edits, favorites, and label changes create activity transactions that drive the Recent view.
Who can see a file
Visibility depends on group membership and permissions. A user can view a document only when they belong to one of itsreadGroups and have documents view permission. Editing or deleting also requires membership in a writeGroups entry and the corresponding permission. Private storage applies the same read-group rule, so unauthorized links do not resolve.
Pins and labels
Two personal organizers sit on top of the shared library, and both are per-user — what you pin or label is yours alone, not the whole company’s.- Pins (shown as a pushpin, called “Favorite” in the row menu) float a file to the top of your list and power the Pinned view. Toggling one writes or removes a
documentFavoriterow keyed to you. - Labels are free-text tags you attach to a file. Type into the label popover on a row to reuse an existing label or create a new one on the fly; click a label to filter the list down to it. Labels are stored per user, so your “Q3-audit” label doesn’t clutter a colleague’s view.
Search
Search performs a case-insensitive substring match on name and description, not file contents. Combine search with filters for source document, label, type, extension, or creator and with the view tabs. Download CSV exports the current result set with a signed download link for each row.How documents attach to records
A document can point back at the record it belongs to. The row’s Source Document column shows that link and jumps straight to the parent record. The set of record types a document can attach to is fixed: The attachment is stored as asourceDocument (the type) plus a sourceDocumentId (the record’s id) on the file. Because the file also lives in the shared explorer, you can find it either by opening the record or by searching the library. See the sales orders, purchase orders, and jobs references for where each record surfaces its files, and suppliers & customers for the party-level Documents tab.
AI extraction
In supported workflows, Alforse can extract fields from a PDF and prefill a form. Two document types are supported:- a Request for Quote PDF, on the sales side, and
- a Purchase Invoice PDF, on the purchasing side.
What it does, step by step
When you drop a PDF into one of those flows, Alforse creates adocumentExtraction row (starting at status pending) and enqueues a background job. The job then:
- flips the row to
processing; - downloads the PDF from private storage and extracts its text with a PDF parser (this is text extraction, not image OCR — a scanned image-only PDF yields no text);
- loads the company’s candidate records so the model can resolve names to real ids itself — suppliers and payment terms for an invoice, customers for an RFQ;
- sends the text plus those candidate lists to the AI model, which returns every field as a
{ value, confidence }pair; - filters by confidence: any field scoring below the threshold (default
0.85) is dropped tonull, so a low-confidence guess never lands in your form; and - normalizes dates to
YYYY-MM-DDand saves both the raw output and the filtered result on the row, statuscompleted.
What it pulls out
For a Purchase Invoice, extraction targets the supplier (name, contact, address, and a resolvedsupplierId), the invoice header (number, invoice and due dates, payment terms and a resolved paymentTermId, referenced PO number, currency), the money (subtotal, tax, shipping, total), and the line items (part number, description, quantity, unit price, line total).
For a Request for Quote, it targets the customer (name, a resolved customerId, plus separate purchasing and engineering contacts and the customer address), the RFQ header (number, RFQ date, due date, requested delivery date), and the line items (part number, description, quantity).
Extraction quality depends on the PDF being text-based. If extraction is unavailable or fails, the flows still work and you type the fields yourself.