wbportfolio 1.44.2__tar.gz → 1.44.3__tar.gz

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 (508) hide show
  1. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/PKG-INFO +1 -1
  2. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/analysis/claims.py +12 -7
  3. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/filters/products.py +1 -1
  4. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/filters/signals.py +0 -20
  5. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/filters/transactions/__init__.py +1 -0
  6. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/filters/transactions/claim.py +14 -2
  7. wbportfolio-1.44.3/wbportfolio/migrations/0072_trade_diff_shares.py +19 -0
  8. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/models/asset.py +4 -1
  9. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/models/portfolio.py +2 -1
  10. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/models/portfolio_cash_flow.py +3 -2
  11. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/models/transactions/trades.py +57 -51
  12. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/risk_management/tests/test_accounts.py +24 -12
  13. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/serializers/transactions/trades.py +2 -6
  14. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/transactions/claim.py +46 -20
  15. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/transactions/trades.py +23 -5
  16. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/transactions/transactions.py +2 -4
  17. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/.gitignore +0 -0
  18. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/LICENSE +0 -0
  19. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/pyproject.toml +0 -0
  20. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/__init__.py +0 -0
  21. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/admin/__init__.py +0 -0
  22. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/admin/asset.py +0 -0
  23. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/admin/custodians.py +0 -0
  24. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/admin/portfolio.py +0 -0
  25. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/admin/portfolio_relationships.py +0 -0
  26. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/admin/product_groups.py +0 -0
  27. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/admin/products.py +0 -0
  28. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/admin/reconciliations.py +0 -0
  29. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/admin/registers.py +0 -0
  30. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/admin/roles.py +0 -0
  31. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/admin/synchronization/__init__.py +0 -0
  32. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/admin/synchronization/admin.py +0 -0
  33. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/admin/synchronization/portfolio_synchronization.py +0 -0
  34. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/admin/synchronization/price_computation.py +0 -0
  35. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/admin/transactions/__init__.py +0 -0
  36. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/admin/transactions/claim.py +0 -0
  37. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/admin/transactions/dividends.py +0 -0
  38. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/admin/transactions/fees.py +0 -0
  39. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/admin/transactions/trades.py +0 -0
  40. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/admin/transactions/transactions.py +0 -0
  41. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/analysis/__init__.py +0 -0
  42. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/apps.py +0 -0
  43. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/contrib/__init__.py +0 -0
  44. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/contrib/company_portfolio/__init__.py +0 -0
  45. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/contrib/company_portfolio/admin.py +0 -0
  46. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/contrib/company_portfolio/apps.py +0 -0
  47. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/contrib/company_portfolio/configs/__init__.py +0 -0
  48. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/contrib/company_portfolio/configs/display.py +0 -0
  49. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/contrib/company_portfolio/configs/endpoints.py +0 -0
  50. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/contrib/company_portfolio/configs/previews.py +0 -0
  51. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/contrib/company_portfolio/constants.py +0 -0
  52. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/contrib/company_portfolio/dynamic_preferences_registry.py +0 -0
  53. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/contrib/company_portfolio/factories.py +0 -0
  54. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/contrib/company_portfolio/filters.py +0 -0
  55. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/contrib/company_portfolio/management.py +0 -0
  56. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/contrib/company_portfolio/migrations/0001_initial.py +0 -0
  57. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/contrib/company_portfolio/migrations/__init__.py +0 -0
  58. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/contrib/company_portfolio/models.py +0 -0
  59. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/contrib/company_portfolio/scripts.py +0 -0
  60. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/contrib/company_portfolio/serializers.py +0 -0
  61. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/contrib/company_portfolio/tasks.py +0 -0
  62. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/contrib/company_portfolio/tests/__init__.py +0 -0
  63. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/contrib/company_portfolio/tests/conftest.py +0 -0
  64. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/contrib/company_portfolio/tests/test_models.py +0 -0
  65. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/contrib/company_portfolio/urls.py +0 -0
  66. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/contrib/company_portfolio/viewsets.py +0 -0
  67. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/defaults/__init__.py +0 -0
  68. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/defaults/fees/__init__.py +0 -0
  69. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/defaults/fees/default.py +0 -0
  70. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/defaults/portfolio/__init__.py +0 -0
  71. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/defaults/portfolio/default_rebalancing.py +0 -0
  72. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/dynamic_preferences_registry.py +0 -0
  73. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/factories/__init__.py +0 -0
  74. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/factories/adjustments.py +0 -0
  75. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/factories/assets.py +0 -0
  76. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/factories/claim.py +0 -0
  77. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/factories/custodians.py +0 -0
  78. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/factories/dividends.py +0 -0
  79. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/factories/fees.py +0 -0
  80. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/factories/indexes.py +0 -0
  81. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/factories/portfolio_cash_flow.py +0 -0
  82. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/factories/portfolio_cash_targets.py +0 -0
  83. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/factories/portfolio_swing_pricings.py +0 -0
  84. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/factories/portfolios.py +0 -0
  85. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/factories/product_groups.py +0 -0
  86. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/factories/products.py +0 -0
  87. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/factories/pytest_utils.py +0 -0
  88. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/factories/reconciliations.py +0 -0
  89. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/factories/roles.py +0 -0
  90. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/factories/synchronization.py +0 -0
  91. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/factories/trades.py +0 -0
  92. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/factories/transactions.py +0 -0
  93. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/fdm/__init__.py +0 -0
  94. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/fdm/tasks.py +0 -0
  95. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/filters/__init__.py +0 -0
  96. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/filters/assets.py +0 -0
  97. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/filters/assets_and_net_new_money_progression.py +0 -0
  98. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/filters/custodians.py +0 -0
  99. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/filters/esg.py +0 -0
  100. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/filters/performances.py +0 -0
  101. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/filters/portfolios.py +0 -0
  102. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/filters/positions.py +0 -0
  103. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/filters/roles.py +0 -0
  104. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/filters/transactions/fees.py +0 -0
  105. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/filters/transactions/mixins.py +0 -0
  106. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/filters/transactions/trades.py +0 -0
  107. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/filters/transactions/transactions.py +0 -0
  108. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/fixtures/product_factsheets.yaml +0 -0
  109. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/fixtures/wbportfolio.yaml.gz +0 -0
  110. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/fixtures/wbrisk_management.yaml.gz +0 -0
  111. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/__init__.py +0 -0
  112. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/backends/__init__.py +0 -0
  113. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/backends/refinitiv/adjustment.py +0 -0
  114. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/backends/ubs/__init__.py +0 -0
  115. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/backends/ubs/asset_position.py +0 -0
  116. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/backends/ubs/fees.py +0 -0
  117. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/backends/ubs/instrument_price.py +0 -0
  118. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/backends/ubs/mixin.py +0 -0
  119. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/backends/utils.py +0 -0
  120. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/backends/wbfdm/__init__.py +0 -0
  121. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/backends/wbfdm/adjustment.py +0 -0
  122. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/backends/wbfdm/dividend.py +0 -0
  123. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/backends/wbfdm/mixin.py +0 -0
  124. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/handlers/__init__.py +0 -0
  125. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/handlers/adjustment.py +0 -0
  126. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/handlers/asset_position.py +0 -0
  127. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/handlers/dividend.py +0 -0
  128. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/handlers/fees.py +0 -0
  129. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/handlers/portfolio_cash_flow.py +0 -0
  130. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/handlers/register.py +0 -0
  131. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/handlers/trade.py +0 -0
  132. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/__init__.py +0 -0
  133. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/default_mapping.py +0 -0
  134. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/jpmorgan/__init__.py +0 -0
  135. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/jpmorgan/customer_trade.py +0 -0
  136. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/jpmorgan/fees.py +0 -0
  137. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/jpmorgan/strategy.py +0 -0
  138. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/jpmorgan/valuation.py +0 -0
  139. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/leonteq/__init__.py +0 -0
  140. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/leonteq/customer_trade.py +0 -0
  141. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/leonteq/equity.py +0 -0
  142. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/leonteq/fees.py +0 -0
  143. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/leonteq/trade.py +0 -0
  144. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/leonteq/valuation.py +0 -0
  145. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/natixis/__init__.py +0 -0
  146. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/natixis/customer_trade.py +0 -0
  147. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/natixis/d1_customer_trade.py +0 -0
  148. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/natixis/d1_equity.py +0 -0
  149. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/natixis/d1_fees.py +0 -0
  150. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/natixis/d1_trade.py +0 -0
  151. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/natixis/d1_valuation.py +0 -0
  152. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/natixis/dividend.py +0 -0
  153. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/natixis/equity.py +0 -0
  154. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/natixis/fees.py +0 -0
  155. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/natixis/trade.py +0 -0
  156. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/natixis/utils.py +0 -0
  157. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/natixis/valuation.py +0 -0
  158. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/refinitiv/__init__.py +0 -0
  159. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/refinitiv/adjustment.py +0 -0
  160. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/sg_lux/__init__.py +0 -0
  161. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/sg_lux/custodian_positions.py +0 -0
  162. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/sg_lux/customer_trade.py +0 -0
  163. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/sg_lux/customer_trade_pending_slk.py +0 -0
  164. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/sg_lux/customer_trade_slk.py +0 -0
  165. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/sg_lux/customer_trade_without_pw.py +0 -0
  166. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/sg_lux/equity.py +0 -0
  167. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/sg_lux/fees.py +0 -0
  168. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/sg_lux/perf_fees.py +0 -0
  169. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/sg_lux/portfolio_cash_flow.py +0 -0
  170. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/sg_lux/portfolio_future_cash_flow.py +0 -0
  171. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/sg_lux/registers.py +0 -0
  172. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/sg_lux/sylk.py +0 -0
  173. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/sg_lux/utils.py +0 -0
  174. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/sg_lux/valuation.py +0 -0
  175. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/societe_generale/__init__.py +0 -0
  176. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/societe_generale/customer_trade.py +0 -0
  177. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/societe_generale/strategy.py +0 -0
  178. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/societe_generale/valuation.py +0 -0
  179. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/tellco/__init__.py +0 -0
  180. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/tellco/customer_trade.py +0 -0
  181. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/tellco/equity.py +0 -0
  182. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/tellco/valuation.py +0 -0
  183. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/ubs/__init__.py +0 -0
  184. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/ubs/api/__init__.py +0 -0
  185. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/ubs/api/asset_position.py +0 -0
  186. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/ubs/api/fees.py +0 -0
  187. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/ubs/api/instrument_price.py +0 -0
  188. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/ubs/api/utils.py +0 -0
  189. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/ubs/customer_trade.py +0 -0
  190. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/ubs/equity.py +0 -0
  191. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/ubs/historical_customer_trade.py +0 -0
  192. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/ubs/valuation.py +0 -0
  193. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/vontobel/__init__.py +0 -0
  194. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/vontobel/asset_position.py +0 -0
  195. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/vontobel/customer_trade.py +0 -0
  196. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/vontobel/historical_customer_trade.py +0 -0
  197. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/vontobel/instrument.py +0 -0
  198. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/vontobel/management_fees.py +0 -0
  199. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/vontobel/performance_fees.py +0 -0
  200. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/vontobel/trade.py +0 -0
  201. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/vontobel/utils.py +0 -0
  202. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/vontobel/valuation.py +0 -0
  203. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/resources/__init__.py +0 -0
  204. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/resources/assets.py +0 -0
  205. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/resources/trades.py +0 -0
  206. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/import_export/utils.py +0 -0
  207. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/jinja2/wbportfolio/sql/aum_nnm.sql +0 -0
  208. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/kpi_handlers/nnm.py +0 -0
  209. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/metric/__init__.py +0 -0
  210. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/metric/backends/__init__.py +0 -0
  211. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/metric/backends/base.py +0 -0
  212. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/metric/backends/constants.py +0 -0
  213. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/metric/backends/portfolio_base.py +0 -0
  214. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/metric/backends/portfolio_esg.py +0 -0
  215. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/metric/tests/__init__.py +0 -0
  216. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/metric/tests/conftest.py +0 -0
  217. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/metric/tests/test_portfolio_base.py +0 -0
  218. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/metric/tests/test_portfolio_esg.py +0 -0
  219. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/migrations/0001_initial_squashed.py +0 -0
  220. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/migrations/0002_product_default_sub_account_squashed_0039_alter_assetallocation_company_and_more.py +0 -0
  221. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/migrations/0040_instrument_financial_instrument.py +0 -0
  222. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/migrations/0041_remove_listresearch_research_ptr_and_more.py +0 -0
  223. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/migrations/0042_instrumentlist_instrumentlistthroughmodel_and_more.py +0 -0
  224. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/migrations/0043_alter_instrumentlistthroughmodel_options_and_more.py +0 -0
  225. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/migrations/0044_alter_instrumentlist_identifier.py +0 -0
  226. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/migrations/0045_alter_instrument_financial_instrument.py +0 -0
  227. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/migrations/0046_add_product_default_account.py +0 -0
  228. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/migrations/0047_remove_product_default_sub_account.py +0 -0
  229. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/migrations/0048_alter_trade_status.py +0 -0
  230. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/migrations/0049_trade_claimed_shares.py +0 -0
  231. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/migrations/0050_fees_fee_date_fees_wbportfolio_transac_1f7a29_idx.py +0 -0
  232. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/migrations/0051_delete_macroreview.py +0 -0
  233. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/migrations/0052_remove_cash_instrument_ptr_and_more.py +0 -0
  234. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/migrations/0053_remove_product_group.py +0 -0
  235. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/migrations/0054_portfolioinstrumentpreferredclassificationthroughmodel_and_more.py +0 -0
  236. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/migrations/0055_remove_product__custom_management_rebates_and_more.py +0 -0
  237. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/migrations/0056_remove_companyportfoliodata_assets_under_management_currency_and_more.py +0 -0
  238. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/migrations/0057_alter_portfolio_preferred_instrument_classifications_and_more.py +0 -0
  239. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/migrations/0058_pmsinstrument.py +0 -0
  240. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/migrations/0059_fees_unique_fees.py +0 -0
  241. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/migrations/0060_alter_portfolioportfoliothroughmodel_type.py +0 -0
  242. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/migrations/0061_portfolio_bank_accounts_product_bank_account_and_more.py +0 -0
  243. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/migrations/0062_alter_dailyportfoliocashflow_options.py +0 -0
  244. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/migrations/0063_accountreconciliation_accountreconciliationline_and_more.py +0 -0
  245. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/migrations/0064_alter_portfolio_managers_portfolio_is_tracked_and_more.py +0 -0
  246. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/migrations/0065_alter_portfolio_managers_claim_as_shares_and_more.py +0 -0
  247. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/migrations/0066_assetposition_initial_shares_at_custodian_and_more.py +0 -0
  248. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/migrations/0067_assetposition_unique_asset_position.py +0 -0
  249. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/migrations/0068_trade_internal_trade_trade_marked_as_internal_and_more.py +0 -0
  250. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/migrations/0069_remove_portfolio_is_invested_and_more.py +0 -0
  251. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/migrations/0070_remove_assetposition_unique_asset_position_and_more.py +0 -0
  252. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/migrations/0071_alter_trade_options_alter_trade_order.py +0 -0
  253. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/migrations/__init__.py +0 -0
  254. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/models/__init__.py +0 -0
  255. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/models/adjustments.py +0 -0
  256. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/models/custodians.py +0 -0
  257. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/models/indexes.py +0 -0
  258. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/models/llm/wbcrm/analyze_relationship.py +0 -0
  259. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/models/mixins/__init__.py +0 -0
  260. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/models/mixins/instruments.py +0 -0
  261. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/models/mixins/liquidity_stress_test.py +0 -0
  262. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/models/portfolio_cash_targets.py +0 -0
  263. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/models/portfolio_relationship.py +0 -0
  264. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/models/portfolio_swing_pricings.py +0 -0
  265. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/models/product_groups.py +0 -0
  266. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/models/products.py +0 -0
  267. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/models/reconciliations/__init__.py +0 -0
  268. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/models/reconciliations/account_reconciliation_lines.py +0 -0
  269. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/models/reconciliations/account_reconciliations.py +0 -0
  270. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/models/reconciliations/reconciliations.py +0 -0
  271. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/models/registers.py +0 -0
  272. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/models/roles.py +0 -0
  273. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/models/synchronization/__init__.py +0 -0
  274. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/models/synchronization/portfolio_synchronization.py +0 -0
  275. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/models/synchronization/price_computation.py +0 -0
  276. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/models/synchronization/synchronization.py +0 -0
  277. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/models/transactions/__init__.py +0 -0
  278. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/models/transactions/claim.py +0 -0
  279. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/models/transactions/dividends.py +0 -0
  280. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/models/transactions/expiry.py +0 -0
  281. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/models/transactions/fees.py +0 -0
  282. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/models/transactions/trade_proposals.py +0 -0
  283. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/models/transactions/transactions.py +0 -0
  284. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/models/utils.py +0 -0
  285. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/permissions.py +0 -0
  286. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/pms/__init__.py +0 -0
  287. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/pms/statistics/__init__.py +0 -0
  288. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/pms/trading/__init__.py +0 -0
  289. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/pms/trading/handler.py +0 -0
  290. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/pms/typing.py +0 -0
  291. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/preferences.py +0 -0
  292. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/reports/__init__.py +0 -0
  293. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/reports/monthly_position_report.py +0 -0
  294. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/risk_management/__init__.py +0 -0
  295. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/risk_management/backends/__init__.py +0 -0
  296. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/risk_management/backends/accounts.py +0 -0
  297. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/risk_management/backends/controversy_portfolio.py +0 -0
  298. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/risk_management/backends/exposure_portfolio.py +0 -0
  299. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/risk_management/backends/instrument_list_portfolio.py +0 -0
  300. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/risk_management/backends/liquidity_risk.py +0 -0
  301. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/risk_management/backends/liquidity_stress_instrument.py +0 -0
  302. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/risk_management/backends/mixins.py +0 -0
  303. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/risk_management/backends/product_integrity.py +0 -0
  304. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/risk_management/backends/stop_loss_instrument.py +0 -0
  305. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/risk_management/backends/stop_loss_portfolio.py +0 -0
  306. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/risk_management/backends/ucits_portfolio.py +0 -0
  307. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/risk_management/tests/__init__.py +0 -0
  308. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/risk_management/tests/conftest.py +0 -0
  309. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/risk_management/tests/test_controversy_portfolio.py +0 -0
  310. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/risk_management/tests/test_exposure_portfolio.py +0 -0
  311. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/risk_management/tests/test_instrument_list_portfolio.py +0 -0
  312. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/risk_management/tests/test_liquidity_risk.py +0 -0
  313. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/risk_management/tests/test_product_integrity.py +0 -0
  314. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/risk_management/tests/test_stop_loss_instrument.py +0 -0
  315. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/risk_management/tests/test_stop_loss_portfolio.py +0 -0
  316. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/risk_management/tests/test_ucits_portfolio.py +0 -0
  317. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/serializers/__init__.py +0 -0
  318. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/serializers/adjustments.py +0 -0
  319. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/serializers/assets.py +0 -0
  320. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/serializers/custodians.py +0 -0
  321. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/serializers/portfolio_cash_flow.py +0 -0
  322. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/serializers/portfolio_cash_targets.py +0 -0
  323. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/serializers/portfolio_relationship.py +0 -0
  324. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/serializers/portfolio_swing_pricing.py +0 -0
  325. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/serializers/portfolios.py +0 -0
  326. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/serializers/positions.py +0 -0
  327. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/serializers/product_group.py +0 -0
  328. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/serializers/products.py +0 -0
  329. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/serializers/reconciliations.py +0 -0
  330. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/serializers/registers.py +0 -0
  331. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/serializers/roles.py +0 -0
  332. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/serializers/signals.py +0 -0
  333. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/serializers/synchronization.py +0 -0
  334. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/serializers/transactions/__init__.py +0 -0
  335. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/serializers/transactions/claim.py +0 -0
  336. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/serializers/transactions/dividends.py +0 -0
  337. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/serializers/transactions/expiry.py +0 -0
  338. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/serializers/transactions/fees.py +0 -0
  339. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/serializers/transactions/transactions.py +0 -0
  340. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/static/wbportfolio/css/macro_review.css +0 -0
  341. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/static/wbportfolio/markdown/documentation/account_holding_reconciliation.md +0 -0
  342. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/static/wbportfolio/markdown/documentation/aggregate_asset_position_liquidity.md +0 -0
  343. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/static/wbportfolio/markdown/documentation/company.md +0 -0
  344. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/static/wbportfolio/markdown/documentation/earnings_instrument.md +0 -0
  345. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/static/wbportfolio/markdown/documentation/financial_analysis_instrument_ratios.md +0 -0
  346. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/static/wbportfolio/markdown/documentation/financial_statistics.md +0 -0
  347. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/static/wbportfolio/markdown/documentation/person.md +0 -0
  348. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/tasks.py +0 -0
  349. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/templates/portfolio/email/customer_report.html +0 -0
  350. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/templates/portfolio/email/customer_trade_notification.html +0 -0
  351. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/templates/portfolio/email/email_base_template.html +0 -0
  352. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/templates/portfolio/email/rebalancing_report.html +0 -0
  353. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/templates/portfolio/macro/macro_review.html +0 -0
  354. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/tests/__init__.py +0 -0
  355. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/tests/conftest.py +0 -0
  356. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/tests/models/__init__.py +0 -0
  357. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/tests/models/test_account_reconciliation.py +0 -0
  358. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/tests/models/test_assets.py +0 -0
  359. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/tests/models/test_custodians.py +0 -0
  360. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/tests/models/test_customer_trades.py +0 -0
  361. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/tests/models/test_dividends.py +0 -0
  362. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/tests/models/test_imports.py +0 -0
  363. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/tests/models/test_instrument_mixins.py +0 -0
  364. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/tests/models/test_merge.py +0 -0
  365. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/tests/models/test_portfolio_cash_flow.py +0 -0
  366. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/tests/models/test_portfolio_cash_targets.py +0 -0
  367. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/tests/models/test_portfolio_swing_pricings.py +0 -0
  368. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/tests/models/test_portfolios.py +0 -0
  369. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/tests/models/test_product_groups.py +0 -0
  370. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/tests/models/test_products.py +0 -0
  371. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/tests/models/test_roles.py +0 -0
  372. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/tests/models/test_splits.py +0 -0
  373. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/tests/models/test_synchronization.py +0 -0
  374. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/tests/models/transactions/__init__.py +0 -0
  375. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/tests/models/transactions/test_claim.py +0 -0
  376. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/tests/models/transactions/test_fees.py +0 -0
  377. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/tests/models/transactions/test_trades.py +0 -0
  378. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/tests/models/utils.py +0 -0
  379. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/tests/serializers/__init__.py +0 -0
  380. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/tests/serializers/test_claims.py +0 -0
  381. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/tests/signals.py +0 -0
  382. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/tests/tests.py +0 -0
  383. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/tests/viewsets/__init__.py +0 -0
  384. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/tests/viewsets/test_assets.py +0 -0
  385. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/tests/viewsets/test_performances.py +0 -0
  386. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/tests/viewsets/test_products.py +0 -0
  387. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/tests/viewsets/transactions/__init__.py +0 -0
  388. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/tests/viewsets/transactions/test_claims.py +0 -0
  389. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/urls.py +0 -0
  390. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/utils.py +0 -0
  391. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/__init__.py +0 -0
  392. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/adjustments.py +0 -0
  393. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/assets.py +0 -0
  394. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/assets_and_net_new_money_progression.py +0 -0
  395. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/charts/__init__.py +0 -0
  396. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/charts/assets.py +0 -0
  397. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/__init__.py +0 -0
  398. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/buttons/__init__.py +0 -0
  399. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/buttons/adjustments.py +0 -0
  400. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/buttons/assets.py +0 -0
  401. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/buttons/claims.py +0 -0
  402. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/buttons/custodians.py +0 -0
  403. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/buttons/fees.py +0 -0
  404. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/buttons/mixins.py +0 -0
  405. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/buttons/portfolios.py +0 -0
  406. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/buttons/products.py +0 -0
  407. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/buttons/reconciliations.py +0 -0
  408. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/buttons/registers.py +0 -0
  409. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/buttons/signals.py +0 -0
  410. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/buttons/trade_proposals.py +0 -0
  411. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/buttons/trades.py +0 -0
  412. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/display/__init__.py +0 -0
  413. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/display/adjustments.py +0 -0
  414. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/display/assets.py +0 -0
  415. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/display/claim.py +0 -0
  416. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/display/custodians.py +0 -0
  417. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/display/esg.py +0 -0
  418. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/display/fees.py +0 -0
  419. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/display/portfolio_cash_flow.py +0 -0
  420. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/display/portfolio_relationship.py +0 -0
  421. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/display/portfolios.py +0 -0
  422. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/display/positions.py +0 -0
  423. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/display/product_groups.py +0 -0
  424. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/display/product_performance.py +0 -0
  425. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/display/products.py +0 -0
  426. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/display/reconciliations.py +0 -0
  427. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/display/registers.py +0 -0
  428. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/display/roles.py +0 -0
  429. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/display/trade_proposals.py +0 -0
  430. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/display/trades.py +0 -0
  431. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/display/transactions.py +0 -0
  432. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/endpoints/__init__.py +0 -0
  433. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/endpoints/adjustments.py +0 -0
  434. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/endpoints/assets.py +0 -0
  435. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/endpoints/claim.py +0 -0
  436. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/endpoints/custodians.py +0 -0
  437. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/endpoints/esg.py +0 -0
  438. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/endpoints/fees.py +0 -0
  439. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/endpoints/portfolio_relationship.py +0 -0
  440. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/endpoints/portfolios.py +0 -0
  441. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/endpoints/positions.py +0 -0
  442. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/endpoints/product_groups.py +0 -0
  443. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/endpoints/product_performance.py +0 -0
  444. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/endpoints/products.py +0 -0
  445. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/endpoints/reconciliations.py +0 -0
  446. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/endpoints/roles.py +0 -0
  447. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/endpoints/trade_proposals.py +0 -0
  448. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/endpoints/trades.py +0 -0
  449. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/endpoints/transactions.py +0 -0
  450. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/menu/__init__.py +0 -0
  451. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/menu/adjustments.py +0 -0
  452. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/menu/assets.py +0 -0
  453. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/menu/claim.py +0 -0
  454. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/menu/custodians.py +0 -0
  455. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/menu/fees.py +0 -0
  456. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/menu/instrument_prices.py +0 -0
  457. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/menu/portfolio_cash_flow.py +0 -0
  458. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/menu/portfolios.py +0 -0
  459. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/menu/positions.py +0 -0
  460. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/menu/product_groups.py +0 -0
  461. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/menu/product_performance.py +0 -0
  462. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/menu/products.py +0 -0
  463. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/menu/reconciliations.py +0 -0
  464. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/menu/registers.py +0 -0
  465. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/menu/roles.py +0 -0
  466. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/menu/trades.py +0 -0
  467. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/menu/transactions.py +0 -0
  468. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/previews/__init__.py +0 -0
  469. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/previews/portfolios.py +0 -0
  470. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/titles/__init__.py +0 -0
  471. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/titles/adjustments.py +0 -0
  472. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/titles/assets.py +0 -0
  473. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/titles/assets_and_net_new_money_progression.py +0 -0
  474. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/titles/claim.py +0 -0
  475. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/titles/custodians.py +0 -0
  476. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/titles/esg.py +0 -0
  477. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/titles/fees.py +0 -0
  478. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/titles/instrument_prices.py +0 -0
  479. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/titles/portfolios.py +0 -0
  480. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/titles/positions.py +0 -0
  481. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/titles/product_groups.py +0 -0
  482. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/titles/product_performance.py +0 -0
  483. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/titles/products.py +0 -0
  484. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/titles/registers.py +0 -0
  485. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/titles/roles.py +0 -0
  486. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/titles/trades.py +0 -0
  487. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/titles/transactions.py +0 -0
  488. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/custodians.py +0 -0
  489. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/esg.py +0 -0
  490. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/mixins.py +0 -0
  491. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/portfolio_cash_flow.py +0 -0
  492. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/portfolio_cash_targets.py +0 -0
  493. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/portfolio_relationship.py +0 -0
  494. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/portfolio_swing_pricing.py +0 -0
  495. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/portfolios.py +0 -0
  496. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/positions.py +0 -0
  497. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/product_groups.py +0 -0
  498. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/product_performance.py +0 -0
  499. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/products.py +0 -0
  500. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/reconciliations.py +0 -0
  501. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/registers.py +0 -0
  502. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/roles.py +0 -0
  503. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/signals.py +0 -0
  504. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/synchronization.py +0 -0
  505. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/transactions/__init__.py +0 -0
  506. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/transactions/fees.py +0 -0
  507. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/transactions/mixins.py +0 -0
  508. {wbportfolio-1.44.2 → wbportfolio-1.44.3}/wbportfolio/viewsets/transactions/trade_proposals.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: wbportfolio
