wbportfolio 1.44.1__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.1 → wbportfolio-1.44.3}/PKG-INFO +1 -1
  2. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/analysis/claims.py +12 -7
  3. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/filters/products.py +1 -1
  4. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/filters/signals.py +0 -20
  5. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/filters/transactions/__init__.py +1 -0
  6. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/filters/transactions/claim.py +32 -3
  7. wbportfolio-1.44.3/wbportfolio/filters/transactions/mixins.py +12 -0
  8. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/filters/transactions/trades.py +17 -29
  9. wbportfolio-1.44.3/wbportfolio/migrations/0072_trade_diff_shares.py +19 -0
  10. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/models/asset.py +4 -1
  11. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/models/portfolio.py +2 -1
  12. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/models/portfolio_cash_flow.py +3 -2
  13. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/models/transactions/trades.py +57 -51
  14. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/risk_management/tests/test_accounts.py +24 -12
  15. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/serializers/transactions/trades.py +2 -6
  16. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/transactions/claim.py +46 -20
  17. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/transactions/trades.py +23 -5
  18. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/transactions/transactions.py +2 -4
  19. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/.gitignore +0 -0
  20. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/LICENSE +0 -0
  21. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/pyproject.toml +0 -0
  22. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/__init__.py +0 -0
  23. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/admin/__init__.py +0 -0
  24. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/admin/asset.py +0 -0
  25. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/admin/custodians.py +0 -0
  26. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/admin/portfolio.py +0 -0
  27. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/admin/portfolio_relationships.py +0 -0
  28. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/admin/product_groups.py +0 -0
  29. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/admin/products.py +0 -0
  30. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/admin/reconciliations.py +0 -0
  31. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/admin/registers.py +0 -0
  32. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/admin/roles.py +0 -0
  33. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/admin/synchronization/__init__.py +0 -0
  34. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/admin/synchronization/admin.py +0 -0
  35. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/admin/synchronization/portfolio_synchronization.py +0 -0
  36. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/admin/synchronization/price_computation.py +0 -0
  37. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/admin/transactions/__init__.py +0 -0
  38. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/admin/transactions/claim.py +0 -0
  39. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/admin/transactions/dividends.py +0 -0
  40. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/admin/transactions/fees.py +0 -0
  41. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/admin/transactions/trades.py +0 -0
  42. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/admin/transactions/transactions.py +0 -0
  43. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/analysis/__init__.py +0 -0
  44. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/apps.py +0 -0
  45. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/contrib/__init__.py +0 -0
  46. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/contrib/company_portfolio/__init__.py +0 -0
  47. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/contrib/company_portfolio/admin.py +0 -0
  48. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/contrib/company_portfolio/apps.py +0 -0
  49. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/contrib/company_portfolio/configs/__init__.py +0 -0
  50. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/contrib/company_portfolio/configs/display.py +0 -0
  51. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/contrib/company_portfolio/configs/endpoints.py +0 -0
  52. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/contrib/company_portfolio/configs/previews.py +0 -0
  53. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/contrib/company_portfolio/constants.py +0 -0
  54. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/contrib/company_portfolio/dynamic_preferences_registry.py +0 -0
  55. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/contrib/company_portfolio/factories.py +0 -0
  56. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/contrib/company_portfolio/filters.py +0 -0
  57. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/contrib/company_portfolio/management.py +0 -0
  58. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/contrib/company_portfolio/migrations/0001_initial.py +0 -0
  59. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/contrib/company_portfolio/migrations/__init__.py +0 -0
  60. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/contrib/company_portfolio/models.py +0 -0
  61. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/contrib/company_portfolio/scripts.py +0 -0
  62. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/contrib/company_portfolio/serializers.py +0 -0
  63. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/contrib/company_portfolio/tasks.py +0 -0
  64. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/contrib/company_portfolio/tests/__init__.py +0 -0
  65. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/contrib/company_portfolio/tests/conftest.py +0 -0
  66. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/contrib/company_portfolio/tests/test_models.py +0 -0
  67. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/contrib/company_portfolio/urls.py +0 -0
  68. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/contrib/company_portfolio/viewsets.py +0 -0
  69. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/defaults/__init__.py +0 -0
  70. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/defaults/fees/__init__.py +0 -0
  71. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/defaults/fees/default.py +0 -0
  72. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/defaults/portfolio/__init__.py +0 -0
  73. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/defaults/portfolio/default_rebalancing.py +0 -0
  74. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/dynamic_preferences_registry.py +0 -0
  75. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/factories/__init__.py +0 -0
  76. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/factories/adjustments.py +0 -0
  77. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/factories/assets.py +0 -0
  78. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/factories/claim.py +0 -0
  79. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/factories/custodians.py +0 -0
  80. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/factories/dividends.py +0 -0
  81. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/factories/fees.py +0 -0
  82. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/factories/indexes.py +0 -0
  83. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/factories/portfolio_cash_flow.py +0 -0
  84. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/factories/portfolio_cash_targets.py +0 -0
  85. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/factories/portfolio_swing_pricings.py +0 -0
  86. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/factories/portfolios.py +0 -0
  87. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/factories/product_groups.py +0 -0
  88. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/factories/products.py +0 -0
  89. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/factories/pytest_utils.py +0 -0
  90. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/factories/reconciliations.py +0 -0
  91. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/factories/roles.py +0 -0
  92. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/factories/synchronization.py +0 -0
  93. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/factories/trades.py +0 -0
  94. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/factories/transactions.py +0 -0
  95. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/fdm/__init__.py +0 -0
  96. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/fdm/tasks.py +0 -0
  97. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/filters/__init__.py +0 -0
  98. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/filters/assets.py +0 -0
  99. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/filters/assets_and_net_new_money_progression.py +0 -0
  100. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/filters/custodians.py +0 -0
  101. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/filters/esg.py +0 -0
  102. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/filters/performances.py +0 -0
  103. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/filters/portfolios.py +0 -0
  104. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/filters/positions.py +0 -0
  105. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/filters/roles.py +0 -0
  106. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/filters/transactions/fees.py +0 -0
  107. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/filters/transactions/transactions.py +0 -0
  108. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/fixtures/product_factsheets.yaml +0 -0
  109. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/fixtures/wbportfolio.yaml.gz +0 -0
  110. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/fixtures/wbrisk_management.yaml.gz +0 -0
  111. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/__init__.py +0 -0
  112. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/backends/__init__.py +0 -0
  113. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/backends/refinitiv/adjustment.py +0 -0
  114. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/backends/ubs/__init__.py +0 -0
  115. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/backends/ubs/asset_position.py +0 -0
  116. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/backends/ubs/fees.py +0 -0
  117. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/backends/ubs/instrument_price.py +0 -0
  118. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/backends/ubs/mixin.py +0 -0
  119. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/backends/utils.py +0 -0
  120. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/backends/wbfdm/__init__.py +0 -0
  121. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/backends/wbfdm/adjustment.py +0 -0
  122. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/backends/wbfdm/dividend.py +0 -0
  123. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/backends/wbfdm/mixin.py +0 -0
  124. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/handlers/__init__.py +0 -0
  125. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/handlers/adjustment.py +0 -0
  126. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/handlers/asset_position.py +0 -0
  127. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/handlers/dividend.py +0 -0
  128. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/handlers/fees.py +0 -0
  129. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/handlers/portfolio_cash_flow.py +0 -0
  130. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/handlers/register.py +0 -0
  131. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/handlers/trade.py +0 -0
  132. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/__init__.py +0 -0
  133. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/default_mapping.py +0 -0
  134. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/jpmorgan/__init__.py +0 -0
  135. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/jpmorgan/customer_trade.py +0 -0
  136. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/jpmorgan/fees.py +0 -0
  137. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/jpmorgan/strategy.py +0 -0
  138. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/jpmorgan/valuation.py +0 -0
  139. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/leonteq/__init__.py +0 -0
  140. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/leonteq/customer_trade.py +0 -0
  141. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/leonteq/equity.py +0 -0
  142. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/leonteq/fees.py +0 -0
  143. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/leonteq/trade.py +0 -0
  144. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/leonteq/valuation.py +0 -0
  145. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/natixis/__init__.py +0 -0
  146. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/natixis/customer_trade.py +0 -0
  147. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/natixis/d1_customer_trade.py +0 -0
  148. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/natixis/d1_equity.py +0 -0
  149. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/natixis/d1_fees.py +0 -0
  150. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/natixis/d1_trade.py +0 -0
  151. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/natixis/d1_valuation.py +0 -0
  152. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/natixis/dividend.py +0 -0
  153. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/natixis/equity.py +0 -0
  154. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/natixis/fees.py +0 -0
  155. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/natixis/trade.py +0 -0
  156. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/natixis/utils.py +0 -0
  157. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/natixis/valuation.py +0 -0
  158. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/refinitiv/__init__.py +0 -0
  159. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/refinitiv/adjustment.py +0 -0
  160. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/sg_lux/__init__.py +0 -0
  161. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/sg_lux/custodian_positions.py +0 -0
  162. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/sg_lux/customer_trade.py +0 -0
  163. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/sg_lux/customer_trade_pending_slk.py +0 -0
  164. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/sg_lux/customer_trade_slk.py +0 -0
  165. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/sg_lux/customer_trade_without_pw.py +0 -0
  166. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/sg_lux/equity.py +0 -0
  167. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/sg_lux/fees.py +0 -0
  168. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/sg_lux/perf_fees.py +0 -0
  169. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/sg_lux/portfolio_cash_flow.py +0 -0
  170. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/sg_lux/portfolio_future_cash_flow.py +0 -0
  171. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/sg_lux/registers.py +0 -0
  172. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/sg_lux/sylk.py +0 -0
  173. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/sg_lux/utils.py +0 -0
  174. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/sg_lux/valuation.py +0 -0
  175. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/societe_generale/__init__.py +0 -0
  176. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/societe_generale/customer_trade.py +0 -0
  177. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/societe_generale/strategy.py +0 -0
  178. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/societe_generale/valuation.py +0 -0
  179. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/tellco/__init__.py +0 -0
  180. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/tellco/customer_trade.py +0 -0
  181. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/tellco/equity.py +0 -0
  182. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/tellco/valuation.py +0 -0
  183. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/ubs/__init__.py +0 -0
  184. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/ubs/api/__init__.py +0 -0
  185. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/ubs/api/asset_position.py +0 -0
  186. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/ubs/api/fees.py +0 -0
  187. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/ubs/api/instrument_price.py +0 -0
  188. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/ubs/api/utils.py +0 -0
  189. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/ubs/customer_trade.py +0 -0
  190. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/ubs/equity.py +0 -0
  191. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/ubs/historical_customer_trade.py +0 -0
  192. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/ubs/valuation.py +0 -0
  193. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/vontobel/__init__.py +0 -0
  194. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/vontobel/asset_position.py +0 -0
  195. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/vontobel/customer_trade.py +0 -0
  196. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/vontobel/historical_customer_trade.py +0 -0
  197. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/vontobel/instrument.py +0 -0
  198. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/vontobel/management_fees.py +0 -0
  199. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/vontobel/performance_fees.py +0 -0
  200. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/vontobel/trade.py +0 -0
  201. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/vontobel/utils.py +0 -0
  202. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/parsers/vontobel/valuation.py +0 -0
  203. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/resources/__init__.py +0 -0
  204. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/resources/assets.py +0 -0
  205. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/resources/trades.py +0 -0
  206. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/import_export/utils.py +0 -0
  207. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/jinja2/wbportfolio/sql/aum_nnm.sql +0 -0
  208. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/kpi_handlers/nnm.py +0 -0
  209. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/metric/__init__.py +0 -0
  210. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/metric/backends/__init__.py +0 -0
  211. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/metric/backends/base.py +0 -0
  212. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/metric/backends/constants.py +0 -0
  213. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/metric/backends/portfolio_base.py +0 -0
  214. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/metric/backends/portfolio_esg.py +0 -0
  215. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/metric/tests/__init__.py +0 -0
  216. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/metric/tests/conftest.py +0 -0
  217. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/metric/tests/test_portfolio_base.py +0 -0
  218. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/metric/tests/test_portfolio_esg.py +0 -0
  219. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/migrations/0001_initial_squashed.py +0 -0
  220. {wbportfolio-1.44.1 → 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.1 → wbportfolio-1.44.3}/wbportfolio/migrations/0040_instrument_financial_instrument.py +0 -0
  222. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/migrations/0041_remove_listresearch_research_ptr_and_more.py +0 -0
  223. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/migrations/0042_instrumentlist_instrumentlistthroughmodel_and_more.py +0 -0
  224. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/migrations/0043_alter_instrumentlistthroughmodel_options_and_more.py +0 -0
  225. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/migrations/0044_alter_instrumentlist_identifier.py +0 -0
  226. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/migrations/0045_alter_instrument_financial_instrument.py +0 -0
  227. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/migrations/0046_add_product_default_account.py +0 -0
  228. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/migrations/0047_remove_product_default_sub_account.py +0 -0
  229. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/migrations/0048_alter_trade_status.py +0 -0
  230. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/migrations/0049_trade_claimed_shares.py +0 -0
  231. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/migrations/0050_fees_fee_date_fees_wbportfolio_transac_1f7a29_idx.py +0 -0
  232. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/migrations/0051_delete_macroreview.py +0 -0
  233. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/migrations/0052_remove_cash_instrument_ptr_and_more.py +0 -0
  234. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/migrations/0053_remove_product_group.py +0 -0
  235. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/migrations/0054_portfolioinstrumentpreferredclassificationthroughmodel_and_more.py +0 -0
  236. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/migrations/0055_remove_product__custom_management_rebates_and_more.py +0 -0
  237. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/migrations/0056_remove_companyportfoliodata_assets_under_management_currency_and_more.py +0 -0
  238. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/migrations/0057_alter_portfolio_preferred_instrument_classifications_and_more.py +0 -0
  239. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/migrations/0058_pmsinstrument.py +0 -0
  240. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/migrations/0059_fees_unique_fees.py +0 -0
  241. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/migrations/0060_alter_portfolioportfoliothroughmodel_type.py +0 -0
  242. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/migrations/0061_portfolio_bank_accounts_product_bank_account_and_more.py +0 -0
  243. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/migrations/0062_alter_dailyportfoliocashflow_options.py +0 -0
  244. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/migrations/0063_accountreconciliation_accountreconciliationline_and_more.py +0 -0
  245. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/migrations/0064_alter_portfolio_managers_portfolio_is_tracked_and_more.py +0 -0
  246. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/migrations/0065_alter_portfolio_managers_claim_as_shares_and_more.py +0 -0
  247. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/migrations/0066_assetposition_initial_shares_at_custodian_and_more.py +0 -0
  248. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/migrations/0067_assetposition_unique_asset_position.py +0 -0
  249. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/migrations/0068_trade_internal_trade_trade_marked_as_internal_and_more.py +0 -0
  250. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/migrations/0069_remove_portfolio_is_invested_and_more.py +0 -0
  251. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/migrations/0070_remove_assetposition_unique_asset_position_and_more.py +0 -0
  252. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/migrations/0071_alter_trade_options_alter_trade_order.py +0 -0
  253. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/migrations/__init__.py +0 -0
  254. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/models/__init__.py +0 -0
  255. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/models/adjustments.py +0 -0
  256. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/models/custodians.py +0 -0
  257. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/models/indexes.py +0 -0
  258. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/models/llm/wbcrm/analyze_relationship.py +0 -0
  259. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/models/mixins/__init__.py +0 -0
  260. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/models/mixins/instruments.py +0 -0
  261. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/models/mixins/liquidity_stress_test.py +0 -0
  262. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/models/portfolio_cash_targets.py +0 -0
  263. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/models/portfolio_relationship.py +0 -0
  264. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/models/portfolio_swing_pricings.py +0 -0
  265. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/models/product_groups.py +0 -0
  266. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/models/products.py +0 -0
  267. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/models/reconciliations/__init__.py +0 -0
  268. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/models/reconciliations/account_reconciliation_lines.py +0 -0
  269. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/models/reconciliations/account_reconciliations.py +0 -0
  270. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/models/reconciliations/reconciliations.py +0 -0
  271. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/models/registers.py +0 -0
  272. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/models/roles.py +0 -0
  273. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/models/synchronization/__init__.py +0 -0
  274. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/models/synchronization/portfolio_synchronization.py +0 -0
  275. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/models/synchronization/price_computation.py +0 -0
  276. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/models/synchronization/synchronization.py +0 -0
  277. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/models/transactions/__init__.py +0 -0
  278. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/models/transactions/claim.py +0 -0
  279. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/models/transactions/dividends.py +0 -0
  280. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/models/transactions/expiry.py +0 -0
  281. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/models/transactions/fees.py +0 -0
  282. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/models/transactions/trade_proposals.py +0 -0
  283. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/models/transactions/transactions.py +0 -0
  284. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/models/utils.py +0 -0
  285. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/permissions.py +0 -0
  286. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/pms/__init__.py +0 -0
  287. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/pms/statistics/__init__.py +0 -0
  288. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/pms/trading/__init__.py +0 -0
  289. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/pms/trading/handler.py +0 -0
  290. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/pms/typing.py +0 -0
  291. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/preferences.py +0 -0
  292. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/reports/__init__.py +0 -0
  293. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/reports/monthly_position_report.py +0 -0
  294. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/risk_management/__init__.py +0 -0
  295. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/risk_management/backends/__init__.py +0 -0
  296. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/risk_management/backends/accounts.py +0 -0
  297. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/risk_management/backends/controversy_portfolio.py +0 -0
  298. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/risk_management/backends/exposure_portfolio.py +0 -0
  299. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/risk_management/backends/instrument_list_portfolio.py +0 -0
  300. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/risk_management/backends/liquidity_risk.py +0 -0
  301. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/risk_management/backends/liquidity_stress_instrument.py +0 -0
  302. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/risk_management/backends/mixins.py +0 -0
  303. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/risk_management/backends/product_integrity.py +0 -0
  304. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/risk_management/backends/stop_loss_instrument.py +0 -0
  305. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/risk_management/backends/stop_loss_portfolio.py +0 -0
  306. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/risk_management/backends/ucits_portfolio.py +0 -0
  307. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/risk_management/tests/__init__.py +0 -0
  308. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/risk_management/tests/conftest.py +0 -0
  309. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/risk_management/tests/test_controversy_portfolio.py +0 -0
  310. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/risk_management/tests/test_exposure_portfolio.py +0 -0
  311. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/risk_management/tests/test_instrument_list_portfolio.py +0 -0
  312. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/risk_management/tests/test_liquidity_risk.py +0 -0
  313. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/risk_management/tests/test_product_integrity.py +0 -0
  314. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/risk_management/tests/test_stop_loss_instrument.py +0 -0
  315. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/risk_management/tests/test_stop_loss_portfolio.py +0 -0
  316. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/risk_management/tests/test_ucits_portfolio.py +0 -0
  317. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/serializers/__init__.py +0 -0
  318. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/serializers/adjustments.py +0 -0
  319. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/serializers/assets.py +0 -0
  320. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/serializers/custodians.py +0 -0
  321. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/serializers/portfolio_cash_flow.py +0 -0
  322. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/serializers/portfolio_cash_targets.py +0 -0
  323. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/serializers/portfolio_relationship.py +0 -0
  324. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/serializers/portfolio_swing_pricing.py +0 -0
  325. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/serializers/portfolios.py +0 -0
  326. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/serializers/positions.py +0 -0
  327. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/serializers/product_group.py +0 -0
  328. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/serializers/products.py +0 -0
  329. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/serializers/reconciliations.py +0 -0
  330. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/serializers/registers.py +0 -0
  331. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/serializers/roles.py +0 -0
  332. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/serializers/signals.py +0 -0
  333. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/serializers/synchronization.py +0 -0
  334. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/serializers/transactions/__init__.py +0 -0
  335. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/serializers/transactions/claim.py +0 -0
  336. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/serializers/transactions/dividends.py +0 -0
  337. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/serializers/transactions/expiry.py +0 -0
  338. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/serializers/transactions/fees.py +0 -0
  339. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/serializers/transactions/transactions.py +0 -0
  340. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/static/wbportfolio/css/macro_review.css +0 -0
  341. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/static/wbportfolio/markdown/documentation/account_holding_reconciliation.md +0 -0
  342. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/static/wbportfolio/markdown/documentation/aggregate_asset_position_liquidity.md +0 -0
  343. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/static/wbportfolio/markdown/documentation/company.md +0 -0
  344. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/static/wbportfolio/markdown/documentation/earnings_instrument.md +0 -0
  345. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/static/wbportfolio/markdown/documentation/financial_analysis_instrument_ratios.md +0 -0
  346. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/static/wbportfolio/markdown/documentation/financial_statistics.md +0 -0
  347. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/static/wbportfolio/markdown/documentation/person.md +0 -0
  348. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/tasks.py +0 -0
  349. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/templates/portfolio/email/customer_report.html +0 -0
  350. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/templates/portfolio/email/customer_trade_notification.html +0 -0
  351. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/templates/portfolio/email/email_base_template.html +0 -0
  352. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/templates/portfolio/email/rebalancing_report.html +0 -0
  353. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/templates/portfolio/macro/macro_review.html +0 -0
  354. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/tests/__init__.py +0 -0
  355. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/tests/conftest.py +0 -0
  356. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/tests/models/__init__.py +0 -0
  357. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/tests/models/test_account_reconciliation.py +0 -0
  358. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/tests/models/test_assets.py +0 -0
  359. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/tests/models/test_custodians.py +0 -0
  360. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/tests/models/test_customer_trades.py +0 -0
  361. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/tests/models/test_dividends.py +0 -0
  362. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/tests/models/test_imports.py +0 -0
  363. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/tests/models/test_instrument_mixins.py +0 -0
  364. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/tests/models/test_merge.py +0 -0
  365. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/tests/models/test_portfolio_cash_flow.py +0 -0
  366. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/tests/models/test_portfolio_cash_targets.py +0 -0
  367. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/tests/models/test_portfolio_swing_pricings.py +0 -0
  368. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/tests/models/test_portfolios.py +0 -0
  369. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/tests/models/test_product_groups.py +0 -0
  370. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/tests/models/test_products.py +0 -0
  371. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/tests/models/test_roles.py +0 -0
  372. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/tests/models/test_splits.py +0 -0
  373. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/tests/models/test_synchronization.py +0 -0
  374. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/tests/models/transactions/__init__.py +0 -0
  375. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/tests/models/transactions/test_claim.py +0 -0
  376. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/tests/models/transactions/test_fees.py +0 -0
  377. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/tests/models/transactions/test_trades.py +0 -0
  378. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/tests/models/utils.py +0 -0
  379. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/tests/serializers/__init__.py +0 -0
  380. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/tests/serializers/test_claims.py +0 -0
  381. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/tests/signals.py +0 -0
  382. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/tests/tests.py +0 -0
  383. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/tests/viewsets/__init__.py +0 -0
  384. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/tests/viewsets/test_assets.py +0 -0
  385. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/tests/viewsets/test_performances.py +0 -0
  386. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/tests/viewsets/test_products.py +0 -0
  387. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/tests/viewsets/transactions/__init__.py +0 -0
  388. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/tests/viewsets/transactions/test_claims.py +0 -0
  389. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/urls.py +0 -0
  390. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/utils.py +0 -0
  391. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/__init__.py +0 -0
  392. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/adjustments.py +0 -0
  393. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/assets.py +0 -0
  394. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/assets_and_net_new_money_progression.py +0 -0
  395. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/charts/__init__.py +0 -0
  396. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/charts/assets.py +0 -0
  397. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/__init__.py +0 -0
  398. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/buttons/__init__.py +0 -0
  399. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/buttons/adjustments.py +0 -0
  400. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/buttons/assets.py +0 -0
  401. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/buttons/claims.py +0 -0
  402. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/buttons/custodians.py +0 -0
  403. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/buttons/fees.py +0 -0
  404. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/buttons/mixins.py +0 -0
  405. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/buttons/portfolios.py +0 -0
  406. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/buttons/products.py +0 -0
  407. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/buttons/reconciliations.py +0 -0
  408. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/buttons/registers.py +0 -0
  409. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/buttons/signals.py +0 -0
  410. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/buttons/trade_proposals.py +0 -0
  411. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/buttons/trades.py +0 -0
  412. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/display/__init__.py +0 -0
  413. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/display/adjustments.py +0 -0
  414. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/display/assets.py +0 -0
  415. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/display/claim.py +0 -0
  416. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/display/custodians.py +0 -0
  417. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/display/esg.py +0 -0
  418. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/display/fees.py +0 -0
  419. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/display/portfolio_cash_flow.py +0 -0
  420. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/display/portfolio_relationship.py +0 -0
  421. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/display/portfolios.py +0 -0
  422. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/display/positions.py +0 -0
  423. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/display/product_groups.py +0 -0
  424. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/display/product_performance.py +0 -0
  425. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/display/products.py +0 -0
  426. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/display/reconciliations.py +0 -0
  427. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/display/registers.py +0 -0
  428. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/display/roles.py +0 -0
  429. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/display/trade_proposals.py +0 -0
  430. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/display/trades.py +0 -0
  431. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/display/transactions.py +0 -0
  432. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/endpoints/__init__.py +0 -0
  433. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/endpoints/adjustments.py +0 -0
  434. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/endpoints/assets.py +0 -0
  435. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/endpoints/claim.py +0 -0
  436. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/endpoints/custodians.py +0 -0
  437. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/endpoints/esg.py +0 -0
  438. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/endpoints/fees.py +0 -0
  439. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/endpoints/portfolio_relationship.py +0 -0
  440. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/endpoints/portfolios.py +0 -0
  441. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/endpoints/positions.py +0 -0
  442. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/endpoints/product_groups.py +0 -0
  443. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/endpoints/product_performance.py +0 -0
  444. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/endpoints/products.py +0 -0
  445. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/endpoints/reconciliations.py +0 -0
  446. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/endpoints/roles.py +0 -0
  447. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/endpoints/trade_proposals.py +0 -0
  448. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/endpoints/trades.py +0 -0
  449. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/endpoints/transactions.py +0 -0
  450. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/menu/__init__.py +0 -0
  451. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/menu/adjustments.py +0 -0
  452. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/menu/assets.py +0 -0
  453. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/menu/claim.py +0 -0
  454. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/menu/custodians.py +0 -0
  455. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/menu/fees.py +0 -0
  456. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/menu/instrument_prices.py +0 -0
  457. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/menu/portfolio_cash_flow.py +0 -0
  458. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/menu/portfolios.py +0 -0
  459. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/menu/positions.py +0 -0
  460. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/menu/product_groups.py +0 -0
  461. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/menu/product_performance.py +0 -0
  462. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/menu/products.py +0 -0
  463. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/menu/reconciliations.py +0 -0
  464. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/menu/registers.py +0 -0
  465. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/menu/roles.py +0 -0
  466. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/menu/trades.py +0 -0
  467. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/menu/transactions.py +0 -0
  468. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/previews/__init__.py +0 -0
  469. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/previews/portfolios.py +0 -0
  470. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/titles/__init__.py +0 -0
  471. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/titles/adjustments.py +0 -0
  472. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/titles/assets.py +0 -0
  473. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/titles/assets_and_net_new_money_progression.py +0 -0
  474. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/titles/claim.py +0 -0
  475. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/titles/custodians.py +0 -0
  476. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/titles/esg.py +0 -0
  477. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/titles/fees.py +0 -0
  478. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/titles/instrument_prices.py +0 -0
  479. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/titles/portfolios.py +0 -0
  480. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/titles/positions.py +0 -0
  481. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/titles/product_groups.py +0 -0
  482. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/titles/product_performance.py +0 -0
  483. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/titles/products.py +0 -0
  484. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/titles/registers.py +0 -0
  485. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/titles/roles.py +0 -0
  486. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/titles/trades.py +0 -0
  487. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/configs/titles/transactions.py +0 -0
  488. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/custodians.py +0 -0
  489. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/esg.py +0 -0
  490. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/mixins.py +0 -0
  491. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/portfolio_cash_flow.py +0 -0
  492. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/portfolio_cash_targets.py +0 -0
  493. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/portfolio_relationship.py +0 -0
  494. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/portfolio_swing_pricing.py +0 -0
  495. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/portfolios.py +0 -0
  496. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/positions.py +0 -0
  497. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/product_groups.py +0 -0
  498. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/product_performance.py +0 -0
  499. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/products.py +0 -0
  500. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/reconciliations.py +0 -0
  501. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/registers.py +0 -0
  502. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/roles.py +0 -0
  503. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/signals.py +0 -0
  504. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/synchronization.py +0 -0
  505. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/transactions/__init__.py +0 -0
  506. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/transactions/fees.py +0 -0
  507. {wbportfolio-1.44.1 → wbportfolio-1.44.3}/wbportfolio/viewsets/transactions/mixins.py +0 -0
  508. {wbportfolio-1.44.1 → 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.1
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,
@@ -7,6 +7,7 @@ from wbcore.utils.date import current_financial_quarter
7
7
  from wbcrm.models.accounts import Account, AccountRole
8
8
  from wbfdm.models import Classification, ClassificationGroup
9
9
  from wbfdm.preferences import get_default_classification_group
10
+ from wbportfolio.filters.transactions.mixins import OppositeSharesFieldMethodMixin
10
11
  from wbportfolio.models import Product, ProductGroup
11
12
  from wbportfolio.models.transactions.claim import Claim, ClaimGroupbyChoice
12
13
  from wbportfolio.preferences import get_monthly_nnm_target
@@ -81,7 +82,6 @@ class CommissionBaseFilterSet(wb_filters.FilterSet):
81
82
  endpoint=Account.get_representation_endpoint(),
82
83
  value_key=Account.get_representation_value_key(),
83
84
  label_key=Account.get_representation_label_key(),
84
- filter_params={"status": "OPEN"},
85
85
  )
