wbportfolio 1.54.23__py2.py3-none-any.whl → 1.55.0__py2.py3-none-any.whl

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.

Potentially problematic release.


This version of wbportfolio might be problematic. Click here for more details.

Files changed (62) hide show
  1. wbportfolio/admin/indexes.py +1 -1
  2. wbportfolio/admin/product_groups.py +1 -1
  3. wbportfolio/admin/products.py +2 -1
  4. wbportfolio/admin/rebalancing.py +1 -1
  5. wbportfolio/api_clients/__init__.py +0 -0
  6. wbportfolio/api_clients/ubs.py +150 -0
  7. wbportfolio/factories/orders/order_proposals.py +3 -1
  8. wbportfolio/factories/portfolios.py +1 -1
  9. wbportfolio/factories/rebalancing.py +1 -1
  10. wbportfolio/filters/orders/__init__.py +1 -0
  11. wbportfolio/filters/orders/order_proposals.py +58 -0
  12. wbportfolio/filters/portfolios.py +20 -0
  13. wbportfolio/import_export/backends/ubs/asset_position.py +6 -7
  14. wbportfolio/import_export/backends/ubs/fees.py +10 -20
  15. wbportfolio/import_export/backends/ubs/instrument_price.py +6 -6
  16. wbportfolio/import_export/backends/utils.py +0 -17
  17. wbportfolio/import_export/handlers/asset_position.py +1 -1
  18. wbportfolio/import_export/parsers/sg_lux/equity.py +1 -1
  19. wbportfolio/import_export/parsers/societe_generale/strategy.py +2 -2
  20. wbportfolio/import_export/parsers/ubs/equity.py +1 -1
  21. wbportfolio/migrations/0087_product_order_routing_custodian_adapter.py +94 -0
  22. wbportfolio/migrations/0088_orderproposal_total_effective_portfolio_contribution.py +19 -0
  23. wbportfolio/models/builder.py +70 -25
  24. wbportfolio/models/mixins/instruments.py +7 -0
  25. wbportfolio/models/orders/order_proposals.py +510 -161
  26. wbportfolio/models/orders/orders.py +20 -10
  27. wbportfolio/models/orders/routing.py +54 -0
  28. wbportfolio/models/portfolio.py +76 -41
  29. wbportfolio/models/rebalancing.py +6 -6
  30. wbportfolio/models/transactions/transactions.py +10 -6
  31. wbportfolio/order_routing/__init__.py +19 -0
  32. wbportfolio/order_routing/adapters/__init__.py +57 -0
  33. wbportfolio/order_routing/adapters/ubs.py +161 -0
  34. wbportfolio/pms/trading/handler.py +4 -0
  35. wbportfolio/pms/typing.py +62 -8
  36. wbportfolio/rebalancing/models/composite.py +1 -1
  37. wbportfolio/rebalancing/models/equally_weighted.py +3 -3
  38. wbportfolio/rebalancing/models/market_capitalization_weighted.py +1 -1
  39. wbportfolio/rebalancing/models/model_portfolio.py +9 -10
  40. wbportfolio/serializers/orders/order_proposals.py +23 -3
  41. wbportfolio/serializers/orders/orders.py +5 -2
  42. wbportfolio/serializers/positions.py +2 -2
  43. wbportfolio/serializers/rebalancing.py +1 -1
  44. wbportfolio/tests/models/orders/test_order_proposals.py +29 -15
  45. wbportfolio/tests/models/test_imports.py +5 -3
  46. wbportfolio/tests/models/test_portfolios.py +57 -23
  47. wbportfolio/tests/models/transactions/test_rebalancing.py +2 -2
  48. wbportfolio/tests/rebalancing/test_models.py +3 -5
  49. wbportfolio/viewsets/charts/assets.py +4 -1
  50. wbportfolio/viewsets/configs/display/rebalancing.py +2 -2
  51. wbportfolio/viewsets/configs/menu/__init__.py +1 -0
  52. wbportfolio/viewsets/configs/menu/orders.py +11 -0
  53. wbportfolio/viewsets/orders/configs/buttons/order_proposals.py +56 -12
  54. wbportfolio/viewsets/orders/configs/displays/order_proposals.py +55 -9
  55. wbportfolio/viewsets/orders/configs/displays/orders.py +13 -0
  56. wbportfolio/viewsets/orders/order_proposals.py +45 -6
  57. wbportfolio/viewsets/orders/orders.py +31 -29
  58. wbportfolio/viewsets/portfolios.py +3 -3
  59. {wbportfolio-1.54.23.dist-info → wbportfolio-1.55.0.dist-info}/METADATA +1 -1
  60. {wbportfolio-1.54.23.dist-info → wbportfolio-1.55.0.dist-info}/RECORD +62 -52
  61. {wbportfolio-1.54.23.dist-info → wbportfolio-1.55.0.dist-info}/WHEEL +0 -0
  62. {wbportfolio-1.54.23.dist-info → wbportfolio-1.55.0.dist-info}/licenses/LICENSE +0 -0
@@ -92,7 +92,9 @@ class OrderOrderProposalModelViewSet(
92
92
  sum_effective_total_value_fx_portfolio=Sum(F("effective_total_value_fx_portfolio")),
93
93
  )
94
94
  # weights aggregates
95
- cash_sum_effective_weight = Decimal("1.0") - noncash_aggregates["sum_effective_weight"]
95
+ cash_sum_effective_weight = (
96
+ self.order_proposal.total_effective_portfolio_weight - noncash_aggregates["sum_effective_weight"]
97
+ )
96
98
  cash_sum_target_cash_weight = Decimal("1.0") - noncash_aggregates["sum_target_weight"]
97
99
  noncash_sum_effective_weight = noncash_aggregates["sum_effective_weight"] or Decimal(0)
98
100
  noncash_sum_target_weight = noncash_aggregates["sum_target_weight"] or Decimal(0)
