@senior-gestao-empresarial/erpx-components 4.3.0 → 4.5.0

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.
Files changed (33) hide show
  1. package/bundles/senior-gestao-empresarial-erpx-components.umd.js +331 -184
  2. package/bundles/senior-gestao-empresarial-erpx-components.umd.js.map +1 -1
  3. package/bundles/senior-gestao-empresarial-erpx-components.umd.min.js +2 -2
  4. package/bundles/senior-gestao-empresarial-erpx-components.umd.min.js.map +1 -1
  5. package/components/tributos/calculators/gross-amount-calculator.d.ts +5 -0
  6. package/components/tributos/calculators/tax-amount-calculator.d.ts +5 -1
  7. package/components/tributos/erp-tributos.component.d.ts +13 -3
  8. package/components/tributos/services/tax-rounding.service.d.ts +5 -0
  9. package/components/tributos/stores/tax.store.d.ts +10 -0
  10. package/components/utils/loading-context.d.ts +7 -0
  11. package/esm2015/components/tributos/calculators/gross-amount-calculator.js +18 -3
  12. package/esm2015/components/tributos/calculators/tax-amount-calculator.js +26 -7
  13. package/esm2015/components/tributos/erp-tributos.component.js +82 -16
  14. package/esm2015/components/tributos/rules/calculation/rules/gross-amount-calculation-rule.js +2 -4
  15. package/esm2015/components/tributos/services/tax-rounding.service.js +18 -0
  16. package/esm2015/components/tributos/stores/tax.store.js +19 -0
  17. package/esm2015/components/utils/loading-context.js +20 -0
  18. package/esm2015/senior-gestao-empresarial-erpx-components.js +46 -43
  19. package/esm5/components/tributos/calculators/gross-amount-calculator.js +17 -4
  20. package/esm5/components/tributos/calculators/tax-amount-calculator.js +26 -7
  21. package/esm5/components/tributos/erp-tributos.component.js +83 -16
  22. package/esm5/components/tributos/rules/calculation/rules/gross-amount-calculation-rule.js +2 -4
  23. package/esm5/components/tributos/services/tax-rounding.service.js +23 -0
  24. package/esm5/components/tributos/stores/tax.store.js +26 -0
  25. package/esm5/components/utils/loading-context.js +22 -0
  26. package/esm5/senior-gestao-empresarial-erpx-components.js +46 -43
  27. package/fesm2015/senior-gestao-empresarial-erpx-components.js +264 -131
  28. package/fesm2015/senior-gestao-empresarial-erpx-components.js.map +1 -1
  29. package/fesm5/senior-gestao-empresarial-erpx-components.js +287 -142
  30. package/fesm5/senior-gestao-empresarial-erpx-components.js.map +1 -1
  31. package/package.json +1 -1
  32. package/senior-gestao-empresarial-erpx-components.d.ts +45 -42
  33. package/senior-gestao-empresarial-erpx-components.metadata.json +1 -1
@@ -1,5 +1,10 @@
1
1
  import BigNumber from 'bignumber.js';
