# Domain Restructure - Progress Report

**Date**: October 3, 2025  
**Status**: 🚧 In Progress (75% Complete)

---

## ✅ Completed Domains

### 1. **Billing** ✅
```
domain/billing/
  ├── contract.ts           ✅ Invoice, InvoiceStatus, INVOICE_STATUS
  ├── schema.ts             ✅ invoiceSchema, invoiceListSchema
  ├── index.ts              ✅
  └── providers/whmcs/
      ├── raw.types.ts      ✅ WhmcsInvoiceRaw
      └── mapper.ts         ✅ transformWhmcsInvoice()
```

### 2. **Subscriptions** ✅
```
domain/subscriptions/
  ├── contract.ts           ✅ Subscription, SubscriptionStatus, SUBSCRIPTION_STATUS
  ├── schema.ts             ✅ subscriptionSchema
  ├── index.ts              ✅
  └── providers/whmcs/
      ├── raw.types.ts      ✅ WhmcsProductRaw
      └── mapper.ts         ✅ transformWhmcsSubscription()
```

### 3. **Payments** ✅
```
domain/payments/
  ├── contract.ts           ✅ PaymentMethod, PaymentGateway
  ├── schema.ts             ✅ paymentMethodSchema, paymentGatewaySchema
  ├── index.ts              ✅
  └── providers/whmcs/
      ├── raw.types.ts      ✅ WhmcsPaymentMethodRaw
      └── mapper.ts         ✅ transformWhmcsPaymentMethod()
```

### 4. **SIM** ✅
```
domain/sim/
  ├── contract.ts           ✅ SimDetails, SimUsage, SimTopUpHistory
  ├── schema.ts             ✅ simDetailsSchema, simUsageSchema
  ├── index.ts              ✅
  └── providers/freebit/
      ├── raw.types.ts      ✅ FreebitAccountDetailsRaw
      └── mapper.ts         ✅ transformFreebitAccountDetails()
```

---

## 🚧 Remaining Work

### 5. **Orders** (In Progress)
- [ ] contract.ts - Order, OrderItem, FulfillmentOrderDetails
- [ ] schema.ts
- [ ] providers/salesforce/ - Read orders
- [ ] providers/whmcs/ - Create orders

### 6. **Catalog**
- [ ] contract.ts - CatalogProduct, SimCatalogProduct
- [ ] schema.ts
- [ ] providers/salesforce/

### 7. **Common**
- [ ] types.ts - Address, Money, BaseEntity
- [ ] identifiers.ts - UserId, OrderId, etc.
- [ ] api.ts - ApiResponse, PaginatedResponse
- [ ] schema.ts

### 8. **Toolkit**
- [ ] formatting/currency.ts
- [ ] validation/helpers.ts
- [ ] typing/patterns.ts

---

## 📦 Package Updates Needed

- [ ] Update `packages/domain/package.json` exports
- [ ] Update `packages/domain/tsconfig.json`
- [ ] Update BFF `tsconfig.json` paths
- [ ] Update Portal `tsconfig.json` paths

---

## 🔄 Migration Steps Remaining

1. [ ] Finish creating all domains
2. [ ] Update package.json with new exports
3. [ ] Update tsconfig paths
4. [ ] Create migration script for imports (optional)
5. [ ] Update sample imports in BFF (1-2 files as examples)
6. [ ] Update sample imports in Portal (1-2 files as examples)
7. [ ] Build and verify compilation
8. [ ] Update documentation

---

## 🎯 New Import Patterns (Examples)

### Current (Old)
```typescript
import { Invoice } from "@customer-portal/contracts/billing";
import { invoiceSchema } from "@customer-portal/schemas/billing";
import { transformWhmcsInvoice } from "@customer-portal/integrations-whmcs/mappers";
```

### New (Domain-First)
```typescript
import { Invoice, invoiceSchema, INVOICE_STATUS } from "@customer-portal/domain/billing";
import { transformWhmcsInvoice } from "@customer-portal/domain/billing/providers/whmcs/mapper";
```

---

## ✨ Benefits Achieved

1. ✅ Domain-centric organization
2. ✅ Co-located contracts + schemas
3. ✅ Provider isolation (no leaking)
4. ✅ Single package (`@customer-portal/domain`)
5. ✅ Scalable provider pattern

---

**Next Steps**: Complete orders, catalog, common, toolkit, then package configuration.