@@ -176,14 +178,17 @@ class OrderOrderProposalModelViewSet(
176
178
  return OrderOrderProposalModelSerializer
177
179
 
178
180
  def add_messages(self, request, queryset=None, paginated_queryset=None, instance=None, initial=False):
179
- if queryset is not None and queryset.exists() and self.order_proposal.status != OrderProposal.Status.APPROVED:
180
- total_target_weight = queryset.aggregate(c=Sum(F("target_weight")))["c"] or Decimal(0)
181
+ if self.orders.exists() and self.order_proposal.status in [
182
+ OrderProposal.Status.PENDING,
183
+ OrderProposal.Status.DRAFT,
184
+ ]:
185
+ total_target_weight = self.orders.aggregate(c=Sum(F("target_weight")))["c"] or Decimal(0)
181
186
  if round(total_target_weight, 8) != 1:
182
187
  warning(
183
188
  request,
184
189
  "The total target weight does not equal 1. To avoid automatic cash allocation, please adjust the order weights to sum up to 1. Otherwise, a cash component will be added when this order proposal is submitted.",
185
190
  )
186
- if queryset.filter(has_warnings=True).exists():
191
+ if self.orders.filter(has_warnings=True).exists():
187
192
  error(
188
193
  request,
189
194
  "Some orders failed preparation. To resolve this, please revert the order proposal to draft, review and correct the orders, and then resubmit.",
@@ -191,32 +196,29 @@ class OrderOrderProposalModelViewSet(
191
196
 
192
197
  @cached_property
193
198
  def orders(self):
194
- if self.is_portfolio_manager:
195
- return self.order_proposal.get_orders()
196
- else:
197
- return Order.objects.none()
199
+ qs = self.order_proposal.get_orders()
200
+ if not self.is_portfolio_manager:
201
+ return qs.none()
202
+ return qs
198
203
 
199
204
  def get_queryset(self):
200
- return (
201
- self.orders.exclude(underlying_instrument__is_cash=True)
202
- .annotate(
203
- underlying_instrument_isin=F("underlying_instrument__isin"),
204
- underlying_instrument_ticker=F("underlying_instrument__ticker"),
205
- underlying_instrument_refinitiv_identifier_code=F("underlying_instrument__refinitiv_identifier_code"),
206
- underlying_instrument_instrument_type=Case(
207
- When(
208
- underlying_instrument__parent__is_security=True,
209
- then=F("underlying_instrument__parent__instrument_type__short_name"),
210
- ),
211
- default=F("underlying_instrument__instrument_type__short_name"),
205
+ return self.orders.annotate( # .exclude(underlying_instrument__is_cash=True)
206
+ underlying_instrument_isin=F("underlying_instrument__isin"),
207
+ underlying_instrument_ticker=F("underlying_instrument__ticker"),
208
+ underlying_instrument_refinitiv_identifier_code=F("underlying_instrument__refinitiv_identifier_code"),
209
+ underlying_instrument_instrument_type=Case(
210
+ When(
211
+ underlying_instrument__parent__is_security=True,
212
+ then=F("underlying_instrument__parent__instrument_type__short_name"),
212
213
  ),
213
- effective_total_value_fx_portfolio=F("effective_weight") * Value(self.portfolio_total_asset_value),
214
- target_total_value_fx_portfolio=F("target_weight") * Value(self.portfolio_total_asset_value),
215
- portfolio_currency=F("portfolio__currency__symbol"),
216
- security=F("underlying_instrument__parent"),
217
- company=F("underlying_instrument__parent__parent"),
218
- )
219
- .select_related(
220
- "underlying_instrument", "underlying_instrument__parent", "underlying_instrument__parent__parent"
221
- )
214
+ default=F("underlying_instrument__instrument_type__short_name"),
215
+ ),
216
+ underlying_instrument_exchange=F("underlying_instrument__exchange__name"),
217
+ effective_total_value_fx_portfolio=F("previous_weight") * Value(self.portfolio_total_asset_value),
218
+ target_total_value_fx_portfolio=F("target_weight") * Value(self.portfolio_total_asset_value),
219
+ portfolio_currency=F("portfolio__currency__symbol"),
220
+ security=F("underlying_instrument__parent"),
221
+ company=F("underlying_instrument__parent__parent"),
222
+ ).select_related(
223
+ "underlying_instrument", "underlying_instrument__parent", "underlying_instrument__parent__parent"
222
224
  )
@@ -147,8 +147,8 @@ class PortfolioModelViewSet(UserPortfolioRequestPermissionMixin, InternalUserPer
147
147
  activation_date = datetime.strptime(request.POST["activation_date"], "%Y-%m-%d")
148
148
  rebalancing_model = get_object_or_404(RebalancingModel, pk=request.POST["rebalancing_model"])
149
149
  frequency = request.POST["frequency"]
150
- approve_order_proposal_automatically = (
151
- request.POST.get("approve_order_proposal_automatically", "false") == "true"
150
+ apply_order_proposal_automatically = (
151
+ request.POST.get("apply_order_proposal_automatically", "false") == "true"
152
152
  )
153
153
 
154
154
  rebalancer, _ = Rebalancer.objects.update_or_create(
@@ -157,7 +157,7 @@ class PortfolioModelViewSet(UserPortfolioRequestPermissionMixin, InternalUserPer
157
157
  "rebalancing_model": rebalancing_model,
158
158
  "frequency": frequency,
159
159
  "activation_date": activation_date,
160
- "approve_order_proposal_automatically": approve_order_proposal_automatically,
160
+ "apply_order_proposal_automatically": apply_order_proposal_automatically,
161
161
  },
162
162
  )
163
163
  return Response(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: wbportfolio
3
- Version: 1.54.23
3
+ Version: 1.55.0
4
4
  Author-email: Christopher Wittlinger <c.wittlinger@stainly.com>
5
5
  License-File: LICENSE
6
6
  Requires-Dist: cryptography==3.4.*
@@ -10,12 +10,12 @@ wbportfolio/utils.py,sha256=QZ4t0j2NwKYmgWJM77yvXSp-8wVcZmFvNi5_v7YA3ac,750
10
10
  wbportfolio/admin/__init__.py,sha256=oTmHrq_4H4OyEna3R_3tIh7pyCyNYVsMDD8y06IYMfQ,675
11
11
  wbportfolio/admin/asset.py,sha256=Nukw4axCnctQFlAtPkPJyalEga7RtTp7jr138MOdWSM,1254
12
12
  wbportfolio/admin/custodians.py,sha256=rJ9wFdiFM5t3WrmAfNXWzjxDAWrbnlSstfNjQxSmTNE,332
13
- wbportfolio/admin/indexes.py,sha256=Psn6yd8ceBySSKWQlbwBq0Y6Jkxg1e1HcMrpO0Wirl8,406
13
+ wbportfolio/admin/indexes.py,sha256=XPiVGBRDD7SV7YvSDv9pAo513IjIbEOBS_pcvVP_UfQ,440
14
14
  wbportfolio/admin/portfolio.py,sha256=ihAYlvx7vvRbFMIKobo-VokYfvlTowGDzcSmlXHCJDY,3873
15
15
  wbportfolio/admin/portfolio_relationships.py,sha256=mLRQUvezcUQfEls0p6pe0P1qVf335zD5pX4eRVf119M,711
16
- wbportfolio/admin/product_groups.py,sha256=_jks3MF1kMOBQPcjWaSD-bkZU268WRyZADSx32gct6k,1356
17
- wbportfolio/admin/products.py,sha256=NLceny44B0WOZ66I-0D8aBWz8ST7aJM4XVy2NibeRxI,2491
18
- wbportfolio/admin/rebalancing.py,sha256=A0GNm63BWuWmrpfMKbsCteB_9uVuTNigQqWW4up9x0g,611
16
+ wbportfolio/admin/product_groups.py,sha256=0iXpoj-gGwLeF6BmCohX7d5qrVhCgIxNWUQmJcM67q0,1391
17
+ wbportfolio/admin/products.py,sha256=vEtUpSlnCLLCs4SXkI5UFO7iPsXhRUk7PsNvfD7FS40,2550
18
+ wbportfolio/admin/rebalancing.py,sha256=xlaq2qk6rzEqfjinS1XN6e0yZ2ijjD1Hp_XddfQwyjU,609
19
19
  wbportfolio/admin/reconciliations.py,sha256=s7aYxdJE6jX72bnKCrj-YdZBl9bFV_n44Bo28RZMKvg,511
20
20
  wbportfolio/admin/registers.py,sha256=N5zcfFgxR9H37YEJxFIBif7v5uLN2mGNV3lf9c5OYnw,505
21
21
  wbportfolio/admin/roles.py,sha256=h7d0aYBctghj1zFphWkMVHywnCjF8bewVbk8lq1IX8U,446
@@ -29,6 +29,8 @@ wbportfolio/admin/transactions/fees.py,sha256=gpq-_k3ypEGVNuDfFE4OHtn-B9ZtkzA4YY
29
29
  wbportfolio/admin/transactions/trades.py,sha256=LanpSm6iaR9cmNvSJwpRFPkOgN46K_Y9YoMy0MReYuc,1913
30
30
  wbportfolio/analysis/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
31
31
  wbportfolio/analysis/claims.py,sha256=islJVmHg6jKr6Q1b84Vt5Au2bzy9aDjWGEVGNtPFQd4,10688
32
+ wbportfolio/api_clients/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
33
+ wbportfolio/api_clients/ubs.py,sha256=pB_urTr8x8YCW28c_hK7DeCzAx07VeLZ27TamrZln2k,6598
32
34
  wbportfolio/contrib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
33
35
  wbportfolio/contrib/company_portfolio/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
34
36
  wbportfolio/contrib/company_portfolio/admin.py,sha256=roUsuOjYDWX0OGWVBjCcW3MAcwJHJYHnqZ_pLpwakmQ,549
@@ -67,15 +69,15 @@ wbportfolio/factories/indexes.py,sha256=sInyNARyfUNbScxr_ng1HhxtJXIsK3awFf9BF1gr
67
69
  wbportfolio/factories/portfolio_cash_flow.py,sha256=e8LWkk5Gy0FU4HoCL9xPseCtLlVIkMrvAmey5swqcfc,727
68
70
  wbportfolio/factories/portfolio_cash_targets.py,sha256=6bYaKjV56yRbjRaQzime218Dho652pcpkAqwhq63D3g,678
69
71
  wbportfolio/factories/portfolio_swing_pricings.py,sha256=CLT9AgZKPwChfPDATl-r2r8IVsM5U6S5gDJ8BzsweyI,828
70
- wbportfolio/factories/portfolios.py,sha256=zjjbb81ZokA7vJ7SXFDOmiNqP3Aq6-ZEh2gPiaYKfkY,1550
72
+ wbportfolio/factories/portfolios.py,sha256=kZDuBXnGiMrliQ67UfXHQElv5y1nVLXN_7Au3RnZr-8,1553
71
73
  wbportfolio/factories/product_groups.py,sha256=JMtG301j5XehB3qmNSbXt6af56Y9uvG3fgbCMf9FCSc,1987
72
74
  wbportfolio/factories/products.py,sha256=N0V6sM_98sC6l8qN78wgfmtpYq7O2c5rW5hT5ZM5gsA,2880
73
- wbportfolio/factories/rebalancing.py,sha256=cU4oskGJKFtsgSNEaKAICtV5yIjCSAntNHhCBrLpBQU,721
75
+ wbportfolio/factories/rebalancing.py,sha256=I6_c_gDuhBYsmDPOU_b8e9W-Aa8I95gWXS_K8N5-xiQ,719
74
76
  wbportfolio/factories/reconciliations.py,sha256=Ne3rBZ_yvjlAtWW7qDLprHrLhNCtLL_RXU3yDHc3s3c,916
75
77
  wbportfolio/factories/roles.py,sha256=tot54YX70sNqZrAg5zGJTHd7_PFjZed_mny4lGlnwEA,857
76
78
  wbportfolio/factories/trades.py,sha256=ZHfj20KjeTu57sNaZzfSw2JqCoI9q4BjfPp5qRMVsro,1387
77
79
  wbportfolio/factories/orders/__init__.py,sha256=QG7on_F9GiuJgvGbM0BNDVdfGwwBz_WGbmCFNbKPZzc,83
78
- wbportfolio/factories/orders/order_proposals.py,sha256=JR7oABGv6uGQgNRNCWcgmTHOlyaugsKDnEZo-yfk-P0,549
80
+ wbportfolio/factories/orders/order_proposals.py,sha256=3QGG6eI2sWYGJenn17gz37A2PJgjZLlPqAsqci1lFXI,702
79
81
  wbportfolio/factories/orders/orders.py,sha256=tTw2U-xvUsFpG4zad3KCHZPQx1FVg-zPjwEN73XEOjg,907
80
82
  wbportfolio/fdm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
81
83
  wbportfolio/fdm/tasks.py,sha256=59hXt3TOJaM8KpUaKdBNAGsO7NFMHaAlNA0T3FTUau0,533
@@ -85,12 +87,13 @@ wbportfolio/filters/assets_and_net_new_money_progression.py,sha256=IYl_qMFO9QKhX
85
87
  wbportfolio/filters/custodians.py,sha256=pStQgPQPhPpnt57_V7BuXbFXmRiZBEAiEeMFuQmt2NE,287
86
88
  wbportfolio/filters/esg.py,sha256=ZEUQh3IQxLSshVrgtPqHC_ToirrllkCXR_KzUlCUtkA,688
87
89
  wbportfolio/filters/performances.py,sha256=xJC7fe8XNPz159cewMD8Es8u89vzgpZT4D2Gm1YToM8,7340
88
- wbportfolio/filters/portfolios.py,sha256=o5S5FaUnHTmtgpBPzEom7odypdyM_I2O6Lbhj7Oy4nU,1469
90
+ wbportfolio/filters/portfolios.py,sha256=rQL77Cs1YVR8I_kSZwYppJ9yPj8ebWrDQHs_sOI_Ndk,2247
89
91
  wbportfolio/filters/positions.py,sha256=7eMqwqnNd_owi2Mg-1Uf9K9K9SHSgdZ8CcYgWw49qgI,8548
90
92
  wbportfolio/filters/products.py,sha256=jOoRKDm_2n2a-Y1dHWl1zjdrwy4Cek57Qa3Q10p_zzY,6492
91
93
  wbportfolio/filters/roles.py,sha256=jb8WLzZ_e03x8XkAWuYAdPgMyre3h-rtgYXKJ3dqkhw,920
92
94
  wbportfolio/filters/signals.py,sha256=XZ1d50yas47Xy57ZfmvCVjMSKojaoqrc5FHJBcVadtk,3144
93
- wbportfolio/filters/orders/__init__.py,sha256=zsC0VukFwPd_8CrXcQJjaonjmZLZPMUnf4S2gIFI3AU,35
95
+ wbportfolio/filters/orders/__init__.py,sha256=Bfr7ZrKJYIiQoji7S7YZWMiYXjsq9B_AoBF98aNZvZ4,87
96
+ wbportfolio/filters/orders/order_proposals.py,sha256=V_lICJBEG1aOVaYiaIi1KcIn8uEJvtXrEzrP9tz4Xuw,2315
94
97
  wbportfolio/filters/orders/orders.py,sha256=eRVb9w7zHq6bPnHOd3gC1k6OJYSpQ6PeXxu2dxJe1A0,289
95
98
  wbportfolio/filters/transactions/__init__.py,sha256=TXiHB7_ItZPVcXCCGejpLBRD4R7rtt3Qrq59z8D5ChA,582
96
99
  wbportfolio/filters/transactions/claim.py,sha256=eSykgNzcytMWWTmlGlaqBuh98vfOKoTLvA3cglc_jZ0,17951
@@ -104,12 +107,12 @@ wbportfolio/fixtures/wbrisk_management.yaml.gz,sha256=alFDRu8S9R6IsaIkpJe_v36B2G
104
107
  wbportfolio/import_export/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
105
108
  wbportfolio/import_export/utils.py,sha256=mzybnwU2y-NOk43QDNDlOCaSPO-0BFlSX_X8uxplNiY,1083
106
109
  wbportfolio/import_export/backends/__init__.py,sha256=Ki5jE95usAbxfV3zeZMkAmjh7G8TodBkKTDBPa_HJX0,40
107
- wbportfolio/import_export/backends/utils.py,sha256=joFlyCrstrXSFb0RmQ4T7lfRVT7lxb7qe8TePis8wFU,2116
110
+ wbportfolio/import_export/backends/utils.py,sha256=nM0i5rhQ66Vgm7WH3jIiNvNGuC-Cy_vtXkSzrUiGc0Q,1355
108
111
  wbportfolio/import_export/backends/refinitiv/adjustment.py,sha256=ahVjWMHY1FuuDnMeascAlVUa3Mys6rvROG1uKDq6QeA,1554
109
112
  wbportfolio/import_export/backends/ubs/__init__.py,sha256=jHm6zfyZPfvdzyMfJGngGbwROxtYWyJdpQorpleVKMA,82
110
- wbportfolio/import_export/backends/ubs/asset_position.py,sha256=xN9VBsl8wdXDbfQOKS_tOlmlwuNqv-yGGg20QUBbavI,1901
111
- wbportfolio/import_export/backends/ubs/fees.py,sha256=wKGWyzmtvXloUYeMN6mkfoAwtn4qVqyw0OX3e8qGtrw,2863
112
- wbportfolio/import_export/backends/ubs/instrument_price.py,sha256=urIvmZlETWD8oftv5zAqyg83K0x4D5O5iau-GHxUeos,1932
113
+ wbportfolio/import_export/backends/ubs/asset_position.py,sha256=Nqe_M3T2CHFs-vxmzyTcdaEdlmfbAjtJJL5U0Bc_MXI,1942
114
+ wbportfolio/import_export/backends/ubs/fees.py,sha256=rwZIHfJbvB1xdHruz0INDNWlt40Dj9kw2zDOto8rkq0,2532
115
+ wbportfolio/import_export/backends/ubs/instrument_price.py,sha256=Bj00tfwUK5t2Q7C2bc2djhvlIkZ8ozZ9hqQP9W1sVRI,1974
113
116
  wbportfolio/import_export/backends/ubs/mixin.py,sha256=Y0od5nmGwwUN7Bh7UYYbebLNrfpx0PaM1KhCRymNu10,483
114
117
  wbportfolio/import_export/backends/wbfdm/__init__.py,sha256=k02E8ynHxTo65JV_TJ1ng6mpLuWomFpLFkyaRxr9SE4,50
115
118
  wbportfolio/import_export/backends/wbfdm/adjustment.py,sha256=CpkVNNlDSVui00Aihq-1i_Vc_kqi2gjODxWb7K0vsWM,1822
@@ -117,7 +120,7 @@ wbportfolio/import_export/backends/wbfdm/dividend.py,sha256=iAQXnYPXmtG_Jrc8THAJ
117
120
  wbportfolio/import_export/backends/wbfdm/mixin.py,sha256=JNtjgqGLson1nu_Chqb8MWyuiF3Ws8ox2vapxIRBYKE,400
118
121
  wbportfolio/import_export/handlers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
119
122
  wbportfolio/import_export/handlers/adjustment.py,sha256=6bdTIYFmc8_HFxcdwtnYwglMyCfAD8XrTIrEb2zWY0g,1757
120
- wbportfolio/import_export/handlers/asset_position.py,sha256=UZBDlEK5mxtGu9cZvwiQS6J8GNkMJqDZb7KZ3uwex0g,8698
123
+ wbportfolio/import_export/handlers/asset_position.py,sha256=trI_I4IxZ6fqV9_BpRAvPNkYf07-loQB7f4ipkGkJbE,8695
121
124
  wbportfolio/import_export/handlers/dividend.py,sha256=F0oLfNt2B_QQAjHBCRpxa5HSkfkAYdal_NjLJGtVckY,4408
122
125
  wbportfolio/import_export/handlers/fees.py,sha256=BOFHAvSTlvVLaxnm6KD_fcza1TlPc02HOR9J0_jjswI,2495
123
126
  wbportfolio/import_export/handlers/orders.py,sha256=GU3_tIy-tAw9aU-ifsnmMZPBB9sqfkFC_S1d9VziTwg,3136
@@ -158,7 +161,7 @@ wbportfolio/import_export/parsers/sg_lux/customer_trade.py,sha256=gTEUIaxlZvXXCg
158
161
  wbportfolio/import_export/parsers/sg_lux/customer_trade_pending_slk.py,sha256=WyRpKXkNhpK4H9aNjW7_ggcCGlN_-9ETlR1QsE9xl_k,5068
159
162
  wbportfolio/import_export/parsers/sg_lux/customer_trade_slk.py,sha256=D_1c0v6lTXkopjZzr9pQb575HxrMFe91tKk8xT1X3Ns,3604
160
163
  wbportfolio/import_export/parsers/sg_lux/customer_trade_without_pw.py,sha256=nMYV9-OwY_TagU36Ab0dOweZYzVriFWHXPYjauBg2Yk,2034
161
- wbportfolio/import_export/parsers/sg_lux/equity.py,sha256=w13LAMNWReZzqmdFyXdazVnpGr1UUNLG-pJgn5c16gI,6116
164
+ wbportfolio/import_export/parsers/sg_lux/equity.py,sha256=SXupaP9W299oFfnucV7FogY_yqusLkbqQFR3nGt-4m0,6117
162
165
  wbportfolio/import_export/parsers/sg_lux/fees.py,sha256=AK2TGOjI3JrOjtACEQd-4ffuedtIus-_gWug6wN6RQs,1846
163
166
  wbportfolio/import_export/parsers/sg_lux/perf_fees.py,sha256=6HAV3Pu2aaYARjMQvN24Op2rru_YdjeI9J9ADDQVH8s,1513
164
167
  wbportfolio/import_export/parsers/sg_lux/portfolio_cash_flow.py,sha256=ftLKWukUl9AcGWHQmJZnShVZpkO4rOl04PGlLcalDdQ,889
@@ -169,7 +172,7 @@ wbportfolio/import_export/parsers/sg_lux/utils.py,sha256=xrtEkdz_ypGFRTWn3-Kz6Gz
169
172
  wbportfolio/import_export/parsers/sg_lux/valuation.py,sha256=tmc-KHcRUHjTZVck8vzUIoN4Fcb-_zevmET4ZkkRlak,1788
170
173
  wbportfolio/import_export/parsers/societe_generale/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
171
174
  wbportfolio/import_export/parsers/societe_generale/customer_trade.py,sha256=eUgd_ZwK8WZh8-oXTLH4t_F9fXE6SCSOreIqXwVwT0w,2110
172
- wbportfolio/import_export/parsers/societe_generale/strategy.py,sha256=xYocT0zDOI2k0UmB6VbZu6t2rwXFuXUV_cJG8f47uEQ,4502
175
+ wbportfolio/import_export/parsers/societe_generale/strategy.py,sha256=b0U3ZU1pyi5dbE678lD2M636v8mw6KjVBFUwJbP6yqk,4503
173
176
  wbportfolio/import_export/parsers/societe_generale/valuation.py,sha256=mxaV2cL5WKg2omrwLxcYkeLnb95S-NpG15FTGAJRy58,1225
174
177
  wbportfolio/import_export/parsers/tellco/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
175
178
  wbportfolio/import_export/parsers/tellco/customer_trade.py,sha256=U04YVJHxQLWxpN8z4DkcK4p0lK1YpA8iDnRsjgNoprY,2126
@@ -177,7 +180,7 @@ wbportfolio/import_export/parsers/tellco/equity.py,sha256=3mPqh-kridsNCy5K4sa43S
177
180
  wbportfolio/import_export/parsers/tellco/valuation.py,sha256=QM8fYYOESGocACSbJnqD-1TtSYxOXOkkT7oLY6XY10Y,1642
178
181
  wbportfolio/import_export/parsers/ubs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
179
182
  wbportfolio/import_export/parsers/ubs/customer_trade.py,sha256=ZLWYLGO8BveXb5mTFfg53LgXXLGvztDgUaqIDa-qkJ0,2010
180
- wbportfolio/import_export/parsers/ubs/equity.py,sha256=yhB4upE9ps9zvBkKhwJuxUvQpaohth0tcKf7tsW2tlw,3470
183
+ wbportfolio/import_export/parsers/ubs/equity.py,sha256=a3Hv6kjE__VUSdkE2TJ4NBCyVvnt34bPO-uZPR7pcEM,3471
181
184
  wbportfolio/import_export/parsers/ubs/historical_customer_trade.py,sha256=1IggU7Ogg8-gdwLqBtz-FZ6l-UKsjbtM-KomM8u6QpA,1746
182
185
  wbportfolio/import_export/parsers/ubs/valuation.py,sha256=6P71APM4xGoAadCywO6DBz42xL1bClacf242pb25w_s,1597
183
186
  wbportfolio/import_export/parsers/ubs/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -266,22 +269,24 @@ wbportfolio/migrations/0083_order_alter_trade_options_and_more.py,sha256=oFYG2cV
266
269
  wbportfolio/migrations/0084_orderproposal_min_order_value.py,sha256=bJPpPX7PQmlWAIyLzZ6ca6K0paGTRbzS8AkyOHDoGMc,925
267
270
  wbportfolio/migrations/0085_order_desired_target_weight.py,sha256=L8p5t4PqjWIwqwiqt-ofdfGkBhm-7dtbg52cIkxNnDs,803
268
271
  wbportfolio/migrations/0086_orderproposal_total_cash_weight.py,sha256=IE65OYYBOSQjj6znl9jmsMalxDmKdnHV1DbVz_ZX_M4,689
272
+ wbportfolio/migrations/0087_product_order_routing_custodian_adapter.py,sha256=4OHTjdXNwJ-My8EgUGYWM_vRBccjYgghjN4fLV0n1yQ,4564
273
+ wbportfolio/migrations/0088_orderproposal_total_effective_portfolio_contribution.py,sha256=6Q41GSbWg_L8r6FUcQ9MrdpRazOdUlc7tD8_bmg8a3Y,521
269
274
  wbportfolio/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
270
275
  wbportfolio/models/__init__.py,sha256=qU4e7HKyh8NL_0Mg92PcbHTewCv7Ya2gei1DMGe1LWE,980
271
276
  wbportfolio/models/adjustments.py,sha256=osXWkJZOiansPWYPyHtl7Z121zDWi7u1YMtrBQtbHVo,10272
272
277
  wbportfolio/models/asset.py,sha256=K0cvK-g1dUmQLjVAboUm3zDb4YGW_Wu9eRMdhfEMSck,39123
273
- wbportfolio/models/builder.py,sha256=SoyJ7Ri3g5rGhZVq5rqJynW34Q8GYfUJg7QcbBTnOa8,11522
278
+ wbportfolio/models/builder.py,sha256=txZE_gEDgkPgSxSF0AlvZiRyhRQixD4Ame0wEF6Fjoo,14028
274
279
  wbportfolio/models/custodians.py,sha256=owTiS2Vm5CRKzh9M_P9GOVg-s-ndQ9UvRmw3yZP7cw0,3815
275
280
  wbportfolio/models/exceptions.py,sha256=3ix0tWUO-O6jpz8f07XIwycw2x3JFRoWzjwil8FVA2Q,52
276
281
  wbportfolio/models/indexes.py,sha256=gvW4K9U9Bj8BmVCqFYdWiXvDWhjHINRON8XhNsZUiQY,639
277
- wbportfolio/models/portfolio.py,sha256=gBgukGpEPkBt_eQv8FvGwku0yyvleRqVV6moTk5sSLY,53317
282
+ wbportfolio/models/portfolio.py,sha256=Lrtxa-jItT9HCBQxfUClnXdaLPTf4CKZEXwAEmkhNtE,54618
278
283
  wbportfolio/models/portfolio_cash_flow.py,sha256=uElG7IJUBY8qvtrXftOoskX6EA-dKgEG1JJdvHeWV7g,7336
279
284
  wbportfolio/models/portfolio_cash_targets.py,sha256=WmgG-etPisZsh2yaFQpz7EkpvAudKBEzqPsO715w52U,1498
280
285
  wbportfolio/models/portfolio_relationship.py,sha256=ZGECiPZiLdlk4uSamOrEfuzO0hduK6OMKJLUSnh5_kc,5190
281
286
  wbportfolio/models/portfolio_swing_pricings.py,sha256=_LqYC1VRjnnFFmVqFPRdnbgYsVxocMVpClTk2dnooig,1778
282
287
  wbportfolio/models/product_groups.py,sha256=qoT8qv6tRdD6zmNDxsHO6dtnWw1-TRnyS5NqOq_gwhI,7901
283
288
  wbportfolio/models/products.py,sha256=8XXx6sN3cUCls_TlwAc8-vL1bNn0JQRAxeCeyLJlmG8,23177
284
- wbportfolio/models/rebalancing.py,sha256=6KURFl0j121ccd4ksuXJqKQF1aPaA7W0DkHFIlBFGow,7690
289
+ wbportfolio/models/rebalancing.py,sha256=Mw24JO4C8jRA6U7dgsNR8usgIO1VqMgsVs94HdC07cE,7729
285
290
  wbportfolio/models/registers.py,sha256=qA6T33t4gxFYnabQFBMd90WGIr6wxxirDLKDFqjOfok,4667
286
291
  wbportfolio/models/roles.py,sha256=wF5Atp0xsJxDrYjmFw9XHgEOe_4C-lm4pppeYdymOrA,7343
287
292
  wbportfolio/models/signals.py,sha256=jZKC43nIqVdLapwo3getIMSqPUwbK5M36MmvA50jY24,1041
@@ -291,11 +296,12 @@ wbportfolio/models/graphs/portfolio.py,sha256=NwkehWvTcyTYrKO5ku3eNNaYLuBwuLdSbT
291
296
  wbportfolio/models/graphs/utils.py,sha256=1AMpEE9mDuUZ82XgN2irxjCW1-LmziROhKevEBo0mJE,2347
292
297
  wbportfolio/models/llm/wbcrm/analyze_relationship.py,sha256=etKdmt9m6Ra5u7EA9t98RVSqFKpbFd4iwBVaH9T26M8,2320
293
298
  wbportfolio/models/mixins/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
294
- wbportfolio/models/mixins/instruments.py,sha256=SgBreTpa_X3uyCWo7t8B0VaTtl49IjmBMe4Pab6TjAM,6796
299
+ wbportfolio/models/mixins/instruments.py,sha256=SuMPquQ93D4pZMK-4hQbJtV58_NOyf3wVOctQq7LNXQ,7054
295
300
  wbportfolio/models/mixins/liquidity_stress_test.py,sha256=iQVzT3QM7VtHnqfj9gT6KUIe4wC4MJXery-AXJHUYns,58820
296
301
  wbportfolio/models/orders/__init__.py,sha256=EH9UacGR3npBMje5FGTeLOh1xqFBh9kc24WbGmBIA3g,69
297
- wbportfolio/models/orders/order_proposals.py,sha256=6aKeBYax3aGsDLmPYI94Pa8nnANUP7SGWAJudSmZjxA,41820
298
- wbportfolio/models/orders/orders.py,sha256=-L-cKATF8gdgSReQL_SobfD207kzQoKy24pF1nPLVEM,9713
302
+ wbportfolio/models/orders/order_proposals.py,sha256=RYiQRo93RoXRy-QKl9shIGb4OfueiUT6we9uoQXokQk,57039
303
+ wbportfolio/models/orders/orders.py,sha256=kiVmVeW2D1bAuT983nSeIug6uoZ78IZovuAgls-CO8w,10150
304
+ wbportfolio/models/orders/routing.py,sha256=OpeP-rfMm1UN7a3vbNxBEQxqtGfE57AeGWnbTZa1fRQ,2223
299
305
  wbportfolio/models/reconciliations/__init__.py,sha256=MXH5fZIPGDRBgJkO6wVu_NLRs8fkP1im7G6d-h36lQY,127
300
306
  wbportfolio/models/reconciliations/account_reconciliation_lines.py,sha256=QP6M7hMcyFbuXBa55Y-azui6Dl_WgbzMntEqWzQkbfM,7394
301
307
  wbportfolio/models/reconciliations/account_reconciliations.py,sha256=rofSxetFfEJov6mPyoTvGxELA16HILyJZtQvm_kwYU0,4405
@@ -305,23 +311,26 @@ wbportfolio/models/transactions/claim.py,sha256=SF2FlwG6SRVmA_hT0NbXah5-fYejccWK
305
311
  wbportfolio/models/transactions/dividends.py,sha256=mmOdGWR35yndUMoCuG24Y6BdtxDhSk2gMQ-8LVguqzg,1890
306
312
  wbportfolio/models/transactions/fees.py,sha256=wJtlzbBCAq1UHvv0wqWTE2BEjCF5RMtoaSDS3kODFRo,7112
307
313
  wbportfolio/models/transactions/trades.py,sha256=2cDNjf1hJwFwrDT1SLacUU-Nkt5kU62zjI3WIj_Q0vQ,16340
308
- wbportfolio/models/transactions/transactions.py,sha256=XTcUeMUfkf5XTSZaR2UAyGqCVkOhQYk03_vzHLIgf8Q,3807
314
+ wbportfolio/models/transactions/transactions.py,sha256=6resBETl_3an6TFLdnSYLXt6QKg5m4JpC9XAGvEK2Ts,3817
315
+ wbportfolio/order_routing/__init__.py,sha256=kYloUGytPBNB8KVy5ysm9PlEEU_sGPk5c3ch46dXeJo,604
316
+ wbportfolio/order_routing/adapters/__init__.py,sha256=YiM5FFvLucDTBgIn3mCBjKNSRU7K2pokHdbWBoaZA94,1549
317
+ wbportfolio/order_routing/adapters/ubs.py,sha256=_Z9-j1a6_F08VlNIjLLn5XmhoKSZQTTH14lGeTgbu9A,6328
309
318
  wbportfolio/pms/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
310
- wbportfolio/pms/typing.py,sha256=Yqo_QDZEVT4yHvgOqFf2vpYG3UYMPw5qNVR6M9KcPv0,8950
319
+ wbportfolio/pms/typing.py,sha256=kNesj7e-SA9lKgmdInJ94R60-pXNKm6guSj_cD3CQUE,10638
311
320
  wbportfolio/pms/analytics/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
312
321
  wbportfolio/pms/analytics/portfolio.py,sha256=u_S-e6HUQwAyq90gweDmxyTHWrIc5nd84sLuUF2iJzA,2031
313
322
  wbportfolio/pms/analytics/utils.py,sha256=EfhKdo9B2ABaUPppb8DgZSqpNkSze8Rjej1xDjv-XcQ,282
314
323
  wbportfolio/pms/statistics/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
315
324
  wbportfolio/pms/trading/__init__.py,sha256=R_yLKc54sCak8A1cW0O1Aszrcv5KV8mC_3h17Hr20e4,36
316
- wbportfolio/pms/trading/handler.py,sha256=D903Hn0PpI1_9lFGPX847aaKp1nlKeWulxH_prCdWzw,8492
325
+ wbportfolio/pms/trading/handler.py,sha256=sGwtwerozgiCVOTeQgJ0Q9g1zzQCPuydkf0aWn6NnGs,8646
317
326
  wbportfolio/rebalancing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
318
327
  wbportfolio/rebalancing/base.py,sha256=wpeoxdkLz5osxm5mRjkOoML7YkYvwuAlqSLLtHBbWp8,984
319
328
  wbportfolio/rebalancing/decorators.py,sha256=162ZmXV2YQGI830LWvEnJ95RexMzHvaCGfcVOnXTOXM,502
320
329
  wbportfolio/rebalancing/models/__init__.py,sha256=AQjG7Tu5vlmhqncVoYOjpBKU2UIvgo9FuP2_jD2w-UI,232
321
- wbportfolio/rebalancing/models/composite.py,sha256=N2IC3ZjqNzfHTvLeUj8aSsn2jx7gFN3pzAh5bOK6pIk,1672
322
- wbportfolio/rebalancing/models/equally_weighted.py,sha256=JF6VoAcsHUUJvTBeUtIn2ojWtrn4pVH1PMTyJ2Y69qg,1301
323
- wbportfolio/rebalancing/models/market_capitalization_weighted.py,sha256=JPVT1UmDOU21S_jdYhOXHQHRnH0BbqVYGxRG4hOolI0,5643
324
- wbportfolio/rebalancing/models/model_portfolio.py,sha256=Dk3tw9u3WG1jCP3V2-R05GS4-DmDBBtxH4h6p7pRe4g,1393
330
+ wbportfolio/rebalancing/models/composite.py,sha256=kDa4-Q3aMOrBGrrfIwTyjik14vF8cjfD-ArIm8FCR9A,1671
331
+ wbportfolio/rebalancing/models/equally_weighted.py,sha256=iv6FiICGQX1mPnkK2L4oDeCH_-4yF8SL8YUBzjXBZsI,1306
332
+ wbportfolio/rebalancing/models/market_capitalization_weighted.py,sha256=3Lm3A4yBj_QEBw0EjTvn39f1vFzjLz_ITDUQCAXuxJg,5642
333
+ wbportfolio/rebalancing/models/model_portfolio.py,sha256=_j892V6YCrXLzNZdpxuKmaNu_VYfamStwb6Z-4sECPA,1326
325
334
  wbportfolio/reports/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
326
335
  wbportfolio/reports/monthly_position_report.py,sha256=e7BzjDd6eseUOwLwQJXKvWErQ58YnCsznHU2VtR6izM,2981
327
336
  wbportfolio/risk_management/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -357,17 +366,17 @@ wbportfolio/serializers/portfolio_cash_targets.py,sha256=_GdsFXoBda1JHJnfZbaVlNF
357
366
  wbportfolio/serializers/portfolio_relationship.py,sha256=UR_GIF2LHw82a8mv6L8OXYvoCp5-QWtubt33Y4mqFow,1933
358
367
  wbportfolio/serializers/portfolio_swing_pricing.py,sha256=a21st7MmcugbAO_xc90QWSeXwU1ivk-y2PWlMGKySJY,655
359
368
  wbportfolio/serializers/portfolios.py,sha256=bEHyIlkw_zNzuurf-57RrQPOSQwxN_qJsT889cuLahs,7684
360
- wbportfolio/serializers/positions.py,sha256=UK9dvE1wiILw2E209InrsUhme52vfUYDDERBeKCcn_k,2415
369
+ wbportfolio/serializers/positions.py,sha256=ZjRsvdsKRFR5z98_iJyQ20ykGmPJqKesNPwA-vw_yPU,2415
361
370
  wbportfolio/serializers/product_group.py,sha256=klPGmAb1MvJpyiKKMRb8uYFIMm6SCZkMFQDu5EH-mkY,3680
362
371
  wbportfolio/serializers/products.py,sha256=B1udmx6PibxpesFndl7nb7x86P8WPcksDssmqNdZ3Uo,12694
363
- wbportfolio/serializers/rebalancing.py,sha256=TX8Efann1oDhxZqoHiobJPMzXq7UxlcHMj54IdHXwP4,1840
372
+ wbportfolio/serializers/rebalancing.py,sha256=NL4BG_e9qOZqrl4Yag_sgLxOheHJklAOHaCtX7rctMc,1838
364
373
  wbportfolio/serializers/reconciliations.py,sha256=oFvGCAGioAOBK3xXjfwjMVYOXv3AbSyMg6YK6Olp6ow,7373
365
374
  wbportfolio/serializers/registers.py,sha256=zhdKH_mHEBE0VOhm6xpY54bTMtcSaY5BskEaJxtFd5Q,2737
366
375
  wbportfolio/serializers/roles.py,sha256=T-9NqTldpvaEMFy-Bib5MB6MeboygEOqcMP61mzzD3Q,2146
367
376
  wbportfolio/serializers/signals.py,sha256=hD6R4oFtwhvnsJPteytPKy2JwEelmxrapdfoLSnluaE,7053
368
377
  wbportfolio/serializers/orders/__init__.py,sha256=PKJRksA1pWsh8nVfGASoB0m3LyUzVRnq1m9VPp90J7k,271
369
- wbportfolio/serializers/orders/order_proposals.py,sha256=6w1XKiAdQLDd_d2DMniv_zx--8uom-yT6OLya2uDA2Y,3878
370
- wbportfolio/serializers/orders/orders.py,sha256=pAKjJLRANOo1iMlcv18twuQ0aAVDVKYt-pPx6avnWRQ,7464
378
+ wbportfolio/serializers/orders/order_proposals.py,sha256=wIxnTY35dn7gH1kj9wGHnl2lOrR6ikRdqxXrSf85tT0,4762
379
+ wbportfolio/serializers/orders/orders.py,sha256=7zIl5lwt7RatSVcrmNmLpWX2r2VkND33HQOUkryGjYo,7582
371
380
  wbportfolio/serializers/transactions/__init__.py,sha256=-7Pan4n7YI3iDvGXff6okzk4ycEURRxp5n_SHCY_g_I,493
372
381
  wbportfolio/serializers/transactions/claim.py,sha256=kC4E2RZRrpd9i8tGfoiV-gpWDk3ikR5F1Wf0v_IGIvw,11599
373
382
  wbportfolio/serializers/transactions/dividends.py,sha256=ADXf9cXe8rq55lC_a8vIzViGLmQ-yDXkgR54k2m-N0w,1814
@@ -396,29 +405,29 @@ wbportfolio/tests/models/test_assets.py,sha256=N8OP2ZTPdq0lGonFRB0q_ruwF8QYpOGLk
396
405
  wbportfolio/tests/models/test_custodians.py,sha256=WnFA4R-deVL7DSKufGE0mcFUdU05otNfGvmG4psiIh4,340
397
406
  wbportfolio/tests/models/test_customer_trades.py,sha256=50By281j-nJ43jwRWK_KxNQGv6SuimT9e_ejgu6b19o,4942
398
407
  wbportfolio/tests/models/test_dividends.py,sha256=SVkIW3OqN4-9tq1HIvJm8_8rOyNTHbJKFiN075DeGGc,162
399
- wbportfolio/tests/models/test_imports.py,sha256=-8qWpShRxbjnUj2l7OQagMmI61xVReO3JdlaGxtuXM4,7736
408
+ wbportfolio/tests/models/test_imports.py,sha256=byqRJlnWqkkLdb8CkaX0cPGqfICOkuZ2_6tBk2YR3D0,7857
400
409
  wbportfolio/tests/models/test_instrument_mixins.py,sha256=avX7a7Ovdzm_2v8JpSmrzqPo52qmIEa33c074D5KFCU,2206
401
410
  wbportfolio/tests/models/test_merge.py,sha256=sdsjiZsmR6vsUKwTa5kkvL6QTeAZqtd_EPWPI11FKGY,6497
402
411
  wbportfolio/tests/models/test_portfolio_cash_flow.py,sha256=X8dsXexsb1b0lBiuGzu40ps_Az_1UmmKT0eo1vbXH94,5792
403
412
  wbportfolio/tests/models/test_portfolio_cash_targets.py,sha256=q8QWAwt-kKRkLC0E05GyRhF_TTQXIi8bdHjXVU0fCV0,965
404
413
  wbportfolio/tests/models/test_portfolio_swing_pricings.py,sha256=kr2AOcQkyg2pX3ULjU-o9ye-NVpjMrrfoe-DVbYCbjs,1656
405
- wbportfolio/tests/models/test_portfolios.py,sha256=VdfkblwSow1w-HLFto8wssuBTjSqaCBpE1_Tf6wb0R0,51878
414
+ wbportfolio/tests/models/test_portfolios.py,sha256=qaNTgvtxSROpjPtzSffLMrnsOJYjftN8gNhqmAm8fLE,53819
406
415
  wbportfolio/tests/models/test_product_groups.py,sha256=AcdxhurV-n_bBuUsfD1GqVtwLFcs7VI2CRrwzsIUWbU,3337
407
416
  wbportfolio/tests/models/test_products.py,sha256=zB3xDGk7k7omI61hU9cnU96oBc3ICiMaYtFC9pidars,9965
408
417
  wbportfolio/tests/models/test_roles.py,sha256=4Cn7WyrA2ztJNeWLk5cy9kYo5XLWMbFSvo1O-9JYxeA,3323
409
418
  wbportfolio/tests/models/test_splits.py,sha256=ytKcHsI_90kj1L4s8It-KEcc24rkDcElxwQ8q0QxEvk,9689
410
419
  wbportfolio/tests/models/utils.py,sha256=ORNJq6NMo1Za22jGZXfTfKeNEnTRlfEt_8SJ6xLaQWg,325
411
420
  wbportfolio/tests/models/orders/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
412
- wbportfolio/tests/models/orders/test_order_proposals.py,sha256=Cdv-tESJSyHyXzA6ABHMNGSG51NDIagH1LGw8wYo7lo,33309
421
+ wbportfolio/tests/models/orders/test_order_proposals.py,sha256=WxZgoN0J7rF5TVa_hmXZdYnUXtrU0eH-U9CW1NWNBIM,34123
413
422
  wbportfolio/tests/models/transactions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
414
423
  wbportfolio/tests/models/transactions/test_claim.py,sha256=NG3BKB-FVcIDgHSJHCjImxgMM3ISVUMl24xUPmEcPec,5570
415
424
  wbportfolio/tests/models/transactions/test_fees.py,sha256=tAp18x2wCNQr11LUnLtHNbBDbbX0v1DZnmW7i-cEi5Q,2423
416
- wbportfolio/tests/models/transactions/test_rebalancing.py,sha256=jmnv8pg_hyCsRjDmfCq1lCdEYzGpgvkBHYVrWhUJR2M,4061
425
+ wbportfolio/tests/models/transactions/test_rebalancing.py,sha256=JgBKrBFBU3lz1CiGU_Hk3ak6bnekWyK5kVZ1HxaoiCU,4058
417
426
  wbportfolio/tests/models/transactions/test_trades.py,sha256=q54umbOG1GUAxE4ruYadaS6IqZAFoxQ5Ux_g94CcmWQ,8867
418
427
  wbportfolio/tests/pms/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
419
428
  wbportfolio/tests/pms/test_analytics.py,sha256=KzgZqZ9yYB1gsokw6IU-uKYWr1eFHWyFte8RSpMVRg8,1897
420
429
  wbportfolio/tests/rebalancing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
421
- wbportfolio/tests/rebalancing/test_models.py,sha256=XhDdWBpVu0a_CmBtUSrLoPLUB8CZQMkSLtu26Q7DdL8,7883
430
+ wbportfolio/tests/rebalancing/test_models.py,sha256=sJnVWM1kWUKeK3et2HiJb8RjL1DmU8JDHNHqFPhVhDw,7747
422
431
  wbportfolio/tests/serializers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
423
432
  wbportfolio/tests/serializers/test_claims.py,sha256=vQrg73xQXRFEgvx3KI9ivFre_wpBFzdO0p0J13PkvdY,582
424
433
  wbportfolio/tests/viewsets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -438,7 +447,7 @@ wbportfolio/viewsets/portfolio_cash_flow.py,sha256=jkBfdZRQ3KsxGMJpltRjmdrZ2qEFJ
438
447
  wbportfolio/viewsets/portfolio_cash_targets.py,sha256=CvHlrDE8qnnnfRpTYnFu-Uu15MDbF5d5gTmEKth2S24,322
439
448
  wbportfolio/viewsets/portfolio_relationship.py,sha256=RGyvxd8NfFEs8YdqEvVD3VbrISvAO5UtCTlocSIuWQw,2109
440
449
  wbportfolio/viewsets/portfolio_swing_pricing.py,sha256=-57l3WLQZRslIV67OT0ucHE5JXTtTtLvd3t7MppdVn8,357
441
- wbportfolio/viewsets/portfolios.py,sha256=6aF2Uh0EAdHdX1mMTQrFBlXZ5kmlaCPz49iDvT2CnYM,14438
450
+ wbportfolio/viewsets/portfolios.py,sha256=cF1XnSM6oQFgwYMo6wMF0u7WCwyPGdTTa3FUJI91mB0,14430
442
451
  wbportfolio/viewsets/positions.py,sha256=fYmkcYwNybeEZejMZVvel8yFdr7ob_jG8t6ar7snD58,13236
443
452
  wbportfolio/viewsets/product_groups.py,sha256=YvmuXPPy98K1J_rz6YPsx9gNK-tCS2P-wc1uRYgfyo0,2399
444
453
  wbportfolio/viewsets/product_performance.py,sha256=dRfRgifjGS1RgZSu9uJRM0SmB7eLnNUkPuqARMO4gyo,28371
@@ -448,7 +457,7 @@ wbportfolio/viewsets/reconciliations.py,sha256=tRS7UBDtMn-07uA9QqYvnCtp_mZGVeULF
448
457
  wbportfolio/viewsets/registers.py,sha256=eOuEhW2McHsOapCKue7M4eazrJnVpCBVxImpFccq0z0,2401
449
458
  wbportfolio/viewsets/roles.py,sha256=vnzS1mlJMZS3GObrss6SfXOr3KRb-OHB1s4Msvtn7xQ,1556
450
459
  wbportfolio/viewsets/charts/__init__.py,sha256=zE3bxS0V-nM_yZ610M7qsaToNOJXvTjwFLhH1it3h4M,169
451
- wbportfolio/viewsets/charts/assets.py,sha256=2ZyEFz9g9ZZzUcZVOVs0jBefrQkOxy-O1fFrvnwo5oY,17813
460
+ wbportfolio/viewsets/charts/assets.py,sha256=P5ZQ7Kihw3Eab7n7CKxMLdkdWGyiF-qpntw_x9iRJuc,17906
452
461
  wbportfolio/viewsets/configs/__init__.py,sha256=K5opfVQvgGwSyw3XwDGkv3lo5i9jBxOJXYhLqyCdfeQ,137
453
462
  wbportfolio/viewsets/configs/buttons/__init__.py,sha256=hyvpxwh9ss8Q0xcE006qsTLuSsJeWt9saHRcU4g96tA,791
454
463
  wbportfolio/viewsets/configs/buttons/adjustments.py,sha256=sUY_3vxqP0kuqs8i5hklfboZI6QiAOrmu30eb29Xupo,492
@@ -477,7 +486,7 @@ wbportfolio/viewsets/configs/display/positions.py,sha256=yolWLxzGPIpSQSiVhVQChUR
477
486
  wbportfolio/viewsets/configs/display/product_groups.py,sha256=PwI-A0_ofShT2pub9-C1HqreiqpHxKMHd51JYwEzvbM,2500
478
487
  wbportfolio/viewsets/configs/display/product_performance.py,sha256=6Mme48JBn_okwClR44dBK2OK26ejvdasDvBa5DI33_0,10070
479
488
  wbportfolio/viewsets/configs/display/products.py,sha256=8Ssmb4IjqXwTX81aKmLVbmWZcD_8uHa08vieO6cgjoM,10686
480
- wbportfolio/viewsets/configs/display/rebalancing.py,sha256=8B4OG9SYQGc_sVL0BjxfHGVM7QS7-hNHcnYxYvTq5TI,1112
489
+ wbportfolio/viewsets/configs/display/rebalancing.py,sha256=3A5JFy6-lMcsyoUCW5qPBpwfKqVQRXUA2qDrDz4Yjlc,1108
481
490
  wbportfolio/viewsets/configs/display/reconciliations.py,sha256=YvMAuwmpX0HExvGsuf5UvcRQxe4eMo1iyNJX68GGC_k,6021
482
491
  wbportfolio/viewsets/configs/display/registers.py,sha256=1np75exIk5rfct6UkVN_RnfJ9ozvIkcWJgFV4_4rJns,3182
483
492
  wbportfolio/viewsets/configs/display/roles.py,sha256=SFUyCdxSlHZ3NsMrJmpVBSlg-XKGaEFteV89nyLMMAQ,1815
@@ -499,13 +508,14 @@ wbportfolio/viewsets/configs/endpoints/rebalancing.py,sha256=D0VqMkWUeC-4mSN-GbZ
499
508
  wbportfolio/viewsets/configs/endpoints/reconciliations.py,sha256=xriq1KSctxQa6AE9SgkupMPVa9807OyYSIYhWk9WBpM,1059
500
509
  wbportfolio/viewsets/configs/endpoints/roles.py,sha256=5Nwi2sdUYc85YL0wJ7SUtt87ZBTOVdFnEexUgVrmcX4,367
501
510
  wbportfolio/viewsets/configs/endpoints/trades.py,sha256=x6GwKkjZjBrRSZPorlIQdL3VPBUJVXjgn4v3HSLI2G8,1808
502
- wbportfolio/viewsets/configs/menu/__init__.py,sha256=3rcUt24ye5Rdzt7bpbvkUqQS6F4uy6iiHjIixPbm16I,1137
511
+ wbportfolio/viewsets/configs/menu/__init__.py,sha256=36o0jtf8dAKNnRA84QWQoihu9YG5QnKACFhAXU6M3CY,1179
503
512
  wbportfolio/viewsets/configs/menu/adjustments.py,sha256=sQ25Jp2N8nsLSUOEJTJUBE0Y7bIPHK4Y6LE0e1OzX38,316
504
513
  wbportfolio/viewsets/configs/menu/assets.py,sha256=FkddF1_mu01e1mnkJkXPQcE0izI0Q3wU7VBFIkeT-Qw,340
505
514
  wbportfolio/viewsets/configs/menu/claim.py,sha256=Q9Gf2spOB_S41ItzAJ7D9ARowxtVrLLBTeA757nXn38,1414
506
515
  wbportfolio/viewsets/configs/menu/custodians.py,sha256=W01URxeqDzcu--5R51QCBzbhSZ38Ruix5_ES5zI6Gp8,360
507
516
  wbportfolio/viewsets/configs/menu/fees.py,sha256=iYAMzavfTKSYo6CBzVrSggxl7kKwE1h_jHGCgV4pYm8,499
508
517
  wbportfolio/viewsets/configs/menu/instrument_prices.py,sha256=9bYMHq7AoPnaqdZ_6w3sEpk4X8Ptr_RnTlwxoE8lVow,358
518
+ wbportfolio/viewsets/configs/menu/orders.py,sha256=zyTvKDfRwoWjPP3IYLpufudtrRxrPTkoVBsnHvml6TY,426
509
519
  wbportfolio/viewsets/configs/menu/portfolio_cash_flow.py,sha256=JqTtceY6cH0fldMMT4AbEtrG855LWSJn4SG45-2-xec,343
510
520
  wbportfolio/viewsets/configs/menu/portfolios.py,sha256=ezR5a1gwAbjsdNV9YsfZ-c1f_oRFHpFhRQlU2x-VPV8,467
511
521
  wbportfolio/viewsets/configs/menu/positions.py,sha256=ejq6ZMcaYptogh8UMX-jwRdxXi8I2MsCcanYJanxesI,608
@@ -536,15 +546,15 @@ wbportfolio/viewsets/configs/titles/registers.py,sha256=-C-YeGBhGva48oER6EIQ8CxW
536
546
  wbportfolio/viewsets/configs/titles/roles.py,sha256=9LoJa3jgenXJ5UWRlIErTzdbjpSWMKsyJZtv-eDRTK4,739
537
547
  wbportfolio/viewsets/configs/titles/trades.py,sha256=29XCLxvY0Xe3a2tjCno3tN2rRXCr9RWpbWnzurJfnYI,1986
538
548
  wbportfolio/viewsets/orders/__init__.py,sha256=N8v9jdEXryOzrLlc7ML3iBCO2lmNXph9_TWoQ7PTvi4,195
539
- wbportfolio/viewsets/orders/order_proposals.py,sha256=RTxOT9gH8_5Dcm4DGrnrk86ExqNoEHHo8tgh38OtIoo,6356
540
- wbportfolio/viewsets/orders/orders.py,sha256=u3tRqio-oCnmqhC5jmn_EDKoNrF1xXMgOu2c2BfqNS8,10851
549
+ wbportfolio/viewsets/orders/order_proposals.py,sha256=-VmvLEtL6-lhqT3WuyZlwnH1XFHpzuT9JBQclhRlNkY,8289
550
+ wbportfolio/viewsets/orders/orders.py,sha256=ENFcW4feaazV1FupeI5UiE4W9wv0k8b57ypDB7gr1KA,10928
541
551
  wbportfolio/viewsets/orders/configs/__init__.py,sha256=5MU57JXiKi32_PicHtiNr7YHmMN020FrlF5NFJf_Wds,94
542
552
  wbportfolio/viewsets/orders/configs/buttons/__init__.py,sha256=EHzNmAfa0UQFITEF-wxj_s4wn3Y5DE3DCbEUmmvCTIs,106
543
- wbportfolio/viewsets/orders/configs/buttons/order_proposals.py,sha256=loDbYz5_7FACheiooghIAQLSqascLxdF2bTVxPvRVmE,4192
553
+ wbportfolio/viewsets/orders/configs/buttons/order_proposals.py,sha256=1BPkIYv0-K2DDGa4Gua2_Pxsx7fNurTZ2tYNdL66On0,6495
544
554
  wbportfolio/viewsets/orders/configs/buttons/orders.py,sha256=GDO4Y33wkjhDxzpf7B1d_rKzAixegLv5rHam1DV3WkM,290
545
555
  wbportfolio/viewsets/orders/configs/displays/__init__.py,sha256=__YJBbz_ZnKpE8WMMDR2PC9Nng-EVlRpGTEQucdrhRA,108
546
- wbportfolio/viewsets/orders/configs/displays/order_proposals.py,sha256=Iy195FwD2KGxxNWYspAj7CKQ0assL_wtQx0hN7KMz9o,4985
547
- wbportfolio/viewsets/orders/configs/displays/orders.py,sha256=8YW5Sncmowl5eLbnuUkD5xQXnP4P3vM6aBXNvolFG1s,7007
556
+ wbportfolio/viewsets/orders/configs/displays/order_proposals.py,sha256=1HnQGR8WFSWHfugEhbTrCaxZ5pabzH8iaLKVBb_Fowc,7282
557
+ wbportfolio/viewsets/orders/configs/displays/orders.py,sha256=R1oaDTGosL430xnYZpJz7ihnCOCO6eAFhDQz-wGYT24,7611
548
558
  wbportfolio/viewsets/orders/configs/endpoints/__init__.py,sha256=IB8GEadiEtBDclhkgpcJGXWfCF6qRK_42hxJ4pcdZDU,148
549
559
  wbportfolio/viewsets/orders/configs/endpoints/order_proposals.py,sha256=fY3y2YWR9nY-KE8k078NszDsnwOgqOIjHUgLvQjDivU,822
550
560
  wbportfolio/viewsets/orders/configs/endpoints/orders.py,sha256=Iic9RWLHiP2zxq6xve99lwVYCSMLX4T2euS7cJh-uOQ,1088
@@ -555,7 +565,7 @@ wbportfolio/viewsets/transactions/claim.py,sha256=Pb1WftoO-w-ZSTbLRhmQubhy7hgd68
555
565
  wbportfolio/viewsets/transactions/fees.py,sha256=WT2bWWfgozz4_rpyTKX7dgBBTXD-gu0nlsd2Nk2Zh1Q,7028
556
566
  wbportfolio/viewsets/transactions/mixins.py,sha256=WipvJoi5hylkpD0y9VATe30WAcwIHUIroVkK10FYw7k,636
557
567
  wbportfolio/viewsets/transactions/trades.py,sha256=xBgOGaJ8aEg-2RxEJ4FDaBs4SGwuLasun3nhpis0WQY,12363
558
- wbportfolio-1.54.23.dist-info/METADATA,sha256=T5JCRTfsyGdh4UnE0qS0YtJHigKneYf8D7-5mT_ixLw,752
559
- wbportfolio-1.54.23.dist-info/WHEEL,sha256=tkmg4JIqwd9H8mL30xA7crRmoStyCtGp0VWshokd1Jc,105
560
- wbportfolio-1.54.23.dist-info/licenses/LICENSE,sha256=jvfVH0SY8_YMHlsJHKe_OajiscQDz4lpTlqT6x24sVw,172
561
- wbportfolio-1.54.23.dist-info/RECORD,,
568
+ wbportfolio-1.55.0.dist-info/METADATA,sha256=s1b7Uq_ApxcCUFeHjg2DpMT-MGVZjDLzo_8TRrGPTao,751
569
+ wbportfolio-1.55.0.dist-info/WHEEL,sha256=tkmg4JIqwd9H8mL30xA7crRmoStyCtGp0VWshokd1Jc,105
570
+ wbportfolio-1.55.0.dist-info/licenses/LICENSE,sha256=jvfVH0SY8_YMHlsJHKe_OajiscQDz4lpTlqT6x24sVw,172
571
+ wbportfolio-1.55.0.dist-info/RECORD,,