2
+ import { TaxRoundingService } from '../services/tax-rounding.service';
3
+ import { TaxStore } from '../stores/tax.store';
2
4
  export declare class GrossAmountCalculator {
5
+ private readonly taxRoundingService;
6
+ private readonly taxStore;
7
+ constructor(taxRoundingService: TaxRoundingService, taxStore: TaxStore);
3
8
  /**
4
9
  * Calculates the gross amount based on the provided taxable base and tax rate.
5
10
  *
@@ -1,8 +1,12 @@
1
1
  import BigNumber from 'bignumber.js';
2
2
  import { EffectiveTaxRateCalculator } from './effective-tax-rate-calculator';
3
+ import { TaxRoundingService } from '../services/tax-rounding.service';
4
+ import { TaxStore } from '../stores/tax.store';
3
5
  export declare class TaxAmountCalculator {
4
6
  private readonly effectiveTaxRateCalculator;
5
- constructor(effectiveTaxRateCalculator: EffectiveTaxRateCalculator);
7
+ private readonly taxRoundingService;
8
+ private readonly taxStore;
9
+ constructor(effectiveTaxRateCalculator: EffectiveTaxRateCalculator, taxRoundingService: TaxRoundingService, taxStore: TaxStore);
6
10
  /**
7
11
  * Calculates the tax amount based on a taxable base and a tax rate.
8
12
  *
@@ -3,15 +3,21 @@ import { FormBuilder, FormGroup } from '@angular/forms';
3
3
  import { TranslateService } from '@ngx-translate/core';
4
4
  import { BeneficioFiscalLookup, ClassificacaoTributariaLookup, CplTriNotaSaidaNaturezaReceitaPisCofinsLookup, E027EqiLookup, E027StrLookup, LookupValidationUtils } from '@senior-gestao-empresarial/angular-components';
5
5
  import { BadgeColors, ButtonAnimation, ButtonPriority, ButtonSize, FormField, LocaleService } from '@seniorsistemas/angular-components';
6
+ import { FeatureToggleService } from '@seniorsistemas/platform-components';
6
7
  import { GTagService } from '@seniorsistemas/platform-utils';
7
8
  import { MenuItem, MessageService } from 'primeng/api';
9
+ import { LoadingContext } from '../utils/loading-context';
10
+ import { TaxAmountCalculator } from './calculators/tax-amount-calculator';
8
11
  import { ErpTributosService } from './erp-tributos.service';
9
12
  import { Item, Sugestao, TaxCalculationMemory } from './erp-tributos.types';
10
13
  import { RulesService } from './rules/rules.service';
14
+ import { TaxRoundingService } from './services/tax-rounding.service';
15
+ import { TaxStore } from './stores/tax.store';
11
16
  import { Context } from './types/context';
12
17
  import { Group } from './types/group';
13
18
  import { Tax } from './types/tax';
14
19
  export declare class ErpTributosComponent implements OnInit, OnChanges, OnDestroy {
20
+ readonly loadingContext: LoadingContext;
15
21
  private readonly messageService;
16
22
  private readonly formBuilder;
17
23
  private readonly changeDetector;
@@ -26,6 +32,10 @@ export declare class ErpTributosComponent implements OnInit, OnChanges, OnDestro
26
32
  private readonly gtag;
27
33
  private readonly rulesService;
28
34
  private readonly localeService;
35
+ private readonly taxRoundingService;
36
+ private readonly taxAmountCalculator;
37
+ private readonly featureToggleService;
38
+ private readonly taxStore;
29
39
  context: Context;
30
40
  sugestoes: Sugestao[];
31
41
  camposBloqueados: boolean;
@@ -46,7 +56,6 @@ export declare class ErpTributosComponent implements OnInit, OnChanges, OnDestro
46
56
  reload: boolean;
47
57
  indexAccordion: number[];
48
58
  prefixLabel: string;
49
- isLoading: boolean;
50
59
  private menuItemPis;
51
60
  private menuItemCofins;
52
61
  private menuItemIpi;
@@ -115,7 +124,7 @@ export declare class ErpTributosComponent implements OnInit, OnChanges, OnDestro
115
124
  private requiredFcpStReditoAnt;
116
125
  private percentageLocaleOptions?;
117
126
  private readonly unsubscribe$;
118
- constructor(messageService: MessageService, formBuilder: FormBuilder, changeDetector: ChangeDetectorRef, translate: TranslateService, e027StrLookup: E027StrLookup, beneficioFiscalLookup: BeneficioFiscalLookup, e027eqiLookup: E027EqiLookup, naturezaReceitaLookup: CplTriNotaSaidaNaturezaReceitaPisCofinsLookup, classificacaoTributariaLookup: ClassificacaoTributariaLookup, lookupUtils: LookupValidationUtils, erpTributosService: ErpTributosService, gtag: GTagService, rulesService: RulesService, localeService: LocaleService);
127
+ constructor(loadingContext: LoadingContext, messageService: MessageService, formBuilder: FormBuilder, changeDetector: ChangeDetectorRef, translate: TranslateService, e027StrLookup: E027StrLookup, beneficioFiscalLookup: BeneficioFiscalLookup, e027eqiLookup: E027EqiLookup, naturezaReceitaLookup: CplTriNotaSaidaNaturezaReceitaPisCofinsLookup, classificacaoTributariaLookup: ClassificacaoTributariaLookup, lookupUtils: LookupValidationUtils, erpTributosService: ErpTributosService, gtag: GTagService, rulesService: RulesService, localeService: LocaleService, taxRoundingService: TaxRoundingService, taxAmountCalculator: TaxAmountCalculator, featureToggleService: FeatureToggleService, taxStore: TaxStore);
119
128
  ngOnInit(): void;
120
129
  ngOnChanges(changes: SimpleChanges): void;
121
130
  ngOnDestroy(): void;
@@ -174,7 +183,6 @@ export declare class ErpTributosComponent implements OnInit, OnChanges, OnDestro
174
183
  private setVariableRequired;
175
184
  private setRequired;
176
185
  private impostoCalculado;
177
- private roundImposto;
178
186
  private addMessageErrorBaseDiferente;
179
187
  private calcularValor;
180
188
  private calcularImpostosTotal;
@@ -199,4 +207,6 @@ export declare class ErpTributosComponent implements OnInit, OnChanges, OnDestro
199
207
  };
200
208
  private isInvoiceDocument;
201
209
  private isFieldRequired;
210
+ private markICMSSimplesAsManual;
211
+ private getArredondamentoAbnt;
202
212
  }
@@ -0,0 +1,5 @@
1
+ import BigNumber from 'bignumber.js';
2
+ export declare class TaxRoundingService {
3
+ halfEven(value: BigNumber.Value, decimalPlaces?: number): BigNumber;
4
+ halfUp(value: number, decimalPlaces?: number): BigNumber;
5
+ }
@@ -0,0 +1,10 @@
1
+ import { ComponentStore } from '@ngrx/component-store';
2
+ export declare class TaxStore extends ComponentStore<Store> {
3
+ constructor();
4
+ readonly getArredondamentoAbnt: () => boolean;
5
+ readonly setArredondamentoAbnt: (arredondamentoAbnt: boolean) => void;
6
+ }
7
+ declare type Store = {
8
+ arredondamentoAbnt: boolean;
9
+ };
10
+ export {};
@@ -0,0 +1,7 @@
1
+ export declare class LoadingContext {
2
+ private contexts;
3
+ push(context?: string): void;
4
+ pop(): void;
5
+ isLoading(): boolean;
6
+ getContext(): string[];
7
+ }
@@ -1,7 +1,15 @@
1
1
  import { __decorate } from "tslib";
2
2
  import { Injectable } from '@angular/core';
3
+ import { TaxRoundingService } from '../services/tax-rounding.service';
4
+ import { TaxStore } from '../stores/tax.store';
3
5
  import * as i0 from "@angular/core";
6
+ import * as i1 from "../services/tax-rounding.service";
7
+ import * as i2 from "../stores/tax.store";
4
8
  let GrossAmountCalculator = class GrossAmountCalculator {
9
+ constructor(taxRoundingService, taxStore) {
10
+ this.taxRoundingService = taxRoundingService;
11
+ this.taxStore = taxStore;
12
+ }
5
13
  /**
6
14
  * Calculates the gross amount based on the provided taxable base and tax rate.
7
15
  *
@@ -11,12 +19,19 @@ let GrossAmountCalculator = class GrossAmountCalculator {
11
19
  * @returns The calculated gross amount as a BigNumber.
12
20
  */
13
21
  calculateGrossAmount({ taxableBase, taxRate }) {
14
- return taxableBase.multipliedBy(taxRate).dividedBy(100);
22
+ const taxAmount = taxableBase.multipliedBy(taxRate).dividedBy(100);
23
+ return this.taxStore.getArredondamentoAbnt()
24
+ ? this.taxRoundingService.halfEven(taxAmount)
25
+ : this.taxRoundingService.halfUp(taxAmount.toNumber());
15
26
  }
16
27
  };
17
- GrossAmountCalculator.ɵprov = i0.ɵɵdefineInjectable({ factory: function GrossAmountCalculator_Factory() { return new GrossAmountCalculator(); }, token: GrossAmountCalculator, providedIn: "root" });
28
+ GrossAmountCalculator.ctorParameters = () => [
29
+ { type: TaxRoundingService },
30
+ { type: TaxStore }
31
+ ];
32
+ GrossAmountCalculator.ɵprov = i0.ɵɵdefineInjectable({ factory: function GrossAmountCalculator_Factory() { return new GrossAmountCalculator(i0.ɵɵinject(i1.TaxRoundingService), i0.ɵɵinject(i2.TaxStore)); }, token: GrossAmountCalculator, providedIn: "root" });
18
33
  GrossAmountCalculator = __decorate([
19
34
  Injectable({ providedIn: 'root' })
20
35
  ], GrossAmountCalculator);