3
- Version: 1.44.2
3
+ Version: 1.44.3
4
4
  Author-email: Christopher Wittlinger <c.wittlinger@stainly.com>
5
5
  License-File: LICENSE
6
6
  Requires-Dist: cryptography==3.4.*
@@ -3,7 +3,8 @@ from typing import TYPE_CHECKING
3
3
  import numpy as np
4
4
  import pandas as pd
5
5
  from django.db import connection
6
- from django.db.models import DecimalField, ExpressionWrapper, F, OuterRef, Subquery
6
+ from django.db.models import DecimalField, ExpressionWrapper, F, OuterRef, Subquery, DateField
7
+ from django.db.models.functions import Greatest
7
8
  from django.template.loader import get_template
8
9
  from jinjasql import JinjaSql
9
10
  from wbcore.contrib.currency.models import CurrencyFXRates
@@ -47,6 +48,7 @@ class ConsolidatedTradeSummary:
47
48
  pivot_label: str,
48
49
  classification_group: ClassificationGroup | None = None,
49
50
  classification_height: int = 0,
51
+ date_label: str = "date_considered",
50
52
  ):
51
53
  self.queryset = queryset.filter(trade__isnull=False, status="APPROVED")
52
54
  self.start_date = start_date
@@ -60,6 +62,9 @@ class ConsolidatedTradeSummary:
60
62
  fx_rate=CurrencyFXRates.get_fx_rates_subquery("date", lookup_expr="exact"),
