first commit

This commit is contained in:
2026-04-21 10:53:35 +01:00
commit bd8fe915f8
40 changed files with 2505 additions and 0 deletions

195
docs/08_DOMAIN_MODEL.md Normal file
View File

@@ -0,0 +1,195 @@
# Domain Model
## Abordagem de modelação
O domínio deve ser modelado em torno do fluxo operacional do negócio e não apenas em torno de produtos abstratos. A unidade principal de controlo é a encomenda ao fornecedor, a receção, a unidade de inventário e o ciclo de venda/envio.
## Entidades principais
### User
Representa o utilizador autenticado da aplicação.
Na V1 pode existir apenas um utilizador administrador, mas a modelação deve admitir crescimento futuro.
### Supplier
Representa um fornecedor de roupa.
Campos indicativos:
- id
- name
- contact_name
- email
- phone
- notes
- created_at
- updated_at
### PurchaseOrder
Representa uma encomenda feita a um fornecedor.
Campos indicativos:
- id
- supplier_id
- external_reference
- status
- ordered_at
- expected_at
- notes
- created_at
- updated_at
### PurchaseOrderItem
Representa uma linha da encomenda, com artigo, variante e quantidade.
Campos indicativos:
- id
- purchase_order_id
- product_model_id
- variant_label
- size
- color
- sku_supplier
- quantity_ordered
- unit_cost
- notes
### Receipt
Representa um evento de receção de mercadoria relativo a uma encomenda.
Campos indicativos:
- id
- purchase_order_id
- receipt_date
- status
- notes
- created_by
- created_at
### ReceiptItem
Representa a quantidade recebida de cada linha da encomenda.
Campos indicativos:
- id
- receipt_id
- purchase_order_item_id
- quantity_received
- quantity_rejected
- discrepancy_note
### ProductModel
Representa o artigo ou modelo comercial.
Campos indicativos:
- id
- name
- brand
- category
- default_size
- default_color
- internal_sku
- supplier_sku
- notes
- created_at
- updated_at
### InventoryUnit
Representa uma unidade concreta ou unidade lógica rastreável no inventário.
Campos indicativos:
- id
- product_model_id
- purchase_order_id
- receipt_item_id
- inventory_status
- condition
- storage_location
- cost_price
- ready_for_listing_at
- created_at
- updated_at
Nota:
A V1 deve favorecer rastreabilidade por unidade sempre que possível. Caso existam cenários de stock agregado, essa decisão deve ser explícita e documentada.
### Listing
Representa um anúncio publicado ou preparado para publicação.
Campos indicativos:
- id
- inventory_unit_id
- platform
- external_reference
- listing_status
- listed_price
- listed_at
- url
- notes
### Customer
Representa o comprador associado a uma venda.
Campos indicativos:
- id
- name
- platform_username
- shipping_name
- shipping_address
- phone
- email
- notes
### Sale
Representa a venda de uma unidade ou artigo.
Campos indicativos:
- id
- inventory_unit_id
- customer_id
- sale_channel
- sale_status
- sale_price
- sold_at
- notes
- created_at
### Shipment
Representa o envio associado a uma venda.
Campos indicativos:
- id
- sale_id
- shipment_status
- shipped_at
- tracking_code
- carrier
- label_reference
- notes
### StatusHistory
Representa o histórico de transições de estado relevantes.
Campos indicativos:
- id
- entity_type
- entity_id
- from_status
- to_status
- changed_by
- changed_at
- note
## Relações principais
- Um User pode criar Receipts e alterar estados
- Um Supplier pode ter muitas PurchaseOrders
- Uma PurchaseOrder tem muitos PurchaseOrderItems
- Uma PurchaseOrder pode ter muitas Receipts
- Uma Receipt tem muitos ReceiptItems
- Um ProductModel pode existir em muitos PurchaseOrderItems
- Um InventoryUnit resulta de receção e registo
- Um InventoryUnit pode originar um Listing
- Um InventoryUnit pode estar associado a uma Sale
- Uma Sale pode gerar um Shipment
- As entidades críticas podem gerar StatusHistory
## Observações de implementação
- O modelo de dados deve ser implementado em PostgreSQL
- O acesso à base de dados deve ser feito através de Prisma ORM
- As regras de domínio não devem ficar dispersas em componentes de interface