86
86
 
87
87
  manager_role = wb_filters.ModelChoiceFilter(
@@ -140,7 +140,23 @@ class CommissionBaseFilterSet(wb_filters.FilterSet):
140
140
  return queryset
141
141
 
142
142
 
143
- class ClaimFilter(CommissionBaseFilterSet):
143
+ class ClaimFilter(OppositeSharesFieldMethodMixin, CommissionBaseFilterSet):
144
+ # we have to redefine the mixin fields because django_filters does not allow class extension with mixin
145
+ opposite_shares = wb_filters.NumberFilter(
146
+ field_name="shares",
147
+ label="Opposite Shares",
148
+ method="filter_opposite_shares",
149
+ lookup_icon="±",
150
+ lookup_label="Opposite",
151
+ )
152
+ opposite_approximate_shares = wb_filters.NumberFilter(
153
+ field_name="shares",
154
+ label="Opposite Approximite Shares",
155
+ method="filter_opposite_approximate_shares",
156
+ lookup_icon="≈±",
157
+ lookup_label="Opposite Approximate (+- 10%)",
158
+ )
159
+
144
160
  pending_approval = wb_filters.BooleanFilter(label="Pending Approval", method="boolean_pending_approval")
145
161
  linked_trade = wb_filters.BooleanFilter(method="filter_trade_isnotnull", label="Trade Linked")
146
162
  in_charge_of_customer = wb_filters.ModelChoiceFilter(
@@ -188,7 +204,7 @@ class ClaimFilter(CommissionBaseFilterSet):
188
204
  }
189
205
 
190
206
 
191
- class ClaimGroupByFilter(ClaimFilter):
207
+ class ClaimGroupByFilter(CommissionBaseFilterSet):
192
208
  pending_approval = in_charge_of_customer = linked_trade = None
193
209
 
194
210
  only_new_customer = wb_filters.BooleanFilter(method="filter_only_new_customer", label="Only new customers")
@@ -286,6 +302,19 @@ class ConsolidatedTradeSummaryTableFilterSet(PandasFilterSetMixin, ClaimGroupByF
286
302
  }
287
303
 
288
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
+
289
318
  class CumulativeNNMChartFilter(ClaimGroupByFilter):
290
319
  groupby_classification_group = group_by = None
291
320
 
@@ -0,0 +1,12 @@
1
+ class OppositeSharesFieldMethodMixin:
2
+ def filter_opposite_shares(self, queryset, name, value):
3
+ return queryset.filter(shares=value * -1)
4
+
5
+ def filter_opposite_approximate_shares(self, queryset, name, value):
6
+ value = float(value)
7
+ value_lower_bound = -0.9 * value
8
+ value_higher_bound = -1.1 * value
9
+
10
+ if value > 0:
11
+ return queryset.filter(shares__lte=value_lower_bound, shares__gte=value_higher_bound)
12
+ return queryset.filter(shares__lte=value_higher_bound, shares__gte=value_lower_bound)
@@ -6,11 +6,27 @@ from wbcrm.models.accounts import Account
6
6
  from wbfdm.models import Instrument
7
7
  from wbportfolio.models import Product, Trade
8
8
  from wbportfolio.models.transactions.claim import Claim
9
+ from .mixins import OppositeSharesFieldMethodMixin
9
10
 
10
11
  from .transactions import TransactionFilterSet
11
12
 
12
13
 
13
- class TradeFilter(TransactionFilterSet):
14
+ class TradeFilter(OppositeSharesFieldMethodMixin, TransactionFilterSet):
15
+ # we have to redefine the mixin fields because django_filters does not allow class extension with mixin
16
+ opposite_shares = wb_filters.NumberFilter(
17
+ field_name="shares",
18
+ label="Opposite Shares",
19
+ method="filter_opposite_shares",
20
+ lookup_icon="±",
21
+ lookup_label="Opposite",
22
+ )
23
+ opposite_approximate_shares = wb_filters.NumberFilter(
24
+ field_name="shares",
25
+ label="Opposite Approximite Shares",
26
+ method="filter_opposite_approximate_shares",
27
+ lookup_icon="≈±",
28
+ lookup_label="Opposite Approximate (+- 10%)",
29
+ )
14
30
  transaction_date = wb_filters.DateRangeFilter(
15
31
  method=wb_filters.DateRangeFilter.base_date_range_filter_method,
16
32
  label="Date Range",
@@ -159,34 +175,6 @@ class SubscriptionRedemptionFilterSet(TradeFilter):
159
175
  label_key=Product.get_representation_label_key(),
160
176
  )
161
177
 
162
- opposite_shares = wb_filters.NumberFilter(
163
- field_name="shares",
164
- label="Opposite Shares",
165
- method="filter_opposite_shares",
166
- lookup_icon="±",
167
- lookup_label="Opposite",
168
- )
169
-
170
- def filter_opposite_shares(self, queryset, name, value):
171
- return queryset.filter(shares=value * -1)
172
-
173
- opposite_approximate_shares = wb_filters.NumberFilter(
174
- field_name="shares",
175
- label="Opposite Approximite Shares",
176
- method="filter_opposite_approximate_shares",
177
- lookup_icon="≈±",
178
- lookup_label="Opposite Approximate (+- 10%)",
179
- )
180
-
181
- def filter_opposite_approximate_shares(self, queryset, name, value):
182
- value = float(value)
183
- value_lower_bound = -0.9 * value
184
- value_higher_bound = -1.1 * value
185
-
186
- if value > 0:
187
- return queryset.filter(shares__lte=value_lower_bound, shares__gte=value_higher_bound)
188
- return queryset.filter(shares__lte=value_higher_bound, shares__gte=value_lower_bound)
189
-
190
178
  class Meta:
191
179
  model = Trade
192
180
  fields = {
@@ -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
  )