61
63
  aum=ExpressionWrapper(F("fx_rate") * F("net_value") * F("shares"), output_field=DecimalField()),
62
64
  internal_trade=F("trade__marked_as_internal"),
65
+ date_considered=ExpressionWrapper(
66
+ Greatest("trade__transaction_date", "date") + 1, output_field=DateField()
67
+ ),
63
68
  )
64
69
  self.queryset = Account.annotate_root_account_info(self.queryset)
65
70
 
@@ -71,17 +76,17 @@ class ConsolidatedTradeSummary:
71
76
  "account",
72
77
  "product__parent",
73
78
  )
74
- self.df = self._prepare_df()
79
+ self.df = self._prepare_df(date_label)
75
80
 
76
- def _prepare_df(self) -> pd.DataFrame:
77
- columns = ["shares", "date", "product__id", "aum", "internal_trade"]
81
+ def _prepare_df(self, date_label: str) -> pd.DataFrame:
82
+ columns = ["shares", date_label, "product__id", "aum", "internal_trade"]
78
83
  if self.pivot == "classification_id":
79
84
  columns.append("classifications")
80
85
  else:
81
86
  columns.append(self.pivot)
82
87
  columns.append(self.pivot_label)
83
88
 
84
- df = pd.DataFrame(self.queryset.values_list(*columns), columns=columns)
89
+ df = pd.DataFrame(self.queryset.values_list(*columns), columns=columns).rename(columns={date_label: "date"})
85
90
  if self.pivot == "classification_id":
