types-salon-management 1.0.62 → 1.0.64

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 (33) hide show
  1. package/dist/api/inventory/index.d.ts +2 -0
  2. package/dist/api/inventory/index.d.ts.map +1 -1
  3. package/dist/api/inventory/index.js +2 -0
  4. package/dist/api/inventory/index.js.map +1 -1
  5. package/dist/api/inventory/inventory.constants.d.ts +3 -1
  6. package/dist/api/inventory/inventory.constants.d.ts.map +1 -1
  7. package/dist/api/inventory/inventory.constants.js +4 -2
  8. package/dist/api/inventory/inventory.constants.js.map +1 -1
  9. package/dist/api/inventory/product.dto.d.ts +6 -1
  10. package/dist/api/inventory/product.dto.d.ts.map +1 -1
  11. package/dist/api/inventory/product.requests.d.ts +11 -2
  12. package/dist/api/inventory/product.requests.d.ts.map +1 -1
  13. package/dist/api/inventory/stock-movement.dto.d.ts +24 -0
  14. package/dist/api/inventory/stock-movement.dto.d.ts.map +1 -0
  15. package/dist/api/inventory/stock-movement.dto.js +3 -0
  16. package/dist/api/inventory/stock-movement.dto.js.map +1 -0
  17. package/dist/api/inventory/stock-movement.requests.d.ts +26 -0
  18. package/dist/api/inventory/stock-movement.requests.d.ts.map +1 -0
  19. package/dist/api/inventory/stock-movement.requests.js +3 -0
  20. package/dist/api/inventory/stock-movement.requests.js.map +1 -0
  21. package/dist/enum/movement-category.d.ts +1 -0
  22. package/dist/enum/movement-category.d.ts.map +1 -1
  23. package/dist/enum/movement-category.js +1 -0
  24. package/dist/enum/movement-category.js.map +1 -1
  25. package/package.json +1 -1
  26. package/src/api/inventory/index.ts +2 -0
  27. package/src/api/inventory/inventory.constants.ts +4 -1
  28. package/src/api/inventory/product.dto.ts +7 -1
  29. package/src/api/inventory/product.requests.ts +12 -2
  30. package/src/api/inventory/stock-movement.dto.ts +25 -0
  31. package/src/api/inventory/stock-movement.requests.ts +29 -0
  32. package/src/enum/movement-category.ts +1 -0
  33. package/types-salon-management-1.0.63.tgz +0 -0
@@ -9,4 +9,6 @@ export * from './warehouse.dto';
9
9
  export * from './warehouse.requests';
10
10
  export * from './product.dto';
11
11
  export * from './product.requests';
12
+ export * from './stock-movement.dto';
13
+ export * from './stock-movement.requests';
12
14
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/api/inventory/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/api/inventory/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,2BAA2B,CAAC"}
@@ -25,4 +25,6 @@ __exportStar(require("./warehouse.dto"), exports);
25
25
  __exportStar(require("./warehouse.requests"), exports);
26
26
  __exportStar(require("./product.dto"), exports);
27
27
  __exportStar(require("./product.requests"), exports);
28
+ __exportStar(require("./stock-movement.dto"), exports);
29
+ __exportStar(require("./stock-movement.requests"), exports);
28
30
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/api/inventory/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wDAAsC;AACtC,yDAAuC;AACvC,8DAA4C;AAC5C,8CAA4B;AAC5B,mDAAiC;AACjC,iDAA+B;AAC/B,sDAAoC;AACpC,kDAAgC;AAChC,uDAAqC;AACrC,gDAA8B;AAC9B,qDAAmC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/api/inventory/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wDAAsC;AACtC,yDAAuC;AACvC,8DAA4C;AAC5C,8CAA4B;AAC5B,mDAAiC;AACjC,iDAA+B;AAC/B,sDAAoC;AACpC,kDAAgC;AAChC,uDAAqC;AACrC,gDAA8B;AAC9B,qDAAmC;AACnC,uDAAqC;AACrC,4DAA0C"}
@@ -11,7 +11,7 @@ export declare const ProductIntent: {
11
11
  readonly BOTH: "both";
12
12
  };
13
13
  export type ProductIntent = (typeof ProductIntent)[keyof typeof ProductIntent];
