ofpos-shared-core 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (143) hide show
  1. package/README.md +37 -0
  2. package/dist/AdapterRegistry.d.ts +83 -0
  3. package/dist/DomainServices.d.ts +151 -0
  4. package/dist/IntegrationServices.d.ts +75 -0
  5. package/dist/PosCore.d.ts +216 -0
  6. package/dist/contracts/contractVersioning.d.ts +6 -0
  7. package/dist/contracts/crossDomainPrimitives.d.ts +5 -0
  8. package/dist/contracts/responseEnvelope.d.ts +6 -0
  9. package/dist/contracts/syncProtocol.d.ts +8 -0
  10. package/dist/data/DbAdapter.d.ts +7 -0
  11. package/dist/data/applyPendingMigrations.d.ts +18 -0
  12. package/dist/data/inMemoryDbAdapter.d.ts +65 -0
  13. package/dist/data/migrations.d.ts +12 -0
  14. package/dist/data/relations.d.ts +3 -0
  15. package/dist/data/schema.d.ts +9 -0
  16. package/dist/data/seed.d.ts +370 -0
  17. package/dist/index.browser.mjs +18 -0
  18. package/dist/index.browser.mjs.LEGAL.txt +46 -0
  19. package/dist/index.cjs.js +18 -0
  20. package/dist/index.cjs.js.LEGAL.txt +46 -0
  21. package/dist/index.d.ts +116 -0
  22. package/dist/index.esm.js +18 -0
  23. package/dist/index.esm.js.LEGAL.txt +46 -0
  24. package/dist/index.umd.js +18 -0
  25. package/dist/index.umd.js.LEGAL.txt +46 -0
  26. package/dist/integration/NotificationAdapter.d.ts +69 -0
  27. package/dist/integration/activityLogger.d.ts +44 -0
  28. package/dist/integration/activitySink.d.ts +8 -0
  29. package/dist/integration/apiService.d.ts +255 -0
  30. package/dist/integration/authorizationService.d.ts +225 -0
  31. package/dist/integration/backupScheduler.d.ts +75 -0
  32. package/dist/integration/checksum.d.ts +9 -0
  33. package/dist/integration/checksumAdapter.d.ts +8 -0
  34. package/dist/integration/configService.d.ts +431 -0
  35. package/dist/integration/defaultChecksumAdapter.d.ts +6 -0
  36. package/dist/integration/defaultEncryptionAdapter.d.ts +9 -0
  37. package/dist/integration/encryption.d.ts +95 -0
  38. package/dist/integration/encryptionAdapter.d.ts +8 -0
  39. package/dist/integration/httpAdapter.d.ts +9 -0
  40. package/dist/integration/loggerAdapter.d.ts +45 -0
  41. package/dist/integration/notificationService.d.ts +45 -0
  42. package/dist/integration/ofauthBridge.d.ts +29 -0
  43. package/dist/integration/ofauthCoreBridge.d.ts +19 -0
  44. package/dist/integration/platformAdapter.d.ts +8 -0
  45. package/dist/integration/roleAdapter.d.ts +61 -0
  46. package/dist/integration/socket.d.ts +60 -0
  47. package/dist/integration/socketAdapter.d.ts +8 -0
  48. package/dist/integration/userService.d.ts +126 -0
  49. package/dist/models/Bom.d.ts +17 -0
  50. package/dist/models/Category.d.ts +13 -0
  51. package/dist/models/Customer.d.ts +17 -0
  52. package/dist/models/CustomerGroup.d.ts +11 -0
  53. package/dist/models/Expense.d.ts +19 -0
  54. package/dist/models/FinancialSetting.d.ts +14 -0
  55. package/dist/models/History.d.ts +18 -0
  56. package/dist/models/InventoryLog.d.ts +23 -0
  57. package/dist/models/InventoryLot.d.ts +34 -0
  58. package/dist/models/KitchenTicket.d.ts +13 -0
  59. package/dist/models/KitchenTicketItem.d.ts +12 -0
  60. package/dist/models/LoyaltyAccount.d.ts +12 -0
  61. package/dist/models/LoyaltyLedger.d.ts +17 -0
  62. package/dist/models/Order.d.ts +45 -0
  63. package/dist/models/OrderItem.d.ts +19 -0
  64. package/dist/models/Payable.d.ts +23 -0
  65. package/dist/models/PriceHistory.d.ts +17 -0
  66. package/dist/models/PriceTier.d.ts +19 -0
  67. package/dist/models/Product.d.ts +25 -0
  68. package/dist/models/Promotion.d.ts +25 -0
  69. package/dist/models/Purchase.d.ts +29 -0
  70. package/dist/models/PurchaseItem.d.ts +21 -0
  71. package/dist/models/PurchaseOrder.d.ts +23 -0
  72. package/dist/models/PurchaseOrderItem.d.ts +19 -0
  73. package/dist/models/Receivable.d.ts +23 -0
  74. package/dist/models/ReportSchedule.d.ts +21 -0
  75. package/dist/models/Return.d.ts +57 -0
  76. package/dist/models/ReturnItem.d.ts +31 -0
  77. package/dist/models/Role.d.ts +13 -0
  78. package/dist/models/Sale.d.ts +43 -0
  79. package/dist/models/SaleItem.d.ts +19 -0
  80. package/dist/models/Settlement.d.ts +23 -0
  81. package/dist/models/Shift.d.ts +41 -0
  82. package/dist/models/StockAdjustment.d.ts +21 -0
  83. package/dist/models/StockOpname.d.ts +22 -0
  84. package/dist/models/StockOpnameItem.d.ts +27 -0
  85. package/dist/models/Supplier.d.ts +19 -0
  86. package/dist/models/TaxRate.d.ts +13 -0
  87. package/dist/models/Transaction.d.ts +32 -0
  88. package/dist/models/Uom.d.ts +15 -0
  89. package/dist/models/User.d.ts +21 -0
  90. package/dist/services/bomService.d.ts +71 -0
  91. package/dist/services/cartService.d.ts +65 -0
  92. package/dist/services/categoryService.d.ts +54 -0
  93. package/dist/services/customerGroupService.d.ts +47 -0
  94. package/dist/services/customerService.d.ts +133 -0
  95. package/dist/services/documentNumberPolicy.d.ts +15 -0
  96. package/dist/services/expenseService.d.ts +47 -0
  97. package/dist/services/exportAdapter.d.ts +48 -0
  98. package/dist/services/exportService.d.ts +263 -0
  99. package/dist/services/financialSettingService.d.ts +47 -0
  100. package/dist/services/historyService.d.ts +60 -0
  101. package/dist/services/inventoryLogService.d.ts +47 -0
  102. package/dist/services/inventoryService.d.ts +43 -0
  103. package/dist/services/orderItemService.d.ts +47 -0
  104. package/dist/services/orderService.d.ts +161 -0
  105. package/dist/services/payableService.d.ts +51 -0
  106. package/dist/services/priceHistoryService.d.ts +61 -0
  107. package/dist/services/priceTierService.d.ts +47 -0
  108. package/dist/services/pricingService.d.ts +192 -0
  109. package/dist/services/productService.d.ts +59 -0
  110. package/dist/services/promotionService.d.ts +47 -0
  111. package/dist/services/purchaseItemService.d.ts +47 -0
  112. package/dist/services/purchaseOrderItemService.d.ts +47 -0
  113. package/dist/services/purchaseOrderService.d.ts +47 -0
  114. package/dist/services/purchaseService.d.ts +130 -0
  115. package/dist/services/receivableService.d.ts +47 -0
  116. package/dist/services/reportScheduleService.d.ts +47 -0
  117. package/dist/services/reportingService.d.ts +251 -0
  118. package/dist/services/returnItemService.d.ts +47 -0
  119. package/dist/services/returnService.d.ts +123 -0
  120. package/dist/services/roleService.d.ts +47 -0
  121. package/dist/services/saleItemService.d.ts +47 -0
  122. package/dist/services/saleService.d.ts +154 -0
  123. package/dist/services/settlementService.d.ts +68 -0
  124. package/dist/services/shiftService.d.ts +92 -0
  125. package/dist/services/stockAdjustmentService.d.ts +47 -0
  126. package/dist/services/stockOpnameItemService.d.ts +47 -0
  127. package/dist/services/stockOpnameService.d.ts +51 -0
  128. package/dist/services/stockTransferService.d.ts +67 -0
  129. package/dist/services/supplierService.d.ts +51 -0
  130. package/dist/services/taxRateService.d.ts +47 -0
  131. package/dist/services/taxService.d.ts +63 -0
  132. package/dist/services/transactionService.d.ts +109 -0
  133. package/dist/services/uiProductService.d.ts +102 -0
  134. package/dist/services/uiTransactionService.d.ts +68 -0
  135. package/dist/services/uomService.d.ts +53 -0
  136. package/dist/services/userService.d.ts +47 -0
  137. package/dist/stores/cartStore.d.ts +109 -0
  138. package/dist/stores/eventBus.d.ts +55 -0
  139. package/dist/stores/sessionStore.d.ts +108 -0
  140. package/dist/stores/storageAdapter.d.ts +44 -0
  141. package/dist/stores/syncService.d.ts +90 -0
  142. package/dist/stores/syncStore.d.ts +163 -0
  143. package/package.json +82 -0