86
91
  df = (
87
92
  df.explode("classifications")
@@ -112,7 +117,7 @@ class ConsolidatedTradeSummary:
112
117
  "net_value",
113
118
  date_name="net_value_date_start",
114
119
  instrument_pk_name="pk",
115
- date_lookup="exact"
120
+ date_lookup="exact",
116
121
  # we get all net value (even estimated) to avoir showing None price on holiday
117
122
  ),
118
123
  fx_rate_start=CurrencyFXRates.get_fx_rates_subquery(
@@ -123,7 +128,7 @@ class ConsolidatedTradeSummary:
123
128
  "net_value",
124
129
  date_name="net_value_date_end",
125
130
  instrument_pk_name="pk",
126
- date_lookup="exact"
131
+ date_lookup="exact",
127
132
  # we get all net value (even estimated) to avoir showing None price on holiday
128
133
  ),
129
134
  fx_rate_end=CurrencyFXRates.get_fx_rates_subquery(
@@ -22,7 +22,7 @@ class BaseProductFilterSet(InstrumentFilterSet):
22
22
  label="Bank",
23
23
  queryset=Company.objects.all(),
24
24
  endpoint=Company.get_representation_endpoint(),
25
- filter_params={"bank_product": True},
25
+ filter_params={"notnull_related_name": "issues_products"},
26
26
  value_key=Company.get_representation_value_key(),
27
27
  label_key=Company.get_representation_label_key(),
28
28
  )