14
- /** Location default product tax, or one custom tax on the Product. */
14
+ /** Location default product tax, or a per-location snapshot when any location differs. */
15
15
  export declare const ProductTaxMode: {
16
16
  readonly DEFAULT: "default";
17
17
  readonly CUSTOM: "custom";
@@ -34,4 +34,6 @@ export declare const ProductUnitMeasurement: {
34
34
  readonly BOX: "box";
35
35
  };
36
36
  export type ProductUnitMeasurement = (typeof ProductUnitMeasurement)[keyof typeof ProductUnitMeasurement];
37
+ /** `ListProductsQuery.categoryId` / `brandId`: only rows with that FK null. Omit the param for All. */
38
+ export declare const ProductMasterFilterNone: "none";
37
39
  //# sourceMappingURL=inventory.constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"inventory.constants.d.ts","sourceRoot":"","sources":["../../../src/api/inventory/inventory.constants.ts"],"names":[],"mappings":"AAAA,oDAAoD;AACpD,eAAO,MAAM,uBAAuB;;;CAG1B,CAAC;AAEX,MAAM,MAAM,uBAAuB,GACjC,CAAC,OAAO,uBAAuB,CAAC,CAAC,MAAM,OAAO,uBAAuB,CAAC,CAAC;AAEzE,2DAA2D;AAC3D,eAAO,MAAM,aAAa;;;;CAIhB,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,OAAO,aAAa,CAAC,CAAC;AAE/E,sEAAsE;AACtE,eAAO,MAAM,cAAc;;;CAGjB,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,OAAO,cAAc,CAAC,CAAC;AAElF,kDAAkD;AAClD,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;CAczB,CAAC;AAEX,MAAM,MAAM,sBAAsB,GAChC,CAAC,OAAO,sBAAsB,CAAC,CAAC,MAAM,OAAO,sBAAsB,CAAC,CAAC"}
1
+ {"version":3,"file":"inventory.constants.d.ts","sourceRoot":"","sources":["../../../src/api/inventory/inventory.constants.ts"],"names":[],"mappings":"AAAA,oDAAoD;AACpD,eAAO,MAAM,uBAAuB;;;CAG1B,CAAC;AAEX,MAAM,MAAM,uBAAuB,GACjC,CAAC,OAAO,uBAAuB,CAAC,CAAC,MAAM,OAAO,uBAAuB,CAAC,CAAC;AAEzE,2DAA2D;AAC3D,eAAO,MAAM,aAAa;;;;CAIhB,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,OAAO,aAAa,CAAC,CAAC;AAE/E,0FAA0F;AAC1F,eAAO,MAAM,cAAc;;;CAGjB,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,OAAO,cAAc,CAAC,CAAC;AAElF,kDAAkD;AAClD,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;CAczB,CAAC;AAEX,MAAM,MAAM,sBAAsB,GAChC,CAAC,OAAO,sBAAsB,CAAC,CAAC,MAAM,OAAO,sBAAsB,CAAC,CAAC;AAEvE,uGAAuG;AACvG,eAAO,MAAM,uBAAuB,QAAkB,CAAC"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ProductUnitMeasurement = exports.ProductTaxMode = exports.ProductIntent = exports.InventoryCreationSource = void 0;
3
+ exports.ProductMasterFilterNone = exports.ProductUnitMeasurement = exports.ProductTaxMode = exports.ProductIntent = exports.InventoryCreationSource = void 0;
4
4
  /** How an inventory master record came to exist. */
5
5
  exports.InventoryCreationSource = {
6
6
  FORM: 'form',
@@ -12,7 +12,7 @@ exports.ProductIntent = {
12
12
  INTERNAL: 'internal',
13
13
  BOTH: 'both',
14
14
  };
15
- /** Location default product tax, or one custom tax on the Product. */
15
+ /** Location default product tax, or a per-location snapshot when any location differs. */
16
16
  exports.ProductTaxMode = {
17
17
  DEFAULT: 'default',
18
18
  CUSTOM: 'custom',
@@ -33,4 +33,6 @@ exports.ProductUnitMeasurement = {
33
33
  PCS: 'pcs',
34
34
  BOX: 'box',
35
35
  };
36
+ /** `ListProductsQuery.categoryId` / `brandId`: only rows with that FK null. Omit the param for All. */
37
+ exports.ProductMasterFilterNone = 'none';
36
38
  //# sourceMappingURL=inventory.constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"inventory.constants.js","sourceRoot":"","sources":["../../../src/api/inventory/inventory.constants.ts"],"names":[],"mappings":";;;AAAA,oDAAoD;AACvC,QAAA,uBAAuB,GAAG;IACrC,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,QAAQ;CACR,CAAC;AAKX,2DAA2D;AAC9C,QAAA,aAAa,GAAG;IAC3B,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,UAAU;IACpB,IAAI,EAAE,MAAM;CACJ,CAAC;AAIX,sEAAsE;AACzD,QAAA,cAAc,GAAG;IAC5B,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,QAAQ;CACR,CAAC;AAIX,kDAAkD;AACrC,QAAA,sBAAsB,GAAG;IACpC,EAAE,EAAE,IAAI;IACR,CAAC,EAAE,GAAG;IACN,EAAE,EAAE,IAAI;IACR,EAAE,EAAE,IAAI;IACR,CAAC,EAAE,GAAG;IACN,EAAE,EAAE,IAAI;IACR,EAAE,EAAE,IAAI;IACR,EAAE,EAAE,IAAI;IACR,EAAE,EAAE,IAAI;IACR,EAAE,EAAE,IAAI;IACR,CAAC,EAAE,GAAG;IACN,GAAG,EAAE,KAAK;IACV,GAAG,EAAE,KAAK;CACF,CAAC"}
1
+ {"version":3,"file":"inventory.constants.js","sourceRoot":"","sources":["../../../src/api/inventory/inventory.constants.ts"],"names":[],"mappings":";;;AAAA,oDAAoD;AACvC,QAAA,uBAAuB,GAAG;IACrC,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,QAAQ;CACR,CAAC;AAKX,2DAA2D;AAC9C,QAAA,aAAa,GAAG;IAC3B,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,UAAU;IACpB,IAAI,EAAE,MAAM;CACJ,CAAC;AAIX,0FAA0F;AAC7E,QAAA,cAAc,GAAG;IAC5B,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,QAAQ;CACR,CAAC;AAIX,kDAAkD;AACrC,QAAA,sBAAsB,GAAG;IACpC,EAAE,EAAE,IAAI;IACR,CAAC,EAAE,GAAG;IACN,EAAE,EAAE,IAAI;IACR,EAAE,EAAE,IAAI;IACR,CAAC,EAAE,GAAG;IACN,EAAE,EAAE,IAAI;IACR,EAAE,EAAE,IAAI;IACR,EAAE,EAAE,IAAI;IACR,EAAE,EAAE,IAAI;IACR,EAAE,EAAE,IAAI;IACR,CAAC,EAAE,GAAG;IACN,GAAG,EAAE,KAAK;IACV,GAAG,EAAE,KAAK;CACF,CAAC;AAKX,uGAAuG;AAC1F,QAAA,uBAAuB,GAAG,MAAe,CAAC"}
@@ -20,6 +20,11 @@ export interface StockPositionDto {
20
20
  minimumOrderLevel: number;
21
21
  warningStockLevel: number;
22
22
  }
23
+ /** Present only when taxMode is custom — one row per company location. taxId null = no tax. */
24
+ export interface ProductLocationTaxDto {
25
+ locationId: string;
26
+ taxId: string | null;
27
+ }
23
28
  /** Full catalog identity for list and detail — not a slim stub. */
24
29
  export interface ProductSummaryDto {
25
30
  id: string;
@@ -27,7 +32,7 @@ export interface ProductSummaryDto {
27
32
  intent: ProductIntent;
28
33
  active: boolean;
29
34
  taxMode: ProductTaxMode;
30
- taxId: string | null;
35
+ locationTaxes: ProductLocationTaxDto[];
31
36
  retailPrice: string | null;
32
37
  defaultCost: string | null;
33
38
  categoryId: string | null;
@@ -1 +1 @@
1
- {"version":3,"file":"product.dto.d.ts","sourceRoot":"","sources":["../../../src/api/inventory/product.dto.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,KAAK,EACV,uBAAuB,EACvB,aAAa,EACb,cAAc,EACd,sBAAsB,EACvB,MAAM,uBAAuB,CAAC;AAE/B,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,mEAAmE;AACnE,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,cAAc,CAAC;IACxB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACrC,KAAK,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAClC,QAAQ,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACrC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,eAAe,EAAE,sBAAsB,GAAG,IAAI,CAAC;IAC/C,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,cAAc,EAAE,gBAAgB,EAAE,CAAC;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,uBAAuB,CAAC;CACzC;AAED,MAAM,WAAW,gBAAiB,SAAQ,iBAAiB;IACzD,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,UAAU,GAAG,IAAI,CAAC;IAC7B,SAAS,EAAE,UAAU,GAAG,IAAI,CAAC;IAC7B,SAAS,EAAE,UAAU,GAAG,IAAI,CAAC;CAC9B"}
1
+ {"version":3,"file":"product.dto.d.ts","sourceRoot":"","sources":["../../../src/api/inventory/product.dto.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,KAAK,EACV,uBAAuB,EACvB,aAAa,EACb,cAAc,EACd,sBAAsB,EACvB,MAAM,uBAAuB,CAAC;AAE/B,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,+FAA+F;AAC/F,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,mEAAmE;AACnE,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,cAAc,CAAC;IACxB,aAAa,EAAE,qBAAqB,EAAE,CAAC;IACvC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACrC,KAAK,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAClC,QAAQ,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACrC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,eAAe,EAAE,sBAAsB,GAAG,IAAI,CAAC;IAC/C,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,cAAc,EAAE,gBAAgB,EAAE,CAAC;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,uBAAuB,CAAC;CACzC;AAED,MAAM,WAAW,gBAAiB,SAAQ,iBAAiB;IACzD,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,UAAU,GAAG,IAAI,CAAC;IAC7B,SAAS,EAAE,UAAU,GAAG,IAAI,CAAC;IAC7B,SAAS,EAAE,UAAU,GAAG,IAAI,CAAC;CAC9B"}
@@ -1,13 +1,16 @@
1
1
  import type { PaginatedResult } from '../pagination';
2
2
  import type { ProductIntent, ProductTaxMode, ProductUnitMeasurement } from './inventory.constants';
3
3
  import type { ProductSummaryDto } from './product.dto';
4
+ import type { OpeningQuantityInput } from './stock-movement.requests';
4
5
  export interface ListProductsQuery {
5
6
  page?: number;
6
7
  pageSize?: number;
7
8
  search?: string;
8
9
  active?: boolean;
9
10
  intent?: ProductIntent;
11
+ /** Category UUID, or `none` for Uncategorized. Omit for all. */
10
12
  categoryId?: string;
13
+ /** Brand UUID, or `none` for No brand. Omit for all. */
11
14
  brandId?: string;
12
15
  supplierId?: string;
13
16
  }
@@ -23,12 +26,16 @@ export interface StockPositionInput {
23
26
  minimumOrderLevel?: number;
24
27
  warningStockLevel?: number;
25
28
  }
29
+ export interface ProductLocationTaxInput {
30
+ locationId: string;
31
+ taxId?: string | null;
32
+ }
26
33
  export interface CreateProductRequest {
27
34
  name: string;
28
35
  intent?: ProductIntent;
29
36
  active?: boolean;
30
37
  taxMode?: ProductTaxMode;
31
- taxId?: string | null;
38
+ locationTaxes?: ProductLocationTaxInput[];
32
39
  retailPrice?: string | null;
33
40
  defaultCost?: string | null;
34
41
  categoryId?: string | null;
@@ -42,13 +49,15 @@ export interface CreateProductRequest {
42
49
  clientDescription?: string | null;
43
50
  photos?: ProductPhotoInput[];
44
51
  stockPositions?: StockPositionInput[];
52
+ /** Create-only initial on-hand per location or warehouse. Writes opening movements. */
53
+ openingQuantities?: OpeningQuantityInput[];
45
54
  }
46
55
  export interface UpdateProductRequest {
47
56
  name?: string;
48
57
  intent?: ProductIntent;
49
58
  active?: boolean;
50
59
  taxMode?: ProductTaxMode;
51
- taxId?: string | null;
60
+ locationTaxes?: ProductLocationTaxInput[];
52
61
  retailPrice?: string | null;
53
62
  defaultCost?: string | null;
54
63
  categoryId?: string | null;
@@ -1 +1 @@
1
- {"version":3,"file":"product.requests.d.ts","sourceRoot":"","sources":["../../../src/api/inventory/product.requests.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"product.requests.d.ts","sourceRoot":"","sources":["../../../src/api/inventory/product.requests.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { AuditActor } from '../audit';
2
+ import type { MovementCategory, MovementDirection } from '../../enum';
3
+ export interface StockMovementPlaceRefDto {
4
+ locationId: string | null;
5
+ warehouseId: string | null;
6
+ locationName: string | null;
7
+ warehouseName: string | null;
8
+ }
9
+ export interface StockMovementDto {
10
+ id: string;
11
+ productId: string;
12
+ place: StockMovementPlaceRefDto;
13
+ quantity: number;
14
+ direction: MovementDirection;
15
+ category: MovementCategory;
16
+ reason: string | null;
17
+ reasonId: string | null;
18
+ note: string | null;
19
+ onHandBefore: number;
20
+ onHandAfter: number;
21
+ createdAt: string;
22
+ createdBy: AuditActor | null;
23
+ }
24
+ //# sourceMappingURL=stock-movement.dto.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stock-movement.dto.d.ts","sourceRoot":"","sources":["../../../src/api/inventory/stock-movement.dto.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEtE,MAAM,WAAW,wBAAwB;IACvC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,wBAAwB,CAAC;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,iBAAiB,CAAC;IAC7B,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,UAAU,GAAG,IAAI,CAAC;CAC9B"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=stock-movement.dto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stock-movement.dto.js","sourceRoot":"","sources":["../../../src/api/inventory/stock-movement.dto.ts"],"names":[],"mappings":""}
@@ -0,0 +1,26 @@
1
+ import type { PaginatedResult } from '../pagination';
2
+ import type { MovementCategory, MovementDirection } from '../../enum';
3
+ import type { StockMovementDto } from './stock-movement.dto';
4
+ export interface ListProductMovementsQuery {
5
+ page?: number;
6
+ pageSize?: number;
7
+ locationId?: string;
8
+ warehouseId?: string;
9
+ category?: MovementCategory;
10
+ }
11
+ export type ProductMovementListResult = PaginatedResult<StockMovementDto>;
12
+ export interface CreateStockMovementRequest {
13
+ locationId?: string;
14
+ warehouseId?: string;
15
+ direction: MovementDirection;
16
+ quantity: number;
17
+ reason: string;
18
+ reasonId?: string;
19
+ note?: string | null;
20
+ }
21
+ export interface OpeningQuantityInput {
22
+ locationId?: string | null;
23
+ warehouseId?: string | null;
24
+ quantity: number;
25
+ }
26
+ //# sourceMappingURL=stock-movement.requests.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stock-movement.requests.d.ts","sourceRoot":"","sources":["../../../src/api/inventory/stock-movement.requests.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,MAAM,WAAW,yBAAyB;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,gBAAgB,CAAC;CAC7B;AAED,MAAM,MAAM,yBAAyB,GAAG,eAAe,CAAC,gBAAgB,CAAC,CAAC;AAE1E,MAAM,WAAW,0BAA0B;IACzC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,iBAAiB,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,oBAAoB;IACnC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;CAClB"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=stock-movement.requests.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stock-movement.requests.js","sourceRoot":"","sources":["../../../src/api/inventory/stock-movement.requests.ts"],"names":[],"mappings":""}
@@ -1,5 +1,6 @@
1
1
  export declare enum MovementCategory {
2
2
  Manual = "manual",
3
+ Opening = "opening",
3
4
  Sale = "sale",
4
5
  StockTake = "stockTake",
5
6
  Purchase = "purchase",
@@ -1 +1 @@
1
- {"version":3,"file":"movement-category.d.ts","sourceRoot":"","sources":["../../src/enum/movement-category.ts"],"names":[],"mappings":"AAAA,oBAAY,gBAAgB;IAC1B,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,SAAS,cAAc;IACvB,QAAQ,aAAa;IACrB,QAAQ,aAAa;IACrB,UAAU,eAAe;CAC1B"}
1
+ {"version":3,"file":"movement-category.d.ts","sourceRoot":"","sources":["../../src/enum/movement-category.ts"],"names":[],"mappings":"AAAA,oBAAY,gBAAgB;IAC1B,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,IAAI,SAAS;IACb,SAAS,cAAc;IACvB,QAAQ,aAAa;IACrB,QAAQ,aAAa;IACrB,UAAU,eAAe;CAC1B"}
@@ -4,6 +4,7 @@ exports.MovementCategory = void 0;
4
4
  var MovementCategory;
5
5
  (function (MovementCategory) {
6
6
  MovementCategory["Manual"] = "manual";
7
+ MovementCategory["Opening"] = "opening";
7
8
  MovementCategory["Sale"] = "sale";
8
9
  MovementCategory["StockTake"] = "stockTake";
9
10
  MovementCategory["Purchase"] = "purchase";
@@ -1 +1 @@
1
- {"version":3,"file":"movement-category.js","sourceRoot":"","sources":["../../src/enum/movement-category.ts"],"names":[],"mappings":";;;AAAA,IAAY,gBAOX;AAPD,WAAY,gBAAgB;IAC1B,qCAAiB,CAAA;IACjB,iCAAa,CAAA;IACb,2CAAuB,CAAA;IACvB,yCAAqB,CAAA;IACrB,yCAAqB,CAAA;IACrB,6CAAyB,CAAA;AAC3B,CAAC,EAPW,gBAAgB,GAAhB,wBAAgB,KAAhB,wBAAgB,QAO3B"}
1
+ {"version":3,"file":"movement-category.js","sourceRoot":"","sources":["../../src/enum/movement-category.ts"],"names":[],"mappings":";;;AAAA,IAAY,gBAQX;AARD,WAAY,gBAAgB;IAC1B,qCAAiB,CAAA;IACjB,uCAAmB,CAAA;IACnB,iCAAa,CAAA;IACb,2CAAuB,CAAA;IACvB,yCAAqB,CAAA;IACrB,yCAAqB,CAAA;IACrB,6CAAyB,CAAA;AAC3B,CAAC,EARW,gBAAgB,GAAhB,wBAAgB,KAAhB,wBAAgB,QAQ3B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "types-salon-management",
3
- "version": "1.0.62",
3
+ "version": "1.0.64",
4
4
  "description": "Types for Salon Management",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -9,3 +9,5 @@ export * from './warehouse.dto';
9
9
  export * from './warehouse.requests';
10
10
  export * from './product.dto';
11
11
  export * from './product.requests';
12
+ export * from './stock-movement.dto';
13
+ export * from './stock-movement.requests';
@@ -16,7 +16,7 @@ export const ProductIntent = {
16
16
 
17
17
  export type ProductIntent = (typeof ProductIntent)[keyof typeof ProductIntent];
18
18
 
19
- /** Location default product tax, or one custom tax on the Product. */
19
+ /** Location default product tax, or a per-location snapshot when any location differs. */
20
20
  export const ProductTaxMode = {
21
21
  DEFAULT: 'default',
22
22
  CUSTOM: 'custom',
@@ -43,3 +43,6 @@ export const ProductUnitMeasurement = {
43
43
 
44
44
  export type ProductUnitMeasurement =
45
45
  (typeof ProductUnitMeasurement)[keyof typeof ProductUnitMeasurement];
46
+
47
+ /** `ListProductsQuery.categoryId` / `brandId`: only rows with that FK null. Omit the param for All. */
48
+ export const ProductMasterFilterNone = 'none' as const;
@@ -29,6 +29,12 @@ export interface StockPositionDto {
29
29
  warningStockLevel: number;
30
30
  }
31
31
 
32
+ /** Present only when taxMode is custom — one row per company location. taxId null = no tax. */
33
+ export interface ProductLocationTaxDto {
34
+ locationId: string;
35
+ taxId: string | null;
36
+ }
37
+
32
38
  /** Full catalog identity for list and detail — not a slim stub. */
33
39
  export interface ProductSummaryDto {
34
40
  id: string;
@@ -36,7 +42,7 @@ export interface ProductSummaryDto {
36
42
  intent: ProductIntent;
37
43
  active: boolean;
38
44
  taxMode: ProductTaxMode;
39
- taxId: string | null;
45
+ locationTaxes: ProductLocationTaxDto[];
40
46
  retailPrice: string | null;
41
47
  defaultCost: string | null;
42
48
  categoryId: string | null;
@@ -1,6 +1,7 @@
1
1
  import type { PaginatedResult } from '../pagination';
2
2
  import type { ProductIntent, ProductTaxMode, ProductUnitMeasurement } from './inventory.constants';
3
3
  import type { ProductSummaryDto } from './product.dto';
4
+ import type { OpeningQuantityInput } from './stock-movement.requests';
4
5
 
5
6
  export interface ListProductsQuery {
6
7
  page?: number;
@@ -8,7 +9,9 @@ export interface ListProductsQuery {
8
9
  search?: string;
9
10
  active?: boolean;
10
11
  intent?: ProductIntent;
12
+ /** Category UUID, or `none` for Uncategorized. Omit for all. */
11
13
  categoryId?: string;
14
+ /** Brand UUID, or `none` for No brand. Omit for all. */
12
15
  brandId?: string;
13
16
  supplierId?: string;
14
17
  }
@@ -28,12 +31,17 @@ export interface StockPositionInput {
28
31
  warningStockLevel?: number;
29
32
  }
30
33
 
34
+ export interface ProductLocationTaxInput {
35
+ locationId: string;
36
+ taxId?: string | null;
37
+ }
38
+
31
39
  export interface CreateProductRequest {
32
40
  name: string;
33
41
  intent?: ProductIntent;
34
42
  active?: boolean;
35
43
  taxMode?: ProductTaxMode;
36
- taxId?: string | null;
44
+ locationTaxes?: ProductLocationTaxInput[];
37
45
  retailPrice?: string | null;
38
46
  defaultCost?: string | null;
39
47
  categoryId?: string | null;
@@ -47,6 +55,8 @@ export interface CreateProductRequest {
47
55
  clientDescription?: string | null;
48
56
  photos?: ProductPhotoInput[];
49
57
  stockPositions?: StockPositionInput[];
58
+ /** Create-only initial on-hand per location or warehouse. Writes opening movements. */
59
+ openingQuantities?: OpeningQuantityInput[];
50
60
  }
51
61
 
52
62
  export interface UpdateProductRequest {
@@ -54,7 +64,7 @@ export interface UpdateProductRequest {
54
64
  intent?: ProductIntent;
55
65
  active?: boolean;
56
66
  taxMode?: ProductTaxMode;
57
- taxId?: string | null;
67
+ locationTaxes?: ProductLocationTaxInput[];
58
68
  retailPrice?: string | null;
59
69
  defaultCost?: string | null;
60
70
  categoryId?: string | null;
@@ -0,0 +1,25 @@
1
+ import type { AuditActor } from '../audit';
2
+ import type { MovementCategory, MovementDirection } from '../../enum';
3
+
4
+ export interface StockMovementPlaceRefDto {
5
+ locationId: string | null;
6
+ warehouseId: string | null;
7
+ locationName: string | null;
8
+ warehouseName: string | null;
9
+ }
10
+
11
+ export interface StockMovementDto {
12
+ id: string;
13
+ productId: string;
14
+ place: StockMovementPlaceRefDto;
15
+ quantity: number;
16
+ direction: MovementDirection;
17
+ category: MovementCategory;
18
+ reason: string | null;
19
+ reasonId: string | null;
20
+ note: string | null;
21
+ onHandBefore: number;
22
+ onHandAfter: number;
23
+ createdAt: string;
24
+ createdBy: AuditActor | null;
25
+ }
@@ -0,0 +1,29 @@
1
+ import type { PaginatedResult } from '../pagination';
2
+ import type { MovementCategory, MovementDirection } from '../../enum';
3
+ import type { StockMovementDto } from './stock-movement.dto';
4
+
5
+ export interface ListProductMovementsQuery {
6
+ page?: number;
7
+ pageSize?: number;
8
+ locationId?: string;
9
+ warehouseId?: string;
10
+ category?: MovementCategory;
11
+ }
12
+
13
+ export type ProductMovementListResult = PaginatedResult<StockMovementDto>;
14
+
15
+ export interface CreateStockMovementRequest {
16
+ locationId?: string;
17
+ warehouseId?: string;
18
+ direction: MovementDirection;
19
+ quantity: number;
20
+ reason: string;
21
+ reasonId?: string;
22
+ note?: string | null;
23
+ }
24
+
25
+ export interface OpeningQuantityInput {
26
+ locationId?: string | null;
27
+ warehouseId?: string | null;
28
+ quantity: number;
29
+ }
@@ -1,5 +1,6 @@
1
1
  export enum MovementCategory {
2
2
  Manual = "manual",
3
+ Opening = "opening",
3
4
  Sale = "sale",
4
5
  StockTake = "stockTake",
5
6
  Purchase = "purchase",