Suppliers
Project Gaia — static mockup in Filament v3 table idiom. No backend. Sample data: Katana tenant snapshot 2026-07-07.
Switch factory
CYTO-11 — Balakong Jaya CTSB CYTO-29 CTSB CYTOWELL-54 — Taming Jaya PIC/S CTWSB CYTOCNGZ-602 — Guangzhou CTCNGZOnly factories you are granted appear here (Filament tenant menu).
Project Gaia — static mockup in Filament v3 table idiom. No backend. Sample data: Katana tenant snapshot 2026-07-07.
| Field | Filament component | Type | Source | FK target |
|---|---|---|---|---|
| (checkbox) | Table selection + DeleteBulkAction | selection | — (bulk delete of selected suppliers) | — |
| Name | TextColumn::searchable(isIndividual)->url()->sortable() | string NOT NULL | stored: suppliers.name — the only required field on the card (form label "Company name" vs table label "Name"); names carry "(Supplier)" suffixes to disambiguate from same-company customer contacts | — |
| E-mail address | TextColumn::searchable(isIndividual) | string, nullable | stored: suppliers.email (empty across this dataset) | — |
| Country | TextColumn + SelectFilter; Select on the card | string (country) | stored: suppliers.country — origin country; most rows Malaysia, one China source (Xi'an Greenland Bio-Tech). A non-Malaysia country flags the supplier as foreign → its POs denominate in a non-base currency. NEW: exists nowhere in Gaia today | — |
| Currency | TextColumn + SelectFilter; Select on the card | ISO currency code | stored: suppliers.currency, defaults to account base currency — domestic rows MYR, the China source CNY; the card select suffixes the base option as "MYR (Base)"; denominates that supplier's POs | currencies.code |
| Payment method | TextColumn::badge(); Select on the card | enum: bank_transfer | alipay | wechat | cash | stored: suppliers.payment_method — default channel; defaults onto POs raised to this supplier (domestic bank_transfer, China source alipay). NEW: exists nowhere in Gaia today | — |
| Settlement account | TextColumn; Select/TextInput on the card | FK (settlement account) | stored: suppliers.settlement_account_id — the wallet/bank a PO settles from, e.g. "Alipay wallet (CNY)" / "Maybank MYR (CTSB)"; defaults onto the PO. NEW: exists nowhere in Gaia today | settlement_accounts.id |
| Phone number | TextColumn | string, nullable | stored: suppliers.phone (empty across this dataset) | — |
| Comment | TextColumn | string, nullable | stored: suppliers.comment (empty across this dataset). Katana DOM order is Name, E-mail, Phone, Comment, Currency but the rendered order is Name, E-mail, Currency, Phone, Comment — mockup follows the visual order | — |
| Additional emails | TagsInput (card only, no table column) | string[] (json) | stored: suppliers.additional_emails — every address here is cc'd when a PO is emailed to the supplier. NEW: exists nowhere in Gaia today | — |
| Address | Textarea (card only, no table column) | text, nullable | stored: suppliers.address — Katana keeps a single free-text line, not a structured address. NEW: exists nowhere in Gaia today | — |
Supplier
Stored as suppliers.name (NOT NULL) — the only required field; the table shows it as "Name".
TagsInput — every address here is cc'd when a purchase order is emailed to the supplier.
Origin country — foreign suppliers denominate their POs in a non-base currency.
Payment method + settlement account default onto every PO raised to this supplier — e.g. Alipay wallet (CNY) for a China source, Maybank MYR (CTSB) domestic. NEW: exists nowhere in Gaia today.
Single free-text line in Katana — kept as one Textarea, not a structured address.