Summary Table

Categories Total Count
PII 0
URL 0
DNS 0
EKL 0
IP 0
PORT 0
VsID 0
CF 0
AI 0
VPD 0
PL 0
Other 0

File Content

import { AbstractControl, FormArray, FormBuilder, FormGroup, Validators } from '@angular/forms';
import { ChangeDetectorRef, Component, ElementRef, OnDestroy, OnInit, ViewChild } from '@angular/core';
import { CodeAndLevelModel, LineModel, PDIInfoModel, RfaiInfoModel, RfaiSubmissionRequestModel } from './rfai-submission.model';
import { CodeModel, PayerModel } from '../rfai-admin/rfai-admin.model';

import { AppSettingsService } from './../../shared/app-settings/app-settings.service';
import { AuthenticationService } from '../../auth/auth.service';
import { MenuModel } from '../../shared/menu/menu.component.model';
import { RequestCodesComponent } from './request-codes/request-codes.component';
import { RfaiSubmissionService } from './rfai-submission.service';
import { Subscription } from 'rxjs/Subscription';
import { noPastDatesValidator } from '../../shared/validators';

@Component({
selector: 'app-rfai-submission',
templateUrl: './rfai-submission.component.html',
styleUrls: ['./rfai-submission.component.scss']
})
export class RfaiSubmissionComponent implements OnInit, OnDestroy {
menu: MenuModel;
formSubscription: Subscription = new Subscription();
subscription: Subscription = new Subscription();
autoFillform: FormGroup;
manualForm: FormGroup;
prepopulateForm: FormGroup;
linesFormArray: FormArray;
lines: LineModel[] = [];
codeAndLevelList: CodeAndLevelModel[] = [];
modalClosed = true;
errorMsg = '';
errorStatus = false;
successStatus = false;
successMsg = '';
prepopulatedInfo: PDIInfoModel = new PDIInfoModel();
additionalInfoPermissions: any;
disablePopulateInfo = false;
disableSubmitInfo = false;
roles: string[];
// Initial Values for the dropdown
healthCareClaimStatusCodes: CodeModel[] = [];
loincCodesClaimLevel: CodeModel[] = [];
loincCodesLineLevel: CodeModel[] = [];
loincCodeModifiers: CodeModel[] = [];
autoFormModel: RfaiSubmissionRequestModel = new RfaiSubmissionRequestModel();
manualFormModel: RfaiSubmissionRequestModel = new RfaiSubmissionRequestModel();
pdiInfoModel: PDIInfoModel = new PDIInfoModel();
line: LineModel = new LineModel();
manualLineIdArray: number[] = [];
prepopulatedLineIdArray: number[] = [];
resetChild = false;
warningModalClosed = true;
errorModalClosed = true;
populateClicked = false;
validServiceLineColumn = true;
payers: PayerModel[] = [];
userName = '';
title = '277 Request for Additional Information';
tabIdx = '0';
dateRangeError = false;
// Getting reference of the child component
@ViewChild('manualCodes')
manualCodes: RequestCodesComponent;
@ViewChild('autoCodes')
autoCodes: RequestCodesComponent;
@ViewChild('populatedInfo')
populatedInfo: ElementRef = new ElementRef('');
@ViewChild('linesDiv')
linesDiv: ElementRef = new ElementRef('');
constructor(
private fb: FormBuilder,
private rfaiSubmissionService: RfaiSubmissionService,
private authenticationService: AuthenticationService,
private appSettingsService: AppSettingsService,
private changeDetectorRef: ChangeDetectorRef
) {}

ngOnInit() {
this.appSettingsService
.getMenu('ARS_MENU')
.subscribe(menu => (this.menu = menu));
this.getCodes();
this.formInit();
this.getUserData();
this.populatedInfo.nativeElement.style.display = 'none';


}
validateDates() {
this.formSubscription.add(this.manualForm.controls['serviceToDate'].valueChanges.subscribe(v => {
if (this.manualForm.get('serviceFromDate').valid &&
this.manualForm.get('serviceToDate').value &&
this.manualForm.get('serviceToDate').value.length === 10 &&
this.manualForm.get('serviceFromDate').value &&
this.manualForm.get('serviceFromDate').value.length === 10
) {
this.datesValidator();
}
}));
this.formSubscription.add(this.manualForm.controls['serviceFromDate'].valueChanges.subscribe(v => {
if (this.manualForm.get('serviceFromDate').valid &&
this.manualForm.get('serviceToDate').valid &&
this.manualForm.get('serviceToDate').value &&
this.manualForm.get('serviceToDate').value.length === 10 &&
this.manualForm.get('serviceFromDate').value &&
this.manualForm.get('serviceFromDate').value.length === 10
) {
this.datesValidator();
}
}));
}

getCodes() {
this.subscription.add(
this.rfaiSubmissionService.getHccscCodes().subscribe(
data => {
this.healthCareClaimStatusCodes = data;
},
error => {
console.log('getCodes() getHccscCodes() ', error.error.message);
}
)
);

this.subscription.add(
this.rfaiSubmissionService.getPayers().subscribe(
data => {
this.payers = data;
},
error => {
console.log('getCodes() getPayers() ', error.error.message);
}
)
);

this.subscription.add(
this.rfaiSubmissionService.getLoincCodes().subscribe(
data => {
this.loincCodesClaimLevel = data[0].claimList;
this.loincCodesLineLevel = data[0].lineList;
},
error => {
console.log('getCodes() getLoincCodes() ', error.error.message);
}
)
);

this.subscription.add(
this.rfaiSubmissionService.getLoincCodeModifiers().subscribe(
data => {
this.loincCodeModifiers = data;
},
error => {
console.log(
'getCodes() getLoinCodeModifiers() ',
error.error.message
);
}
)
);
}

getUserData() {
const userInfo = this.authenticationService.getDecodedUserInfo();
if (userInfo.permissions.additionalInformation) {
this.additionalInfoPermissions =
userInfo.permissions.additionalInformation;
this.disablePopulateInfo = !this.additionalInfoPermissions[
'populateInfo'
];
this.disableSubmitInfo = !this.additionalInfoPermissions['submitInfo'];
}
this.userName = userInfo.userName;
this.roles = userInfo.userRoles;
}

formInit() {
this.autoFillform = this.fb.group({
claimId: [
this.autoFormModel.claimId,
[Validators.pattern('[0-9]*'), Validators.required]
]
});

this.prepopulateForm = this.fb.group({
contactInfo: [
this.autoFormModel.contactInformation,
[Validators.required, Validators.email]
],
responseDueDateAutoCalendar: this.fb.group({
responseDueDateAuto: [
'',
[
Validators.required,
noPastDatesValidator,
Validators.pattern(
'(0[1-9]|1[012])[/](0[1-9]|[12][0-9]|3[01])[/](19|20)\\d\\d'
)
]
]
})
});

this.manualForm = this.fb.group({
serviceFromDate: ['', [ Validators.required, Validators.pattern('[0-9]{2}\/[0-9]{2}\/[0-9]{4}')]],
serviceToDate: ['', [Validators.required, Validators.pattern('[0-9]{2}\/[0-9]{2}\/[0-9]{4}')]],
contactInfo: [
this.manualFormModel.contactInformation,
[Validators.required, Validators.email]
],
responseDueDateManual: ['', [
Validators.required,
noPastDatesValidator,
Validators.pattern('[0-9]{2}\/[0-9]{2}\/[0-9]{4}')
]
],
payerID: [this.pdiInfoModel.payerId, [Validators.required]],
payerClaimControlNumber: [
this.pdiInfoModel.payerClaimControlNumber,
[Validators.pattern('[0-9]*'), Validators.required]
],
billingProvider: [
this.pdiInfoModel.providerInformation,
Validators.required
],
providerNpi: [
this.pdiInfoModel.providerNpi,
[Validators.pattern('[0-9]{10}'), Validators.required]
],
billingProviderTIN: [
this.pdiInfoModel.providerTin,
[Validators.pattern('[0-9]{9}'), Validators.required]
],
lastName: [this.pdiInfoModel.patientLastname, Validators.required],
firstName: [this.pdiInfoModel.patientFirstName, Validators.required],
patientID: [
this.pdiInfoModel.patientIdentifier,
[Validators.pattern('[0-9]*'), Validators.required]
],
patientControlNumber: [
this.pdiInfoModel.patientcontrolNumber,
[Validators.pattern('[0-9]*'), Validators.required]
],
informationReceiver: [
this.pdiInfoModel.informationReceiver,
Validators.required
],
billType: [this.pdiInfoModel.billType, Validators.required],
clearingHouseID: [
this.pdiInfoModel.clearingHouseId,
[Validators.pattern('[0-9]*'), Validators.required]
],
medicalRecordNumber: [
this.pdiInfoModel.medicalRecordNumber,
[Validators.pattern('[0-9]*'), Validators.required]
],
level: [this.pdiInfoModel.level, Validators.required],
linesFormArray: this.fb.array([
this.fb.group({
serviceLine: [''],
lineServiceFrom: [''],
lineServiceTo: [''],
revenueCode: [''],
procedureCode: [''],
modifiers: [''],
chargeAmount: ['']
})
])
});
this.linesFormArray = this.manualForm.get('linesFormArray') as FormArray;
this.onLineChanges();

this.subscription.add(
this.manualForm.get('level').valueChanges.subscribe(level => {
if (level === 'C') {
this.manualForm.get('serviceFromDate')
.setValidators([
Validators.required,
Validators.pattern(
'(0[1-9]|1[012])[/](0[1-9]|[12][0-9]|3[01])[/](19|20)\\d\\d'
)
]);
this.manualForm.get('serviceToDate')
.setValidators(
Validators.pattern(
'(0[1-9]|1[012])[/](0[1-9]|[12][0-9]|3[01])[/](19|20)\\d\\d'
)
);
this.manualForm.get('serviceFromDate')
.updateValueAndValidity();
this.manualForm.get('serviceToDate')
.updateValueAndValidity();
this.linesFormArray.controls.forEach(control => {
control['controls']['serviceLine'].clearValidators();
control['controls']['lineServiceFrom'].clearValidators();
control['controls']['lineServiceTo'].clearValidators();
control['controls']['revenueCode'].clearValidators();
control['controls']['procedureCode'].clearValidators();
control['controls']['modifiers'].clearValidators();
control['controls']['chargeAmount'].clearValidators();
});
this.linesFormArray.controls.forEach(control => {
control['controls']['serviceLine'].updateValueAndValidity();
control['controls']['lineServiceFrom'].updateValueAndValidity();
control['controls']['lineServiceTo'].updateValueAndValidity();
control['controls']['revenueCode'].updateValueAndValidity();
control['controls']['procedureCode'].updateValueAndValidity();
control['controls']['modifiers'].updateValueAndValidity();
control['controls']['chargeAmount'].updateValueAndValidity();
});
} else {
// line level
this.manualForm.get('serviceToDate')
.clearValidators();
this.manualForm.get('serviceFromDate')
.clearValidators();
this.manualForm.get('serviceFromDate')
.updateValueAndValidity();
this.manualForm.get('serviceToDate')
.updateValueAndValidity();
this.linesFormArray.controls.forEach(group => {
group['controls']['serviceLine'].setValidators([
Validators.required,
Validators.pattern('[0-9]*')
]);
group['controls']['lineServiceFrom'].setValidators([
Validators.required,
Validators.pattern(
'(0[1-9]|1[012])[/](0[1-9]|[12][0-9]|3[01])[/](19|20)\\d\\d'
)
]);
group['controls']['lineServiceTo'].setValidators(
Validators.pattern(
'(0[1-9]|1[012])[/](0[1-9]|[12][0-9]|3[01])[/](19|20)\\d\\d'
)
);
group['controls']['revenueCode'].setValidators([
Validators.required
]);
group['controls']['procedureCode'].setValidators([
Validators.required
]);
group['controls']['chargeAmount'].setValidators([
Validators.required,
Validators.pattern('[0-9]{1,}[.]?[0-9]*')
]);
});
this.linesFormArray.controls.forEach(control => {
control['controls']['serviceLine'].updateValueAndValidity();
control['controls']['lineServiceFrom'].updateValueAndValidity();
control['controls']['lineServiceTo'].updateValueAndValidity();
control['controls']['revenueCode'].updateValueAndValidity();
control['controls']['procedureCode'].updateValueAndValidity();
control['controls']['modifiers'].updateValueAndValidity();
control['controls']['chargeAmount'].updateValueAndValidity();
});
}
})
);
}

addLineRow(): void {
this.linesFormArray.push(
this.fb.group({
serviceLine: ['', [Validators.required, Validators.pattern('[0-9]*')]],
lineServiceFrom: [
'',
[
Validators.required,
Validators.pattern(
'(0[1-9]|1[012])[/](0[1-9]|[12][0-9]|3[01])[/](19|20)\\d\\d'
)
]
],
lineServiceTo: [
'',
[
Validators.pattern(
'(0[1-9]|1[012])[/](0[1-9]|[12][0-9]|3[01])[/](19|20)\\d\\d'
)
]
],
revenueCode: ['', Validators.required],
procedureCode: ['', Validators.required],
// Validators.required removed
modifiers: [''],
chargeAmount: ['', Validators.required]
})
);
}

removeLineRow(index: number) {
this.linesFormArray.removeAt(index);
}

onLineChanges() {
this.subscription.add(
this.manualForm.get('linesFormArray').statusChanges.subscribe(status => {
if (
this.linesFormArray.dirty &&
this.manualForm.get('linesFormArray').valid
) {
this.manualLineIdArray = [];
this.manualForm.get('linesFormArray')['controls'].forEach(control => {
if (
this.manualLineIdArray.indexOf(
control['controls']['serviceLine'].value
) === -1
) {
this.manualLineIdArray.push(
control['controls']['serviceLine'].value
);
}
});
}
})
);
}

onSubmitPrepopulated() {
this.prepopulatedInfo.responseDate = this.prepopulateForm.controls[
'responseDueDateAutoCalendar'
].get('responseDueDateAuto').value;
let rfaiInfoModel: RfaiInfoModel = new RfaiInfoModel();
rfaiInfoModel = Object.assign(
{},
this.autoFormModel,
this.prepopulatedInfo
);
rfaiInfoModel.claimId = this.autoFormModel.claimId
? +this.autoFormModel.claimId
: null;
const formGroupArray: AbstractControl[] = this.autoCodes['codeList'][
'controls'
];
rfaiInfoModel.submittedBy = this.userName;
this.submitData(rfaiInfoModel, formGroupArray);
}

onSubmitManual() {
let rfaiInfoModel: RfaiInfoModel = new RfaiInfoModel();
const indexElement = this.payers.findIndex(
payer => payer.payerIdentifier === this.pdiInfoModel.payerId
);
this.pdiInfoModel.payerName = this.payers[indexElement].payerIdentifierDesc;
if (this.pdiInfoModel.level === 'C') {
this.pdiInfoModel.serviceFromDate = this.manualForm.get('serviceFromDate').value;
this.pdiInfoModel.serviceToDate = this.manualForm.get('serviceToDate').value;

this.pdiInfoModel.rfaiLineItemResponse = [];
} else {
this.lines = [];
for (const lineFormGroup of this.linesFormArray.controls) {
const eachTempLine: LineModel = new LineModel();
eachTempLine.chargeAmount =
lineFormGroup['controls'].chargeAmount.value;
eachTempLine.modifiers = lineFormGroup['controls'].modifiers.value;
eachTempLine.procedureCode =
lineFormGroup['controls'].procedureCode.value;
eachTempLine.revenueCode = lineFormGroup['controls'].revenueCode.value;
eachTempLine.serviceFrom =
lineFormGroup['controls'].lineServiceFrom.value;
eachTempLine.serviceLineId =
lineFormGroup['controls'].serviceLine.value;
eachTempLine.serviceTo = lineFormGroup['controls'].lineServiceTo.value;
eachTempLine.selected = true;
this.lines.push(eachTempLine);
}
const serviceStartDateArray: Date[] = [];
const serviceEndDateArray: Date[] = [];
for (const line of this.lines) {
const tempStart = new Date(line.serviceFrom);
const tempEnd = new Date(line.serviceTo);
tempStart.setHours(0, 0, 0, 0);
tempEnd.setHours(0, 0, 0, 0);
serviceStartDateArray.push(tempStart);
serviceEndDateArray.push(tempEnd);
}
serviceStartDateArray.sort((a, b) => {
return a.getTime() - b.getTime();
});
serviceEndDateArray.sort((a, b) => {
return a.getTime() - b.getTime();
});
let temp = serviceStartDateArray[0];
let month =
temp.getMonth() > 9 ? '' : '0' + (temp.getMonth() + 1).toString();
let day = (temp.getDate() > 9 ? '' : '0') + temp.getDate().toString();
let year = temp.getFullYear().toString();
this.pdiInfoModel.serviceFromDate = month + '/' + day + '/' + year;
temp = serviceEndDateArray[serviceEndDateArray.length - 1];
month = temp.getMonth() > 9 ? '' : '0' + (temp.getMonth() + 1).toString();
day = (temp.getDate() > 9 ? '' : '0') + temp.getDate().toString();
year = temp.getFullYear().toString();
this.pdiInfoModel.serviceToDate = month + '/' + day + '/' + year;
}
this.pdiInfoModel.responseDate = this.manualForm.get('responseDueDateManual').value;
rfaiInfoModel = Object.assign({}, this.manualFormModel, this.pdiInfoModel);
rfaiInfoModel.claimId = this.manualFormModel.claimId
? +this.manualFormModel.claimId
: +rfaiInfoModel.payerClaimControlNumber;
const formGroupArray: AbstractControl[] = this.manualCodes['codeList'][
'controls'
];
rfaiInfoModel.rfaiLineItemResponse = this.lines;
rfaiInfoModel.submittedBy = this.userName;
this.submitData(rfaiInfoModel, formGroupArray);
}

submitData(rfaiInfoModel: RfaiInfoModel, formGroupArray: AbstractControl[]) {
rfaiInfoModel.codeAndLevelList = [];
let lineNumberName = '';
let loincCodeName = '';
for (const childformGroup of formGroupArray) {
lineNumberName = Object.keys(childformGroup['controls'])[4];
loincCodeName = Object.keys(childformGroup['controls'])[1];
const code = new CodeAndLevelModel();
code.claimStatus =
childformGroup['controls']['healthCareClaimStatusCode']['value'];
code.loincCode = childformGroup['controls'][loincCodeName]['value'];
code.loincCodeModifier1 =
childformGroup['controls']['loincCodeModifier1']['value'];
code.loincCodeModifier2 =
childformGroup['controls']['loincCodeModifier2']['value'];
code.lineNumber = childformGroup['controls']['levelDropDown']['value'];
rfaiInfoModel.codeAndLevelList.push(code);
}
let arr: LineModel[] = [];
rfaiInfoModel.codeAndLevelList.forEach(code => {
if (+code.lineNumber !== 0) {
arr.push(
...rfaiInfoModel.rfaiLineItemResponse.filter(
line => line.serviceLineId.toString() === code.lineNumber
)
);
}
});
arr = arr.filter(
(line, i, self) =>
i === self.findIndex(t => t.serviceLineId === line.serviceLineId)
);

rfaiInfoModel.rfaiLineItemResponse = arr;
this.subscription.add(
this.rfaiSubmissionService.submitRfai(rfaiInfoModel).subscribe(
data => {
this.onResetManual();
this.onResetPrepopulated();
this.successMsg = '277 RFAI successfully submitted.';
this.successStatus = true;
this.errorStatus = false;
setTimeout(() => {
this.successStatus = false;
}, 8000);
},
error => {
this.errorStatus = true;
this.successStatus = false;
this.errorMsg = 'An error occurred during 277 RFAI submission.';
setTimeout(() => {
this.errorStatus = false;
}, 8000);
}
)
);
}
// Common code to be resetted on both forms
resetCommon() {
this.pdiInfoModel = new PDIInfoModel();
this.lines = [new LineModel()];
this.errorStatus = false;
this.successStatus = false;
this.errorMsg = '';
this.successMsg = '';
this.pdiInfoModel.level = 'C';
this.formInit();
this.populateClicked = false;
}

onResetPrepopulated() {
this.populatedInfo.nativeElement.style.display = 'none';
this.autoCodes.onResetForm();
this.prepopulatedLineIdArray = [];
this.autoFormModel = new RfaiSubmissionRequestModel();
this.resetCommon();
}

onResetManual() {
this.manualCodes.onResetForm();
this.manualLineIdArray = [];
this.manualFormModel = new RfaiSubmissionRequestModel();
// this.serviceFromDate.nativeElement.value = '';
// this.serviceToDate.nativeElement.value = '';
// this.responseDueDateManual.nativeElement.value = '';
this.linesDiv.nativeElement.style.display = 'none';
this.resetCommon();
}

toggleLines() {
if (this.pdiInfoModel.level === 'L') {
this.linesDiv.nativeElement.style.display = 'block';
} else {
this.linesDiv.nativeElement.style.display = 'none';
}
}

checkPending(input: any, populateClicked: boolean) {
let claimId = 0;
if (populateClicked) {
claimId = input;
} else {
claimId = input.target.value;
}
if (!!claimId) {
this.subscription.add(
this.rfaiSubmissionService.checkPending(claimId).subscribe(data => {
if (data.pendingSubmission) {
this.openWarningModal();
}
})
);
}
}
openWarningModal() {
this.warningModalClosed = false;
this.tabIdx = '-1';
}
closeWarningModal() {
this.warningModalClosed = true;
this.tabIdx = this.errorModalClosed ? '0' : '-1';
}
openErrorModal() {
this.errorModalClosed = false;
this.tabIdx = '-1';
}
closeErrorModal() {
this.errorModalClosed = true;
this.tabIdx = this.warningModalClosed ? '0' : '-1';
}

cancel() {
this.closeWarningModal();
this.closeErrorModal();
if (this.populateClicked) {
this.onResetPrepopulated();
} else {
this.onResetManual();
}
}
populateInfo() {
this.populateClicked = true;
// this.responseDueDateAuto.nativeElement.value = '';
this.checkPending(this.autoFormModel.claimId, this.populateClicked);
this.subscription.add(
this.rfaiSubmissionService
.populateInfo(this.autoFormModel.claimId)
.subscribe(
data => {
this.errorStatus = false;
this.errorMsg = '';
this.populatedInfo.nativeElement.style.display = 'block';
this.prepopulatedInfo = data;
for (const item of Object.keys(this.prepopulatedInfo)) {
if (
this.prepopulatedInfo[item] === null &&
item !== 'submittedBy' &&
item !== 'rfaiLineItemResponse'
) {
this.disableSubmitInfo = true;
this.errorModalClosed = false;
break;
} else if (item === 'rfaiLineItemResponse') {
this.prepopulatedInfo[item].forEach(line => {
for (const lineItem of Object.keys(this.line)) {
if (
line[lineItem] === null &&
lineItem !== 'modifiers' &&
lineItem !== 'serviceTo'
) {
this.disableSubmitInfo = true;
this.errorModalClosed = false;
break;
}
}
});
}
}
this.prepopulatedInfo.rfaiLineItemResponse
? (this.prepopulatedInfo.level = 'L')
: (this.prepopulatedInfo.level = 'C');
if (this.prepopulatedInfo.level === 'L') {
this.prepopulatedLineIdArray = [];
this.prepopulatedInfo.rfaiLineItemResponse.forEach(lineInfo => {
this.prepopulatedLineIdArray.push(lineInfo.serviceLineId);
});
}
},
error => {
this.populatedInfo.nativeElement.style.display = 'none';
this.errorMsg = error.error.message;
this.errorStatus = true;
this.prepopulatedInfo = new PDIInfoModel();
}
)
);
this.onResetPrepopulated();
}

// assignResponseDueDateManual() {
// this.manualForm.controls['responseDueDateManualCalendar'].get('responseDueDateManual').setValue(this.responseDueDateManual.nativeElement.value);
// }
// assignResponseDueDateAuto() {
// this.prepopulateForm
// .get('responseDueDateAuto')
// .setValue(this.responseDueDateAuto.nativeElement.value);
// }

showError(columnName: string): boolean {
for (const item of this.manualForm.controls['linesFormArray']['controls']) {
if (
item['controls'][columnName].touched &&
item['controls'][columnName].invalid
) {
return true;
}
}

return false;
}
datesValidator(): void {
this.dateRangeError = false;
if (
this.manualForm.get('serviceFromDate').value.length === 10 &&
this.manualForm.get('serviceToDate').value.length === 10
) {
const fromDate = new Date(this.manualForm.get('serviceFromDate').value);
const toDate = new Date(this.manualForm.get('serviceToDate').value);
if (toDate.valueOf() < fromDate.valueOf()) {
this.dateRangeError = true;
this.manualForm.get('serviceFromDate').setValue('');
this.manualForm.get('serviceToDate').setValue('');
this.changeDetectorRef.detectChanges();
} else {
this.dateRangeError = false;
}
}
}

ngOnDestroy() {
this.subscription.unsubscribe();
this.formSubscription.unsubscribe();
this.resetChild = false;
}
}