21
36
  export { GrossAmountCalculator };
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3Jvc3MtYW1vdW50LWNhbGN1bGF0b3IuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yLWdlc3Rhby1lbXByZXNhcmlhbC9lcnB4LWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJjb21wb25lbnRzL3RyaWJ1dG9zL2NhbGN1bGF0b3JzL2dyb3NzLWFtb3VudC1jYWxjdWxhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUkzQyxJQUFhLHFCQUFxQixHQUFsQyxNQUFhLHFCQUFxQjtJQUM5Qjs7Ozs7OztPQU9HO0lBQ0gsb0JBQW9CLENBQUMsRUFDakIsV0FBVyxFQUNYLE9BQU8sRUFJVjtRQUNHLE9BQU8sV0FBVyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDNUQsQ0FBQztDQUNKLENBQUE7O0FBbEJZLHFCQUFxQjtJQURqQyxVQUFVLENBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLENBQUM7R0FDdEIscUJBQXFCLENBa0JqQztTQWxCWSxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCBCaWdOdW1iZXIgZnJvbSAnYmlnbnVtYmVyLmpzJztcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBHcm9zc0Ftb3VudENhbGN1bGF0b3Ige1xyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGVzIHRoZSBncm9zcyBhbW91bnQgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHRheGFibGUgYmFzZSBhbmQgdGF4IHJhdGUuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHBhcmFtcyAtIEFuIG9iamVjdCBjb250YWluaW5nOlxyXG4gICAgICogICAtIHRheGFibGVCYXNlOiBUaGUgYmFzZSBhbW91bnQgdG8gYmUgdGF4ZWQgYXMgYSBCaWdOdW1iZXIuXHJcbiAgICAgKiAgIC0gdGF4UmF0ZTogVGhlIHRheCByYXRlIHRvIGFwcGx5IGFzIGEgQmlnTnVtYmVyIChwZXJjZW50YWdlKS5cclxuICAgICAqIEByZXR1cm5zIFRoZSBjYWxjdWxhdGVkIGdyb3NzIGFtb3VudCBhcyBhIEJpZ051bWJlci5cclxuICAgICAqL1xyXG4gICAgY2FsY3VsYXRlR3Jvc3NBbW91bnQoe1xyXG4gICAgICAgIHRheGFibGVCYXNlLFxyXG4gICAgICAgIHRheFJhdGVcclxuICAgIH06IHtcclxuICAgICAgICB0YXhhYmxlQmFzZTogQmlnTnVtYmVyO1xyXG4gICAgICAgIHRheFJhdGU6IEJpZ051bWJlcjtcclxuICAgIH0pOiBCaWdOdW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0YXhhYmxlQmFzZS5tdWx0aXBsaWVkQnkodGF4UmF0ZSkuZGl2aWRlZEJ5KDEwMCk7XHJcbiAgICB9XHJcbn1cclxuIl19
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3Jvc3MtYW1vdW50LWNhbGN1bGF0b3IuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yLWdlc3Rhby1lbXByZXNhcmlhbC9lcnB4LWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJjb21wb25lbnRzL3RyaWJ1dG9zL2NhbGN1bGF0b3JzL2dyb3NzLWFtb3VudC1jYWxjdWxhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7OztBQUcvQyxJQUFhLHFCQUFxQixHQUFsQyxNQUFhLHFCQUFxQjtJQUM5QixZQUNxQixrQkFBc0MsRUFDdEMsUUFBa0I7UUFEbEIsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUN0QyxhQUFRLEdBQVIsUUFBUSxDQUFVO0lBQ3BDLENBQUM7SUFFSjs7Ozs7OztPQU9HO0lBQ0gsb0JBQW9CLENBQUMsRUFDakIsV0FBVyxFQUNYLE9BQU8sRUFJVjtRQUNHLE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRW5FLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsRUFBRTtZQUN4QyxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7WUFDN0MsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDL0QsQ0FBQztDQUNKLENBQUE7O1lBekI0QyxrQkFBa0I7WUFDNUIsUUFBUTs7O0FBSDlCLHFCQUFxQjtJQURqQyxVQUFVLENBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLENBQUM7R0FDdEIscUJBQXFCLENBMkJqQztTQTNCWSxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCBCaWdOdW1iZXIgZnJvbSAnYmlnbnVtYmVyLmpzJztcclxuaW1wb3J0IHsgVGF4Um91bmRpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvdGF4LXJvdW5kaW5nLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUYXhTdG9yZSB9IGZyb20gJy4uL3N0b3Jlcy90YXguc3RvcmUnO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIEdyb3NzQW1vdW50Q2FsY3VsYXRvciB7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHRheFJvdW5kaW5nU2VydmljZTogVGF4Um91bmRpbmdTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgdGF4U3RvcmU6IFRheFN0b3JlXHJcbiAgICApIHt9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxjdWxhdGVzIHRoZSBncm9zcyBhbW91bnQgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHRheGFibGUgYmFzZSBhbmQgdGF4IHJhdGUuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHBhcmFtcyAtIEFuIG9iamVjdCBjb250YWluaW5nOlxyXG4gICAgICogICAtIHRheGFibGVCYXNlOiBUaGUgYmFzZSBhbW91bnQgdG8gYmUgdGF4ZWQgYXMgYSBCaWdOdW1iZXIuXHJcbiAgICAgKiAgIC0gdGF4UmF0ZTogVGhlIHRheCByYXRlIHRvIGFwcGx5IGFzIGEgQmlnTnVtYmVyIChwZXJjZW50YWdlKS5cclxuICAgICAqIEByZXR1cm5zIFRoZSBjYWxjdWxhdGVkIGdyb3NzIGFtb3VudCBhcyBhIEJpZ051bWJlci5cclxuICAgICAqL1xyXG4gICAgY2FsY3VsYXRlR3Jvc3NBbW91bnQoe1xyXG4gICAgICAgIHRheGFibGVCYXNlLFxyXG4gICAgICAgIHRheFJhdGVcclxuICAgIH06IHtcclxuICAgICAgICB0YXhhYmxlQmFzZTogQmlnTnVtYmVyO1xyXG4gICAgICAgIHRheFJhdGU6IEJpZ051bWJlcjtcclxuICAgIH0pOiBCaWdOdW1iZXIge1xyXG4gICAgICAgIGNvbnN0IHRheEFtb3VudCA9IHRheGFibGVCYXNlLm11bHRpcGxpZWRCeSh0YXhSYXRlKS5kaXZpZGVkQnkoMTAwKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMudGF4U3RvcmUuZ2V0QXJyZWRvbmRhbWVudG9BYm50KClcclxuICAgICAgICAgICAgPyB0aGlzLnRheFJvdW5kaW5nU2VydmljZS5oYWxmRXZlbih0YXhBbW91bnQpXHJcbiAgICAgICAgICAgIDogdGhpcy50YXhSb3VuZGluZ1NlcnZpY2UuaGFsZlVwKHRheEFtb3VudC50b051bWJlcigpKTtcclxuICAgIH1cclxufVxyXG4iXX0=
@@ -2,11 +2,17 @@ import { __decorate } from "tslib";
2
2
  import { Injectable } from '@angular/core';
