import { Context, DAL, FindConfig, InferEntityType, ModulesSdkTypes } from "@medusajs/framework/types"; import { CommissionCalculationContext, CommissionLineDTO, CommissionRateType, CreateCommissionLineDTO } from "@mercurjs/types"; import { CommissionLine } from "./models"; declare const CommissionModuleService_base: import("@medusajs/framework/utils").MedusaServiceReturnType; is_enabled: import("@medusajs/framework/utils").BooleanProperty; is_default: import("@medusajs/framework/utils").BooleanProperty; currency_code: import("@medusajs/framework/utils").NullableModifier; name: import("@medusajs/framework/utils").TextProperty; code: import("@medusajs/framework/utils").TextProperty; type: import("@medusajs/framework/utils").EnumProperty; value: import("@medusajs/framework/utils").BigNumberProperty; include_tax: import("@medusajs/framework/utils").BooleanProperty; include_shipping: import("@medusajs/framework/utils").BooleanProperty; rules: import("@medusajs/framework/utils").HasMany<() => import("@medusajs/framework/utils").DmlEntity; reference: import("@medusajs/framework/utils").TextProperty; reference_id: import("@medusajs/framework/utils").TextProperty; commission_rate: import("@medusajs/framework/utils").BelongsTo<() => import("@medusajs/framework/utils").DmlEntity, "commission_rate">, undefined>; }>, "commission_rule">>; values: import("@medusajs/framework/utils").HasMany<() => import("@medusajs/framework/utils").DmlEntity; currency_code: import("@medusajs/framework/utils").TextProperty; amount: import("@medusajs/framework/utils").BigNumberProperty; commission_rate: import("@medusajs/framework/utils").BelongsTo<() => import("@medusajs/framework/utils").DmlEntity, "commission_rate">, undefined>; }>, "commission_rate_value">>; }>, "commission_rate">; readonly CommissionRule: import("@medusajs/framework/utils").DmlEntity; reference: import("@medusajs/framework/utils").TextProperty; reference_id: import("@medusajs/framework/utils").TextProperty; commission_rate: import("@medusajs/framework/utils").BelongsTo<() => import("@medusajs/framework/utils").DmlEntity; is_enabled: import("@medusajs/framework/utils").BooleanProperty; is_default: import("@medusajs/framework/utils").BooleanProperty; currency_code: import("@medusajs/framework/utils").NullableModifier; name: import("@medusajs/framework/utils").TextProperty; code: import("@medusajs/framework/utils").TextProperty; type: import("@medusajs/framework/utils").EnumProperty; value: import("@medusajs/framework/utils").BigNumberProperty; include_tax: import("@medusajs/framework/utils").BooleanProperty; include_shipping: import("@medusajs/framework/utils").BooleanProperty; rules: import("@medusajs/framework/utils").HasMany<() => import("@medusajs/framework/utils").DmlEntity, "commission_rule">>; values: import("@medusajs/framework/utils").HasMany<() => import("@medusajs/framework/utils").DmlEntity; currency_code: import("@medusajs/framework/utils").TextProperty; amount: import("@medusajs/framework/utils").BigNumberProperty; commission_rate: import("@medusajs/framework/utils").BelongsTo<() => import("@medusajs/framework/utils").DmlEntity, "commission_rate">, undefined>; }>, "commission_rate_value">>; }>, "commission_rate">, undefined>; }>, "commission_rule">; readonly CommissionRateValue: import("@medusajs/framework/utils").DmlEntity; currency_code: import("@medusajs/framework/utils").TextProperty; amount: import("@medusajs/framework/utils").BigNumberProperty; commission_rate: import("@medusajs/framework/utils").BelongsTo<() => import("@medusajs/framework/utils").DmlEntity; is_enabled: import("@medusajs/framework/utils").BooleanProperty; is_default: import("@medusajs/framework/utils").BooleanProperty; currency_code: import("@medusajs/framework/utils").NullableModifier; name: import("@medusajs/framework/utils").TextProperty; code: import("@medusajs/framework/utils").TextProperty; type: import("@medusajs/framework/utils").EnumProperty; value: import("@medusajs/framework/utils").BigNumberProperty; include_tax: import("@medusajs/framework/utils").BooleanProperty; include_shipping: import("@medusajs/framework/utils").BooleanProperty; rules: import("@medusajs/framework/utils").HasMany<() => import("@medusajs/framework/utils").DmlEntity; reference: import("@medusajs/framework/utils").TextProperty; reference_id: import("@medusajs/framework/utils").TextProperty; commission_rate: import("@medusajs/framework/utils").BelongsTo<() => import("@medusajs/framework/utils").DmlEntity, "commission_rate">, undefined>; }>, "commission_rule">>; values: import("@medusajs/framework/utils").HasMany<() => import("@medusajs/framework/utils").DmlEntity, "commission_rate_value">>; }>, "commission_rate">, undefined>; }>, "commission_rate_value">; readonly CommissionLine: import("@medusajs/framework/utils").DmlEntity; item_id: import("@medusajs/framework/utils").NullableModifier; shipping_method_id: import("@medusajs/framework/utils").NullableModifier; commission_rate_id: import("@medusajs/framework/utils").NullableModifier; code: import("@medusajs/framework/utils").TextProperty; rate: import("@medusajs/framework/utils").FloatProperty; amount: import("@medusajs/framework/utils").BigNumberProperty; description: import("@medusajs/framework/utils").NullableModifier; }>, "commission_line">; }>>; declare class CommissionModuleService extends CommissionModuleService_base { protected commissionLineService_: ModulesSdkTypes.IMedusaInternalService>; protected baseRepository_: DAL.RepositoryService; constructor({ commissionLineService, baseRepository }: { commissionLineService: any; baseRepository: any; }); /** * Does a single rule match a product? */ private ruleMatchesProduct; /** * A rate matches an item when **every** present dimension group (rules * grouped by `reference`) has at least one matching rule * (AND-across-dimension, OR-within-dimension). A rule-less rate is the * default and matches everything. */ private rateMatchesItem; /** * Specificity = number of distinct dimension groups a rate scopes on. * More dimensions → higher specificity → wins the tie-break. */ private rateSpecificity; /** * Resolve the commission amount + line `rate` for a base amount. * Percentage uses the scalar `value`; Fixed reads the per-currency * `values` (falling back to the legacy single `value`). */ private computeCommission; getCommissionLines(context: CommissionCalculationContext, sharedContext?: Context): Promise; /** * Overrides the auto-generated upsert with idempotent **replace** * semantics keyed on the line's anchor (item_id / shipping_method_id): * delete any existing lines for the incoming anchors, then insert the new * set, in a single transaction. The computed lines carry no `id`, so a * plain primary-key upsert would duplicate them on every refresh; deleting * by anchor first makes re-running the refresh idempotent. */ upsertCommissionLines(commissionLines: CreateCommissionLineDTO[], sharedContext?: Context): Promise; /** * Build a DB-side predicate for the virtual `scope_type` filter (rule * scope: "store", "product_type", "category", "store_product_type", * "store_category"). Scope type is derived from the set of rule * `reference`s rather than stored, so each option maps to an * EXISTS / NOT EXISTS combination on `commission_rule` that mirrors the * admin-side `deriveScopeType`. Multiple selected scopes are OR-ed. */ private buildScopeTypeWhere_; /** * Strip the virtual `scope_type` key and rewrite it into a `raw()` * correlated-subquery predicate so the filtering happens in the database, * not in the route handler. */ private applyScopeTypeFilter_; /** * Auto-generate a unique `code` from the rate `name` when one is not * provided, before delegating to the generated create. Accepts a single * payload or an array and preserves the caller's shape. */ createCommissionRates(data: any, sharedContext?: Context): Promise; listCommissionRates(filters?: any, config?: FindConfig, sharedContext?: Context): Promise<{ id: string; is_enabled: boolean; is_default: boolean; currency_code: string | null; name: string; code: string; type: CommissionRateType; value: number; include_tax: boolean; include_shipping: boolean; rules: { id: string; reference: string; reference_id: string; commission_rate: /*elided*/ any; created_at: Date; updated_at: Date; deleted_at: Date | null; commission_rate_id: string; }[]; values: { id: string; currency_code: string; amount: number; commission_rate: /*elided*/ any; raw_amount: Record; created_at: Date; updated_at: Date; deleted_at: Date | null; commission_rate_id: string; }[]; raw_value: Record; created_at: Date; updated_at: Date; deleted_at: Date | null; }[]>; listAndCountCommissionRates(filters?: any, config?: FindConfig, sharedContext?: Context): Promise<[{ id: string; is_enabled: boolean; is_default: boolean; currency_code: string | null; name: string; code: string; type: CommissionRateType; value: number; include_tax: boolean; include_shipping: boolean; rules: { id: string; reference: string; reference_id: string; commission_rate: /*elided*/ any; created_at: Date; updated_at: Date; deleted_at: Date | null; commission_rate_id: string; }[]; values: { id: string; currency_code: string; amount: number; commission_rate: /*elided*/ any; raw_amount: Record; created_at: Date; updated_at: Date; deleted_at: Date | null; commission_rate_id: string; }[]; raw_value: Record; created_at: Date; updated_at: Date; deleted_at: Date | null; }[], number]>; } export default CommissionModuleService;