@@ -3,32 +3,12 @@ from datetime import date
3
3
  from django.db.models import Exists, OuterRef
4
4
  from django.dispatch import receiver
5
5
  from wbcore import filters as wb_filters
6
- from wbcore.contrib.directory.filters import CompanyFilter
7
6
  from wbcore.signals.filters import add_filters
8
7
  from wbfdm.filters import BaseClassifiedInstrumentFilterSet, ClassificationFilter
9
8
  from wbfdm.models import InstrumentClassificationThroughModel
10
9
  from wbportfolio.models import AssetPosition, Portfolio
11
10
 
12
11
 
13
- @receiver(add_filters, sender=CompanyFilter)
14
- def add_bank_product_filter(sender, request=None, *args, **kwargs):
15
- def method_bank(queryset, name, value):
16
- if value is True:
17
- return queryset.filter(issues_products__isnull=False).distinct()
18
- elif value is False:
19
- return queryset.filter(issues_products__isnull=True).distinct()
20
- return queryset
21
-
22
- return {
23
- "bank_product": wb_filters.BooleanFilter(
24
- field_name="bank_product",
25
- label="Is a Bank",
26
- help_text="Filter for companies that are a bank and serve as the custodian of a product in the PMS",
27
- method=method_bank,
28
- )
29
- }
30
-
31
-
32
12
  @receiver(add_filters, sender=ClassificationFilter)
33
13
  def add_portfolio_filter(sender, request=None, *args, **kwargs):
34
14
  def _filter_portfolio(queryset, name, value):
@@ -3,6 +3,7 @@ from .claim import (
3
3
  ClaimGroupByFilter,
4
4
  ConsolidatedTradeSummaryTableFilterSet,
5
5
  CumulativeNNMChartFilter,
6
+ DistributionNNMChartFilter,
6
7
  CustomerAPIFilter,
7
8
  CustomerClaimFilter,
8
9
  CustomerClaimGroupByFilter,
@@ -82,7 +82,6 @@ class CommissionBaseFilterSet(wb_filters.FilterSet):
82
82
  endpoint=Account.get_representation_endpoint(),
83
83
  value_key=Account.get_representation_value_key(),
84
84
  label_key=Account.get_representation_label_key(),
85
- filter_params={"status": "OPEN"},
86
85
  )
87
86
 
88
87
  manager_role = wb_filters.ModelChoiceFilter(
@@ -205,7 +204,7 @@ class ClaimFilter(OppositeSharesFieldMethodMixin, CommissionBaseFilterSet):
205
204
  }
206
205
 
207
206
 
208
- class ClaimGroupByFilter(ClaimFilter):
207
+ class ClaimGroupByFilter(CommissionBaseFilterSet):
209
208
  pending_approval = in_charge_of_customer = linked_trade = None
210
209
 
211
210
  only_new_customer = wb_filters.BooleanFilter(method="filter_only_new_customer", label="Only new customers")
@@ -303,6 +302,19 @@ class ConsolidatedTradeSummaryTableFilterSet(PandasFilterSetMixin, ClaimGroupByF
303
302
  }
304
303
 
305
304
 
305
+ class DistributionNNMChartFilter(ClaimGroupByFilter):
306
+ percent = wb_filters.BooleanFilter(
307
+ method="fake_filter",
308
+ default=False,
309
+ help_text="True if the value are displayed in percentage of the initial total AUM",
310
+ label="Show percentage",
311
+ )
312
+
313
+ class Meta:
314
+ model = Claim
315
+ fields = {}
316
+
317
+
306
318
  class CumulativeNNMChartFilter(ClaimGroupByFilter):
