@barchart/portfolio-api-common 1.2.99 → 1.2.103

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.
@@ -286,7 +286,7 @@ module.exports = (() => {
286
286
  }
287
287
 
288
288
  function getYearlyRangeDescription(start, end) {
289
- return `Year ended ${end.year.toString()}`;
289
+ return `Year ended ${end.format()}`;
290
290
  }
291
291
 
292
292
  function getQuarterlyRangeDescription(start, end) {
@@ -3,6 +3,7 @@ const array = require('@barchart/common-js/lang/array'),
3
3
  ComparatorBuilder = require('@barchart/common-js/collections/sorting/ComparatorBuilder'),
4
4
  comparators = require('@barchart/common-js/collections/sorting/comparators'),
5
5
  Currency = require('@barchart/common-js/lang/Currency'),
6
+ Day = require('@barchart/common-js/lang/Day'),
6
7
  Decimal = require('@barchart/common-js/lang/Decimal'),
7
8
  DisposableStack = require('@barchart/common-js/collections/specialized/DisposableStack'),
8
9
  Event = require('@barchart/common-js/messaging/Event'),
@@ -166,6 +166,14 @@ module.exports = (() => {
166
166
  this._dataFormat.cashTotal = null;
167
167
  this._dataFormat.portfolioType = null;
168
168
 
169
+ this._dataActual.periodRealized = null;
170
+ this._dataActual.periodUnrealized = null;
171
+ this._dataActual.periodIncome = null;
172
+
173
+ this._dataFormat.periodRealized = null;
174
+ this._dataFormat.periodUnrealized = null;
175
+ this._dataFormat.periodIncome = null;
176
+
169
177
  this._items.forEach((item) => {
170
178
  bindItem.call(this, item);
171
179
  });
@@ -662,6 +670,10 @@ module.exports = (() => {
662
670
  updates.marketPrevious = updates.marketPrevious.add(translate(item, item.data.marketPrevious));
663
671
  updates.marketPrevious2 = updates.marketPrevious2.add(translate(item, item.data.marketPrevious2));
664
672
 
673
+ updates.periodRealized = updates.periodRealized.add(translate(item, item.data.periodRealized));
674
+ updates.periodUnrealized = updates.periodUnrealized.add(translate(item, item.data.periodUnrealized));
675
+ updates.periodIncome = updates.periodIncome.add(translate(item, item.data.periodIncome));
676
+
665
677
  if (item.position.instrument.type === InstrumentType.CASH) {
666
678
  updates.cashTotal = updates.cashTotal.add(translate(item, item.data.market));
667
679
  }
@@ -677,7 +689,10 @@ module.exports = (() => {
677
689
  summaryTotalPrevious2: Decimal.ZERO,
678
690
  marketPrevious: Decimal.ZERO,
679
691
  marketPrevious2: Decimal.ZERO,
680
- cashTotal: Decimal.ZERO
692
+ periodRealized: Decimal.ZERO,
693
+ periodUnrealized: Decimal.ZERO,
694
+ periodIncome: Decimal.ZERO,
695
+ cashTotal: Decimal.ZERO,
681
696
  });
682
697
 
683
698
  actual.basis = updates.basis;
@@ -78,6 +78,9 @@ module.exports = (() => {
78
78
  this._data.income = null;
79
79
  this._data.basisPrice = null;
80
80
 
81
+ this._data.realizedPeriod = null;
82
+ this._data.unrealizedPeriod = null;
83
+
81
84
  this._data.newsExists = false;
82
85
  this._data.fundamental = { };
83
86
  this._data.locked = getIsLocked(position);
@@ -368,8 +371,13 @@ module.exports = (() => {
368
371
  function calculateStaticData(item) {
369
372
  const position = item.position;
370
373
  const snapshot = getSnapshot(position, item.currentSummary, item._reporting);
374
+
371
375
  const previousSummaries = item.previousSummaries;
372
376
 
377
+ const previousSummary1 = getPreviousSummary(previousSummaries, 1);
378
+ const previousSummary2 = getPreviousSummary(previousSummaries, 2);
379
+ const previousSummary3 = getPreviousSummary(previousSummaries, 3);
380
+
373
381
  const data = item._data;
374
382
 
375
383
  data.previousPrice = position.previous || null;
@@ -389,19 +397,18 @@ module.exports = (() => {
389
397
 
390
398
  data.income = snapshot.income;
391
399
 
392
- const previousSummary1 = getPreviousSummary(previousSummaries, 1);
393
- const previousSummary2 = getPreviousSummary(previousSummaries, 2);
394
- const previousSummary3 = getPreviousSummary(previousSummaries, 3);
395
-
396
400
  data.summaryTotalCurrent = calculateSummaryTotal(item.currentSummary, previousSummary1);
397
401
  data.summaryTotalPrevious = calculateSummaryTotal(previousSummary1, previousSummary2);
398
402
  data.summaryTotalPrevious2 = calculateSummaryTotal(previousSummary2, previousSummary3);
399
403
 
400
404
  data.marketPrevious = previousSummary1 === null ? Decimal.ZERO : previousSummary1.end.value;
401
405
  data.marketPrevious2 = previousSummary2 === null ? Decimal.ZERO : previousSummary2.end.value;
402
-
403
406
  data.quantityPrevious = previousSummary1 === null ? Decimal.ZERO : previousSummary1.end.open;
404
407
 
408
+ data.periodRealized = calculateRealizedPeriod(item.currentSummary, previousSummary1);
409
+ data.periodUnrealized = calculateUnrealizedPeriod(item.currentSummary, previousSummary1);
410
+ data.periodIncome = calculateIncomePeriod(item.currentSummary, previousSummary1);
411
+
405
412
  if (snapshot.open.getIsZero()) {
406
413
  data.basisPrice = Decimal.ZERO;
407
414
  } else {
@@ -543,6 +550,48 @@ module.exports = (() => {
543
550
  return returnRef;
544
551
  }
545
552
 
553
+ function calculateRealizedPeriod(currentSummary, previousSummary) {
554
+ let returnRef;
555
+
556
+ if (currentSummary) {
557
+ const period = currentSummary.period;
558
+
559
+ returnRef = period.unrealized;
560
+ } else {
561
+ returnRef = Decimal.ZERO;
562
+ }
563
+
564
+ return returnRef;
565
+ }
566
+
567
+ function calculateUnrealizedPeriod(currentSummary, previousSummary) {
568
+ let returnRef;
569
+
570
+ if (currentSummary) {
571
+ const period = currentSummary.period;
572
+
573
+ returnRef = period.unrealized.subtract(previousSummary !== null ? previousSummary.period.unrealized : Decimal.ZERO);
574
+ } else {
575
+ returnRef = Decimal.ZERO;
576
+ }
577
+
578
+ return returnRef;
579
+ }
580
+
581
+ function calculateIncomePeriod(currentSummary, previousSummary) {
582
+ let returnRef;
583
+
584
+ if (currentSummary) {
585
+ const period = currentSummary.period;
586
+
587
+ returnRef = period.income;
588
+ } else {
589
+ returnRef = Decimal.ZERO;
590
+ }
591
+
592
+ return returnRef;
593
+ }
594
+
546
595
  function getPreviousSummary(previousSummaries, count) {
547
596
  const index = previousSummaries.length - count;
548
597
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@barchart/portfolio-api-common",
3
- "version": "1.2.99",
3
+ "version": "1.2.103",
4
4
  "description": "Common classes used by the Portfolio system",
5
5
  "author": {
6
6
  "name": "Bryan Ingle",
@@ -677,7 +677,7 @@ module.exports = (() => {
677
677
  }
678
678
 
679
679
  function getYearlyRangeDescription(start, end) {
680
- return `Year ended ${end.year.toString()}`;
680
+ return `Year ended ${end.format()}`;
681
681
  }
682
682
 
683
683
  function getQuarterlyRangeDescription(start, end) {
@@ -1427,6 +1427,7 @@ const array = require('@barchart/common-js/lang/array'),
1427
1427
  ComparatorBuilder = require('@barchart/common-js/collections/sorting/ComparatorBuilder'),
1428
1428
  comparators = require('@barchart/common-js/collections/sorting/comparators'),
1429
1429
  Currency = require('@barchart/common-js/lang/Currency'),
1430
+ Day = require('@barchart/common-js/lang/Day'),
1430
1431
  Decimal = require('@barchart/common-js/lang/Decimal'),
1431
1432
  DisposableStack = require('@barchart/common-js/collections/specialized/DisposableStack'),
1432
1433
  Event = require('@barchart/common-js/messaging/Event'),
@@ -2440,7 +2441,7 @@ module.exports = (() => {
2440
2441
  return PositionContainer;
2441
2442
  })();
2442
2443
 
2443
- },{"./../data/PositionSummaryFrame":3,"./PositionGroup":7,"./PositionItem":8,"./definitions/PositionLevelDefinition":9,"./definitions/PositionLevelType":10,"./definitions/PositionTreeDefinition":11,"@barchart/common-js/collections/Tree":15,"@barchart/common-js/collections/sorting/ComparatorBuilder":16,"@barchart/common-js/collections/sorting/comparators":17,"@barchart/common-js/collections/specialized/DisposableStack":18,"@barchart/common-js/lang/Currency":20,"@barchart/common-js/lang/Decimal":22,"@barchart/common-js/lang/Rate":26,"@barchart/common-js/lang/array":28,"@barchart/common-js/lang/assert":29,"@barchart/common-js/lang/is":33,"@barchart/common-js/messaging/Event":35}],7:[function(require,module,exports){
2444
+ },{"./../data/PositionSummaryFrame":3,"./PositionGroup":7,"./PositionItem":8,"./definitions/PositionLevelDefinition":9,"./definitions/PositionLevelType":10,"./definitions/PositionTreeDefinition":11,"@barchart/common-js/collections/Tree":15,"@barchart/common-js/collections/sorting/ComparatorBuilder":16,"@barchart/common-js/collections/sorting/comparators":17,"@barchart/common-js/collections/specialized/DisposableStack":18,"@barchart/common-js/lang/Currency":20,"@barchart/common-js/lang/Day":21,"@barchart/common-js/lang/Decimal":22,"@barchart/common-js/lang/Rate":26,"@barchart/common-js/lang/array":28,"@barchart/common-js/lang/assert":29,"@barchart/common-js/lang/is":33,"@barchart/common-js/messaging/Event":35}],7:[function(require,module,exports){
2444
2445
  const array = require('@barchart/common-js/lang/array'),
2445
2446
  assert = require('@barchart/common-js/lang/assert'),
2446
2447
  Currency = require('@barchart/common-js/lang/Currency'),
@@ -2609,6 +2610,14 @@ module.exports = (() => {
2609
2610
  this._dataFormat.cashTotal = null;
2610
2611
  this._dataFormat.portfolioType = null;
2611
2612
 
2613
+ this._dataActual.periodRealized = null;
2614
+ this._dataActual.periodUnrealized = null;
2615
+ this._dataActual.periodIncome = null;
2616
+
2617
+ this._dataFormat.periodRealized = null;
2618
+ this._dataFormat.periodUnrealized = null;
2619
+ this._dataFormat.periodIncome = null;
2620
+
2612
2621
  this._items.forEach((item) => {
2613
2622
  bindItem.call(this, item);
2614
2623
  });
@@ -3105,6 +3114,10 @@ module.exports = (() => {
3105
3114
  updates.marketPrevious = updates.marketPrevious.add(translate(item, item.data.marketPrevious));
3106
3115
  updates.marketPrevious2 = updates.marketPrevious2.add(translate(item, item.data.marketPrevious2));
3107
3116
 
3117
+ updates.periodRealized = updates.periodRealized.add(translate(item, item.data.periodRealized));
3118
+ updates.periodUnrealized = updates.periodUnrealized.add(translate(item, item.data.periodUnrealized));
3119
+ updates.periodIncome = updates.periodIncome.add(translate(item, item.data.periodIncome));
3120
+
3108
3121
  if (item.position.instrument.type === InstrumentType.CASH) {
3109
3122
  updates.cashTotal = updates.cashTotal.add(translate(item, item.data.market));
3110
3123
  }
@@ -3120,7 +3133,10 @@ module.exports = (() => {
3120
3133
  summaryTotalPrevious2: Decimal.ZERO,
3121
3134
  marketPrevious: Decimal.ZERO,
3122
3135
  marketPrevious2: Decimal.ZERO,
3123
- cashTotal: Decimal.ZERO
3136
+ periodRealized: Decimal.ZERO,
3137
+ periodUnrealized: Decimal.ZERO,
3138
+ periodIncome: Decimal.ZERO,
3139
+ cashTotal: Decimal.ZERO,
3124
3140
  });
3125
3141
 
3126
3142
  actual.basis = updates.basis;
@@ -3431,6 +3447,9 @@ module.exports = (() => {
3431
3447
  this._data.income = null;
3432
3448
  this._data.basisPrice = null;
3433
3449
 
3450
+ this._data.realizedPeriod = null;
3451
+ this._data.unrealizedPeriod = null;
3452
+
3434
3453
  this._data.newsExists = false;
3435
3454
  this._data.fundamental = { };
3436
3455
  this._data.locked = getIsLocked(position);
@@ -3721,8 +3740,13 @@ module.exports = (() => {
3721
3740
  function calculateStaticData(item) {
3722
3741
  const position = item.position;
3723
3742
  const snapshot = getSnapshot(position, item.currentSummary, item._reporting);
3743
+
3724
3744
  const previousSummaries = item.previousSummaries;
3725
3745
 
3746
+ const previousSummary1 = getPreviousSummary(previousSummaries, 1);
3747
+ const previousSummary2 = getPreviousSummary(previousSummaries, 2);
3748
+ const previousSummary3 = getPreviousSummary(previousSummaries, 3);
3749
+
3726
3750
  const data = item._data;
3727
3751
 
3728
3752
  data.previousPrice = position.previous || null;
@@ -3742,19 +3766,18 @@ module.exports = (() => {
3742
3766
 
3743
3767
  data.income = snapshot.income;
3744
3768
 
3745
- const previousSummary1 = getPreviousSummary(previousSummaries, 1);
3746
- const previousSummary2 = getPreviousSummary(previousSummaries, 2);
3747
- const previousSummary3 = getPreviousSummary(previousSummaries, 3);
3748
-
3749
3769
  data.summaryTotalCurrent = calculateSummaryTotal(item.currentSummary, previousSummary1);
3750
3770
  data.summaryTotalPrevious = calculateSummaryTotal(previousSummary1, previousSummary2);
3751
3771
  data.summaryTotalPrevious2 = calculateSummaryTotal(previousSummary2, previousSummary3);
3752
3772
 
3753
3773
  data.marketPrevious = previousSummary1 === null ? Decimal.ZERO : previousSummary1.end.value;
3754
3774
  data.marketPrevious2 = previousSummary2 === null ? Decimal.ZERO : previousSummary2.end.value;
3755
-
3756
3775
  data.quantityPrevious = previousSummary1 === null ? Decimal.ZERO : previousSummary1.end.open;
3757
3776
 
3777
+ data.periodRealized = calculateRealizedPeriod(item.currentSummary, previousSummary1);
3778
+ data.periodUnrealized = calculateUnrealizedPeriod(item.currentSummary, previousSummary1);
3779
+ data.periodIncome = calculateIncomePeriod(item.currentSummary, previousSummary1);
3780
+
3758
3781
  if (snapshot.open.getIsZero()) {
3759
3782
  data.basisPrice = Decimal.ZERO;
3760
3783
  } else {
@@ -3896,6 +3919,48 @@ module.exports = (() => {
3896
3919
  return returnRef;
3897
3920
  }
3898
3921
 
3922
+ function calculateRealizedPeriod(currentSummary, previousSummary) {
3923
+ let returnRef;
3924
+
3925
+ if (currentSummary) {
3926
+ const period = currentSummary.period;
3927
+
3928
+ returnRef = period.unrealized;
3929
+ } else {
3930
+ returnRef = Decimal.ZERO;
3931
+ }
3932
+
3933
+ return returnRef;
3934
+ }
3935
+
3936
+ function calculateUnrealizedPeriod(currentSummary, previousSummary) {
3937
+ let returnRef;
3938
+
3939
+ if (currentSummary) {
3940
+ const period = currentSummary.period;
3941
+
3942
+ returnRef = period.unrealized.subtract(previousSummary !== null ? previousSummary.period.unrealized : Decimal.ZERO);
3943
+ } else {
3944
+ returnRef = Decimal.ZERO;
3945
+ }
3946
+
3947
+ return returnRef;
3948
+ }
3949
+
3950
+ function calculateIncomePeriod(currentSummary, previousSummary) {
3951
+ let returnRef;
3952
+
3953
+ if (currentSummary) {
3954
+ const period = currentSummary.period;
3955
+
3956
+ returnRef = period.income;
3957
+ } else {
3958
+ returnRef = Decimal.ZERO;
3959
+ }
3960
+
3961
+ return returnRef;
3962
+ }
3963
+
3899
3964
  function getPreviousSummary(previousSummaries, count) {
3900
3965
  const index = previousSummaries.length - count;
3901
3966
 
@@ -6185,11 +6250,12 @@ module.exports = function () {
6185
6250
  }
6186
6251
 
6187
6252
  /**
6188
- * Clones a {@link Day} instance.
6253
+ * Converts a string (which matches the output of {@link Day#format} into
6254
+ * a {@link Day} instance.
6189
6255
  *
6190
6256
  * @public
6191
6257
  * @static
6192
- * @param {Day} value
6258
+ * @param {String} value
6193
6259
  * @returns {Day}
6194
6260
  */
6195
6261
 
@@ -6230,24 +6296,6 @@ module.exports = function () {
6230
6296
  return this._day;
6231
6297
  }
6232
6298
  }], [{
6233
- key: 'clone',
6234
- value: function clone(value) {
6235
- assert.argumentIsRequired(value, 'value', Day, 'Day');
6236
-
6237
- return new Day(value.year, value.month, value.day);
6238
- }
6239
-
6240
- /**
6241
- * Converts a string (which matches the output of {@link Day#format} into
6242
- * a {@link Day} instance.
6243
- *
6244
- * @public
6245
- * @static
6246
- * @param {String} value
6247
- * @returns {Day}
6248
- */
6249
-
6250
- }, {
6251
6299
  key: 'parse',
6252
6300
  value: function parse(value) {
6253
6301
  assert.argumentIsRequired(value, 'value', String);
@@ -6564,17 +6612,15 @@ module.exports = function () {
6564
6612
  *
6565
6613
  * @public
6566
6614
  * @param {Boolean=} approximate
6567
- * @param {Number=} places
6568
6615
  * @returns {Boolean}
6569
6616
  */
6570
6617
 
6571
6618
  }, {
6572
6619
  key: 'getIsZero',
6573
- value: function getIsZero(approximate, places) {
6620
+ value: function getIsZero(approximate) {
6574
6621
  assert.argumentIsOptional(approximate, 'approximate', Boolean);
6575
- assert.argumentIsOptional(places, 'places', Number);
6576
6622
 
6577
- return this._big.eq(zero) || is.boolean(approximate) && approximate && this.round(places || Big.DP, RoundingMode.NORMAL).getIsZero();
6623
+ return this._big.eq(zero) || is.boolean(approximate) && approximate && this.round(20, RoundingMode.NORMAL).getIsZero();
6578
6624
  }
6579
6625
 
6580
6626
  /**
@@ -6673,43 +6719,6 @@ module.exports = function () {
6673
6719
  return this._big.eq(getBig(other));
6674
6720
  }
6675
6721
 
6676
- /**
6677
- * Returns true if the current instance is an integer (i.e. has no decimal
6678
- * component).
6679
- *
6680
- * @public
6681
- * @return {Boolean}
6682
- */
6683
-
6684
- }, {
6685
- key: 'getIsInteger',
6686
- value: function getIsInteger() {
6687
- return this.getIsEqual(this.round(0));
6688
- }
6689
-
6690
- /**
6691
- * Returns the number of decimal places used.
6692
- *
6693
- * @public
6694
- * @returns {Number}
6695
- */
6696
-
6697
- }, {
6698
- key: 'getDecimalPlaces',
6699
- value: function getDecimalPlaces() {
6700
- var matches = this.toFixed().match(/-?\d*\.(\d*)/);
6701
-
6702
- var returnVal = void 0;
6703
-
6704
- if (matches === null) {
6705
- returnVal = 0;
6706
- } else {
6707
- returnVal = matches[1].length;
6708
- }
6709
-
6710
- return returnVal;
6711
- }
6712
-
6713
6722
  /**
6714
6723
  * Emits a floating point value that approximates the value of the current
6715
6724
  * instance.
@@ -6758,11 +6767,10 @@ module.exports = function () {
6758
6767
  }
6759
6768
 
6760
6769
  /**
6761
- * Clones a {@link Decimal} instance.
6770
+ * Parses the value emitted by {@link Decimal#toJSON}.
6762
6771
  *
6763
6772
  * @public
6764
- * @static
6765
- * @param {Decimal} value
6773
+ * @param {String} value
6766
6774
  * @returns {Decimal}
6767
6775
  */
6768
6776
 
@@ -6772,22 +6780,6 @@ module.exports = function () {
6772
6780
  return '[Decimal]';
6773
6781
  }
6774
6782
  }], [{
6775
- key: 'clone',
6776
- value: function clone(value) {
6777
- assert.argumentIsRequired(value, 'value', Decimal, 'Decimal');
6778
-
6779
- return new Decimal(value._big);
6780
- }
6781
-
6782
- /**
6783
- * Parses the value emitted by {@link Decimal#toJSON}.
6784
- *
6785
- * @public
6786
- * @param {String} value
6787
- * @returns {Decimal}
6788
- */
6789
-
6790
- }, {
6791
6783
  key: 'parse',
6792
6784
  value: function parse(value) {
6793
6785
  return new Decimal(value);
@@ -7809,11 +7801,10 @@ module.exports = function () {
7809
7801
  }
7810
7802
 
7811
7803
  /**
7812
- * Clones a {@link Timestamp} instance.
7804
+ * Parses the value emitted by {@link Timestamp#toJSON}.
7813
7805
  *
7814
7806
  * @public
7815
- * @static
7816
- * @param {Timestamp} value
7807
+ * @param {Number} value
7817
7808
  * @returns {Timestamp}
7818
7809
  */
7819
7810
 
@@ -7849,22 +7840,6 @@ module.exports = function () {
7849
7840
  return this._moment;
7850
7841
  }
7851
7842
  }], [{
7852
- key: 'clone',
7853
- value: function clone(value) {
7854
- assert.argumentIsRequired(value, 'value', Timestamp, 'Timestamp');
7855
-
7856
- return new Timestamp(value._timestamp, value._timezone);
7857
- }
7858
-
7859
- /**
7860
- * Parses the value emitted by {@link Timestamp#toJSON}.
7861
- *
7862
- * @public
7863
- * @param {Number} value
7864
- * @returns {Timestamp}
7865
- */
7866
-
7867
- }, {
7868
7843
  key: 'parse',
7869
7844
  value: function parse(value) {
7870
7845
  return new Timestamp(value);