3
3
  import BigNumber from 'bignumber.js';
4
4
  import { EffectiveTaxRateCalculator } from './effective-tax-rate-calculator';
5
+ import { TaxRoundingService } from '../services/tax-rounding.service';
6
+ import { TaxStore } from '../stores/tax.store';
5
7
  import * as i0 from "@angular/core";
6
8
  import * as i1 from "./effective-tax-rate-calculator";
9
+ import * as i2 from "../services/tax-rounding.service";
10
+ import * as i3 from "../stores/tax.store";
7
11
  let TaxAmountCalculator = class TaxAmountCalculator {
8
- constructor(effectiveTaxRateCalculator) {
12
+ constructor(effectiveTaxRateCalculator, taxRoundingService, taxStore) {
9
13
  this.effectiveTaxRateCalculator = effectiveTaxRateCalculator;
14
+ this.taxRoundingService = taxRoundingService;
15
+ this.taxStore = taxStore;
10
16
  }
11
17
  /**
12
18
  * Calculates the tax amount based on a taxable base and a tax rate.
@@ -17,7 +23,12 @@ let TaxAmountCalculator = class TaxAmountCalculator {
17
23
  * @returns The calculated tax amount as a BigNumber.
18
24
  */
19
25
  calculateTaxAmount({ taxableBase, taxRate }) {
20
- return new BigNumber(taxableBase).multipliedBy(taxRate).dividedBy(100);
26
+ const taxAmount = new BigNumber(taxableBase)
27
+ .multipliedBy(taxRate)
28
+ .dividedBy(100);
29
+ return this.taxStore.getArredondamentoAbnt()
30
+ ? this.taxRoundingService.halfEven(taxAmount)
31
+ : this.taxRoundingService.halfUp(taxAmount.toNumber());
21
32
  }
22
33
  /**
23
34
  * Calculates the tax amount considering a deferred tax value.
@@ -29,10 +40,13 @@ let TaxAmountCalculator = class TaxAmountCalculator {
29
40
  * @returns The calculated tax amount after subtracting the deferred tax.
30
41
  */
31
42
  calculateTaxAmountWithDeferredTax({ taxableBase, taxRate, deferredTaxAmount }) {
32
- return new BigNumber(taxableBase)
43
+ const taxAmount = new BigNumber(taxableBase)
33
44
  .multipliedBy(taxRate)
34
45
  .dividedBy(100)
35
46
  .minus(deferredTaxAmount);
47
+ return this.taxStore.getArredondamentoAbnt()
48
+ ? this.taxRoundingService.halfEven(taxAmount)
49
+ : this.taxRoundingService.halfUp(taxAmount.toNumber());
36
50
  }
37
51
  /**
38
52
  * Calculates the tax amount based on the provided tax base, tax rate, and tax rate reduction,
@@ -52,17 +66,22 @@ let TaxAmountCalculator = class TaxAmountCalculator {
52
66
  taxRate,
53
67
  taxRateReduction
54
68
  });
55
- return new BigNumber(taxBase)
69
+ const taxAmount = new BigNumber(taxBase)
56
70
  .multipliedBy(effectiveTaxRate)
57
71
  .dividedBy(100);
72
+ return this.taxStore.getArredondamentoAbnt()
73
+ ? this.taxRoundingService.halfEven(taxAmount)
74
+ : this.taxRoundingService.halfUp(taxAmount.toNumber());
58
75
  }
59
76
  };
60
77
  TaxAmountCalculator.ctorParameters = () => [
61
- { type: EffectiveTaxRateCalculator }
78
+ { type: EffectiveTaxRateCalculator },
79
+ { type: TaxRoundingService },
80
+ { type: TaxStore }
62
81
  ];
63
- TaxAmountCalculator.ɵprov = i0.ɵɵdefineInjectable({ factory: function TaxAmountCalculator_Factory() { return new TaxAmountCalculator(i0.ɵɵinject(i1.EffectiveTaxRateCalculator)); }, token: TaxAmountCalculator, providedIn: "root" });
82
+ TaxAmountCalculator.ɵprov = i0.ɵɵdefineInjectable({ factory: function TaxAmountCalculator_Factory() { return new TaxAmountCalculator(i0.ɵɵinject(i1.EffectiveTaxRateCalculator), i0.ɵɵinject(i2.TaxRoundingService), i0.ɵɵinject(i3.TaxStore)); }, token: TaxAmountCalculator, providedIn: "root" });
64
83
  TaxAmountCalculator = __decorate([
65
84
  Injectable({ providedIn: 'root' })
66
85
  ], TaxAmountCalculator);
67
86
  export { TaxAmountCalculator };
68
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGF4LWFtb3VudC1jYWxjdWxhdG9yLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHNlbmlvci1nZXN0YW8tZW1wcmVzYXJpYWwvZXJweC1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiY29tcG9uZW50cy90cmlidXRvcy9jYWxjdWxhdG9ycy90YXgtYW1vdW50LWNhbGN1bGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxTQUFTLE1BQU0sY0FBYyxDQUFDO0FBQ3JDLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7QUFHN0UsSUFBYSxtQkFBbUIsR0FBaEMsTUFBYSxtQkFBbUI7SUFDNUIsWUFDcUIsMEJBQXNEO1FBQXRELCtCQUEwQixHQUExQiwwQkFBMEIsQ0FBNEI7SUFDeEUsQ0FBQztJQUVKOzs7Ozs7O09BT0c7SUFDSCxrQkFBa0IsQ0FBQyxFQUNmLFdBQVcsRUFDWCxPQUFPLEVBSVY7UUFDRyxPQUFPLElBQUksU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsaUNBQWlDLENBQUMsRUFDOUIsV0FBVyxFQUNYLE9BQU8sRUFDUCxpQkFBaUIsRUFLcEI7UUFDRyxPQUFPLElBQUksU0FBUyxDQUFDLFdBQVcsQ0FBQzthQUM1QixZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFNBQVMsQ0FBQyxHQUFHLENBQUM7YUFDZCxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7OztPQVlHO0lBQ0gsa0VBQWtFLENBQUMsRUFDL0QsT0FBTyxFQUNQLE9BQU8sRUFDUCxnQkFBZ0IsRUFLbkI7UUFDRyxNQUFNLGdCQUFnQixHQUNsQixJQUFJLENBQUMsMEJBQTBCLENBQUMsNkRBQTZELENBQ3pGO1lBQ0ksT0FBTztZQUNQLGdCQUFnQjtTQUNuQixDQUNKLENBQUM7UUFFTixPQUFPLElBQUksU0FBUyxDQUFDLE9BQU8sQ0FBQzthQUN4QixZQUFZLENBQUMsZ0JBQWdCLENBQUM7YUFDOUIsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3hCLENBQUM7Q0FDSixDQUFBOztZQS9Fb0QsMEJBQTBCOzs7QUFGbEUsbUJBQW1CO0lBRC9CLFVBQVUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsQ0FBQztHQUN0QixtQkFBbUIsQ0FpRi9CO1NBakZZLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xyXG5pbXBvcnQgeyBFZmZlY3RpdmVUYXhSYXRlQ2FsY3VsYXRvciB9IGZyb20gJy4vZWZmZWN0aXZlLXRheC1yYXRlLWNhbGN1bGF0b3InO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIFRheEFtb3VudENhbGN1bGF0b3Ige1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBlZmZlY3RpdmVUYXhSYXRlQ2FsY3VsYXRvcjogRWZmZWN0aXZlVGF4UmF0ZUNhbGN1bGF0b3JcclxuICAgICkge31cclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZXMgdGhlIHRheCBhbW91bnQgYmFzZWQgb24gYSB0YXhhYmxlIGJhc2UgYW5kIGEgdGF4IHJhdGUuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHBhcmFtcyAtIEFuIG9iamVjdCBjb250YWluaW5nOlxyXG4gICAgICogICBAcGFyYW0gcGFyYW1zLnRheGFibGVCYXNlIC0gVGhlIGJhc2UgYW1vdW50IG9uIHdoaWNoIHRoZSB0YXggaXMgY2FsY3VsYXRlZCAoYXMgYSBCaWdOdW1iZXIpLlxyXG4gICAgICogICBAcGFyYW0gcGFyYW1zLnRheFJhdGUgLSBUaGUgdGF4IHJhdGUgdG8gYXBwbHkgKGFzIGEgQmlnTnVtYmVyLCByZXByZXNlbnRpbmcgYSBwZXJjZW50YWdlKS5cclxuICAgICAqIEByZXR1cm5zIFRoZSBjYWxjdWxhdGVkIHRheCBhbW91bnQgYXMgYSBCaWdOdW1iZXIuXHJcbiAgICAgKi9cclxuICAgIGNhbGN1bGF0ZVRheEFtb3VudCh7XHJcbiAgICAgICAgdGF4YWJsZUJhc2UsXHJcbiAgICAgICAgdGF4UmF0ZVxyXG4gICAgfToge1xyXG4gICAgICAgIHRheGFibGVCYXNlOiBCaWdOdW1iZXI7XHJcbiAgICAgICAgdGF4UmF0ZTogQmlnTnVtYmVyO1xyXG4gICAgfSk6IEJpZ051bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIodGF4YWJsZUJhc2UpLm11bHRpcGxpZWRCeSh0YXhSYXRlKS5kaXZpZGVkQnkoMTAwKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZXMgdGhlIHRheCBhbW91bnQgY29uc2lkZXJpbmcgYSBkZWZlcnJlZCB0YXggdmFsdWUuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgY2FsY3VsYXRpb24uXHJcbiAgICAgKiBAcGFyYW0gcGFyYW1zLnRheGFibGVCYXNlIC0gVGhlIGJhc2UgYW1vdW50IG9uIHdoaWNoIHRheCBpcyBjYWxjdWxhdGVkLlxyXG4gICAgICogQHBhcmFtIHBhcmFtcy50YXhSYXRlIC0gVGhlIHRheCByYXRlIGFzIGEgcGVyY2VudGFnZS5cclxuICAgICAqIEBwYXJhbSBwYXJhbXMuZGVmZXJyZWRUYXhBbW91bnQgLSBUaGUgYW1vdW50IG9mIHRheCB0aGF0IGlzIGRlZmVycmVkIGFuZCBzaG91bGQgYmUgc3VidHJhY3RlZCBmcm9tIHRoZSByZXN1bHQuXHJcbiAgICAgKiBAcmV0dXJucyBUaGUgY2FsY3VsYXRlZCB0YXggYW1vdW50IGFmdGVyIHN1YnRyYWN0aW5nIHRoZSBkZWZlcnJlZCB0YXguXHJcbiAgICAgKi9cclxuICAgIGNhbGN1bGF0ZVRheEFtb3VudFdpdGhEZWZlcnJlZFRheCh7XHJcbiAgICAgICAgdGF4YWJsZUJhc2UsXHJcbiAgICAgICAgdGF4UmF0ZSxcclxuICAgICAgICBkZWZlcnJlZFRheEFtb3VudFxyXG4gICAgfToge1xyXG4gICAgICAgIHRheGFibGVCYXNlOiBCaWdOdW1iZXI7XHJcbiAgICAgICAgdGF4UmF0ZTogQmlnTnVtYmVyO1xyXG4gICAgICAgIGRlZmVycmVkVGF4QW1vdW50OiBCaWdOdW1iZXI7XHJcbiAgICB9KTogQmlnTnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gbmV3IEJpZ051bWJlcih0YXhhYmxlQmFzZSlcclxuICAgICAgICAgICAgLm11bHRpcGxpZWRCeSh0YXhSYXRlKVxyXG4gICAgICAgICAgICAuZGl2aWRlZEJ5KDEwMClcclxuICAgICAgICAgICAgLm1pbnVzKGRlZmVycmVkVGF4QW1vdW50KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZXMgdGhlIHRheCBhbW91bnQgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHRheCBiYXNlLCB0YXggcmF0ZSwgYW5kIHRheCByYXRlIHJlZHVjdGlvbixcclxuICAgICAqIGV4Y2x1ZGluZyBkZWZlcnJlZCB0YXggYW5kIGdvdmVybmFtZW50YWwgdGF4IHJhdGUgcmVkdWN0aW9ucy5cclxuICAgICAqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCB1c2VzIHRoZSBlZmZlY3RpdmUgdGF4IHJhdGUgY2FsY3VsYXRlZCB3aXRob3V0IGNvbnNpZGVyaW5nIGdvdmVybmFtZW50YWwgdGF4IHJhdGUgcmVkdWN0aW9ucyxcclxuICAgICAqIGFuZCBhcHBsaWVzIGl0IHRvIHRoZSB0YXggYmFzZSB0byBkZXRlcm1pbmUgdGhlIGZpbmFsIHRheCBhbW91bnQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0YXggY2FsY3VsYXRpb24uXHJcbiAgICAgKiBAcGFyYW0gcGFyYW1zLnRheEJhc2UgLSBUaGUgYmFzZSBhbW91bnQgb24gd2hpY2ggdGhlIHRheCBpcyBjYWxjdWxhdGVkLlxyXG4gICAgICogQHBhcmFtIHBhcmFtcy50YXhSYXRlIC0gVGhlIGluaXRpYWwgdGF4IHJhdGUgYmVmb3JlIGFueSByZWR1Y3Rpb25zLlxyXG4gICAgICogQHBhcmFtIHBhcmFtcy50YXhSYXRlUmVkdWN0aW9uIC0gVGhlIHJlZHVjdGlvbiBhcHBsaWVkIHRvIHRoZSB0YXggcmF0ZS5cclxuICAgICAqIEByZXR1cm5zIFRoZSBjYWxjdWxhdGVkIHRheCBhbW91bnQgYXMgYSBCaWdOdW1iZXIuXHJcbiAgICAgKi9cclxuICAgIGNhbGN1bGF0ZVRheEFtb3VudFdpdGhvdXREZWZlcnJlZFRheEFuZFdpdGhvdXRHb3Zlcm5hbWVudGFsVGF4UmF0ZSh7XHJcbiAgICAgICAgdGF4QmFzZSxcclxuICAgICAgICB0YXhSYXRlLFxyXG4gICAgICAgIHRheFJhdGVSZWR1Y3Rpb25cclxuICAgIH06IHtcclxuICAgICAgICB0YXhCYXNlOiBCaWdOdW1iZXI7XHJcbiAgICAgICAgdGF4UmF0ZTogQmlnTnVtYmVyO1xyXG4gICAgICAgIHRheFJhdGVSZWR1Y3Rpb246IEJpZ051bWJlcjtcclxuICAgIH0pOiBCaWdOdW1iZXIge1xyXG4gICAgICAgIGNvbnN0IGVmZmVjdGl2ZVRheFJhdGUgPVxyXG4gICAgICAgICAgICB0aGlzLmVmZmVjdGl2ZVRheFJhdGVDYWxjdWxhdG9yLmNhbGN1bGF0ZUVmZmVjdGl2ZVRheFJhdGVXaXRob3V0R292ZXJuYW1lbnRhbFRheFJhdGVSZWR1Y3Rpb24oXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGF4UmF0ZSxcclxuICAgICAgICAgICAgICAgICAgICB0YXhSYXRlUmVkdWN0aW9uXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKHRheEJhc2UpXHJcbiAgICAgICAgICAgIC5tdWx0aXBsaWVkQnkoZWZmZWN0aXZlVGF4UmF0ZSlcclxuICAgICAgICAgICAgLmRpdmlkZWRCeSgxMDApO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
87
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGF4LWFtb3VudC1jYWxjdWxhdG9yLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHNlbmlvci1nZXN0YW8tZW1wcmVzYXJpYWwvZXJweC1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiY29tcG9uZW50cy90cmlidXRvcy9jYWxjdWxhdG9ycy90YXgtYW1vdW50LWNhbGN1bGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxTQUFTLE1BQU0sY0FBYyxDQUFDO0FBQ3JDLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7QUFHL0MsSUFBYSxtQkFBbUIsR0FBaEMsTUFBYSxtQkFBbUI7SUFDNUIsWUFDcUIsMEJBQXNELEVBQ3RELGtCQUFzQyxFQUN0QyxRQUFrQjtRQUZsQiwrQkFBMEIsR0FBMUIsMEJBQTBCLENBQTRCO1FBQ3RELHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsYUFBUSxHQUFSLFFBQVEsQ0FBVTtJQUNwQyxDQUFDO0lBRUo7Ozs7Ozs7T0FPRztJQUNILGtCQUFrQixDQUFDLEVBQ2YsV0FBVyxFQUNYLE9BQU8sRUFJVjtRQUNHLE1BQU0sU0FBUyxHQUFHLElBQUksU0FBUyxDQUFDLFdBQVcsQ0FBQzthQUN2QyxZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ3JCLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVwQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMscUJBQXFCLEVBQUU7WUFDeEMsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDO1lBQzdDLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNILGlDQUFpQyxDQUFDLEVBQzlCLFdBQVcsRUFDWCxPQUFPLEVBQ1AsaUJBQWlCLEVBS3BCO1FBQ0csTUFBTSxTQUFTLEdBQUcsSUFBSSxTQUFTLENBQUMsV0FBVyxDQUFDO2FBQ3ZDLFlBQVksQ0FBQyxPQUFPLENBQUM7YUFDckIsU0FBUyxDQUFDLEdBQUcsQ0FBQzthQUNkLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBRTlCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsRUFBRTtZQUN4QyxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7WUFDN0MsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7T0FZRztJQUNILGtFQUFrRSxDQUFDLEVBQy9ELE9BQU8sRUFDUCxPQUFPLEVBQ1AsZ0JBQWdCLEVBS25CO1FBQ0csTUFBTSxnQkFBZ0IsR0FDbEIsSUFBSSxDQUFDLDBCQUEwQixDQUFDLDZEQUE2RCxDQUN6RjtZQUNJLE9BQU87WUFDUCxnQkFBZ0I7U0FDbkIsQ0FDSixDQUFDO1FBRU4sTUFBTSxTQUFTLEdBQUcsSUFBSSxTQUFTLENBQUMsT0FBTyxDQUFDO2FBQ25DLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQzthQUM5QixTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFcEIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLHFCQUFxQixFQUFFO1lBQ3hDLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztZQUM3QyxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUMvRCxDQUFDO0NBQ0osQ0FBQTs7WUEvRm9ELDBCQUEwQjtZQUNsQyxrQkFBa0I7WUFDNUIsUUFBUTs7O0FBSjlCLG1CQUFtQjtJQUQvQixVQUFVLENBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLENBQUM7R0FDdEIsbUJBQW1CLENBaUcvQjtTQWpHWSxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCBCaWdOdW1iZXIgZnJvbSAnYmlnbnVtYmVyLmpzJztcclxuaW1wb3J0IHsgRWZmZWN0aXZlVGF4UmF0ZUNhbGN1bGF0b3IgfSBmcm9tICcuL2VmZmVjdGl2ZS10YXgtcmF0ZS1jYWxjdWxhdG9yJztcclxuaW1wb3J0IHsgVGF4Um91bmRpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvdGF4LXJvdW5kaW5nLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUYXhTdG9yZSB9IGZyb20gJy4uL3N0b3Jlcy90YXguc3RvcmUnO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIFRheEFtb3VudENhbGN1bGF0b3Ige1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBlZmZlY3RpdmVUYXhSYXRlQ2FsY3VsYXRvcjogRWZmZWN0aXZlVGF4UmF0ZUNhbGN1bGF0b3IsXHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSB0YXhSb3VuZGluZ1NlcnZpY2U6IFRheFJvdW5kaW5nU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHRheFN0b3JlOiBUYXhTdG9yZVxyXG4gICAgKSB7fVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlcyB0aGUgdGF4IGFtb3VudCBiYXNlZCBvbiBhIHRheGFibGUgYmFzZSBhbmQgYSB0YXggcmF0ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gcGFyYW1zIC0gQW4gb2JqZWN0IGNvbnRhaW5pbmc6XHJcbiAgICAgKiAgIEBwYXJhbSBwYXJhbXMudGF4YWJsZUJhc2UgLSBUaGUgYmFzZSBhbW91bnQgb24gd2hpY2ggdGhlIHRheCBpcyBjYWxjdWxhdGVkIChhcyBhIEJpZ051bWJlcikuXHJcbiAgICAgKiAgIEBwYXJhbSBwYXJhbXMudGF4UmF0ZSAtIFRoZSB0YXggcmF0ZSB0byBhcHBseSAoYXMgYSBCaWdOdW1iZXIsIHJlcHJlc2VudGluZyBhIHBlcmNlbnRhZ2UpLlxyXG4gICAgICogQHJldHVybnMgVGhlIGNhbGN1bGF0ZWQgdGF4IGFtb3VudCBhcyBhIEJpZ051bWJlci5cclxuICAgICAqL1xyXG4gICAgY2FsY3VsYXRlVGF4QW1vdW50KHtcclxuICAgICAgICB0YXhhYmxlQmFzZSxcclxuICAgICAgICB0YXhSYXRlXHJcbiAgICB9OiB7XHJcbiAgICAgICAgdGF4YWJsZUJhc2U6IEJpZ051bWJlcjtcclxuICAgICAgICB0YXhSYXRlOiBCaWdOdW1iZXI7XHJcbiAgICB9KTogQmlnTnVtYmVyIHtcclxuICAgICAgICBjb25zdCB0YXhBbW91bnQgPSBuZXcgQmlnTnVtYmVyKHRheGFibGVCYXNlKVxyXG4gICAgICAgICAgICAubXVsdGlwbGllZEJ5KHRheFJhdGUpXHJcbiAgICAgICAgICAgIC5kaXZpZGVkQnkoMTAwKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMudGF4U3RvcmUuZ2V0QXJyZWRvbmRhbWVudG9BYm50KClcclxuICAgICAgICAgICAgPyB0aGlzLnRheFJvdW5kaW5nU2VydmljZS5oYWxmRXZlbih0YXhBbW91bnQpXHJcbiAgICAgICAgICAgIDogdGhpcy50YXhSb3VuZGluZ1NlcnZpY2UuaGFsZlVwKHRheEFtb3VudC50b051bWJlcigpKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZXMgdGhlIHRheCBhbW91bnQgY29uc2lkZXJpbmcgYSBkZWZlcnJlZCB0YXggdmFsdWUuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgY2FsY3VsYXRpb24uXHJcbiAgICAgKiBAcGFyYW0gcGFyYW1zLnRheGFibGVCYXNlIC0gVGhlIGJhc2UgYW1vdW50IG9uIHdoaWNoIHRheCBpcyBjYWxjdWxhdGVkLlxyXG4gICAgICogQHBhcmFtIHBhcmFtcy50YXhSYXRlIC0gVGhlIHRheCByYXRlIGFzIGEgcGVyY2VudGFnZS5cclxuICAgICAqIEBwYXJhbSBwYXJhbXMuZGVmZXJyZWRUYXhBbW91bnQgLSBUaGUgYW1vdW50IG9mIHRheCB0aGF0IGlzIGRlZmVycmVkIGFuZCBzaG91bGQgYmUgc3VidHJhY3RlZCBmcm9tIHRoZSByZXN1bHQuXHJcbiAgICAgKiBAcmV0dXJucyBUaGUgY2FsY3VsYXRlZCB0YXggYW1vdW50IGFmdGVyIHN1YnRyYWN0aW5nIHRoZSBkZWZlcnJlZCB0YXguXHJcbiAgICAgKi9cclxuICAgIGNhbGN1bGF0ZVRheEFtb3VudFdpdGhEZWZlcnJlZFRheCh7XHJcbiAgICAgICAgdGF4YWJsZUJhc2UsXHJcbiAgICAgICAgdGF4UmF0ZSxcclxuICAgICAgICBkZWZlcnJlZFRheEFtb3VudFxyXG4gICAgfToge1xyXG4gICAgICAgIHRheGFibGVCYXNlOiBCaWdOdW1iZXI7XHJcbiAgICAgICAgdGF4UmF0ZTogQmlnTnVtYmVyO1xyXG4gICAgICAgIGRlZmVycmVkVGF4QW1vdW50OiBCaWdOdW1iZXI7XHJcbiAgICB9KTogQmlnTnVtYmVyIHtcclxuICAgICAgICBjb25zdCB0YXhBbW91bnQgPSBuZXcgQmlnTnVtYmVyKHRheGFibGVCYXNlKVxyXG4gICAgICAgICAgICAubXVsdGlwbGllZEJ5KHRheFJhdGUpXHJcbiAgICAgICAgICAgIC5kaXZpZGVkQnkoMTAwKVxyXG4gICAgICAgICAgICAubWludXMoZGVmZXJyZWRUYXhBbW91bnQpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy50YXhTdG9yZS5nZXRBcnJlZG9uZGFtZW50b0FibnQoKVxyXG4gICAgICAgICAgICA/IHRoaXMudGF4Um91bmRpbmdTZXJ2aWNlLmhhbGZFdmVuKHRheEFtb3VudClcclxuICAgICAgICAgICAgOiB0aGlzLnRheFJvdW5kaW5nU2VydmljZS5oYWxmVXAodGF4QW1vdW50LnRvTnVtYmVyKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsY3VsYXRlcyB0aGUgdGF4IGFtb3VudCBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgdGF4IGJhc2UsIHRheCByYXRlLCBhbmQgdGF4IHJhdGUgcmVkdWN0aW9uLFxyXG4gICAgICogZXhjbHVkaW5nIGRlZmVycmVkIHRheCBhbmQgZ292ZXJuYW1lbnRhbCB0YXggcmF0ZSByZWR1Y3Rpb25zLlxyXG4gICAgICpcclxuICAgICAqIFRoaXMgbWV0aG9kIHVzZXMgdGhlIGVmZmVjdGl2ZSB0YXggcmF0ZSBjYWxjdWxhdGVkIHdpdGhvdXQgY29uc2lkZXJpbmcgZ292ZXJuYW1lbnRhbCB0YXggcmF0ZSByZWR1Y3Rpb25zLFxyXG4gICAgICogYW5kIGFwcGxpZXMgaXQgdG8gdGhlIHRheCBiYXNlIHRvIGRldGVybWluZSB0aGUgZmluYWwgdGF4IGFtb3VudC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRheCBjYWxjdWxhdGlvbi5cclxuICAgICAqIEBwYXJhbSBwYXJhbXMudGF4QmFzZSAtIFRoZSBiYXNlIGFtb3VudCBvbiB3aGljaCB0aGUgdGF4IGlzIGNhbGN1bGF0ZWQuXHJcbiAgICAgKiBAcGFyYW0gcGFyYW1zLnRheFJhdGUgLSBUaGUgaW5pdGlhbCB0YXggcmF0ZSBiZWZvcmUgYW55IHJlZHVjdGlvbnMuXHJcbiAgICAgKiBAcGFyYW0gcGFyYW1zLnRheFJhdGVSZWR1Y3Rpb24gLSBUaGUgcmVkdWN0aW9uIGFwcGxpZWQgdG8gdGhlIHRheCByYXRlLlxyXG4gICAgICogQHJldHVybnMgVGhlIGNhbGN1bGF0ZWQgdGF4IGFtb3VudCBhcyBhIEJpZ051bWJlci5cclxuICAgICAqL1xyXG4gICAgY2FsY3VsYXRlVGF4QW1vdW50V2l0aG91dERlZmVycmVkVGF4QW5kV2l0aG91dEdvdmVybmFtZW50YWxUYXhSYXRlKHtcclxuICAgICAgICB0YXhCYXNlLFxyXG4gICAgICAgIHRheFJhdGUsXHJcbiAgICAgICAgdGF4UmF0ZVJlZHVjdGlvblxyXG4gICAgfToge1xyXG4gICAgICAgIHRheEJhc2U6IEJpZ051bWJlcjtcclxuICAgICAgICB0YXhSYXRlOiBCaWdOdW1iZXI7XHJcbiAgICAgICAgdGF4UmF0ZVJlZHVjdGlvbjogQmlnTnVtYmVyO1xyXG4gICAgfSk6IEJpZ051bWJlciB7XHJcbiAgICAgICAgY29uc3QgZWZmZWN0aXZlVGF4UmF0ZSA9XHJcbiAgICAgICAgICAgIHRoaXMuZWZmZWN0aXZlVGF4UmF0ZUNhbGN1bGF0b3IuY2FsY3VsYXRlRWZmZWN0aXZlVGF4UmF0ZVdpdGhvdXRHb3Zlcm5hbWVudGFsVGF4UmF0ZVJlZHVjdGlvbihcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB0YXhSYXRlLFxyXG4gICAgICAgICAgICAgICAgICAgIHRheFJhdGVSZWR1Y3Rpb25cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgY29uc3QgdGF4QW1vdW50ID0gbmV3IEJpZ051bWJlcih0YXhCYXNlKVxyXG4gICAgICAgICAgICAubXVsdGlwbGllZEJ5KGVmZmVjdGl2ZVRheFJhdGUpXHJcbiAgICAgICAgICAgIC5kaXZpZGVkQnkoMTAwKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMudGF4U3RvcmUuZ2V0QXJyZWRvbmRhbWVudG9BYm50KClcclxuICAgICAgICAgICAgPyB0aGlzLnRheFJvdW5kaW5nU2VydmljZS5oYWxmRXZlbih0YXhBbW91bnQpXHJcbiAgICAgICAgICAgIDogdGhpcy50YXhSb3VuZGluZ1NlcnZpY2UuaGFsZlVwKHRheEFtb3VudC50b051bWJlcigpKTtcclxuICAgIH1cclxufVxyXG4iXX0=