307
319
  groupby_classification_group = group_by = None
308
320
 
@@ -0,0 +1,19 @@
1
+ # Generated by Django 5.0.10 on 2025-01-28 10:17
2
+
3
+ import django.db.models.expressions
4
+ from django.db import migrations, models
5
+
6
+
7
+ class Migration(migrations.Migration):
8
+
9
+ dependencies = [
10
+ ('wbportfolio', '0071_alter_trade_options_alter_trade_order'),
11
+ ]
12
+
13
+ operations = [
14
+ migrations.AddField(
15
+ model_name='trade',
16
+ name='diff_shares',
17
+ field=models.GeneratedField(db_persist=True, expression=django.db.models.expressions.CombinedExpression(models.F('shares'), '-', models.F('claimed_shares')), output_field=models.DecimalField(decimal_places=4, max_digits=15)),
18
+ ),
19
+ ]
@@ -416,12 +416,15 @@ class AssetPosition(ImportMixin, models.Model):
416
416
  net_value *= self.currency.convert(
417
417
  self.asset_valuation_date, self.underlying_instrument.currency
418
418
  )
419
- self.underlying_instrument_price = InstrumentPrice.objects.create(
419
+ self.underlying_instrument_price = InstrumentPrice(
420
420
  calculated=False,
421
421
  instrument=self.underlying_instrument,
422
422
  date=self.asset_valuation_date,
423
423
  net_value=net_value,
424
+ import_source=self.import_source, # we set the import source to know where this price is coming from
424
425
  )
426
+ self.underlying_instrument_price.fill_market_capitalization()
427
+ self.underlying_instrument_price.save()
425
428
  else: # sometime, the asset valuation date does not correspond to a valid market date. In that case, we get the latest valid instrument price for that product
426
429
  self.underlying_instrument_price = (
427
430
  InstrumentPrice.objects.filter(
@@ -25,6 +25,7 @@ from django.db.models.signals import post_save
25
25
  from django.dispatch import receiver
26
26
  from psycopg.types.range import DateRange
27
27
  from wbcore.contrib.currency.models import CurrencyFXRates
28
+ from wbcore.contrib.notifications.utils import create_notification_type
28
29
  from wbcore.models import WBModel
29
30
  from wbcore.utils.models import ActiveObjectManager, DeleteToDisableMixin
30
31
  from wbfdm.contrib.metric.dispatch import compute_metrics
@@ -232,7 +233,7 @@ class Portfolio(DeleteToDisableMixin, WBModel):
232
233
  verbose_name_plural = "Portfolios"
233
234
 
234
235
  notification_types = [
235
- (
236
+ create_notification_type(
236
237
  "wbportfolio.portfolio.check_custodian_portfolio",
237
238
  "Check Custodian Portfolio",
238
239
  "Sends a notification when a portfolio does not match with its custodian portfolio",
@@ -3,6 +3,7 @@ from decimal import Decimal
3
3
 
4
4
  from django.db import models
5
5
  from wbcore.contrib.io.mixins import ImportMixin
6
+ from wbcore.contrib.notifications.utils import create_notification_type
6
7
  from wbcore.models import WBModel
7
8
  from wbportfolio.import_export.handlers.portfolio_cash_flow import (
8
9
  DailyPortfolioCashFlowImportHandler,
@@ -132,7 +133,7 @@ class DailyPortfolioCashFlow(ImportMixin, WBModel):
132
133
  ]
133
134
  permissions = [("administrate_dailyportfoliocashflow", "Can administrate Daily Portfolio CashFlow")]
134
135
  notification_types = [
135
- (
136
+ create_notification_type(
136
137
  "wbportfolio.dailyportfoliocashflow.notify_rebalance",
137
138
  "Rebalancing suggested",
138
139
  "Sends a notification, when the system suggests to rebalance a portfolio due to being outside of the cash target parameters",
@@ -140,7 +141,7 @@ class DailyPortfolioCashFlow(ImportMixin, WBModel):
140
141
  True,
141
142
  False,
142
143
  ),
143
- (
144
+ create_notification_type(
144
145
  "wbportfolio.dailyportfoliocashflow.notify_swingpricing",
145
146
  "Swing Pricing Notification",
146
147
  "Sends a notification, when the system detects a future swing pricing event",
@@ -21,7 +21,7 @@ from django.db.models.signals import post_save
21
21
  from django.dispatch import receiver
22
22
  from django.utils.functional import cached_property
23
23
  from django_fsm import GET_STATE, FSMField, transition
24
- from ordered_model.models import OrderedModel, OrderedModelManager
24
+ from ordered_model.models import OrderedModel, OrderedModelManager, OrderedModelQuerySet
25
25
  from wbcore.contrib.icons import WBIcon
26
26
  from wbcore.enums import RequestType
27
27
  from wbcore.metadata.configs.buttons import ActionButton
@@ -37,58 +37,65 @@ from wbportfolio.pms.typing import Trade as TradeDTO
37
37
  from .transactions import ShareMixin, Transaction
38
38
 
39
39
 
40
- class DefaultTradeManager(OrderedModelManager):
41
- """This manager is expect to be the trade default manager and annotate by default the effective weight (extracted
42
- from the associated portfolio) and the target weight as an addition between the effective weight and the delta weight
43
- """
44
-
45
- def get_queryset(self):
46
- return (
47
- super()
48
- .get_queryset()
49
- .annotate(
50
- last_effective_date=Subquery(
40
+ class TradeQueryset(OrderedModelQuerySet):
41
+ def annotate_base_info(self):
42
+ return self.annotate(
43
+ last_effective_date=Subquery(
44
+ AssetPosition.objects.filter(
45
+ underlying_instrument=OuterRef("underlying_instrument"),
46
+ date__lt=OuterRef("transaction_date"),
47
+ portfolio=OuterRef("portfolio"),
48
+ )
49
+ .order_by("-date")
50
+ .values("date")[:1]
51
+ ),
52
+ effective_weight=Coalesce(
53
+ Subquery(
51
54
  AssetPosition.objects.filter(
52
55
  underlying_instrument=OuterRef("underlying_instrument"),
53
- date__lt=OuterRef("transaction_date"),
56
+ date=OuterRef("last_effective_date"),
54
57
  portfolio=OuterRef("portfolio"),
55
58
  )
56
- .order_by("-date")
57
- .values("date")[:1]
58
- ),
59
- effective_weight=Coalesce(
60
- Subquery(
61
- AssetPosition.objects.filter(
62
- underlying_instrument=OuterRef("underlying_instrument"),
63
- date=OuterRef("last_effective_date"),
64
- portfolio=OuterRef("portfolio"),
65
- )
66
- .values("portfolio")
67
- .annotate(s=Sum("weighting"))
68
- .values("s")[:1]
69
- ),
70
- Decimal(0),
59
+ .values("portfolio")
60
+ .annotate(s=Sum("weighting"))
61
+ .values("s")[:1]
71
62
  ),
72
- target_weight=F("effective_weight") + F("weighting"),
73
- effective_shares=Coalesce(
74
- Subquery(
75
- AssetPosition.objects.filter(
76
- underlying_instrument=OuterRef("underlying_instrument"),
77
- date=OuterRef("last_effective_date"),
78
- portfolio=OuterRef("portfolio"),
79
- )
80
- .values("portfolio")
81
- .annotate(s=Sum("shares"))
82
- .values("s")[:1]
83
- ),
84
- Decimal(0),
63
+ Decimal(0),
64
+ ),
65
+ target_weight=F("effective_weight") + F("weighting"),
66
+ effective_shares=Coalesce(
67
+ Subquery(
68
+ AssetPosition.objects.filter(
69
+ underlying_instrument=OuterRef("underlying_instrument"),
70
+ date=OuterRef("last_effective_date"),
71
+ portfolio=OuterRef("portfolio"),
72
+ )
73
+ .values("portfolio")
74
+ .annotate(s=Sum("shares"))
75
+ .values("s")[:1]
85
76
  ),
86
- target_shares=F("effective_weight") * F("weighting"),
87
- diff_shares=F("shares") - F("claimed_shares"),
88
- )
77
+ Decimal(0),
78
+ ),
79
+ target_shares=F("effective_weight") * F("weighting"),
89
80
  )
90
81
 
91
82
 
83
+ class DefaultTradeManager(OrderedModelManager):
84
+ """This manager is expect to be the trade default manager and annotate by default the effective weight (extracted
85
+ from the associated portfolio) and the target weight as an addition between the effective weight and the delta weight
86
+ """
87
+
88
+ def __init__(self, with_annotation: bool = False, *args, **kwargs):
89
+ self.with_annotation = with_annotation
90
+ super().__init__(*args, **kwargs)
91
+
92
+ def get_queryset(self) -> TradeQueryset:
93
+ qs = TradeQueryset(self.model, using=self._db)
94
+ if self.with_annotation:
95
+ qs = qs.annotate_base_info()
96
+ return qs
97
+
98
+
92
99
  class ValidCustomerTradeManager(DefaultTradeManager):
93
100
  def __init__(self, without_internal_trade: bool = False):
94
101
  self.without_internal_trade = without_internal_trade
@@ -202,7 +209,13 @@ class Trade(ShareMixin, Transaction, OrderedModel, WBModel):
202
209
  help_text="The number of shares that were claimed.",
203
210
  verbose_name="Claimed Shares",
204
211
  )
212
+ diff_shares = models.GeneratedField(
213
+ expression=F("shares") - F("claimed_shares"),
214
+ output_field=models.DecimalField(max_digits=15, decimal_places=4),
215
+ db_persist=True,
216
+ )
205
217
  objects = DefaultTradeManager()
218
+ annotated_objects = DefaultTradeManager(with_annotation=True)
206
219
  valid_customer_trade_objects = ValidCustomerTradeManager()
207
220
  valid_external_customer_trade_objects = ValidCustomerTradeManager(without_internal_trade=True)
208
221
 
@@ -436,13 +449,6 @@ class Trade(ShareMixin, Transaction, OrderedModel, WBModel):
436
449
  def _target_shares(self) -> Decimal:
437
450
  return getattr(self, "target_shares", self._effective_shares * self.weighting)
438
451
 
439
- @cached_property
440
- @admin.display(description="Diff Claims")
441
- def _diff_shares(self) -> Decimal:
442
- if hasattr(self, "diff_shares"):
443
- return self.diff_shares
444
- return self.shares - self.claimed_shares
445
-
446
452
  order_with_respect_to = "trade_proposal"
447
453
 
448
454
  class Meta(OrderedModel.Meta):
@@ -51,46 +51,58 @@ class TestAccountRuleModel:
51
51
  account = account_factory.create(owner=entry)
52
52
  other_account = account_factory.create()
53
53
  claim_factory.create(
54
- date=(weekday - BDay(business_days_interval + 2)).date(),
54
+ date=(weekday - BDay(business_days_interval + 3)).date(),
55
55
  account=account,
56
- trade=customer_trade_factory.create(underlying_instrument=product),
56
+ trade=customer_trade_factory.create(
57
+ underlying_instrument=product, transaction_date=(weekday - BDay(business_days_interval + 3)).date()
58
+ ),
57
59
  status="APPROVED",
58
60
  shares=100,
59
61
  )
60
62
  claim_factory.create(
61
- date=(weekday - BDay(business_days_interval + 1)).date(),
63
+ date=(weekday - BDay(business_days_interval + 2)).date(),
62
64
  account=account,
63
- trade=customer_trade_factory.create(underlying_instrument=product),
65
+ trade=customer_trade_factory.create(
66
+ underlying_instrument=product, transaction_date=(weekday - BDay(business_days_interval + 2)).date()
67
+ ),
64
68
  status="APPROVED",
65
69
  shares=-50,
66
70
  ) # this drop should not be detected
67
71
 
68
72
  claim_factory.create(
69
- date=(weekday - BDay(business_days_interval)).date(),
73
+ date=(weekday - BDay(business_days_interval + 1)).date(),
70
74
  account=account,
71
- trade=customer_trade_factory.create(underlying_instrument=product),
75
+ trade=customer_trade_factory.create(
76
+ underlying_instrument=product, transaction_date=(weekday - BDay(business_days_interval + 1)).date()
77
+ ),
72
78
  status="APPROVED",
73
79
  shares=150,
74
80
  )
75
81
  claim_factory.create(
76
- date=weekday,
82
+ date=(weekday - BDay(1)).date(),
77
83
  account=account,
78
- trade=customer_trade_factory.create(underlying_instrument=product),
84
+ trade=customer_trade_factory.create(
85
+ underlying_instrument=product, transaction_date=(weekday - BDay(1)).date()
86
+ ),
79
87
  status="APPROVED",
80
88
  shares=-50,
81
89
  ) # this drop should be detected
82
90
 
83
91
  claim_factory.create(
84
- date=(weekday - BDay(business_days_interval)).date(),
92
+ date=(weekday - BDay(business_days_interval + 1)).date(),
85
93
  account=other_account,
86
- trade=customer_trade_factory.create(underlying_instrument=product),
94
+ trade=customer_trade_factory.create(
95
+ underlying_instrument=product, transaction_date=(weekday - BDay(business_days_interval + 1)).date()
96
+ ),
87
97
  status="APPROVED",
88
98
  shares=150,
89
99
  )
90
100
  claim_factory.create(
91
- date=weekday,
101
+ date=(weekday - BDay(1)).date(),
92
102
  account=other_account,
93
- trade=customer_trade_factory.create(underlying_instrument=product),
103
+ trade=customer_trade_factory.create(
104
+ underlying_instrument=product, transaction_date=(weekday - BDay(1)).date()
105
+ ),
94
106
  status="APPROVED",
95
107
  shares=-50,
96
108
  ) # this drop is valid but an another account so won't be detected
@@ -45,11 +45,7 @@ class TradeProposalRepresentationSerializer(wb_serializers.RepresentationSeriali
45
45
 
46
46
  class TradeRepresentationSerializer(TransactionRepresentationSerializer):
47
47
  _detail = wb_serializers.HyperlinkField(reverse_name="wbportfolio:trade-detail")
48
-
49
- diff_shares = wb_serializers.SerializerMethodField()
50
-
51
- def get_diff_shares(self, obj):
52
- return obj._diff_shares
48
+ diff_shares = wb_serializers.DecimalField(max_digits=15, decimal_places=4)
53
49
 
54
50
  class Meta:
55
51
  model = Trade
@@ -241,7 +237,7 @@ class TradeTradeProposalModelSerializer(TradeModelSerializer):
241
237
  percent_fields = ["effective_weight", "target_weight", "weighting"]
242
238
  read_only_fields = (
243
239
  "transaction_subtype",
244
- "shares"
240
+ "shares",
245
241
  # "underlying_instrument",
246
242
  # "_underlying_instrument",
247
243
  )
@@ -46,7 +46,6 @@ from wbfdm.preferences import get_default_classification_group
46
46
  from wbportfolio.analysis.claims import ConsolidatedTradeSummary
47
47
  from wbportfolio.filters import (
48
48
  ClaimFilter,
49
- ClaimGroupByFilter,
50
49
  ConsolidatedTradeSummaryTableFilterSet,
51
50
  CumulativeNNMChartFilter,
52
51
  CustomerAPIFilter,
@@ -54,6 +53,7 @@ from wbportfolio.filters import (
54
53
  CustomerClaimGroupByFilter,
55
54
  NegativeTermimalAccountPerProductFilterSet,
56
55
  ProfitAndLossPandasFilter,
56
+ DistributionNNMChartFilter,
57
57
  )
58
58
  from wbportfolio.models import Product, Trade
59
59
  from wbportfolio.models.transactions.claim import Claim, ClaimGroupbyChoice
@@ -607,10 +607,18 @@ class ConsolidatedTradeSummaryTableView(ClaimPermissionMixin, ExportPandasAPIVie
607
607
  def get_filterset_class(self, request):
608
608
  profile = request.user.profile
609
609
  if profile.is_internal or request.user.is_superuser:
610
- return ClaimGroupByFilter
610
+ return ConsolidatedTradeSummaryTableFilterSet
611
611
  return CustomerClaimGroupByFilter
612
612
 
613
613
 
614
+ def _sanitize_df(df: pd.DataFrame, normalization_factor: pd.Series | None = None) -> pd.DataFrame:
615
+ df = df.replace({0: np.nan})
616
+ scalar_columns = df.columns.difference(["title", "id"])
617
+ if normalization_factor is not None:
618
+ df[scalar_columns] = df[scalar_columns].div(normalization_factor.replace({0: np.nan}), axis=0)
619
+ return df.dropna(axis=0, how="all", subset=scalar_columns)
620
+
621
+
614
622
  class ConsolidatedTradeSummaryDistributionChart(ConsolidatedTradeSummaryTableView):
615
623
  WIDGET_TYPE = WidgetType.CHART.value
616
624
  IDENTIFIER = "wbportfolio:consolidatedtradesummarydistributionchart"
@@ -618,7 +626,13 @@ class ConsolidatedTradeSummaryDistributionChart(ConsolidatedTradeSummaryTableVie
618
626
  title_config_class = ConsolidatedTradeSummaryDistributionChartTitleConfig
619
627
  endpoint_config_class = ConsolidatedTradeSummaryDistributionChartEndpointConfig
620
628
  button_config_class = None
621
- filterset_class = ClaimGroupByFilter
629
+
630
+ def get_filterset_class(self, request):
631
+ return DistributionNNMChartFilter
632
+
633
+ @cached_property
634
+ def is_percent(self) -> bool:
635
+ return self.request.GET.get("percent", "false") == "true"
622
636
 
623
637
  # TODO This is not really optimal. We need to change it at some point
624
638
  def list(self, request, *args, **kwargs):
@@ -642,36 +656,46 @@ class ConsolidatedTradeSummaryDistributionChart(ConsolidatedTradeSummaryTableVie
642
656
  def get_plotly(self, df):
643
657
  fig = go.Figure()
644
658
  # create the groupby NNM distribution histogram
645
- df = df.sort_values(by="title")
646
- for nnm_monthly_colum in self.nnm_monthly_columns:
647
- if len(self.nnm_monthly_columns) == 1 and hasattr(self, "df_nnm_neg") and hasattr(self, "df_nnm_pos"):
648
- if nnm_monthly_colum[0] in self.df_nnm_neg.columns:
659
+ df = df.sort_values(by="title").set_index("id")
660
+ normalization_factor = None
661
+ if self.is_percent:
662
+ normalization_factor = df["sum_aum_start"]
663
+ nnm_monthly_columns = dict(self.nnm_monthly_columns)
664
+ df = _sanitize_df(
665
+ df.drop(columns=df.columns.difference(["title", *nnm_monthly_columns.keys(), "sum_nnm_total"])),
666
+ normalization_factor=normalization_factor,
667
+ )
668
+ for key, label in nnm_monthly_columns.items():
669
+ if len(nnm_monthly_columns.keys()) == 1 and hasattr(self, "df_nnm_neg") and hasattr(self, "df_nnm_pos"):
670
+ df_nnm_pos = _sanitize_df(self.df_nnm_pos.set_index("id"), normalization_factor)
671
+ df_nnm_neg = _sanitize_df(self.df_nnm_neg.set_index("id"), normalization_factor)
672
+ if key in df_nnm_neg.columns:
649
673
  fig.add_trace(
650
674
  go.Histogram(
651
675
  histfunc="sum",
652
- y=self.df_nnm_neg[nnm_monthly_colum[0]],
653
- x=self.df_nnm_neg["title"],
654
- name=nnm_monthly_colum[1] + " (Negative)",
676
+ y=df_nnm_neg[key],
677
+ x=df_nnm_neg["title"],
678
+ name=label + " (Negative)",
655
679
  marker_color="#FF6961",
656
680
  )
657
681
  )
658
- if nnm_monthly_colum[0] in self.df_nnm_pos.columns:
682
+ if key in df_nnm_pos.columns:
659
683
  fig.add_trace(
660
684
  go.Histogram(
661
685
  histfunc="sum",
662
- y=self.df_nnm_pos[nnm_monthly_colum[0]],
663
- x=self.df_nnm_pos["title"],
664
- name=nnm_monthly_colum[1] + " (Positive)",
686
+ y=df_nnm_pos[key],
687
+ x=df_nnm_pos["title"],
688
+ name=label + " (Positive)",
665
689
  marker_color="#77DD77",
666
690
  )
667
691
  )
668
- if nnm_monthly_colum[0] in df.columns:
669
- figure_kwargs = {"name": nnm_monthly_colum[1]}
670
- if len(self.nnm_monthly_columns) == 1:
692
+ if key in df.columns:
693
+ figure_kwargs = {"name": label}
694
+ if len(nnm_monthly_columns.keys()) == 1:
671
695
  figure_kwargs["marker_color"] = "#D3D3D3"
672
- figure_kwargs["name"] = nnm_monthly_colum[1] + " (Total)"
673
- fig.add_trace(go.Histogram(histfunc="sum", y=df[nnm_monthly_colum[0]], x=df["title"], **figure_kwargs))
674
- if len(self.nnm_monthly_columns) > 1:
696
+ figure_kwargs["name"] = label + " (Total)"
697
+ fig.add_trace(go.Histogram(histfunc="sum", y=df[key], x=df["title"], **figure_kwargs))
698
+ if len(nnm_monthly_columns.keys()) > 1:
675
699
  fig.add_trace(
676
700
  go.Histogram(
677
701
  histfunc="sum",
@@ -692,6 +716,8 @@ class ConsolidatedTradeSummaryDistributionChart(ConsolidatedTradeSummaryTableVie
692
716
  "x": 0.5,
693
717
  },
694
718
  )
719
+ if self.is_percent:
720
+ fig.update_yaxes(tickformat=".2%")
695
721
  return fig
696
722
 
697
723