FRO-241 · VAT Exclude Item

design canvas fixture data only
This canvas shows the look only — it is not the contract. The contract is the FRO-241 description in Linear. Every colour, radius, control height and class here is copied from frontline-forwarding-client/src/styles/theme.css and the real components/ui/*.tsx. Sample values come from docs/reference/demo-data.md — no real client, vessel, invoice or MRN appears on this page.
New component — does not exist in the client today 1 a business rule decided in the grill — see the notes panel under each board teal = interactive / active (never “success”)

A · VAT Exemption list

The tab an operator lives in. Patterned on purchase-orders/index.tsx + purchase-order-table.tsx: sticky bg-surface-2 header, 11px uppercase column labels, mono IDs and dates, StatusPill with a mandatory dot and text, selection toolbar on check.

SecuredΑσφαλές / VAT exemptionΑπαλλαγή ΦΠΑ Frontline onlyΜόνο Frontline8

VAT exemptionΑπαλλαγή ΦΠΑ

Supplier invoices passing through a vessel's VAT-exemption process.Τιμολόγια προμηθευτών που περνούν από τη διαδικασία απαλλαγής ΦΠΑ πλοίου.

Cancelled hidden by defaultΤα ακυρωμένα κρυφά εξ ορισμού4
2 selectedεπιλεγμένα
ID6 Invoice #Αρ. τιμολογίου6 ClientΕταιρεία πελάτη Invoice vesselΠλοίο τιμολογίου SupplierΕταιρεία προμηθευτή MRN AWBNew field10 NetΚαθαρή VATΦΠΑ StatusΚατάσταση OrderΕντολή1
VAT-000118 INV-4471 Demo Client Company MV Aegean Star Aegean Marine Supplies 25GR0000FAKE0001 020-11111116 4.820,00 1.156,80 Under processΣε εξέλιξη PO-DEMO-STOCK-A
VAT-000117 INV-4468 Demo Client Company MV Frontline Trader Demo Supplier Company 25GR0000FAKE0002 020-11111120 1.240,50 297,72 PendingΣε εκκρεμότητα PO-DEMO-STOCK-B
VAT-000116 INV-4460 Oceanic Shipping Company MV Oceanic Dawn Global Parts Logistics 25GR0000FAKE0003 020-11111134 9.075,00 2.178,00 ExemptedΑπαλλαγμένο PO-DEMO-HUB
VAT-000115 INV-4455 Demo Commercial Client Company Aegean Marine Supplies 612,00 PendingΣε εκκρεμότητα manualχειροκίνητο
VAT-000114 INV-4450 Oceanic Shipping Company MV Oceanic Spirit Global Parts Logistics 3.300,00 792,00 CancelledΑκυρωμένο PO-DEMO-MIX-A
LifecycleΚύκλος ζωής Pending Under process Exempted · Cancelled 4

Business notes — board A

  1. 1
    The Order column is a real link, not a copy of a name. A VAT exemption created from a stock list item keeps a permanent link to it, so you can jump from one to the other in both directions. A record made by hand or from an email shows “manual” — it never had an order. ADR-0001 · nullable FK to freight_purchase_order
  2. 4
    Cancelled rows stay in the list but drop out of everything else. They are hidden by the default filter, cannot be selected for printing, and their checkbox is disabled. Nothing is ever deleted, so a cancelled exemption can still be found and read. grill decision · mirrors freight_delivery_note CANCELLED
  3. 6
    Two different numbers, and staff use both. ID (VAT-000118) is generated by the portal and identifies the record. Invoice # is the number printed on the supplier's own invoice — it is what the office quotes on the phone, and it is one of only two mandatory fields. grill decision
  4. 8
    Only Frontline staff see this tab at all. Clients and suppliers have no access, the same way shipments and delivery notes work today. Three new permissions are needed: view, create, edit. docs/architecture/authorization.md
  5. 10
    AWB does not exist in the system yet. It is the waybill number an order is imported with, or a shipment exported with — one shared field. It has to be added to the order and to the shipment first; until then this column has nothing to show. two follow-up tickets · grep of database.md found no awb column
  6. 11
    Printing follows the six templates already attached to FRO-241. Which options accept several selected rows and which need exactly one is defined by those templates, not by this ticket. deliberately left to the templates

B · New VAT exemption — direction 1: tabs

Copies the production order form exactly: one rounded-lg border bg-surface p-5 shadow-card card, a TabList across the top, a group heading per block, and a grid gap-4 md:grid-cols-2 lg:grid-cols-3 field grid.

VAT exemptionΑπαλλαγή ΦΠΑ / NewΝέα

New VAT exemptionΝέα απαλλαγή ΦΠΑ

One supplier invoice passing through a vessel's exemption process.Ένα τιμολόγιο προμηθευτή στη διαδικασία απαλλαγής πλοίου.

Parties and statusΕμπλεκόμενα μέρη και κατάσταση

* Required fieldsΥποχρεωτικά πεδία2

Prefilled fromΠροσυμπληρώθηκε από PO-DEMO-STOCK-A · values were copied, they will not follow later changes to the order οι τιμές αντιγράφηκαν, δεν ακολουθούν μελλοντικές αλλαγές της εντολής New3
PartiesΕμπλεκόμενα μέρη

Sets which vessels you can pick below.Καθορίζει ποια πλοία μπορείτε να επιλέξετε.5

Only the next step forward is offered. Going back needs a manager.Προσφέρεται μόνο το επόμενο βήμα. Η επιστροφή απαιτεί manager.4

VesselsΠλοία

The vessel as written on the supplier's invoice.Το πλοίο όπως γράφεται στο τιμολόγιο του προμηθευτή.

Where the goods actually went. May differ.Όπου πήγαν τελικά τα εμπορεύματα. Μπορεί να διαφέρει.5

Both vessel fields stay disabled until a client is set.Και τα δύο πεδία πλοίου παραμένουν ανενεργά ώσπου να οριστεί πελάτης.

Order contextΠλαίσιο εντολής
Not KTA — goes through VAT exemptionΌχι KTA — περνά από απαλλαγή ΦΠΑ 7

Read-only. Shown so you know why this invoice is here.Μόνο ανάγνωση. Εμφανίζεται για να ξέρετε γιατί είναι εδώ.

Trade-off. Identical to the order form, so an operator who knows one knows the other, and the form scales if fields get added later. Against it: a VAT exemption has roughly a third of an order's fields, so tabs hide three or four fields behind a click that would have fitted on one screen — and the two money fields end up on a different tab from the invoice number they belong to.

C · New VAT exemption — direction 2: one scroll, grouped

Same card, same primitives, same group headings — no tabs. Every field of the record is visible in one pass, which is how the office actually fills it: from one piece of paper.

VAT exemptionΑπαλλαγή ΦΠΑ / NewΝέα

New VAT exemptionΝέα απαλλαγή ΦΠΑ

VAT-000119 · assigned on saveαποδίδεται στην αποθήκευση

OverviewΕπισκόπηση

* Required fields — client and invoice number onlyΥποχρεωτικά πεδία — μόνο πελάτης και αρ. τιμολογίου2

PartiesΕμπλεκόμενα μέρη
InvoiceΤιμολόγιο

As printed on the supplier's invoice.Όπως αναγράφεται στο τιμολόγιο του προμηθευτή.6

“No VAT” greys out the VAT amount and prints “—”.Το «No VAT» απενεργοποιεί το ποσό ΦΠΑ και τυπώνει «—».

One currency for the whole invoice.Ένα νόμισμα για όλο το τιμολόγιο.9

Currency follows the field above.Το νόμισμα ακολουθεί το πεδίο πάνω.

Ignored when the type is “No VAT”.Αγνοείται όταν ο τύπος είναι «No VAT».

Customs & protocolΤελωνείο & πρωτόκολλο

Blocked until AWB exists on the order and the shipment.Μπλοκαρισμένο ώσπου το AWB να υπάρχει στην εντολή και στην αποστολή.10

FilesΑρχεία
supplier-invoice-4471.pdf INVOICE from the orderαπό την εντολή 3
packing-list-4471.pdf DOCUMENT
needs the INVOICE attachment kind to exist firstαπαιτεί να υπάρχει πρώτα το είδος INVOICE

Trade-off. Nothing is hidden: the operator sees the whole record at once and can fill it straight off the supplier's invoice, top to bottom, with the money fields next to the invoice number they belong to. Against it: it breaks step with the order form, and it is one long scroll on a laptop — if this record grows the way the order did, it will eventually need the tabs anyway.

Business notes — boards B and C

  1. 2
    Only two fields are required to save: client and invoice number. Everything else can arrive later — the MRN, the protocol number and the delivery date often come days after the invoice does, and a form that demanded them would stop the operator from recording anything at all. grill decision
  2. 3
    Prefilled values are a copy, taken once. When the operator starts from a stock list item, the shared fields and the order's INVOICE files come across, and the record remembers which order it came from. If the order is corrected next week, this record does not change — an exemption that has been printed and filed at customs must keep saying what was filed. There is deliberately no “re-sync” button. ADR-0001 · same pattern as freight_delivery_note
  3. 4
    The status dropdown only offers the next step forward. Pending → Under process → Exempted, and Cancelled from anywhere that is not already Exempted. A manager is needed to move a record backwards, so an operator cannot quietly undo an exemption that has already gone out. grill decision
  4. 5
    Both vessel fields only ever show that client's own ships. A vessel belongs to exactly one company in the system, so choosing the client is what makes the vessel lists appear; before that they are disabled. Invoice vessel is what the supplier wrote; delivered vessel is where the goods actually went, and they are allowed to differ. database.md · vessel.company_id NOT NULL
  5. 7
    KTA is shown, never acted on. It already exists on the order and means the goods arrive without VAT. It is displayed read-only so the operator understands why this invoice is in front of them; it blocks nothing and triggers nothing. database.md · freight_purchase_order.kta · FRO-256
  6. 9
    One currency for the whole invoice. Chosen once and applied to both the net and the VAT amount, because a single supplier invoice is never in two currencies. The production order table stores a currency per amount; this record deliberately does not. grill decision · differs from freight_purchase_order
  7. 10
    AWB is new everywhere, not just here. It does not exist on the order or the shipment yet, and this field cannot be built before it does. Two follow-up tickets add it; this ticket is blocked by both. two follow-up tickets

D · “Use data from a stock listing” — the picker

The one genuinely new screen. Built inside the existing Modal, but its contents — a searchable stock-list picker showing what will be copied — do not exist today.

Use data from a stock listingΧρήση δεδομένων από stock listing

Pick the order this supplier invoice belongs to. Its shared fields and its INVOICE files are copied into the form.Επιλέξτε την εντολή στην οποία ανήκει το τιμολόγιο. Τα κοινά πεδία και τα αρχεία INVOICE αντιγράφονται στη φόρμα.

New
OrderΕντολή ClientΠελάτης VesselΠλοίο SupplierΠρομηθευτής MRN Invoice filesΑρχεία τιμολογίου KTA
PO-DEMO-STOCK-ADemo Client CompanyMV Aegean StarAegean Marine Supplies25GR0000FAKE00012No
PO-DEMO-STOCK-BDemo Client CompanyMV Frontline TraderDemo Supplier Company25GR0000FAKE00021No
PO-DEMO-HUBDemo Client CompanyMV Blue HorizonGlobal Parts Logistics0Yes
PO-DEMO-MIX-AOceanic Shipping CompanyMV Oceanic DawnGlobal Parts Logistics25GR0000FAKE00033No
Will copy: client, supplier, invoice vessel, MRN, AWB and 2 INVOICE files. The order stays linked.Θα αντιγραφούν: πελάτης, προμηθευτής, πλοίο τιμολογίου, MRN, AWB και 2 αρχεία INVOICE. Η εντολή παραμένει συνδεδεμένη. 3

Why the picker shows KTA and a file count. Both answer a question the operator would otherwise get wrong: whether this order is even supposed to go through VAT exemption, and whether there is an invoice file to bring across. Neither is decoration — remove them and the operator has to open the order in another tab to find out.

E · Everything on these boards that does not exist yet

Checked against client/src/components/ui/ (21 primitives), client/src/app/config/routes.ts and docs/reference/database.md.

PartStatus todayWhat is needed
The whole entityNo table, no route, no permission, nowhere in the clientNew table, new /secured/vat-exemptions route, three new permissions
Sidebar item “VAT exemption”routes.ts has 6 entries, none for VATOne route + one nav item — the Sidebar component itself is reused as is
Stock-listing picker dialogΔιάλογος επιλογής stock listingModal exists; this content does notNew: searchable order table, KTA and file-count columns, a “what gets copied” summary
Linked-order chipChip συνδεδεμένης εντολήςNothing shows a copied-from link anywhere in the clientNew: the link plus the plain-words warning that values will not follow the order
Money + currency pairΖεύγος ποσού + νομίσματοςSelect and Input exist separatelyA composition, not a new primitive — one currency drives both amounts
AWB fieldNo awb column anywhere in the schemaAdded to the order and the shipment by two follow-up tickets — this ticket is blocked by both
INVOICE attachment kindKinds are DOCUMENT and PHOTO onlyA precondition the dev creates before this ticket starts — not specified here
VAT status tonesStatusPill has 11 tones; none mapped to these four statesA mapping only: neutral / warning / success / danger. Dot plus text stays mandatory