@@ -0,0 +1,130 @@
1
+ import { PosCore } from '../PosCore';
2
+ import { DbAdapter, QueryOptions } from 'ofcore';
3
+ import { Purchase, PurchaseData } from '../models/Purchase';
4
+ import { PurchaseItem } from '../models/PurchaseItem';
5
+ export interface PurchaseCart {
6
+ supplierId: string;
7
+ items: Array<{
8
+ productId: string;
9
+ quantity: number;
10
+ uomId?: string;
11
+ unitCost: number;
12
+ }>;
13
+ paymentMethod: 'cash' | 'card' | 'bank_transfer' | 'tempo';
14
+ dueDate?: string;
15
+ paymentData?: any;
16
+ note?: string;
17
+ }
18
+ export interface PurchaseReceiveItemInput {
19
+ purchaseOrderItemId?: string;
20
+ productId?: string;
21
+ receivedQuantity: number;
22
+ unitCost?: number;
23
+ uomId?: string | null;
24
+ lotNumber?: string | null;
25
+ serialNumber?: string | null;
26
+ expiryDate?: string | null;
27
+ note?: string | null;
28
+ }
29
+ type PurchaseReceiveOptions = ({
30
+ method: 'cash';
31
+ data: any;
32
+ } | {
33
+ method: 'tempo';
34
+ dueDate: string;
35
+ }) & {
36
+ receivedItems?: PurchaseReceiveItemInput[];
37
+ };
38
+ /** Service interface for Purchase operations. */
39
+ export interface IPurchaseService {
40
+ /** Add new Purchase. */
41
+ addPurchase(data: PurchaseData, tx?: DbAdapter): Promise<Purchase>;
42
+ /** Update existing Purchase. */
43
+ updatePurchase(id: string, data: Partial<PurchaseData>): Promise<Purchase>;
44
+ /** Get all Purchases with complex options. */
45
+ getPurchases(options?: QueryOptions, tx?: DbAdapter): Promise<Purchase[]>;
46
+ /** Get Purchase by ID or options. */
47
+ getPurchase(idOrOptions: string | QueryOptions, tx?: DbAdapter): Promise<Purchase | null>;
48
+ /** Delete Purchase (logical). */
49
+ deletePurchase(id: string, tx?: DbAdapter): Promise<{
50
+ id: string;
51
+ queued: boolean;
52
+ }>;
53
+ /** Duplicate Purchase by ID. */
54
+ duplicatePurchase(originalId: string, tx?: DbAdapter): Promise<Purchase>;
55
+ /** Finalize purchase by ID */
56
+ finalizePurchase(purchaseId: string, options: {
57
+ method: 'cash';
58
+ data: any;
59
+ } | {
60
+ method: 'tempo';
61
+ dueDate: string;
62
+ }, tx?: DbAdapter): Promise<{
63
+ purchase: Purchase;
64
+ queued: boolean;
65
+ }>;
66
+ /** Receive purchase from Purchase Order */
67
+ receivePurchaseFromPO(purchaseOrderId: string, options: PurchaseReceiveOptions): Promise<{
68
+ purchase: Purchase;
69
+ queued: boolean;
70
+ }>;
71
+ /** Create purchase from cart */
72
+ createPurchaseFromCart(cart: PurchaseCart): Promise<{
73
+ purchase: Purchase;
74
+ items: PurchaseItem[];
75
+ }>;
76
+ }
77
+ /** Service implementation for Purchase operations. */
78
+ export declare class PurchaseService implements IPurchaseService {
79
+ private context;
80
+ private dbAdapter;
81
+ private syncStore?;
82
+ private docNumberPolicy;
83
+ private readonly defaultBaseCurrencyCode;
84
+ /**
85
+ * Initialize PurchaseService.
86
+ * @param context - PosCore context
87
+ */
88
+ constructor(context: PosCore);
89
+ private roundCurrencyAmount;
90
+ private resolveCurrencySnapshot;
91
+ private getCostingMethod;
92
+ private applyCostingPolicy;
93
+ /** Add new Purchase. */
94
+ addPurchase(data: PurchaseData, tx?: DbAdapter): Promise<Purchase>;
95
+ /** Update existing Purchase. */
96
+ updatePurchase(id: string, data: Partial<PurchaseData>, tx?: DbAdapter): Promise<Purchase>;
97
+ /** Get all Purchases with complex options. */
98
+ getPurchases(options?: QueryOptions, tx?: DbAdapter): Promise<Purchase[]>;
99
+ /** Get Purchase by ID or options. */
100
+ getPurchase(idOrOptions: string | QueryOptions, tx?: DbAdapter): Promise<Purchase | null>;
101
+ /** Delete Purchase (logical). */
102
+ deletePurchase(id: string, tx?: DbAdapter): Promise<{
103
+ id: string;
104
+ queued: boolean;
105
+ }>;
106
+ /** Duplicate Purchase by ID. */
107
+ duplicatePurchase(originalId: string, tx?: DbAdapter): Promise<Purchase>;
108
+ /** Finalize purchase by ID */
109
+ finalizePurchase(purchaseId: string, options: {
110
+ method: 'cash';
111
+ data: any;
112
+ } | {
113
+ method: 'tempo';
114
+ dueDate: string;
115
+ }, tx?: DbAdapter): Promise<{
116
+ purchase: Purchase;
117
+ queued: boolean;
118
+ }>;
119
+ /** Receive purchase from Purchase Order */
120
+ receivePurchaseFromPO(purchaseOrderId: string, options: PurchaseReceiveOptions, tx?: DbAdapter): Promise<{
121
+ purchase: Purchase;
122
+ queued: boolean;
123
+ }>;
124
+ /** Create purchase from cart */
125
+ createPurchaseFromCart(cart: PurchaseCart): Promise<{
126
+ purchase: Purchase;
127
+ items: PurchaseItem[];
128
+ }>;
129
+ }
130
+ export {};
@@ -0,0 +1,47 @@
1
+ import { PosCore } from '../PosCore';
2
+ import { DbAdapter, QueryOptions } from 'ofcore';
3
+ import { Receivable, ReceivableData } from '../models/Receivable';
4
+ /** Service interface for Receivable operations. */
5
+ export interface IReceivableService {
6
+ /** Add new Receivable. */
7
+ addReceivable(data: ReceivableData, tx?: DbAdapter): Promise<Receivable>;
8
+ /** Update existing Receivable. */
9
+ updateReceivable(id: string, data: Partial<ReceivableData>): Promise<Receivable>;
10
+ /** Get all Receivables with complex options. */
11
+ getReceivables(options?: QueryOptions, tx?: DbAdapter): Promise<Receivable[]>;
12
+ /** Get Receivable by ID or options. */
13
+ getReceivable(idOrOptions: string | QueryOptions, tx?: DbAdapter): Promise<Receivable | null>;
14
+ /** Delete Receivable (logical). */
15
+ deleteReceivable(id: string, tx?: DbAdapter): Promise<{
16
+ id: string;
17
+ queued: boolean;
18
+ }>;
19
+ /** Duplicate Receivable by ID. */
20
+ duplicateReceivable(originalId: string, tx?: DbAdapter): Promise<Receivable>;
21
+ }
22
+ /** Service implementation for Receivable operations. */
23
+ export declare class ReceivableService implements IReceivableService {
24
+ private context;
25
+ private dbAdapter;
26
+ private syncStore?;
27
+ /**
28
+ * Initialize ReceivableService.
29
+ * @param context - PosCore context
30
+ */
31
+ constructor(context: PosCore);
32
+ /** Add new Receivable. */
33
+ addReceivable(data: ReceivableData, tx?: DbAdapter): Promise<Receivable>;
34
+ /** Update existing Receivable. */
35
+ updateReceivable(id: string, data: Partial<ReceivableData>, tx?: DbAdapter): Promise<Receivable>;
36
+ /** Get all Receivables with complex options. */
37
+ getReceivables(options?: QueryOptions, tx?: DbAdapter): Promise<Receivable[]>;
38
+ /** Get Receivable by ID or options. */
39
+ getReceivable(idOrOptions: string | QueryOptions, tx?: DbAdapter): Promise<Receivable | null>;
40
+ /** Delete Receivable (logical). */
41
+ deleteReceivable(id: string, tx?: DbAdapter): Promise<{
42
+ id: string;
43
+ queued: boolean;
44
+ }>;
45
+ /** Duplicate Receivable by ID. */
46
+ duplicateReceivable(originalId: string, tx?: DbAdapter): Promise<Receivable>;
47
+ }
@@ -0,0 +1,47 @@
1
+ import { PosCore } from '../PosCore';
2
+ import { DbAdapter, QueryOptions } from 'ofcore';
3
+ import { ReportSchedule, ReportScheduleData } from '../models/ReportSchedule';
4
+ /** Service interface for ReportSchedule operations. */
5
+ export interface IReportScheduleService {
6
+ /** Add new ReportSchedule. */
7
+ addReportSchedule(data: ReportScheduleData, tx?: DbAdapter): Promise<ReportSchedule>;
8
+ /** Update existing ReportSchedule. */
9
+ updateReportSchedule(id: string, data: Partial<ReportScheduleData>): Promise<ReportSchedule>;
10
+ /** Get all ReportSchedules with complex options. */
11
+ getReportSchedules(options?: QueryOptions, tx?: DbAdapter): Promise<ReportSchedule[]>;
12
+ /** Get ReportSchedule by ID or options. */
13
+ getReportSchedule(idOrOptions: string | QueryOptions, tx?: DbAdapter): Promise<ReportSchedule | null>;
14
+ /** Delete ReportSchedule (logical). */
15
+ deleteReportSchedule(id: string, tx?: DbAdapter): Promise<{
16
+ id: string;
17
+ queued: boolean;
18
+ }>;
19
+ /** Duplicate ReportSchedule by ID. */
20
+ duplicateReportSchedule(originalId: string, tx?: DbAdapter): Promise<ReportSchedule>;
21
+ }
22
+ /** Service implementation for ReportSchedule operations. */
23
+ export declare class ReportScheduleService implements IReportScheduleService {
24
+ private context;
25
+ private dbAdapter;
26
+ private syncStore?;
27
+ /**
28
+ * Initialize ReportScheduleService.
29
+ * @param context - PosCore context
30
+ */
31
+ constructor(context: PosCore);
32
+ /** Add new ReportSchedule. */
33
+ addReportSchedule(data: ReportScheduleData, tx?: DbAdapter): Promise<ReportSchedule>;
34
+ /** Update existing ReportSchedule. */
35
+ updateReportSchedule(id: string, data: Partial<ReportScheduleData>, tx?: DbAdapter): Promise<ReportSchedule>;
36
+ /** Get all ReportSchedules with complex options. */
37
+ getReportSchedules(options?: QueryOptions, tx?: DbAdapter): Promise<ReportSchedule[]>;
38
+ /** Get ReportSchedule by ID or options. */
39
+ getReportSchedule(idOrOptions: string | QueryOptions, tx?: DbAdapter): Promise<ReportSchedule | null>;
40
+ /** Delete ReportSchedule (logical). */
41
+ deleteReportSchedule(id: string, tx?: DbAdapter): Promise<{
42
+ id: string;
43
+ queued: boolean;
44
+ }>;
45
+ /** Duplicate ReportSchedule by ID. */
46
+ duplicateReportSchedule(originalId: string, tx?: DbAdapter): Promise<ReportSchedule>;
47
+ }
@@ -0,0 +1,251 @@
1
+ import { PosCore } from '../PosCore';
2
+ import { Product } from '../models/Product';
3
+ export interface DailyReport {
4
+ date: string;
5
+ totalSalesCash: number;
6
+ totalReturnsCash: number;
7
+ totalExpenses: number;
8
+ netCashMovement: number;
9
+ startingCash: number;
10
+ systemEndingCash: number;
11
+ physicalEndingCash: number;
12
+ cashDifference: number;
13
+ shifts: any[];
14
+ }
15
+ export interface DailyReconciliationPack {
16
+ date: string;
17
+ salesCashIn: number;
18
+ salesReturnCashOut: number;
19
+ purchaseCashOut: number;
20
+ purchaseReturnCashIn: number;
21
+ expenseCashOut: number;
22
+ cashAdjustmentIn: number;
23
+ cashAdjustmentOut: number;
24
+ totalCashIn: number;
25
+ totalCashOut: number;
26
+ netCashMovement: number;
27
+ inventoryAdjustmentEntries: number;
28
+ inventoryAdjustmentInQty: number;
29
+ inventoryAdjustmentOutQty: number;
30
+ inventoryAdjustmentNetQty: number;
31
+ }
32
+ export interface BranchPerformancePack {
33
+ date: string;
34
+ branchId: string;
35
+ totalSalesCash: number;
36
+ totalReturnsCash: number;
37
+ totalExpenses: number;
38
+ totalCashIn: number;
39
+ totalCashOut: number;
40
+ netCashMovement: number;
41
+ shiftsClosed: number;
42
+ totalCashDifferenceAbs: number;
43
+ stockDiscrepancyItems: number;
44
+ stockDiscrepancyAbsQty: number;
45
+ anomalyIndicators: string[];
46
+ }
47
+ export interface DailyExceptionReport {
48
+ date: string;
49
+ voidEvents: Array<{
50
+ transactionId: string;
51
+ referenceType: string;
52
+ referenceId: string;
53
+ amount: number;
54
+ date: string;
55
+ }>;
56
+ refundExceptions: Array<{
57
+ returnId: string;
58
+ type: string;
59
+ refundAmount: number;
60
+ actualRefund: number;
61
+ status: string;
62
+ date: string;
63
+ }>;
64
+ stockDiscrepancies: Array<{
65
+ stockOpnameId: string;
66
+ productId: string;
67
+ difference: number;
68
+ date: string;
69
+ }>;
70
+ }
71
+ export interface SupplierPayableAging {
72
+ supplierId: string;
73
+ openPayableCount: number;
74
+ totalOutstanding: number;
75
+ overduePayableCount: number;
76
+ overdueOutstanding: number;
77
+ maxDaysPastDue: number;
78
+ avgDaysPastDue: number;
79
+ }
80
+ export interface CustomerReceivableAging {
81
+ customerId: string;
82
+ openReceivableCount: number;
83
+ totalOutstanding: number;
84
+ overdueReceivableCount: number;
85
+ overdueOutstanding: number;
86
+ maxDaysPastDue: number;
87
+ escalationLevel: 'none' | 'warning' | 'critical';
88
+ }
89
+ export interface OverduePurchaseOrderAlert {
90
+ purchaseOrderId: string;
91
+ supplierId: string;
92
+ status: string;
93
+ expectedDeliveryDate: string;
94
+ daysOverdue: number;
95
+ total: number;
96
+ }
97
+ export interface SupplierPerformanceBaseline {
98
+ supplierId: string;
99
+ rating: number;
100
+ grade: 'A' | 'B' | 'C' | 'D';
101
+ openPayableCount: number;
102
+ overduePayableRatio: number;
103
+ openPurchaseOrderCount: number;
104
+ overdueOrderCount: number;
105
+ overdueOrderRatio: number;
106
+ }
107
+ export interface TopProduct {
108
+ productId: string;
109
+ productName: string;
110
+ quantity: number;
111
+ totalSales: number;
112
+ }
113
+ /**
114
+ * Ringkasan data penjualan.
115
+ * @property totalTransactions - jumlah transaksi.
116
+ * @property totalRevenue - total pendapatan.
117
+ */
118
+ export interface SalesAggregate {
119
+ totalTransactions: number;
120
+ totalRevenue: number;
121
+ }
122
+ /**
123
+ * Representasi jumlah transaksi per jam.
124
+ * @property hour - jam dalam format '00'..'23'.
125
+ * @property count - jumlah transaksi pada jam tersebut.
126
+ */
127
+ export interface TransactionsByHour {
128
+ hour: string;
129
+ count: number;
130
+ }
131
+ /**
132
+ * Representasi pendapatan per pelanggan.
133
+ * @property customerId - ID pelanggan.
134
+ * @property revenue - total pendapatan dari pelanggan.
135
+ */
136
+ export interface RevenueByCustomer {
137
+ customerId: string;
138
+ revenue: number;
139
+ }
140
+ /**
141
+ * Antarmuka untuk layanan pelaporan.
142
+ * Menyediakan metode untuk mendapatkan agregat penjualan, transaksi per jam, dan pendapatan per pelanggan.
143
+ */
144
+ export interface IReportingService {
145
+ /**
146
+ * Dapatkan ringkasan penjualan pada rentang tanggal.
147
+ * @param startDate - tanggal mulai.
148
+ * @param endDate - tanggal akhir.
149
+ * @returns Promise dengan SalesAggregate.
150
+ */
151
+ getSalesAggregate(startDate: Date, endDate: Date): Promise<SalesAggregate>;
152
+ /**
153
+ * Dapatkan jumlah transaksi per jam pada rentang tanggal.
154
+ * @param startDate - tanggal mulai.
155
+ * @param endDate - tanggal akhir.
156
+ * @returns Promise dengan array TransactionsByHour.
157
+ */
158
+ getTransactionsByHour(startDate: Date, endDate: Date): Promise<TransactionsByHour[]>;
159
+ /**
160
+ * Dapatkan pendapatan per pelanggan pada rentang tanggal.
161
+ * @param startDate - tanggal mulai.
162
+ * @param endDate - tanggal akhir.
163
+ * @returns Promise dengan array RevenueByCustomer.
164
+ */
165
+ getRevenueByCustomer(startDate: Date, endDate: Date): Promise<RevenueByCustomer[]>;
166
+ getTodaySales(): Promise<{
167
+ total: number;
168
+ }>;
169
+ getSalesThisMonth(): Promise<{
170
+ total: number;
171
+ }>;
172
+ getLowStockProducts(limit?: number, threshold?: number): Promise<Array<{
173
+ productId: string;
174
+ stock: number;
175
+ product: Product;
176
+ }>>;
177
+ getActiveShift(): Promise<any>;
178
+ getTopSellingProducts(limit?: number): Promise<TopProduct[]>;
179
+ getDailySalesLast7Days(): Promise<{
180
+ date: string;
181
+ total: number;
182
+ }[]>;
183
+ getDailyReconciliationPack(date: string): Promise<DailyReconciliationPack>;
184
+ getBranchPerformancePack(date: string): Promise<BranchPerformancePack>;
185
+ getDailyExceptionReport(date: string): Promise<DailyExceptionReport>;
186
+ getSupplierPayableAging(asOfDate?: string): Promise<SupplierPayableAging[]>;
187
+ getCustomerReceivableAging(asOfDate?: string): Promise<CustomerReceivableAging[]>;
188
+ getOverduePurchaseOrderAlerts(asOfDate?: string): Promise<OverduePurchaseOrderAlert[]>;
189
+ getSupplierPerformanceBaseline(asOfDate?: string): Promise<SupplierPerformanceBaseline[]>;
190
+ }
191
+ /**
192
+ * Implementasi layanan pelaporan.
193
+ * Menyediakan operasi untuk mengambil data pelaporan dari database.
194
+ */
195
+ export declare class ReportingService implements IReportingService {
196
+ private context;
197
+ private validateDateRange;
198
+ private dbAdapter;
199
+ /**
200
+ * Inisialisasi layanan pelaporan.
201
+ * @param context - instance PosCore yang berisi registry dan SyncStore.
202
+ */
203
+ constructor(context: PosCore);
204
+ /**
205
+ * Dapatkan ringkasan penjualan pada rentang tanggal.
206
+ * @param startDate - tanggal mulai.
207
+ * @param endDate - tanggal akhir.
208
+ * @returns Promise dengan SalesAggregate berisi jumlah transaksi dan total pendapatan.
209
+ */
210
+ getSalesAggregate(startDate: Date, endDate: Date): Promise<SalesAggregate>;
211
+ /**
212
+ * Dapatkan jumlah transaksi per jam pada rentang tanggal.
213
+ * @param startDate - tanggal mulai.
214
+ * @param endDate - tanggal akhir.
215
+ * @returns Promise dengan array TransactionsByHour.
216
+ */
217
+ getTransactionsByHour(startDate: Date, endDate: Date): Promise<TransactionsByHour[]>;
218
+ /**
219
+ * Dapatkan pendapatan per pelanggan pada rentang tanggal.
220
+ * @param startDate - tanggal mulai.
221
+ * @param endDate - tanggal akhir.
222
+ * @returns Promise dengan array RevenueByCustomer.
223
+ */
224
+ getRevenueByCustomer(startDate: Date, endDate: Date): Promise<RevenueByCustomer[]>;
225
+ getTodaySales(): Promise<{
226
+ total: number;
227
+ }>;
228
+ getSalesThisMonth(): Promise<{
229
+ total: number;
230
+ }>;
231
+ getLowStockProducts(limit?: number, threshold?: number): Promise<{
232
+ productId: string;
233
+ stock: number;
234
+ product: Product;
235
+ }[]>;
236
+ getActiveShift(): Promise<{} | null>;
237
+ getTopSellingProducts(limit?: number): Promise<TopProduct[]>;
238
+ getDailySalesLast7Days(): Promise<{
239
+ date: string;
240
+ total: number;
241
+ }[]>;
242
+ getDailyReport(date: string): Promise<DailyReport>;
243
+ getDailyReconciliationPack(date: string): Promise<DailyReconciliationPack>;
244
+ getBranchPerformancePack(date: string): Promise<BranchPerformancePack>;
245
+ getDailyExceptionReport(date: string): Promise<DailyExceptionReport>;
246
+ getSupplierPayableAging(asOfDate?: string): Promise<SupplierPayableAging[]>;
247
+ getCustomerReceivableAging(asOfDate?: string): Promise<CustomerReceivableAging[]>;
248
+ getOverduePurchaseOrderAlerts(asOfDate?: string): Promise<OverduePurchaseOrderAlert[]>;
249
+ getSupplierPerformanceBaseline(asOfDate?: string): Promise<SupplierPerformanceBaseline[]>;
250
+ private diffInDays;
251
+ }
@@ -0,0 +1,47 @@
1
+ import { PosCore } from '../PosCore';
2
+ import { DbAdapter, QueryOptions } from 'ofcore';
3
+ import { ReturnItem, ReturnItemData } from '../models/ReturnItem';
4
+ /** Service interface for ReturnItem operations. */
5
+ export interface IReturnItemService {
6
+ /** Add new ReturnItem. */
7
+ addReturnItem(data: ReturnItemData, tx?: DbAdapter): Promise<ReturnItem>;
8
+ /** Update existing ReturnItem. */
9
+ updateReturnItem(id: string, data: Partial<ReturnItemData>): Promise<ReturnItem>;
10
+ /** Get all ReturnItems with complex options. */
11
+ getReturnItems(options?: QueryOptions, tx?: DbAdapter): Promise<ReturnItem[]>;
12
+ /** Get ReturnItem by ID or options. */
13
+ getReturnItem(idOrOptions: string | QueryOptions, tx?: DbAdapter): Promise<ReturnItem | null>;
14
+ /** Delete ReturnItem (logical). */
15
+ deleteReturnItem(id: string, tx?: DbAdapter): Promise<{
16
+ id: string;
17
+ queued: boolean;
18
+ }>;
19
+ /** Duplicate ReturnItem by ID. */
20
+ duplicateReturnItem(originalId: string, tx?: DbAdapter): Promise<ReturnItem>;
21
+ }
22
+ /** Service implementation for ReturnItem operations. */
23
+ export declare class ReturnItemService implements IReturnItemService {
24
+ private context;
25
+ private dbAdapter;
26
+ private syncStore?;
27
+ /**
28
+ * Initialize ReturnItemService.
29
+ * @param context - PosCore context
30
+ */
31
+ constructor(context: PosCore);
32
+ /** Add new ReturnItem. */
33
+ addReturnItem(data: ReturnItemData, tx?: DbAdapter): Promise<ReturnItem>;
34
+ /** Update existing ReturnItem. */
35
+ updateReturnItem(id: string, data: Partial<ReturnItemData>, tx?: DbAdapter): Promise<ReturnItem>;
36
+ /** Get all ReturnItems with complex options. */
37
+ getReturnItems(options?: QueryOptions, tx?: DbAdapter): Promise<ReturnItem[]>;
38
+ /** Get ReturnItem by ID or options. */
39
+ getReturnItem(idOrOptions: string | QueryOptions, tx?: DbAdapter): Promise<ReturnItem | null>;
40
+ /** Delete ReturnItem (logical). */
41
+ deleteReturnItem(id: string, tx?: DbAdapter): Promise<{
42
+ id: string;
43
+ queued: boolean;
44
+ }>;
45
+ /** Duplicate ReturnItem by ID. */
46
+ duplicateReturnItem(originalId: string, tx?: DbAdapter): Promise<ReturnItem>;
47
+ }
@@ -0,0 +1,123 @@
1
+ import { PosCore } from '../PosCore';
2
+ import { DbAdapter, QueryOptions } from 'ofcore';
3
+ import { Return, ReturnData } from '../models/Return';
4
+ import { ReturnType } from '../models/Return';
5
+ export interface ProcessReturnInput {
6
+ /** saleId atau purchaseId – salah satu wajib diisi */
7
+ saleId?: string | null;
8
+ purchaseId?: string | null;
9
+ type: ReturnType;
10
+ reason?: string;
11
+ /** Daftar barang yang diretur */
12
+ items: Array<{
13
+ productId: string;
14
+ quantity: number;
15
+ /** Apakah barang dikembalikan ke stok? Default = true */
16
+ restock?: boolean;
17
+ /** Alasan kalau tidak restock */
18
+ restockNote?: string;
19
+ }>;
20
+ /** Jumlah yang SEHARUSNYA direfund (100%) */
21
+ refundAmount: number;
22
+ /** Jumlah yang BENAR-BENAR diterima (untuk supplier nakal) – default = refundAmount */
23
+ actualRefund?: number;
24
+ /** Metode refund yang benar-benar diterima */
25
+ refundMethod?: 'cash' | 'bank_transfer' | 'voucher' | 'credit_note' | 'deduct_next_purchase' | null;
26
+ /** Penanda numerik tambahan untuk actualRefund */
27
+ creditNoteNumber?: string;
28
+ refundNote?: number;
29
+ refundReceivedDate?: string;
30
+ approval?: {
31
+ approvedBy: string;
32
+ reason: string;
33
+ approverRole?: string;
34
+ };
35
+ }
36
+ /** Service interface for Return operations. */
37
+ export interface IReturnService {
38
+ /** Add new Return. */
39
+ addReturn(data: ReturnData, tx?: DbAdapter): Promise<Return>;
40
+ /** Update existing Return. */
41
+ updateReturn(id: string, data: Partial<ReturnData>): Promise<Return>;
42
+ /** Get all Returns with complex options. */
43
+ getReturns(options?: QueryOptions, tx?: DbAdapter): Promise<Return[]>;
44
+ /** Get Return by ID or options. */
45
+ getReturn(idOrOptions: string | QueryOptions, tx?: DbAdapter): Promise<Return | null>;
46
+ /** Delete Return (logical). */
47
+ deleteReturn(id: string, tx?: DbAdapter): Promise<{
48
+ id: string;
49
+ queued: boolean;
50
+ }>;
51
+ /** Duplicate Return by ID. */
52
+ duplicateReturn(originalId: string, tx?: DbAdapter): Promise<Return>;
53
+ /** Finalize purchase by ID */
54
+ processReturn(input: ProcessReturnInput): Promise<{
55
+ returnId: string;
56
+ queued: boolean;
57
+ }>;
58
+ cancelReturn(returnId: string, reasonOrOptions?: string | {
59
+ reason?: string;
60
+ approval?: {
61
+ approvedBy: string;
62
+ reason: string;
63
+ approverRole?: string;
64
+ };
65
+ }): Promise<{
66
+ returnId: string;
67
+ queued: boolean;
68
+ }>;
69
+ getReturnsByReference(type: 'sale_return' | 'purchase_return', referenceId: string): Promise<Return[]>;
70
+ getReturnableQuantity(referenceType: 'sale' | 'purchase', referenceId: string, productId: string): Promise<number>;
71
+ }
72
+ /** Service implementation for Return operations. */
73
+ export declare class ReturnService implements IReturnService {
74
+ private context;
75
+ private dbAdapter;
76
+ private syncStore?;
77
+ /**
78
+ * Initialize ReturnService.
79
+ * @param context - PosCore context
80
+ */
81
+ constructor(context: PosCore);
82
+ /** Add new Return. */
83
+ addReturn(data: ReturnData, tx?: DbAdapter): Promise<Return>;
84
+ /** Update existing Return. */
85
+ updateReturn(id: string, data: Partial<ReturnData>, tx?: DbAdapter): Promise<Return>;
86
+ /** Get all Returns with complex options. */
87
+ getReturns(options?: QueryOptions, tx?: DbAdapter): Promise<Return[]>;
88
+ /** Get Return by ID or options. */
89
+ getReturn(idOrOptions: string | QueryOptions, tx?: DbAdapter): Promise<Return | null>;
90
+ /** Delete Return (logical). */
91
+ deleteReturn(id: string, tx?: DbAdapter): Promise<{
92
+ id: string;
93
+ queued: boolean;
94
+ }>;
95
+ /** Duplicate Return by ID. */
96
+ duplicateReturn(originalId: string, tx?: DbAdapter): Promise<Return>;
97
+ private getReferenceItem;
98
+ private getCurrentRole;
99
+ private normalizeRoles;
100
+ private validateApproval;
101
+ private getFraudGuardPolicy;
102
+ private shouldTriggerFraudGuardForRefund;
103
+ private shouldTriggerFraudGuardForCancel;
104
+ processReturn(input: ProcessReturnInput): Promise<{
105
+ returnId: string;
106
+ queued: boolean;
107
+ }>;
108
+ cancelReturn(returnId: string, reasonOrOptions?: string | {
109
+ reason?: string;
110
+ approval?: {
111
+ approvedBy: string;
112
+ reason: string;
113
+ approverRole?: string;
114
+ };
115
+ }): Promise<{
116
+ returnId: string;
117
+ queued: boolean;
118
+ }>;
119
+ getReturnsByReference(type: ReturnType, referenceId: string): Promise<Return[]>;
120
+ getReturnableQuantity(referenceType: 'sale' | 'purchase', referenceId: string, productId: string): Promise<number>;
121
+ private calculateTotalReturnedQty;
122
+ private getOriginalQuantity;
123
+ }