{"version":3,"sources":["src/app/shared/services/rennova.service.ts","src/app/modules/document/services/exam-model.service.ts","src/app/modules/dispensation/modal-dispention/modal-dispention.component.ts","src/app/modules/dispensation/modal-dispention/modal-dispention.component.html","src/app/modules/dispensation/modal-dispention/modal-dispention.component.scss","src/app/shared/pipes/is-tel.pipe.ts","src/app/shared/services/state.service.ts","src/app/modules/document/document.component.scss","src/app/core/services/core.service.ts","src/app/shared/models/cpf-cnpj-api-errors.enum.ts","src/app/shared/models/health-professional.ts","src/app/shared/pipes/is-complete-name-pipe.pipe.ts","src/app/shared/models/professional-type.enum.ts","src/app/modules/document/pages/attestation/attestation.service.ts","src/app/shared/components/AppVersion/AppVersion.component.ts","src/app/modules/document/services/retention.service.ts","src/app/shared/components/dialog-modal/dialog-modal.component.ts","src/app/shared/components/dialog-modal/dialog-modal.component.html","src/app/shared/components/dialog-modal/dialog-modal.component.scss","src/app/shared/models/permission.enum.ts","src/app/core/services/auth.service.ts","src/app/shared/decorators/no-concurrent.ts","src/app/modules/patients/pages/modal-edit-pet/modal-edit-pet.component.ts","src/app/modules/patients/pages/modal-edit-pet/modal-edit-pet.component.html","src/app/modules/patients/pages/modal-edit-pet/modal-edit-pet.component.scss","src/app/modules/dispensation/consult/consult.component.ts","src/app/modules/dispensation/consult/consult.component.html","src/app/modules/dispensation/consult/consult.component.scss","src/app/modules/dispensation/guards/dispensation.guard.ts","src/app/modules/dispensation/register/register.component.html","src/app/modules/dispensation/register/register.component.ts","src/app/modules/dispensation/register/register.component.scss","src/app/modules/dispensation/consultempty/consult-empty.component.ts","src/app/modules/dispensation/consultempty/consult-empty.component.html","src/app/modules/dispensation/consultempty/consult-empty.component.scss","src/app/modules/dispensation/consultnotfound/consult-not-found.component.ts","src/app/modules/dispensation/consultnotfound/consult-not-found.component.html","src/app/modules/dispensation/consultnotfound/consult-not-found.component.scss","src/app/modules/dispensation/dispensation-routing.module.ts","src/app/modules/dispensation/dispensation.module.ts","src/app/shared/pipes/capitalize.pipe.ts","src/app/shared/pipes/formatted-cel.pipe.ts","src/app/shared/pipes/formatted-cnpj.pipe.ts","src/app/shared/pipes/formatted-cpf.pipe.ts","src/app/shared/pipes/formatted-mapa-sipeagro.pipe.ts","src/app/shared/pipes/safe.pipe.ts","src/app/shared/pipes/to-json.pipe.ts","src/app/shared/pipes/with-loading.pipe.ts","src/app/shared/pipes/sex-pet-parserd.pipe.ts","src/app/shared/pipes/pipes.module.ts","src/app/modules/dashboard/modal-edit-address-data/modal-edit-address-data.component.ts","src/app/modules/dashboard/modal-edit-address-data/modal-edit-address-data.component.html","src/app/modules/dashboard/modal-edit-address-data/modal-edit-address-data.component.scss","src/app/shared/components/modal-sucess-send-document/modal-sucess-send-document.component.ts","src/app/shared/components/modal-sucess-send-document/modal-sucess-send-document.component.html","src/app/shared/components/modal-sucess-send-document/modal-sucess-send-document.component.scss","src/app/core/services/validation.service.ts","src/app/modules/patients/pages/modal-select-pet/modal-select-pet.component.ts","src/app/modules/patients/pages/modal-select-pet/modal-select-pet.component.html","src/app/modules/patients/pages/modal-select-pet/modal-select-pet.component.scss","src/app/modules/pharmacist/services/pharmacist.service.ts","src/app/shared/services/bigboost.service.ts","src/environments/environment.ts","src/app/theme/symbols.ts","src/app/shared/pipes/formatted-cep.pipe.ts","src/app/modules/patients/enum/type-patient.ts","src/app/modules/patients/pages/modal-search/modal-search.component.ts","src/app/modules/patients/pages/modal-search/modal-search.component.html","src/app/modules/patients/pages/modal-search/modal-search.component.scss","src/app/modules/document/services/attestation-model.service.ts","src/app/modules/document/services/prescription-model.service.ts","src/app/modules/health-professional/services/health-professional.service.ts","src/app/modules/admin/admin.service.ts","src/app/modules/document/services/exam.service.ts","src/app/modules/document/services/orientation-model.service.ts","src/app/shared/models/pet-patient.ts","src/app/modules/document/services/infusion.service.ts","src/app/shared/components/modal-send-document/modal-send-document.component.ts","src/app/shared/components/modal-send-document/modal-send-document.component.html","src/app/shared/components/modal-send-document/modal-send-document.component.scss","src/app/modules/dispensation/modal-alert/modal-alert.component.ts","src/app/modules/dispensation/modal-alert/modal-alert.component.html","src/app/modules/dispensation/modal-alert/modal-alert.component.scss","src/app/shared/pipes/is-cpf.pipe.ts","src/app/modules/document/services/victa-protocol.service.ts","src/app/shared/modals/modal-add-product-rennova/modal-add-product-rennova.component.ts","src/app/shared/modals/modal-add-product-rennova/modal-add-product-rennova.component.html","src/app/shared/modals/modal-add-product-rennova/modal-add-product-rennova.component.scss","src/app/shared/directives/auto-size.directive.ts","src/app/shared/directives/cep.directive.ts","src/app/shared/directives/cpf-cnpj.directive.ts","src/app/shared/directives/digit-only.directive.ts","src/app/shared/directives/focus.directive.ts","src/app/shared/directives/only-numbers.directive.ts","src/app/shared/directives/patient-search.directive.ts","src/app/shared/directives/telephone.directive.ts","src/app/shared/directives/directives.module.ts","src/app/shared/layout/alternative-navbar-cip/alternative-navbar-cip.component.html","src/app/shared/layout/alternative-navbar-cip/alternative-navbar-cip.component.ts","src/app/shared/layout/alternative-navbar-cip/alternative-navbar-cip.component.scss","src/app/shared/layout/alternative-navbar/alternative-navbar.component.html","src/app/shared/layout/alternative-navbar/alternative-navbar.component.ts","src/app/shared/layout/alternative-navbar/alternative-navbar.component.scss","src/app/shared/layout/footer/footer-mobile/footer-mobile.component.ts","src/app/shared/layout/footer/footer-mobile/footer-mobile.component.html","src/app/shared/layout/footer/footer-mobile/footer-mobile.component.scss","src/app/shared/layout/footer/footer.component.html","src/app/shared/layout/footer/footer.component.ts","src/app/shared/layout/footer/footer.component.scss","src/app/shared/layout/icon-menu/icon-menu.component.html","src/app/shared/layout/icon-menu/icon-menu.component.ts","src/app/shared/layout/icon-menu/icon-menu.component.scss","src/app/shared/layout/navbar/navbar.component.ts","src/app/shared/layout/navbar/navbar.component.html","src/app/shared/layout/navbar/navbar.component.scss","src/app/shared/layout/sidebar-menu/sidebar-menu.component.html","src/app/shared/layout/sidebar-menu/sidebar-menu.component.ts","src/app/shared/layout/sidebar-menu/sidebar-menu.component.scss","src/app/shared/layout/layout.module.ts","src/app/shared/shared.module.ts","src/app/modules/entry/pages/login/login.component.ts","src/app/modules/entry/pages/login/login.component.html","src/app/modules/entry/pages/login/login.component.scss","src/app/modules/entry/pages/register/register.component.html","src/app/modules/entry/pages/register/modal-terms-and-conditions/modal-terms-and-conditions.component.ts","src/app/modules/entry/pages/register/modal-terms-and-conditions/modal-terms-and-conditions.component.html","src/app/modules/entry/pages/register/modal-terms-and-conditions/modal-terms-and-conditions.component.scss","src/app/modules/entry/pages/register/register.component.ts","src/app/modules/entry/pages/register/register.component.scss","src/app/modules/entry/pages/register/account-type.component.html","src/app/modules/entry/pages/register/account-type.component.ts","src/app/modules/entry/pages/register/account-type.component.scss","src/app/modules/entry/pages/welcome/welcome.component.ts","src/app/modules/entry/pages/welcome/welcome.component.html","src/app/modules/entry/pages/welcome/welcome.component.scss","src/app/modules/entry/pages/reset-password/reset-password.component.html","src/app/modules/entry/pages/reset-password/reset-password.component.scss","src/app/modules/entry/services/account.service.ts","src/app/modules/entry/pages/reset-password/reset-password.component.ts","src/app/modules/entry/pages/change-password/change-password.component.ts","src/app/modules/entry/pages/change-password/change-password.component.html","src/app/modules/entry/pages/change-password/change-password.component.scss","src/app/modules/entry/pages/activate-account/activate-account.component.html","src/app/modules/entry/pages/activate-account/activate-account.component.ts","src/app/modules/entry/pages/activate-account/activate-account.component.scss","src/app/modules/entry/pages/pharmacy-option/pharmacy-option.component.html","src/app/modules/entry/pages/pharmacy-option/pharmacy-option.component.ts","src/app/modules/entry/pages/pharmacy-option/pharmacy-option.component.scss","src/app/modules/entry/entry-routing.module.ts","src/app/modules/entry/pages/register/patient-form/patient-form.component.ts","src/app/modules/entry/pages/register/patient-form/patient-form.component.html","src/app/modules/entry/pages/register/patient-form/patient-form.component.scss","src/app/modules/entry/pages/register/pharmacy-form/pharmacy-form.component.html","src/app/shared/services/open-data.service.ts","src/app/modules/entry/pages/register/pharmacy-form/pharmacy-form.component.ts","src/app/modules/entry/pages/register/pharmacy-form/pharmacy-form.component.scss","src/app/modules/entry/pages/register/terms-and-conditions/terms-and-conditions.component.ts","src/app/modules/entry/pages/register/terms-and-conditions/terms-and-conditions.component.html","src/app/modules/entry/pages/register/terms-and-conditions/terms-and-conditions.component.scss","src/app/modules/entry/pages/register/health-professional-form/health-professional-form.component.ts","src/app/modules/entry/pages/register/health-professional-form/health-professional-form.component.html","src/app/modules/entry/pages/register/health-professional-form/health-professional-form.component.scss","src/app/modules/entry/pages/password-strength/password-strength.component.ts","src/app/modules/entry/pages/password-strength/password-strength.component.html","src/app/modules/entry/pages/password-strength/password-strength.component.scss","src/app/modules/entry/pages/register/underage-patient-form/responsible-form/responsible-form.component.html","src/app/modules/entry/pages/register/underage-patient-form/responsible-form/responsible-form.component.ts","src/app/modules/entry/pages/register/underage-patient-form/responsible-form/responsible-form.component.scss","src/app/modules/entry/pages/register/underage-patient-form/underage-patient-form.component.html","src/app/modules/entry/pages/register/underage-patient-form/underage-patient-form.component.ts","src/app/modules/entry/pages/register/underage-patient-form/underage-patient-form.component.scss","src/app/modules/entry/pages/register/responsible-patient-form/responsible-patient-form.component.ts","src/app/modules/entry/pages/register/responsible-patient-form/responsible-patient-form.component.html","src/app/modules/entry/pages/register/responsible-patient-form/responsible-patient-form.component.scss","src/app/modules/entry/entry.module.ts","src/app/shared/modals/modal-search/modal-search.component.ts","src/app/shared/modals/modal-search/modal-search.component.html","src/app/shared/modals/modal-search/modal-search.component.scss","src/app/shared/decorators/nativeAsync.ts","src/app/modules/dashboard/modal-pet-form/modal-pet-form.component.ts","src/app/modules/dashboard/modal-pet-form/modal-pet-form.component.html","src/app/modules/dashboard/modal-pet-form/modal-pet-form.component.scss","src/app/modules/pharmacy/services/pharmacy.service.ts","src/app/shared/components/modal-activate-account/modal-activate-account.component.ts","src/app/shared/components/modal-activate-account/modal-activate-account.component.html","src/app/shared/components/modal-activate-account/modal-activate-account.component.scss","src/app/shared/data/DateUtils.ts","node_modules/moment/locale sync ^\\.\\/.*$","src/app/modules/document/pages/model-add-favorite-document/model-add-favorite-document.component.ts","src/app/modules/document/pages/model-add-favorite-document/model-add-favorite-document.component.html","src/app/modules/document/pages/model-add-favorite-document/model-add-favorite-document.component.scss","src/app/shared/services/library.service.ts","src/app/modules/personalized-medications/services/manipulated-profile.service.ts","src/app/utils/md5.ts","src/app/shared/models/additional-feature-accept.enum.ts","src/app/shared/models/buyer.ts","src/app/shared/models/manipulated-profile.ts","src/app/shared/models/pharmacist.ts","src/app/modules/historic/historic.component.ts","src/app/modules/historic/historic.component.html","src/app/modules/historic/historic.component.scss","src/app/shared/charts/my-pie-chart/my-pie-chart.component.ts","src/app/shared/charts/my-pie-chart/my-pie-chart.component.html","src/app/shared/charts/my-pie-chart/my-pie-chart.component.scss","src/app/shared/components/add-button/add-button.component.ts","src/app/shared/components/add-button/add-button.component.html","src/app/shared/components/add-button/add-button.component.scss","src/app/shared/components/add-type-options/add-type-options.component.ts","src/app/shared/components/add-type-options/add-type-options.component.html","src/app/shared/components/add-type-options/add-type-options.component.scss","src/app/shared/components/auto-width-input-number/auto-width-input-number.component.html","src/app/shared/components/auto-width-input-number/auto-width-input-number.component.ts","src/app/shared/components/auto-width-input-number/auto-width-input-number.component.scss","src/app/shared/components/cid-form/cid-form.component.html","src/app/modules/document/services/cid.service.ts","src/app/shared/components/cid-form/cid-form.component.ts","src/app/shared/components/cid-form/cid-form.component.scss","src/app/shared/components/data-exam-form/data-exam-form.component.html","src/app/shared/components/data-exam-form/data-exam-form.component.ts","src/app/shared/components/data-exam-form/data-exam-form.component.scss","src/app/shared/components/form-data/address-data-form/address-data-form.component.ts","src/app/shared/components/form-data/address-data-form/address-data-form.component.html","src/app/shared/components/form-data/contacts-data-form/contacts-data-form.component.html","src/app/shared/components/form-data/contacts-data-form/contacts-data-form.component.ts","src/app/shared/components/form-data/personal-data-form/personal-data-form.component.ts","src/app/shared/components/form-data/personal-data-form/personal-data-form.component.html","src/app/shared/components/form-data/pet-data-form/pet-data-form.component.html","src/app/shared/components/form-data/pet-data-form/pet-data-form.component.ts","src/app/shared/components/form-data/pet-data-form/pet-data-form.component.scss","src/app/shared/components/form-data/underage-data-form/underage-data-form.component.html","src/app/shared/components/form-data/underage-data-form/underage-data-form.component.ts","src/app/shared/components/input-file/input-file.component.html","src/app/shared/components/input-file/input-file.component.ts","src/app/shared/components/input-file/input-file.component.scss","src/app/shared/components/input-password/input-password.component.html","src/app/shared/components/input-password/input-password.component.ts","src/app/shared/components/input-password/input-password.component.scss","src/app/shared/components/input-search-medicaments/input-search-medicaments.component.html","src/app/shared/components/input-search-medicaments/input-search-medicaments.component.ts","src/app/shared/components/input-search-medicaments/input-search-medicaments.component.scss","src/app/shared/components/medicament-form/medicament-form.component.ts","src/app/shared/components/medicament-form/medicament-form.component.html","src/app/shared/components/medicament-form/medicament-form.component.scss","src/app/shared/components/menu/menu.component.html","src/app/shared/components/menu/menu.component.ts","src/app/shared/components/menu/menu.component.scss","src/app/shared/components/model-form-pre-preenchido/model-form-pre-preenchido.component.ts","src/app/shared/components/model-form-pre-preenchido/model-form-pre-preenchido.component.html","src/app/shared/components/model-form-pre-preenchido/model-form-pre-preenchido.component.scss","src/app/shared/components/popover-button/popover-button.component.ts","src/app/shared/components/popover-button/popover-button.component.html","src/app/shared/components/popover-button/popover-button.component.scss","src/app/shared/components/rd-buttom-group-icon/rd-buttom-group-icon.component.ts","src/app/shared/components/rd-buttom-group-icon/rd-buttom-group-icon.component.html","src/app/shared/components/rd-buttom-group-icon/rd-buttom-group-icon.component.scss","src/app/shared/components/rd-tabs/rd-tabs.component.ts","src/app/shared/components/rd-tabs/rd-tabs.component.html","src/app/shared/components/rd-tabs/rd-tabs.component.scss","src/app/shared/components/text-box-form/text-box-form.component.ts","src/app/shared/components/text-box-form/text-box-form.component.html","src/app/shared/components/text-box-form/text-box-form.component.scss","src/app/shared/components/components.module.ts","src/app/shared/pipes/helpers.ts","src/app/shared/models/user-type.enum.ts","src/app/shared/modals/modal-buyer-data/modal-buyer-data.component.ts","src/app/shared/modals/modal-buyer-data/modal-buyer-data.component.html","src/app/shared/modals/modal-buyer-data/modal-buyer-data.component.scss","src/app/shared/modals/modal-protocols-library/modal-protocols-library.component.ts","src/app/shared/modals/modal-protocols-library/modal-protocols-library.component.html","src/app/shared/modals/modal-protocols-library/modal-protocols-library.component.scss","src/app/theme/theme.service.ts","src/app/utils/markFormGroup.ts","src/app/shared/models/prescription.ts","src/app/modules/dashboard/pages/index/index.component.scss","src/app/shared/components/modal-resend-documento-empty/modal-resend-documento-empty.component.ts","src/app/shared/components/modal-resend-documento-empty/modal-resend-documento-empty.component.html","src/app/shared/components/modal-resend-documento-empty/modal-resend-documento-empty.component.scss","src/app/modules/dashboard/dashboard.guard.ts","src/app/modules/dashboard/pages/index/index.component.html","src/app/modules/dashboard/modal-covid/modal-covid.component.ts","src/app/modules/dashboard/modal-covid/modal-covid.component.html","src/app/modules/dashboard/modal-covid/modal-covid.component.scss","src/app/modules/dashboard/modal-complement-info-patient/modal-complement-info-patient.component.ts","src/app/modules/dashboard/modal-complement-info-patient/modal-complement-info-patient.component.html","src/app/modules/dashboard/modal-complement-info-patient/modal-complement-info-patient.component.scss","src/app/modules/dashboard/pages/index/index.component.ts","src/app/modules/dashboard/dashboard-routing.module.ts","src/app/modules/dashboard/modal-cip-acceptance/modal-cip-acceptance.component.html","src/app/modules/dashboard/modal-cip-acceptance/modal-cip-acceptance.component.ts","src/app/modules/dashboard/modal-cip-acceptance/modal-cip-acceptance.component.scss","src/app/modules/dashboard/modal-rqe-warning/modal-rqe-warning.component.ts","src/app/modules/dashboard/modal-rqe-warning/modal-rqe-warning.component.html","src/app/modules/dashboard/modal-rqe-warning/modal-rqe-warning.component.scss","src/app/modules/dashboard/modal-telemedicine-contract/form-steps/file-step/file-step.component.ts","src/app/modules/dashboard/modal-telemedicine-contract/form-steps/file-step/file-step.component.html","src/app/modules/dashboard/modal-telemedicine-contract/form-steps/file-step/file-step.component.scss","src/app/modules/dashboard/modal-telemedicine-contract/form-steps/form-steps.component.html","src/app/modules/dashboard/modal-telemedicine-contract/modal-telemedicine-contract.component.scss","src/app/shared/data/Brazilian-banks.ts","src/app/modules/dashboard/modal-telemedicine-contract/form-steps/subaccount-step/subaccount-step.component.ts","src/app/modules/dashboard/modal-telemedicine-contract/form-steps/subaccount-step/subaccount-step.component.html","src/app/modules/dashboard/modal-telemedicine-contract/form-steps/subaccount-step/subaccount-step.component.scss","src/app/modules/dashboard/modal-telemedicine-contract/form-steps/subscription-step/subscription-step.component.ts","src/app/modules/dashboard/modal-telemedicine-contract/form-steps/subscription-step/subscription-step.component.html","src/app/modules/dashboard/modal-telemedicine-contract/form-steps/subscription-step/subscription-step.component.scss","src/app/modules/dashboard/modal-telemedicine-contract/form-steps/form-steps.component.ts","src/app/modules/dashboard/modal-telemedicine-contract/form-steps/form-steps.component.scss","src/app/modules/dashboard/modal-telemedicine-contract/intro/intro.component.ts","src/app/modules/dashboard/modal-telemedicine-contract/intro/intro.component.html","src/app/modules/dashboard/modal-telemedicine-contract/intro/intro.component.scss","src/app/modules/dashboard/modal-telemedicine-contract/modal-telemedicine-contract.component.html","src/app/modules/dashboard/modal-telemedicine-contract/user-telemedicine.service.ts","src/app/modules/dashboard/modal-telemedicine-contract/modal-telemedicine-contract.component.ts","src/app/modules/dashboard/modal-telemedicine-contract/modal-telemedicine-contract.module.ts","src/app/modules/dashboard/modal-womens-month/modal-womens-month.component.ts","src/app/modules/dashboard/modal-womens-month/modal-womens-month.component.html","src/app/modules/dashboard/modal-womens-month/modal-womens-month.component.scss","src/app/modules/dashboard/dashboard.module.ts","src/app/utils/index.ts","src/app/shared/data/Fur.ts","src/app/modules/patients/services/patients.service.ts","src/app/modules/document/pages/prescription/unsigned-prescription-modal.component.ts","src/app/modules/document/pages/prescription/unsigned-prescription-modal.component.html","src/app/modules/document/pages/prescription/unsigned-prescription-modal.component.scss","src/app/modules/document/services/buyer.service.ts","src/app/shared/services/sweetalert.service.ts","src/$_lazy_route_resource lazy namespace object","src/app/modules/admin/listing/features-listing/specialties.service.ts","src/app/modules/user/user.service.ts","src/app/modules/document/services/pdf.service.ts","src/app/core/security/token/token.service.ts","src/app/core/usuario-inativo/usuario-inativo.component.ts","src/app/core/core.module.ts","src/app/modules/admin/listing/features-listing/additional-feature.service.ts","src/app/shared/pipes/formatted-tel.pipe.ts","src/app/modules/document/services/document.service.ts","src/app/modules/entry/services/register.service.ts","src/app/modules/patients/pages/modal-add-patient/modal-add-patient.component.ts","src/app/modules/patients/pages/modal-add-patient/modal-add-patient.component.html","src/app/modules/patients/pages/modal-add-patient/modal-add-patient.component.scss","src/app/modules/document/services/cr.service.ts","src/app/utils/removeFormGroupValidators.ts","src/app/modules/dashboard/modal-edit-personal-data/modal-edit-personal-data.component.ts","src/app/modules/dashboard/modal-edit-personal-data/modal-edit-personal-data.component.html","src/app/modules/dashboard/modal-edit-personal-data/modal-edit-personal-data.component.scss","src/app/shared/services/app-toast.service.ts","src/app/modules/document-v2/utils/Document.util.ts","src/app/modules/document/pages/model-list-favorite-document/model-list-favorite-document.component.ts","src/app/modules/document/pages/model-list-favorite-document/model-list-favorite-document.component.html","src/app/modules/document/pages/model-list-favorite-document/model-list-favorite-document.component.scss","src/app/theme/theme.directive.ts","src/app/theme/theme.module.ts","src/app/theme/theme-receita-digital.ts","src/app/theme/theme-mrd.ts","src/app/modules/document/services/prescription.service.ts","src/app/modules/patients/services/pet-patient.service.ts","src/app/utils/logInvalidForm.ts","src/app/shared/models/patient.ts","src/app/modules/document/pages/modal-select-layout/modal-select-layout.component.ts","src/app/modules/document/pages/modal-select-layout/modal-select-layout.component.html","src/app/modules/document/pages/modal-select-layout/modal-select-layout.component.scss","src/app/shared/utils/base64.utils.ts","src/app/modules/document/guards/document.guard.ts","src/app/modules/document/pages/confirmation/confirmation.component.html","src/app/modules/document/pages/confirmation/confirmation.component.ts","src/app/modules/document/pages/confirmation/confirmation.component.scss","src/app/modules/document/pages/retention-confirmation/retention-confirmation.component.html","src/app/modules/document/pages/retention-confirmation/retention-confirmation.component.ts","src/app/modules/document/pages/retention-confirmation/retention-confirmation.component.scss","src/app/modules/document/pages/listing/listing.component.html","src/app/modules/document/pages/listing/listing.component.ts","src/app/modules/document/pages/listing/listing.component.scss","src/app/modules/document/pages/prescription/upload-pdf.component.html","src/app/modules/document/pages/prescription/upload-pdf.component.ts","src/app/modules/document/pages/prescription/upload-pdf.component.scss","src/app/modules/document/document.component.html","src/app/modules/document/pages/modal-iframe/modal-iframe.component.ts","src/app/modules/document/pages/modal-iframe/modal-iframe.component.html","src/app/modules/document/pages/modal-iframe/modal-iframe.component.scss","src/app/modules/document/document.component.ts","src/app/modules/document/document-routing.module.ts","src/app/modules/document/pages/attestation/attestation.component.ts","src/app/modules/document/pages/attestation/attestation.component.html","src/app/modules/document/pages/attestation/attestation.component.scss","src/app/modules/document/pages/exam/exam.component.ts","src/app/modules/document/pages/exam/exam.component.html","src/app/modules/document/pages/exam/exam.component.scss","src/app/modules/document/pages/infusion-protocol/infusion-protocol.component.ts","src/app/modules/document/pages/infusion-protocol/infusion-protocol.component.html","src/app/modules/document/pages/infusion-protocol/infusion-protocol.component.scss","src/app/modules/document/pages/orientation/orientation.component.ts","src/app/modules/document/pages/orientation/orientation.component.html","src/app/modules/document/pages/orientation/orientation.component.scss","src/app/modules/document/pages/prescription/navigation.component.ts","src/app/modules/document/pages/prescription/navigation.component.scss","src/app/modules/document/pages/prescription/prescription.component.html","src/app/modules/document/pages/prescription/prescription.component.ts","src/app/modules/document/pages/prescription/prescription.component.scss","src/app/modules/document/document.module.ts","src/app/modules/admin/logs/logs.service.ts","src/app/shared/pipes/only-numbers.pipe.ts","src/app/shared/modals/modal-new-portal-digital-signatures/modal-new-portal-digital-signatures.component.ts","src/app/shared/modals/modal-new-portal-digital-signatures/modal-new-portal-digital-signatures.component.html","src/app/shared/modals/modal-new-portal-digital-signatures/modal-new-portal-digital-signatures.component.scss","src/app/modules/patients/components/simplified-patient-form/simplified-patient-form.component.ts","src/app/modules/patients/components/simplified-patient-form/simplified-patient-form.component.html","src/app/modules/patients/components/simplified-pet-patient-form/simplified-pet-patient-form.component.html","src/app/modules/patients/components/simplified-pet-patient-form/simplified-pet-patient-form.component.ts","src/app/modules/patients/components/simplified-pet-patient-form/simplified-pet-patient-form.component.scss","src/app/modules/patients/components/simplified-underage-patient-form/simplified-underage-patient-form.component.ts","src/app/modules/patients/components/simplified-underage-patient-form/simplified-underage-patient-form.component.html","src/app/modules/patients/pages/index/index.component.html","src/app/modules/patients/pages/modal-edit-patient/modal-edit-patient.component.ts","src/app/modules/patients/pages/modal-edit-patient/modal-edit-patient.component.html","src/app/modules/patients/pages/modal-edit-patient/modal-edit-patient.component.scss","src/app/modules/patients/pages/patient-details/patient-details.component.ts","src/app/modules/patients/pages/patient-details/patient-details.component.html","src/app/modules/patients/pages/patient-details/patient-details.component.scss","src/app/modules/patients/pages/modal-switch-responsible/modal-switch-responsible.component.ts","src/app/modules/patients/pages/modal-switch-responsible/modal-switch-responsible.component.html","src/app/modules/patients/pages/modal-switch-responsible/modal-switch-responsible.component.scss","src/app/modules/patients/pages/index/index.component.ts","src/app/modules/patients/pages/index/index.component.scss","src/app/modules/patients/pages/patient-record/float-button/float-button.component.html","src/app/modules/patients/pages/patient-record/float-button/float-button.component.ts","src/app/modules/patients/pages/patient-record/float-button/float-button.component.scss","src/app/modules/patients/pages/patient-record/patient-record.component.html","src/app/modules/patients/services/patient-record.service.ts","src/app/modules/patients/pages/patient-record/patient-record.component.ts","src/app/modules/patients/pages/patient-record/patient-record.component.scss","src/app/modules/patients/pages/patient-record/record-card/record-card.component.ts","src/app/modules/patients/pages/patient-record/record-card/record-card.component.html","src/app/modules/patients/pages/patient-record/record-card/record-card.component.scss","src/app/modules/patients/patients-routing.module.ts","src/app/modules/patients/patients.module.ts","src/app/shared/data/Brazilian-states.ts","src/app/modules/historic/modal-cancel-retention/modal-cancel-retention.component.ts","src/app/modules/historic/modal-cancel-retention/modal-cancel-retention.component.html","src/app/modules/historic/modal-cancel-retention/modal-cancel-retention.component.scss","src/app/modules/document/pages/modal-list-victa-protocol/modal-list-victa-protocol.component.ts","src/app/modules/document/pages/modal-list-victa-protocol/modal-list-victa-protocol.component.html","src/app/modules/document/pages/modal-list-victa-protocol/modal-list-victa-protocol.component.scss","src/app/modules/historic/form-filter/form-filter.component.ts","src/app/modules/historic/form-filter/form-filter.component.html","src/app/modules/historic/form-filter/form-filter.component.scss","src/app/modules/historic/historic-routing.module.ts","src/app/modules/historic/historic.module.ts","src/app/modules/document/pages/orientation/orientation.service.ts","src/app/modules/external-document/services/client-app.service.ts","src/app/core/services/xml-http-client.service.ts","src/app/modules/entry/services/cep.service.ts","src/app/modules/dashboard/modal-edit-pharmacy-technician/modal-edit-pharmacy-technician.component.ts","src/app/modules/dashboard/modal-edit-pharmacy-technician/modal-edit-pharmacy-technician.component.html","src/app/modules/dashboard/modal-edit-pharmacy-technician/modal-edit-pharmacy-technician.component.scss","src/app/shared/guards/auth.guard.ts","src/app/shared/resolvers/is-veterinarian.resolver.ts","src/app/modules/dashboard/my-data/my-data.component.html","src/app/modules/dashboard/modal-dependent-form/modal-dependent-form.component.ts","src/app/modules/dashboard/modal-dependent-form/modal-dependent-form.component.html","src/app/modules/dashboard/modal-dependent-form/modal-dependent-form.component.scss","src/app/modules/dashboard/modal-edit-pharmacy-covid/modal-edit-pharmacy-covid.component.ts","src/app/modules/dashboard/modal-edit-pharmacy-covid/modal-edit-pharmacy-covid.component.html","src/app/modules/dashboard/modal-edit-pharmacy-covid/modal-edit-pharmacy-covid.component.scss","src/app/modules/dashboard/my-data/my-data.component.ts","src/app/modules/dashboard/my-data/my-data.component.scss","src/app/modules/pharmacy/recipe/recipe.component.html","src/app/modules/pharmacy/recipe/recipe.component.ts","src/app/modules/pharmacy/recipe/recipe.component.scss","src/app/modules/system-update/system-update.component.ts","src/app/modules/system-update/system-update.component.html","src/app/modules/system-update/system-update.component.scss","src/app/shared/guards/entry.guard.ts","src/app/app-routing.module.ts","src/app/core/interceptors/http-interceptor.service.ts","src/app/app.service.ts","src/app/app.component.ts","src/app/app.component.html","src/app/app.component.scss","src/app/modules/model/select-prescription/select-prescription.component.ts","src/app/modules/model/select-prescription/select-prescription.component.html","src/app/modules/model/select-prescription/select-prescription.component.scss","src/app/modules/user/user.component.ts","src/app/modules/user/user.component.html","src/app/modules/user/user.component.scss","src/app/app.module.ts","src/main.ts"],"names":["API_UL","apiRoot","RennovaService","http","this","get","data","post","providedIn","ExamModelService","prescriberId","toPromise","modelId","orientationModel","put","params","delete","fb","ref","crService","isNewItem","medicamentItems","medications","loading","destroyed$","ReplaySubject","batchForm","group","number","medicationForm","ean","medicament","items","JSON","parse","stringify","valueChanges","pipe","filter","value","length","debounceTime","environment","takeUntil","subscribe","searchMedicament","err","console","error","next","complete","option","push","show","reset","event","stopPropagation","path","find","p","id","includes","elementIndex","document","getElementById","replace","splice","medicamentoBusca","nome","index","caixas","findIndex","caixa","forEach","item","close","reduce","acc","selector","template","IsTelPipe","tel","transform","ddd","parseInt","substring","telWithoutDDD","indexOf","charAt","name","StateService","localStorage","removeItem","appState","stateHash","from","toString","setItem","getItem","state","CoreService","_backendVersion","SMALL_LENGTH_VIEW_PORT","MEDIUM_LENGTH_VIEW_PORT","window","location","origin","toLowerCase","version","v","innerWidth","CpfCnpjApiErrors","HealthProfessional","professionalType","dentist","doctor","pharmacist","biomedic","veterinarian","IsCompleteNamePipe","exec","ProfessionalType","AttestationService","attestation","code","patientId","attestationId","AppVersionComponent","coreService","versionFront","getBackendVersion","versionBack","RetentionService","pdfService","dispensationCode","userId","retention","isRetentionsThirdParties","payload","reason","retentionId","pdf","openPdf","DialogModalComponent","modalService","exibirConteundoExterno","title","subtitle","subtitle2","tplModal","create","nzContent","tplContent","nzFooter","tplFooter","nzClosable","nzWidth","nzMaskClosable","nzOnCancel","nzOnOk","content","destroy","static","Permission","_localStorage","userService","jwtHelperService","token","isTokenExpired","isLoggedIn","user","features","some","f","decodeToken","email","password","tap","res","setSession","clearAvatar","mergeMap","_","target","propertyKey","descriptor","undefined","Object","getOwnPropertyDescriptor","originalMethod","prop","args","arguments","$$noConcurrent","Observable","subscriber","obs","apply","catchError","of","modalRef","cepService","petPatientService","isVeterinarian","displayAlert","submit","onClose","states","furs","Fur","labelAge","form","_id","required","species","sex","race","isApproximateAge","approximateAgeLabel","disabled","dateOfBirth","weight","fur","castration","temperament","microchipNumber","responsible","cpf","cpfValidator","fullname","membership","mothersName","cellphone","telephone","emailContact","address","uf","city","complement","street","neighborhood","cep","pendency","doNotShowAgainPetDataConfirmationModal","getSpecies","patchForm","checkApproximateAge","pet","diffBetweenDate","DateUtils","Date","setValue","result","disable","patchValue","speciesId","getSpeciesId","races","getRaces","date","toISOString","now","dd","String","getDate","padStart","mm","getMonth","getFullYear","enable","consult","erro","controls","logradouro","bairro","localidade","markFormGroup","getRawValue","valid","hide","emit","s","nativeAsync","router","prescriptionService","showDispensations","_allChecked","prescription","patient","healthProfessional","medicaments","every","m","checked","val","medicamentsChecked","getAge","dateStr","moment","isValid","diff","specialties","map","join","dispensations","navigate","DispensationGuard","pdfBase64","retentionService","authService","pharmacyService","notification","extraData","pharmacy","getPharmacy","pharmacyId","getPharmacyByUserId","hidden","include","notSelectedMedicaments","nzClassName","nzComponentParams","selectedMedicaments","modal","okText","afterOpen","getContentComponent","saveRetention","saveRentention","dispensation","thirdParties","base64","identifier","flatMap","medicationName","medicationDispense","apresentacaoCustomizada","quantity","lotNumber","laboratory","laboratorio","cnpj","businessName","business_name_entity","cnpj_entity","phone","prescriptionData","uuid","postDispensation","saveRetentionThirdParty","notify","href","batches","prescriber","saveRetentionOfThirdParties","ConsultEmpty","ConsultNotFound","routes","component","canActivate","DispensationRoutingModule","imports","forChild","providers","exports","DispensationModule","declarations","forRoot","CapitalizePipe","toUpperCase","slice","cel","receivedValue","FormattedCnpjPipe","FormattedCpfPipe","FormattedMapaSipeagroPipe","SafePipe","sanitizer","url","bypassSecurityTrustResourceUrl","ToJsonPipe","isObservable","startWith","SexPetParsedPipe","PipesModule","patientService","healthProfessionalService","pharmacistService","nzModalRef","updateUserEvent","userType","buildCommercialAddressForm","buildAddressForm","cepValidator","logo","isNew","commercialData","completeUser","execute","commercialDataIndex","update","add","stateService","closeModal","isSuccessMsg","isRennova","resend","setTitle","doNotShowAgainModalSuccessPrescription","listenDoNotShowAgainModalSuccessPrescription","switchMap","checkUi","ui","ValidationService","control","log","telefone","celular","setErrors","doNotMatch","emailConfirmation","match","errors","emailMatch","entries","dirty","confirmEmailInput","confirmEmailControl","emailControl","parent","updateValueAndValidity","toLocaleLowerCase","notMatch","mandatoryContact","Soma","Resto","strCPF","i","isCnpjValid","isString","Number","isInteger","Array","isArray","digitsOnly","test","validFormat","numbers","Set","calc","x","factor","sum","digits","format","max","invalidDate","getTime","toDate","invalidBirthdate","min","c","minLengthArray","arr","e","entry","formArray","prescriberPets","getPetsByResponsible","pets","hasDependent","addPetPatient","isAdding","initialState","isResponsible","existingPatient","class","backdrop","keyboard","updateListPatientEvent","PharmacistService","originHost","pharmacistId","BigboostService","birthdate","production","local","apiV1","host","plusGApp","envPlusSecretKey","envPlusSecretKeyIS","envKeySpecialty","envKeyMedicament","envAdminApiKey","maintenance","versionCheckURL","tempoDeValidadeDaSessao","appRedirectV2Enabled","appV2UrlValidationDocument","envCmSereneApiKey","THEMES","ACTIVE_THEME","FormattedCepPipe","TypePatientEnum","patientsService","bigboostService","addPatient","searchEvent","openModalAddPatientEvent","openModalSelectPetEvent","loadingSpinnerEvent","enumTypePatient","alertOptions","nzDuration","minLength","maxLength","noCpf","clearValidators","setValidators","VETERINARIAN","typePatientSelect","ADULT","patientLinked","Boolean","getPatientByCpf","isUnderAge","MINOR","addPatientToProfessional","mensage","status","consultCpf","menorIdade","nonMatchingCpf","getPatientsByUserId","typePatient","AttestationModelService","attestationModel","PrescriptionModelService","prescriptionModel","HealthProfessionalService","healthProfessionalId","petId","type","query","onlyNumbers","pageSize","skip","filtersFast","set","womenOver40","minors","adults","responsibleId","limit","response","blob","Blob","a","createElement","URL","createObjectURL","download","click","file","formData","FormData","append","commercialId","ADMIN_URL","AdminService","logsService","administrator","admin","dataType","filterForm","getPatientsByFilter","reponse","patients","getHealthProfessionalsByProfessionalType","getPharmaciesByFilter","getLogsByFilter","responseType","valor","patch","tenant","ExamService","isPet","material","examType","exam","examId","OrientationModelService","PetPatient","InfusionService","infusion","bsModalService","documentService","rennovaService","deviceService","sendDocumentRequired","showDownloadSignedPdf","doNotShowModalSuccessSendDocument","sendForm","emailChecked","smsChecked","whatsappChecked","sms","compose","celularValidator","whatsapp","validators","requiredEmail","requiredSms","requiredWhatsapp","listenFields","codeIsRennova","navigator","clipboard","writeText","linkAcesso","colorSetting","isDesktop","getPet","getPatient","elements","getElementsByClassName","setAttribute","footer","initForm","getPetById","emailStateinitial","markAsDirty","cellphoneStateInitial","sendEmailsRennova","showModalSuccessSendDocument","someFieldWasChecked","sendDocument","openWhatsAppTab","userLogin","getControllerUserUi","downloadOrGeneratePdf","documentText","getDocumentText","doctorName","getDoctorName","labelCpf","text","encodeURIComponent","open","getDocumentTextVet","getDocument","viewSucessMsg","afterInit","goBack","route","split","confirm","nzTitle","nzOkText","nzCancelText","sent","IsCpfPipe","numeros","digitos","soma","resultado","digitos_iguais","b","parseFloat","VictaProtocolService","groups","protocols","professionals","products","hasError","selectEvent","findAllProducts","findAll","product","active","AutoSizeDirective","elem","className","rows","resize","textarea","nativeElement","style","height","scrollHeight","ngControl","formattedCep","el","onlyNumbersPipe","inputMaxLength","changes","onChange","_inputChange","currentValue","fn","multi","provide","useExisting","DigitOnlyDirective","hasDecimalPoint","navigationKeys","decimal","decimalSeparator","Infinity","inputElement","pattern","regex","RegExp","maybeMin","isNaN","maybeMax","key","ctrlKey","metaKey","newValue","forecastValue","preventDefault","newNumber","pastedInput","getData","clipboardData","pasteData","textData","dataTransfer","focus","pastedContent","sanitizedContent","sanitizeInput","execCommand","setRangeText","selectionStart","start","selectionEnd","end","insertAtCursor","myField","myValue","startPos","endPos","pos","setSelectionRange","triggerEvent","createEvent","initEvent","dispatchEvent","input","isValidDecimal","allowedLength","string","selectedText","getSelection","oldValue","selection","FocusDirective","elementRef","OnlyNumbersDirective","regexStr","keyCode","ch","fromCharCode","renderer","isCPF","isCompleteName","removeAttribute","element","formattedTel","DirectivesModule","AlternativeNavbarCipComponent","themeService","permission","getActiveTheme","logout","getAvatar","avatar","avatarB64","cipFeature","accept","YES","isThemeActiveReceitaDigital","setTheme","FooterMobileComponent","FooterComponent","actualDate","isMobile","isViewPortMobile","IconMenuComponent","activeMenu","setStyle","Document","NavbarComponent","isLoggedOut","visible","functionalities","backendVersion$","events","closeMenu","getCompleteUser","addEventListener","getPharmacistData","getHealthProfessionalData","getPharmacistByUserId","getHealthProfessional","frontendVersion","sidebarMenu","sidebarMenuBlur","queryParams","navigateByUrl","LayoutModule","themes","theme","SharedModule","useValue","emitEvent","login","take","message","ModalTermsAndConditionsComponent","isVisible","_route","registerService","isDisabledButton","isCheckedTerms","routerParam","snapshot","paramMap","verifiedCpf","verified","public_pharmacy","throwError","modalTermsAndConditionsComponent","openModal","privacy","createUrlTree","consultCnpj","erroCodigo","values","markVerified","invalid","logInvalidForm","register","controlVerified","isRegisterDoctor","dadosProfissionais","cfm","pendenteValidacao","textoComplemento","dialogModal","createTplModal","httpError","errMsg","errCode","errorCode","createTplModalContent","contentModalErrorCfmValidate","contentModalErrorCfmConsult","isPharmacyPublic","alreadyExists","accountTypeForm","account","$event","accountCtrl","WelcomeComponent","accountService","accountField","sendEmail","confirmPassword","checkPasswords","mismatch","checkToken","changePassword","activatedRoute","passwordForm","isPasswordStrong","validatePassword","notEqual","weakPassword","activateAccount","PharmacyOptionComponent","pharmacies","selectedPharmacy","getCurrentNavigation","extras","getPharmacies","pharmacyUserId","pathMatch","redirectTo","EntryRoutingModule","isRegisteredByPatient","formChange","isProduction","valueTypeEntryPatient","nomeValidator","checkNoCpf","dateValidator","onResize","handleConsultCpf","addControl","validator","lastCpf","hasPendency","lastDateOfBirth","cpfCtrl","dateCtrl","existsPatient","showModalAddPatient","valueNoCpf","registeredByResponsible","setForm","resetForm","genero","nascimento","animations","opacity","OpenDataService","cnes","openDataService","cdr","STATUS_VALID","isLoading","cnpjValidator","fantasyName","cnae","description","cpfResponsible","confirmEmailValidator","licenseNumber","technicalResponsible","crf","listenAndApplyValitationsPublicPharmacy","detectChanges","distinctUntilChanged","handleConsultCnes","handleConsultCnpj","consultCnes","cnae_entity","cnae_entity_description","pharmacyInformation","business_name","fantasy_name","handleErrorMessageStatusCode102","setDataForm","notExists","fiscal","descricao","razao","fantasia","TermsAndConditionsComponent","specialtyService","i18n","specialtiesOptions","selectedSpecialties","buildForm","getSpecialties","addSpecialty","regionalCouncilLabel","setLocale","birthdateValidator","regionalCouncilNumber","label","mapaSipeagro","array","buildCommercialForm","getRegionalCouncilLabel","getSpecialtiesByType","unshift","specialtiesArray","buildSpecialtyForm","setControl","pop","mae","addressGroup","specialty","specialtiesForm","commercialForm","isDentist","rqe","rqeForm","markAsPristine","isStrong","msg","colors","setBarColors","pwdStrength","checkStrength","getColor","idx","col","getMessage","passedMatches","force","Math","count","consulted","responsibleForm","cpfForm","repeatNameCheckbox","nzChecked","hasPatient","patchFormConsult","hasAccount","disableForm","hideCpf","validateUnderAge","diffDate","ageDate","abs","getUTCFullYear","isNotMinor","updateList","showDependentForm","patientsCache","Map","_form","dependents","cacheDependentId","keys","removePatient","getPatientsById","EntryModule","ModalSearchComponent","param","hasFarmaRennovaFeature","requests","prescriptions","getPrescriptionsPatient","method","Promise","resolve","formatDate","PharmacyService","pharmaciId","isPublic","doNotShowAgainModalNewPortalDigitalSignatures","ModalActivateAccountComponent","closeAll","date1","date2","newDate1","newDate2","date1TimeStamp","date2TimeStamp","calcFormat","daysPassed","monthsPassed","yearsPassed","yrsTxt","mnthsTxt","daysTxt","totalDays","totalSecs","totalMins","totalHours","totalWeeks","round","totalMinutes","totalSeconds","trim","webpackContext","req","webpackContextResolve","__webpack_require__","o","Error","module","prescriptionModelService","orientationModelService","examModelService","attestationModelService","HTTP_STATUS_CONFLICT","documentType","typesOfDocuments","saveDocumentModel","documentModelForm","then","onSuccessCreateFavorite","catch","onFailureCreateFavorite","documentModel","buildPrescriptionForm","buildExamForm","buildAttestationForm","buildOrientationForm","setDocumentModel","setPrescritpionModel","setExamModel","setAttestationModel","setOrientationModel","addPrescription","medicamentId","principio","principle","prescribedQuantity","justification","titleOrientation","orientations","accumulator","medication","dosage","prescriptionTypeId","typeCr","medicamentosFormCtrl","formMedicamentos","arrayText","LibraryService","ManipulatedProfileService","manipulatedProfile","manipulatedProfileId","profileId","md5","hashStr","AdditionalFeatureAccept","Buyer","ManipulatedProfile","RASCUNHO","ENVIADO","Pharmacist","attestationService","examsService","orientationService","retentions","attestations","exams","retentionOfThirdParties","selectedTabIndex","selectedTab","tabs","paginationData","totalRecord","orderBy","sortOrder","scrollConfig","isVisibleModalCancelRetention","navTitle","getPatientByUserId","initData","getBaseFilter","loadPrescriptions","loadAttestations","loadExams","loadOrientations","loadRetentionOfThirdParties","concat","loadingFilter","getPrescriptionsByPrescriberUserId","getRetentionHistoryByFilter","getPrescriptionsByPatientId","dependent","getAttestationsByPrescriberUserId","getAttestationsByPatientId","getExamsByPrescriberUserId","getExamsByPatientId","getOrientationsByPrescriberUserId","getOrientationsByPatientId","getRetentionOfThirdPartiesHistoryByFilter","sessionStorage","clear","loadData","getRetentionHistory","pageIndex","regionalCouncil","getProfessionalTypeName","generatePdf","downloadThirdPartyPdf","isCodeRennova","orientation","updateListPrescriptionEvent","search","modalSendDocumentComponent","archive","unarchive","rennovaFeature","MyPieChartComponent","pieChartOptions","responsive","legend","position","labels","boxWidth","chart","_chart","total","display","baseChart","refresh","d","eventOnClick","onClickAddIndustrialized","onClickAddMedicamentFreeText","onClickAddDataExams","onClickAddTextBox","onClickonShowModelListFavoriteDocument","onClickShowCardCID","onClickAddViewFormAttestation","onClickAddPrecriptionRenew","onClickAddInfusion","onClickAddSereneProtocol","onClickOrientationSerene","viewIndutrialized","viewMedicmanetFreeText","viewDataExams","viewTextBox","viewListFavoriteDocument","viewShowCardCID","viewFormAttestation","viewPrecriptionRenew","viewInfusion","viewSereneLibrary","viewOrientationSerene","hover","AutoWidthInputNumberComponent","step","mobile","getScreenSize","_inputSize","calculateTextWidth","width","innerHeight","getContext","measureText","inputSize","isDisabled","qty","CID_API_URL","CidService","cidService","authorizedByPatient","showDescription","onClickRemoveCardCid","formEmitter","inputSearch","cids","addCid","listenSearchInput","removeControl","findAllByQuery","cid","newControlCid","formArrayItens","removeAt","examService","onClickRemoveCardDataExam","examsFiltereds","examList","at","hasDuplicatedExam","resetInputSearch","examGroup","tuss","idExam","showAlertMsg","alertMsg","isExternalRegister","validatorsFields","disableFields","removeValidators","enabledFields","patchValueForm","checkEmailExists","exists","PersonalDataFormComponent","isPatient","PATIENT","patchFormEvent","changeConsultResponsibleEvent","patientExists","textButton","transformTo","maxSize","placeholder","filename","filenameChange","files","size","reader","FileReader","onload","readAsDataURL","readAsText","InputPasswordComponent","isPasswordVisible","viewProviders","onMedicamentSelected","medicamentSelected","signed","onDelete","onSelect","unitsOfMeasurement","setTimeout","body","attestationDays","typeOfActivity","onClickRemove","attestationsDays","getAttestationsDays","typesOfActivity","getTypesOfActivity","PopoverButtonComponent","shape","placement","onClick","isRennovaFeature","onCLickTab","changeTabSelected","tabDefault","tabSelected","tab","onChangeText","listemText","ComponentsModule","numeroEspecial","numero","startsWith","UserType","buyerService","modelRef","cpfSearched","listnerFieldCpf","setMaskTelephone","statusChanges","isPatientBuyer","identity","CEL","TEL","CEL_TEL","cpfControl","valueCpf","valueIsPatientBuyer","searchData","cpfBuyer","getBuyerByCpf","buyer","findInfoPatientByCpf","save","consultCpfByCpf","libraryService","onAddProtocol","loadingLibraries","libraries","findAllLibraries","protocol","expanded","medicamentCR","loadMedicamentCR","loadingMedicament","medicamentsCR","categories","ThemeService","themeChange","isMrd","t","getTheme","propName","properties","formGroup","ctrl","Prescription","modalref","activateRouter","prefixCode","getTitlePet","DashboardGuard","covidForm","covid","valCovidDB","updateCompleteUser","nzModalService","isModalCipVisible","isModalRqeVisible","isModalWomanVisible","patientWithoutMandatoryInformationRegistered","showModalComplementInfoPatient","PHARMACY","openModalCovid","showModalEditPharmacyThechnical","checkCipAcceptance","checkRQE","womensMonth","hideWomensModal","showModalCovid","month","year","NO","afterClose","ignoreBackdropClick","imageChangedEvent","getPrescriptionByPdf","blobToBase64","DashboardRoutingModule","additionalFeatureService","isVisibleChange","userChange","refuseLoading","acceptLoading","setHeight","heightValue","documentElement","setProperty","NONE","refuseFeature","refreshToken","isAnswered","acceptFeature","healthProfessionalChange","showModalPersonalData","refuseRqe","saved","documentFile","BrazilianBanks","createdAt","updatedAt","deletedAt","isDeleted","profileChange","banks","commercialName","responsibleName","responsibleIdentity","techName","techIdentity","techEmail","bankData","bank","accountType","bankAgency","bankAgencyDigit","bankAccount","bankAccountDigit","zipCode","district","cityName","stateInitials","countryName","profile","personalForm","companyForm","lastCep","numeroRef","customer","creditCard","holder","cardNumber","validateCCNumber","expirationDate","validateExpDate","securityCode","setDate","numberInputRef","controlName","nextField","cancel","submitForm","emitTitle","advance","advanceStep","backStep","fileStepComponent","showWarning","errorMessage","subaccountStepComponent","subscriptionStepComponent","subaccount","subaccountForm","subscription","subscriptionForm","emails","fileForm","IntroComponent","ModalTelemedicineContractComponent","videoConferenceService","async","ModalTelemedicineContractModule","checkWomensMonth","DashboardModule","schemas","Furs","PATIENT_URL","PatientsService","cpfNewReponsible","UnsignedPrescriptionModalComponent","nzWrapClassName","BuyerService","ErrorEvent","alert","SweetalertService","fire","icon","showConfirmButton","timer","confirmButtonColor","allowOutsideClick","isConfirmed","showCancelButton","cancelButtonColor","confirmButtonText","cancelButtonText","titulo","detalhe","htmlTitle","isAlerta","detail","options","html","customClass","container","confirmButton","cancelButton","buttonsStyling","dismiss","logErroElemento","webpackEmptyAsyncContext","SpecialtiesService","UserService","profileAvatar$","tenantId","manipulatedAccepranceTerm","PdfService","_endpoint","draft","layout","showPrescriberCpf","_secretCode","onloadend","binary","atob","len","buffer","ArrayBuffer","view","Uint8Array","charCodeAt","appendChild","remove","jwtHelper","getToken","hasToken","_authService","_tokenService","_sweetalertService","_router","validadeSessao","quinzeSegundos","intervaloDeTempoParaVerificarSeUsuarioEstaAtivo","_validandoSessao","_tempoDeValidadeDaSessao","info","renovarTempoDeSessao","monitorarAtividadeDoUsuario","monitorarSeUsuarioEstaAtivo","clearInterval","_intervalId","validade","unix","verificarValidadeDoToken","bind","setInterval","usuarioEstaAtivo","deslogarUsuarioComNotificacao","tokenEstaExpirado","timeText","notificarWarningComOnClose","removeToken","pararMonitoramentoDeUsuarioInativo","removeEventListener","CoreModule","AdditionalFeatureService","additionalFeature","featureId","FormattedTelPipe","DocumentService","infusionService","_model","model","_patientForm","patientForm","_documentTypeSelected","useV1Endpoint","getAttestation","getExam","getOrientation","getInfusion","getPrescriptionbyCode","generateAndSavePdf","link","callbackUrl","showSendDocumentOnCallback","victaFeature","_plusGApp","_sharedKey","pdfUrl","buildSignPdfPayload","payloadB64","isBeta","urlParams","URLSearchParams","hostname","webhookUrl","username","preferPreview","security","allowAddNewDocument","allowDocumentType","payloadCallbackUrl","allowChangeUsername","getContent","src","signatureSetting","visibleSignatureField","visibleSignatureDateFormat","visibleSignatureCustomTemplateSrc","certificates","filters","validity","computeHmacUrl","payloadJson","payloadEncoded","btoa","nonce","floor","random","RegisterService","adminService","registerType","responsibleSaved","updateResponsible","saveResponsible","savePatient","patientSaved","saveAddPatient","savePetPatient","CrService","q","productName","tipo","translateClassification","classification","substance","factory","sku","prescription_type","removeFormGroupValidators","touched","currentDate","buildPatientForm","buildHealthProfessionalForm","buildPharmacistForm","buildPharmacyForm","isAdmin","emailForm","activationToken","userTypeLogged","getDateOfBirth","rqeCtrl","addSpecialties","utcOffset","printInvalidFields","valueEmail","AppToastService","duration","nzStyle","DocumentUtil","toast","hideEdit","editEvent","deleteEvent","loadingSearchMedicament","updateMedicaments","encapsulation","None","_elementRef","_themeService","_destroy$","Subject","updateTheme","classList","ngModule","themeReceitaDigital","favicon","themeMrd","PrescriptionService","savedPatient","medicamentsRetained","prescriptionCode","unMask","prefix","headers","secretCode","downloadPdfDocument","prescriptionId","PetPatientService","httpParams","k","Patient","selectLayout","patientDoesNotHaveAddress","setBackgroundColorFooter","showAddressForm","getInstance","emitEventAndCloseModal","addressValue","Base64Utils","decodeURIComponent","DocumentGuard","isPrescriber","ngZone","quantidade","allChecked","indeterminate","quantities","availableQuantity","allUnChecked","checkedNumber","refreshStatus","medicinesRetained","run","instance","saveRetentionFeedback","downloadPrescriptionPdf","getRetentionByCode","setInfoInMedicamentsRetained","medicamentRetained","preWriter","contact","hoje","diferencaAnos","initLoading","loadingMore","showPrescriptionTab","showDoctorTab","showPatientTab","UploadPdfComponent","fileList","postFilePdf","unsignedPrescriptionModal","onLoad","iframe","contentWindow","petService","victaProtocolService","manipulatedProfileService","nzBackfill","isPatientNotFound","patientCpf","adding","typesOfDocumentsOptions","documentTypes","documentForm","responsePlus","decode","getManipulatedProfile","fillForm","selectedDocumentModel","getDocumentModel","getManipulatedProfileById","documentsModel","getById","routeConfig","manipulatedprofile","toggleAdding","getPrescriberData","onChangePatient","showModalSelectPet","showModalSearch","inputValue","getPatients","handleResponse","source","valueWithoutCharacters","fullCpf","getPetsByResponsibleCpf","res1","getPets","patientInfo","responsibleExists","isOnlyNumbers","doc","documentSaved","hasDuplicatedMaterials","warn","duplicatedMaterials","findDuplicatedMaterials","duplicatedExams","findDuplicatedExams","findDuplicatedItems","field","sorted_arr","sort","results","selectPrescriptionLayout","saveDocument","previewPdf","generateAndOpenPdf","signPdf","getUrlToSignDocument","responsibleDoesNotHaveAddress","modalSelectLayout","updatedPatient","updatePatientAddress","savedDocumentAndPreviewPdfOrSignPdf","reject","restData","dataPatient","obj","constructor","getProtocols","documentsTemplate","getListDocumentsTemplates","showFavoritePrescriptionsModel","deleteDocumentModel","deleteById","getListByPrescriberId","documentTemplate","getFormError","modelSaved","DocumentRoutingModule","attestationForm","showPatientCpf","onChangeValue","hasForm","showJustification","getMaterials","materials","examForm","examListForm","formExamList","ex","addMaterial","examModel","examsForm","materialForm","formExamItem","examListIndex","filterExists","itemExists","getExamTypes","resFiltered","itemRes","examTypes","list","onChangeJustification","examIndex","protocolSelected","addProtocol","phasesGroups","phases","phase","observation","protocolGroup","protocolIndex","editMode","orientationForm","NavigationComponent","navbarBackGround","brandBackGround","disableNavigation","prescriptionForm","addRow","medicamentsFormCtrl","chooseMedicament","addedMedication","manipuled","removeEmptyMedicaments","addMedicament","medications$","selectedMedicament","formMedicaments","medicamentFormGroup","DocumentModule","LogsService","groupBy","OnlyNumbersPipe","ModalNewPortalDigitalSignaturesComponent","appToastService","doNotShowAgain","patchResponsibleExists","patchResponsibleNotExists","formResponsible","consultResponsible","patchFormResponsible","disabledFields","valuesDisableds","patchFormResponsiblePatientExists","patchFormResponsibleNotPatientExists","disabledFieldsForm","patientValues","disableInputs","isDependent","isUnderThirteenTearsOfAge","responsiblePets","petsCache","patientRecordStyle","recordsArea","tplTitle","hasPet","getPetsById","destroyTplModal","submitPetForm","assign","classModal","sucess","newPatientRegister","loadindSearch","loadindConfirm","loadindConfirmRegister","newResponsibleNotFound","resetLoadings","newResponsible","newReponsible","switchReponsiblePet","switchReponsiblePatient","switchReponsible","disabledButton","displayData","operating","dataSet","loadingSpinner","y","getPatientsByUserIdWithPagination","getPetsWithPagination","removePetPatient","requestPetPatients","requestPatients","allNames","searchForm","modalPatient","hasAccessNewModulePrescription","keyFilter","updateResponsilbePatient","newPatient","patientRecordForm","page","record","records","mainTag","PatientRecordComponent","patientRecordService","patientRecords","recordsToMerge","distinctTags","tags","filteredTags","merging","mergingRecords","all","getTags","requestPatientRecords","paginationIndex","docs","getRecords","children","offsetHeight","scrollTop","updateRecord","mainTagId","recordCreated","mergeRecords","mergeConfirmation","showCheckbox","refreshList","r","tag","parentId","selectChild","selectedTag","submitRecord","tagId","editable","recordInput","recordDeleted","setLoading","addNewRecordToMerge","editingTag","editing","showHistory","showOptions","recordUpdated","deleteRecord","newTag","showTagConfirmation","flag","updatingTag","innerText","PatientsRoutingModule","PatientsModule","BrazilianStates","sigla","activeChange","presentation","amount","measurement","application","preparation","note","isVet","archived","prescriberRegisterNumber","titles","HistoricRoutingModule","HistoricModule","OrientationService","orientationId","ClientAppService","apiKey","_apiKey","payloadChecksum","XmlHttpClient","opts","xhr","XMLHttpRequest","json","statusText","onerror","setRequestHeader","send","CepService","request","makeRequest","formp","sexos","isEditing","socialName","birthDate","formatBirthDate","onDestroyModal","checkLogin","isExpired","HEALTH_PROFESSIONAL","setFullYear","showModal","isPetDataVisible","MAX_FILE_SIZE_BYTES","execute$","updateUserData","privacyPolicy","visibility","updateAvatar","logoChangedEvent","uploadLogo","imageURL","removeLog","currenteDate","dispensationDate","preWriterRegister","EntryGuard","loadChildren","HomeModule","PublicDocumentModule","HealthProfessionalModule","DocumentV2Module","ExternalDocumentModule","ExternalDocumentV2Module","AdminModule","PharmacistModule","FavoriteModelsModule","PublicPharmacyModule","RedirectModule","config","preloadingStrategy","clientAppService","httpRequest","clone","externalApi","isExternalApi","idToken","handle","_versaoAtual","_TEMPO_VERICACAO_VERSAO","env","verificaVersao","first","hash","versao","versaoIsAlterada","confirmDialog","reload","versaoAtual","novaVersao","_location","titleService","_appService","cdf","ev","querySelector","iniciaVerificacaoVersao","SelectPrescriptionComponent","activeModal","UserComponent","AppModule","tokenGetter","useClass","bootstrap","bootstrapModule"],"mappings":"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K,SAAU,oBACVC,SCNa,ylBCAA,88CFmBW,EAAA,KAVb,wXGmMAmtC,GAAgB,QAAhBA,GAAgB,OAAA,EAAA,EAAA,CAAA,CAxI5B,OAAA,EAAA,EAAA,CAAS,CACRz7B,QAAS,CACP,EAAA,EACA,EAAA,EACA,EAAA,EACA,EAAA,EACA,EAAA,EACA,EAAA,EACA,EAAA,EACA,EAAA,EACA,EAAA,EAAcM,UACd,EAAA,EAAYA,QAAQ,CAClB+b,OAAQ,CAACC,EAAA,EAAqBA,EAAA,GAC9BvI,OAAQ9nB,EAAA,EAAYqC,WAGtB,GAAA,EACA,EAAA,EACA,GAAA,EACA,GAAA,EACA,GAAA,EACA,GAAA,EACA,GAAA,EACA,GAAA,EACA,GAAA,EACA,GAAA,EACA,GAAA,EACA,GAAA,EACA,GAAA,EACA,GAAA,EACA,GAAA,EACA,GAAA,EACA,GAAA,EACA,GAAA,EACA,GAAA,EACA,GAAA,EACA,GAAA,EACA,GAAA,EACA,GAAA,EACA,GAAA,EACA,EAAA,EACA,GAAA,EACA,GAAA,EACA,GAAA,EACA,GAAA,EACA,GAAA,GAEF+R,aAAc,CACZi1B,EACA,GACAtC,EACA,EAAA,EACA,GACA,GAAA,EACA,GAAA,EACA,GAAA,EACA2G,GACA,EACAkB,GACA,EACA,EACArC,EACA,GACA,GACA,GACA,EACA,EACA,GACA,EACA,EACA,GACA,GACA,GACA,GAAA,EACA,EAAA,GAEFr4B,QAAS,CACPm1B,EACA,GACAtC,EACA,EAAA,EACA,GACA,GAAA,EACA,GAAA,EACA,GAAA,EACA2G,GACA,EACAkB,GACA,EACA,EACArC,EACA,GACA,GACA,GACA,EACA,EACA,GACA,EACA,EACA,GACA,GACA,GACA,EAAA,EAEA,GAAA,EACA,EAAA,EACA,GAAA,EACA,GAAA,EACA,GAAA,EACA,GAAA,EACA,GAAA,EACA,GAAA,EACA,GAAA,EACA,GAAA,EACA,GAAA,EACA,GAAA,EACA,GAAA,EACA,GAAA,EACA,GAAA,EACA,GAAA,EACA,GAAA,EACA,GAAA,EACA,GAAA,EACA,GAAA,EACA,GAAA,EACA,GAAA,EACA,GAAA,EACA,GAAA,EACA,EAAA,EACA,GAAA,EACA,GAAA,EACA,GAAA,EACA,GAAA,EACA,GAAA,MAGSiD,uCC5Mb,EAAA,EAAA,EAAA,KAAA,WAAA,OAAA,KAAO,MAAMC,EAAkBC,KACvBA,IAEFA,EAAOC,WAAW,SAClBD,EAAOC,WAAW,SAClBD,EAAOC,WAAW,SAClBD,EAAOC,WAAW,SAClBD,EAAOC,WAAW,SAClBD,EAAOC,WAAW,SAClBD,EAAOC,WAAW,4CCTxB,IAAYC,EAAZ,EAAA,EAAA,EAAA,KAAA,WAAA,OAAA,KAAA,SAAYA,GACV,EAAA,QAAA,UACA,EAAA,SAAA,WACA,EAAA,WAAA,aACA,EAAA,MAAA,QACA,EAAA,oBAAA,qBALF,CAAYA,IAAAA,EAAQ,8RC+BP,EAAuB,MAWlC,YACUrxC,EACAwL,EACAiT,EACAnM,EACAg/B,EACAC,EACAv6B,GANA,KAAAhX,GAAAA,EACA,KAAAwL,WAAAA,EACA,KAAAiT,gBAAAA,EACA,KAAAnM,aAAAA,EACA,KAAAg/B,aAAAA,EACA,KAAAC,SAAAA,EACA,KAAAv6B,eAAAA,EAhBD,KAAA7D,OAAS,SACR,KAAAG,cAAgB,IAAI,EAAA,EAE9B,KAAAk+B,aAAc,EACd,KAAA1lC,OAAwB,EAAA,EACxB,KAAAxL,SAAU,EAaRnB,KAAKy7B,YAEP,WACEz7B,KAAKsyC,kBACLtyC,KAAK+M,KACF9M,IAAI,aACJ+B,aAAaC,KAAK,OAAAm4B,EAAA,EAAA,IAClB53B,UAAWL,IACVnC,KAAKuyC,iBAAiBpwC,KAG1BnC,KAAK+M,KAAK9M,IAAI,aAAauyC,cAAchwC,UAAUse,IAClC,UAAXA,EACF9gB,KAAK+M,KAAK9M,IAAI,aAAawQ,UAE3BzQ,KAAK+M,KAAK9M,IAAI,aAAasP,SAAS,IACpCvP,KAAK+M,KAAK9M,IAAI,aAAawP,aAI/BzP,KAAK+M,KACF9M,IAAI,aACJ+B,aAAaC,KAAK,OAAAm4B,EAAA,EAAA,IAClB53B,UAAWL,IACVnC,KAAKuyC,iBAAiBpwC,KAI5B,qBACE,OAAOnC,KAAK+M,KAAK9M,IAAI,kBAAkBkC,MAGzC,mBAAmBA,GACjBnC,KAAK+M,KAAK9M,IAAI,kBAAkBsP,SAASpN,GAG3C,iBACE,OAAOnC,KAAK+M,KAAK9M,IAAI,OAGvB,YACED,KAAK+M,KAAO/M,KAAKa,GAAGU,MAAM,CACxBkxC,eAAgBzyC,KAAKa,GAAG6Y,SAAQ,GAChCrU,KAAMrF,KAAKa,GAAG6Y,QAAQ,GAAI,CAAC,EAAA,EAAWzM,WACtCc,IAAK/N,KAAKa,GAAG6Y,QAAQ,GAAI,CAAC,EAAA,EAAWzM,SAAU,EAAA,EAAkBe,eACjE0kC,SAAU1yC,KAAKa,GAAG6Y,QAAQ,IAC1BtL,UAAWpO,KAAKa,GAAG6Y,QAAQ,GAAI,EAAA,EAAWzM,UAC1CoB,UAAWrO,KAAKa,GAAG6Y,QAAQ,IAC3BnL,QAASvO,KAAKa,GAAGU,MAAM,CACrBiN,GAAIxO,KAAKa,GAAG6Y,QAAQ,GAAI,CAAC,EAAA,EAAWzM,SAAU,EAAA,EAAW8S,UAAU,KACnEtR,KAAMzO,KAAKa,GAAG6Y,QAAQ,GAAI,CAAC,EAAA,EAAWzM,SAAU,EAAA,EAAW8S,UAAU,KACrErR,WAAY1O,KAAKa,GAAG6Y,QAAQ,IAC5BlY,OAAQxB,KAAKa,GAAG6Y,QAAQ,GAAI,CAAC,EAAA,EAAWzM,WACxC0B,OAAQ3O,KAAKa,GAAG6Y,QAAQ,GAAI,CAAC,EAAA,EAAWzM,SAAU,EAAA,EAAW8S,UAAU,KACvEnR,aAAc5O,KAAKa,GAAG6Y,QAAQ,GAAI,CAAC,EAAA,EAAWzM,SAAU,EAAA,EAAW8S,UAAU,KAC7ElR,IAAK7O,KAAKa,GAAG6Y,QACX,GACA,EAAA,EAAWkM,QAAQ,CACjB,EAAA,EAAW3Y,SACX,EAAA,EAAkBoL,aAClB,EAAA,EAAW0H,UAAU,UAO/B,iBAAiB5d,GACf,GAAIA,EAAO,CACT,MAAMwwC,EAAM,mBACNC,EAAM,kBACZ5yC,KAAK6yC,QAA0B,IAAhB1wC,EAAMC,OAAeuwC,EAAMC,GAI9C,kBACE5yC,KAAK8yC,WAAWN,cAAcvwC,KAAK,OAAAm4B,EAAA,EAAA,IAAwB53B,UAAUse,IACnE,MAAMiyB,EAAW/yC,KAAK8yC,WAAW3wC,MAC3B6wC,EAAsBhzC,KAAKyyC,eAClB,UAAX3xB,GAAuB9gB,KAAKyyC,gBAG9BzyC,KAAKqyC,aAAc,EACnBryC,KAAK+M,KAAK7J,MAAM,CAAE6K,IAAKglC,EAAUN,eAAgBO,KAHjDhzC,KAAKizC,WAAWF,KAStB,mBAAmB5vC,GACjB,GAAInD,KAAKqyC,aAC2B,KAA9BlvC,EAAMgI,OAAOhJ,MAAMC,OAAe,CACpC,MAAMyM,EAAM1L,EAAMgI,OAAOhJ,MAAM0B,QAAQ,UAAW,IAC5C3D,QAAaF,KAAKqM,WAAWqE,QAAQ7B,GACtC3O,EAAKyQ,MACR3Q,KAAK+M,KAAK6D,SAAkB,QAAElB,WAAW,CACvClB,GAAItO,EAAKsO,GACTG,OAAQzO,EAAK2Q,WACbjC,aAAc1O,EAAK4Q,OACnBrC,KAAMvO,EAAK6Q,WACXvP,OAAQ,KACRqN,IAAK3O,EAAK2O,OAOpB,WAAWqkC,GACT,MAAMnlC,EAAMmlC,EAASrvC,QAAQ,UAAW,IACxC7D,KAAKmB,SAAU,EACfnB,KAAKmyC,aAAagB,cAAcplC,GAAKvL,UACnC4wC,IACMA,EACFpzC,KAAK86B,YAAYsY,GAEjBpzC,KAAKqzC,qBAAqBtlC,IAG9BrL,IACE1C,KAAKmB,SAAU,EACfwB,QAAQC,MAAMF,GACd1C,KAAKmT,aAAauC,OAAO,QAAS,kCAKxC,eAAe+8B,GACb,GAAIA,EAAAA,CACF,GAAIzyC,KAAK4R,QAAQ5E,IAAK,CACpB,MAAM9M,EAASF,KAAK4R,QAAQ9D,YAAc9N,KAAK4R,QAAQ9D,YAAc9N,KAAK4R,QAC1E5R,KAAK86B,YAAY56B,SAGnBF,KAAKqyC,aAAc,EACnBryC,KAAK+M,KAAK7J,QAId,YAAYhD,GACVF,KAAK+M,KAAK2C,WAAWxP,GACrBF,KAAK+M,KAAK9M,IAAI,QAAQsP,SAASrP,EAAKmF,MACpCrF,KAAKmB,SAAU,EACfnB,KAAKqyC,aAAc,EAGrB,OACE,OAAArhC,EAAA,EAAA,CAAchR,KAAK+M,MACf/M,KAAK+M,KAAKmE,QAAUlR,KAAKmB,UAC3BnB,KAAKmB,SAAU,EACfnB,KAAKmyC,aAAamB,KAAKtzC,KAAK+M,KAAK5K,OAAOK,UACtC4wC,IACMA,IACFpzC,KAAKmU,cAAc/C,KAAKgiC,EAAMrlC,KAC9B/N,KAAKoyC,SAASvoC,YAGlBnH,IACE1C,KAAKmT,aAAauC,OAAO,QAAS,kCAAmChT,EAAIE,MAAMqwB,UAAQ,KAGvFjzB,KAAKmB,SAAU,KAMvB,QACEnB,KAAKoyC,SAAS7tC,QAGR,qBAAqBwJ,GAC3B/N,KAAK6X,eACF4gB,cAAc1qB,GACd9L,KACC,OAAAqX,EAAA,EAAA,CAAUs1B,GACJA,EACK5uC,KAAK6X,eAAe4I,gBAAgB1S,GAEtC,OAAA5B,EAAA,EAAA,CAAG,QAGb3J,UACEoP,IACC,GAAIA,EAAS,CACX,MAAM1R,EAAS0R,EAAQ9D,YAAc8D,EAAQ9D,YAAc8D,EAC3D5R,KAAK86B,YAAY56B,QAEjBF,KAAKuzC,gBAAgBxlC,IAGzBrL,IACE1C,KAAKmB,SAAU,EACfwB,QAAQC,MAAMF,GACd1C,KAAKmT,aAAauC,OAAO,QAAS,iCAKlC,gBAAgB3H,GACtB/N,KAAKsf,gBAAgByB,WAAWhT,GAAKvL,UACnCtC,IACMA,IACEA,EAAK8gB,WACPhhB,KAAKmT,aAAauC,OAChB,UACA,gEAGF1V,KAAK86B,YAAY,CAAEz1B,KAAMnF,EAAK8D,OAEhChE,KAAKmB,SAAU,IAGlByB,IACCD,QAAQC,MAAMA,GACd5C,KAAKmB,SAAU,EACM,MAAjByB,EAAMke,OASR9gB,KAAKmT,aAAauC,OAAO,QAAS,0BARlC1V,KAAKmT,aAAauC,OAChB,QACA,yBACA,sKACA,qCA7QV,EAAA,SASO,EAAA,SAOA,EAAA,SADA,EAAA,SAPA,EAAA,SAUA,EAAA,SARA,EAAA,qCAkBN,EAAA,kBACA,EAAA,yBACA,EAAA,KA0GD,OAAA,EAAA,EAAA,CAAA,CADCpE,EAAA,2JA5GU,EAAuB,OAAA,EAAA,EAAA,CAAA,CALnC,OAAA,EAAA,EAAA,CAAU,CACT5M,SAAU,uBACVC,SC5Ba,g6bCAA,stCF2CC,EAAA,EACQ,EAAA,EACK,EAAA,EACH,EAAA,EACA,EAAA,EACJ,EAAA,EACM,EAAA,KAlBf,4IGnBA,EAA8B,MAQzC,YACUyH,EACAonC,EACAzyC,GAFA,KAAAqL,SAAAA,EACA,KAAAonC,eAAAA,EACA,KAAAzyC,UAAAA,EARA,KAAA0yC,cAAgB,IAAI,EAAA,EAE9B,KAAAC,kBAAmB,EACnB,KAAAC,UAAuB,GAQvB,WACE3zC,KAAK4zC,mBAGP,mBACE5zC,KAAK0zC,kBAAmB,EACxB1zC,KAAKwzC,eAAexK,SAASxmC,UAAUmxC,IACrC3zC,KAAK2zC,UAAYA,EACjB3zC,KAAK0zC,kBAAmB,IAI5B,uBAAuBG,GACrBA,EAASC,UAAYD,EAASC,SACzBD,EAASE,oBACN/zC,KAAKg0C,iBAAiBH,GAIhC,uBAAuBA,GACrBA,EAASI,mBAAoB,EAC7B,MAAMC,QAAsBl0C,KAAKe,UAAU0B,iBAAiBoxC,EAASnyC,KAAKnB,YAC1E,GAAI2zC,EAAc9xC,OAAS,EAAG,CAC5B,MAAM2xC,EAAeG,EAAc,GACnCL,EAASE,aAAe,CACtB/vC,KAAM+vC,EAAa/vC,KACnB4gC,mBAAoBmP,EAAanP,mBACjCC,OAAQkP,EAAalP,OACrBljB,KAAM,iBACN3M,YAAa++B,EAAa/+B,YAC1BJ,wBAAyBm/B,EAAan/B,wBACtCuvB,UAAW4P,EAAa5P,WAE1B0P,EAASI,mBAAoB,GAIjC,kBAAkBJ,GACXA,EAASE,oBACN/zC,KAAKg0C,iBAAiBH,GAE9B7zC,KAAKyzC,cAAcriC,KAAKyiC,GAG1B,iBACE,OAAI7zC,KAAK2zC,UAAUvxC,OAAS,EACnBpC,KAAK2zC,UAAU,GAAGQ,WAEpB,GAGT,QACEn0C,KAAKoM,SAAS+E,qCAzET,EAAA,SADA,EAAA,SAHA,EAAA,0CAYN,EAAA,yBAEA,EAAA,KAHU,EAA8B,OAAA,EAAA,EAAA,CAAA,CAL1C,OAAA,EAAA,EAAA,CAAU,CACTzM,SAAU,8BACVC,SCTa,s1JCAA,8gGFqBO,EAAA,EACM,EAAA,EACL,EAAA,KAXV,gIGJAyvC,EAAY,MAGvB,YACyB1hB,EACMC,EACrB/qB,GAFe,KAAA8qB,OAAAA,EACM,KAAAC,MAAAA,EACrB,KAAA/qB,YAAAA,EALV,KAAAysC,YAAc,IAAI,EAAA,EAOZr0C,KAAK4H,YAAY0sC,MACnBt0C,KAAK6wB,SAAS,aAEd7wB,KAAK6wB,SAAS,yBAIlB,SAASxrB,GACP,MAAMstB,EAAQ3yB,KAAK0yB,OAAOpvB,KAAKixC,GAAKA,EAAElvC,OAASA,GAC/C,IAAKstB,EACH,MAAM,IAAI6P,MAAM,qBAAqBn9B,MAEvC,OAAOstB,EAGT,iBACE,OAAO3yB,KAAKw0C,SAASx0C,KAAK2yB,OAG5B,YAAY8hB,GACV,OAAOz0C,KAAKowB,iBAAiBskB,WAAWD,GAG1C,SAASpvC,GACPrF,KAAK2yB,MAAQttB,EACbrF,KAAKq0C,YAAYjjC,KAAKpR,KAAKowB,kBAG7B,cAAcuC,GACZ3yB,KAAK0yB,OAAO1vB,KAAK2vB,GAGnB,YAAYttB,EAAcqvC,GACxB,MAAM/hB,EAAQ3yB,KAAKw0C,SAASnvC,GAC5BstB,EAAM+hB,WAAa,IACd/hB,EAAM+hB,cACNA,GAGDrvC,IAASrF,KAAK2yB,OAChB3yB,KAAKq0C,YAAYjjC,KAAKuhB,yDA5CvB,EAAA,EAAM,KAAA,CAAC,EAAA,qCACP,EAAA,EAAM,KAAA,CAAC,EAAA,YAZH,EAAA,IAOIyhB,EAAY,OAAA,EAAA,EAAA,CAAA,CAHxB,OAAA,EAAA,EAAA,CAAW,CACVh0C,WAAY,uDAQW,EAAA,KANZg0C,sCCRb,EAAA,EAAA,EAAA,KAAA,WAAA,OAAA,KAAA,IAAA,EAAA,EAAA,QAEO,SAASpjC,EACd2jC,EACA5xC,EAA0C,eAEtC4xC,EAAU/jC,UACZrF,OAAOk0B,KAAKkV,EAAU/jC,UAAUvM,QAAQooB,IACtC,MAAM/S,EAAUi7B,EAAU/jC,SAAS6b,GAC/B/S,aAAmB,EAAA,GACrBA,EAAQ3W,KACR2W,EAAQgB,0BACChB,aAAmB,EAAA,EAC5B1I,EAAc0I,GACLA,aAAmB,EAAA,GAC5BA,EAAQ9I,SAASvM,QAASuwC,GAAoB5jC,EAAc4jC,0CCgBpE,EAAA,EAAA,EAAA,KAAA,WAAA,OAAA,KAAO,MAAMC,uCC/BE,EAAA,EAAA,09OCSF,EAAkC,MAM7C,YAAoBC,EAA8BC,GAA9B,KAAAD,SAAAA,EAA8B,KAAAC,eAAAA,EALxC,KAAAtsB,UAAY,IAAI,EAAA,EAChB,KAAAC,OAAS,IAAI,EAAA,EAMvB,WACE1oB,KAAKyoB,UAAUrX,OAGjB,OACEpR,KAAK0oB,OAAOtX,OACZpR,KAAKuE,QAGP,QACEvE,KAAK80C,SAAS3jC,OAGhB,qBACE,MAAM6jC,EAAah1C,KAAKwH,KAAKvC,UAAU,EAAG,GAC1C,MACiB,SAAf+vC,GAAwC,SAAfA,GAAwC,SAAfA,GAAwC,SAAfA,EAI/E,YACE,GAAIh1C,KAAKuM,eACP,OAAOvM,KAAKi1C,cAEZ,OAAQj1C,KAAKwH,KAAK,IAChB,IAAK,IACH,MAAO,4BACT,IAAK,IACH,MAAO,mCACT,IAAK,IACH,MAAO,6BACT,QACE,MAAO,4BAKf,cAEE,OADmBxH,KAAKwH,KAAKvC,UAAU,EAAG,IAExC,IAAK,OACH,MAAO,4BACT,IAAK,OACH,MAAO,mCACT,IAAK,OACH,MAAO,6BACT,QACE,MAAO,0DA9DN,EAAA,SADA,EAAA,uCASN,EAAA,kBACA,EAAA,KAFU,EAAkC,OAAA,EAAA,EAAA,CAAA,CAL9C,OAAA,EAAA,EAAA,CAAU,CACTP,SAAU,mCACVC,SCNa,ilBCAA,i2BFeiB,EAAA,EAAoC,EAAA,KANvD,8QGAAuwC,EAAc,MACzB,YACUjiC,EACA8E,EACAxG,GAFA,KAAA0B,YAAAA,EACA,KAAA8E,kBAAAA,EACA,KAAAxG,OAAAA,EAIV,kBAAkBoX,EAA+B5iB,GAC/C,MAAMuE,EAAOtK,KAAKiT,YAAY3I,OACxB2sB,EAAmB1xB,aAAaO,QAAQ,cAC9C,GAAsB,eAAlBwE,EAAK4N,WAA8B+e,EAAkB,CACvD,MAAMD,QAAmBh3B,KAAK+X,kBAAkBqf,cAAc9sB,EAAK0C,KAAKzM,YACxE,GAA0B,IAAtBy2B,EAAW50B,OAAc,CAC3B,MAAMiR,EAAW2jB,EAAW,GAC5BzxB,aAAaM,QACX,aACAhE,KAAKE,UAAU,CAAEs1B,eAAgBhkB,EAASlL,OAAQoL,WAAYF,EAASrG,YAGzEhN,KAAKuR,OAAOsB,SAAS,CAAC,2BAA4B,CAAE9M,MAAO,CAAEixB,WAAAA,KAGjE,OAAO,gCA9BF,EAAA,SACA,EAAA,SAFqC,EAAA,IAgB5C,OAAA,EAAA,EAAA,CAAA,CADC1lB,EAAA,uEACwB,EAAA,EAA+B,EAAA,8EAR7C4jC,EAAc,OAAA,EAAA,EAAA,CAAA,CAH1B,OAAA,EAAA,EAAA,CAAW,CACV90C,WAAY,0CAIW,EAAA,EACM,EAAA,EACX,EAAA,KAJP80C,GCTE,wMCYF,EAAmB,MAK9B,YACUhiC,EACArS,EACAuL,EACA+G,GAHA,KAAAD,gBAAAA,EACA,KAAArS,GAAAA,EACA,KAAAuL,SAAAA,EACA,KAAA+G,aAAAA,EARA,KAAAqM,YAAc,IAAI,EAAA,EAU1Bxf,KAAKm1C,UAAYn1C,KAAKa,GAAGU,MAAM,CAC7B6zC,MAAOp1C,KAAKa,GAAG6Y,QAAQ,GAAI,EAAA,EAAWzM,YAI1C,WACE,MAAMooC,EAAar1C,KAAKqT,SAAS+hC,MACjCp1C,KAAKm1C,UAAUvkC,SAASwkC,MAAM7lC,SAAS8lC,GACvCr1C,KAAKm1C,UAAUzlC,WAAW1P,KAAKm1C,UAAUvkC,SAASwkC,OAGpD,cACEp1C,KAAKoM,SAAS+E,OAIhB,WAAW2uB,GACT,GAAc,KAAVA,EACF9/B,KAAKmT,aAAauC,OAAO,UAAW,gBAAW,6CAC1C,CACL,MAAMnC,EAAavT,KAAKqT,SAASrG,IACjChN,KAAKqT,SAAS+hC,MAAQp1C,KAAKm1C,UAAUl1C,IAAI,SAASkC,YAC3BnC,KAAKkT,gBAAgB0F,OAAOrF,EAAYvT,KAAKqT,UAAU9S,YAC9EP,KAAKoM,SAAS+E,OACdnR,KAAKmT,aAAauC,OAAO,UAAW,4CAAuC,qCA7CxE,EAAA,SADA,EAAA,SAIA,EAAA,SADA,EAAA,yCASN,EAAA,oBACA,EAAA,KAyBD,OAAA,EAAA,EAAA,CAAA,CADCpE,EAAA,mJA1BU,EAAmB,OAAA,EAAA,EAAA,CAAA,CAL/B,OAAA,EAAA,EAAA,CAAU,CACT5M,SAAU,kBACVC,SCTa,ivCCAA,41BFkBc,EAAA,EACb,EAAA,EACM,EAAA,EACI,EAAA,KATb,mCGEA,EAAmC,MAO9C,YACU0a,EACAjT,EACA+G,EACAtS,GAHA,KAAAwe,gBAAAA,EACA,KAAAjT,SAAAA,EACA,KAAA+G,aAAAA,EACA,KAAAtS,GAAAA,EARA,KAAAy0C,mBAAqB,IAAI,EAAA,EAWnC,WACEt1C,KAAK+M,KAAO/M,KAAKa,GAAGU,MAAM,CACxBmxC,SAAU,CAAC1yC,KAAK4R,QAAQ8gC,UACxBtkC,UAAW,CAACpO,KAAK4R,QAAQxD,UAAW,EAAA,EAAWnB,UAC/CsB,QAASvO,KAAKa,GAAGU,MAAM,CACrBmN,WAAY,CAAC,IACbD,KAAM,CAACzO,KAAK4R,QAAQrD,QAAUvO,KAAK4R,QAAQrD,QAAQE,KAAO,GAAI,EAAA,EAAWxB,UACzEzL,OAAQ,CAACxB,KAAK4R,QAAQrD,QAAUvO,KAAK4R,QAAQrD,QAAQ/M,OAAS,GAAI,EAAA,EAAWyL,UAC7E0B,OAAQ,CAAC3O,KAAK4R,QAAQrD,QAAUvO,KAAK4R,QAAQrD,QAAQI,OAAS,GAAI,EAAA,EAAW1B,UAC7E2B,aAAc,CACZ5O,KAAK4R,QAAQrD,QAAUvO,KAAK4R,QAAQrD,QAAQK,aAAe,GAC3D,EAAA,EAAW3B,UAEb4B,IAAK,CAAC7O,KAAK4R,QAAQrD,QAAUvO,KAAK4R,QAAQrD,QAAQM,IAAM,GAAI,EAAA,EAAW5B,UACvEuB,GAAI,CAACxO,KAAK4R,QAAQrD,QAAUvO,KAAK4R,QAAQrD,QAAQC,GAAK,GAAI,EAAA,EAAWvB,cAM3E,aAEE,GADA,OAAA,EAAA,EAAA,CAAcjN,KAAK+M,MACf/M,KAAK+M,KAAKmE,MACZ,IACE,MAAMhR,EAAO,IACRF,KAAK4R,QACR8gC,SAAU1yC,KAAK+M,KAAK9M,IAAI,YAAYkC,MACpCiM,UAAWpO,KAAK+M,KAAK9M,IAAI,aAAakC,MACtCoM,QAAS,IACJvO,KAAK+M,KAAK9M,IAAI,WAAWkC,QAI1ByP,QAAgB5R,KAAKqf,gBAAgBzG,OAAO5Y,KAAKyH,UAAWvH,GAAMK,YACxEP,KAAKs1C,mBAAmBlkC,KAAKQ,GAC7B5R,KAAKmT,aAAauC,OAAO,UAAW,iCAAkC,MACtE1V,KAAKoM,SAAS+E,OACd,MAAOvO,GACPD,QAAQC,MAAMA,GACd5C,KAAKmT,aAAauC,OAChB,QACA,0DACA,OAMR,cACE,OACG1V,KAAK4R,QAAQrD,SACbvO,KAAK4R,QAAQrD,UACXvO,KAAK4R,QAAQrD,QAAQM,MACrB7O,KAAK4R,QAAQrD,QAAQI,SACrB3O,KAAK4R,QAAQrD,QAAQ/M,SACrBxB,KAAK4R,QAAQrD,QAAQK,eACrB5O,KAAK4R,QAAQrD,QAAQE,OACrBzO,KAAK4R,QAAQrD,QAAQC,iCAnFrB,EAAA,SAGA,EAAA,SAFA,EAAA,SAFA,EAAA,gDAgBN,EAAA,KA+BD,OAAA,EAAA,EAAA,CAAA,CADC8C,EAAA,6IAjCU,EAAmC,OAAA,EAAA,EAAA,CAAA,CAL/C,OAAA,EAAA,EAAA,CAAU,CACT5M,SAAU,oCACVC,SCXa,+xECAA,y+BFsBc,EAAA,EACP,EAAA,EACI,EAAA,EACV,EAAA,KAXH,OGkBA,EAAc,MAmBzB,YACSsO,EACC6E,EACAlP,EACAiP,EACAtG,EACAtH,EACAiJ,EACA6E,EACAvG,EACA2B,EACAoiC,EACAz8B,GAXD,KAAA7F,YAAAA,EACC,KAAA6E,0BAAAA,EACA,KAAAlP,aAAAA,EACA,KAAAiP,eAAAA,EACA,KAAAtG,OAAAA,EACA,KAAAtH,YAAAA,EACA,KAAAiJ,gBAAAA,EACA,KAAA6E,kBAAAA,EACA,KAAAvG,oBAAAA,EACA,KAAA2B,aAAAA,EACA,KAAAoiC,eAAAA,EACA,KAAAz8B,aAAAA,EA9BV,KAAA3X,SAAU,EAMV,KAAAuwB,gBAAkB,GAMlB,KAAA8jB,mBAAoB,EACpB,KAAAC,mBAAoB,EACpB,KAAAC,qBAAsB,EAEd,KAAAt0C,WAAqC,IAAIC,EAAA,EAkBjD,iBACE,IACErB,KAAKiK,YAAYqmB,YAAY9tB,UAAU+tB,GAAWvwB,KAAKwwB,UAAYD,GACnEvwB,KAAKyY,mBAAqBzY,KAAK8xB,kBAG7B9xB,KAAKsK,KAAK4N,WAAa,EAAA,EAAS62B,SAChC/uC,KAAK21C,+CAEL31C,KAAK41C,iCAED51C,KAAKsK,KAAK4N,WAAa,EAAA,EAAS29B,WAC7B71C,KAAKyY,aAAauhB,sBAAyBh6B,KAAKyY,aAAauhB,qBAAqBjsB,IAGrF/N,KAAK81C,iBAFL91C,KAAK+1C,gCAAgC/1C,KAAKyY,eAOhDzY,KAAKg2C,qBACsC,WAAvCh2C,KAAKyY,aAAa5R,kBACpB7G,KAAKi2C,WAGuB,MAA1Bj2C,KAAKyY,aAAatL,KAAenN,KAAKk2C,cAAgBl2C,KAAKm2C,kBAC7Dn2C,KAAK01C,qBAAsB,GAE7B,MAAOhzC,GACPC,QAAQC,MAAMF,GAEhB1C,KAAKmB,SAAU,EAIT,iDACN,GAAInB,KAAKsK,KAAK4N,WAAa,EAAA,EAAS29B,SAAU,CAC5C,MAAM,8CACJnV,SACQ1gC,KAAKiK,YAAY2d,oBAAoB5nB,KAAKsK,KAAK0C,KAAKzM,YACzDmgC,GACH1gC,KAAK4I,aAAa3F,KAAK,EAAA,EAA0C,CAC/Dwa,SAAU,SACVC,UAAU,EACVF,MAAO,cAMP,+CACN,OACGxd,KAAKyY,aAAarK,YAClBpO,KAAKyY,aAAalK,SAClBvO,KAAKyY,aAAalK,UAChBvO,KAAKyY,aAAalK,QAAQM,MAC1B7O,KAAKyY,aAAalK,QAAQI,SAC1B3O,KAAKyY,aAAalK,QAAQ/M,SAC1BxB,KAAKyY,aAAalK,QAAQK,eAC1B5O,KAAKyY,aAAalK,QAAQE,OAC1BzO,KAAKyY,aAAalK,QAAQC,GAIzB,iBACDxO,KAAKyY,aAAa28B,OACrBp1C,KAAKo2C,eAAep2C,KAAKyY,cAI7B,WACE,OAAOzY,KAAKiT,YAAY3I,OAG1B,sBACE,OAAO/E,aAAaO,QAAQ,mBAG9B,kBACE,OAA4B,IAArBwM,IAAS+jC,SAAqC,OAApB/jC,IAASgkC,OAGpC,kBACN,OAAQt2C,KAAKsK,KAAK4N,UAChB,IAAK,UACH,OAAOlY,KAAK6X,eAAekvB,mBAAmB/mC,KAAKsK,KAAK0C,KAAKzM,YAC/D,IAAK,qBACH,OAAOP,KAAK8X,0BAA0Bqa,sBAAsBnyB,KAAKsK,KAAK0C,KAAKzM,YAC7E,IAAK,aACH,OAAOP,KAAKgyB,oBACd,IAAK,QACHhyB,KAAKuR,OAAOsB,SAAS,CAAC,WACtB,MACF,QACE,OAAO7S,KAAKkT,gBAAgBM,oBAAoBxT,KAAKsK,KAAK0C,KAAKzM,aAIrE,YACE,OAAO,IAAI+O,KAGb,iBACE,OAAOtP,KAAKsK,MAAQtK,KAAKsK,KAAKC,SAASjH,KAAKmH,GAAgB,QAAXA,EAAEpF,MAGrD,oBACE,OAAOrF,KAAKywB,YAAczwB,KAAKywB,WAAWC,SAAW,EAAA,EAAwBC,IAG/E,8BACE,OAAO3wB,KAAKsK,MAAQtK,KAAKsK,KAAKC,SAASjH,KAAKmH,GAAgB,kBAAXA,EAAEpF,MAGrD,wBACE,OAAOrF,KAAKsK,MAAQtK,KAAKsK,KAAKC,SAASC,KAAKC,GAAgB,YAAXA,EAAEpF,MAGrD,6BACE,OAAOrF,KAAKsK,MAAQtK,KAAKsK,KAAKC,SAASC,KAAKC,GAAgB,kBAAXA,EAAEpF,MAG7C,qBACN,MAAMorB,EAAazwB,KAAKsK,KAAKC,SAASjH,KAAKmH,GAAgB,QAAXA,EAAEpF,MAEhDorB,GACAA,EAAWC,SAAW,EAAA,EAAwBC,KAC9CF,EAAWC,SAAW,EAAA,EAAwB6lB,KAE9Cv2C,KAAKw1C,mBAAoB,GAIrB,WACyCx1C,KAAKyY,aACfhG,YAAYjI,KAAK6G,QAAqB/F,IAAhB+F,EAAE0pB,aAE3D/6B,KAAKy1C,mBAAoB,GAI7B,OAAO3V,IACLA,EAAQA,GAASA,EAAMj8B,QAAQ,eAAgB,OAExB,KAAjBi8B,EAAM19B,QAAkC,KAAjB09B,EAAM19B,OACV,KAAjB09B,EAAM19B,QAAkBpC,KAAK+/B,wBAAoD,QAA1BD,EAAM76B,UAAU,EAAG,GAG5EjF,KAAKggC,SAASF,GAFd9/B,KAAKmT,aAAauC,OAAO,UAAW,gBAAW,mCAKjD1V,KAAKmT,aAAauC,OAAO,UAAW,gBAAW,iCAK7C,eAAeoqB,GACrB,IACE,MAAMG,QAAsBjgC,KAAKwR,oBAAoB0uB,wBAAwBJ,GAAOv/B,YAEpF,GAAqB,KAAjBu/B,EAAM19B,OAAe,CACvB,GAA6B,IAAzB69B,EAAc79B,OAMhB,YALApC,KAAKmT,aAAauC,OAChB,UACA,gBACA,6FAIJ1V,KAAKuR,OAAOsB,SAAS,CAAC,mCAAoCitB,GAAQ,CAChE/5B,MAAO,CAAEk6B,cAAeA,UAG1BjgC,KAAKuR,OAAOsB,SAAS,CAAC,yBAA0BitB,GAAQ,CACtD/5B,MAAO,CAAE4L,aAAcsuB,KAG3B,MAAOr9B,GACc,MAAjBA,EAAMke,QACR9gB,KAAKmT,aAAauC,OAAO,UAAW,gBAAW9S,EAAMA,MAAMqwB,UAKjE,iBACE,OAAIjzB,KAAKyY,aACA,KAA+B,MAA1BzY,KAAKyY,aAAatL,IAAc,IAAM,OAAOnN,KAAKyY,aAAapT,OAEtE,GAGT,0BACE,aAAarF,KAAK+X,kBAAkBma,sBAAsBlyB,KAAKsK,KAAK0C,KAAKzM,YAG3E,sCACE,OAAO,EAGT,cACEP,KAAKoB,WAAWyB,MAAK,GACrB7C,KAAKoB,WAAW0B,WAGlB,OACE9C,KAAKoM,SAAWpM,KAAK4I,aAAa3F,KAAK,EAAA,EAAsB,CAC3Dwa,SAAU,SACVC,UAAU,IAId,sBACE,OACmG,IAAjG1d,KAAKyY,aAAahG,YAAYvQ,OAAO26B,GAAiC,iBAApBA,EAAU/zB,OAA0B1G,OAI1F,qBACE,OAAOpC,KAAKyY,aAAa5R,kBAAoB,EAAA,EAAiBuZ,aAGhE,iCACE,MAAM/C,EAAe,CACnB5V,UAAWzH,KAAKyY,aAAazL,IAC7B4E,QAAS5R,KAAKyY,cAGFzY,KAAK4I,aAAa3F,KAAK,EAAqC,CACxEua,MAAO,WACPH,aAAAA,EACAI,SAAU,SACVC,UAAU,IAEN9T,QAAQ0rC,mBAAmB9yC,UAAUoP,GAAY5R,KAAKyY,aAAe7G,GAGtE,gCAAgC6G,GACvBzY,KAAKu1C,eAAersC,OAAO,CACvCC,UAAW,EAAA,EACX0K,kBAAmB,CACjB4E,aAAAA,EACAP,SAAUlY,KAAKsK,KAAK4N,UAEtB3O,YAAY,EACZE,gBAAgB,EAChBJ,SAAU,OAGNmtC,WAAWh0C,UAAAA,IAAgBxC,KAAK81C,kBAGxC,eAAer9B,GACb,MAMM4E,EAAe,CACnBhK,SAAUoF,GAEZzY,KAAK4I,aAAa3F,KAAK,EAAqB,CAR1Cwa,UAAU,EACVC,UAAU,EACV+4B,qBAAqB,EAQrBp5B,aAAAA,EACAI,SAAU,SACVC,UAAU,IAId,gBAAgBva,GACdnD,KAAK02C,kBAAoBvzC,EAG3B,aAAaA,GACXnD,KAAKwwB,UAAYrtB,EAAMoR,OAGzB,gBACE,IACE,GAAIvU,KAAKyI,IAAK,CACZzI,KAAKmB,SAAU,SACQnB,KAAKwR,oBAAoBmlC,qBAAqB32C,KAAKyI,MAC5D6L,aAGZtU,KAAKuR,OAAOsB,SAAS,CAAC,gCAFtB7S,KAAKuR,OAAOsB,SAAS,CAAC,2BAK1B,MAAOnQ,GAEP,GADAC,QAAQC,MAAMF,GACK,MAAfA,EAAIoe,OAAgB,CACtB,MAAMvM,QAAevU,KAAKwR,oBAAoBolC,aAAa52C,KAAKyI,KAChEzI,KAAKwR,oBAAoBuB,UAAYwB,EACrCvU,KAAKwR,oBAAoB+9B,SAAWvvC,KAAKuvC,SACzCvvC,KAAKwR,oBAAoBG,aAAe,CACtC2C,cAAc,EACdxC,YAAa,CACX,CACE2B,QAAQ,EACRxB,SAAS,KAIfjS,KAAKuR,OAAOsB,SAAS,CAAC,qCAG1B7S,KAAKmB,SAAU,EAGjB,oBAAoB8X,GAClBjZ,KAAK8Y,aAAa5Y,KAAO,CAAE+Y,UAAAA,GAC3BjZ,KAAKuR,OAAOihB,cAAc,+CAxXrB,EAAA,SAGA,EAAA,SAcY,EAAA,SAbZ,EAAA,SALA,EAAA,SAQA,EAAA,SADA,EAAA,SADA,EAAA,SAHA,EAAA,SAWA,EAAA,SAGA,EAAA,SAFA,EAAA,IAmDP,OAAA,EAAA,EAAA,CAAA,CADClhB,EAAA,iJAoCD,OAAA,EAAA,EAAA,CAAA,CADCA,EAAA,iLA0HD,OAAA,EAAA,EAAA,CAAA,CADCA,EAAA,uJAoCD,OAAA,EAAA,EAAA,CAAA,CADCA,EAAA,0JAuFD,OAAA,EAAA,EAAA,CAAA,CADCA,EAAA,gJAvTU,EAAc,OAAA,EAAA,EAAA,CAAA,CAL1B,OAAA,EAAA,EAAA,CAAU,CACT5M,SAAU,YACVC,SP7Ba,iucOoDS,EAAA,EACe,EAAA,EACb,EAAA,EACE,EAAA,EACR,EAAA,EACK,EAAA,EACI,EAAA,EACE,EAAA,EACE,EAAA,EACP,EAAA,EACE,EAAA,EACF,EAAA,KA/Bb,GC3Bb,MAAMsR,EAAiB,CAAC,CAAE5S,KAAM,GAAI6S,UAAW,EAAgBC,YAAa,CAAC++B,SAMhE2B,EAAsB,QAAtBA,EAAsB,OAAA,EAAA,EAAA,CAAA,CAJlC,OAAA,EAAA,EAAA,CAAS,CACRxgC,QAAS,CAAC,EAAA,EAAaC,SAASL,IAChCO,QAAS,CAAC,EAAA,MAECqgC,GCXE,oBCaF,EAA2B,MAWtC,YACU5jC,EACA6jC,EACA3jC,GAFA,KAAAF,YAAAA,EACA,KAAA6jC,yBAAAA,EACA,KAAA3jC,aAAAA,EAZD,KAAAggB,WAAY,EACX,KAAA4jB,gBAAkB,IAAI,EAAA,EACtB,KAAAC,WAAa,IAAI,EAAA,EAE3B,KAAAluC,MACE,+HACF,KAAAmuC,eAAgB,EAChB,KAAAC,eAAgB,EAQhB,WACEl3C,KAAKm3C,UAAU/wC,OAAO8lC,aAGxB,WACE,OAAOlsC,KAAKiT,YAAY3I,OAI1B,SAASnH,GACPnD,KAAKm3C,UAAU/wC,OAAO8lC,aAGxB,UAAUrhB,GACR,MAAMusB,EAA0B,GAATvsB,EAAH,KACpBlnB,SAAS0zC,gBAAgBzsB,MAAM0sB,YAAY,iBAAkBF,GAG/D,iBACE,OACEp3C,KAAKsK,MACLtK,KAAKsK,KAAKC,SAASjH,KAAKmH,GAAKA,EAAEjD,OAASxH,KAAKwH,MAAMkpB,SAAW,EAAA,EAAwB6mB,KAI1F,QACEv3C,KAAK+2C,gBAAgB3lC,MAAK,GAI5B,eACE,IACEpR,KAAKi3C,eAAgB,QACfj3C,KAAK82C,yBAAyBU,cAAcx3C,KAAKwH,YACjDxH,KAAKiT,YAAYwkC,eAAel3C,YACtCP,KAAKg3C,WAAW5lC,KAAKpR,KAAKsK,MAC1BtK,KAAKuE,QACDvE,KAAK03C,WACP13C,KAAKmT,aAAauC,OAAO,QAAS,iBAAkB,IAEpD1V,KAAKmT,aAAauC,OAChB,QACA,kBACA,iDAGJ,MAAOhT,GACP1C,KAAKmT,aAAauC,OAAO,QAAS,OAAQ,oCAE5C1V,KAAKi3C,eAAgB,EAIvB,eACE,IACEj3C,KAAKk3C,eAAgB,QACfl3C,KAAK82C,yBAAyBa,cAAc33C,KAAKwH,YACjDxH,KAAKiT,YAAYwkC,eAAel3C,YACtCP,KAAKg3C,WAAW5lC,KAAKpR,KAAKsK,MAC1BtK,KAAKuE,QACDvE,KAAK03C,WACP13C,KAAKmT,aAAauC,OAAO,UAAW,eAAgB,IAEpD1V,KAAKmT,aAAauC,OAChB,UACA,2BACA,iDAGJ,MAAOhT,GACP1C,KAAKmT,aAAauC,OAAO,QAAS,OAAQ,oCAE5C1V,KAAKk3C,eAAgB,gCArGhB,EAAA,SACA,EAAA,SAIA,EAAA,kCAQN,EAAA,qBACA,EAAA,2BACA,EAAA,sBACA,EAAA,oBAqBA,EAAA,EAAY,KAAA,CAAC,gBAAiB,CAAC,cAsBhC,OAAA,EAAA,EAAA,CAAA,CADC5lC,EAAA,+IAwBD,OAAA,EAAA,EAAA,CAAA,CADCA,EAAA,+IArEU,EAA2B,OAAA,EAAA,EAAA,CAAA,CALvC,OAAA,EAAA,EAAA,CAAU,CACT5M,SAAU,2BACVC,SDVa,81ZEAA,8pEDyBU,EAAA,EACa,EAAA,EACZ,EAAA,KAdb,uBEDA,EAAwB,MAQnC,YACU4M,EACAuG,EACA3E,GAFA,KAAA5B,OAAAA,EACA,KAAAuG,0BAAAA,EACA,KAAA3E,aAAAA,EAVD,KAAAggB,WAAY,EAEX,KAAA4jB,gBAAkB,IAAI,EAAA,EACvB,KAAAa,yBAA2B,IAAI,EAAA,EAExC,KAAAX,eAAgB,EAQhB,OAAO90C,GACAA,GAGHnC,KAAKuR,OAAOsB,SAAS,CAAC,YAAa,CAAE9M,MAAO,CAAE8xC,uBAAuB,KACrE73C,KAAKuE,SAHLvE,KAAK83C,YAQD,kBACN,IACE93C,KAAKi3C,eAAgB,EACrBj3C,KAAK6R,mBAAmBY,YAAYpO,QAAQgN,SACtB/F,IAAhB+F,EAAE0pB,YACJ1pB,EAAE0pB,WAAY,KAIlB,MAAMgd,QAAc/3C,KAAK8X,0BACtBc,OAAO5Y,KAAK6R,mBAAmB1J,OAAQnI,KAAK6R,oBAC5CtR,YAEHP,KAAKuE,QACLvE,KAAK43C,yBAAyBxmC,KAAK2mC,GACnC/3C,KAAKmT,aAAauC,OAAO,UAAW,UAAW,uBAC/C,MAAO9S,GACPD,QAAQC,MAAMA,GAEhB5C,KAAKi3C,eAAgB,EAGf,QACNj3C,KAAK+2C,gBAAgB3lC,MAAK,iCA1DrB,EAAA,SACA,EAAA,SAGA,EAAA,uCAQN,EAAA,8BACA,EAAA,2BACA,EAAA,oCACA,EAAA,KAoBD,OAAA,EAAA,EAAA,CAAA,CADCE,EAAA,kJAvBU,EAAwB,OAAA,EAAA,EAAA,CAAA,CALpC,OAAA,EAAA,EAAA,CAAU,CACT5M,SAAU,wBACVC,SCTa,klDCAA,w+BFqBK,EAAA,EACmB,EAAA,EACb,EAAA,KAXb,mCGJA,EAAiB,MAK5B,YAAoB9D,GAAA,KAAAA,GAAAA,EAJV,KAAA62B,WAAa,IAAI,EAAA,EAKzB13B,KAAKs/B,MAAQt/B,KAAKa,GAAGU,MAAM,CACzBguC,SAAUvvC,KAAKa,GAAG6Y,QAAQ,IAC1Bs+B,aAAch4C,KAAKa,GAAG6Y,QAAQ,GAAI,EAAA,EAAWzM,YAIjD,WACEjN,KAAKs/B,MAAMt9B,aAAaQ,UAAUL,GAASnC,KAAK03B,WAAWtmB,KAAKjP,IAGlE,SACS4K,GACHA,GACF/M,KAAKs/B,MAAM/vB,SAASxC,GAIxB,WACE,OAAO/M,KAAKs/B,MAGd,WACE,OAAOt/B,KAAKs/B,MAAMr/B,IAAI,gBAAgBkC,MAGxC,eACE,OAAOnC,KAAKs/B,MAAMr/B,IAAI,YAAYkC,MAGpC,aAAaA,GACXnC,KAAKs/B,MAAMr/B,IAAI,YAAYsP,SAASpN,GAGtC,cACE,OAAOnC,KAAKs/B,MAAM/K,QAGpB,mBACE,MAAO,6GAnDS,EAAA,wCAQjB,EAAA,gBAeA,EAAA,KAhBU,EAAiB,OAAA,EAAA,EAAA,CAAA,CAL7B,OAAA,EAAA,EAAA,CAAU,CACT7vB,SAAU,gBACVC,SCLa,0pCCAA,uCFaW,EAAA,KALb,GGRE,ICAA,EAAA,m8FCER,MAAMszC,EAAgC,CAC3C,CACEzwC,KAAM,MACNnC,KAAM,kBACN1B,SAAU,qBACVu0C,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,UACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,6BACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,uBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,6BACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,cACN1B,SAAU,qBACVu0C,UAAW,0BACXC,UAAW,0BACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,WACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,WACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,cACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,aACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,UACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,iBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,0BACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,wBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,kCACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,oCACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,6BACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,iCACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,wCACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,2CACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,gCACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,iBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,8BACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,wCACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,+BACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,wCACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,iCACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,+BACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,sCACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,iCACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,+BACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,kCACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,8BACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,gCACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,+BACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,2CACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,iCACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,sCACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,kCACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,sBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,gBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,uBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,4BACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,kBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,yCACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,uCACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,oBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,4BACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,0BACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,wBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,0BACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,4BACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,6BACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,0CACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,kBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,wBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,uBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,oBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,kCACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,oBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,iBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,mBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,2BACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,4BACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,uBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,MACN1B,SAAU,qBACVu0C,UAAW,0BACXC,UAAW,0BACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,oCACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,iBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,oBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,yBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,uBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,kBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,oBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,kBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,qBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,yBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,qBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,sBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,mBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,mBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,oBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,oBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,oBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,2CACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,qBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,uBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,sBACN1B,SAAU,qBACVu0C,UAAW,0BACXC,UAAW,0BACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,mBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,wBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,qBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,kBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,uBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,yBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,uBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,sBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,yBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,gBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,uBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,sBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,kBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,mBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,gBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,wBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,kBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,mBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,gCACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,iBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,sBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,6BACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,gCACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,kCACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,sBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,mCACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,yBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,iBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,oBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,+BACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,mBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,+BACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,iCACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,6BACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,4BACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,8BACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,eACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,oBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,UACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,2CACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,sBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,oBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,2BACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,mCACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,gCACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,mCACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,mBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,0CACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,8BACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,qBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,8BACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,qBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,sBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,kBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,kBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,gCACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,kCACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,kBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,gCACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,eACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,sBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,0CACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,sBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,mCACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,yBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,6BACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,uCACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,sBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,qCACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,qCACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,+BACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,uBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,mBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,kCACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,kCACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,sBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,qBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,4BACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,iBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,oBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,iCACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,yBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,iBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,iBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,qBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,sBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,oBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,0BACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,sBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,sBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,qBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,mBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,yBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,2BACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,sBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,kBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,mBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,sBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,wCACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,qBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,sBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,sBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,+BACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,mBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,oBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,oCACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,qCACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,4BACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,qBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,iCACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,kBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,qBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,qBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,iBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,gCACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,qBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,yBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,wBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,mBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,sBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,uBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,mBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,wBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,qBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,mBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,mBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,iBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,qBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,mBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,sBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,qBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,kCACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,yBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,sBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,sBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,kBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,kBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,gCACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,kBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,qBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,oBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,mBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,aACN6yC,UAAW,0BACXC,UAAW,0BACXC,UAAW,0BACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,mBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,QACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,SACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,MACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,eACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,MACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,aACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,oBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,oCACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,aACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,qBACN1B,SAAU,qBACVu0C,UAAW,0BACXC,UAAW,0BACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,UACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,eACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,2CACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,yCACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,2CACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,+BACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,0BACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,2BACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,oBACN1B,SAAU,qBACVu0C,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,mBACN6yC,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,gBACN1B,SAAU,qBACVu0C,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,0BACN1B,SAAU,qBACVu0C,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,6CACN1B,SAAU,qBACVu0C,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,0CACN1B,SAAU,qBACVu0C,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,qBACN1B,SAAU,qBACVu0C,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,yCACN1B,SAAU,qBACVu0C,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,6BACN1B,SAAU,qBACVu0C,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,wBACN1B,SAAU,qBACVu0C,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,0BACN1B,SAAU,qBACVu0C,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,GAEb,CACE7wC,KAAM,MACNnC,KAAM,mBACN1B,SAAU,qBACVu0C,UAAW,0BACXC,UAAW,KACXC,UAAW,KACXC,WAAW,oCCviEF,EAAuB,MAiBlC,YACUx3C,EACAwL,EACA4G,EACA6E,GAHA,KAAAjX,GAAAA,EACA,KAAAwL,WAAAA,EACA,KAAA4G,YAAAA,EACA,KAAA6E,0BAAAA,EAnBA,KAAAwgC,cAAgB,IAAI,EAAA,EACpB,KAAA5gB,WAAa,IAAI,EAAA,EAK3B,KAAA/qB,OAAwB,EAAA,EACxB,KAAA4rC,MAAuBN,EAcrBj4C,KAAKs/B,MAAQt/B,KAAKa,GAAGU,MAAM,CACzB8D,KAAMrF,KAAKa,GAAG6Y,QAAQ,GAAI,EAAA,EAAWzM,UACrCurC,eAAgBx4C,KAAKa,GAAG6Y,QAAQ,MAChCg5B,SAAU1yC,KAAKa,GAAG6Y,QAAQ,GAAI,CAAC,EAAA,EAAWqG,UAAU,MACpD04B,gBAAiBz4C,KAAKa,GAAG6Y,QAAQ,MACjCg/B,oBAAqB14C,KAAKa,GAAG6Y,QAAQ,MACrC/O,MAAO3K,KAAKa,GAAG6Y,QAAQ,GAAI,EAAA,EAAWkM,QAAQ,CAAC,EAAA,EAAW3Y,SAAU,EAAA,EAAWtC,SAC/EguC,SAAU34C,KAAKa,GAAG6Y,QAAQ,MAC1Bk/B,aAAc54C,KAAKa,GAAG6Y,QAAQ,MAC9Bm/B,UAAW74C,KAAKa,GAAG6Y,QAAQ,MAC3Bo/B,SAAU94C,KAAKa,GAAGU,MAAM,CACtBw3C,KAAM/4C,KAAKa,GAAGU,MAAM,CAClBiG,KAAMxH,KAAKa,GAAG6Y,QAAQ,GAAI,EAAA,EAAWzM,YAEvC+rC,YAAah5C,KAAKa,GAAGU,MAAM,CACzBiG,KAAMxH,KAAKa,GAAG6Y,QAAQ,GAAI,EAAA,EAAWzM,YAEvCgsC,WAAYj5C,KAAKa,GAAG6Y,QAAQ,GAAI,EAAA,EAAWzM,UAC3CisC,gBAAiBl5C,KAAKa,GAAG6Y,QAAQ,GAAI,EAAA,EAAWzM,UAChDksC,YAAan5C,KAAKa,GAAG6Y,QAAQ,GAAI,EAAA,EAAWzM,UAC5CmsC,iBAAkBp5C,KAAKa,GAAG6Y,QAAQ,GAAI,EAAA,EAAWzM,YAEnDsB,QAASvO,KAAKa,GAAGU,MAAM,CACrB83C,QAASr5C,KAAKa,GAAG6Y,QAAQ,GAAI,EAAA,EAAWzM,UACxC0B,OAAQ3O,KAAKa,GAAG6Y,QAAQ,GAAI,EAAA,EAAWzM,UACvCzL,OAAQxB,KAAKa,GAAG6Y,QAAQ,GAAI,EAAA,EAAWzM,UACvCyB,WAAY1O,KAAKa,GAAG6Y,QAAQ,IAC5B4/B,SAAUt5C,KAAKa,GAAG6Y,QAAQ,GAAI,EAAA,EAAWzM,UACzCssC,SAAUv5C,KAAKa,GAAG6Y,QAAQ,GAAI,EAAA,EAAWzM,UACzCusC,cAAex5C,KAAKa,GAAG6Y,QAAQ,GAAI,EAAA,EAAWzM,UAC9CwsC,YAAaz5C,KAAKa,GAAG6Y,QAAQ,GAAI,EAAA,EAAWzM,cAKlD,WACEjN,KAAKs/B,MAAMt9B,aAAaQ,UAAUL,IAChCnC,KAAK03B,WAAWtmB,KAAKjP,GACjBA,EAAMkD,OACa,OAAjBrF,KAAK05C,QACP15C,KAAK25C,aAAex3C,EACM,OAAjBnC,KAAK05C,UACd15C,KAAK45C,YAAcz3C,MAM3B,WACE,OAAOnC,KAAKiT,YAAY3I,OAG1B,SACSyC,GACHA,GACF/M,KAAKs/B,MAAM/vB,SAASxC,GAIxB,WACE,OAAO/M,KAAKs/B,MAId,sBAAsBoa,GAIpB,GAHA15C,KAAKs4C,cAAclnC,KAAKsoC,GACxB15C,KAAKs/B,MAAMp8B,QAEK,OAAZw2C,EAAkB,CAKpB,GAJA15C,KAAKs/B,MAAMr/B,IAAI,kBAAkBkgB,cAAc,IAC/CngB,KAAKs/B,MAAMr/B,IAAI,mBAAmBkgB,cAAc,IAChDngB,KAAKs/B,MAAMr/B,IAAI,uBAAuBkgB,cAAc,KAE/CngB,KAAK6R,mBAAoB,CAC5B,MAAMA,QAA2B7R,KAAK8X,0BACnCqa,sBAAsBnyB,KAAKsK,KAAK0C,KAChCzM,YACHP,KAAK6R,mBAAqBA,EAG5B,GAAI7R,KAAK25C,aACP35C,KAAKs/B,MAAM/vB,SAASvP,KAAK25C,kBACpB,CACL35C,KAAKs/B,MAAM5vB,WAAW,CACpBgjC,SAAU1yC,KAAK6R,mBAAmB9D,IAClC1I,KAAMrF,KAAK6R,mBAAmBxM,KAC9BsF,MAAO3K,KAAKsK,KAAKK,QAGnB,MAAM,eAAE6N,GAAmBxY,KAAK6R,oBAC1B,QAAEtD,GAAYiK,GAAkBA,EAAe,GACjDjK,GACFvO,KAAKs/B,MAAMr/B,IAAI,WAAWyP,WAAW,IAChCnB,EACH8qC,QAAS9qC,EAAQM,IACjByqC,SAAU/qC,EAAQK,aAClB2qC,SAAUhrC,EAAQE,KAClB+qC,cAAejrC,EAAQC,GACvBirC,YAAa,iBAKnBz5C,KAAKs/B,MAAMr/B,IAAI,mBAAmBkgB,cAAc,CAAC,EAAA,EAAWlT,WAC5DjN,KAAKs/B,MAAMr/B,IAAI,uBAAuBkgB,cAAc,CAAC,EAAA,EAAWlT,WAE5DjN,KAAK45C,aACP55C,KAAKs/B,MAAM/vB,SAASvP,KAAK45C,aAM/B,iBAAiBz3C,GACf,MAAM0M,EAAM1M,EAAM0B,QAAQ,UAAW,IACrC,GAAmB,IAAfgL,EAAIzM,QAAgBpC,KAAK65C,UAAYhrC,EAAK,CAC5C7O,KAAK65C,QAAUhrC,EACf,MAAM3O,QAAaF,KAAKqM,WAAWqE,QAAQ7B,GACtC3O,EAAKyQ,OACR3Q,KAAKs/B,MAAMr/B,IAAI,WAAWyP,WAAW,CACnCf,OAAQzO,EAAK2Q,WACbrP,OAAQ,KACR83C,SAAUp5C,EAAK4Q,OACfuoC,QAASn5C,EAAK2O,IACd0qC,SAAUr5C,EAAK6Q,WACfyoC,cAAet5C,EAAKsO,GACpBirC,YAAa,WAEXv5C,EAAK2Q,YACP7Q,KAAK85C,UAAUnvB,cAAc2C,UAMrC,cAEE,OADA,OAAAtc,EAAA,EAAA,CAAchR,KAAKs/B,OACZt/B,KAAKs/B,MAAM/K,QAGpB,mBACE,MAAO,0FArLF,EAAA,SAEA,EAAA,SADA,EAAA,SAEA,EAAA,qCAeN,EAAA,yBACA,EAAA,sBACA,EAAA,qBAEA,EAAA,GAAS,KAAA,CAAC,wBAsEV,EAAA,KAYD,OAAA,EAAA,EAAA,CAAA,CADCjjB,EAAA,8JAkDD,OAAA,EAAA,EAAA,CAAA,CADCA,EAAA,yJAvIU,EAAuB,OAAA,EAAA,EAAA,CAAA,CALnC,OAAA,EAAA,EAAA,CAAU,CACT5M,SAAU,sBACVC,SCfa,07QCAA,yCFoCC,EAAA,EACQ,EAAA,EACC,EAAA,EACc,EAAA,KArB1B,OGJA,GAAyB,MAWpC,YAAoB9D,EAAyBwL,GAAzB,KAAAxL,GAAAA,EAAyB,KAAAwL,WAAAA,EAVnC,KAAAqrB,WAAa,IAAI,EAAA,EAK3B,KAAA/qB,OAAwB,EAAA,EAMtB3M,KAAKs/B,MAAQt/B,KAAKa,GAAGU,MAAM,CACzBw4C,SAAU/5C,KAAKa,GAAGU,MAAM,CACtB8D,KAAM,CAAC,GAAI,EAAA,EAAW4H,UACtBylC,SAAU,CAAC,IACXr9B,MAAO,CAAC,GAAI,EAAA,EAAWpI,UACvBtC,MAAO,CAAC,GAAI,CAAC,EAAA,EAAWsC,SAAU,EAAA,EAAWtC,QAC7C4D,QAASvO,KAAKa,GAAGU,MAAM,CACrBoN,OAAQ,CAAC,GAAI,EAAA,EAAW1B,UACxBzL,OAAQ,CAAC,GAAI,EAAA,EAAWyL,UACxBqsC,SAAU,CAAC,GAAI,EAAA,EAAWrsC,UAC1BosC,QAAS,CAAC,GAAI,EAAA,EAAWpsC,UACzBssC,SAAU,CAAC,GAAI,EAAA,EAAWtsC,UAC1BusC,cAAe,CAAC,GAAI,EAAA,EAAWvsC,UAC/BwsC,YAAa,CAAC,GAAI,EAAA,EAAWxsC,cAGjC+sC,WAAYh6C,KAAKa,GAAGU,MAAM,CACxB04C,OAAQ,CAAC,GAAI,EAAA,EAAWhtC,UACxBitC,WAAY,CAAC,GAAI,EAAA,EAAqBC,kBACtCC,eAAgB,CAAC,GAAI,EAAA,EAAqBC,iBAC1CC,aAAc,CAAC,GAAI,CAAC,EAAA,EAAWrtC,SAAU,EAAA,EAAW8S,UAAU,GAAI,EAAA,EAAWC,UAAU,SAK7F,WACEhgB,KAAKs/B,MAAMt9B,aAAaQ,UAAUL,GAASnC,KAAK03B,WAAWtmB,KAAKjP,IAGlE,SACS4K,GACHA,GACF/M,KAAKs/B,MAAM/vB,SAASxC,GAIxB,WACE,OAAO/M,KAAKs/B,MAGd,kBACE,MAAMrvB,EAAM,IAAIX,KAEhB,OADAW,EAAIsqC,QAAQtqC,EAAIG,UAAY,IACrBH,EAIT,iBAAiB9N,GACf,MAAM0M,EAAM1M,EAAM0B,QAAQ,UAAW,IACrC,GAAmB,IAAfgL,EAAIzM,QAAgBpC,KAAK65C,UAAYhrC,EAAK,CAC5C7O,KAAK65C,QAAUhrC,EACf,MAAM3O,QAAaF,KAAKqM,WAAWqE,QAAQ7B,GAC3C,IAAK3O,EAAKyQ,KAAM,CACG3Q,KAAKs/B,MAAMr/B,IAAI,YACvBA,IAAI,WAAWyP,WAAW,CACjCf,OAAQzO,EAAK2Q,WACbrP,OAAQ,KACR83C,SAAUp5C,EAAK4Q,OACfuoC,QAASn5C,EAAK2O,IACd0qC,SAAUr5C,EAAK6Q,WACfyoC,cAAet5C,EAAKsO,GACpBirC,YAAa,WAEXv5C,EAAK2Q,YACP7Q,KAAKw6C,eAAe7vB,cAAc2C,UAM1C,cAEE,OADA,OAAA,EAAA,EAAA,CAActtB,KAAKs/B,OACZt/B,KAAKs/B,MAAM/K,QAGpB,mBACE,MAAO,4DAGF,wBAAwBkmB,EAAqBC,GAClD,MAAM9F,EAAO50C,KAAKs/B,MAAMr/B,IAAI,cAAcA,IAAIw6C,GAC1C7F,GAAQA,EAAK1jC,OACfwpC,EAAUptB,uCA3GP,EAAA,SACA,EAAA,yCAaN,EAAA,0BAEA,EAAA,GAAS,KAAA,CAAC,6BAsCV,EAAA,KAkBD,OAAA,EAAA,EAAA,CAAA,CADChc,EAAA,0JA1DU,GAAyB,OAAA,EAAA,EAAA,CAAA,CALrC,OAAA,EAAA,EAAA,CAAU,CACT5M,SAAU,wBACVC,SCXa,+1MCAA,yCFyBW,EAAA,EAAiC,EAAA,KAX9C,QGHA,GAAkB,MAsB7B,YAAoBwO,GAAA,KAAAA,aAAAA,EApBV,KAAArK,MAAQ,IAAI,EAAA,EACZ,KAAA6xC,OAAS,IAAI,EAAA,EACb,KAAAC,WAAa,IAAI,EAAA,EAW3B,KAAAhP,KAAO,EASP,WACE5rC,KAAK66C,UAAU76C,KAAK4rC,MAGtB,WAAWkP,GACLA,EACF96C,KAAK+6C,cAEL/6C,KAAKg7C,WAID,cACY,IAAdh7C,KAAK4rC,MAAc5rC,KAAKi7C,kBAAkB1mB,QAC5Cv0B,KAAKk7C,YAAYl7C,KAAKi7C,kBAAkBE,cACjB,IAAdn7C,KAAK4rC,MAAc5rC,KAAKo7C,wBAAwB7mB,QACzDv0B,KAAKk7C,YAAYl7C,KAAKo7C,wBAAwBD,cACvB,IAAdn7C,KAAK4rC,KACV5rC,KAAKq7C,0BAA0B9mB,QACjCv0B,KAAKk7C,YAAYl7C,KAAKq7C,0BAA0BF,cAEhDn7C,KAAKyM,UAGPzM,KAAK4rC,MAAQ,EACb5rC,KAAK66C,UAAU76C,KAAK4rC,OAIhB,WACY,IAAd5rC,KAAK4rC,MACP5rC,KAAK8I,MAAMsI,KAAK,MAChBpR,KAAK26C,OAAOvpC,SAEZpR,KAAK4rC,MAAQ,EACb5rC,KAAK66C,UAAU76C,KAAK4rC,OAIhB,YAAY3Y,GAClBjzB,KAAKmT,aAAauC,OAAO,UAAW,QAASud,GAGvC,UAAU2Y,GACH,IAATA,EACF5rC,KAAK8I,MAAMsI,KAAK,aACE,IAATw6B,EACT5rC,KAAK8I,MAAMsI,KAAK,sBACE,IAATw6B,GACT5rC,KAAK8I,MAAMsI,KAAK,aAIZ,SACNpR,KAAK46C,WAAWxpC,KAAK,CACnBkqC,WAAYt7C,KAAKu7C,eACjBC,aAAc,IACTx7C,KAAKy7C,iBACRC,OAAQ,CAAC17C,KAAKu7C,eAAe5wC,QAE/BhH,SAAU3D,KAAK27C,SAAS3D,8CA9FrB,EAAA,uCAWN,EAAA,iBACA,EAAA,kBACA,EAAA,sBACA,EAAA,6BAEA,EAAA,GAAS,KAAA,CAAC,oCAGV,EAAA,GAAS,KAAA,CAAC,sCAGV,EAAA,GAAS,KAAA,CAAC,OAZA,GAAkB,OAAA,EAAA,EAAA,CAAA,CAL9B,OAAA,EAAA,EAAA,CAAU,CACTtzC,SAAU,iBACVC,STRa,69BUAA,yCDiCqB,EAAA,KAtBvB,QEJAi3C,GAAc,MAGzB,eAEA,0EAJC,EAAA,KADUA,GAAc,OAAA,EAAA,EAAA,CAAA,CAL1B,OAAA,EAAA,EAAA,CAAU,CACTl3C,SAAU,YACVC,SCJa,o2VCAA,kFFOFi3C,IGPE,qBCSF,GAAsB,MACjC,YAAoB77C,GAAA,KAAAA,KAAAA,EAEpB,QAAQyD,GACN,OAAOxD,KAAKD,KAAKE,IAAS,GAAGqC,EAAA,EAAYzC,4BAA+B2D,KAG1E,OAAOuJ,GACL,OAAO/M,KAAKD,KAAKI,KAAU,GAAGmC,EAAA,EAAYzC,2BAA+BkN,GAG3E,eAAewH,GACb,OAAOvU,KAAKD,KAAKI,KAAU,GAAGmC,EAAA,EAAYzC,2CAA+C,CAAE0U,OAAAA,mCArBtF,GAAA,IASI,GAAsB,OAAA,EAAA,EAAA,CAAA,CAHlC,OAAA,EAAA,EAAA,CAAW,CACVnU,WAAY,0CAGc,GAAA,KADf,QCKAy7C,GAAkC,MAI7C,YACYzvC,EACF6G,EACAsiC,EACApiC,EACA2oC,GAJE,KAAA1vC,SAAAA,EACF,KAAA6G,YAAAA,EACA,KAAAsiC,eAAAA,EACA,KAAApiC,aAAAA,EACA,KAAA2oC,uBAAAA,EAGV,YAEA,WACE,OAAO97C,KAAKiT,YAAY3I,OAI1B,WAAWpK,GACTF,KAAKu1C,eAAe1sB,QAAQ,CAC1BC,QAAS,gBACT3f,UAAW,8CACXQ,OAAQoyC,UACN,UACQ/7C,KAAK87C,uBAAuB5yC,OAAOhJ,GAAMK,YAC/CP,KAAKmT,aAAauC,OAChB,UACA,kCACA,iEAEF1V,KAAK+Y,aACL,MAAOrW,GACPC,QAAQC,MAAMF,GACVA,EAAIE,MAAMqwB,QACZjzB,KAAKmT,aAAauC,OAAO,QAAS,SAAUhT,EAAIE,MAAMqwB,SAEtDjzB,KAAKmT,aAAauC,OAChB,QACA,OACA,sEAQZ,aACE1V,KAAKoM,SAAS+E,OACdnR,KAAKoM,SAAW,oCA3DX,EAAA,SAJA,EAAA,SAGA,EAAA,SADA,EAAA,SAGA,KA2BP,OAAA,EAAA,EAAA,CAAA,CADCkF,EAAA,yJAlBUuqC,GAAkC,OAAA,EAAA,EAAA,CAAA,CAL9C,OAAA,EAAA,EAAA,CAAU,CACTn3C,SAAU,kCACVC,SFXa,i3CEmBS,EAAA,EACC,EAAA,EACG,EAAA,EACF,EAAA,EACU,MATvBk3C,QCSAG,GAA+B,QAA/BA,GAA+B,OAAA,EAAA,EAAA,CAAA,CAZ3C,OAAA,EAAA,EAAA,CAAS,CACRtlC,aAAc,CACZmlC,GACAD,GACA,GACA,EACA,EACA,IAEFvlC,QAAS,CAAC,EAAA,EAAc,EAAA,EAAcM,UAAW,EAAA,GACjDH,QAAS,CAACqlC,OAECG,QCfA,GAAyB,MAIpC,YAAoB/xC,GAAA,KAAAA,YAAAA,EAHX,KAAAkpB,WAAY,EACX,KAAA4jB,gBAAkB,IAAI,EAAA,EAIhC,QACExxC,aAAaM,QAAQ,kBAAmB,QACxC7F,KAAKuE,QAGP,OACE6B,OAAOiiB,KAAK,kCAAmC,UAC/CroB,KAAKuE,QACLvE,KAAKiK,YAAYgyC,mBAAmBz5C,UAAU0I,GAAK3F,aAAaM,QAAQ,kBAAmB,SAGrF,QACN7F,KAAK+2C,gBAAgB3lC,MAAK,kCA1BrB,EAAA,wCASN,EAAA,2BACA,EAAA,KAFU,GAAyB,OAAA,EAAA,EAAA,CAAA,CALrC,OAAA,EAAA,EAAA,CAAU,CACT1M,SAAU,yBACVC,SCLa,68BCAA,q/BFYoB,EAAA,KAJtB,QGmCAu3C,GAAe,QAAfA,GAAe,OAAA,EAAA,EAAA,CAAA,CAxB3B,OAAA,EAAA,EAAA,CAAS,CACR7lC,QAAS,CACP,EAAA,EACAwgC,EACA,EAAA,EAAiBlgC,QAAQ,IACzB,EAAA,EAAYA,UACZqlC,GACA,EAAA,eACA,EAAA,EACA,EAAA,EAAYrlC,QAAQ,CAAE+b,OAAQ,CAACC,EAAA,EAAqBA,EAAA,GAAWvI,OAAQ9nB,EAAA,EAAYqC,YAErF+R,aAAc,CACZ,EACA,EACA,EACA,EACA,GACA,EAAA,EACA,EACA,EAAA,GAEFF,QAAS,CAAC,GACV2lC,QAAS,CAAC,EAAA,EAAwB,EAAA,MAEvBD,uCC3Cb,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,KAAA,WAAA,OAAA,EAAA,wCCEA,EAAA,EAAA,EAAA,KAAA,WAAA,OAAA,KAAO,MAAME,EAAc,CACzB,CAAEtzC,MAAO,WACT,CAAEA,MAAO,WACT,CAAEA,MAAO,YACT,CAAEA,MAAO,eACT,CAAEA,MAAO,gBACT,CAAEA,MAAO,QACT,CAAEA,MAAO,iBACT,CAAEA,MAAO,UACT,CAAEA,MAAO,UACT,CAAEA,MAAO,iBACT,CAAEA,MAAO,kBACT,CAAEA,MAAO,mBACT,CAAEA,MAAO,kBACT,CAAEA,MAAO,qBACT,CAAEA,MAAO,UACT,CAAEA,MAAO,YACT,CAAEA,MAAO,aACT,CAAEA,MAAO,SACT,CAAEA,MAAO,WACT,CAAEA,MAAO,SACT,CAAEA,MAAO,cACT,CAAEA,MAAO,eACT,CAAEA,MAAO,UACT,CAAEA,MAAO,qBACT,CAAEA,MAAO,WACT,CAAEA,MAAO,SACT,CAAEA,MAAO,mBACT,CAAEA,MAAO,oBACT,CAAEA,MAAO,0BACT,CAAEA,MAAO,iBACT,CAAEA,MAAO,WACT,CAAEA,MAAO,YACT,CAAEA,MAAO,YACT,CAAEA,MAAO,iLC9BJ,MAAMuzC,EAAc,cAGdC,EAAe,MAC1B,YAAoBv8C,GAAA,KAAAA,KAAAA,EAEpB,KAAK6R,GACH,OAAO5R,KAAKD,KAAKI,KAAc,GAAG,EAAA,EAAYN,UAAUw8C,IAAezqC,GAGzE,WAAWpO,GACT,OAAOxD,KAAKD,KAAKE,IAAa,GAAG,EAAA,EAAYJ,UAAUw8C,IAAe,CAAE17C,OAAQ,CAAE6C,GAAAA,KAGpF,gBAAgBuK,GACd,OAAO/N,KAAKD,KAAKE,IAAyB,GAAG,EAAA,EAAYJ,UAAUw8C,IAAe,CAChF17C,OAAQ,CAAEoN,IAAAA,KAId,kBAAkBpD,GAChB,OAAO3K,KAAKD,KAAKE,IAAe,GAAG,EAAA,EAAYJ,UAAUw8C,YAAsB1xC,KAGjF,cACE,OAAO3K,KAAKD,KAAKE,IAAe,GAAG,EAAA,EAAYJ,UAAUw8C,KAG3D,mBAAmBl0C,GACjB,OAAOnI,KAAKD,KAAKE,IAAa,GAAG,EAAA,EAAYJ,UAAUw8C,UAAoBl0C,KAG7E,OAAO3E,EAAYtD,GACjB,OAAOF,KAAKD,KAAKW,IAAa,GAAG,EAAA,EAAYb,UAAUw8C,KAAe74C,IAAMtD,GAG9E,WAAW6N,GACT,OAAO/N,KAAKD,KAAKE,IAAS,GAAG,EAAA,EAAYJ,UAAUw8C,aAAuBtuC,KAG5E,oBAAoB7L,GAClB,OAAOlC,KAAKD,KAAKE,IAAS,GAAG,EAAA,EAAYJ,UAAUw8C,WAAsB,CAAE17C,OAAQuB,IAGrF,iBACE,OAAOlC,KAAKD,KAAKI,KAAK,GAAG,EAAA,EAAYN,UAAUw8C,aAAwB,IAGzE,aAAan8C,GACX,OAAOF,KAAKD,KAAKI,KAAK,GAAG,EAAA,EAAYN,UAAUw8C,kBAA6Bn8C,GAG9E,aACE,OAAOF,KAAKD,KAAKE,IAAI,GAAG,EAAA,EAAYJ,UAAUw8C,YAAsB75C,UAAW+f,IAC7E,MAAMC,EAAO,IAAIC,KAAK,CAACF,EAASriB,MAAO,CAAEyhB,KAAM,aACzCe,EAAI/e,SAASgf,cAAc,KACjCD,EAAE/M,KAAOiN,IAAIC,gBAAgBL,GAC7BE,EAAEI,SAAW,gBACbJ,EAAEK,UAIN,mBAAmBvf,GACjB,OAAOxD,KAAKD,KAAKa,OAAO,GAAG,EAAA,EAAYf,UAAUw8C,KAAe74C,KAGlE,cAAcuK,GACZ,OAAO/N,KAAKD,KAAKE,IAAI,GAAG,EAAA,EAAYJ,UAAUw8C,SAAmBtuC,YAGnE,iBAAiBvK,EAAY+4C,GAC3B,OAAOv8C,KAAKD,KAAKW,IACf,GAAG,EAAA,EAAYb,UAAUw8C,KAAe74C,iBAAkB+4C,IAC1D,kCA/EG,EAAA,IASID,EAAe,OAAA,EAAA,EAAA,CAAA,CAD3B,OAAA,EAAA,EAAA,CAAW,CAAEl8C,WAAY,0CAEE,EAAA,KADfk8C,oHCDAE,EAAkC,MAe7C,YAAoB5zC,GAAA,KAAAA,aAAAA,EAEpB,YAEA,eAAepB,GAEb,OADAxH,KAAKwH,KAAOA,EACJA,EAAK,IACX,IAAK,IACL,IAAK,IACHxH,KAAK8I,MAAQ,6BACb,MACF,IAAK,IACH9I,KAAK8I,MAAQ,8BACb,MACF,IAAK,IACH9I,KAAK8I,MAAQ,2BACb,MACF,IAAK,IACH9I,KAAK8I,MAAQ,sCACb,MACF,QACE9I,KAAK8I,MAAQ,+BAGjB9I,KAAKiJ,SAAWjJ,KAAK4I,aAAaM,OAAO,CACvCC,UAAWnJ,KAAKoJ,WAChBC,SAAUrJ,KAAKsJ,UACfC,YAAY,EACZC,QAAS,IACTC,gBAAgB,EAChBC,WAAY,OACZ+yC,gBAAiB,8BACjB9yC,OAAQ,IAAMhH,QAAQgX,IAAI,cAI9B,QACE3Z,KAAKiJ,SAASY,wCA3DG,EAAA,sCAUlB,EAAA,GAAS,KAAA,CAAC,gCAGV,EAAA,GAAS,KAAA,CAAC,aAAc,CAAEC,QAAQ,uBAGlC,EAAA,GAAS,KAAA,CAAC,YAAa,CAAEA,QAAQ,OATvB0yC,EAAkC,OAAA,EAAA,EAAA,CAAA,CAL9C,OAAA,EAAA,EAAA,CAAU,CACT93C,SAAU,kCACVC,SCLa,ydCAA,mzBFuBqB,EAAA,KAfvB63C,4IGCAE,EAAY,MACvB,YAAoB38C,GAAA,KAAAA,KAAAA,EAEb,cAAcgO,GACnB,OAAO/N,KAAKD,KAAKE,IAAW,GAAG,EAAA,EAAYJ,gBAAuBkO,KAGpE,KAAKqlC,GACH,OAAOpzC,KAAKD,KAAKI,KAAY,GAAG,EAAA,EAAYN,eAAuBuzC,GAGrE,YAAYxwC,GACV,IAAIu4C,EAAe,GAUnB,OAPEA,EAFEv4C,EAAMA,iBAAiB+5C,WAEV,UAAU/5C,EAAMA,MAAMqwB,UAGtB,eAAerwB,EAAMke,oBAAoBle,EAAMqwB,UAEhE7sB,OAAOw2C,MAAMzB,GAEN,OAAA,EAAA,EAAA,CAAWA,iCA9Bb,EAAA,IAQIuB,EAAY,OAAA,EAAA,EAAA,CAAA,CADxB,OAAA,EAAA,EAAA,CAAW,CAAEt8C,WAAY,0CAEE,EAAA,KADfs8C,6HCDAG,EAAiB,MAC5B,iBAAiBxf,GACf,EAAA,EAAKyf,KAAK,CACRrT,SAAU,SACVsT,KAAM,UACNj0C,MAAOu0B,EACP2f,mBAAmB,EACnBC,MAAO,OAIX,iBAAiB5f,GACf,EAAA,EAAKyf,KAAK,CACRC,KAAM,UACNj0C,MAAO,gBACPqf,KAAMkV,IAIV,2BAA2BA,EAAa3wB,GACtC,EAAA,EAAKowC,KAAK,CACRC,KAAM,UACNj0C,MAAO,gBACPqf,KAAMkV,EACN6f,mBAAoB,UACpBC,mBAAmB,IAClBha,KAAK3zB,IACFA,GACF9C,EAAQ8C,EAAO4tC,eAKrB,cAAct0C,EAAeu0B,EAAa0f,EAAuB,QAC/D,OAAO,EAAA,EAAKD,KAAK,CACfh0C,MAAAA,EACAqf,KAAMkV,EACN0f,KAAAA,EACAM,kBAAkB,EAClBH,mBAAoB,UACpBI,kBAAmB,UACnBC,kBAAmB,MACnBC,iBAAkB,SAClBL,mBAAmB,IAIvB,eACEM,EACAC,EACA/sC,EACAosC,EAAe,SAEf,MAAMY,EAAY,oBAAoBF,QAEtC,IAEIz2B,EAEA42B,EAJA90C,EAAQ,kBAYZ,GANI6H,GAAQ,CAAC,IAAK,IAAK,IAAK,IAAK,KAAKlN,SAASkN,EAAKmQ,UAClDi8B,EAAO,UACPj0C,EAAQ,iBACR80C,GAAW,GAGTF,EAAS,CAQX12B,EAPmB,6FAGX02B,mDAKH,GAAIE,GAAYjtC,GAAQA,EAAK/N,OAAS+N,EAAK/N,MAAMi7C,OAAQ,CAC9D,MAAMA,EAASltC,EAAK/N,MAAMi7C,OAQ1B72B,EAPmB,6FAGXrW,EAAK/N,MAAMke,aAAa+8B,8CAOlC,MAAMC,EAAe,CACnBf,KAAAA,EACAj0C,MAAAA,EACAi1C,KAAMJ,EACNK,YAAa,CACXC,UAAW,6BACXC,cAAe,wCACfC,aAAc,sCAEhBC,gBAAgB,EAChBf,kBAAkB,EAClBE,kBAAmB,wCACnBC,iBAAkB,oCAClBx2B,OAAAA,GAEF,EAAA,EAAK81B,KAAKgB,GAAS3a,KAAMr4B,IACvB,GAAIA,GAAuB,WAAhBA,EAAIuzC,QAAsB,CACnC,MAAMC,EAA+B36C,SAASC,eAAe,iBAC7D6sC,WAAAA,KACM6N,GACFA,EAAgBv7B,SAEjB,UA9GE85B,EAAiB,OAAA,EAAA,EAAA,CAAA,CAH7B,OAAA,EAAA,EAAA,CAAW,CACVz8C,WAAY,UAEDy8C,uBCRb,SAAS0B,EAAyBnc,GAGjC,OAAOhC,QAAQC,UAAU8C,MAAAA,WACxB,IAAIvmB,EAAI,IAAI4lB,MAAM,uBAAyBJ,EAAM,KAEjD,MADAxlB,EAAEpV,KAAO,mBACHoV,KAGR2hC,EAAyB9e,KAAO,WAAa,MAAO,IACpD8e,EAAyBle,QAAUke,EACnC9b,EAAOjsB,QAAU+nC,EACjBA,EAAyB/6C,GAAK,oICDjBg7C,EAAkB,MAC7B,YAAoBz+C,GAAA,KAAAA,KAAAA,EAEpB,qBAAqB4hB,GACnB,OAAO3hB,KAAKD,KAAKE,IAAS,GAAG,EAAA,EAAYJ,oBAA2B8hB,KAGtE,KAAKkb,GACH,OAAO78B,KAAKD,KAAKI,KAAgB,GAAG,EAAA,EAAYN,mBAA2Bg9B,GAG7E,OAAOr1B,EAAMq1B,GACX,OAAO78B,KAAKD,KAAKW,IAAe,GAAG,EAAA,EAAYb,oBAA2B2H,IAAQq1B,GAGpF,OAAOA,GACL,OAAO78B,KAAKD,KAAKa,OAAkB,GAAG,EAAA,EAAYf,oBAA2Bg9B,EAAU7vB,OAGzF,eAAe9K,GACb,OAAOlC,KAAKD,KAAKE,IAAiB,GAAG,EAAA,EAAYJ,mBAA2B,CAC1Ec,OAAQuB,kCAhCL,EAAA,IAWIs8C,EAAkB,OAAA,EAAA,EAAA,CAAA,CAH9B,OAAA,EAAA,EAAA,CAAW,CACVp+C,WAAY,0CAGc,EAAA,KADfo+C,gLCIAC,EAAW,MACtB,YAAoB1+C,GAAA,KAAAA,KAAAA,EAUpB,YAUE,OATKC,KAAK0+C,iBACR1+C,KAAK0+C,eAAiB1+C,KAAKD,KAAKE,IAAS,GAAG,EAAA,EAAYJ,sBAA6BoC,KACnF,OAAA,EAAA,EAAA,CAAY,GACZ,OAAA,EAAA,EAAA,CAAA,EAAOsuB,OAAAA,KAAa,0BAA4BA,GAChD,OAAA,EAAA,EAAA,CAAWrlB,GACF,OAAA,EAAA,EAAA,CAAG,OAITlL,KAAK0+C,eAGd,cAAa,KAAE17B,EAAI,OAAEzO,IACnB,MAAMrU,EAAO,IAAIgjB,SAGjB,OADAhjB,EAAKijB,OAAO,SAAUH,GACfhjB,KAAKD,KAAKW,IAAS,GAAG,EAAA,EAAYb,qBAA6BK,GAAM+B,KAC1E,OAAA,EAAA,EAAA,CAAI6I,IACF9K,KAAK0+C,eAAiB,OAAA,EAAA,EAAA,CAAGnqC,MAK/B,cACEvU,KAAK0+C,eAAiB,KAGxB,iBAAiBC,GACf,OAAO3+C,KAAKD,KAAKE,IAAS,GAAG,EAAA,EAAYJ,yBAAiC,CAAEc,OAAQ,CAAEg+C,SAAAA,KAGxF,8BAA8Bx2C,GAI5B,aAHuBnI,KAAKD,KACzBE,IAAS,GAAG,EAAA,EAAYJ,yCAAuCsI,KAC/D5H,aACaq+C,0BAGlB,OAAOz2C,EAAQjI,GACb,OAAOF,KAAKD,KAAKW,IAAS,GAAG,EAAA,EAAYb,eAAsBsI,IAAUjI,GAG3E,gCAAgCiI,GAC9B,OAAOnI,KAAKD,KAAKW,IACf,GAAG,EAAA,EAAYb,kDAAgDsI,IAC/D,IAIJ,QAAQxH,GACN,OAAOX,KAAKD,KAAKE,IAAS,GAAG,EAAA,EAAYJ,cAAsB,CAAEc,OAAAA,IAGnE,iBAAiBgK,EAAeg0C,GAC9B,MAAMh+C,EAAS,CAAEgK,MAAAA,GAIjB,OAHIg0C,IACFh+C,EAAiB,SAAIg+C,GAEhB3+C,KAAKD,KAAKE,IAAS,GAAG,EAAA,EAAYJ,qBAA6B,CAAEc,OAAAA,IAG1E,mBACE,OAAOX,KAAKD,KAAKW,IAAS,GAAG,EAAA,EAAYb,oBAA4B,IAGvE,SAAQ,uCACNuZ,EAAsC,8CACtCsnB,IAEA,OAAO1gC,KAAKD,KAAKqkB,MAAW,GAAG,EAAA,EAAYvkB,iBAAyB,CAClEuZ,uCAAAA,EACAsnB,8CAAAA,IAIJ,oBAAoBl9B,GAClB,OAAOxD,KAAKD,KAAKE,IAAS,GAAG,EAAA,EAAYJ,eAAsB2D,QAGjE,eAAc,GAAEA,EAAE,SAAE0U,IAClB,OAAOlY,KAAKD,KAAKI,KACf,GAAG,EAAA,EAAYN,wBACf,CAAE2D,GAAAA,EAAI0U,SAAAA,kCA7GH,EAAA,IAeIumC,EAAW,OAAA,EAAA,EAAA,CAAA,CAHvB,OAAA,EAAA,EAAA,CAAW,CACVr+C,WAAY,0CAGc,EAAA,KADfq+C,gICAAI,EAAU,MAGrB,YAAoB9+C,GAAA,KAAAA,KAAAA,EAFZ,KAAA++C,UAAY,GAAG,EAAA,EAAYj/C,aAInC,eACE,OAAOG,KAAK8+C,UAGd,gBACE9+C,KAAK8+C,UAAY,GAAG,EAAA,EAAY3gC,YAGlC,YAAY3W,EAAcmrB,GACxB,MAAMhyB,EAAS,CAAEgyB,MAAAA,GACjB,OAAO3yB,KAAKD,KAAKE,IAAa,GAAGD,KAAK8+C,aAAat3C,aAAiB,CAAE7G,OAAAA,IAAUJ,YAGlF,oBAAmB,KAAEiH,EAAI,MAAEu3C,GAAQ,EAAK,OAAEC,EAAS,KACjD,MAAMlB,EAAU,CACdn9C,OAAQ,IACHq+C,EACHD,MAAOA,EAAMn5C,WACbq5C,kBAAmBD,EAAOC,mBAAqBD,EAAOC,kBAAkBr5C,aAG5E,OAAO5F,KAAKD,KAAKW,IAAa,GAAGV,KAAK8+C,aAAat3C,SAAa,GAAIs2C,GAASv9C,YAG/E,oBAAoBiH,EAAc03C,EAAc,IAC9C,MAAMv+C,EAASu+C,EAAc,CAAEv+C,OAAQ,CAAEu+C,YAAAA,IAAkB,GAC3D,OAAOl/C,KAAKD,KAAKE,IAAa,GAAGD,KAAK8+C,aAAat3C,IAAQ7G,GAAQJ,YAGrE,YAAYyiB,EAAYxb,GACtB,OAAO,IAAI44B,QAAAA,MAAQ2b,IACjB,MAAMpM,EAAS,IAAIC,WACnBD,EAAOwP,UAAYpD,MAAAA,IACjB,MAAMxnC,EAASo7B,EAAOngC,OAChB1E,QAAY9K,KAAKD,KACpBI,KAAqB,GAAGH,KAAK8+C,mBAAoB,CAAEvqC,OAAAA,EAAQ/M,KAAAA,IAC3DjH,YAEH8/B,EAAQv1B,EAAIwM,MAEdq4B,EAAOG,cAAc9sB,KAIzB,QAAQva,GACN,MAAMsK,EAAYtK,EAAIvI,KAChBk/C,EAASC,KAAKtsC,EAAU6V,MAAM,KAAK,GAAG/kB,QAAQ,MAAO,KACrDy7C,EAAMF,EAAOh9C,OACbm9C,EAAS,IAAIC,YAAYF,GACzBG,EAAO,IAAIC,WAAWH,GAE5B,IAAK,IAAItkC,EAAI,EAAGA,EAAIqkC,EAAKrkC,GAAK,EAC5BwkC,EAAKxkC,GAAKmkC,EAAOO,WAAW1kC,GAG9B,MAAMuH,EAAO,IAAIC,KAAK,CAACg9B,GAAO,CAAE99B,KAAM,oBAChCrK,EAAMsL,IAAIC,gBAAgBL,GAE1BE,EAAI/e,SAASgf,cAAc,KACjChf,SAAS+sC,KAAKkP,YAAYl9B,GAC1BA,EAAE/M,KAAO2B,EACToL,EAAEI,SAAWra,EAAI8mC,SACjB7sB,EAAEvX,OAAS,SACXuX,EAAEK,QACFL,EAAEm9B,uCApFG,EAAA,IAeIhB,EAAU,OAAA,EAAA,EAAA,CAAA,CAHtB,OAAA,EAAA,EAAA,CAAW,CACVz+C,WAAY,0CAKc,EAAA,KAHfy+C,oKCTA,EAAY,oBACd,KAAAiB,UAAY,IAAI,EAAA,EAEzB,WACE,OAA2B,OAApB9/C,KAAK+/C,WAGd,SAAS51C,GACP/D,OAAOb,aAAaM,QAXZ,QAWyBsE,GAGnC,WACE,OAAO/D,OAAOb,aAAaO,QAfnB,SAkBV,cACEM,OAAOb,aAAaC,WAnBZ,SAsBV,oBACE,OAAOxF,KAAKggD,YAAchgD,KAAK8/C,UAAU11C,eAAepK,KAAK+/C,cApBpD,EAAY,OAAA,EAAA,EAAA,CAAA,CADxB,OAAA,EAAA,EAAA,CAAW,CAAE3/C,WAAY,UACb,mCCOA,EAAuB,MAQlC,YACU6/C,EACAC,EACAC,EACAC,GAHA,KAAAH,aAAAA,EACA,KAAAC,cAAAA,EACA,KAAAC,mBAAAA,EACA,KAAAC,QAAAA,EAXD,KAAAC,eAAiB,kBACjB,KAAAC,eAAiB,KACjB,KAAAC,gDAAkDvgD,KAAKsgD,eACxD,KAAAE,kBAAmB,EAEnB,KAAAC,yBAA2Bn+C,EAAA,EAAYuc,wBAS/C,WACElc,QAAQ+9C,KAAK,mCAAgC1gD,KAAKygD,oCAClDzgD,KAAK2gD,uBACL3gD,KAAK4gD,8BACL5gD,KAAK6gD,8BAGP,cACEC,cAAc9gD,KAAK+gD,aAGrB,uBACE,MAAMC,EAAW1uC,IACduG,IAAI7Y,KAAKygD,yBAA0B,WACnCQ,OACH17C,aAAaM,QAAQ7F,KAAKqgD,eAAgBW,EAASp7C,YACnD5F,KAAKwgD,kBAAmB,EAG1B,8BACOxgD,KAAKigD,aAAa51C,aAIvBjE,OAAO2rB,iBAAiB,YAAa/xB,KAAKkhD,yBAAyBC,KAAKnhD,OAAO,GAC/EoG,OAAO2rB,iBAAiB,SAAU/xB,KAAKkhD,yBAAyBC,KAAKnhD,OAAO,GAC5EoG,OAAO2rB,iBAAiB,UAAW/xB,KAAKkhD,yBAAyBC,KAAKnhD,OAAO,IAG/E,8BACEA,KAAK+gD,YAAcK,YAAAA,KACjBphD,KAAKqhD,oBACJrhD,KAAKugD,iDAGV,mBACE,IAAKvgD,KAAKwgD,kBAAoBxgD,KAAKigD,aAAa51C,WAAY,CAC1DrK,KAAKwgD,kBAAmB,EACDx7C,SAASO,aAAaO,QAAQ9F,KAAKqgD,gBAAiB,IAC/D/tC,IAAS2uC,QAEnBjhD,KAAKshD,gCAELthD,KAAKwgD,kBAAmB,GAExBxgD,KAAKwgD,kBAAmB,GAK9B,2BACE,GAAIxgD,KAAKwgD,iBACP,OAGFxgD,KAAKwgD,kBAAmB,EACFxgD,KAAKkgD,cAAcqB,oBAEzBvhD,KAAKshD,gCAAkCthD,KAAK2gD,uBAG9D,gCACE3gD,KAAKwgD,kBAAmB,EACxBM,cAAc9gD,KAAK+gD,aACnB,MAAMS,EAAWl/C,EAAA,EAAYuc,wBAA0B,GAAK,UAAY,SACxE7e,KAAKmgD,mBAAmBsB,2BACtB,iCAAiCD,2CAAAA,KAE/BxhD,KAAKkgD,cAAcwB,cACnB1hD,KAAK2hD,uCAKX,qCACEb,cAAc9gD,KAAK+gD,aACnB36C,OAAOC,SAASsP,KAAO,cACvBvP,OAAOw7C,oBAAoB,YAAa5hD,KAAKkhD,yBAAyBC,KAAKnhD,OAAO,GAClFoG,OAAOw7C,oBAAoB,SAAU5hD,KAAKkhD,yBAAyBC,KAAKnhD,OAAO,GAC/EoG,OAAOw7C,oBAAoB,UAAW5hD,KAAKkhD,yBAAyBC,KAAKnhD,OAAO,iCAvG3E,EAAA,SACA,SACA,EAAA,SANgB,EAAA,IAaZ,EAAuB,OAAA,EAAA,EAAA,CAAA,CAJnC,OAAA,EAAA,EAAA,CAAU,CACT0E,SAAU,sBACVC,SAAU,sCAWc,EAAA,EACC,EACK,EAAA,EACX,EAAA,KAZR,OCJAk9C,EAAU,QAAVA,EAAU,OAAA,EAAA,EAAA,CAAA,CALtB,OAAA,EAAA,EAAA,CAAS,CACRxrC,QAAS,CAAC,EAAA,GACVK,aAAc,CAAC,GACfF,QAAS,CAAC,MAECqrC,gICEAC,EAAwB,MACnC,YAAoB/hD,GAAA,KAAAA,KAAAA,EAEpB,KAAKgiD,GACH,OAAO/hD,KAAKD,KAAKI,KACf,GAAG,EAAA,EAAYN,4BACfkiD,GAIJ,OAAOv6C,EAAMu6C,GACX,OAAO/hD,KAAKD,KAAKW,IACf,GAAG,EAAA,EAAYb,6BAAoC2H,IACnDu6C,GAIJ,yBAAyB55C,EAAQjI,GAC/B,OAAOF,KAAKD,KAAKI,KACf,GAAG,EAAA,EAAYN,kCAAyCsI,IACxDjI,GAIJ,0BAA0BiI,EAAQ65C,GAChC,OAAOhiD,KAAKD,KAAKa,OACf,GAAG,EAAA,EAAYf,6DAAoEsI,KAAU65C,KAIjG,sBAAsB9/C,GACpB,OAAOlC,KAAKD,KAAKE,IAAyB,GAAG,EAAA,EAAYJ,4BAAoC,CAC3Fc,OAAQuB,IAIZ,4BAA4BiG,EAAQjG,GAClC,OAAOlC,KAAKD,KAAKE,IAAS,GAAG,EAAA,EAAYJ,kCAAyCsI,IAAU,CAC1FxH,OAAQuB,IAIZ,cAAcsF,GACZ,OAAOxH,KAAKD,KACTW,IAAS,GAAG,EAAA,EAAYb,6BAAoC2H,WAAe,IAC3EjH,YAGL,cAAciH,GACZ,OAAOxH,KAAKD,KACTa,OAAO,GAAG,EAAA,EAAYf,6BAAoC2H,YAC1DjH,0CA9DE,EAAA,IAWIuhD,EAAwB,OAAA,EAAA,EAAA,CAAA,CAHpC,OAAA,EAAA,EAAA,CAAW,CACV1hD,WAAY,0CAGc,EAAA,KADf0hD,gICHAG,EAAgB,MAC3B,UAAU9/C,GACR,GAAIA,GAAmB,KAAVA,EAAc,CACzB,IAAI0C,EACJ,MAAMmS,EAAgB7U,GAAAA,IAAY,EAAA,GAAkB2C,UAAU3C,GAASA,EAyBvE,OAvBE0C,EADE,OAAA,EAAA,EAAA,CAAemS,IAA2C,IAAzBA,EAAc5U,OAC3C4U,EAAc/R,UAAU,EAAG,GAAK,IAAM+R,EAAc/R,UAAU,EAAG+R,EAAc5U,OAAS,GACrF,OAAA,EAAA,EAAA,CAAe4U,IAAkBA,EAAc5U,OAAS,EAE/D4U,EAAc/R,UAAU,EAAG,GAC3B,IACA+R,EAAc/R,UAAU,EAAG+R,EAAc5U,OAAS,GAClD,IACA4U,EAAc/R,UAAU+R,EAAc5U,OAAS,EAAG4U,EAAc5U,QACzD4U,EAAc5U,OAAS,GAAK4U,EAAc5U,QAAU,EACvD,IAAI4U,EAAc/R,UAAU,EAAG,OAAO+R,EAAc/R,UAAU,KAC3D+R,EAAc5U,QAAU,EAC3B4U,EAAc/R,UAAU,EAAG,GACC,KAAzB+R,EAAc5U,OACjB,IAAI4U,EAAc/R,UAAU,EAAG,OAAO+R,EAAc/R,UACxD,EACA,MACG+R,EAAc/R,UAAU,EAAG+R,EAAc5U,UAExC,IAAI4U,EAAc/R,UAAU,EAAG,OAAO+R,EAAc/R,UACxD,EACA,MACG+R,EAAc/R,UAAU,EAAG+R,EAAc5U,UAEzCyC,KA7BAo9C,EAAgB,OAAA,EAAA,EAAA,CAAA,CAJ5B,OAAA,EAAA,EAAA,CAAK,CACJ58C,KAAM,iBAEP,OAAA,EAAA,EAAA,IACY48C,gOCyBAC,EAAe,MAO1B,YACU1wC,EACAs0B,EACA2H,EACAzH,EACAmc,EACAl6C,EACAlI,GANA,KAAAyR,oBAAAA,EACA,KAAAs0B,mBAAAA,EACA,KAAA2H,YAAAA,EACA,KAAAzH,mBAAAA,EACA,KAAAmc,gBAAAA,EACA,KAAAl6C,WAAAA,EACA,KAAAlI,KAAAA,EAGV,YACE,OAAOC,KAAKoiD,OAGd,UAAUC,GACRriD,KAAKoiD,OAASC,EAGhB,kBACE,OAAOriD,KAAKsiD,aAGd,gBAAgBC,GACdviD,KAAKsiD,aAAeC,EAGtB,2BACE,OAAOviD,KAAKwiD,sBAGd,yBAAyBzf,GACvB/iC,KAAKwiD,sBAAwBzf,EAG/B,mBACE/iC,KAAKiI,WAAWw6C,gBAIlB,kBAAkBj7C,EAAcma,GAC9B,IAAIhe,EAAW,KAqBf,MApBgB,MAAZ6D,EAAK,IAAuC,SAAzBA,EAAKvC,UAAU,EAAG,IAA0B,gBAAT0c,GACxDhe,QAAiB3D,KAAK8lC,mBAAmB4c,eAAel7C,GAAMjH,YAC9DoD,EAASge,KAAO,YACK,MAAZna,EAAK,IAAuC,SAAzBA,EAAKvC,UAAU,EAAG,IAA0B,SAAT0c,GAC/Dhe,QAAiB3D,KAAKytC,YAAYkV,QAAQn7C,GAAMjH,YAChDoD,EAASge,KAAO,SACK,MAAZna,EAAK,IAAuC,SAAzBA,EAAKvC,UAAU,EAAG,IAA0B,gBAAT0c,GAC/Dhe,QAAiB3D,KAAKgmC,mBAAmB4c,eAAep7C,GAAMjH,YAC9DoD,EAASge,KAAO,UACK,MAAZna,EAAK,IAAuB,aAATma,GAC5Bhe,QAAiB3D,KAAKmiD,gBAAgBU,YAAYr7C,GAAMjH,YACxDoD,EAASge,KAAO,cACK,MAAZna,EAAK,IAA0B,MAAZA,EAAK,IAAuB,iBAATma,GAA4BA,EAGzC,QAAzBna,EAAKvC,UAAU,EAAG,IAAyB,uBAAT0c,IAC3Che,QAAiB3D,KAAKwR,oBAAoBsxC,sBAAsBt7C,GAAMjH,YACtEoD,EAASge,KAAO,6BAJhBhe,QAAiB3D,KAAKwR,oBAAoBsxC,sBAAsBt7C,GAAMjH,YACtEoD,EAASge,KAAO,oBAMXhe,EAGT,QAAQ6D,GACN,OAAOxH,KAAKD,KAAKW,IAAI,GAAG,EAAA,EAAYb,oBAAoB2H,YAAgB,IAG1E,UAAUA,GACR,OAAOxH,KAAKD,KAAKa,OAAO,GAAG,EAAA,EAAYf,oBAAoB2H,aAG7D,UAAUm3C,GACR,OAAO3+C,KAAKD,KAAKE,IAAS,GAAG,EAAA,EAAYJ,0BAA2B,CAAEc,OAAQ,CAAEg+C,SAAAA,KAIlF,yBAAyBn3C,EAAcw3C,EAAS,IAC9C,MAAMv2C,QAAYzI,KAAKiI,WAAW86C,mBAAmB,CAAEv7C,KAAAA,EAAMu3C,OAAO,EAAMC,OAAAA,IACpEgE,EAAOr/C,SAASgf,cAAc,KACpCqgC,EAAK73C,OAAS,SACd63C,EAAKrtC,KAAOlN,EAAI6O,IAChB0rC,EAAKlgC,SAAWra,EAAI8mC,SACpByT,EAAKjgC,QACLigC,EAAKnD,SAIP,4BAA2B,KACzBr4C,EAAI,QACJhB,EAAO,WACPqP,EAAU,UACVpO,EAAS,MACT0C,EAAK,OACL60C,EAAM,QACN12C,EAAO,YACP26C,EAAW,2BACXC,GAA6B,EAAI,aACjCC,IAEIA,GACFnjD,KAAKojD,UAAY,GAAG,EAAA,EAAY/kC,2BAChCre,KAAKqjD,WAAa,EAAA,EAAY9kC,qBAE9Bve,KAAKojD,UAAY,GAAG,EAAA,EAAY/kC,0BAChCre,KAAKqjD,WAAa,EAAA,EAAY/kC,kBAGhC,IACE,MAAM,SAAEixB,EAAUj4B,IAAKgsC,SAAiBtjD,KAAKiI,WAAW86C,mBAAmB,CAAEv7C,KAAAA,EAAMw3C,OAAAA,IACnF,IAAKsE,EACH,MAAM9gB,MAAM,qBAGd,OAAOxiC,KAAKujD,oBAAoB,CAC9BhU,SAAAA,EACA+T,OAAAA,EACAztC,WAAAA,EACApO,UAAAA,EACAD,KAAAA,EACAhB,QAAAA,EACA2D,MAAAA,EACA7B,QAAAA,EACA26C,YAAAA,EACAC,2BAAAA,IAEF,MAAOxgD,GACP,MAAMA,GAIF,qBAAoB,SAC1B6sC,EAAQ,OACR+T,EAAM,WACNztC,EAAU,UACVpO,EAAS,KACTD,EAAI,QACJhB,EAAO,MACP2D,EACA7B,QAASk7C,EAAU,YACnBP,EAAW,2BACXC,IAEA,MAAMO,EAAqB,SAAZj9C,EAEf,IAAImiB,EADS86B,EAAS,eAAiB,mBAEnCt5C,IAEAwe,EADE86B,EACM,iBAAiBt5C,IAEjB,cAAcA,KAI1B,IAAImN,EAAM,GAAGlR,OAAOC,SAASC,UAAUqiB,IAEvC,MAAMhoB,EAAc,CAAE6G,KAAAA,GAClBg8C,IACF7iD,EAAO2H,QAAUk7C,GAGiB,iBAAhC3tC,EAAWhP,iBACblG,EAAO+gB,MAAQja,EAEf9G,EAAO8G,UAAYA,EAGjBw7C,IACEC,EACFviD,EAAOsiD,YAAcA,EAErB3rC,EAAM2rC,GAIV,MAAMS,EAAY,IAAIC,gBAAgBhjD,GAAQiF,WACxCwY,EAAO,GAAGhY,OAAOC,SAASwtC,aAAaztC,OAAOC,SAASu9C,WAEvDt7C,EAAe,CACnB26C,YAAa,GAAG3rC,KAAOosC,cACvBG,WAAY,GAAG,EAAA,EAAYhkD,iCAAiC2H,IAC5DgS,GAAI,CACFsqC,SAAUjuC,EAAW9H,IACrBg2C,cAAe,eAEjBC,SAAU,CACRC,qBAAqB,EACrBC,mBAAmB,EACnBC,oBAAoB,EACpBC,qBAAsB,EAAA,EAAYnmC,YAEpCwxB,MAAO,CACL,CACEpqC,KAAMkqC,EACN3V,YAAa55B,KAAKqkD,WAAWjmC,GAC7BkmC,IAAKhB,EACLiB,iBAAkB,CAChB/gD,GAAIgE,EACJma,KAAM,UACN6iC,sBAAuB,aACvBC,2BAA4B,oCAC5BC,kCAAmC,GAAGtmC,wCAkB9C,OAZI,EAAA,EAAYH,aACd3V,EAAQq8C,aAAe,CACrBC,QAAS,CACP,CACEC,SAAU,MACV,2BAA4B,aAC5B,2CAA4C,WAAWhvC,EAAW9H,oCAMnE/N,KAAK8kD,eAAejjD,KAAKE,UAAUuG,GAASzE,QAAQ,MAAO,QAG5D,eAAekhD,GAErB,MAAMC,EAAiBC,KAAKF,GAC5BpiD,QAAQgX,IAAI,mBAAoBqrC,GAGhC,MAEME,EAAQ,GAFDlnB,KAAK+D,OAAAA,IAAUzyB,MAAO+M,UAAY,OAClC2hB,KAAKmnB,MAAsB,KAAhBnnB,KAAKonB,YAEvBj7C,EAAQ,GAAG+6C,KAAS,OAAA,EAAA,EAAA,CAAI,GAAGA,IAAQllD,KAAKqjD,aAAa,OAAA,EAAA,EAAA,CAAI2B,QAG/D,MAAO,GAAGhlD,KAAKojD,aAAaj5C,mBAAuBie,mBAAmB48B,KAGhE,WAAW5mC,GACjB,MAAO,qGAIIA,2JA/QN,EAAA,SAJA,EAAA,SACA,EAAA,SALA,EAAA,SAMA,EAAA,SACA,EAAA,SAVA,EAAA,IA+EP,OAAA,EAAA,EAAA,CAAA,CADC,EAAA,iKAuCD,OAAA,EAAA,EAAA,CAAA,CADC,EAAA,wKAYD,OAAA,EAAA,EAAA,CAAA,CADC,EAAA,mKA9FU8jC,EAAe,OAAA,EAAA,EAAA,CAAA,CAH3B,OAAA,EAAA,EAAA,CAAW,CACV9hD,WAAY,0CAUmB,EAAA,EACD,EAAA,EACP,EAAA,EACO,EAAA,EACH,EAAA,EACL,EAAA,EACN,EAAA,KAdL8hD,wJCrBAmD,EAAe,MAC1B,YACUvtC,EACAD,EACA3E,EACAoyC,GAHA,KAAAxtC,0BAAAA,EACA,KAAAD,eAAAA,EACA,KAAA3E,gBAAAA,EACA,KAAAoyC,aAAAA,EAGV,SACEC,EACArlD,GAIA,OAFAA,EAAK2d,WAAazX,OAAOC,SAASC,OAE1Bi/C,GACN,IAAK,SACL,IAAK,UACL,IAAK,eACH,OAAOvlD,KAAK8X,0BAA0Bw7B,KAAKpzC,GAC7C,IAAK,WACH,OAAOF,KAAKkT,gBAAgBogC,KAAKpzC,GACnC,IAAK,QACH,OAAOF,KAAKslD,aAAahS,KAAKpzC,GAChC,QACE,OAAOF,KAAK6X,eAAey7B,KAAKpzC,kCAlC/B,EAAA,SACA,EAAA,SACA,EAAA,SAHA,EAAA,IAWImlD,EAAe,OAAA,EAAA,EAAA,CAAA,CAH3B,OAAA,EAAA,EAAA,CAAW,CACVjlD,WAAY,0CAIyB,EAAA,EACX,EAAA,EACC,EAAA,EACH,EAAA,KALbilD,4OCSA,EAAwB,MAYnC,YACU9zC,EACDnF,EACCyL,EACAvL,EACAwL,EACA3E,GALA,KAAA5B,OAAAA,EACD,KAAAnF,SAAAA,EACC,KAAAyL,eAAAA,EACA,KAAAvL,kBAAAA,EACA,KAAAwL,0BAAAA,EACA,KAAA3E,aAAAA,EAfD,KAAAoR,OAAQ,EACR,KAAAjH,eAAgB,EAChB,KAAAC,iBAAkB,EAClB,KAAAqb,yBAA0B,EACzB,KAAAjb,uBAAyB,IAAI,EAAA,EAEvC,KAAAxc,SAAU,EAYV,kBACE,OAAQnB,KAAK4R,SAAmC,IAAxB5R,KAAK4R,QAAQkP,OAGvC,iBAEE,GAAI9gB,KAAKuM,eACP,OAAO,EAGT,IAAKvM,KAAKq4B,YAAa,CACrB,MAAMW,EAAah5B,KAAK4R,QAAQonB,WAChC,OAAO3pB,EAAA,EAAUqR,WAAWsY,EAAY,cAE1C,OAAOh5B,KAAK4R,QAAQoP,WAGtB,qBACE,OACEhhB,KAAKukB,OACJvkB,KAAK6V,YAAc7V,KAAK6V,WAAWhP,mBAAqB,EAAA,EAAiBuZ,aAK9E,eACE,OAAApP,EAAA,EAAA,CAAchR,KAAK+M,MAEnB,MAAMA,EAAO/M,KAAK+M,KAAKkE,cAKvB,GAJKlE,EAAK+B,WAAqC,IAAzB9O,KAAK4R,QAAQkP,SACjC/T,EAAK+B,SAAW9O,KAAK4R,SAGnB5R,KAAK+M,KAAKmE,MACZ,IACElR,KAAKmB,SAAU,EACf,OAAA6P,EAAA,EAAA,CAAchR,KAAK+M,MACnB,MAAM,YAAEe,GAAgBf,EACxB,GAAIe,EAAa,CACf,MAAM03C,EAAmB13C,EAAYd,UAC3BhN,KAAKylD,kBAAkB33C,EAAYd,IAAKc,SACxC9N,KAAK0lD,gBAAgB53C,GAC/Bf,EAAKe,YAAc03C,EAAiBx4C,IAGtC,MAAMqwB,GACHtwB,EAAKpC,OAAS3K,KAAKukB,MAChB,2FACA,uCAEN,GAAKvkB,KAAK44B,8BAKF54B,KAAK2lD,YAAY54C,GACvB/M,KAAKmT,aAAauC,OAAO,UAAW,+CAA6C2nB,GACjFr9B,KAAKuR,OAAOsB,SAAS,CAAC,oBAPW,CACjC,MAAM+yC,QAAqB5lD,KAAK6lD,eAAe94C,GAC/C/M,KAAKmT,aAAauC,OAAO,UAAW,mCAAoC2nB,GACxEr9B,KAAK2d,uBAAuBvM,KAAKw0C,GAMnC5lD,KAAKoM,SAAS+E,OACd,MAAOzO,GACPC,QAAQC,MAAMF,GACd,MAAM26B,EAAM36B,EAAIE,MAAQF,EAAIE,MAAMqwB,QAAU,0BACzB,MAAfvwB,EAAIoe,OACN9gB,KAAKmT,aAAauC,OAAO,UAAW,gBAAW2nB,IAE/Cr9B,KAAKmT,aAAauC,OAAO,QAAS,OAAQ2nB,GAC9B,4BAARA,EACEr9B,KAAKuM,eACPvM,KAAK+M,KAAK9M,IAAI,qBAAqB6Z,UAAU,CAAE4b,eAAe,IAE9D11B,KAAK+M,KAAK9M,IAAI,SAAS6Z,UAAU,CAAE4b,eAAe,IAGhD11B,KAAKuM,eACPvM,KAAK+M,KAAK9M,IAAI,qBAAqB6Z,UAAU,MAE7C9Z,KAAK+M,KAAK9M,IAAI,SAAS6Z,UAAU,eAKvC9Z,KAAKmB,SAAU,OAGjB,OAAAqzB,EAAA,EAAA,CAAex0B,KAAK+M,MAIhB,YAAY6E,GAElB,OADAA,EAAQiM,WAAazX,OAAOC,SAASC,OACjCtG,KAAKuM,gBAAkBvM,KAAKukB,MACvBvkB,KAAKsM,kBAAkBgnC,KAAK1hC,GAASrR,YAEvCP,KAAK6X,eAAey7B,KAAK1hC,GAASrR,YAGnC,gBAAgBqR,GAEtB,OADAA,EAAQiM,WAAazX,OAAOC,SAASC,OAC9BtG,KAAK6X,eAAey7B,KAAK1hC,GAASrR,YAGnC,kBAAkB8hB,EAAezQ,GAEvC,OADAA,EAAQiM,WAAazX,OAAOC,SAASC,OAC9BtG,KAAK6X,eAAee,OAAOyJ,EAAezQ,GAASrR,YAGpD,eAAeqR,GAErB,OADAA,EAAQiM,WAAazX,OAAOC,SAASC,OACjCtG,KAAKuM,eACAvM,KAAK8X,0BAA0BguC,eAAel0C,GAASrR,YAGzDP,KAAK8X,0BAA0B6tC,YAAY3lD,KAAK6V,WAAW7I,IAAK4E,GAASrR,YAG1E,WAAWkH,GACjB,OAAOzH,KAAK8X,0BAA0ByH,WAAWvf,KAAK6V,WAAW7I,IAAKvF,GAAWlH,YAGnF,QACEP,KAAKoM,SAAS+E,qCAjKT,EAAA,SASA,EAAA,SACA,EAAA,SACA,EAAA,SAVA,EAAA,SAKA,EAAA,wCAcN,EAAA,mBACA,EAAA,iBACA,EAAA,yBACA,EAAA,2BACA,EAAA,mCACA,EAAA,kCACA,EAAA,KAuCD,OAAA,EAAA,EAAA,CAAA,CADCG,EAAA,+IA7CU,EAAwB,OAAA,EAAA,EAAA,CAAA,CALpC,OAAA,EAAA,EAAA,CAAU,CACT5M,SAAU,wBACVC,SClBa,kyCCAA,uwBFkCK,EAAA,EACC,EAAA,EACO,EAAA,EACG,EAAA,EACQ,EAAA,EACb,EAAA,KAlBb,4IGdAohD,EAAS,MACpB,YAAoBhmD,GAAA,KAAAA,KAAAA,EAEpB,iBAAiBsF,GACf,OAAOrF,KAAKD,KACTE,IAAS,GAAG,EAAA,EAAYJ,4BAA6B,CAAEc,OAAQ,CAAEqlD,EAAG3gD,KACpEpD,KACC,OAAA,EAAA,EAAA,CAAIL,GACFA,EAAM8Q,IAAIpO,IAAAA,CACRN,KAAMM,EAAK2hD,YACXrxC,wBAAyBtQ,EAAKe,KAC9B6gD,KAAMlmD,KAAKmmD,wBAAwB7hD,EAAK8hD,gBACxCA,eAAgB9hD,EAAK8hD,eACrBjiB,UAAW7/B,EAAK+hD,UAChBrxC,YAAa1Q,EAAKgiD,QAClB5kD,IAAK,GAAG4C,EAAKiiD,MACb1hB,OAAQvgC,EAAKqd,KACbijB,mBAAoBtgC,EAAKkiD,kBAAoBliD,EAAKkiD,kBAAkBhjD,GAAK,UAM3E,wBAAwB4iD,GAC9B,OAAQA,GACN,IAAK,UACH,MAAO,cACT,IAAK,UACH,MAAO,UACT,IAAK,YACH,MAAO,gBACT,IAAK,WACH,MAAO,eACT,IAAK,kBACH,MAAO,4BACT,IAAK,MACH,MAAO,OACT,IAAK,WACH,MAAO,gBACT,IAAK,QACH,MAAO,QACT,IAAK,cACH,MAAO,kBACT,QACE,OAAOA,iCAnDN,EAAA,IAOIL,EAAS,OAAA,EAAA,EAAA,CAAA,CADrB,OAAA,EAAA,EAAA,CAAW,CAAE3lD,WAAY,0CAEE,EAAA,KADf2lD,4QCLN,SAASU,EAA0B9R,GACpCA,EAAU/jC,UACZrF,OAAOk0B,KAAKkV,EAAU/jC,UAAUvM,QAAQooB,IACtC,MAAM/S,EAAUi7B,EAAU/jC,SAAS6b,GAC/B/S,aAAmB,EAAA,GACrBA,EAAQyG,cAAc,MACtBzG,EAAQgB,0BACChB,aAAmB,EAAA,EAC5B+sC,EAA0B/sC,GACjBA,aAAmB,EAAA,GAC5BA,EAAQ9I,SAASvM,QAASuwC,GAAoB6R,EAA0B7R,0HCgCnE,EAA8B,MAiBzC,YACU/zC,EACAoJ,EACA6N,EACA5E,EACA6E,EACAF,EACAG,EACAqjB,EACAloB,EACA+c,GATA,KAAArvB,GAAAA,EACA,KAAAoJ,YAAAA,EACA,KAAA6N,0BAAAA,EACA,KAAA5E,gBAAAA,EACA,KAAA6E,kBAAAA,EACA,KAAAF,eAAAA,EACA,KAAAG,WAAAA,EACA,KAAAqjB,iBAAAA,EACA,KAAAloB,aAAAA,EACA,KAAA+c,aAAAA,EAvBD,KAAAw2B,SAAU,EAInB,KAAAvlD,SAAU,EACV,KAAAwL,OAAwB,EAAA,EACxB,KAAA4uB,mBAAkC,GAClC,KAAAC,oBAAgC,GAChC,KAAAmrB,YAAc,IAAIr3C,KAClB,KAAA2hB,UAAW,EAED,KAAAhZ,gBAAkB,IAAI,EAAA,EAehC,WAC6B,YAAvBjY,KAAKsK,KAAK4N,SACZlY,KAAK4mD,mBAC2B,uBAAvB5mD,KAAKsK,KAAK4N,UACnBlY,KAAK07B,iBACL17B,KAAK6mD,+BAC2B,eAAvB7mD,KAAKsK,KAAK4N,SACnBlY,KAAK8mD,sBAEL9mD,KAAK+mD,oBAGH/mD,KAAKgnD,QACPP,EAA0BzmD,KAAK+M,MAE/B/M,KAAKuuC,gBAGHvuC,KAAKinD,WACPjnD,KAAKinD,UAAUjlD,aACZC,KACC,OAAAyQ,EAAA,EAAA,CAAI/H,IACF,MAAMxI,EAAQwI,GAASA,EAAMpE,cAE7B,OADAvG,KAAKinD,UAAU13C,SAASpN,EAAO,CAAE2wB,WAAW,IACrC3wB,IAET,OAAAD,EAAA,EAAA,CAAOgJ,GAAKlL,KAAKinD,UAAU/1C,OAC3B,OAAA7O,EAAA,EAAA,CAAa,KACb,OAAA+3B,EAAA,EAAA,GACA,OAAA9gB,EAAA,EAAA,CAAU3O,GACRA,EACI3K,KAAKiK,YACF0kC,iBAAiBhkC,EAAO3K,KAAKyY,aAAakmC,UAC1C18C,KAAK,OAAAiK,EAAA,EAAA,CAAWxJ,GAAO,OAAAyJ,EAAA,EAAA,CAAGzJ,KAC7B,OAAAyJ,EAAA,EAAA,KAGP3J,UAAUsI,IACT,GAAmB,MAAfA,EAAIgW,OAAgB,CACtB,MAAM8tB,EAAS5uC,KAAKsK,KAAKK,QAAUG,EAAIH,MACvC3K,KAAKinD,UAAUntC,UAAU80B,EAAS,CAAEA,OAAAA,GAAW,WACvB,MAAf9jC,EAAIgW,OACb9gB,KAAKinD,UAAUntC,UAAU,MACD,MAAfhP,EAAIgW,QACb9gB,KAAKinD,UAAUntC,UAAU,CAAEya,SAAS,MAI5Cv0B,KAAK8rC,gBAED9rC,KAAK0mD,SACP,OAAA11C,EAAA,EAAA,CAAchR,KAAK+M,MAKf,cAAc5J,GACpB,MAAQuD,WAAYulC,EAAOC,YAAarhB,GAAWzkB,OACnDpG,KAAKixB,SAAWgb,EAAQ,KAG1B,iBACE,OAAOjsC,KAAKsK,OAAStK,KAAKsK,KAAK48C,iBAAmBlnD,KAAKsK,KAAKK,MAG9D,cACE,MAA+B,UAAxB3K,KAAKmnD,eAGd,gBACE,OAAOnnD,KAAK+M,KAAK9M,IAAI,SAGvB,gBACE,MAA8C,YAAvCD,KAAKyY,aAAa5R,iBAG3B,qBACE,MAA8C,iBAAvC7G,KAAKyY,aAAa5R,iBAG3B,sBACE,OAAkB7G,KAAK+M,KAAK9M,IAAI,eAG1B,gBACFD,KAAK+M,KAAK9M,IAAI,QAAUD,KAAK+M,KAAK5K,MAAM4L,KAC1C/N,KAAK+M,KAAK9M,IAAI,OAAOwP,UAGnBzP,KAAK+M,KAAK9M,IAAI,gBAAkBD,KAAK+M,KAAK5K,MAAMqL,aAClDxN,KAAK+M,KAAK9M,IAAI,eAAewP,UAG3BzP,KAAK+M,KAAK9M,IAAI,SAChBD,KAAK+M,KAAK9M,IAAI,QAAQwP,UAGwB,cAA5CzP,KAAKkwB,aAAaE,iBAAiB/qB,MACrCrF,KAAK+M,KAAK9M,IAAI,SAASwP,UAI3B,qBACE,MAA8B,YAAvBzP,KAAKsK,KAAK4N,SACb,sFACA,wEAGE,iBACNlY,KAAKq7B,iBACFgB,qBAAqBr8B,KAAKyY,aAAa5R,kBACvCrE,UAAUiQ,IACTA,EAAYpO,SAAAA,SAAiBC,EAAM2W,GACf,IAAd3W,EAAKkD,OACPiL,EAAY3O,OAAOmX,EAAG,GACtBxI,EAAY6pB,QAAQh4B,OAGxBtE,KAAKu7B,mBAAqB9oB,IAIxB,mBACN,MAAMjF,EACJxN,KAAKyY,aAAajL,aAAexN,KAAKonD,eAAe,IAAI93C,KAAKtP,KAAKyY,aAAajL,cAC5E7C,EAAQ3K,KAAKyY,aAAanO,KAAOtK,KAAKyY,aAAanO,KAAKK,MAAQ3K,KAAKsK,KAAKK,MAC1E2D,EAAetO,KAAKyY,aAAanO,KACnCtK,KAAKyY,aAAanO,KAAKgE,aACvBtO,KAAKsK,KAAKgE,aAEdtO,KAAK+M,KAAO/M,KAAKa,GAAGU,MAAM,CACxBo9C,SAAU,CAAC3+C,KAAKyY,aAAakmC,UAC7B1wC,SAAU,CAACjO,KAAKyY,aAAaxK,SAAU,EAAA,EAAWhB,UAClD5H,KAAM,CAACrF,KAAKyY,aAAapT,KAAM,EAAA,EAAW4H,UAC1CmB,UAAW,CAACpO,KAAKyY,aAAarK,UAAW,EAAA,EAAWnB,UACpDoB,UAAW,CAACrO,KAAKyY,aAAapK,WAC9BqkC,SAAU,CAAC1yC,KAAKyY,aAAai6B,UAC7BvlC,IAAK,CAACnN,KAAKyY,aAAatL,IAAK,EAAA,EAAWF,UACxCc,IAAK,CAAC/N,KAAKyY,aAAa1K,IAAK,EAAA,EAAkBC,cAC/CrD,MAAO,CAACA,EAAO,EAAA,EAAWA,OAC1B2D,aAAc,CAACA,EAAc,EAAA,EAAW3D,OACxC6C,YAAa,CAACA,EAAa,EAAA,EAAWP,YAIlC,sBACN,MAAMO,EAAcxN,KAAKonD,eAAepnD,KAAKyY,aAAajL,aACpD7C,EAAQ3K,KAAKyY,aAAanO,KAAOtK,KAAKyY,aAAanO,KAAKK,MAAQ3K,KAAKsK,KAAKK,MAC1E2D,EAAetO,KAAKyY,aAAanO,KACnCtK,KAAKyY,aAAanO,KAAKgE,cAAgBtO,KAAKyY,aAAanO,KAAKK,MAC9D3K,KAAKsK,KAAKK,MAEd3K,KAAK+M,KAAO/M,KAAKa,GAAGU,MAAM,CACxB8D,KAAM,CAACrF,KAAKyY,aAAapT,KAAM,EAAA,EAAW4H,UAC1CmB,UAAW,CAACpO,KAAKyY,aAAarK,WAC9BC,UAAW,CAACrO,KAAKyY,aAAapK,WAC9BqkC,SAAU,CAAC1yC,KAAKyY,aAAai6B,UAC7B3kC,IAAK,CAAC/N,KAAKyY,aAAa1K,KACxBpD,MAAO,CAACA,EAAO,EAAA,EAAWA,OAC1B2D,aAAc,CAACA,EAAc,EAAA,EAAW3D,OACxC6C,YAAa,CAACA,EAAa,EAAA,EAAWP,YAIlC,oBACN,MAAMtC,EAAQ3K,KAAKyY,aAAanO,KAAOtK,KAAKyY,aAAanO,KAAKK,MAAQ3K,KAAKsK,KAAKK,MAChF3K,KAAK+M,KAAO/M,KAAKa,GAAGU,MAAM,CACxB8M,UAAW,CAACrO,KAAKyY,aAAapK,UAAW,EAAA,EAAWpB,UACpDmB,UAAW,CAACpO,KAAKyY,aAAarK,WAC9BsrB,YAAa,CAAC15B,KAAKyY,aAAaihB,aAChCzkB,KAAM,CAACjV,KAAKyY,aAAaxD,KAAM,EAAA,EAAWhI,UAC1CtC,MAAO,CAACA,EAAO,EAAA,EAAWA,SAItB,8BACN,MAAM6C,EACJxN,KAAKyY,aAAajL,aAAexN,KAAKonD,eAAepnD,KAAKyY,aAAajL,aAEnEiL,EAAezY,KAAKyY,aACpB9N,EAAQ8N,EAAanO,KAAOmO,EAAanO,KAAKK,MAAQ3K,KAAKsK,KAAKK,MAChE2D,EAAetO,KAAKyY,aAAanO,KACnCtK,KAAKyY,aAAanO,KAAKgE,cAAgBtO,KAAKyY,aAAanO,KAAKK,MAC9D3K,KAAKsK,KAAKK,MAEd3K,KAAK+M,KAAO/M,KAAKa,GAAGU,MAAM,CACxBo9C,SAAU,CAAC3+C,KAAKyY,aAAakmC,UAC7B1wC,SAAU,CAACjO,KAAKyY,aAAaxK,SAAU,EAAA,EAAWhB,UAClD5H,KAAM,CAACoT,EAAapT,MACpB8H,IAAK,CAACsL,EAAatL,IAAK,EAAA,EAAWF,UACnCpG,iBAAkB,CAAC4R,EAAa5R,kBAChCuH,UAAW,CAACqK,EAAarK,UAAW,EAAA,EAAWnB,UAC/CoB,UAAW,CAACoK,EAAapK,WACzB0tB,sBAAuB/7B,KAAKa,GAAGU,MAAM,CACnCC,OAAQ,CAACiX,EAAasjB,sBAAsBv6B,OAAQ,EAAA,EAAWyL,UAC/DuB,GAAI,CAACiK,EAAasjB,sBAAsBvtB,GAAI,EAAA,EAAWvB,YAEzDc,IAAK,CAAC0K,EAAa1K,IAAK,EAAA,EAAWd,UACnCwF,YAAazS,KAAKa,GAAGq7B,MAAM,GAAI,EAAA,EAAWjvB,UAC1CtC,MAAO,CAACA,EAAO,CAAC,EAAA,EAAWsC,SAAU,EAAA,EAAWtC,QAChD2D,aAAc,CAACA,EAAc,CAAC,EAAA,EAAWrB,SAAU,EAAA,EAAWtC,QAC9D6C,YAAa,CAACA,EAAa,EAAA,EAAWP,YAGpCjN,KAAKuM,gBACPvM,KAAK+M,KAAK0vB,WAAW,eAAgB,IAAI,EAAA,EAAYz8B,KAAKyY,aAAawjB,eAGzExjB,EAAahG,YAAYpO,QAAQw4B,IAC/B,MAAM8X,EAAY30C,KAAKw8B,mBAAmBK,GAE1C,GADA78B,KAAK88B,gBAAgB95B,KAAK2xC,IACrB30C,KAAKuM,eAAgB,CACxB,MAAM86C,EAAqB1S,EAAU/jC,SAASqsB,SAClB3xB,IAAxBuxB,EAAU9B,WACZ/6B,KAAKi2C,SAASoR,EAASxqB,EAAU9B,cAInC/6B,KAAKg9B,YACPh9B,KAAKw7B,oBAAsBx7B,KAAK88B,gBAAgB36B,MAAMuQ,IAAAA,EAAOmqB,UAAAA,KAAgBA,GAC7E78B,KAAKsnD,kBAID,eAAev3C,GACrB,OAAOuC,EAAOvC,GACXw3C,UAAU,GACVrrC,OAAO,cAGZ,iBACE,GAAIlc,KAAKw7B,oBAAoBp5B,QAAU,EAAG,CACxC,MAAMm6B,EAAmBv8B,KAAKw7B,oBAAoB9oB,IAAI1F,GAAOhN,KAAKw8B,mBAAmB,CAAExvB,IAAAA,KACvFhN,KAAK+M,KAAK0vB,WACR,cACAz8B,KAAKa,GAAGq7B,MAAMK,EAAkB,EAAA,EAAkB7f,eAAe,UAE1D1c,KAAKw7B,oBAAoBp5B,OAAS,IAC3CpC,KAAKw7B,oBAAoBkB,MACzB18B,KAAKmT,aAAauC,OAAO,UAAW,QAAS,wDAIjD,SAASwnB,EAAoBztB,GACvBA,GACFytB,EAAQ/c,cAAc,MACtB+c,EAAQ3tB,SAAS,MACjB2tB,EAAQztB,YAERytB,EAAQ/c,cAAc,EAAA,EAAWlT,UACjCiwB,EAAQC,iBACRD,EAAQzsB,UAIZ,eACEzQ,KAAK88B,gBAAgB95B,KAAKhD,KAAKw8B,sBAGzB,oBAAmB,IAAExvB,EAAM,KAAI,IAAEiwB,EAAM,KAAI,UAAElC,EAAY,MAAS,IACxE,OAAO/6B,KAAKa,GAAGU,MAAM,CACnBs7B,UAAW,CAAC7vB,EAAK,EAAA,EAAWC,UAC5BgwB,IAAK,CAACA,EAAKj9B,KAAKg9B,WAAah9B,KAAKuM,eAAiB,KAAO,EAAA,EAAWU,UACrE8tB,UAAW,CAACA,KAIhB,UAAU92B,EAAO44B,GACf,OAAOA,EAAYA,EAAUr1B,KAAO,KAItC,mBAEE,GADA,OAAAwJ,EAAA,EAAA,CAAchR,KAAK+M,OACf/M,KAAK+M,KAAKwnB,QAEd,IACE,GAAIv0B,KAAK+M,KAAK5K,MAAMsQ,aAAsD,IAAvCzS,KAAK+M,KAAK5K,MAAMsQ,YAAYrQ,OAM7D,YALApC,KAAKmT,aAAauC,OAChB,UACA,gBACA,wDAKA1V,KAAK+M,KAAKmE,OACZlR,KAAKmB,SAAU,EACY,YAAvBnB,KAAKsK,KAAK4N,SACZlY,KAAKyY,mBAAqBzY,KAAK6X,eAC5Be,OAAO5Y,KAAKyY,aAAazL,IAAKhN,KAAK+M,KAAK5K,OACxC5B,YAC6B,eAAvBP,KAAKsK,KAAK4N,SACnBlY,KAAKyY,mBAAqBzY,KAAK+X,kBAC5Ba,OAAO5Y,KAAKyY,aAAazL,IAAKhN,KAAK+M,KAAK5K,OACxC5B,YAC6B,uBAAvBP,KAAKsK,KAAK4N,SACnBlY,KAAKyY,mBAAqBzY,KAAK8X,0BAC5Bc,OAAO5Y,KAAKyY,aAAatQ,OAAQnI,KAAK+M,KAAK5K,OAC3C5B,YAEHP,KAAKyY,mBAAqBzY,KAAKkT,gBAC5B0F,OAAO5Y,KAAKyY,aAAazL,IAAKhN,KAAK+M,KAAK5K,OACxC5B,YAELP,KAAK+M,KAAK0D,SACVzQ,KAAKiY,gBAAgB7G,KAAKpR,KAAKyY,cAC/BzY,KAAKmB,SAAU,EACfnB,KAAKgY,WAAWnO,UAChB7J,KAAKmT,aAAauC,OAAO,UAAW,UAAW,6BAE/C,EAAA,EAAkB8xC,mBAAmBxnD,KAAK+M,MAE5C,MAAOrK,GACP1C,KAAKmB,SAAU,EACfwB,QAAQC,MAAMF,GACd1C,KAAKmT,aAAauC,OAAO,QAAS,OAAQ,2CAI9C,2BAA2BvT,GACzB,GAAIA,EAAO,CACT,MAAMslD,EAAaznD,KAAK+M,KAAK9M,IAAI,SAASkC,MACtCslD,EACFznD,KAAK+M,KAAK9M,IAAI,gBAAgBsP,SAASk4C,GAEvCznD,KAAK+M,KAAK9M,IAAI,gBAAgBsP,SAASvP,KAAKsK,KAAKK,YAGnD3K,KAAK+M,KAAK9M,IAAI,gBAAgBsP,SAAS,kCAlZzB,EAAA,SAOX,EAAA,SAJA,EAAA,SAGA,EAAA,SADA,EAAA,SADA,EAAA,SAaA,EAAA,SAfA,EAAA,SAUA,EAAA,SACA,EAAA,kCA8BN,EAAA,wBACA,EAAA,0BACA,EAAA,mBACA,EAAA,2BAWA,EAAA,yBAsEA,EAAA,EAAY,KAAA,CAAC,gBAAiB,CAAC,cA0NhC,OAAA,EAAA,EAAA,CAAA,CADC+B,EAAA,mJA9SU,EAA8B,OAAA,EAAA,EAAA,CAAA,CArB1C,OAAA,EAAA,EAAA,CAAU,CACT5M,SAAU,+BACVC,SCzBa,yu0BD2Bbs0B,WAAY,CACV,OAAA,EAAA,EAAA,CAAQ,aAAc,CACpB,OAAA,EAAA,EAAA,CAAM,KAAM,OAAA,EAAA,EAAA,CAAM,CAAEpO,OAAQ,IAAKqO,QAAS,KAC1C,OAAA,EAAA,EAAA,CAAW,SAAU,CACnB,OAAA,EAAA,EAAA,CAAM,CAAErO,OAAQ,IAAKqO,QAAS,IAC9B,OAAA,EAAA,EAAA,CAAM,CAAC,OAAA,EAAA,EAAA,CAAQ,IAAK,OAAA,EAAA,EAAA,CAAM,CAAErO,OAAQ,KAAO,OAAA,EAAA,EAAA,CAAQ,oBAAqB,OAAA,EAAA,EAAA,CAAM,CAAEqO,QAAS,SAE3F,OAAA,EAAA,EAAA,CAAW,SAAU,CACnB,OAAA,EAAA,EAAA,CAAM,CAAErO,OAAQ,EAAGqO,QAAS,IAC5B,OAAA,EAAA,EAAA,CAAM,CACJ,OAAA,EAAA,EAAA,CAAQ,IAAK,OAAA,EAAA,EAAA,CAAM,CAAErO,OAAQ,OAC7B,OAAA,EAAA,EAAA,CAAQ,oBAAqB,OAAA,EAAA,EAAA,CAAM,CAAEqO,QAAS,oBEtCzC,85CF8DC,EAAA,EACS,EAAA,EACc,EAAA,EACV,EAAA,EACE,EAAA,EACH,EAAA,EACJ,EAAA,EACM,EAAA,EACJ,EAAA,EACA,EAAA,KA3Bb,sHGpCAwuB,EAAe,MAC1B,YAAoBv0C,GAAA,KAAAA,aAAAA,EAEb,OAAOwO,EAAiB7Y,EAAeC,EAAmB4+C,GAC/D3nD,KAAKmT,aAAajK,OAAOyY,EAAM7Y,EAAOC,EAAU,CAC9C6+C,QAAS,CACP,UAAW,KAEb9nC,WAAc6nC,GAAsB,oCAfjC,EAAA,IAOID,EAAe,OAAA,EAAA,EAAA,CAAA,CAH3B,OAAA,EAAA,EAAA,CAAW,CACVtnD,WAAY,0CAGsB,EAAA,KADvBsnD,sCCRb,EAAA,EAAA,EAAA,KAAA,WAAA,OAAA,KAAe,MAAMG,EACnB,6BACE,MAAO,CACL,CAAE1lD,MAAO,KAAM65B,MAAO,eACtB,CAAE75B,MAAO,OAAQ65B,MAAO,iBACxB,CAAE75B,MAAO,OAAQ65B,MAAO,oBACxB,CAAE75B,MAAO,SAAU65B,MAAO,mBAC1B,CAAE75B,MAAO,QAAS65B,MAAO,kBACzB,CAAE75B,MAAO,OAAQ65B,MAAO,iBACxB,CAAE75B,MAAO,OAAQ65B,MAAO,iBACxB,CAAE75B,MAAO,OAAQ65B,MAAO,iBACxB,CAAE75B,MAAO,OAAQ65B,MAAO,iBACxB,CAAE75B,MAAO,MAAO65B,MAAO,iBACvB,CAAE75B,MAAO,OAAQ65B,MAAO,kBACxB,CAAE75B,MAAO,OAAQ65B,MAAO,kBACxB,CAAE75B,MAAO,QAAS65B,MAAO,mBACzB,CAAE75B,MAAO,WAAY65B,MAAO,sBAC5B,CAAE75B,MAAO,SAAU65B,MAAO,oBAC1B,CAAE75B,MAAO,SAAU65B,MAAO,oBAC1B,CAAE75B,MAAO,iBAAkB65B,MAAO,8BAClC,CAAE75B,MAAO,WAAY65B,MAAO,sBAC5B,CAAE75B,MAAO,UAAW65B,MAAO,qBAC3B,CAAE75B,MAAO,gBAAiB65B,MAAO,+BAIrC,4BACE,MAAO,CACL,CAAE75B,MAAO,UAAW65B,MAAO,YAC3B,CAAE75B,MAAO,UAAW65B,MAAO,aAC3B,CAAE75B,MAAO,kBAAmB65B,MAAO,oKCR5B,EAAkC,MAe7C,YACS5vB,EACCrL,EACA+mD,GAFD,KAAA17C,SAAAA,EACC,KAAArL,UAAAA,EACA,KAAA+mD,MAAAA,EAdD,KAAAC,UAAW,EACV,KAAA/9B,YAAc,IAAI,EAAA,EAClB,KAAAg+B,UAAY,IAAI,EAAA,EAChB,KAAAC,YAAc,IAAI,EAAA,EAI5B,KAAAjlB,iBAAmB,CAAC,mBAAc,QAAS,WAAY,UAEvD,KAAAklB,yBAA0B,EAQ1B,aAAa5jD,GACXA,EAAK8lB,QAAU9lB,EAAK8lB,OAGtB,eAAe9lB,GACS,iBAAlBA,EAAKX,gBACD3D,KAAKmoD,kBAAkB7jD,GAE/BtE,KAAKgqB,YAAY5Y,KAAK9M,GACtBtE,KAAKoM,SAAS+E,OAGhB,aAAa7M,GACW,iBAAlBA,EAAKX,gBACD3D,KAAKmoD,kBAAkB7jD,GAE/BtE,KAAKgoD,UAAU52C,KAAK9M,GACpBtE,KAAKoM,SAAS+E,OAGhB,SAAS7M,GACPtE,KAAKioD,YAAY72C,KAAK9M,EAAKd,IAG7B,QAAQwhC,GACN,OAAOA,EAAUxgC,OAAAA,CAAQC,EAAKyN,IAASzN,EAAM,GAAGA,MAAQyN,IAAQA,EAAM,IAGxE,wBAAwBP,GACtB,UAAW,MAAMhQ,KAAcgQ,EAAaG,YAC1C,GAAMnQ,EAAWD,IAAK,CACpB1B,KAAKkoD,yBAA0B,EAC/B,IACE,MAAMhU,QAAsBl0C,KAAKe,UAAU0B,iBAAiBd,EAAWD,KAAKnB,YAC5E,GAAI2zC,EAAc9xC,OAAS,EAAG,CAC5B,MAAM2xC,EAAeG,EAAc,GACnCvyC,EAAW0D,KAAO0uC,EAAa/vC,KAC/BrC,EAAWijC,mBAAqBmP,EAAanP,mBAC7CjjC,EAAWkjC,OAASkP,EAAalP,OACjCljC,EAAWggB,KAAO,iBAClBhgB,EAAWoT,WAAag/B,EAAa/+B,YACrCrT,EAAWi4B,YAAcma,EAAan/B,wBACtCjT,EAAWuiC,aAAe6P,EAAavwC,GACvC7B,EAAWyiC,UAAY2P,EAAa5P,WAEtC,MAAOvhC,GACPD,QAAQgX,IAAI/W,GACZ5C,KAAK8nD,MAAMpyC,OAAO,QAAS,mDAE3B1V,KAAKkoD,yBAA0B,QAGjCvmD,EAAWggB,KAAO,0CA/FjB,EAAA,SAaA,EAAA,SACA,EAAA,+CASN,EAAA,wBACA,EAAA,wBACA,EAAA,oBACA,EAAA,uBACA,EAAA,qBACA,EAAA,uBACA,EAAA,uBAEA,EAAA,GAAS,KAAA,CAAC,kBATA,EAAkC,OAAA,EAAA,EAAA,CAAA,CAN9C,OAAA,EAAA,EAAA,CAAU,CACTjd,SAAU,uCACVC,SClBa,qpHDoBbyjD,cAAe,EAAA,GAAkBC,aEpBpB,snEFsCM,EAAA,EACE,EAAA,EACJ,EAAA,KAlBN,qUGbA,EAAc,MAGzB,YAAoBC,EAAiCC,GAAjC,KAAAD,YAAAA,EAAiC,KAAAC,cAAAA,EAF7C,KAAAC,UAAY,IAAIC,EAAA,EAIxB,WACE,MAAMr+B,EAASpqB,KAAKuoD,cAAcn4B,iBAC9BhG,GACFpqB,KAAK0oD,YAAYt+B,GAGnBpqB,KAAKuoD,cAAclU,YAChBpyC,KAAK,OAAAM,EAAA,EAAA,CAAUvC,KAAKwoD,YACpBhmD,UAAWmwB,GAAiB3yB,KAAK0oD,YAAY/1B,IAGlD,cACE3yB,KAAKwoD,UAAU3lD,OACf7C,KAAKwoD,UAAU1lD,WAGjB,YAAY6vB,GAEV,IAAK,MAAMlG,KAAOkG,EAAM+hB,WACtB10C,KAAKsoD,YAAY39B,cAAcC,MAAM0sB,YAAY7qB,EAAKkG,EAAM+hB,WAAWjoB,IAIzE,IAAK,MAAMpnB,KAAQrF,KAAKuoD,cAAc51B,MACpC3yB,KAAKsoD,YAAY39B,cAAcg+B,UAAU9I,OAAO,GAAGx6C,WAIrDrF,KAAKsoD,YAAY39B,cAAcg+B,UAAU9vC,IAAI,GAAG8Z,EAAMttB,kDA1CnB,EAAA,SAC9B,EAAA,IAQI,EAAc,OAAA,EAAA,EAAA,CAAA,CAH1B,OAAA,EAAA,EAAA,CAAU,CACTX,SAAU,6CAKuB,EAAA,EAAmC,EAAA,KAHzD,OCCA,EAAW,EAAA,MACtB,eAAeo5C,GACb,MAAO,CACL8K,SAAU,EACVryC,UAAW,CACT,CACEmV,QAAS,EAAA,EACTmH,SAAUirB,EAAQprB,QAEpB,CACEhH,QAAS,EAAA,EACTmH,SAAUirB,EAAQ1zB,YAXf,EAAW,EAAA,OAAA,EAAA,EAAA,CAAA,CALvB,OAAA,EAAA,EAAA,CAAS,CACR/T,QAAS,CAAC,EAAA,GACVK,aAAc,CAAC,GACfF,QAAS,CAAC,MAEC,GCRN,MAAMqyC,EAA6B,CACxC//C,MAAO,kBACPzD,KAAM,wBACNyjD,QAAS,2BACTpU,WAAY,CACV,gBAAiB,UACjB,gBAAiB,UACjB,gBAAiB,UACjB,oBAAqB,UACrB,gBAAiB,UACjB,0BAA2B,UAC3B,qBAAsB,UACtB,wBAAyB,UACzB,uBAAwB,UACxB,0BAA2B,UAC3B,0BAA2B,UAC3B,6BAA8B,UAC9B,iCAAkC,UAClC,oCAAqC,UACrC,yBAA0B,UAC1B,4BAA6B,UAC7B,cAAe,UAEf,sBAAuB,UACvB,yBAA0B,UAC1B,uBAAwB,UACxB,+BAAgC,UAChC,8BAA+B,UAC/B,8BAA+B,UAC/B,yBAA0B,UAC1B,+BAAgC,UAChC,kCAAmC,UACnC,mCAAoC,UACpC,oCAAqC,UAErC,sBAAuB,UACvB,6BAA8B,UAC9B,kBAAmB,UAEnB,yBAA0B,UAC1B,yBAA0B,UAC1B,sBAAuB,OACvB,sBAAuB,UAEvB,cAAe,2BACf,cAAe,UACf,6BAA8B,UAE9B,gBAAiB,UAEjB,oBAAqB,UACrB,4BAA6B,UAE7B,oBAAqB,UAErB,kBAAmB,YCvDVqU,EAAkB,CAC7BjgD,MAAO,qBACPzD,KAAM,YACNyjD,QAAS,6BACTpU,WAAY,CACV,gBAAiB,UACjB,gBAAiB,UACjB,gBAAiB,UACjB,oBAAqB,UACrB,gBAAiB,UACjB,0BAA2B,OAC3B,qBAAsB,UACtB,wBAAyB,UACzB,uBAAwB,UACxB,0BAA2B,UAC3B,0BAA2B,UAC3B,6BAA8B,UAC9B,iCAAkC,UAClC,oCAAqC,UACrC,yBAA0B,UAC1B,4BAA6B,UAC7B,cAAe,UAEf,sBAAuB,UACvB,yBAA0B,OAC1B,uBAAwB,UACxB,+BAAgC,UAChC,8BAA+B,UAC/B,8BAA+B,UAC/B,yBAA0B,UAC1B,+BAAgC,UAChC,kCAAmC,UACnC,mCAAoC,UACpC,oCAAqC,UAErC,sBAAuB,UACvB,6BAA8B,OAC9B,kBAAmB,UAEnB,yBAA0B,UAC1B,yBAA0B,UAC1B,sBAAuB,OACvB,sBAAuB,UAEvB,cAAe,UACf,cAAe,UACf,6BAA8B,OAE9B,gBAAiB,UAEjB,oBAAqB,UACrB,4BAA6B,UAE7B,oBAAqB,UAErB,kBAAmB,6NCnCVsU,EAAmB,MAQ9B,YACUjpD,EACAkI,EACAioB,EACAjd,EACA6F,GAJA,KAAA/Y,KAAAA,EACA,KAAAkI,WAAAA,EACA,KAAAioB,aAAAA,EACA,KAAAjd,YAAAA,EACA,KAAA6F,aAAAA,EAZF,KAAAmwC,cAAe,EAEvB,KAAAC,oBAAsB,GAatB,YACE,OAAOlpD,KAAKkwB,aAAaE,iBAAiB/qB,KAG5C,qBACE,MAAMiF,EAAatK,KAAKiT,YAAY3I,OACpC,OACEA,GACAA,EAAKC,SAASC,KAAKC,GAAgB,YAAXA,EAAEpF,OAC1BrF,KAAK8Y,aAAa5Y,MAClBF,KAAK8Y,aAAa5Y,KAAK+Y,UAI3B,KAAKtH,GACH,OAAIA,EAAanK,KACRxH,KAAKD,KAAKW,IACf,GAAG,EAAA,EAAYb,uBAA8B8R,EAAanK,OAC1DmK,GAGG3R,KAAKD,KAAKI,KAAK,GAAG,EAAA,EAAYN,sBAA8B8R,GAGrE,2BAA2Bw3C,GACzB,OAAOnpD,KAAKD,KACTE,IAAI,GAAG,EAAA,EAAYJ,uBAA8BspD,8BACjD5oD,YACA4iC,KAAMr4B,GACEA,EAAI4H,IAAIV,IAAAA,IAAWA,EAAGd,OAAO,MAI1C,wBAAwB4uB,GACtB,OAAO9/B,KAAKD,KAAKE,IAAoB,GAAG,EAAA,EAAYJ,4BAAmCigC,KAGzF,4BAA4Br4B,EAAmBvF,GAC7C,OAAOlC,KAAKD,KAAKE,IAAS,GAAG,EAAA,EAAYJ,+BAAsC4H,IAAa,CAC1F9G,OAAQuB,IAIZ,mCAAmC2T,EAAoB3T,GACrD,OAAOlC,KAAKD,KAAKE,IAAS,GAAG,EAAA,EAAYJ,kCAAyCgW,IAAc,CAC9FlV,OAAQuB,IAIZ,gBAAgBinD,GACd,OAAOnpD,KAAKD,KAAKE,IAAkB,GAAG,EAAA,EAAYJ,uBAA8BspD,KAGlF,sBAAsBA,GACpB,OAAOnpD,KAAKD,KACTE,IAAkB,GAAG,EAAA,EAAYJ,4BAAmCspD,KACpElnD,KACC,OAAA,EAAA,EAAA,CAAI0P,IACEA,EAAaxC,MACfwC,EAAaC,QAAUD,EAAaxC,QAM9C,mBACE,OAAOnP,KAAKD,KAAKE,IAAoB,GAAG,EAAA,EAAYJ,uBAGtD,yBAAyBqC,GACvB,OAAOlC,KAAKD,KACTE,IAAoB,GAAG,EAAA,EAAYJ,6BAAqC,CACvEc,OAAQuB,IAET3B,YAGL,uBAAuB4oD,GACrB,OAAOnpD,KAAKD,KAAKE,IACf,GAAG,EAAA,EAAYJ,uBAA8BspD,aAIjD,YAAY7gD,GACVA,EAAUtI,KAAKopD,OAAO9gD,GACtB,MAAM+gD,EAASrpD,KAAK6hB,YAAYvZ,GAAW,OAAS,QACpD,OAAOtI,KAAKD,KAAKE,IAAe,GAAG,EAAA,EAAYJ,UAAU,EAAA,KAAewpD,IAAS/gD,KAGnF,qBAAqBG,GACnB,MAAMwa,EAAW,IAAIC,SAErB,OADAD,EAASE,OAAO,MAAO1a,GAChBzI,KAAKD,KACTI,KAAU,GAAG,EAAA,EAAYN,gBAAiBojB,GAC1ChhB,KACC,OAAA,EAAA,EAAA,CAAI0P,IACF3R,KAAK2R,aAAeA,EACpB3R,KAAK42C,aAAanuC,GAAK06B,KAAK5uB,GAAWvU,KAAK+S,UAAYwB,MAG3DhU,YAGL,iBAAiB8T,GACf,OAAOrU,KAAKD,KAAKI,KAAK,GAAG,EAAA,EAAYN,6BAA8BwU,GAAc9T,YAG3E,OAAO4B,GACb,OAAOA,EAAM0B,QAAQ,WAAY,IAG3B,YAAY1B,GAClB,OAAkC,MAA3BA,EAAM8X,MAAM,YAGrB,QAAQ7R,EAAWmL,EAAY/L,GAC7BjC,aAAaM,QAAQ,sBAAuBhE,KAAKE,UAAUqG,EAAU8gD,sBACrE,MAAMI,GAAAA,IAAc,EAAA,GAAcrnC,IAAI,eAAgB,oBACtD,OAAOjiB,KAAKD,KACTW,IACC,GAAG,EAAA,EAAYb,uBAA8B2H,WAC7C,CAAEY,UAAAA,EAAWmL,WAAAA,GACb,CAAE+1C,QAAAA,IAEH/oD,YACA4iC,KAAKr4B,GACGA,GAIb,kBACE9K,KAAKipD,cAAe,EAGtB,kBACE,OAAOjpD,KAAKipD,aAGd,uBAAuBn3C,GACrB9R,KAAKkpD,oBAAsBp3C,EAG7B,yBACE,OAAO9R,KAAKkpD,oBAId,8BAA8B1hD,EAAc+hD,EAAa,IACvD,MAAM9gD,QAAYzI,KAAKiI,WAAWuhD,oBAAoBhiD,EAAM+hD,GAE5D,OADAvpD,KAAKiI,WAAWS,QAAQD,GACjBA,EAIT,kBAAkBjB,GAChB,MAAMs4B,EAAQ9/B,KAAKopC,eAAiB,UAAYppC,KAAK2yB,MAE/ClqB,QAAYzI,KAAKiI,WAAW0gC,YAAYnhC,EAAMs4B,GACpD9/B,KAAKiI,WAAWS,QAAQD,GAI1B,4BAA4BjB,GAC1B,IAAIiB,EACJ,IACEA,QAAYzI,KAAKiI,WAAWuhD,oBAAoBhiD,GAChD,MAAO9E,GACP,MAAMo9B,EAAQ9/B,KAAKopC,eAAiB,UAAYppC,KAAK2yB,MACrDlqB,QAAYzI,KAAKiI,WAAW0gC,YAAYnhC,EAAMs4B,GAGhD9/B,KAAKiI,WAAWS,QAAQD,GAG1B,OAAOghD,GACL,OAAOzpD,KAAKD,KAAKa,OAAO,GAAG,EAAA,EAAYf,uBAA8B4pD,KAGvE,aAAajnC,GACX,OAAO,IAAI4d,QAAAA,CAASC,EAASn1B,KAC3B,MAAMykC,EAAS,IAAIC,WACnBD,EAAOwP,UAAY,IAAM9e,EAAQsP,EAAOngC,QACxCmgC,EAAOG,cAActtB,mCA5NlB,EAAA,SAGA,EAAA,SAQA,EAAA,SATA,EAAA,SAQA,EAAA,IA+KP,OAAA,EAAA,EAAA,CAAA,CADC,EAAA,6KAQD,OAAA,EAAA,EAAA,CAAA,CADC,EAAA,0JASD,OAAA,EAAA,EAAA,CAAA,CADC,EAAA,oKAjLUwmC,EAAmB,OAAA,EAAA,EAAA,CAAA,CAD/B,OAAA,EAAA,EAAA,CAAW,CAAE5oD,WAAY,0CAUR,EAAA,EACM,EAAA,EACE,EAAA,EACD,EAAA,EACC,EAAA,KAbb4oD,kICIAU,EAAiB,MAC5B,YAAoB3pD,GAAA,KAAAA,KAAAA,EAEpB,wBAAwBgO,GACtB,OAAO/N,KAAKD,KAAKE,IAAkB,GAAG,EAAA,EAAYJ,cAA6B,CAC7Ec,OAAQ,CAAEoN,IAAAA,KAId,aACE,OAAO/N,KAAKD,KAAKE,IAAe,GAAG,EAAA,EAAYJ,uBAGjD,SAAS8P,GACP,OAAO3P,KAAKD,KAAKE,IAAY,GAAG,EAAA,EAAYJ,eAA6B8P,WAG3E,KAAKiC,GACH,OAAO5R,KAAKD,KAAKI,KAAiB,GAAG,EAAA,EAAYN,cAA6B+R,GAGhF,WAAWpO,GACT,OAAOxD,KAAKD,KAAKE,IAAgB,GAAG,EAAA,EAAYJ,eAA6B2D,KAG/E,OAAOA,EAAYtD,EAAWuhB,GAC5B,IAAI9gB,EAAS,IAAI,EAAA,EAIjB,OAHI8gB,IACF9gB,EAASA,EAAOshB,IAAI,qBAAsBR,IAErCzhB,KAAKD,KAAKW,IAAgB,GAAG,EAAA,EAAYb,eAA6B2D,IAAMtD,EAAM,CACvFS,OAAAA,IAIJ,eAAeA,GACb,IAAIgpD,EAAa,IAAI,EAAA,EASrB,OARIhpD,GACF4K,OAAOk0B,KAAK9+B,GACTuB,OAAOuqB,GAAO9rB,EAAO8rB,IACrBpoB,QAAQulD,IACPD,EAAaA,EAAW1nC,IAAI2nC,EAAGjpD,EAAOipD,MAIrC5pD,KAAKD,KAAKE,IACf,GAAG,EAAA,EAAYJ,8BACf,CAAEc,OAAQgpD,IAId,iBAAiBnmD,EAAY+4C,GAC3B,OAAOv8C,KAAKD,KAAKW,IACf,GAAG,EAAA,EAAYb,eAA6B2D,iBAAkB+4C,IAC9D,kCAhFG,EAAA,IA0BImN,EAAiB,OAAA,EAAA,EAAA,CAAA,CAH7B,OAAA,EAAA,EAAA,CAAW,CACVtpD,WAAY,0CAGc,EAAA,KADfspD,sCC1Bb,EAAA,EAAA,EAAA,KAAA,WAAA,OAAA,KAAA,IAAA,EAAA,EAAA,QAEO,SAASl1B,EAAeznB,GAC7BxB,OAAO6O,QAASrN,EAA+B6D,UAC5C1O,OAAAA,EAASgJ,EAAG0pC,KAAUA,EAAKrgB,SAC3BlwB,QAAAA,EAAUooB,EAAKmoB,MACVA,aAAgB,EAAA,EAClBpgB,EAAeogB,GAEfjyC,QAAQgX,IAAI8S,EAAKmoB,EAAK16B,8CCH9B,EAAA,EAAA,EAAA,KAAA,WAAA,OAAA,KAAO,MAAM2vC,6ICKA,EAA0B,MAiBrC,YAAoBjhD,EAAsC/H,GAAtC,KAAA+H,aAAAA,EAAsC,KAAA/H,GAAAA,EAfhD,KAAAipD,aAAe,IAAI,EAAA,EAW7B,KAAA9K,OAAS,SACT,KAAAC,mBAAoB,EACpB,KAAA8K,2BAA4B,EAI5B,eAAeA,GAA4B,GACzC/pD,KAAK+pD,0BAA4BA,EAEjC/pD,KAAKiJ,SAAWjJ,KAAK4I,aAAaM,OAAO,CACvCC,UAAWnJ,KAAKoJ,WAChBC,SAAUrJ,KAAKsJ,UACfC,YAAY,EACZC,QAAS,IACTC,gBAAgB,EAChBmK,YAAa,sBACbjK,OAAQ,OACRD,WAAY,SAGVqgD,IACF/pD,KAAK+M,KAAO/M,KAAKa,GAAGU,MAAM,CACxBiN,GAAI,CAAC,GAAI,EAAA,EAAWvB,UACpBwB,KAAM,CAAC,GAAI,EAAA,EAAWxB,UACtByB,WAAY,CAAC,IACblN,OAAQ,CAAC,GAAI,EAAA,EAAWyL,UACxB0B,OAAQ,CAAC,GAAI,EAAA,EAAW1B,UACxB2B,aAAc,CAAC,GAAI,EAAA,EAAW3B,UAC9B4B,IAAK,CAAC,GAAI,EAAA,EAAW5B,aAIzBjN,KAAKiJ,SAASgL,UAAUzR,UAAAA,KACtBxC,KAAKgqD,6BAIT,sBACE,OAAOhqD,KAAK+pD,2BAA6C,YAAhB/pD,KAAKg/C,OAGhD,2BACE,MAAMn4B,EAAWljB,SAASmjB,uBAAuB,oBAC7CD,IACE7mB,KAAKymB,aACPI,EAAS,GAAGE,aAAa,QAAS,qBAAqB/mB,KAAKymB,aAAaO,UAEzEH,EAAS,GAAGE,aAAa,QAAS,6CAKxC,eACM/mB,KAAKiqD,gBACPjqD,KAAKiJ,SAASihD,cAAc1gD,QAAU,IAEtCxJ,KAAKiJ,SAASihD,cAAc1gD,QAAU,IAI1C,SACsB,YAAhBxJ,KAAKg/C,QAAwBh/C,KAAKiqD,iBACpC,OAAAj5C,EAAA,EAAA,CAAchR,KAAK+M,MACf/M,KAAK+M,KAAKmE,OACZlR,KAAKmqD,0BAGPnqD,KAAKmqD,yBAIT,yBACEnqD,KAAK8pD,aAAa14C,KAAK,CACrB4tC,OAAQh/C,KAAKg/C,OACboL,aAAcpqD,KAAK+M,KAAO/M,KAAK+M,KAAK5K,MAAQ,OAE9CnC,KAAKuE,QAGP,QACEvE,KAAKiJ,SAAS1E,QACdvE,KAAKiJ,SAASY,wCArGG,EAAA,SAHZ,EAAA,0CAWN,EAAA,wBACA,EAAA,sBAIA,EAAA,GAAS,KAAA,CAAC,aAAc,CAAEC,QAAQ,uBAGlC,EAAA,GAAS,KAAA,CAAC,YAAa,CAAEA,QAAQ,OATvB,EAA0B,OAAA,EAAA,EAAA,CAAA,CALtC,OAAA,EAAA,EAAA,CAAU,CACTpF,SAAU,0BACVC,SCRa,qwDCAA,mtDF4BqB,EAAA,EAA4B,EAAA,KAjBnD,sCGXb,EAAA,EAAA,EAAA,KAAA,WAAA,OAAA,KAAO,MAAM0lD,EACX,cAAiB91C,GACf,OAAO1S,KAAKC,MAAMu9C,KAAKiL,mBAAmB/1C,iUCKjCg2C,EAAa,MACxB,YAAoBh5C,EAAwB0B,GAAxB,KAAA1B,OAAAA,EAAwB,KAAA0B,YAAAA,EAE5C,YAAY0V,EAA+B5iB,GACzC,MACMykD,EAAiC,uBAD1BxqD,KAAKiT,YAAY3I,OACJ4N,SAI1B,OAHKsyC,GACHxqD,KAAKuR,OAAOsB,SAAS,CAAC,KAEjB23C,gCAfmC,EAAA,SACrC,EAAA,IAKID,EAAa,OAAA,EAAA,EAAA,CAAA,CAHzB,OAAA,EAAA,EAAA,CAAW,CACVnqD,WAAY,0CAGgB,EAAA,EAA6B,EAAA,KAD9CmqD,GCPE,gICqBF,EAAqB,MAahC,YACUh5C,EACAoX,EACA1V,EACAzB,EACA2B,EACAD,EACAtK,EACA6hD,EACA1pD,EACA+mD,GATA,KAAAv2C,OAAAA,EACA,KAAAoX,MAAAA,EACA,KAAA1V,YAAAA,EACA,KAAAzB,oBAAAA,EACA,KAAA2B,aAAAA,EACA,KAAAD,gBAAAA,EACA,KAAAtK,aAAAA,EACA,KAAA6hD,OAAAA,EACA,KAAA1pD,UAAAA,EACA,KAAA+mD,MAAAA,EAtBV,KAAA4C,WAAa,EACb,KAAAC,YAAa,EACb,KAAAC,eAAgB,EAChB,KAAAj5C,aAA6B,IAAI,EAAA,EAGjC,KAAAk5C,WAAa,GAEb,KAAA1pD,SAAU,EAgBR,MAAM4E,EAAQ/F,KAAKuR,OAAO2lB,uBAAuBC,OAAOpxB,MACpDA,IACF/F,KAAK2R,aAAe5L,EAAM4L,aAC1B3R,KAAKmpD,iBAAmBnpD,KAAK2R,aAAanK,MAK9C,iBACExH,KAAKmB,SAAU,EAEfnB,KAAK2oB,MAAMhoB,OAAO6B,UAAU7B,IAC1BX,KAAKmpD,iBAAmBxoD,EAAc,cAElCX,KAAK8xB,kBAEX9xB,KAAK2R,mBAAqB3R,KAAKwR,oBAC5BsxC,sBAAsB9iD,KAAKmpD,kBAC3B5oD,YAEHP,KAAKmoD,oBAELnoD,KAAK6qD,WAAa7qD,KAAK2R,aAAaG,YAAYY,IAAIV,GAAKA,EAAE84C,mBAC3D9qD,KAAKmB,SAAU,EAGjB,WACE,OAAOnB,KAAKiT,YAAY3I,OAG1B,gBACE,MAAMqgD,EAAa3qD,KAAK2R,aAAaG,YAAYC,MAAM5P,IAAyB,IAAhBA,EAAM+O,OAChE65C,EAAe/qD,KAAK2R,aAAaG,YAAYC,MAAM5P,IAAUA,EAAM+O,OACzElR,KAAK2qD,WAAaA,EAClB3qD,KAAK4qD,eAAiBD,IAAeI,EACrC/qD,KAAKgrD,cAAgBhrD,KAAK2R,aAAaG,YAAY5P,OAAOC,GAASA,EAAM+O,OAAO9O,OAI1E,wBACN,IACEpC,KAAKmB,SAAU,EAGf,GACO,aAHUnB,KAAKsK,KAAK4N,SAIvBlY,KAAKyY,mBAAqBzY,KAAKkT,gBAAgBM,oBAAoBxT,KAAKsK,KAAK0C,KAAKzM,YAClFP,KAAKuT,WAAavT,KAAKyY,aAAazL,QAEtC,CACE,MAAMoG,EAAYvR,KAAKC,MAAMyD,aAAaO,QAAQ,eAClD9F,KAAKuT,WAAaH,EAAUG,WAGhCvT,KAAKmB,SAAU,EACf,MAAOyB,GACP5C,KAAKmB,SAAU,EACfwB,QAAQgX,IAAI/W,IAIhB,SAAST,GACPnC,KAAK2R,aAAaG,YAAYzN,QAAQnE,IAChCA,EAAK4qD,kBAAoB,IAC3B5qD,EAAKgR,MAAQ/O,KAGjBnC,KAAKirD,gBAGP,iBACE,OAAOjrD,KAAK2R,aAAaE,mBAAmBY,YAAYC,IAAIrB,GAAKA,EAAEvI,OAAO6J,KAAK,MAGjF,qBACE,MAAMu4C,EAAoBlrD,KAAK2R,aAAaG,YAAY5P,OAAO8P,GAAKA,EAAEd,OACtE,GAAiC,IAA7Bg6C,EAAkB9oD,OACpBpC,KAAKmT,aAAauC,OAAO,UAAW,QAAS,gCACxC,CACL,MAAM3B,EAAQ/T,KAAK4I,aAAaM,OAAO,CACrCC,UAAW,EAAA,EACX0K,kBAAmB,CACjBjC,QAAS5R,KAAK2R,aAAaC,SAE7BkX,QAAS,KACTzf,SAAU,KACVG,QAAS,MAEXxJ,KAAKyqD,OAAOU,IAAAA,KACVp3C,EAAME,UAAUhS,KAAK,OAAAm4B,EAAA,EAAA,IAAwB53B,UAAAA,KAC3C,MAAM4oD,EAAWr3C,EAAMG,sBACnBk3C,GACFA,EAASj3C,cAAc3R,UAAUuL,IAC/B/N,KAAKqrD,sBAAsBt9C,EAAKm9C,GAChCn3C,EAAMxP,eASlB,4BAA4B2uC,EAAkBgY,GAC5C,MAAMn9C,EAAMmlC,EAASrvC,QAAQ,UAAW,UAClC7D,KAAK6oB,QAAQ9a,EAAKm9C,GAI1B,cAAchY,EAAkBgY,GAC9B,MAAM9iD,EAAY,CAChB8qC,SAAAA,EACAgY,kBAAAA,GAGFlrD,KAAKwR,oBACFqX,QAAQzgB,EAAWpI,KAAKuT,WAAYvT,KAAKmpD,kBACzChmB,KAAMr4B,IACL9K,KAAKuR,OAAOsB,SAAS,CAAC,wCAAwC/H,EAAI5C,uBAIxE,cACE9B,OAAOC,SAASsP,KAAO,aAGzB,wBAAwBhE,GACtB3R,KAAKwR,oBAAoB85C,wBAAwB35C,EAAanK,MAGhE,0BACE,OAAO,EAAA,EAAmBkhC,wBACxB1oC,KAAK2R,aAAaE,mBAAmBhL,kBAIzC,0BACE,UAAW,MAAMlF,KAAc3B,KAAK2R,aAAaG,YAC/C,GAAMnQ,EAAWD,IACf,IACE,MAAMwyC,QAAsBl0C,KAAKe,UAAU0B,iBAAiBd,EAAWD,KAAKnB,YAC5E,GAAI2zC,EAAc9xC,OAAS,EAAG,CAC5B,MAAM2xC,EAAeG,EAAc,GACnCvyC,EAAW0D,KAAO0uC,EAAa/vC,KAC/BrC,EAAWijC,mBAAqBmP,EAAanP,mBAC7CjjC,EAAWkjC,OAASkP,EAAalP,OACjCljC,EAAWggB,KAAO,iBAClBhgB,EAAWoT,WAAag/B,EAAa/+B,YACrCrT,EAAWi4B,YAAcma,EAAan/B,wBACtCjT,EAAWuiC,aAAe6P,EAAavwC,GACvC7B,EAAWyiC,UAAY2P,EAAa5P,WAEtC,MAAOvhC,GACPD,QAAQgX,IAAI/W,GACZ5C,KAAK8nD,MAAMpyC,OAAO,QAAS,gDAG7B/T,EAAWggB,KAAO,0CAzMD,EAAA,SAAhB,EAAA,SACA,EAAA,SASA,EAAA,SAFA,EAAA,SANA,EAAA,SAOA,EAAA,SAVW,EAAA,SAaX,EAAA,SAJA,EAAA,IA4CP,OAAA,EAAA,EAAA,CAAA,CADCrQ,EAAA,iJAgCD,OAAA,EAAA,EAAA,CAAA,CADCA,EAAA,wJAiED,OAAA,EAAA,EAAA,CAAA,CADCA,EAAA,0KAOD,OAAA,EAAA,EAAA,CAAA,CADCA,EAAA,4JArIU,EAAqB,OAAA,EAAA,EAAA,CAAA,CALjC,OAAA,EAAA,EAAA,CAAU,CACT5M,SAAU,mBACVC,SDlBa,4zKEAA,60EDmCK,EAAA,EACD,EAAA,EACM,EAAA,EACQ,EAAA,EACP,EAAA,EACG,EAAA,EACH,EAAA,EACN,EAAA,EACG,EAAA,EACJ,EAAA,KAvBN,GErBE,4CCcF,EAA8B,MAMzC,YACU4M,EACAoX,EACA/f,EACAoK,EACAm/B,GAJA,KAAA5gC,OAAAA,EACA,KAAAoX,MAAAA,EACA,KAAA/f,aAAAA,EACA,KAAAoK,iBAAAA,EACA,KAAAm/B,aAAAA,EAGV,WACEnyC,KAAK2oB,MAAMhoB,OAAO6B,UAAAA,MAAUu5C,IAC1B,MAAM7zC,EAAmBvH,EAAyB,iBAClDX,KAAKoI,gBAAkBpI,KAAKgT,iBAAiBu4C,mBAAmBrjD,GAAkB3H,YAClFP,KAAKwrD,+BACDxrD,KAAKoI,UAAUuJ,aAAaC,QAAQ7D,MAAQ/N,KAAKoI,UAAU8qC,UAC7DlzC,KAAKozC,MAAQ,IAAI,EAAA,EACjBpzC,KAAKozC,MAAM/tC,KAAOrF,KAAKoI,UAAUuJ,aAAaC,QAAQvM,KACtDrF,KAAKozC,MAAMrlC,IAAM/N,KAAKoI,UAAUuJ,aAAaC,QAAQ7D,IACrD/N,KAAKozC,MAAM7kC,QAAUvO,KAAKoI,UAAUuJ,aAAaC,QAAQrD,QACzDvO,KAAKozC,MAAM/kC,UAAYrO,KAAKoI,UAAUuJ,aAAaC,QAAQvD,UAC3DrO,KAAKozC,MAAMhlC,UAAYpO,KAAKoI,UAAUuJ,aAAaC,QAAQxD,UAC3DpO,KAAKozC,MAAMV,SAAW1yC,KAAKoI,UAAUuJ,aAAaC,QAAQ8gC,UAE1D1yC,KAAKozC,YAAcpzC,KAAKmyC,aAAagB,cAAcnzC,KAAKoI,UAAU8qC,UAAU3yC,cAKlF,+BACE,IAAK,MAAMkrD,KAAsBzrD,KAAKoI,UAAU0J,YAAa,CAC3D,MAAMnQ,EAAa3B,KAAKoI,UAAUuJ,aAAaG,YAAY5P,OACzD8P,GAAKA,EAAEtQ,MAAQ+pD,EAAmB/pD,KAClC,GACF+pD,EAAmBpmD,KAAO1D,EAAW0D,KACrComD,EAAmBrnB,UAAYziC,EAAWyiC,UAC1CqnB,EAAmB9mB,OAAShjC,EAAWgjC,QAI3C,iBAAiBhzB,GACf,MAAM+5C,EAAY,CAChBrmD,KAAM,GACN0I,IAAK,GACLiuB,MAAO,GACPyM,gBAAiB,CAAEzM,MAAO,GAAIx6B,OAAQ,EAAGgN,GAAI,IAC7CiE,YAAa,GACbk5C,QAAS,IAgBX,OAbIh6C,IACF+5C,EAAU1vB,MAAQ,EAAA,EAAmB0M,wBACnC/2B,EAAaE,mBAAmBhL,kBAElC6kD,EAAUrmD,KAAOsM,EAAaE,mBAAmBxM,KACjDqmD,EAAU39C,IAAM4D,EAAaE,mBAAmB9D,IAChD29C,EAAUjjB,gBAAgBzM,MAAQ,EAAA,EAAmBI,wBACnDzqB,EAAaE,mBAAmBhL,kBAElC6kD,EAAUjjB,gBAAgBjnC,OAASmQ,EAAaE,mBAAmBkqB,sBAAsBv6B,OACzFkqD,EAAUjjB,gBAAgBj6B,GAAKmD,EAAaE,mBAAmBkqB,sBAAsBvtB,IAGhFk9C,EAGT,gBACE,QACqBpgD,IAAnBtL,KAAKoI,WACLpI,KAAKoI,UAAUuJ,aAAaC,SAC5B5R,KAAKoI,UAAUuJ,aAAaC,QAAQpE,YACpC,CACA,MAAMwrB,EAAa,IAAI1pB,KAAKtP,KAAKoI,UAAUuJ,aAAaC,QAAQpE,aAC1Do+C,EAAO,IAAIt8C,KACjB,IAAIu8C,EAAgBD,EAAKp7C,cAAgBwoB,EAAWxoB,cAOpD,OALE,IAAIlB,KAAKs8C,EAAKp7C,cAAeo7C,EAAKr7C,WAAYq7C,EAAKx7C,WACnD,IAAId,KAAKs8C,EAAKp7C,cAAewoB,EAAWzoB,WAAYyoB,EAAW5oB,YAE/Dy7C,IAEKA,EAET,OAAO,EAGT,cACE7rD,KAAKuR,OAAOsB,SAAS,CAAC,6BAA6B7S,KAAKoI,UAAUuJ,aAAanK,SAGjF,uBACExH,KAAKoM,SAAS+E,OACd,MAAMg4C,EAAsCxlD,SAASC,eAAe,oBAAqBzB,MACzFoD,aAAaM,QAAQ,mBAAoBsjD,GACzCnpD,KAAKuR,OAAOsB,SAAS,CAAC,8BAA8Bs2C,MAGtD,uBAAuBx3C,GACDA,EAAaG,YACfH,EAAavJ,UAGjC,YACEpI,KAAKoM,SAAWpM,KAAK4I,aAAa3F,KAAK,EAAA,EAAsB,CAC3Dwa,SAAU,SACVC,UAAU,IAId,kBAAkBiL,GAChB3oB,KAAKuR,OAAOsB,SAAS,CAAC,IAAI8V,oCA/HL,EAAA,SAAhB,EAAA,SAIY,EAAA,SAEZ,EAAA,SADA,EAAA,IAQI,EAA8B,OAAA,EAAA,EAAA,CAAA,CAL1C,OAAA,EAAA,EAAA,CAAU,CACTjkB,SAAU,6BACVC,SDXa,0jLEAA,u3FDqBK,EAAA,EACD,EAAA,EACO,EAAA,EACI,EAAA,EACJ,EAAA,KAXb,GEdE,oBCaF,EAAgB,MAQ3B,YACU4M,EACAoX,EACAnX,EACA2B,GAHA,KAAA5B,OAAAA,EACA,KAAAoX,MAAAA,EACA,KAAAnX,oBAAAA,EACA,KAAA2B,aAAAA,EAXV,KAAA24C,aAAc,EACd,KAAAC,aAAc,EAEd,KAAAC,qBAA+B,EAC/B,KAAAC,eAAyB,EACzB,KAAAC,gBAA0B,EAQxB,MAAMnmD,EAAQ/F,KAAKuR,OAAO2lB,uBAAuBC,OAAOpxB,MACpDA,IACF/F,KAAKigC,cAAgBl6B,EAAMk6B,eAI/B,WACOjgC,KAAKigC,eACRjgC,KAAK2oB,MAAMhoB,OAAO6B,UAAU7B,IAC1B,MAAMm/B,EAAQn/B,EAAc,MAC5BX,KAAKggC,SAASF,KAMZ,eAAeA,GACrB9/B,KAAKigC,oBAAsBjgC,KAAKwR,oBAAoB0uB,wBAAwBJ,GAAOv/B,YAGrF,YAAY4oD,GACVnpD,KAAKuR,OAAOsB,SAAS,CAAC,6BAA8Bs2C,IACpDnpD,KAAKmT,aAAauC,OAChB,UACA,gBACA,wFAIJ,wBAAwB7O,GACtB,OAAO,EAAA,EAAmB6hC,wBAAwB7hC,iCAxD7B,EAAA,SAAhB,EAAA,SAIA,EAAA,SADA,EAAA,IAuCP,OAAA,EAAA,EAAA,CAAA,CADCyK,EAAA,uJA7BU,EAAgB,OAAA,EAAA,EAAA,CAAA,CAL5B,OAAA,EAAA,EAAA,CAAU,CACT5M,SAAU,cACVC,SDVa,wqEEAA,8pBDsBK,EAAA,EACD,EAAA,EACc,EAAA,EACP,EAAA,KAZb,GEbE,gCCUFwnD,EAAkB,MAC7B,YAAoBlkD,EAAgCsJ,GAAhC,KAAAtJ,WAAAA,EAAgC,KAAAsJ,OAAAA,EAKpD,WAAWpO,GACT,MAAMipD,EAAqBjpD,EAAMgI,OAAOskC,MACxCzvC,KAAKuR,OAAO5Q,OAAO6B,UAAAA,MAAUu5C,IAC3B,MAAMv0C,EAAO7G,EAAa,KAC1B,GAAIyrD,EAAShqD,OAAS,EAAG,CACvB,MAAM4gB,EAAaopC,EAAS,SACtBpsD,KAAKiI,WAAWokD,YAAYrpC,EAAMxb,GACxCxH,KAAKssD,0BAA0Br3B,eAAeztB,oCAtB7C,EAAA,SAEA,EAAA,uDAUN,EAAA,GAAS,KAAA,CAAC,EAAA,EAAoC,CAAEsC,QAAQ,OAH9CqiD,EAAkB,OAAA,EAAA,EAAA,CAAA,CAL9B,OAAA,EAAA,EAAA,CAAU,CACTznD,SAAU,iBACVC,SDPa,89BEAA,2XDWmB,EAAA,EAA4B,EAAA,KADjDwnD,GEVE,wWCSF,GAAoB,MAO/B,YAAmB//C,GAAA,KAAAA,SAAAA,EACjBpM,KAAKusD,OAAS,IAAI9D,GAAA,EAGpB,YAEA,OAAO+D,GACL,IACE,MAAMl1C,EAAMk1C,EAAOC,cAAcpmD,SAASsP,KAC1C3V,KAAKusD,OAAO1pD,KAAKyU,GACjB,MAAOsF,GACP5c,KAAKusD,OAAO1pD,uCA1BT,EAAA,IAQI,GAAoB,OAAA,EAAA,EAAA,CAAA,CALhC,OAAA,EAAA,EAAA,CAAU,CACT6B,SAAU,mBACVC,SCNa,wdCAA,wSFgBgB,EAAA,KAPlB,kMGsEA,GAAiB,MAqD5B,YACU4M,EACAoX,EACA9nB,EACAiX,EACAD,EACA60C,EACAl7C,EACAs0B,EACA2H,EACAzH,EACAmc,EACAzf,EACAG,EACAD,EACAD,EACAgqB,EACAx5C,EACAF,EACAgS,EACA2nC,EACAhkD,EACA2sC,EACArlB,EACAtoB,EACA0xB,EACAv4B,GAzBA,KAAAwQ,OAAAA,EACA,KAAAoX,MAAAA,EACA,KAAA9nB,GAAAA,EACA,KAAAiX,0BAAAA,EACA,KAAAD,eAAAA,EACA,KAAA60C,WAAAA,EACA,KAAAl7C,oBAAAA,EACA,KAAAs0B,mBAAAA,EACA,KAAA2H,YAAAA,EACA,KAAAzH,mBAAAA,EACA,KAAAmc,gBAAAA,EACA,KAAAzf,yBAAAA,EACA,KAAAG,wBAAAA,EACA,KAAAD,iBAAAA,EACA,KAAAD,wBAAAA,EACA,KAAAgqB,qBAAAA,EACA,KAAAx5C,aAAAA,EACA,KAAAF,YAAAA,EACA,KAAAgS,gBAAAA,EACA,KAAA2nC,0BAAAA,EACA,KAAAhkD,aAAAA,EACA,KAAA2sC,eAAAA,EACA,KAAArlB,aAAAA,EACA,KAAAtoB,YAAAA,EACA,KAAA0xB,IAAAA,EACA,KAAAv4B,UAAAA,EA9EV,KAAAiwB,WAAa,IAAI1hB,KACjB,KAAAu9C,YAAa,EACb,KAAAC,mBAAoB,EACZ,KAAAC,WAAa,GAErB,KAAA/jB,QAAS,EACT,KAAA7nC,SAAU,EACV,KAAAkvC,QAAS,EAaT,KAAA2c,QAAS,EACT,KAAAhqB,iBAAmB,CAAC,mBAAc,QAAS,WAAY,UACvD,KAAAiqB,wBAA0BjtD,KAAKgjC,iBAC/B,KAAAkqB,cAAqB,CACnBv7C,aAAc,mBACd+S,KAAM,QACNnd,YAAa,WACbuhC,YAAa,UAIf,KAAA7X,UAAW,EAcH,KAAA7vB,WAAqC,IAAIC,GAAA,EAmC/CrB,KAAK+iC,aAAe/iC,KAAKgjC,iBAAiB,GAE1ChjC,KAAKmtD,aAAentD,KAAKa,GAAGU,MAAM,IAClCvB,KAAKuiD,YAAcviD,KAAKa,GAAGU,MAAM,CAC/ByL,IAAK,CAAC,MACNe,IAAK,CAAC,MACN1I,KAAM,CAAC,GAAI,CAAC,EAAA,EAAW4H,aAEzBjN,KAAK2xB,gBAAkB3xB,KAAK4H,YAAYE,oBAEpC9H,KAAKmjD,eACPnjD,KAAKgjC,iBAAiBhgC,KAAK,cAC3BhD,KAAKktD,cAAcnoC,SAAW,aAC9B/kB,KAAK+iC,aAAe,cA7CxB,SAAS5/B,GACPnD,KAAKixB,SAAWjxB,KAAK4H,YAAYspB,mBA+CnC,kBACElxB,KAAKs5B,IAAIa,gBAIX,iBACEn6B,KAAKmB,SAAU,QACTnB,KAAKggC,SAAShgC,KAAKsK,KAAK0C,KAE9B,MAAM,KACJxF,EAAI,SACJ+a,EAAQ,aACRwgB,EAAY,UACZsC,EAAS,UACT59B,EAAS,MACTia,GACE1hB,KAAK2oB,MAAM8K,SAASlB,YACxB,GAAI/qB,GAAQ+a,IAAa9a,GAAaia,GAAQ,CAC5C,MAAM0rC,EAAe,GAAA,EAAYC,OAAoB9qC,GACxB,cAAzB6qC,EAAan6B,SAAoD,oBAAzBm6B,EAAan6B,QACvDjzB,KAAKipC,2BAA2BhU,eAAeztB,EAAMC,GAAaia,EAAO,CAAE6C,QAAS7C,KAEpF1hB,KAAKmT,aAAauC,OAAO,QAAS,8BAClC/S,QAAQgX,IAAI4I,GACZviB,KAAKuR,OAAOsB,SAAS,CAAC,gBAAiBrL,EAAM,UAI7C69B,SACIrlC,KAAKstD,sBAAsBjoB,GAGnC,MAAM7hC,EAAKxD,KAAK2oB,MAAM8K,SAAS9yB,OAAO6C,KAAQ+e,GAAY/a,EAC1D,GAAIhE,EACF,IACE,MAAMG,QAAiB3D,KAAKilB,gBAAgBsD,YAAY/kB,EAAIu/B,GAClC,iBAAtBp/B,EAASA,gBACL3D,KAAKmoD,kBAAkBxkD,GAE/B3D,KAAKutD,SAAS5pD,GACd,MAAOjB,GACPC,QAAQC,MAAMF,GACd1C,KAAKuR,OAAOsB,SAAS,CAAC,sBAI1B7S,KAAKqrB,WACLrrB,KAAKQ,QAAUR,KAAK2oB,MAAM8K,SAAS9yB,OAAOH,QAC1C,MAAMmhB,EAAO3hB,KAAK2oB,MAAM8K,SAAS9yB,OAAOoiC,aAEpC/iC,KAAKQ,SACPR,KAAKgtD,QAAS,EACdhtD,KAAK+iC,aAAe/iC,KAAKktD,cAAcvrC,GACvC3hB,KAAKwtD,4BAA8BxtD,KAAKytD,oBAC/BztD,KAAKilB,gBAAgBs9B,cAC9BviD,KAAKgtD,QAAS,EACdhtD,KAAKuiD,YAAcviD,KAAKilB,gBAAgBs9B,YACxCviD,KAAKilB,gBAAgBs9B,YAAc,MAGrCviD,KAAKmB,SAAU,EAGjB,WACE,OAAOnB,KAAKiT,YAAY3I,OAG1B,2BACE,OAAOtK,KAAKsK,QAAUtK,KAAKsK,KAAKC,SAASjH,KAAKmH,GAAgB,kBAAXA,EAAEpF,MAGvD,mBACE,OAAOrF,KAAKsK,QAAUtK,KAAKsK,KAAKC,SAASjH,KAAKmH,GAAgB,UAAXA,EAAEpF,MAGvD,sBACE,OAAOrF,KAAK4H,YAAYwqB,gBAG1B,qBACE,OAAOpyB,KAAK6V,YAAc7V,KAAK6V,WAAWhP,mBAAqB,EAAA,EAAiBuZ,aAGlF,kBACE,OAAOpgB,KAAK4R,UAAY5R,KAAK4R,QAAQ7D,IAAM,gCAA+B,0BAIpE,4BAA4Bs3B,GAClC,MAAMF,QAA2BnlC,KAAK4sD,0BACnCc,0BAA0BroB,GAC1B9kC,YACHP,KAAKuiD,YAAY7yC,WAAW,IAAKy1B,EAAmBvzB,UACpD5R,KAAKmlC,mBAAqBA,EAC1BnlC,KAAKitD,wBAA0B,CAACjtD,KAAKgjC,iBAAiB,IACtDhjC,KAAKgtD,QAAS,EACdhtD,KAAKuiD,YAAY9yC,UAGX,yBACN,IAAIk+C,EAEJ,OAAQ3tD,KAAK+iC,cACX,KAAK/iC,KAAKgjC,iBAAiB,GACzB2qB,QAAuB3tD,KAAK0iC,yBAAyBkrB,QAAQ5tD,KAAKQ,SAClE,MACF,KAAKR,KAAKgjC,iBAAiB,GACzB2qB,QAAuB3tD,KAAK4iC,iBAAiBgrB,QAAQ5tD,KAAKQ,SAC1D,MACF,KAAKR,KAAKgjC,iBAAiB,GACzB2qB,QAAuB3tD,KAAK6iC,wBAAwB+qB,QAAQ5tD,KAAKQ,SACjE,MACF,KAAKR,KAAKgjC,iBAAiB,GACzB2qB,QAAuB3tD,KAAK2iC,wBAAwBirB,QAAQ5tD,KAAKQ,SAGrE,OAAOmtD,EAGT,eACE,OAAI3tD,KAAKwtD,sBACAxtD,KAAKwtD,sBAAsB5f,SAE7B5tC,KAAK2D,UAAY3D,KAAK2D,SAASiqC,SAGhC,SAASjqC,GACf3D,KAAK+iC,aAAep/B,EAASge,KAC7B3hB,KAAKke,MAAQva,EAASua,MAEtBle,KAAKuiD,YAAY7yC,WAAW/L,EAASiO,SAAWjO,EAASwL,KACzDnP,KAAK4R,QAAUjO,EAASiO,SAAWjO,EAASwL,IAE5CnP,KAAK2D,SAAWA,EAC6B,aAAzC3D,KAAK2oB,MAAM8K,SAASo6B,YAAYxqD,MAClCrD,KAAKqwC,OAA6B,aAApB1sC,EAASmd,OACnBnd,EAASmqD,qBACX9tD,KAAKitD,wBAA0B,CAACjtD,KAAKgjC,iBAAiB,IACtDhjC,KAAKuiD,YAAY9yC,oBAGZ9L,EAAS6D,YACT7D,EAASmd,QAGlB9gB,KAAK+tD,eAGC,eAAe5lD,GACrB,MAAMyJ,EAAU/P,KAAKC,MAAMyD,aAAaO,QAAQ,YAC5C8L,IACF5R,KAAKuiD,YAAY7yC,WAAWkC,GAC5B5R,KAAK4R,QAAUA,EACfrM,aAAaC,WAAW,kBAEpBxF,KAAKguD,kBAAkB7lD,GAGvB,wBAAwBA,GAC9BnI,KAAK6V,iBAAmB7V,KAAK8X,0BAA0Bqa,sBAAsBhqB,GAAQ5H,YACrFP,KAAKke,MAAQle,KAAK6V,YAAc7V,KAAK6V,WAAW2C,eAAe,GAGjE,gBAAgBzK,GACd,MAAMsP,EAAe,CACnB/S,KAAMtK,KAAKsK,KACXuL,WAAY7V,KAAK6V,WACjB0J,YAAY,EACZxR,IAAAA,GAEIgG,EAAQ/T,KAAK4I,aAAa3F,KAAK,GAAA,EAAsB,CACzDoa,aAAAA,EACAI,SAAU,SACVC,UAAU,IAGZ3J,EAAMnK,QAAQ+T,uBAAuBnb,UAAUoP,IAC7C5R,KAAKuiD,YAAY7yC,WAAWkC,GAC5B5R,KAAKiuD,gBAAgBr8C,GACrB5R,KAAK4R,QAAUA,IAEjBmC,EAAMnK,QAAQ6V,yBAAyBjd,UAAUkO,GAAW1Q,KAAK04B,oBAAoBhoB,IACrFqD,EAAMnK,QAAQ8V,wBAAwBld,UAAUkO,GAAW1Q,KAAKkuD,mBAAmBx9C,IACnFqD,EAAMnK,QAAQ+V,oBAAoBnd,UAAUrB,GAAYnB,KAAKmB,QAAUA,GAGjE,oBAAoBuP,GAC1B,MAAM2M,EAAe,CACnBxH,WAAY7V,KAAK6V,WACjBjE,QAASlB,EAAQkB,QACjB0L,cAAe5M,EAAQ4M,cACvBC,gBAAiB7M,EAAQ6M,iBAEbvd,KAAK4I,aAAa3F,KAAK,GAAA,EAA0B,CAC7Dua,MAAO,WACPH,aAAAA,EACAI,SAAU,SACVC,UAAU,IAEN9T,QAAQ+T,uBAAuBnb,UAAUoP,IAC7C5R,KAAKuiD,YAAY7yC,WAAWkC,GAC5B5R,KAAKiuD,gBAAgBr8C,GACrB5R,KAAK4R,QAAUA,IAIX,mBAAmBlB,GACzB,MAAM2M,EAAe,CACnBxH,WAAY7V,KAAK6V,WACjBoH,KAAMvM,EAAQkB,QAAQqL,KACtBnP,YAAa4C,EAAQkB,SAET5R,KAAK4I,aAAa3F,KAAK,GAAA,EAAyB,CAC5Doa,aAAAA,EACAI,SAAU,SACVC,UAAU,IAGN9T,QAAQ6C,OAAOjK,UAAUoP,IAC7B5R,KAAKuiD,YAAY7yC,WAAWkC,GAC5B5R,KAAKiuD,gBAAgBr8C,GACrB5R,KAAK4R,QAAUA,IAInB,eAC4C,OAAtC5R,KAAKuiD,YAAYtiD,IAAI,OAAOkC,MAC9BnC,KAAKmT,aAAauC,OAAO,UAAW,QAAS,uDAE7C1V,KAAKgtD,QAAUhtD,KAAKgtD,OAIxB,gBAAgBp7C,QACMtG,IAAhBsG,EAAQ5E,KAAqBhN,KAAK6hB,YAAY7hB,KAAK+sD,YACrD/sD,KAAKmuD,gBAAgBnuD,KAAK+sD,aAE1B/sD,KAAK4R,QAAUA,EACf5R,KAAKuiD,YAAYtiD,IAAI,OAAOsP,SAASqC,EAAQ5E,KAC7ChN,KAAKgtD,QAAS,GAIlB,eACEhtD,KAAK8jB,SAAW,GAChB9jB,KAAKuiD,YACFtiD,IAAI,QACJsP,SAASvP,KAAKuiD,YAAYtiD,IAAI,QAAQkC,MAAM0B,QAAQ,2BAA4B,KAGrF,WACE,IAAIuqD,EAAa,GAEjBpuD,KAAKuiD,YACFtiD,IAAI,QACJ+B,aAAaC,KACZ,OAAAI,GAAA,EAAA,CAAaC,EAAA,EAAYD,cACzB,OAAA+3B,EAAA,EAAA,GACA,OAAAvvB,GAAA,EAAA,CAAI1I,GAAUisD,EAAajsD,GAC3B,OAAAmX,GAAA,EAAA,CAAUnX,GAASnC,KAAKquD,YAAYlsD,IACpC,OAAAuQ,GAAA,EAAA,CAAK5H,IACH,GAAIA,EAAK,CACP,GAAI9K,KAAKuM,eAAgB,CACvB,MAAM,KAAE0Q,EAAI,SAAE6G,GAAahZ,EAC3B,GAAImS,EAAM,CAER,GAAIA,EAAKjQ,IACP,MAAO,CAACiQ,GAIV,GAAIA,EAAK7a,OAAS,EAChB,OAAO6a,EAKX,OAAOjd,KAAKsuD,eAAeF,IAActqC,GAI3C,OAAIhZ,EAAIkC,IACC,CAAClC,GAINA,EAAI1I,OAAS,EACR0I,EAIF9K,KAAKsuD,eAAeF,GAE3BpuD,KAAKuiD,YAAYtiD,IAAI,OAAOsP,SAAS,QAGzC,OAAAhN,GAAA,EAAA,CAAUvC,KAAKoB,YACf,OAAA8K,GAAA,EAAA,CAAA,CAAYxJ,EAAK6rD,KACf,IAAI5xC,EAAM,GAIV,OAHmB,MAAfja,EAAIoe,SACNnE,EAAM3c,KAAKsuD,eAAeF,IAErBG,EAAOtsD,KAAK,OAAAyV,GAAA,EAAA,CAAUiF,OAGhCna,UAAUshB,GAAa9jB,KAAK8jB,SAAWA,GAGpC,YAAY3hB,GAClB,OAAkC,MAA3BA,EAAM8X,MAAM,YAGb,YAAY9X,GAClB,IAAKA,GAASA,EAAMC,OAAS,EAC3B,OAAO,OAAA+J,GAAA,EAAA,CAAG,MAGZ,IAAKhK,GAASA,EAAMC,OAAS,EAC3B,OAAO,OAAA+J,GAAA,EAAA,CAAG,MAGZ,MAAMqiD,GAAAA,IAA6B,EAAA,GAAkB1pD,UAAU3C,GAGzDssD,EAFczuD,KAAK6hB,YAAY2sC,IAE4B,KAAlCA,EAAuBpsD,OAEtD,OAAIpC,KAAKuM,eACHkiD,EAEKzuD,KAAK0sD,WAAWgC,wBAAwBF,GAAwBvsD,KACrE,OAAAyQ,GAAA,EAAA,CAAI5H,IAAAA,CAAUmS,KAAMnS,KACpB,OAAAwO,GAAA,EAAA,CAAUxO,GACJA,EAAImS,KAAK7a,OACJ,OAAA+J,GAAA,EAAA,CAAGrB,GAGL9K,KAAK6X,eACT4I,gBAAgB+tC,GAChBvsD,KAAK,OAAAyQ,GAAA,EAAA,CAAIi8C,IAAAA,CAAW7qC,SAAU6qC,QAMhC3uD,KAAK8X,0BAA0B82C,QAAQzsD,GAAOF,KAAK,OAAAyQ,GAAA,EAAA,CAAI5H,IAAAA,CAAUmS,KAAMnS,MAG5E2jD,EACKzuD,KAAK6X,eAAe4I,gBAAgB+tC,GAGtCxuD,KAAK8X,0BAA0BoJ,oBAAoB/e,EAAOnC,KAAKsK,KAAK0C,KAGrE,eAAe6hD,EAAqBC,GAAoB,GAC9D,MAAM/gD,GAAAA,IAAU,EAAA,GAAkBjJ,UAAU+pD,GACtCE,EAAgB/uD,KAAK6hB,YAAY9T,GAEvC,IAAKghD,EACH,OAAI/uD,KAAKuM,eACA,CACL,CACEwB,IAAK,KACLE,SACE,uKAeV,GAAI8gD,GAAgC,KAAfhhD,EAAI3L,OAAe,CACtCpC,KAAK+sD,WAAah/C,EAClB,IAAIE,EAAW,oBAAoB4gD,0DASnC,OARI7uD,KAAKuM,iBAEL0B,EADE6gD,EACS,gCAA6BD,qDAE7B,gCAA6BA,kDAIrC,CAAC,CAAE9gD,IAAK,KAAME,SAAAA,KAIzB,UAAU+6B,GACRhpC,KAAKgpC,OAASA,EAGR,qBACN,IACE,MAAMgmB,EAAMhvD,KAAKmtD,aAAal8C,cACxBW,EAAU5R,KAAKuiD,YAAYpgD,MAQjC,IAAI8sD,EACJ,OARIjvD,KAAKuM,eACPyiD,EAAI7/C,IAAMyC,EAEVo9C,EAAIp9C,QAAUA,EAEhBo9C,EAAI9wC,MAAQle,KAAKke,MACjB8wC,EAAIxnD,KAAOxH,KAAK2D,UAAY3D,KAAK2D,SAAS6D,KAElCxH,KAAK+iC,cACX,IAAK,mBACHksB,QAAsBjvD,KAAKwR,oBACxB8hC,KAAK,CAAEz9B,WAAY7V,KAAKsK,KAAK0C,OAAQgiD,IACrC/sD,KAAK,OAAA+wB,GAAA,EAAA,CAAK,IACVzyB,YACH0uD,EAActtC,KAAO,eACrB,MACF,IAAK,WACHstC,QAAsBjvD,KAAK8lC,mBACxBwN,KAAK,CAAEz9B,WAAY7V,KAAKsK,KAAK0C,OAAQgiD,IACrCzuD,YACH0uD,EAActtC,KAAO,cACrB,MACF,IAAK,QACH,MAAMsR,EAAUjzB,KAAKkvD,uBAAuBlvD,KAAKmtD,aAAahrD,MAAMyrC,UACpE,GAAI3a,EAGF,OAFAjzB,KAAKmT,aAAauC,OAAO,UAAW,QAASud,GAC7CjzB,KAAKmB,SAAU,EACR,KAGT,IAAKnB,KAAKmtD,aAAaj8C,MAOrB,OANAlR,KAAKmT,aAAauC,OAChB,UACA,QACA,2DAEF1V,KAAKmB,SAAU,EACR,KAGT8tD,QAAsBjvD,KAAKytC,YAAY6F,KAAK,CAAEz9B,WAAY7V,KAAKsK,KAAK0C,OAAQgiD,IAAOzuD,YACnF0uD,EAActtC,KAAO,OAErB,MACF,IAAK,SACH,IAAK3hB,KAAKmtD,aAAaj8C,MAGrB,OAFAlR,KAAKmT,aAAauC,OAAO,UAAW,QAAS,iDAC7C1V,KAAKmB,SAAU,EACR,KAET8tD,QAAsBjvD,KAAKgmC,mBACxBsN,KAAK,CAAEz9B,WAAY7V,KAAKsK,KAAK0C,OAAQgiD,IACrCzuD,YACH0uD,EAActtC,KAAO,cACrB,MACF,IAAK,aACHstC,QAAsBjvD,KAAKmiD,gBACxB7O,KAAK,CAAEz9B,WAAY7V,KAAK6V,WAAW1N,UAAW6mD,IAC9C/sD,KAAK,OAAA+wB,GAAA,EAAA,CAAK,IACVzyB,YACH0uD,EAActtC,KAAO,WACrB,MACF,QAGE,OAFAhf,QAAQwsD,KAAK,0BAA2BnvD,KAAK+iC,cAC7C/iC,KAAKmB,SAAU,EACR,KAEX,OAAO8tD,EACP,MAAOvsD,GAcP,MAbmB,MAAfA,EAAIoe,OACN9gB,KAAKmT,aAAauC,OAChB,QACA,2BACAhT,EAAIE,MAAMA,OAASF,EAAIE,MAAMA,MAAMqwB,SAGrCjzB,KAAKmT,aAAauC,OAChB,QACA,OACA,uCAAuC1V,KAAK+iC,gBAG1CrgC,GAIF,uBAAuBkrC,GAC7B,MAAMwhB,EAAsBpvD,KAAKqvD,wBAAwBzhB,GAEnD0hB,EAAkB1hB,EACrBl7B,IAAIod,GAAW9vB,KAAKuvD,oBAAoBz/B,EAAQqW,QAChDjkC,OAAOya,GAAOA,EAAIva,QAErB,OAAIgtD,EAAoBhtD,OAAS,EACxB,4DAAmDgtD,EAAoBz8C,KAAK,SAEjF28C,EAAgBltD,OAAS,EACpB,yDAAgDktD,EAAgB38C,KAAK,SAEvE,GAGD,wBAAwBgK,GAC9B,OAAO3c,KAAKwvD,oBAAoB7yC,EAAK,YAG/B,oBAAoBA,GAC1B,OAAO3c,KAAKwvD,oBAAoB7yC,EAAK,QAG/B,oBAAoBA,EAAK8yC,GAC/B,MAAMC,EAAa/yC,EAAIgzC,KAAAA,CAAMjtC,EAAG8G,IAAO9G,EAAE+sC,GAASjmC,EAAEimC,GAAS,GAAK,GAC5DG,EAAU,GAChB,IAAK,IAAI30C,EAAI,EAAGA,EAAIy0C,EAAWttD,OAAS,EAAG6Y,IACrCy0C,EAAWz0C,EAAI,GAAGw0C,KAAWC,EAAWz0C,GAAGw0C,IAC7CG,EAAQ5sD,KAAK0sD,EAAWz0C,GAAGw0C,IAG/B,OAAOG,EAGT,0BACE,GAAI5vD,KAAK+iC,eAAiB/iC,KAAKktD,cAAcv7C,aAC3C3R,KAAK6vD,yBAAyB,eACzB,CACL,IACE7vD,KAAKmB,SAAU,EACf,MAAM8tD,QAAsBjvD,KAAK8vD,qBAC3B9vD,KAAK+vD,WAAWd,GACtB,MAAOvsD,GACPC,QAAQC,MAAMF,GAEhB1C,KAAKmB,SAAU,GAIX,iBAAiB8tD,EAAoBjQ,EAAS,IACpD,IACEh/C,KAAKmB,SAAU,EACf69C,EAAc,MAAIh/C,KAAKkwB,aAAaE,iBAAiB/qB,WAC/CrF,KAAKilB,gBAAgB+qC,mBAAmBf,EAAcznD,KAAMw3C,GAClEh/C,KAAKuR,OAAOsB,SAAS,CAAC,gBAAiBo8C,EAAcznD,KAAM,SAC3D,MAAO9E,GACPC,QAAQC,MAAMF,GAEhB1C,KAAKmB,SAAU,EAGjB,uBACE,GAAInB,KAAK+iC,eAAiB/iC,KAAKktD,cAAcv7C,aAC3C3R,KAAK6vD,yBAAyB,YACzB,CACL,IACE7vD,KAAKmB,SAAU,EACf,MAAM8tD,QAAsBjvD,KAAK8vD,qBAC3B9vD,KAAKiwD,QAAQhB,EAAcznD,MACjC,MAAO9E,GACPC,QAAQC,MAAMF,GAEhB1C,KAAKmB,SAAU,GAIX,cAAcqG,EAAcw3C,EAAS,IAC3CA,EAAc,MAAIh/C,KAAKkwB,aAAaE,iBAAiB/qB,KACrD,MAAMiS,QAAYtX,KAAKilB,gBAAgBirC,qBAAqB,CAC1D1oD,KAAAA,EACAqO,WAAY7V,KAAK6V,WACjBpO,UAAWzH,KAAKuiD,YAAYpgD,MAAM6K,IAClCgyC,OAAAA,EACAmE,aAAcnjD,KAAKmjD,eAErB/8C,OAAOC,SAASsP,KAAO2B,EAIjB,yBAAyB6oB,GAC/B,IAAI4pB,GAA4B,EAI9BA,EADE/pD,KAAK4R,SAAW5R,KAAK4R,QAAQ9D,YACH9N,KAAKmwD,gCAELnwD,KAAK+pD,4BAGnC/pD,KAAKowD,kBAAkBn7B,eAAe80B,GAEtC/pD,KAAKowD,kBAAkBtG,aAAa7nD,KAAK,OAAA+wB,GAAA,EAAA,CAAK,IAAIxwB,UAAAA,MAAUu5C,IAC1D/7C,KAAKmB,SAAU,EACf,IACE,MAAM,OAAE69C,EAAM,aAAEoL,GAAiBlqD,EACjC,GAAe,YAAX8+C,GAAwB+K,EAA2B,CACrD,MAAMsG,QAAuBrwD,KAAKswD,qBAAqBlG,GACnDpqD,KAAK4R,QAAQ9D,YACf9N,KAAK4R,QAAQ9D,YAAcuiD,EAE3BrwD,KAAK4R,QAAUy+C,SAGZnwD,EAAKkqD,mBACNpqD,KAAKuwD,oCAAoCpwB,EAAQjgC,GACvD,MAAOwC,GACPC,QAAQC,MAAMF,GACd1C,KAAKmB,SAAU,KAKrB,iBACE,QAAInB,KAAK4R,QAAQpE,aACR6B,EAAA,EAAUqR,WAAW1gB,KAAK4R,QAAQpE,aAKrC,4BACN,OACGxN,KAAK4R,QAAQrD,SACbvO,KAAK4R,QAAQrD,UACXvO,KAAK4R,QAAQrD,QAAQM,MACrB7O,KAAK4R,QAAQrD,QAAQI,SACrB3O,KAAK4R,QAAQrD,QAAQ/M,SACrBxB,KAAK4R,QAAQrD,QAAQK,eACrB5O,KAAK4R,QAAQrD,QAAQE,OACrBzO,KAAK4R,QAAQrD,QAAQC,GAIpB,gCACN,OACGxO,KAAK4R,QAAQ9D,cACb9N,KAAK4R,QAAQ9D,YAAYS,SACzBvO,KAAK4R,QAAQ9D,YAAYS,UACvBvO,KAAK4R,QAAQ9D,YAAYS,QAAQM,MACjC7O,KAAK4R,QAAQ9D,YAAYS,QAAQI,SACjC3O,KAAK4R,QAAQ9D,YAAYS,QAAQ/M,SACjCxB,KAAK4R,QAAQ9D,YAAYS,QAAQK,eACjC5O,KAAK4R,QAAQ9D,YAAYS,QAAQE,OACjCzO,KAAK4R,QAAQ9D,YAAYS,QAAQC,GAIxC,qBAAqBD,GACnB,OAAO,IAAI6xB,QAAAA,MAAeC,EAASmwB,KACjC,IACE,MACMC,GAD0BzwD,KAAK4R,QAAQ9D,YACH9N,KAAK4R,QAAU5R,KAAK4R,QAAQ9D,YAChE4iD,EAAc,IAAKD,EAAUliD,QAAAA,GAEnC8xB,QADsBrgC,KAAK6X,eAAee,OAAO63C,EAASzjD,IAAK0jD,GAAanwD,aAE5E,MAAOqC,GACP5C,KAAKmT,aAAauC,OAChB,QACA,QACA,gEAEF1V,KAAKmB,SAAU,EACfqvD,EAAO5tD,MAMb,0CAA0Cu9B,EAAgBjgC,GACxD,MAAM+uD,QAAsBjvD,KAAK8vD,eAClB,YAAX3vB,QACIngC,KAAK+vD,WAAWd,EAAe/uD,SAE/BF,KAAKiwD,QAAQhB,EAAcznD,KAAMtH,GAI3C,cACEF,KAAKoB,WAAWyB,MAAK,GACrB7C,KAAKoB,WAAW0B,WAGlB,YAAYyL,GACVvO,KAAKke,MAAQ3P,EAGf,mBAAmBw0B,GACjB/iC,KAAK+iC,aAAeA,EAGtB,kBACE,MAAM4tB,EAAM3wD,KAAKmtD,aAAahrD,MAC9B,OACGnC,KAAKuiD,YAAYpgD,MAAM6K,MACvBhN,KAAKuiD,YAAYpgD,MAAMkD,OACvBrF,KAAKmtD,aAAaj8C,OACU,IAA5B3F,OAAOk0B,KAAKkxB,GAAKvuD,QAAgBuuD,EAAIC,cAAgBrlD,QACtDvL,KAAKqwC,UACHrwC,KAAKQ,QAIH,YACNR,KAAKuiD,YAAYr/C,QACjBlD,KAAKmtD,aAAajqD,QAClBlD,KAAKwtD,sBAAwB,KAC7BxtD,KAAKgtD,QAAS,EAIhB,2BACE,IACEhtD,KAAKmB,SAAU,EACf,MAAMwoB,QAAe3pB,KAAK2sD,qBAAqBkE,aAAa7wD,KAAK6V,WAAWhP,kBAC5E7G,KAAKmB,SAAU,EAEDnB,KAAK4I,aAAa3F,KAAK,GAAA,EAAiC,CACpEoa,aAAc,CAAEsM,OAAAA,GAChBlM,SAAU,WAGN7T,QAAQogB,YAAYxnB,UAAUqxC,IAClC7zC,KAAKwtD,sBAAwB3Z,EAC7B7zC,KAAKgtD,QAAS,IAEhB,MAAOtqD,GACP1C,KAAKmB,SAAU,EACfnB,KAAKmT,aAAauC,OAAO,UAAW,QAAS,gDAKjD,sCACE,IACE1V,KAAKmB,SAAU,EACf,MAAM2vD,QAA0B9wD,KAAK+wD,4BAGrC,GAFA/wD,KAAKmB,SAAU,EAEX2vD,EAAkB1uD,OAAQ,CAC5B,MAAMib,EAAe,CACnB0lB,aAAc/iC,KAAK+iC,aACnB+tB,kBAAAA,GAEF9wD,KAAKgxD,+BAA+B3zC,QAEpCrd,KAAKmT,aAAauC,OAChB,UACA,QACA,0CAAoC1V,KAAK+iC,2DAG7C,MAAOrgC,GACP1C,KAAKmB,SAAU,EACfnB,KAAKmT,aAAauC,OAAO,UAAW,QAAS,wDAIzC,+BAA+B2H,GACrC,MAAMtJ,EAAQ/T,KAAK4I,aAAa3F,KAAK,GAAA,EAAoC,CACvEoa,aAAAA,EACAI,SAAU,WAEZ1J,EAAMnK,QAAQogB,YAAYxnB,UAAU6/C,IAClCriD,KAAKwtD,sBAAwBnL,EAC7BriD,KAAKgtD,QAAS,IAGhBj5C,EAAMnK,QAAQo+C,UAAUxlD,UAAU6/C,IAChCriD,KAAKilB,gBAAgBs9B,YAAcviD,KAAKuiD,YACxCF,EAAM1+C,SAAW0+C,EAAM1+C,UAAY,eACnC3D,KAAKuR,OAAOsB,SAAS,CAAC,sBAAuBwvC,EAAMr1C,IAAKq1C,EAAM1+C,SAAU,WAG1EoQ,EAAMnK,QAAQq+C,YAAYzlD,UAAWhC,IACnCuT,EAAM5C,OACNnR,KAAKu1C,eAAe1sB,QAAQ,CAC1BC,QAAS,gBACT3f,UAAW,iDAAiDnJ,KAAK+iC,6BACjEp5B,OAAQoyC,UACN,UACQ/7C,KAAKixD,oBAAoBzwD,GAC/BR,KAAKmT,aAAauC,OAAO,UAAW,UAAW,kCAC/C,MAAOhT,GACP1C,KAAKmT,aAAauC,OAAO,UAAW,QAAS,8CAGjDhM,WAAY,IAAM1J,KAAKgxD,+BAA+B3zC,OAMpD,0BAA0B7c,GAChC,OAAQR,KAAK+iC,cACX,KAAK/iC,KAAKgjC,iBAAiB,SACnBhjC,KAAK0iC,yBAAyBwuB,WAAW1wD,GAC/C,MACF,KAAKR,KAAKgjC,iBAAiB,SACnBhjC,KAAK4iC,iBAAiBsuB,WAAW1wD,GACvC,MACF,KAAKR,KAAKgjC,iBAAiB,SACnBhjC,KAAK6iC,wBAAwBquB,WAAW1wD,GAC9C,MACF,KAAKR,KAAKgjC,iBAAiB,SACnBhjC,KAAK2iC,wBAAwBuuB,WAAW1wD,IAM5C,kCACN,IAAIswD,EAAoB,GACxB,OAAQ9wD,KAAK+iC,cACX,KAAK/iC,KAAKgjC,iBAAiB,GACzB8tB,QAA0B9wD,KAAK0iC,yBAAyByuB,sBACtDnxD,KAAK6V,WAAW1N,QAElB,MACF,KAAKnI,KAAKgjC,iBAAiB,GACzB8tB,QAA0B9wD,KAAK4iC,iBAAiBuuB,sBAAsBnxD,KAAK6V,WAAW1N,QACtF,MACF,KAAKnI,KAAKgjC,iBAAiB,GACzB8tB,QAA0B9wD,KAAK6iC,wBAAwBsuB,sBACrDnxD,KAAK6V,WAAW1N,QAElB,MACF,KAAKnI,KAAKgjC,iBAAiB,GACzB8tB,QAA0B9wD,KAAK2iC,wBAAwBwuB,sBACrDnxD,KAAK6V,WAAW1N,QAKtB,OAAO2oD,EAAkB5uD,OAAOkvD,GAAiD,SAA7BA,EAAiB5qD,SAGvE,+BACE,GAAIxG,KAAKmtD,aAAaj8C,MAAO,CAC3BlR,KAAKmtD,aAAahrD,MAAM0T,WAAa7V,KAAK6V,WAAW1N,OACrD,MAAMkV,EAAe,CACnBkmB,cAAevjC,KAAKmtD,aAAahrD,MACjC4gC,aAAc/iC,KAAK+iC,cAErB/iC,KAAK4I,aAAa3F,KAAK,GAAA,EAAmC,CACxDua,MAAO,WACPH,aAAAA,EACAI,SAAU,SACVC,UAAU,QAEP,CACL,MAAM2f,EAAMr9B,KAAKqxD,aAAarxD,KAAK+iC,cACnC/iC,KAAKmT,aAAauC,OAAO,UAAW,QAAS2nB,IAKjD,0BAA0BglB,EAAY7hD,GACpC,IACE,IAAI8wD,EAAa,KAEjB,OAAQtxD,KAAK+iC,cACX,KAAK/iC,KAAKgjC,iBAAiB,GACzBsuB,QAAmBtxD,KAAK2iC,wBAAwB/pB,OAAOypC,EAAO7hD,GAC9D,MACF,KAAKR,KAAKgjC,iBAAiB,GACzBsuB,QAAmBtxD,KAAK6iC,wBAAwBjqB,OAAOypC,EAAO7hD,GAC9D,MACF,KAAKR,KAAKgjC,iBAAiB,GACzBsuB,QAAmBtxD,KAAK4iC,iBAAiBhqB,OAAOypC,EAAO7hD,GACvD,MAEF,QACE8wD,QAAmBtxD,KAAK0iC,yBAAyB9pB,OAAOypC,EAAO7hD,GAGnER,KAAKwtD,2BAAwBliD,EAC7BtL,KAAKQ,aAAU8K,EAEftL,KAAKmT,aAAauC,OAAO,UAAW,UAAW,4BAC/C1V,KAAKuR,OAAOsB,SAAS,CAAC,sBACtB,MAAOnQ,GACPC,QAAQC,MAAMF,GACd1C,KAAKmT,aAAauC,OAAO,QAAS,QAAS,6BAI/C,kBACE1V,KAAKuR,OAAOsB,SAAS,CAAC,sBAGxB,8BAEE,MAAuB,0BADR7S,KAAKkwB,aAAaE,iBACnB/qB,KAGhB,wBAAwBsM,GACtB,UAAW,MAAMhQ,KAAcgQ,EAAaG,YAC1C,GAAMnQ,EAAWD,IACf,IACE,MAAMwyC,QAAsBl0C,KAAKe,UAAU0B,iBAAiBd,EAAWD,KAAKnB,YAC5E,GAAI2zC,EAAc9xC,OAAS,EAAG,CAC5B,MAAM2xC,EAAeG,EAAc,GACnCvyC,EAAW0D,KAAO0uC,EAAa/vC,KAC/BrC,EAAWijC,mBAAqBmP,EAAanP,mBAC7CjjC,EAAWkjC,OAASkP,EAAalP,OACjCljC,EAAWggB,KAAO,iBAClBhgB,EAAWoT,WAAag/B,EAAa/+B,YACrCrT,EAAWi4B,YAAcma,EAAan/B,wBACtCjT,EAAWuiC,aAAe6P,EAAavwC,GACvC7B,EAAWyiC,UAAY2P,EAAa5P,WAEtC,MAAOvhC,GACPD,QAAQgX,IAAI/W,GACZ5C,KAAKmT,aAAauC,OAAO,QAAS,gDAGpC/T,EAAWggB,KAAO,YAKhB,aAAaohB,GACnB,OAAQA,GACN,IAAK,mBACH,MAAO,qEACT,IAAK,QACH,MAAO,sDACT,QACE,MAAO,sCAIb,wBACE/iC,KAAK4R,QAAU,KACf5R,KAAKuiD,YAAYr/C,uCA1kCI,EAAA,SAAhB,EAAA,SADA,EAAA,SAKA,EAAA,SACA,EAAA,SA0BA,GAAA,SA5BA,EAAA,SA+BA,GAAA,SAUA,GAAA,SAJA,GAAA,SAKA,GAAA,SAEA,GAAA,SANA,GAAA,SAEA,GAAA,SAGA,GAAA,SAEA,GAAA,SAnCA,EAAA,SAZA,EAAA,SAyCA,GAAA,SApCA,EAAA,SAWA,EAAA,SADA,EAAA,SAFA,EAAA,SAZA,EAAA,SAVP,EAAA,SA2DO,EAAA,yCAoDN,EAAA,GAAS,KAAA,CAAC,kDAGV,EAAA,GAAS,KAAA,CAAC,EAAA,EAA4B,CAAE4G,QAAQ,+BAGhD,EAAA,GAAS,KAAA,CAAC,GAAA,EAA4B,CAAEA,QAAQ,yBAGhD,EAAA,GAAS,KAAA,CAAC,GAAsB,CAAEA,QAAQ,sBAK1C,EAAA,EAAY,KAAA,CAAC,gBAAiB,CAAC,cAsDhC,OAAA,EAAA,EAAA,CAAA,CADCwH,EAAA,kJAoFD,OAAA,EAAA,EAAA,CAAA,CADCA,EAAA,qKAYD,OAAA,EAAA,EAAA,CAAA,CADCA,EAAA,0JAkDD,OAAA,EAAA,EAAA,CAAA,CADCA,EAAA,wJAWD,OAAA,EAAA,EAAA,CAAA,CADCA,EAAA,iKAiPD,OAAA,EAAA,EAAA,CAAA,CADCA,EAAA,sJA8HD,OAAA,EAAA,EAAA,CAAA,CADCA,EAAA,2JAgBD,OAAA,EAAA,EAAA,CAAA,CADCA,EAAA,iKAaD,OAAA,EAAA,EAAA,CAAA,CADCA,EAAA,wJAgBD,OAAA,EAAA,EAAA,CAAA,CADCA,EAAA,8JAsGD,OAAA,EAAA,EAAA,CAAA,CADCA,EAAA,0LA2CD,OAAA,EAAA,EAAA,CAAA,CADCA,EAAA,4JAuBD,OAAA,EAAA,EAAA,CAAA,CADCA,EAAA,uKA6DD,OAAA,EAAA,EAAA,CAAA,CADCA,EAAA,mKAmBD,OAAA,EAAA,EAAA,CAAA,CADCA,EAAA,mKA+CD,OAAA,EAAA,EAAA,CAAA,CADCA,EAAA,0KAt7BU,GAAiB,OAAA,EAAA,EAAA,CAAA,CAL7B,OAAA,EAAA,EAAA,CAAU,CACT5M,SAAU,eACVC,SJ5Ea,unUIqIK,EAAA,EACD,EAAA,EACH,EAAA,EACuB,EAAA,EACX,EAAA,EACJ,GAAA,EACS,EAAA,EACD,GAAA,EACP,GAAA,EACO,GAAA,EACH,GAAA,EACS,GAAA,EACD,GAAA,EACP,GAAA,EACO,GAAA,EACH,GAAA,EACR,EAAA,EACD,EAAA,EACI,GAAA,EACU,EAAA,EACb,EAAA,EACE,EAAA,EACF,EAAA,EACD,EAAA,EACR,EAAA,EACM,EAAA,KA/EV,ICtEb,MAAMsR,GAAiB,CACrB,CAAE5S,KAAM,MAAO6S,UAAW,GAAmBC,YAAa,CAACo0C,IAC3D,CAAElnD,KAAM,UAAW6S,UAAW,GAAmBC,YAAa,CAACo0C,IAC/D,CAAElnD,KAAM,WAAY6S,UAAW,GAAmBC,YAAa,CAACo0C,IAChE,CACElnD,KAAM,oCACN6S,UAAW,GACXC,YAAa,CAACo0C,IAEhB,CAAElnD,KAAM,sBAAuB6S,UAAW,GAC1C,CAAE7S,KAAM,4CAA6C6S,UAAW,GAChE,CAAE7S,KAAM,+BAAgC6S,UAAW,GACnD,CAAE7S,KAAM,mBAAoB6S,UAAWi2C,QAO5BoF,GAAqB,QAArBA,GAAqB,OAAA,EAAA,EAAA,CAAA,CAJjC,OAAA,EAAA,EAAA,CAAS,CACRl7C,QAAS,CAAC,EAAA,EAAaC,SAASL,KAChCO,QAAS,CAAC,EAAA,MAEC+6C,kBCjBA,GAAoB,MAQ/B,YAAoB1wD,GAAA,KAAAA,GAAAA,EAJV,KAAAisC,YAAuC,IAAI,EAAA,EAKnD9sC,KAAKwxD,gBAAkBxxD,KAAKa,GAAGU,MAAM,CACnCkwD,eAAgB,EAAC,GACjBxS,kBAAmB,EAAC,GACpB92B,KAAMnoB,KAAKa,GAAG6Y,QAAQ,GAAI,EAAA,EAAWzM,UACrC2sB,YAAa55B,KAAKa,GAAG6Y,QAAQ,MAIjC,WACE1Z,KAAK0xD,gBACL1xD,KAAK8sC,YAAY17B,KAAKpR,KAAKwxD,iBAG7B,kBACE,OAAOxxD,KAAK4R,UAAY5R,KAAK4R,QAAQ7D,IAAM,gCAA+B,0BAG5E,gBACgBxG,GACd,GAAIA,EAAa,CACf,MAAMpF,EAAQoF,EAAYqyB,YAAYp1B,OAAAA,CACnCigC,EAAalZ,IAAiBkZ,EAAc,KAAOlZ,GAEtDvrB,KAAKwxD,gBAAgBvxD,IAAI,QAAQsP,SAASpN,GAC1CnC,KAAKwxD,gBAAgBvxD,IAAI,eAAesP,SAAShI,EAAYqyB,aAG/D55B,KAAK0xD,gBAGP,qBACqBrwC,GACnB,GAAIA,EAAkB,CACpBrhB,KAAKwxD,gBAAgBt5B,WAAW,QAASl4B,KAAKa,GAAG6Y,QAAQ,GAAI,EAAA,EAAWzM,WAExE,MAAM9K,EAAQkf,EAAiBuY,YAAYp1B,OAAAA,CACxCigC,EAAalZ,IAAiBkZ,EAAc,KAAOlZ,GAEtDvrB,KAAKwxD,gBAAgBvxD,IAAI,SAASsP,SAAS8R,EAAiBvY,OAC5D9I,KAAKwxD,gBAAgBvxD,IAAI,QAAQsP,SAASpN,GAC1CnC,KAAKwxD,gBAAgBvxD,IAAI,eAAesP,SAAS8R,EAAiBuY,aAGpE55B,KAAK0xD,gBAGP,gBACE1xD,KAAKwxD,gBAAgBvxD,IAAI,QAAQ+B,aAAaQ,UAAU0P,IACtD,GAAIA,EAAK,CACP,MAAM/P,EAAQ+P,EAAI0W,MAAM,MACxB5oB,KAAKwxD,gBAAgBvxD,IAAI,eAAesP,SAASpN,MAGrDnC,KAAK8sC,YAAY17B,KAAKpR,KAAKwxD,gDAxEtB,EAAA,sCAWN,EAAA,0BACA,EAAA,wBACA,EAAA,uBACA,EAAA,uBAsBA,EAAA,4BAaA,EAAA,KAvCU,GAAoB,OAAA,EAAA,EAAA,CAAA,CALhC,OAAA,EAAA,EAAA,CAAU,CACT9sD,SAAU,kBACVC,SCRa,2rBCAA,2eFmBW,EAAA,KARb,QGGA,GAAa,MAexB,YACU9D,EACA4sC,EACAt6B,GAFA,KAAAtS,GAAAA,EACA,KAAA4sC,YAAAA,EACA,KAAAt6B,aAAAA,EAdA,KAAA25B,YAAuC,IAAI,EAAA,EAMrD,KAAA6kB,SAAU,EACV,KAAAC,mBAAoB,EAUpB,WACE5xD,KAAKypC,SAAW,EAChBzpC,KAAKy7B,YACLz7B,KAAKytC,YAAYokB,eAAervD,UAAUsvD,IACxC9xD,KAAK8xD,UAAYA,IAIrB,kBACE,OAAO9xD,KAAK4R,UAAY5R,KAAK4R,QAAQ7D,IAAM,gCAA+B,0BAGpE,UAAU2W,GAYhB,GAXK1kB,KAAK+xD,WACR/xD,KAAK+xD,SAAW/xD,KAAKa,GAAGU,MAAM,CAC5BkwD,eAAgB,EAAC,GACjBxS,kBAAmB,EAAC,GACpBrR,SAAU5tC,KAAKa,GAAGq7B,MAAM,GAAI,EAAA,EAAWjvB,UACvCq3B,cAAetkC,KAAKa,GAAG6Y,QAAQ,IAC/ByO,KAAMnoB,KAAKa,GAAG6Y,QAAQ,MAExB1Z,KAAKgyD,aAAahvD,KAAKhD,KAAKiyD,iBAG1BvtC,GAA0B,SAAlBA,EAAK/gB,WACX+gB,EAAK5b,QACP9I,KAAK+xD,SAAS75B,WAAW,QAASl4B,KAAKa,GAAG6Y,QAAQ,GAAI,EAAA,EAAWzM,WACjEjN,KAAK+xD,SAAS9xD,IAAI,SAASsP,SAASmV,EAAK5b,QAG3C9I,KAAKgyD,aAAa3pB,QAClB3jB,EAAKkpB,SAASvpC,QAAQ6tD,GAAMlyD,KAAKmyD,YAAYD,IAC7ClyD,KAAK+xD,SAAS9xD,IAAI,iBAAiBsP,SAASmV,EAAK4f,eAC7C5f,EAAK4f,eAAe,CACtB,MAAMniC,EAAQuiB,EAAK4f,cAAc9/B,OAAAA,CAAQC,EAAKyN,IAAQ,GAAGzN,MAAQyN,IAAO,IACxElS,KAAK+xD,SAAS9xD,IAAI,QAAQsP,SAASpN,GACnCnC,KAAK4xD,oBAAsBzvD,EAG/BnC,KAAK8sC,YAAY17B,KAAKpR,KAAK+xD,UAG7B,SACSrtC,GACHA,GACF1kB,KAAKy7B,UAAU/W,GAInB,cACc0tC,GACRA,GACFpyD,KAAKy7B,UAAU22B,GAIX,aAAaxkB,EAAqB,MACxC,MAAMrsC,EAAQvB,KAAKa,GAAGU,MAAM,CAC1BijB,SAAUxkB,KAAKa,GAAG6Y,QAAQ,GAAI,EAAA,EAAWzM,UACzCk5B,MAAOnmC,KAAKa,GAAGq7B,MAAM,MAGjBm2B,EAAuB9wD,EAAMtB,IAAI,SACvC,GAAI2tC,EAAU,CACZ,MAAM0kB,EAAe/wD,EAAMtB,IAAI,aAEzB,SAAEukB,EAAQ,MAAE2hB,GAAUyH,EAC5B0kB,EAAa/iD,SAASiV,GACtB2hB,EAAM9hC,QAAQqgB,GAAQ2tC,EAAUrvD,KAAKhD,KAAKuyD,aAAa7tC,UAEvD2tC,EAAUrvD,KAAKhD,KAAKuyD,gBAGtB,OAAOhxD,EAGD,aAAamjB,EAAiB,MACpC,OAAO1kB,KAAKa,GAAGU,MAAM,CACnB8D,KAAMrF,KAAKa,GAAG6Y,QAAQgL,EAAOA,EAAKrf,KAAO,GAAI,EAAA,EAAW4H,UACxDghC,KAAMjuC,KAAKa,GAAG6Y,QAAQgL,EAAOA,EAAKupB,KAAO,IACzCxE,SAAUzpC,KAAKa,GAAG6Y,QAAQ1Z,KAAKypC,cAInC,mBACE,OAAkBzpC,KAAK+xD,SAAS9xD,IAAI,YAG9B,QAAQuyD,GACd,OAAOxyD,KAAKgyD,aAAankB,GAAG2kB,GAG9B,iBAAiB/tC,EAAkB+tC,GACjCxyD,KAAKgtD,QAAS,EACd,MAAMpf,EAAqB5tC,KAAK2iD,QAAQ6P,GAAerwD,MACjDswD,EAAe7kB,EAASzH,MAAMzzB,IAAIggD,GAAcA,EAAWrtD,MACjErF,KAAKytC,YAAYklB,aAAa/kB,EAASppB,SAAUC,GAAUjiB,UAAUsI,IACnE,MAAM8nD,EAAc9nD,EAAI5I,OAAO2wD,IAAYJ,EAAahvD,SAASovD,EAAQnuC,OACzE1kB,KAAK8yD,UAAYF,EACjB5yD,KAAKgtD,QAAS,IAIlB,sBAAsB7kC,GACpB,MAAMhmB,EAAQgmB,EAAKS,MAAM,MACzB5oB,KAAK+xD,SAAS9xD,IAAI,iBAAiBsP,SAASpN,GAG9C,eAAeuiB,EAAgBzgB,GAC7BjE,KAAKgyD,aAAa7vD,MAAM8B,GAASygB,EAAK1X,IAGxC,WAAWwlD,GACT,MAAM9tC,EAA6B1kB,KAAK2iD,QAAQ6P,GAAevyD,IAAI,SAC/DykB,EAAKxT,MACPwT,EAAK1hB,KAAKhD,KAAKuyD,gBAEfvyD,KAAKmT,aAAauC,OAAO,UAAW,QAAS,wCAIjD,YAAYk4B,EAAqB,MAC/B,MAAMmlB,EAAO/yD,KAAKgyD,aAAa7vD,MACzBswD,EAAeM,EAAKrgD,IAAIggD,GAAcA,EAAWluC,UAEvDxkB,KAAKytC,YAAYokB,eAAervD,UAAUsvD,IACxC,MAAMc,EAAcd,EAAU5vD,OAAO2wD,IAAYJ,EAAahvD,SAASovD,IACvE7yD,KAAK8xD,UAAYc,KAEC,IAAhBG,EAAK3wD,QAAgB2wD,EAAKA,EAAK3wD,OAAS,GAAGoiB,WAC7CxkB,KAAKgyD,aAAahvD,KAAKhD,KAAKiyD,aAAarkB,IAI7C,mBACM5tC,KAAKgyD,aAAa7vD,MAAMC,SAC1BpC,KAAK4xD,mBAAoB,GAI7B,sBACE5xD,KAAKgzD,sBAAsB,IAC3BhzD,KAAK4xD,mBAAoB,EAG3B,iBAAiB3tD,GACXjE,KAAKgyD,aAAa5vD,OAAS,EAC7BpC,KAAKgyD,aAAaxkB,SAASvpC,GACW,IAA7BjE,KAAKgyD,aAAa5vD,QAC3BpC,KAAKgyD,aAAankB,GAAG5pC,GAAOf,QAIhC,aAAasvD,EAAuBS,GAClC,MAAM9sB,EAA8BnmC,KAAKgyD,aAAankB,GAAG2kB,GAAevyD,IAAI,SACxEkmC,EAAM/jC,OAAS,EACjB+jC,EAAMqH,SAASylB,GACW,IAAjB9sB,EAAM/jC,QACf+jC,EAAM0H,GAAGolB,GAAW/vD,QAIxB,YAAYsvD,GACV,QAAqBxyD,KAAKgyD,aAAankB,GAAG2kB,GAAerwD,MAAMqiB,wCArM/C,EAAA,SAKX,GAAA,SADA,EAAA,2CAUN,EAAA,mBACA,EAAA,0BACA,EAAA,uBACA,EAAA,gBA2DA,EAAA,qBAOA,EAAA,KAtEU,GAAa,OAAA,EAAA,EAAA,CAAA,CANzB,OAAA,EAAA,EAAA,CAAU,CACT9f,SAAU,WACVC,SCVa,ozMDYbyjD,cAAe,EAAA,GAAkBC,aEZpB,02CF8BC,EAAA,EACS,GAAA,EACC,EAAA,KAlBb,QGHA,GAAyB,MAOpC,YAA6BxnD,GAAA,KAAAA,GAAAA,EAHnB,KAAAisC,YAAuC,IAAI,EAAA,EAInD9sC,KAAK+M,KAAO/M,KAAKa,GAAGU,MAAM,CACxBqoB,UAAW5pB,KAAKa,GAAGq7B,MAAM,GAAI,EAAA,EAAWjvB,YAI5C,WACEjN,KAAK8sC,YAAY17B,KAAKpR,KAAK+M,MAG7B,YAAYqe,GACV,GAAIA,EAA0B,iBAAG,CAC/B,MAAM8nC,EAA6B9nC,EAA0B,iBAAEG,aAC3D2nC,GACFlzD,KAAKmzD,YAAYD,IAKvB,aACanuC,GACPA,GACFA,EAAS6E,UAAUvlB,QAAQwvC,GAAY7zC,KAAKmzD,YAAYtf,IAI5D,gBACE,OAAO7zC,KAAK+M,KAAK6D,SAAoB,UAGvC,YAAYijC,GACV,MAAMuf,EAAevf,EAASwf,OAAO3gD,IAAK4gD,GACxCtzD,KAAKa,GAAGU,MAAM,CACZ8D,KAAM,CAACiuD,EAAMjuD,MACbs/B,OAAQ,CAAC2uB,EAAM3uB,OAAQ,EAAA,EAAW13B,UAClCsmD,YAAa,CAACD,EAAMC,gBAIlBC,EAAgBxzD,KAAKa,GAAGU,MAAM,CAClC8D,KAAM,CAACwuC,EAASxuC,MAChBmC,KAAM,CAACqsC,EAASrsC,MAChB6rD,OAAQrzD,KAAKa,GAAGq7B,MAAM,IAAIk3B,MAG5BpzD,KAAK4pB,UAAU5mB,KAAKwwD,GAGtB,eAAeC,GACbzzD,KAAK4pB,UAAU4jB,SAASimB,kCAlER,EAAA,2CAWjB,EAAA,4BACA,EAAA,uBAEA,EAAA,oBAsBA,EAAA,KA1BU,GAAyB,OAAA,EAAA,EAAA,CAAA,CALrC,OAAA,EAAA,EAAA,CAAU,CACT/uD,SAAU,wBACVC,SCRa,0yECAA,+YFkBoB,EAAA,KAPtB,QGDA,GAAoB,MAW/B,YAAoB9D,GAAA,KAAAA,GAAAA,EARX,KAAA6yD,UAAW,EAGV,KAAA5mB,YAAc,IAAI,EAAA,EAM1B9sC,KAAK2zD,gBAAkB3zD,KAAKa,GAAGU,MAAM,CACnCuH,MAAO,CAAC,GAAI,EAAA,EAAWmE,UACvBkb,KAAM,CAAC,GAAI,EAAA,EAAWlb,UACtBu3B,aAAc,CAAC,IACfitB,eAAgB,EAAC,GACjBxS,kBAAmB,EAAC,KAIxB,WACE,GAAIj/C,KAAK8oC,YAAa,CACpB9oC,KAAK2zD,gBAAgB1zD,IAAI,SAASsP,SAASvP,KAAK8oC,YAAYhgC,OAC5D,MAAM3G,EAAQnC,KAAK8oC,YAAYtE,aAAahgC,OAAAA,CACzCigC,EAAalZ,IAAiBkZ,EAAc,KAAOlZ,GAEtDvrB,KAAK2zD,gBAAgB1zD,IAAI,QAAQsP,SAASpN,GAC1CnC,KAAK2zD,gBAAgB1zD,IAAI,gBAAgBsP,SAASvP,KAAK8oC,YAAYtE,cAGrExkC,KAAK2zD,gBAAgB1zD,IAAI,QAAQ+B,aAAaQ,UAAU0P,IACtD,GAAIA,EAAK,CACP,MAAM/P,EAAQ+P,EAAI0W,MAAM,MACxB5oB,KAAK2zD,gBAAgB1zD,IAAI,gBAAgBsP,SAASpN,MAGtDnC,KAAK8sC,YAAY17B,KAAKpR,KAAK2zD,iBAG7B,qBACqBlzD,GACnB,GAAIA,EAAkB,CACpB,MAAM0B,EAAQ1B,EAAiB+jC,aAAahgC,OAAAA,CAAQC,EAAKyN,IAAQzN,EAAM,KAAOyN,GAC9ElS,KAAK2zD,gBAAgB1zD,IAAI,QAAQsP,SAASpN,GAC1CnC,KAAK2zD,gBAAgB1zD,IAAI,SAASsP,SAAS9O,EAAiBqI,OAC5D9I,KAAK2zD,gBAAgB1zD,IAAI,gBAAgBsP,SAAS9O,EAAiB+jC,eAIvE,kBACE,OAAOxkC,KAAK4R,UAAY5R,KAAK4R,QAAQ7D,IAAM,gCAA+B,yDA5DrE,EAAA,sCAUN,EAAA,uBACA,EAAA,oBACA,EAAA,wBACA,EAAA,0BACA,EAAA,uBACA,EAAA,4BAkCA,EAAA,KAxCU,GAAoB,OAAA,EAAA,EAAA,CAAA,CALhC,OAAA,EAAA,EAAA,CAAU,CACTrJ,SAAU,kBACVC,SCPa,y9BCAA,sEFqBW,EAAA,KAXb,QGuGAivD,GAAmB,MAM9B,YAAoB3gD,EAAkCid,GAAlC,KAAAjd,YAAAA,EAAkC,KAAAid,aAAAA,EAJ7C,KAAA2jC,iBAAmB,WACnB,KAAAC,iBAAkB,EAClB,KAAAC,mBAAoB,EAI7B,YAEA,WACE,OAAO/zD,KAAKiT,YAAY3I,OAG1B,SACEtK,KAAKiT,YAAYod,SAGnB,iBACE,OAAOrwB,KAAKiT,YAAY5I,WAG1B,kBACE,OAAOrK,KAAKiT,YAAYue,YAG1B,8BAEE,MAAuB,0BADRxxB,KAAKkwB,aAAaE,iBACnB/qB,KAGhB,SACMrF,KAAK4wB,8BACP5wB,KAAKkwB,aAAaW,SAAS,aAE3B7wB,KAAKkwB,aAAaW,SAAS,wDAnJxB,EAAA,SACA,EAAA,oCAgHN,EAAA,4BACA,EAAA,2BACA,EAAA,6BACA,EAAA,KAJU+iC,GAAmB,OAAA,EAAA,EAAA,CAAA,CA7G/B,OAAA,EAAA,EAAA,CAAU,CACTlvD,SAAU,iBACVC,SAAU,q0HCNG,29BDuHoB,EAAA,EAAmC,EAAA,KANzDivD,IEjHE,kCCaF,GAAqB,MAwBhC,YAAoB7yD,EAA8BF,GAA9B,KAAAE,UAAAA,EAA8B,KAAAF,GAAAA,EAnBxC,KAAAisC,YAAuC,IAAI,EAAA,EAE9C,KAAAkgB,QAAS,EACT,KAAAhkB,QAAS,EAChB,KAAAqH,QAAS,EAED,KAAAjvC,WAAqC,IAAIC,GAAA,EAEjD,KAAA2yD,iBAAmBh0D,KAAKa,GAAGU,MAAM,CAC/BiG,KAAM,CAAC,IACPsmD,mBAAoB,MAACxiD,GACrBmmD,eAAgB,EAAC,GACjBxS,kBAAmB,EAAC,GACpBva,WAAY,CAAC,IACb5yB,YAAa9R,KAAKa,GAAGq7B,MAAM,GAAI,EAAA,EAAWjvB,UAC1CiR,MAAO,CAAC,IACR1X,QAAS,CAAC,gBAIVxG,KAAKi0D,SAGP,WACEj0D,KAAK8sC,YAAY17B,KAAKpR,KAAKg0D,kBAG7B,cACEh0D,KAAKoB,WAAWyB,MAAK,GACrB7C,KAAKoB,WAAW0B,WAGlB,iBACiB6O,GACXA,IACF3R,KAAKk0D,oBAAoB1mB,SAAS,GAClCxtC,KAAKqwC,OAAiC,aAAxB1+B,EAAamP,OAC3B9gB,KAAKg0D,iBAAiBtkD,WAAWiC,GACjCA,EAAaG,YAAYzN,QAAQ2N,IAC/BhS,KAAKikC,gBAAgB,IAChBjyB,EACHhO,KAAMgO,EAAE3M,KACR7B,GAAIwO,EAAEkyB,aACNC,UAAWnyB,EAAEoyB,UACbpvB,YAAahD,EAAE+C,WACfrT,IAAKsQ,EAAEtQ,IACPkT,wBAAyB5C,EAAE4nB,YAC3B/kB,SAAU7C,EAAEqyB,mBACZ8vB,kBAAkB,EAClBC,iBAAiB,EACjBC,UAAWriD,EAAEqiD,UACbzvB,mBAAoB5yB,EAAE4yB,mBACtBC,OAAQ7yB,EAAE2P,SAId,OAAAs7B,GAAA,EAAA,CAAM,KACHh7C,KAAK,OAAA+wB,GAAA,EAAA,CAAK,IACVxwB,UAAAA,IAAiBxC,KAAKgtD,QAAS,IAItC,sBACsBzrC,GAChBA,IACFvhB,KAAKs0D,uBAAuBt0D,KAAKk0D,qBACjC3yC,EAAkBzP,YAAYzN,QAAQ2N,IACpChS,KAAKu0D,cAAc,IACdviD,EACH6C,SAAU7C,EAAEqyB,mBACZ8vB,kBAAkB,EAClBC,iBAAiB,MAIrB,OAAAnX,GAAA,EAAA,CAAM,KACHh7C,KAAK,OAAA+wB,GAAA,EAAA,CAAK,IACVxwB,UAAAA,IAAiBxC,KAAKgtD,QAAS,IAI9B,uBAAuBkH,GAC7B,IAAK,IAAIj5C,EAAIi5C,EAAoBtjD,SAASxO,OAAS,EAAG6Y,GAAK,EAAGA,IAAK,CAC9Ci5C,EAAoBtjD,SAASqK,GAAG9Y,MACnCkD,MACd6uD,EAAoB1mB,SAASvyB,IAKnC,uBACuBkqB,GACjBA,IACFnlC,KAAKg0D,iBAAiB/zD,IAAI,sBAAsBsP,SAAS41B,EAAmBn4B,KAC5EhN,KAAKk0D,oBAAoB1mB,SAAS,GAClCrI,EAAmBrzB,YAAYzN,QAAQ2N,IACrChS,KAAKikC,gBAAgB,IAChBjyB,EACHhO,KAAMgO,EAAE3M,KACR8uD,kBAAkB,EAClBC,iBAAiB,EACjBC,WAAW,MAGf,OAAApX,GAAA,EAAA,CAAM,KACHh7C,KAAK,OAAA+wB,GAAA,EAAA,CAAK,IACVxwB,UAAAA,IAAiBxC,KAAKgtD,QAAS,IAItC,kBACE,OAAOhtD,KAAK4R,UAAY5R,KAAK4R,QAAQ7D,IAAM,gCAA+B,0BAG5E,iBAAgB,KACd1I,EAAI,aACJ6+B,EAAY,UACZE,EAAS,WACTrvB,EAAU,IACVrT,EAAG,SACHmT,EAAQ,YACR+kB,EAAW,OACX+K,EAAM,WACND,EAAU,iBACVyvB,EAAgB,gBAChBC,EAAe,UACfC,EAAS,SACT9mD,GAAW,EAAK,mBAChBq3B,EAAkB,OAClBC,IAEA,MAAM8P,EAAY,IAAI,EAAA,EAAU,CAC9BtvC,KAAM,IAAI,EAAA,EAAYA,GACtB6+B,aAAc,IAAI,EAAA,EAAYA,GAC9BG,mBAAoB,IAAI,EAAA,EAAYxvB,GACpC8vB,OAAQ,IAAI,EAAA,EAAYA,EAAQ,EAAA,EAAW13B,UAC3C2sB,YAAa,IAAI,EAAA,EAAYA,GAC7BwK,UAAW,IAAI,EAAA,EAAYA,GAC3BrvB,WAAY,IAAI,EAAA,EAAYA,GAC5BrT,IAAK,IAAI,EAAA,EAAYA,GACrBgjC,WAAY,IAAI,EAAA,EAAYA,GAC5B7vB,SAAU,IAAI,EAAA,EAAYA,GAC1Bs/C,iBAAkB,IAAI,EAAA,EAAYA,GAClCC,gBAAiB,IAAI,EAAA,EAAYA,GACjCC,UAAW,IAAI,EAAA,EAAYA,GAC3B9mD,SAAU,IAAI,EAAA,EAAYA,GAC1Bq3B,mBAAoB,IAAI,EAAA,EAAYA,GACpCC,OAAQ,IAAI,EAAA,EAAYA,KAkB1B,OAhBA8P,EACG10C,IAAI,cACJ+B,aAAaC,KACZ,OAAAC,GAAA,EAAA,CAAOC,GAASA,GAASA,EAAMC,QAAU,GAAKpC,KAAKgpC,QACnD,OAAA3mC,GAAA,EAAA,CAAa,KACb,OAAA+3B,EAAA,EAAA,GACA,OAAA73B,GAAA,EAAA,CAAUvC,KAAKoB,aAEhBoB,UAAU2lB,IACTnoB,KAAKw0D,aAAex0D,KAAKe,UAAU0B,iBAAiB0lB,KAGpD5a,GACFonC,EAAUllC,UAGLklC,EAGT,eAAehzC,GACbA,EAAW1B,IAAI,oBAAoBsP,UAAS,GAC5C5N,EAAW1B,IAAI,cAAcsP,SAAS5N,EAAW1B,IAAI,QAAQkC,OAC7DnC,KAAKgpC,QAAS,EAGhB,iBAAiBrnC,EAAuB8yD,GACtCz0D,KAAKgpC,QAAS,EACdhpC,KAAKgtD,QAAS,EACdrrD,EAAW1B,IAAI,QAAQsP,SAASklD,EAAmBzwD,MACnDrC,EAAW1B,IAAI,aAAasP,SAASklD,EAAmBtwB,WACxDxiC,EAAW1B,IAAI,cAAcsP,SAASklD,EAAmBz/C,aACzDrT,EAAW1B,IAAI,OAAOsP,SAASklD,EAAmB/yD,KAClDC,EAAW1B,IAAI,eAAesP,SAASklD,EAAmB7/C,yBAC1DjT,EAAW1B,IAAI,sBAAsBsP,SAAS,GAC9C5N,EAAW1B,IAAI,cAAcsP,SAAS,MACtC5N,EAAW1B,IAAI,oBAAoBsP,UAAS,GAC5C5N,EAAW1B,IAAI,mBAAmBsP,UAAS,GAC3C5N,EAAW1B,IAAI,gBAAgBsP,SAASklD,EAAmBjxD,IAC3D7B,EAAW1B,IAAI,sBAAsBsP,SAASklD,EAAmB7vB,oBACjEjjC,EAAW1B,IAAI,UAAUsP,SAASklD,EAAmB5vB,QACrD7kC,KAAKw0D,kBAAelpD,EAGtB,0BACE,OAAkBtL,KAAKg0D,iBAAiB/zD,IAAI,eAGvC,SACLD,KAAKikC,gBAAgB,CACnBjgC,KAAM,GACNR,GAAI,GACJ2gC,UAAW,GACXnvB,YAAa,GACbtT,IAAK,GACLkT,wBAAyB,GACzBC,SAAU,EACV6vB,WAAY,KACZyvB,kBAAkB,EAClBC,iBAAiB,EACjBC,WAAW,EACXzvB,mBAAoB,GACpBC,OAAQ,KAEV7kC,KAAKgpC,QAAS,EAGT,eACLhpC,KAAKgtD,QAAUhtD,KAAKgtD,OAGd,iBAAgB,KACtBhpD,EAAI,GACJR,EAAE,UACF2gC,EAAS,YACTnvB,EAAW,IACXtT,EAAG,wBACHkT,EAAuB,OACvB+vB,EAAS,GAAE,SACX9vB,EAAW,EAAC,WACZ6vB,EAAU,iBACVyvB,EAAgB,gBAChBC,EAAe,UACfC,EAAS,SACT9mD,GAAW,EAAK,mBAChBq3B,EAAkB,OAClBC,IAEA7kC,KAAKk0D,oBAAoBlxD,KACvBhD,KAAK00D,gBAAgB,CACnBrvD,KAAMrB,EACNkgC,aAAc1gC,EACd4gC,UAAWD,EACXpvB,WAAYC,EACZtT,IAAKA,EACLk4B,YAAahlB,EACb+vB,OAAAA,EACA9vB,SAAAA,EACA6vB,WAAAA,EACAyvB,iBAAAA,EACAC,gBAAAA,EACAC,UAAAA,EACA9mD,SAAAA,EACAq3B,mBAAAA,EACAC,OAAAA,KAIJ7kC,KAAKw0D,kBAAelpD,EACpBtL,KAAKgpC,QAAS,EAGR,cAAcrnC,GACpB3B,KAAKk0D,oBAAoBlxD,KAAKhD,KAAK00D,gBAAgB/yD,IAG9C,mBAAmBsC,GACxBjE,KAAKk0D,oBAAoB1mB,SAASvpC,GAC9BjE,KAAKk0D,oBAAoB/xD,MAAMC,OACjCpC,KAAKgtD,QAAS,EAEdhtD,KAAKi0D,SAIF,UAAUjrB,GACfhpC,KAAKgpC,OAASA,EAGT,UAAU2rB,GACf,MAAMtvD,EAAOsvD,EAAoB10D,IAAI,cAAckC,MACnDwyD,EAAoB10D,IAAI,oBAAoBsP,UAAS,GACrDolD,EAAoB10D,IAAI,mBAAmBsP,UAAS,GACpDolD,EAAoB10D,IAAI,sBAAsBsP,SAAS,GACvDolD,EAAoB10D,IAAI,QAAQsP,SAASlK,GACzCsvD,EAAoB10D,IAAI,cAAcsP,SAAS,MAC/ColD,EAAoB10D,IAAI,eAAesP,cAASjE,GAChDqpD,EAAoB10D,IAAI,aAAasP,cAASjE,GAC9CqpD,EAAoB10D,IAAI,OAAOsP,cAASjE,GACxCqpD,EAAoB10D,IAAI,gBAAgBsP,cAASjE,GACjDqpD,EAAoB10D,IAAI,sBAAsBsP,SAAS,MACvDolD,EAAoB10D,IAAI,UAAUsP,SAAS,MAC3CvP,KAAKgpC,QAAS,EACdhpC,KAAKgtD,QAAS,iCAnTT,EAAA,SADW,EAAA,sCAajB,EAAA,oBACA,EAAA,wBACA,EAAA,0BACA,EAAA,uBACA,EAAA,wBAgCA,EAAA,6BA8BA,EAAA,8BA4BA,EAAA,KA/FU,GAAqB,OAAA,EAAA,EAAA,CAAA,CALjC,OAAA,EAAA,EAAA,CAAU,CACTtoD,SAAU,mBACVC,SDVa,swMEAA,2tJDqCkB,EAAA,EAAuB,EAAA,KAxB3C,QEgFAiwD,GAAc,QAAdA,GAAc,OAAA,EAAA,EAAA,CAAA,CA1D1B,OAAA,EAAA,EAAA,CAAS,CACRl+C,aAAc,CACZ,GACA,GACAk9C,GACA,EACA,EAAA,EACA,EACA,EACAzH,EACA,GACA,GACA,GACA,GACA,GACA,GAAA,EACA,GAAA,EACA,GAAA,EACA,GAAA,GAEF31C,QAAS,CACP,GACA,GACAo9C,GACA,EACA,EAAA,EACA,EACA,EACAzH,EACA,GACA,GACA,GACA,GACA,GACA,GAAA,EACA,GAAA,EACA,GAAA,EACA,GAAA,GAEF91C,QAAS,CACP,EAAA,EACA,EAAA,EACAk7C,GACA,EAAA,eACA,EAAA,EACA,EAAA,EAAiB56C,QAAQ,IACzB,EAAA,EACA,EAAA,EACA,EAAA,EACA,EAAA,EACA,EAAA,EAAcA,UACd,EAAA,EACA,EAAA,EAAYA,UACZ,EAAA,EACA,EAAA,GAEFJ,UAAW,CAACg0C,MAEDqK,6ICnFAC,EAAW,MACtB,YAAoB90D,GAAA,KAAAA,KAAAA,EAEpB,gBAAgBmC,GACd,OAAOlC,KAAKD,KAAKE,IAAS,GAAG,EAAA,EAAYJ,oBAAqB,CAAEc,OAAQuB,IAAUD,KAChF,OAAA,EAAA,EAAA,CAAI6I,IACEA,EAAIgqD,SACNhqD,EAAIioD,KACDpD,KAAAA,CAAMjtC,EAAG8G,IACJ9G,EAAE1V,IAAMwc,EAAExc,KACJ,EAEN0V,EAAE1V,IAAMwc,EAAExc,IACL,EAEF,GAER3I,QAAQC,IACPA,EAAKmoB,IAAMnoB,EAAK0I,uCA3BrB,EAAA,IASI6nD,EAAW,OAAA,EAAA,EAAA,CAAA,CAHvB,OAAA,EAAA,EAAA,CAAW,CACVz0D,WAAY,0CAGc,EAAA,KADfy0D,wGCJAE,EAAe,MAC1B,UAAU5yD,EAAQ,IAChB,OAAOA,EAAQA,EAAMyD,WAAW/B,QAAQ,UAAW,IAAM,KAFhDkxD,EAAe,OAAA,EAAA,EAAA,CAAA,CAJ3B,OAAA,EAAA,EAAA,CAAK,CACJ1vD,KAAM,gBAEP,OAAA,EAAA,EAAA,IACY0vD,oKCOAC,EAAwC,MAEnD,YACU5oD,EACA6oD,EACAhrD,EACAgJ,GAHA,KAAA7G,SAAAA,EACA,KAAA6oD,gBAAAA,EACA,KAAAhrD,YAAAA,EACA,KAAAgJ,YAAAA,EALV,KAAAiiD,gBAAiB,EAQjB,WACE,OAAOl1D,KAAKiT,YAAY3I,OAG1B,gBACE,UACQtK,KAAKiK,YACRsP,QAAQ,IACJvZ,KAAKsK,KAAKkP,GACbknB,8CAA+C1gC,KAAKk1D,iBAErD30D,YAEHP,KAAKoM,SAAS+E,OACd,MAAOvO,GACP5C,KAAKi1D,gBAAgBv/C,OAAO,QAAS,0EA/BlC,EAAA,SADA,EAAA,SAHA,EAAA,SADA,EAAA,IAyBP,OAAA,EAAA,EAAA,CAAA,CADCpE,EAAA,gJAZU0jD,EAAwC,OAAA,EAAA,EAAA,CAAA,CALpD,OAAA,EAAA,EAAA,CAAU,CACTtwD,SAAU,0CACVC,SCVa,itCCAA,iLFgBO,EAAA,EACO,EAAA,EACJ,EAAA,EACA,EAAA,KANZqwD,sXGCA,EAA8B,MASzC,YACUn0D,EACAsS,EACAlJ,GAFA,KAAApJ,GAAAA,EACA,KAAAsS,aAAAA,EACA,KAAAlJ,YAAAA,EAVD,KAAAwtB,uBAAwB,EAEvB,KAAAhrB,OAAS,IAAI,EAAA,EACb,KAAAirB,WAAa,IAAI,EAAA,EAU3B,WACE13B,KAAKy7B,YACDz7B,KAAK4R,SACP5R,KAAKi4B,iBAAiBj4B,KAAK4R,SAG7B5R,KAAK03B,WAAWtmB,KAAKpR,KAAK+M,MAE1B,MAAMk6C,EAAYjnD,KAAK+M,KAAK9M,IAAI,SAChCgnD,EAAUjlD,aACPC,KACC,OAAAyQ,EAAA,EAAA,CAAI/H,IACF,MAAMxI,EAAQwI,GAASA,EAAMpE,cAE7B,OADA0gD,EAAU13C,SAASpN,EAAO,CAAE2wB,WAAW,IAChC3wB,IAET,OAAAD,EAAA,EAAA,CAAOgJ,GAAK+7C,EAAU/1C,OAAS+1C,EAAU9kD,OACzC,OAAAE,EAAA,EAAA,CAAaC,EAAA,EAAYD,cACzB,OAAAiX,EAAA,EAAA,CAAU3O,GAAS3K,KAAKiK,YAAY0kC,iBAAiBhkC,GAAO1I,KAAK,OAAAiK,EAAA,EAAA,CAAWxJ,GAAO,OAAAyJ,EAAA,EAAA,CAAGzJ,OAEvFF,UAAUsI,IACU,MAAfA,EAAIgW,OACNmmC,EAAUntC,UAAU,CAAE80B,QAAQ,IACN,MAAf9jC,EAAIgW,OACbmmC,EAAUntC,UAAU,MACI,MAAfhP,EAAIgW,QACbmmC,EAAUntC,UAAU,CAAEya,SAAS,MAIrCv0B,KAAK+M,KAAK9M,IAAI,gBAAgB+B,aAAaQ,UAAUmI,IACnD3K,KAAK+M,KAAK9M,IAAI,gBAAgBsP,SAAS5E,GAASA,EAAMpE,cAAe,CAAEusB,WAAW,MAItF,YACE9yB,KAAK+M,KAAO/M,KAAKa,GAAGU,MAAM,CACxB0M,SAAU,CAAC,GAAI,EAAA,EAAWhB,UAC1B5H,KAAM,CAAC,IACP0I,IAAK,CAAC,GAAI,EAAA,EAAWd,UACrBE,IAAK,CAAC,GAAI,EAAA,EAAWF,UACrBO,YAAa,CAAC,GAAI,EAAA,EAAWP,UAC7BmB,UAAW,CAAC,IACZC,UAAW,CAAC,IACZ1D,MAAO,CAAC,GAAI,EAAA,EAAWA,OACvB2D,aAAc,CAAC,GAAI,EAAA,EAAW3D,OAC9BuD,WAAYlO,KAAKa,GAAGU,MAAM,CACxB4M,YAAa,CAAC,MAEhBI,QAASvO,KAAKa,GAAGU,MAAM,CACrBkN,KAAM,CAAC,IACPC,WAAY,CAAC,IACblN,OAAQ,CAAC,IACTmN,OAAQ,CAAC,IACTC,aAAc,CAAC,IACfC,IAAK,CAAC,IACNL,GAAI,CAAC,MAEPM,SAAU,CAAC,QAIP,iBAAiB4B,GACvB1Q,KAAK+M,KAAK9M,IAAI,QAAQiD,QACtBlD,KAAK+M,KAAK9M,IAAI,QAAQwQ,SACtBzQ,KAAK+M,KAAK9M,IAAI,OAAOsP,SAASmB,EAAQ3C,KACf,IAAnB2C,EAAQoQ,OACV9gB,KAAK64B,QAAQnoB,IAEb1Q,KAAK+M,KAAK9M,IAAI,YAAYwQ,SAC1BzQ,KAAK+M,KAAK9M,IAAI,YAAYsP,SAASmB,GACnC1Q,KAAK84B,YACDpoB,EAAQC,MACV3Q,KAAKmT,aAAauC,OAChB,UACA,QACA,wIAMA,QAAQhF,GACd,MAAMsoB,EAAa,GAAA,CAAOtoB,EAAQsoB,WAAY,cAC9Ch5B,KAAK+M,KAAK9M,IAAI,OAAOsP,SAASmB,EAAQ3C,KACtC/N,KAAK+M,KAAK9M,IAAI,YAAYsP,SAASmB,EAAQ1M,MAC3ChE,KAAK+M,KAAK9M,IAAI,QAAQsP,SAASmB,EAAQ1M,MACvChE,KAAK+M,KAAK9M,IAAI,eAAesP,SAASypB,EAAW9c,OAAO,eAExDlc,KAAK+M,KAAK9M,IAAI,OAAOwP,UACrBzP,KAAK+M,KAAK9M,IAAI,YAAYwP,UAC1BzP,KAAK+M,KAAK9M,IAAI,eAAewP,UAGvB,YACNzP,KAAK+M,KAAK9M,IAAI,YAAYiD,sCA3HrB,EAAA,SAEA,EAAA,SADA,EAAA,qCAaN,EAAA,iCACA,EAAA,kBAEA,EAAA,sBACA,EAAA,KALU,EAA8B,OAAA,EAAA,EAAA,CAAA,CAJ1C,OAAA,EAAA,EAAA,CAAU,CACTwB,SAAU,8BACVC,SCZa,wmBDwBC,EAAA,EACU,EAAA,EACD,EAAA,KAZZ,GEdE,oBCgBF,EAAiC,MAO5C,YAAoB9D,EAAyBoJ,GAAzB,KAAApJ,GAAAA,EAAyB,KAAAoJ,YAAAA,EALpC,KAAA6kD,mBAAoB,EACnB,KAAAp3B,WAAa,IAAI,EAAA,EAKzB13B,KAAKy7B,YAGC,YACNz7B,KAAK+M,KAAO/M,KAAKa,GAAGU,MAAM,CACxByL,IAAK,CAAC,MACN3H,KAAM,CAAC,GAAI,EAAA,EAAW4H,UACtBC,QAAS,CAAC,GAAI,EAAA,EAAWD,UACzBE,IAAK,CAAC,IACNC,KAAM,CAAC,IACPC,iBAAkB,GAClBC,oBAAqB,CACnB,CACEnL,MAAO,GACPoL,UAAU,IAGdC,YAAa,CAAC,IACdC,OAAQ,CAAC,MACTC,IAAK,CAAC,IACNC,WAAY,EAAC,EAAO,EAAA,EAAWV,UAC/BW,YAAa,CAAC,IACdC,gBAAiB,CAAC,IAClBC,YAAa9N,KAAKa,GAAGU,MAAM,CACzByL,IAAK,CAAC,MACNe,IAAK,CAAC,GAAI,CAAC,EAAA,EAAWd,SAAU,EAAA,EAAkBe,eAClDC,SAAU,CAAC,GAAI,EAAA,EAAWhB,UAC1B5H,KAAM,CAAC,GAAI,EAAA,EAAW4H,UACtBE,IAAK,CAAC,GAAI,EAAA,EAAWF,UACrBO,YAAa,CAAC,GAAI,EAAA,EAAWP,UAC7BiB,WAAYlO,KAAKa,GAAGU,MAAM,CACxB4M,YAAa,CAAC,MAEhBC,UAAW,CAAC,IACZC,UAAW,CAAC,IACZ1D,MAAO,CAAC,GAAI,EAAA,EAAWA,OACvB2D,aAAc,CAAC,GAAI,EAAA,EAAW3D,OAC9B4D,QAASvO,KAAKa,GAAGU,MAAM,CACrBiN,GAAI,CAAC,IACLC,KAAM,CAAC,IACPC,WAAY,CAAC,IACblN,OAAQ,CAAC,IACTmN,OAAQ,CAAC,IACTC,aAAc,CAAC,IACfC,IAAK,CAAC,MAERC,SAAU,CAAC,UAKjB,WACM9O,KAAK8uD,mBACP9uD,KAAKm1D,uBAAuBn1D,KAAK8N,aACjC9N,KAAKuuC,kBAELvuC,KAAKo1D,0BAA0Bp1D,KAAK8N,aACpC9N,KAAKq1D,gBAAgBp1D,IAAI,OAAOwP,WAGlC,MAAMw3C,EAAYjnD,KAAK+M,KAAK9M,IAAI,qBAChCgnD,EAAUjlD,aACPC,KACC,OAAAyQ,EAAA,EAAA,CAAI/H,IACF,MAAMxI,EAAQwI,GAASA,EAAMpE,cAE7B,OADA0gD,EAAU13C,SAASpN,EAAO,CAAE2wB,WAAW,IAChC3wB,IAET,OAAAD,EAAA,EAAA,CACEgJ,GACE+7C,EAAU/1C,OACV+1C,EAAU9kD,SACRnC,KAAK8uD,mBAAqB7H,EAAU9kD,QAAUnC,KAAK8N,YAAYxD,KAAKK,QAE1E,OAAAtI,EAAA,EAAA,CAAaC,EAAA,EAAYD,cACzB,OAAAiX,EAAA,EAAA,CAAU3O,GAAS3K,KAAKiK,YAAY0kC,iBAAiBhkC,GAAO1I,KAAK,OAAAiK,EAAA,EAAA,CAAWxJ,GAAO,OAAAyJ,EAAA,EAAA,CAAGzJ,OAEvFF,UAAUsI,IACU,MAAfA,EAAIgW,OACNmmC,EAAUntC,UAAU,CAAE80B,QAAQ,IACN,MAAf9jC,EAAIgW,OACbmmC,EAAUntC,UAAU,MACI,MAAfhP,EAAIgW,QACbmmC,EAAUntC,UAAU,CAAEya,SAAS,MAIrCv0B,KAAK+M,KAAK9M,IAAI,4BAA4B+B,aAAaQ,UAAUmI,IAC/D3K,KAAK+M,KACF9M,IAAI,4BACJsP,SAAS5E,GAASA,EAAMpE,cAAe,CAAEusB,WAAW,MAGzD9yB,KAAK03B,WAAWtmB,KAAKpR,KAAK+M,MAG5B,sBACE,OAAkB/M,KAAK+M,KAAK9M,IAAI,eAG1B,uBAAuB6N,GAE7B,GADA9N,KAAKq1D,gBAAgB3lD,WAAW5B,GAC5BA,EAAYN,YAAa,CAC3B,MAAM6E,EAAUvE,EAAYN,YAAY5H,WAAWgjB,MAAM,KAAK,GACxDpb,EAAc,GAAA,CAAO6E,GAAS6J,OAAO,cAC3Clc,KAAKq1D,gBAAgBp1D,IAAI,eAAesP,SAAS/B,GAE/CM,EAAYxD,MAAQwD,EAAYxD,KAAKK,OACvC3K,KAAKq1D,gBAAgBp1D,IAAI,SAASsP,SAASzB,EAAYxD,KAAKK,OAIxD,0BAA0BmD,GAChC,MAAMkrB,EAAa,GAAA,CAAOlrB,EAAYkrB,WAAY,cAClDh5B,KAAKq1D,gBAAgB3lD,WAAW,CAC9B3B,IAAKD,EAAYC,IACjBE,SAAUH,EAAY9J,KACtBqB,KAAMyI,EAAY9J,KAClBmJ,IAAKW,EAAYirB,OACjBvrB,YAAawrB,EAAW9c,OAAO,cAC/BhO,WAAY,CACVC,YAAaL,EAAY6uB,OAKvB,gBACN38B,KAAKq1D,gBAAgBp1D,IAAI,OAAOwP,UAChCzP,KAAKq1D,gBAAgBp1D,IAAI,YAAYwP,UACrCzP,KAAKq1D,gBAAgBp1D,IAAI,eAAewP,wCAxJnC,EAAA,SAEA,EAAA,yCAcN,EAAA,6BACA,EAAA,sBACA,EAAA,KAHU,EAAiC,OAAA,EAAA,EAAA,CAAA,CAL7C,OAAA,EAAA,EAAA,CAAU,CACT/K,SAAU,kCACVC,SDba,syBEAA,uCDuBW,EAAA,EAAkC,EAAA,KAP/C,OEJA,EAAsC,MAUjD,YAAoB9D,EAAyBoJ,GAAzB,KAAApJ,GAAAA,EAAyB,KAAAoJ,YAAAA,EARpC,KAAAqT,eAAgB,EAChB,KAAAC,iBAAkB,EAEjB,KAAAma,WAAa,IAAI,EAAA,EAG3B,KAAA49B,oBAAqB,EAIrB,WACEt1D,KAAKy7B,YACDz7B,KAAKud,iBAAmBvd,KAAKsd,cAC/Btd,KAAKu1D,qBAAqB,CACxBrmB,eAAe,EACfhvC,KAAMF,KAAK4R,WAGb5R,KAAK0uC,eAAe1uC,KAAK4R,SACzB5R,KAAKw1D,eAAex1D,KAAK4R,UAG3B5R,KAAK+M,KAAK9M,IAAI,4BAA4B+B,aAAaQ,UAAUmI,IAC/D3K,KAAK+M,KACF9M,IAAI,4BACJsP,SAAS5E,GAASA,EAAMpE,cAAe,CAAEusB,WAAW,MAGzD9yB,KAAK03B,WAAWtmB,KAAKpR,KAAK+M,MAG5B,sBACE,OAAkB/M,KAAK+M,KAAK9M,IAAI,eAGlC,YACED,KAAK+M,KAAO/M,KAAKa,GAAGU,MAAM,CACxByL,IAAK,CAAC,MACNe,IAAK,CAAC,GAAI,CAAC,EAAA,EAAkBC,eAC7BC,SAAU,CAAC,GAAI,EAAA,EAAWhB,UAC1B5H,KAAM,CAAC,IACP8H,IAAK,CAAC,GAAI,EAAA,EAAWF,UACrBO,YAAa,CAAC,GAAI,EAAA,EAAWP,UAC7BiB,WAAYlO,KAAKa,GAAGU,MAAM,CACxB4M,YAAa,CAAC,MAEhBL,YAAa9N,KAAKa,GAAGU,MAAM,CACzByL,IAAK,CAAC,MACNe,IAAK,CAAC,GAAI,CAAC,EAAA,EAAWd,SAAU,EAAA,EAAkBe,eAClDC,SAAU,CAAC,GAAI,EAAA,EAAWhB,UAC1B5H,KAAM,CAAC,GAAI,EAAA,EAAW4H,UACtBE,IAAK,CAAC,GAAI,EAAA,EAAWF,UACrBO,YAAa,CAAC,GAAI,EAAA,EAAWP,UAC7BiB,WAAYlO,KAAKa,GAAGU,MAAM,CACxB4M,YAAa,CAAC,MAEhBC,UAAW,CAAC,IACZC,UAAW,CAAC,IACZ1D,MAAO,CAAC,GAAI,EAAA,EAAWA,OACvB2D,aAAc,CAAC,GAAI,EAAA,EAAW3D,OAC9B4D,QAASvO,KAAKa,GAAGU,MAAM,CACrBiN,GAAI,CAAC,IACLC,KAAM,CAAC,IACPC,WAAY,CAAC,IACblN,OAAQ,CAAC,IACTmN,OAAQ,CAAC,IACTC,aAAc,CAAC,IACfC,IAAK,CAAC,MAERC,SAAU,CAAC,UAKjB,eAAe8C,GACb,GAAuB,IAAnBA,EAAQkP,QAAmC,MAAnBlP,EAAQkP,OAAgB,CAClD,MAAMkY,EAAa,GAAA,CAAOpnB,EAAQonB,WAAY,cAExCy8B,EAAkB,CACtBzoD,IAAK4E,EAAQpO,GACbuK,IAAK6D,EAAQ7D,IACbE,SAAU2D,EAAQ5N,KAClBqB,KAAMuM,EAAQ5N,KACdwJ,YAAawrB,EAAW9c,OAAO,eAG7Blc,KAAKsd,cACPtd,KAAKq1D,gBAAgB3lD,WAAW+lD,GAEhCz1D,KAAK+M,KAAK2C,WAAW+lD,IAK3B,sBAAqB,cAAEvmB,EAAa,KAAEhvC,IAChCA,IACEgvC,EACFlvC,KAAK01D,kCAAkCx1D,GAEvCF,KAAK21D,qCAAqCz1D,GAG5CF,KAAKs1D,oBAAqB,EAC1Bt1D,KAAK41D,mBAAmB1mB,GACxBlvC,KAAKq1D,gBAAgBp1D,IAAI,OAAOwP,WAI5B,kCAAkCvP,GAExC,GADAF,KAAKq1D,gBAAgB3lD,WAAWxP,GAC5BA,EAAKsN,YAAa,CACpB,MAAM6E,EAAUlC,OAAOjQ,EAAKsN,aACtBA,EAAc,GAAA,CAAO6E,EAAQpN,UAAU,EAAG,KAAKiX,OAAO,cAC5Dlc,KAAKq1D,gBAAgBp1D,IAAI,eAAesP,SAAS/B,GAG/CtN,GAAQA,EAAKoK,MAAQpK,EAAKoK,KAAKK,OACjC3K,KAAKq1D,gBAAgBp1D,IAAI,SAASsP,SAASrP,EAAKoK,KAAKK,OAIjD,qCAAqCzK,GAC3C,MAAM84B,EAAa,GAAA,CAAO94B,EAAK84B,WAAY,cACrC68B,EAAgB,CACpB9nD,IAAK7N,EAAK6N,IACVE,SAAU/N,EAAK8D,KACfqB,KAAMnF,EAAK8D,KACXwJ,YAAawrB,EAAW9c,OAAO,eAEjClc,KAAKq1D,gBAAgB3lD,WAAWmmD,GAGlC,eAAejkD,GACU,IAAnBA,EAAQkP,QAAmC,MAAnBlP,EAAQkP,QAClC9gB,KAAK41D,mBAAmBhkD,GAI5B,mBAAmBA,GACZ5R,KAAKsd,gBACRtd,KAAK+M,KAAK9M,IAAI,OAAOwP,UACrBzP,KAAK+M,KAAK9M,IAAI,eAAewP,UACN,IAAnBmC,EAAQkP,QACV9gB,KAAK+M,KAAK9M,IAAI,YAAYwP,WAG9BzP,KAAKq1D,gBAAgBp1D,IAAI,YAAYwP,UACrCzP,KAAKq1D,gBAAgBp1D,IAAI,eAAewP,wCAhKnC,EAAA,SAEA,EAAA,qCAUN,EAAA,yBACA,EAAA,2BACA,EAAA,sBAEA,EAAA,KALU,EAAsC,OAAA,EAAA,EAAA,CAAA,CAJlD,OAAA,EAAA,EAAA,CAAU,CACT/K,SAAU,uCACVC,SCVa,2lCDsBW,EAAA,EAAkC,EAAA,KAV/C,GEZE,oNCoBF,EAAyB,MAUpC,YACUyH,EACAvL,EACAwL,EACApC,GAHA,KAAAmC,SAAAA,EACA,KAAAvL,GAAAA,EACA,KAAAwL,WAAAA,EACA,KAAApC,YAAAA,EAXA,KAAAwC,OAAS,IAAI,EAAA,EAEvB,KAAAE,OAAwB,EAAA,EACxB,KAAAxL,SAAU,EAURnB,KAAK+M,KAAO/M,KAAKa,GAAGU,MAAM,CACxByL,IAAK,CAAC,KAAM,EAAA,EAAWC,UACvB5H,KAAM,CAAC,GAAI,CAAC,EAAA,EAAW4H,SAAU,EAAA,EAAkB4qB,gBACnD5pB,SAAU,CAAC,GAAI,CAAC,EAAA,EAAWhB,SAAU,EAAA,EAAkB4qB,gBACvD9pB,IAAK,MAACzC,GACN6B,IAAK,CAAC,GAAI,EAAA,EAAWF,UACrBO,YAAa,CAAC,KAAM,EAAA,EAAWP,UAC/BoB,UAAW,CAAC,IACZD,UAAW,CAAC,IACZzD,MAAO,CAAC,GAAI,EAAA,EAAWA,OACvB2D,aAAc,CAAC,GAAI,EAAA,EAAW3D,OAC9BuD,WAAYlO,KAAKa,GAAGU,MAAM,CACxB4M,YAAa,CAAC,MAEhBL,YAAa,CAAC,MACdS,QAASvO,KAAKa,GAAGU,MAAM,CACrBiN,GAAI,CAAC,IACLC,KAAM,CAAC,IACPC,WAAY,CAAC,IACblN,OAAQ,CAAC,IACTmN,OAAQ,CAAC,IACTC,aAAc,CAAC,IACfC,IAAK,CAAC,GAAI,CAAC,EAAA,EAAkBwJ,mBAKnC,WACErY,KAAKiP,YACLjP,KAAK81D,gBAEL,MAAM7O,EAAYjnD,KAAK+M,KAAK9M,IAAI,SAChCgnD,EAAUjlD,aACPC,KACC,OAAAyQ,EAAA,EAAA,CAAI/H,IACF,MAAMxI,EAAQwI,GAASA,EAAMpE,cAE7B,OADA0gD,EAAU13C,SAASpN,EAAO,CAAE2wB,WAAW,IAChC3wB,IAET,OAAAD,EAAA,EAAA,CAAOgJ,GAAK+7C,EAAU/1C,OAAS+1C,EAAU9kD,OACzC,OAAAE,EAAA,EAAA,CAAaC,EAAA,EAAYD,cACzB,OAAAiX,EAAA,EAAA,CAAU3O,GACR3K,KAAKiK,YACF0kC,iBAAiBhkC,EAAO3K,KAAK4R,QAAQ+sC,UACrC18C,KAAK,OAAAiK,EAAA,EAAA,CAAWxJ,GAAO,OAAAyJ,EAAA,EAAA,CAAGzJ,OAGhCF,UAAUsI,IACT,GAAmB,MAAfA,EAAIgW,OAAgB,CACtB,MAAM8tB,EAAS5uC,KAAK4R,QAAQtH,KAAKK,QAAUG,EAAIH,MAC/Cs8C,EAAUntC,UAAU80B,EAAS,CAAEA,OAAAA,GAAW,WAClB,MAAf9jC,EAAIgW,OACbmmC,EAAUntC,UAAU,MACI,MAAfhP,EAAIgW,QACbmmC,EAAUntC,UAAU,CAAEya,SAAS,MAIrCv0B,KAAK+M,KAAK9M,IAAI,gBAAgB+B,aAAaQ,UAAUmI,IACnD3K,KAAK+M,KAAK9M,IAAI,gBAAgBsP,SAAS5E,GAASA,EAAMpE,cAAe,CAAEusB,WAAW,MAI9E,YACN9yB,KAAK+M,KAAK2C,WAAW1P,KAAK4R,SACtB5R,KAAK4R,QAAQtH,OACftK,KAAK+M,KAAK9M,IAAI,SAASsP,SAASvP,KAAK4R,QAAQtH,KAAKK,OAClD3K,KAAK+M,KAAK9M,IAAI,gBAAgBsP,SAASvP,KAAK4R,QAAQtH,KAAKgE,eAE3D,MAAMyB,EAAO,IAAIT,KAAKtP,KAAK4R,QAAQpE,aACnCxN,KAAK+M,KAAK9M,IAAI,eAAesP,SAASQ,EAAKC,cAAc/K,UAAU,EAAG,KAElEjF,KAAK+1D,aACP/1D,KAAK+M,KAAK9M,IAAI,eAAesP,SAASvP,KAAK4R,QAAQ9D,YAAYd,KAC/DhN,KAAK+M,KAAKogC,cAAc,WACxBntC,KAAK+M,KAAKogC,cAAc,aACxBntC,KAAK+M,KAAKogC,cAAc,eAExBntC,KAAK+M,KAAK9M,IAAI,OAAOkgB,cAAc,CAAC,EAAA,EAAWlT,SAAU,EAAA,EAAkBe,eACvEhO,KAAKy+B,WACPz+B,KAAK+M,KAAK9M,IAAI,SAASkgB,cAAc,CAAC,EAAA,EAAWlT,SAAU,EAAA,EAAWtC,QAEtE3K,KAAK+M,KAAK9M,IAAI,SAASkgB,cAAc,EAAA,EAAWxV,QAK9C,gBACD0E,EAAA,EAAU2mD,0BAA0Bh2D,KAAK+M,KAAK9M,IAAI,eAAekC,SACpEnC,KAAK+M,KAAK9M,IAAI,OAAOwP,UACrBzP,KAAK+M,KAAK9M,IAAI,eAAewP,UAEzBzP,KAAK+M,KAAK9M,IAAI,YAAYkC,OAC5BnC,KAAK+M,KAAK9M,IAAI,YAAYwP,WAI1BzP,KAAKy+B,aACPz+B,KAAK+M,KAAK9M,IAAI,SAASwP,UACvBzP,KAAK+M,KAAK9M,IAAI,OAAOwP,UACrBzP,KAAK+M,KAAK9M,IAAI,0BAA0BwP,WAI5C,cACE,OAAOzP,KAAK+M,KAAK9M,IAAI,OAGvB,eACE,OAAOD,KAAK+M,KAAK9M,IAAI,eAGvB,kBACE,MAAMgQ,EAAM,IAAIX,KACVY,EAAKC,OAAOF,EAAIG,WAAWC,SAAS,EAAG,KACvCC,EAAKH,OAAOF,EAAIM,WAAa,GAAGF,SAAS,EAAG,KAElD,MAAO,GADMJ,EAAIO,iBACCF,KAAMJ,IAG1B,iBACE,OAAOlQ,KAAK4R,QAAQtH,OAAStK,KAAK4R,QAAQtH,KAAK48C,iBAAmBlnD,KAAK4R,QAAQtH,KAAKK,MAGtF,kBACE,QAAS3K,KAAK4R,QAAQ9D,YAGxB,gBAAgB3L,GACVA,GACFnC,KAAK+M,KAAK9M,IAAI,QAAQsP,SAASvP,KAAK+M,KAAK9M,IAAI,YAAYkC,OACzDnC,KAAK+M,KAAK9M,IAAI,QAAQwP,WAEtBzP,KAAK+M,KAAK9M,IAAI,QAAQwQ,SAK1B,YAAYtN,GACV,GAAkC,KAA9BA,EAAMgI,OAAOhJ,MAAMC,OAAe,CACpC,MAAMyM,EAAM1L,EAAMgI,OAAOhJ,MAAM0B,QAAQ,UAAW,IAC5C3D,QAAaF,KAAKqM,WAAWqE,QAAQ7B,GACtC3O,EAAKyQ,MACR3Q,KAAK+M,KAAK6D,SAAkB,QAAElB,WAAW,CACvClB,GAAItO,EAAKsO,GACTG,OAAQzO,EAAK2Q,WACbjC,aAAc1O,EAAK4Q,OACnBrC,KAAMvO,EAAK6Q,WACXvP,OAAQ,KACRqN,IAAK3O,EAAK2O,OAMlB,aACE,OAAAmC,EAAA,EAAA,CAAchR,KAAK+M,MACnB,MAAMA,EAAO/M,KAAK+M,KAAKkE,cAEnBjR,KAAK+M,KAAKmE,QACZlR,KAAKyM,OAAO2E,KAAKrE,GACjB/M,KAAKuE,SAIT,QACEvE,KAAKoM,SAAS+E,qCA/LT,EAAA,SAVA,EAAA,SAEA,EAAA,SACA,EAAA,qCAiBN,EAAA,0BACA,EAAA,kBACA,EAAA,KAuJD,OAAA,EAAA,EAAA,CAAA,CADCG,EAAA,oJAzJU,EAAyB,OAAA,EAAA,EAAA,CAAA,CALrC,OAAA,EAAA,EAAA,CAAU,CACT5M,SAAU,yBACVC,SCjBa,k7nBCAA,4yBF+BO,EAAA,EACN,EAAA,EACQ,EAAA,EACC,EAAA,KAdZ,uBGSA,EAAuB,MA6BlC,YACUiE,EACAoc,EACA7R,EACAF,EACAoM,EACA/S,EACAwL,GANA,KAAAlP,aAAAA,EACA,KAAAoc,eAAAA,EACA,KAAA7R,aAAAA,EACA,KAAAF,YAAAA,EACA,KAAAoM,gBAAAA,EACA,KAAA/S,kBAAAA,EACA,KAAAwL,0BAAAA,EAnCA,KAAAvT,MAAQ,IAAI,EAAA,EACZ,KAAAqU,OAAS,IAAI,EAAA,EAevB,KAAAq9C,gBAAgC,GAGxB,KAAA72B,cAAgB,IAAIC,IACpB,KAAA62B,UAAY,IAAI72B,IACxB,KAAA82B,mBAAqB,CACnBC,YAAa,CAAEvrC,OAAQ,QACvB8D,MAAO,CAAE9D,OAAQ,OAAQ,gBAAiB,SAG5C,KAAA1pB,SAAU,EAYV,YAEA,WACE,OAAOnB,KAAKiT,YAAY3I,OAG1B,qBACE,OAAOtK,KAAK6V,WAAWhP,mBAAqB,EAAA,EAAiBuZ,aAI/D,qBAAqBxO,EAAciE,GAC7BA,EAAWhP,mBAAqB,EAAA,EAAiBuZ,aACnDpgB,KAAKmP,IAAMyC,EAEX5R,KAAK4R,QAAUA,EAGjB5R,KAAK6V,WAAaA,EAElB7V,KAAKiJ,SAAWjJ,KAAK4I,aAAaM,OAAO,CACvC4f,QAAS9oB,KAAKq2D,SACdltD,UAAWnJ,KAAKoJ,WAChBC,SAAU,KACVE,YAAY,EACZC,QAAS,IACTC,gBAAgB,EAChBC,WAAY,IAAO1J,KAAK4R,QAAU,KAClC6qC,gBAAiB,wBACjB9yC,OAAQ,IAAMhH,QAAQgX,IAAI,cAGxB3Z,KAAKuM,gBACPvM,KAAKi2D,sBAAwBj2D,KAAKsM,kBAC/BoiD,wBAAwB1uD,KAAKmP,IAAIrB,YAAYC,KAC7CxN,YAECP,KAAKi2D,iBACPj2D,KAAKi2D,gBAAgB5xD,QAAAA,EAAW2I,IAAKxJ,MACnCxD,KAAKs2D,OAAO9yD,MAIZxD,KAAK4R,QAAQ2tB,YACfv/B,KAAK4R,QAAQ2tB,WAAWl7B,QAAAA,EAAW2I,IAAKxJ,MACtCxD,KAAKu+B,WAAW/6B,KAMhB,WAAWA,GACjBxD,KAAK8X,0BAA0B6nB,gBAAgBn8B,EAAIxD,KAAKsK,KAAK0C,KAAKxK,UAChEe,GAAKvD,KAAKo/B,cAAcnd,IAAIze,GAAI,GAChCd,IACqB,MAAfA,EAAIoe,OACN9gB,KAAKo/B,cAAcnd,IAAIze,GAAI,GAE3Bb,QAAQC,MAAMF,KAMd,OAAOc,GACbxD,KAAK8X,0BAA0By+C,YAAY/yD,EAAIxD,KAAKsK,KAAK0C,KAAKxK,UAC5De,IACEvD,KAAKk2D,UAAUj0C,IAAIze,GAAI,IAEzBd,IACqB,MAAfA,EAAIoe,OACN9gB,KAAKk2D,UAAUj0C,IAAIze,GAAI,GAEvBb,QAAQC,MAAMF,KAMtB,8BACE,OAAO1C,KAAKsK,MAAQtK,KAAKsK,KAAKC,SAASjH,KAAKmH,GAAgB,kBAAXA,EAAEpF,MAGrD,kBACErF,KAAKiJ,SAASY,UAIhB,iBAAiB1G,GACfnD,KAAKw2D,kBAGP,iBACE,OACEx2D,KAAK4R,SAAW5R,KAAK4R,QAAQtH,OAAStK,KAAK4R,QAAQtH,KAAK48C,iBAAmBlnD,KAAK4R,QAAQtH,KAAKK,MAIjG,qBACE,OAAO3K,KAAKy+B,WACR,8MAEA,kKAIN,aACE,IAAIlwB,EAAU,KASd,GARIvO,KAAK4R,SAAW5R,KAAK4R,QAAQrD,QAC/BA,EAAUvO,KAAK4R,QAAQrD,QACdvO,KAAK4R,SAAW5R,KAAK4R,QAAQ9D,YAAYS,QAClDA,EAAUvO,KAAK4R,QAAQ9D,YAAYS,QAC1BvO,KAAKmP,IAAIrB,YAAYS,UAC9BA,EAAUvO,KAAKmP,IAAIrB,YAAYS,UAG5BA,EACH,MAAO,GAMT,MAJa,CAACA,EAAQI,OAAQJ,EAAQ/M,OAAQ+M,EAAQG,WAAYH,EAAQK,aAAcL,EAAQE,MAC7FvM,OAAOwgB,GAAKA,GACZ/P,KAAK,OAEOpE,EAAQC,IAAMD,EAAQE,KAAO,IAAM,MAAQF,EAAQC,GAAK,IAGzE,aACE,OACGxO,KAAK4R,UAAY5R,KAAK4R,QAAQrD,SAAWvO,KAAK4R,QAAQ9D,YAAYS,UAClEvO,KAAKmP,KAAOnP,KAAKmP,IAAIrB,YAAYS,QAItC,aAAaqD,GACX,OAAO5R,KAAKo/B,cAAcn/B,IAAI2R,EAAQ5E,KAGxC,gBAAgBmC,GACd,OAAOnP,KAAKk2D,UAAUj2D,IAAIkP,EAAInC,KAGhC,WAAW4E,GACT5R,KAAK8X,0BAA0ByH,WAAWvf,KAAK6V,WAAW7I,IAAK4E,EAAQ5E,KAAKxK,UAAU0I,IACpFlL,KAAKu+B,WAAW3sB,EAAQ5E,KACxBhN,KAAK4Y,OAAOxH,SAIhB,cAAcQ,GACZ5R,KAAK8X,0BAA0B4nB,cAAc1/B,KAAK6V,WAAW7I,IAAK4E,EAAQ5E,KAAKxK,UAAU0I,IACvFlL,KAAKu+B,WAAW3sB,EAAQ5E,KACxBhN,KAAK4Y,OAAOxH,SAIhB,YAAYjC,EAAiBmO,GAAgB,GAC3C,MAAMD,EAAe,CAAElO,IAAAA,EAAK5C,eAAgBvM,KAAKuM,gBAEnCvM,KAAKglB,eAAe/hB,KAAK,EAAA,EAAuB,CAC5Doa,aAAAA,EACAI,SAAU,SACVC,UAAU,IAEN9T,QAAQ6C,OAAOjK,UAAAA,MAAUu5C,IAC7B/7C,KAAKmB,SAAU,EACf,MAAM42C,QAAc/3C,KAAKy2D,cAAclzD,GACvCvD,KAAK4R,QAAUrG,OAAOmrD,OAAO,IAAI,EAAA,EAAW3e,GAC5C/3C,KAAKmB,SAAU,IAKX,oBAAoByQ,GAC1B,IACE,MAAMmmC,QAAc/3C,KAAKsM,kBAAkBsM,OAAOhH,EAAQ5E,IAAK4E,GAASrR,YAGxE,OAFAP,KAAK4Y,OAAOxH,KAAK2mC,GACjB/3C,KAAKmT,aAAauC,OAAO,UAAW,UAAW,8BACxCqiC,EACP,MAAOr1C,GAGP,OAFAC,QAAQC,MAAMF,GACd1C,KAAKmT,aAAauC,OAAO,QAAS,OAAQ,2BACnC,MAIX,gBAAgB4H,GAAgB,GAC9B,IAAI1L,EAAU5R,KAAK4R,SAAW5R,KAAKmP,IAC/BmO,IAEA1L,EADE5R,KAAK4R,QACG5R,KAAK4R,QAAQ9D,YAEb9N,KAAKmP,IAAIrB,aAIvB,MAAMuP,EAAe,CAAEzL,QAAAA,EAASrF,eAAgBvM,KAAKuM,gBAE/CoqD,EAAa32D,KAAK+1D,cAAgBz4C,EAAgB,GAAK,WAE/Ctd,KAAKglB,eAAe/hB,KAAK,EAA2B,CAChEoa,aAAAA,EACAG,MAAOm5C,EACPl5C,SAAU,SACVC,UAAU,IAEN9T,QAAQ6C,OAAOjK,UAAAA,MAAUu5C,IAC7B/7C,KAAKmB,SAAU,EACf,MAAM42C,QAAc/3C,KAAK46C,WAAWr3C,GAChC+Z,EACEtd,KAAK4R,QACP5R,KAAK4R,QAAQ9D,YAAciqC,EAE3B/3C,KAAKmP,IAAIrB,YAAciqC,EAGzB/3C,KAAK4R,QAAUmmC,EAEjB/3C,KAAKmB,SAAU,IAInB,kBACE,OAAOqf,QAASxgB,KAAK4R,SAAW5R,KAAK4R,QAAQ9D,aAAiB9N,KAAKmP,KAAOnP,KAAKmP,IAAIrB,aAIrF,oBAAoBqB,GAClB,UACQnP,KAAK8X,0BAA0BqF,cAAchO,EAAInC,KAAKzM,YAC5DP,KAAKs2D,OAAOnnD,EAAInC,KAChBhN,KAAK4Y,OAAOxH,OACZ,MAAO1O,GACPC,QAAQC,MAAMF,IAKV,iBAAiBkP,GACvB,IACE,MAAMmmC,QAAc/3C,KAAKqf,gBAAgBzG,OAAOhH,EAAQ5E,IAAK4E,GAASrR,YAGtE,OAFAP,KAAK4Y,OAAOxH,KAAK2mC,GACjB/3C,KAAKmT,aAAauC,OAAO,UAAW,UAAW,8BACxCqiC,EACP,MAAOr1C,GAGP,OAFAC,QAAQC,MAAMF,GACd1C,KAAKmT,aAAauC,OAAO,QAAS,OAAQ,2BACnC,oCA1SQ,EAAA,SACZ,EAAA,SAFA,EAAA,SANA,EAAA,SASA,EAAA,SACA,EAAA,SATA,EAAA,mCAoBN,EAAA,kBACA,EAAA,oBAIA,EAAA,GAAS,KAAA,CAAC,WAAY,CAAE5L,QAAQ,wBAGhC,EAAA,GAAS,KAAA,CAAC,aAAc,CAAEA,QAAQ,uBAGlC,EAAA,GAAS,KAAA,CAAC,YAAa,CAAEA,QAAQ,8BAkHjC,EAAA,EAAY,KAAA,CAAC,0BAA2B,CAAC,cA5E1C,OAAA,EAAA,EAAA,CAAA,CADCwH,EAAA,8EAC8C,EAAA,iFAiK/C,OAAA,EAAA,EAAA,CAAA,CADCA,EAAA,uEACoC,EAAA,gFAsDrC,OAAA,EAAA,EAAA,CAAA,CADCA,EAAA,uEACwB,EAAA,gFAWzB,OAAA,EAAA,EAAA,CAAA,CADCA,EAAA,uEACiC,EAAA,6EApRvB,EAAuB,OAAA,EAAA,EAAA,CAAA,CALnC,OAAA,EAAA,EAAA,CAAU,CACT5M,SAAU,sBACVC,SC1Ba,swOCAA,04FF2DW,EAAA,EACE,EAAA,EACF,EAAA,EACD,EAAA,EACI,EAAA,EACE,EAAA,EACQ,EAAA,KApC1B,+CGZA,EAA+B,MAe1C,YACSyH,EACC+G,EACA0E,EACAvL,EACAgT,GAJD,KAAAlT,SAAAA,EACC,KAAA+G,aAAAA,EACA,KAAA0E,eAAAA,EACA,KAAAvL,kBAAAA,EACA,KAAAgT,gBAAAA,EAlBD,KAAA/S,gBAAiB,EAEhB,KAAAqqD,OAAS,IAAI,EAAA,EACb,KAAAC,mBAAqB,IAAI,EAAA,EAEnC,KAAA9oD,IAAM,IAAI,EAAA,EAAY,IACtB,KAAA+oD,eAAgB,EAChB,KAAAC,gBAAiB,EACjB,KAAAC,wBAAyB,EAGzB,KAAAC,wBAAyB,EAUzB,YAEA,2BACEj3D,KAAKk3D,gBACLl3D,KAAK82D,eAAgB,EACrB92D,KAAKm3D,eAAiB,KACtBn3D,KAAKi3D,uBAAyB,KAE9B,MAAMlpD,EAAM/N,KAAK+N,IAAI5L,MAErBnC,KAAK6X,eACF4I,gBAAgB1S,GAChBvL,UACC40D,IACMA,EAActpD,YAChB9N,KAAKmT,aAAauC,OAAO,UAAW,yDAGtC1V,KAAKm3D,eAAiBC,EACtBp3D,KAAK+N,IAAI7K,UAEVgyB,IAC0B,MAArBA,EAAUpU,OACZ9gB,KAAKi3D,wBAAyB,EAE9Bj3D,KAAKmT,aAAauC,OAChB,QACA,wGAKPmD,IAAAA,KACC7Y,KAAK82D,eAAgB,IAI3B,0BACE92D,KAAKk3D,gBACLl3D,KAAK+2D,gBAAiB,EAClB/2D,KAAKuM,eACPvM,KAAKq3D,sBAELr3D,KAAKs3D,0BAIT,4BACEt3D,KAAKk3D,gBACL,MAAMnpD,EAAM/N,KAAK+N,IAAI5L,MACrBnC,KAAKg3D,wBAAyB,EAC9Bh3D,KAAKsf,gBACFyB,WAAWhT,EAAK,IAChBvL,UACE+f,IACCviB,KAAK62D,mBAAmBzlD,KAAKmR,GAC7BviB,KAAKoM,SAAS+E,QAEfvO,IACsB,MAAjBA,EAAMke,OAQW,MAAjBle,EAAMke,QACR9gB,KAAKmT,aAAauC,OAChB,QACA,yBACA,sKACA,KAZF1V,KAAKmT,aAAauC,OAChB,UACA,QACA,+EAePmD,IAAI7Y,KAAKk3D,eAGd,SACEl3D,KAAKm3D,eAAiB,KACtBn3D,KAAKoM,SAAS+E,OAGR,0BACNnR,KAAK6X,eACF0/C,iBAAiBv3D,KAAK4R,QAAQ5E,IAAKhN,KAAKm3D,eAAeppD,KACvDvL,UAAAA,KAEGxC,KAAK42D,OAAOxlD,KAAKpR,KAAKm3D,gBACtBn3D,KAAKoM,SAAS+E,QAAM,KAGpBnR,KAAKmT,aAAauC,OAChB,QACA,2GAILmD,IAAI7Y,KAAKk3D,eAGN,sBACNl3D,KAAKsM,kBACFirD,iBAAiBv3D,KAAK4R,QAAQ5E,IAAKhN,KAAKm3D,eAAeppD,KACvDvL,UAAAA,KAEGxC,KAAK42D,OAAOxlD,KAAKpR,KAAKm3D,gBACtBn3D,KAAKoM,SAAS+E,QAAM,KAGpBnR,KAAKmT,aAAauC,OAChB,QACA,sGAILmD,IAAI7Y,KAAKk3D,eAGN,gBACNl3D,KAAK82D,eAAgB,EACrB92D,KAAK+2D,gBAAiB,EACtB/2D,KAAKg3D,wBAAyB,gCAhKzB,EAAA,SADA,EAAA,SAEA,EAAA,SACA,EAAA,SAEA,EAAA,qCASN,EAAA,0BACA,EAAA,kBAEA,EAAA,8BACA,EAAA,KALU,EAA+B,OAAA,EAAA,EAAA,CAAA,CAL3C,OAAA,EAAA,EAAA,CAAU,CACTtyD,SAAU,+BACVC,SCda,0xHCAA,ghCFiCM,EAAA,EACK,EAAA,EACE,EAAA,EACG,EAAA,EACF,EAAA,KApBhB,OGsBA,GAAc,MAwCzB,YACU4M,EACAuG,EACA7E,EACApS,EACA+H,EACA2sC,EACD3tC,EACC0xB,EACAzhB,EACAvL,EACA6G,GAVA,KAAA5B,OAAAA,EACA,KAAAuG,0BAAAA,EACA,KAAA7E,YAAAA,EACA,KAAApS,GAAAA,EACA,KAAA+H,aAAAA,EACA,KAAA2sC,eAAAA,EACD,KAAA3tC,YAAAA,EACC,KAAA0xB,IAAAA,EACA,KAAAzhB,eAAAA,EACA,KAAAvL,kBAAAA,EACA,KAAA6G,aAAAA,EAjDV,KAAAw3C,YAAa,EACb,KAAA6M,gBAAiB,EACjB,KAAAxM,cAAgB,EAChB,KAAAyM,YAAuF,GACvF,KAAAC,WAAY,EACZ,KAAAC,QAAqB,GAGrB,KAAAx2D,SAAmB,EACnB,KAAAy2D,gBAA0B,EAE1B,KAAAhN,eAAgB,EAChB,KAAAnkB,YAAc,EACd,KAAA3kB,SAAW,GACX,KAAAC,KAAO,EACP,KAAAH,MAAgB,KAOhB,KAAAglB,aAAe,CAAEixB,EAAG,SACpB,KAAArvB,UAAY,EAEZ,KAAAxmB,YAAc,CACZE,aAAa,EACbC,QAAQ,EACRC,QAAQ,GAGV,KAAA6O,UAAW,EAoBTjxB,KAAKg4B,WAjBP,WACEh4B,KAAKixB,SAAWjxB,KAAK4H,YAAYspB,mBAoBnC,iBACElxB,KAAKinB,WACLjnB,KAAKmI,OAASnI,KAAKsK,KAAK0C,UAClBhN,KAAKiyB,0BAA0BjyB,KAAKsK,KAAK0C,KAGjD,kBACEyjC,WAAAA,KACEzwC,KAAK+sC,YAAYpiB,cAAc2C,SAC9B,GACHttB,KAAKs5B,IAAIa,gBAGX,iCACE,OAAO,GAAA,GAASkc,QAAU,IA9ED,GAiF3B,WACE,OAAOr2C,KAAKiT,YAAY3I,OAG1B,qBACE,OAAOtK,KAAK6V,YAAmD,iBAArC7V,KAAK6V,WAAWhP,iBAI5C,gCAAgCsB,GAC9BnI,KAAKmB,SAAU,EACfnB,KAAK6V,iBAAmB7V,KAAK8X,0BAA0Bqa,sBAAsBhqB,GAAQ5H,YAErFP,KAAKquD,YAAYruD,KAAK4hB,OAGxB,kBACE5hB,KAAKmB,SAAU,EACfnB,KAAK8X,0BACFggD,kCACC93D,KAAK4hB,MACL5hB,KAAKsK,KAAK0C,IACVhN,KAAK8hB,SACL9hB,KAAK+hB,KACL/hB,KAAKgiB,aAENxf,UACCtC,IACEF,KAAK23D,QAAUz3D,EAAK4jB,SACpB9jB,KAAKymC,YAAcvmC,EAAKumC,YACxBzmC,KAAKmB,SAAU,GAEjBuB,IACEC,QAAQC,MAAMF,GACd1C,KAAKmB,SAAU,IAKvB,qBACEnB,KAAKmB,SAAU,EACfnB,KAAK8X,0BAA0BigD,sBAAsB/3D,KAAK4hB,MAAO5hB,KAAK8hB,SAAU9hB,KAAK+hB,MAAMvf,UACzFtC,IACEF,KAAK23D,QAAUz3D,EAAK+c,KACpBjd,KAAKymC,YAAcvmC,EAAKumC,YACxBzmC,KAAKmB,SAAU,EACfsvC,WAAAA,KACEzwC,KAAK+sC,YAAYpiB,cAAc2C,SAC9B,IAEL5qB,IACEC,QAAQC,MAAMF,GACd1C,KAAKmB,SAAU,IAMrB,6BAA6BsG,GAC3BzH,KAAKu1C,eAAe1sB,QAAQ,CAC1BC,QAAS,SACT3f,UAAW,4DACXQ,OAAQoyC,UACF/7C,KAAKuM,qBACDvM,KAAK8X,0BACRkgD,iBAAiBh4D,KAAK6V,WAAW7I,IAAKvF,GACtClH,kBAEGP,KAAK8X,0BAA0B4nB,cAAc1/B,KAAK6V,WAAW7I,IAAKvF,GAAWlH,YAErFP,KAAKquD,YAAYruD,KAAK4hB,UAK5B,YAAYA,GACV5hB,KAAK4hB,MAAQA,EACb5hB,KAAK+hB,KAAO,EACZ/hB,KAAKwoC,UAAY,EAEjBxoC,KAAKuM,eAAiBvM,KAAKi4D,qBAAuBj4D,KAAKk4D,kBAGzD,oBAAoBC,GAClB,IAAI3oD,EAAS,GACb,IAAK,IAAIyL,EAAI,EAAGA,EAAIk9C,EAAS/1D,OAAQ6Y,IACnCzL,EAASxP,KAAK23D,QAAQ18C,GAAG5V,KAE3B,OAAOmK,EAGD,WACNxP,KAAKo4D,WAAap4D,KAAKa,GAAGU,MAAM,CAC9BqgB,MAAO5hB,KAAKa,GAAG6Y,QAAQ,MAGzB1Z,KAAKo4D,WACFn4D,IAAI,SACJ+B,aAAaC,KAAK,OAAAI,EAAA,EAAA,CAAa,KAAM,OAAA+3B,EAAA,EAAA,IACrC53B,UAAUL,GAASnC,KAAKquD,YAAYlsD,IAGzC,aACEnC,KAAKo4D,WAAWn4D,IAAI,SAASsP,SAAS,IAGxC,sBACEsmB,GAEA71B,KAAKy3D,YAAc5hC,EAGrB,gBACE,MAAM80B,EAAa3qD,KAAKy3D,YAAY1lD,MAAM5P,GAASA,EAAM8P,SACnD84C,EAAe/qD,KAAKy3D,YAAY1lD,MAAM5P,IAAUA,EAAM8P,SAC5DjS,KAAK2qD,WAAaA,EAClB3qD,KAAK4qD,eAAiBD,IAAeI,EAGvC,SAAS5oD,GACPnC,KAAKy3D,YAAYpzD,QAAQnE,GAASA,EAAK+R,QAAU9P,GACjDnC,KAAKirD,gBAGP,0BAA0B9nD,EAAcyO,GACtCzO,EAAM2pB,iBACN9sB,KAAKq4D,aAAapjC,eAAerjB,EAAS5R,KAAK6V,YAC/C7V,KAAKq4D,aAAaz/C,OAAOpW,UAAUu1C,GACjC/3C,KAAKuM,eAAiBvM,KAAKi4D,qBAAuBj4D,KAAKk4D,mBAI3D,+BAA+BzwD,GAC7BzH,KAAKuR,OAAOsB,SAAS,CAAC,YAAa,CAAE0f,YAAa,CAAE9qB,UAAAA,KAGtD,0BAA0BmK,GACxBrM,aAAaM,QAAQ,UAAWhE,KAAKE,UAAU6P,IAC/C,MAAM0F,EACJtX,KAAKuM,gBAAkBvM,KAAKiT,YAAYqlD,+BACpC,gBACA,oBACNt4D,KAAKuR,OAAOsB,SAAS,CAACyE,IAGxB,gBAAgBvJ,GACd,MAAMsP,EAAe,CACnB/S,KAAMtK,KAAKsK,KACXuL,WAAY7V,KAAK6V,WACjB0J,YAAY,EACZxR,IAAAA,GAEIgG,EAAQ/T,KAAK4I,aAAa3F,KAAK,EAAA,EAAsB,CACzDoa,aAAAA,EACAI,SAAU,SACVC,UAAU,IAEZ3J,EAAMnK,QAAQ+T,uBAAuBnb,UAAUoP,IAC7C5R,KAAK4hB,MAAQ,KACb5hB,KAAK+hB,KAAO,EACZ/hB,KAAKk4D,oBAEPnkD,EAAMnK,QAAQ6V,yBAAyBjd,UAAUkO,GAAW1Q,KAAK04B,oBAAoBhoB,IACrFqD,EAAMnK,QAAQ8V,wBAAwBld,UAAUkO,GAAW1Q,KAAKkuD,mBAAmBx9C,IACnFqD,EAAMnK,QAAQ+V,oBAAoBnd,UAAWL,GAAoBnC,KAAK43D,eAAiBz1D,GAEnF4L,GACFqzC,YAAAA,IAAkBrtC,EAAM5C,OAAQ,GAI5B,oBAAoBT,EAASkmD,GACnC,MAAMv5C,EAAe,CACnBxH,WAAY7V,KAAK6V,WACjBjE,QAASlB,EAAQkB,QACjB0L,cAAe5M,EAAQ4M,cACvBC,gBAAiB7M,EAAQ6M,iBAEbvd,KAAK4I,aAAa3F,KAAK,EAAA,EAA0B,CAC7Dua,MAAO,WACPH,aAAAA,EACAI,SAAU,SACVC,UAAU,IAEN9T,QAAQ+T,uBAAuBnb,UAAWojD,IACzCgR,EAKHA,EAAOhR,IAJP5lD,KAAK4hB,MAAQ,KACb5hB,KAAK+hB,KAAO,EACZ/hB,KAAKk4D,qBAOH,mBAAmBxnD,GACzB,MAAM2M,EAAe,CACnBxH,WAAY7V,KAAK6V,WACjBoH,KAAMvM,EAAQkB,QAAQqL,KACtBnP,YAAa4C,EAAQkB,SAET5R,KAAK4I,aAAa3F,KAAK,EAAA,EAAyB,CAC5Doa,aAAAA,EACAI,SAAU,SACVC,UAAU,IAGN9T,QAAQ6C,OAAOjK,UAAU0I,IAC7BlL,KAAK4hB,MAAQ,KACb5hB,KAAK+hB,KAAO,EACZ/hB,KAAKi4D,qBACLj4D,KAAK4I,aAAauI,KAAK,KAI3B,iBAAiBq3B,GACfxoC,KAAKmB,SAAU,EACfnB,KAAK+hB,KAAOymB,EACZxoC,KAAKwoC,UAAYA,EACjBxoC,KAAKuM,eAAiBvM,KAAKi4D,qBAAuBj4D,KAAKk4D,kBAGzD,kBAAkBK,GAChBhtD,OAAO6O,QAAQpa,KAAKgiB,aAAa3d,QAAAA,EAAUooB,EAAKtqB,MAC1CsqB,IAAQ8rC,EACVv4D,KAAKgiB,YAAYu2C,IAAcp2D,EAE/BnC,KAAKgiB,YAAYyK,IAAO,IAG5BzsB,KAAKk4D,kBAGP,2BAA2BtmD,GACzB,MAAMyL,EAAe,CACnBzL,QAAAA,EACArF,eAAgBvM,KAAKuM,gBAEjBwH,EAAQ/T,KAAK4I,aAAa3F,KAAK,EAAiC,CACpEoa,aAAAA,EACAI,SAAU,SACVC,UAAU,EACVF,MAAO,aAGHg7C,EAA4BpB,IAChCp3D,KAAK23D,QAAU33D,KAAK23D,QAAQjlD,IAAIpO,GAC1BA,EAAK0I,MAAQ4E,EAAQ5E,IAChB,IACF1I,EACHwJ,YAAaspD,GAGV9yD,IAIXyP,EAAMnK,QAAQgtD,OAAOp0D,UAAUg2D,GAE/BzkD,EAAMnK,QAAQitD,mBAAmBr0D,UAAWkO,IAC1C,MAAM2M,EAAe,CACnBzL,QAASlB,EACT4M,eAAe,EACfC,iBAAiB,GAEnBvd,KAAK04B,oBAAoBrb,EAAeo7C,KACtBz4D,KAAKuM,eACjBvM,KAAKsM,kBAAkBirD,iBAAiB3lD,EAAQ5E,IAAKyrD,EAAW1qD,KAChE/N,KAAK6X,eAAe0/C,iBAAiB3lD,EAAQ5E,IAAKyrD,EAAW1qD,MAEzDvL,UAAAA,KAEJg2D,EAAyBC,GACzBz4D,KAAK23D,QAAQ30D,KAAKy1D,IAAW,KAG7Bz4D,KAAKmT,aAAauC,OAChB,QACA,8IA7XL,EAAA,SAGA,EAAA,SAFA,EAAA,SAFA,EAAA,SAaA,EAAA,SADA,EAAA,SATA,EAAA,SAVP,EAAA,SA0BO,EAAA,SACA,EAAA,SACA,EAAA,2CA4BN,EAAA,GAAS,KAAA,CAAC,EAAyB,CAAE5L,QAAQ,yBAG7C,EAAA,GAAS,KAAA,CAAC,cAAe,CAAEA,QAAQ,sBAanC,EAAA,EAAY,KAAA,CAAC,gBAAiB,CAAC,cAsBhC,OAAA,EAAA,EAAA,CAAA,CADCwH,EAAA,kJA2BD,OAAA,EAAA,EAAA,CAAA,CADCA,EAAA,yKAkDD,OAAA,EAAA,EAAA,CAAA,CADCA,EAAA,sKAnIU,GAAc,OAAA,EAAA,EAAA,CAAA,CAL1B,OAAA,EAAA,EAAA,CAAU,CACT5M,SAAU,YACVC,SVpCa,8pUWAA,y0JDgFK,EAAA,EACmB,EAAA,EACd,EAAA,EACT,EAAA,EACU,EAAA,EACE,EAAA,EACJ,EAAA,EACP,EAAA,EACW,EAAA,EACG,EAAA,EACL,EAAA,KAnDb,IEvCE,+CCuBF,GAAoB,MAW/B,YACU9D,EACAoS,EACA6E,GAFA,KAAAjX,GAAAA,EACA,KAAAoS,YAAAA,EACA,KAAA6E,0BAAAA,EAbV,KAAA2Z,SAAU,EAIV,KAAA0kC,mBAAqB,CACnBC,YAAa,CAAEvrC,OAAQ,SAGjB,KAAAzpB,WAAqC,IAAIC,GAAA,EAO/CrB,KAAK04D,kBAAoB14D,KAAKa,GAAGU,MAAM,CACrCyL,IAAKhN,KAAKa,GAAG6Y,QAAQ,IACrBrU,KAAMrF,KAAKa,GAAG6Y,QAAQ,MAI1B,WACE1Z,KAAKqrB,WAGP,WACE,OAAOrrB,KAAKiT,YAAY3I,OAG1B,gBAAgBsH,GACd5R,KAAK4R,QAAUA,EACf5R,KAAK04D,kBAAkBz4D,IAAI,OAAOsP,SAASqC,EAAQ5E,KAGrD,aACEhN,KAAKyxB,SAAWzxB,KAAKyxB,QAGvB,eACEzxB,KAAK4R,aAAUtG,EACftL,KAAK04D,kBAAkBz4D,IAAI,OAAOsP,SAAS,IAC3CvP,KAAK04D,kBAAkBz4D,IAAI,QAAQsP,SAAS,IAG9C,WACE,IAAI6+C,EAAa,GAEjBpuD,KAAK04D,kBACFz4D,IAAI,QACJ+B,aAAaC,KACZ,OAAAI,EAAA,EAAA,CAAaC,EAAA,EAAYD,cACzB,OAAA+3B,EAAA,EAAA,GACA,OAAA9gB,EAAA,EAAA,CAAUnX,IACRisD,EAAajsD,EACNnC,KAAKquD,YAAYlsD,KAE1B,OAAAuQ,EAAA,EAAA,CAAK5H,IACH,GAAIA,GACEA,EAAI1I,OAAS,EACf,OAAO0I,EAGX9K,KAAK04D,kBAAkBz4D,IAAI,OAAOsP,SAAS,QAE7C,OAAAhN,GAAA,EAAA,CAAUvC,KAAKoB,YACf,OAAA8K,EAAA,EAAA,CAAA,CAAYxJ,EAAK6rD,IACRA,EAAOtsD,KAAK,OAAAyV,GAAA,EAAA,CAAU,OAGhClV,UAAUshB,IACT9jB,KAAK8jB,SAAWA,IAId,YAAY3hB,GAClB,OAAOnC,KAAK8X,0BAA0BoJ,oBAAoB/e,EAAOnC,KAAKsK,KAAK0C,KAGrE,YAAY7K,GAClB,OAAkC,MAA3BA,EAAM8X,MAAM,2CAtGd,EAAA,SACA,EAAA,SACA,EAAA,IAoBI,GAAoB,OAAA,EAAA,EAAA,CAAA,CALhC,OAAA,EAAA,EAAA,CAAU,CACTvV,SAAU,mBACVC,SDpBa,8pFEAA,s7EDmCC,EAAA,EACS,EAAA,EACc,EAAA,KAd1B,IEvBE,qBCWF,GAAoB,MAC/B,YAAoB5E,GAAA,KAAAA,KAAAA,EAEpB,UACE,OAAOC,KAAKD,KAAKE,IAAW,GAAGqC,EAAA,EAAYzC,eAG7C,WAAW4H,EAAmBkxD,EAAcr2C,GAC1C,MAAM3hB,EAAS,CAAE8G,UAAAA,EAAWkxD,KAAAA,EAAMr2C,MAAAA,GAClC,OAAOtiB,KAAKD,KAAKE,IAAuB,GAAGqC,EAAA,EAAYzC,yBAA0B,CAAEc,OAAAA,IAGrF,aAAai4D,GACX,OAAO54D,KAAKD,KAAKI,KAAoB,GAAGmC,EAAA,EAAYzC,yBAA0B+4D,GAGhF,aAAaA,GACX,OAAO54D,KAAKD,KAAKqkB,MAAqB,GAAG9hB,EAAA,EAAYzC,0BAA0B+4D,EAAOp1D,KAAMo1D,GAG9F,aAAap1D,GACX,OAAOxD,KAAKD,KAAKa,OAAO,GAAG0B,EAAA,EAAYzC,0BAA0B2D,KAGnE,aAAaq1D,EAA0BC,GACrC,OAAO94D,KAAKD,KAAKI,KAAoB,GAAGmC,EAAA,EAAYzC,+BAAgC,CAClFg5D,QAAAA,EACAC,QAAAA,mCAtCG,GAAA,IAWI,GAAoB,OAAA,EAAA,EAAA,CAAA,CAHhC,OAAA,EAAA,EAAA,CAAW,CACV14D,WAAY,0CAGc,GAAA,KADf,QCIA24D,GAAsB,MAwBjC,YACU9lD,EACA+lD,EACA7lD,GAFA,KAAAF,YAAAA,EACA,KAAA+lD,qBAAAA,EACA,KAAA7lD,aAAAA,EAvBV,KAAAse,SAAU,EACV,KAAAwnC,eAAkC,GAClC,KAAAC,eAAkC,GAElC,KAAAC,aAAsB,GAGtB,KAAAC,KAAc,GACd,KAAAC,aAAsB,GACtB,KAAAT,OAAS,GAET,KAAAU,SAAU,EACV,KAAAn4D,SAAU,EACV,KAAAo4D,gBAAiB,EAGjB,KAAAj3C,MAAQ,GAWR,iBACE,GAAItiB,KAAK4R,QAAS,CAChB,MAAOwnD,SAAch5B,QAAQo5B,IAAI,CAC/Bx5D,KAAKg5D,qBAAqBS,UAAUl5D,YACpCP,KAAK05D,sBAAsB,KAE7B15D,KAAKo5D,KAAOA,OAEZp5D,KAAKo5D,WAAap5D,KAAKg5D,qBAAqBS,UAAUl5D,YAKlD,4BAA4Bo5D,EAAyBz2D,GAAQ,GACnE,IACElD,KAAKmB,SAAU,EACf,MAAM,KAAEy4D,EAAI,MAAE9vB,SAAgB9pC,KAAKg5D,qBAChCa,WAAW75D,KAAK4R,QAAQ5E,IAAK2sD,EAAiB35D,KAAKsiB,OACnD/hB,YAEDP,KAAKi5D,eADH/1D,EACoB02D,EAEA55D,KAAKi5D,eAAe1xB,OAAOqyB,GAEnD55D,KAAK24D,KAAOgB,EACZ35D,KAAK8pC,MAAQA,EACb,MAAOpnC,GACPC,QAAQC,MAAMF,GAGhB1C,KAAKmB,SAAU,EAGjB,WACE,OAAOnB,KAAKiT,YAAY3I,OAG1B,uBACE,OAAOtK,KAAKo5D,KAAKl3D,OAAOqyC,GAAKA,EAAEulB,SAAS13D,QAG1C,0BACE,OAAOpC,KAAKo5D,KAAKl3D,OAAOqyC,IAAMA,EAAEulB,SAAS13D,QAI3C,eAAee,GAEXA,EAAMgI,OAAO4uD,aAAe52D,EAAMgI,OAAO6uD,WAAa72D,EAAMgI,OAAO2f,cACnE9qB,KAAKi5D,eAAe72D,OAASpC,KAAK8pC,aAE5B9pC,KAAK05D,sBAAsB15D,KAAK24D,KAAO,GAKjD,0BACQ34D,KAAK05D,sBAAsB,GAAG,GAGtC,WAAWd,GACT54D,KAAKg5D,qBAAqBiB,aAAarB,GAGzC,aAAa31D,GACXjD,KAAKs5D,QAAUr2D,EAIjB,mBAAmBi3D,GACjB,IACEl6D,KAAKu5D,gBAAiB,EACtB,MAAMY,QAAsBn6D,KAAKg5D,qBAC9BoB,aAAap6D,KAAKk5D,eAAgBgB,GAClC35D,YACHP,KAAKu5D,gBAAiB,EACtBv5D,KAAKq6D,mBAAoB,EACzBr6D,KAAKs6D,cAAa,GAClBt6D,KAAKi5D,eAAe38B,QAAQ69B,SACtBn6D,KAAKu6D,cACX,MAAO73D,GACP1C,KAAKu5D,gBAAiB,EACtB52D,QAAQC,MAAMF,IAIlB,oBAAoBxC,GAClB,MAAM,OAAE04D,EAAM,MAAEz1D,GAAUjD,EAC1B,GAAIiD,EACFnD,KAAKk5D,eAAel2D,KAAK41D,OACpB,CACL,MAAM30D,EAAQjE,KAAKk5D,eAAexmD,IAAI8nD,GAAKA,EAAEh3D,IAAI2B,QAAQyzD,EAAOp1D,IAChExD,KAAKk5D,eAAiBl5D,KAAKk5D,eAAep1D,OAAOG,EAAO,IAI5D,0BACEjE,KAAKm5D,aAAen5D,KAAKk5D,eACtBxmD,IAAI8nD,GAAKA,EAAEC,KACXv4D,OAAOqyC,KAAOA,GACd/vC,OAAAA,CAAQC,EAAKg2D,KACPh2D,EAAInB,KAAKixC,GAAKA,EAAE/wC,KAAOi3D,EAAIj3D,KAC9BiB,EAAIzB,KAAKy3D,GAEJh2D,GACN,IAE4B,IAA7BzE,KAAKm5D,aAAa/2D,OACpBpC,KAAKo6D,aAAap6D,KAAKm5D,aAAa,GAAG31D,IAEvCxD,KAAKq6D,mBAAqBr6D,KAAKq6D,kBAInC,uBACEr6D,KAAKs6D,cAAa,GAGpB,cACEt6D,KAAKq6D,mBAAqBr6D,KAAKq6D,kBAGjC,YAAYI,GACNA,EAAIC,UACN16D,KAAK26D,YAAYF,EAAIj3D,IAKzB,qBACE,IACE,MAAMuJ,EAAO,CACXtF,UAAWzH,KAAK4R,QAAQ5E,IACxBpD,QAAS5J,KAAK44D,OACd6B,IAAKz6D,KAAK46D,aAAe56D,KAAK46D,YAAYp3D,IAE5CxD,KAAKmB,SAAU,EACf,MAAMg5D,QAAsBn6D,KAAKg5D,qBAAqB6B,aAAa9tD,GAAMxM,YACzEP,KAAKi5D,eAAe38B,QAAQ69B,GAC5B,MAAOz3D,GACPC,QAAQC,MAAMF,GACd1C,KAAKmT,aAAauC,OAAO,QAAS,OAAQ,4CAE5C1V,KAAKkD,QAGP,wBACE,IAAKlD,KAAK44D,OAAOn1D,SAAS,KACxB,MAAO,CAAE6H,eAAAA,EAAWstD,OAAQ54D,KAAK44D,QAIrC,eAAe6B,GACbz6D,KAAK46D,YAAcH,EACnBz6D,KAAK44D,OAAS,IAAI6B,EAAIp1D,SAIxB,kBAAkBy1D,GAChB,IACE,MAAMlC,EAAS,CACbnxD,UAAWzH,KAAK4R,QAAQ5E,IACxBpD,QAAS,GACT6wD,IAAKK,EACLC,UAAU,GAENZ,QAAsBn6D,KAAKg5D,qBAAqB6B,aAAajC,GAAQr4D,YAC3EP,KAAKi5D,eAAe38B,QAAQ69B,GAC5B,MAAOz3D,GACPC,QAAQC,MAAMF,GACd1C,KAAKmT,aAAauC,OAAO,QAAS,OAAQ,4CAE5C1V,KAAKkD,QAGC,QACNlD,KAAKmB,SAAU,EACfnB,KAAK44D,OAAS,GACd54D,KAAK46D,iBAActvD,EACnBtL,KAAKg7D,YAAYrwC,cAAcxoB,MAAQ,kCAhOlC,EAAA,SAMA,UADA,EAAA,sCAUN,EAAA,uBACA,EAAA,uBAoBA,EAAA,GAAS,KAAA,CAAC,kBASX,OAAA,EAAA,EAAA,CAAA,CADCmP,EAAA,kJAcD,OAAA,EAAA,EAAA,CAAA,CADCA,EAAA,4KAkCD,OAAA,EAAA,EAAA,CAAA,CADCA,EAAA,wJAWD,OAAA,EAAA,EAAA,CAAA,CADCA,EAAA,qJAcD,OAAA,EAAA,EAAA,CAAA,CADCA,EAAA,4JA6DD,OAAA,EAAA,EAAA,CAAA,CADCA,EAAA,sJA8BD,OAAA,EAAA,EAAA,CAAA,CADCA,EAAA,2JA5LUynD,GAAsB,OAAA,EAAA,EAAA,CAAA,CALlC,OAAA,EAAA,EAAA,CAAU,CACTr0D,SAAU,qBACVC,SFZa,ugJGAA,s9BDwCU,EAAA,EACS,GACR,EAAA,KA3Bbo0D,QEJA,GAAmB,MAoB9B,YAAoBC,GAAA,KAAAA,qBAAAA,EAhBV,KAAAiC,cAAmC,IAAI,EAAA,EACvC,KAAAC,WAAoC,IAAI,EAAA,EACxC,KAAAZ,aAAsC,IAAI,EAAA,EAC1C,KAAAa,oBAAyC,IAAI,EAAA,EAevD,YAEA,cACEn7D,KAAKiD,MAAQjD,KAAKiD,KAGpB,UACEjD,KAAKo7D,YAAa,EAGpB,aACEp7D,KAAKq7D,SAAWr7D,KAAKq7D,QACrBr7D,KAAKiD,MAAQjD,KAAKiD,KAGpB,iBACEjD,KAAKs7D,aAAet7D,KAAKs7D,YACzBt7D,KAAKiD,MAAO,EAGd,eACEjD,KAAKs6D,aAAalpD,MAAK,GACvBpR,KAAKu7D,cAGP,oBAAoBp4D,GAClBnD,KAAKm7D,oBAAoB/pD,KAAK,CAAEwnD,OAAQ54D,KAAK44D,OAAQz1D,MAAAA,IAIvD,qBACEnD,KAAKmB,SAAU,EACf,MAAMq6D,QAAsBx7D,KAAKg5D,qBAAqBiB,aAAaj6D,KAAK44D,QAAQr4D,YAChFP,KAAK44D,OAAS4C,EACdx7D,KAAKq7D,SAAU,EACfr7D,KAAKmB,SAAU,EAIjB,2BACQnB,KAAKg5D,qBAAqByC,aAAaz7D,KAAK44D,OAAOp1D,IAAIjD,YAC7DP,KAAKi7D,cAAc7pD,OACnBpR,KAAKmB,SAAU,EAGjB,SAAS25D,GAIP,OAHe96D,KAAK44D,OAAO6B,IAAIhgD,OACPq/C,SACD31D,UAAUsY,GAAKA,EAAEjZ,KAAOs3D,GAChC,EAGjB,sBAAsBY,GACpB17D,KAAK07D,OAASA,EACd17D,KAAK27D,qBAAsB,EAG7B,SAASC,GACP57D,KAAKo7D,YAAa,EAGpB,aAAaQ,GACE,eAATA,EACF57D,KAAKo7D,YAAa,EAElBp7D,KAAK27D,qBAAsB,EAK/B,kBACE37D,KAAK44D,OAAO6B,IAAMz6D,KAAK07D,OACvB17D,KAAK67D,aAAc,EACnB,MAAML,QAAsBx7D,KAAKg5D,qBAAqBiB,aAAaj6D,KAAK44D,QAAQr4D,YAChFP,KAAK44D,OAAS4C,EACdx7D,KAAK27D,qBAAsB,EAC3B37D,KAAKo7D,YAAa,EAClBp7D,KAAKiD,MAAO,EACZjD,KAAK67D,aAAc,EAGrB,WAAWjyD,GACTjG,SAASC,eAAe,WAAWk4D,UAAYlyD,iCAlH1C,sCAWN,EAAA,gBACA,EAAA,mBACA,EAAA,yBACA,EAAA,sBACA,EAAA,wBACA,EAAA,+BACA,EAAA,KA6CD,OAAA,EAAA,EAAA,CAAA,CADC0H,EAAA,sJAUD,OAAA,EAAA,EAAA,CAAA,CADCA,EAAA,sJAgCD,OAAA,EAAA,EAAA,CAAA,CADCA,EAAA,mJA3FU,GAAmB,OAAA,EAAA,EAAA,CAAA,CAL/B,OAAA,EAAA,EAAA,CAAU,CACT5M,SAAU,kBACVC,SCRa,i7JCAA,qsEF+B6B,MApB/B,IGPb,MAAMsR,GAAiB,CAAC,CAAE5S,KAAM,GAAI6S,UAAW,SAMlC6lD,GAAqB,QAArBA,GAAqB,OAAA,EAAA,EAAA,CAAA,CAJjC,OAAA,EAAA,EAAA,CAAS,CACR1lD,QAAS,CAAC,EAAA,EAAaC,SAASL,KAChCO,QAAS,CAAC,EAAA,MAECulD,QC+CAC,GAAc,QAAdA,GAAc,OAAA,EAAA,EAAA,CAAA,CA/B1B,OAAA,EAAA,EAAA,CAAS,CACR3lD,QAAS,CACP,EAAA,EACA0lD,GACA,EAAA,EAAiBplD,QAAQ,IACzB,EAAA,YACA,EAAA,EAAYA,UACZ,EAAA,EACA,EAAA,EACA,EAAA,EAAcA,UACd,EAAA,EACA,EAAA,GAEFD,aAAc,CACZ,GACA,EACA,EAAA,EACA,EAAA,EACAqiD,GACA,EACA,GACA,GACA,EACA,EACA,EACA,EAAA,EACA,EAAA,EACA,GAEFviD,QAAS,CAACuiD,GAAwB,OAEvBiD,uCCvDb,EAAA,EAAA,EAAA,KAAA,WAAA,OAAA,KAAO,MAAMC,EAAiC,CAC5C,CACEz4D,GAAI,IACJ04D,MAAO,KACPl4D,KAAM,QAER,CACER,GAAI,IACJ04D,MAAO,KACPl4D,KAAM,WAER,CACER,GAAI,IACJ04D,MAAO,KACPl4D,KAAM,YAER,CACER,GAAI,IACJ04D,MAAO,KACPl4D,KAAM,YAER,CACER,GAAI,IACJ04D,MAAO,KACPl4D,KAAM,SAER,CACER,GAAI,IACJ04D,MAAO,KACPl4D,KAAM,YAER,CACER,GAAI,IACJ04D,MAAO,KACPl4D,KAAM,oBAER,CACER,GAAI,IACJ04D,MAAO,KACPl4D,KAAM,qBAER,CACER,GAAI,IACJ04D,MAAO,KACPl4D,KAAM,YAER,CACER,GAAI,KACJ04D,MAAO,KACPl4D,KAAM,eAER,CACER,GAAI,KACJ04D,MAAO,KACPl4D,KAAM,gBAER,CACER,GAAI,KACJ04D,MAAO,KACPl4D,KAAM,sBAER,CACER,GAAI,KACJ04D,MAAO,KACPl4D,KAAM,eAER,CACER,GAAI,KACJ04D,MAAO,KACPl4D,KAAM,WAER,CACER,GAAI,KACJ04D,MAAO,KACPl4D,KAAM,cAER,CACER,GAAI,KACJ04D,MAAO,KACPl4D,KAAM,cAER,CACER,GAAI,KACJ04D,MAAO,KACPl4D,KAAM,YAER,CACER,GAAI,KACJ04D,MAAO,KACPl4D,KAAM,aAER,CACER,GAAI,KACJ04D,MAAO,KACPl4D,KAAM,kBAER,CACER,GAAI,KACJ04D,MAAO,KACPl4D,KAAM,uBAER,CACER,GAAI,KACJ04D,MAAO,KACPl4D,KAAM,eAER,CACER,GAAI,KACJ04D,MAAO,KACPl4D,KAAM,WAER,CACER,GAAI,KACJ04D,MAAO,KACPl4D,KAAM,qBAER,CACER,GAAI,KACJ04D,MAAO,KACPl4D,KAAM,kBAER,CACER,GAAI,KACJ04D,MAAO,KACPl4D,KAAM,WAER,CACER,GAAI,KACJ04D,MAAO,KACPl4D,KAAM,gBAER,CACER,GAAI,KACJ04D,MAAO,KACPl4D,KAAM,mKC7HG,EAA6B,MASxC,YACUgU,EACA7E,EACAH,GAFA,KAAAgF,WAAAA,EACA,KAAA7E,aAAAA,EACA,KAAAH,iBAAAA,EATV,KAAA3K,0BAA2B,EAC3B,KAAAlH,SAAU,EACD,KAAAgyB,WAAY,EACX,KAAA4V,4BAA8B,IAAI,EAAA,EAC5C,KAAAxgC,OAAS,GAQT,YAEA,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","sourceRoot":"webpack:///","sourcesContent":["import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { environment } from '@env/environment';\nimport { Observable } from 'rxjs';\nimport { ProductRennova } from '../models/product-rennova';\n\nconst API_UL = `${environment.apiRoot}rennova`;\n\n@Injectable({\n providedIn: 'root'\n})\nexport class RennovaService {\n constructor(private http: HttpClient) {}\n\n findAll(): Observable<ProductRennova[]> {\n return this.http.get<ProductRennova[]>(`${API_UL}/products`);\n }\n\n sendDocument(data) {\n return this.http.post(`${API_UL}/send-document`, data);\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { environment } from '@env/environment';\n\nexport const EXAM_MODEL_URL = 'exam-model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ExamModelService {\n constructor(private http: HttpClient) {}\n\n getListByPrescriberId(prescriberId: any): any {\n return this.http\n .get(`${environment.apiRoot}${EXAM_MODEL_URL}?prescriberId=${prescriberId}`)\n .toPromise();\n }\n\n getById(modelId: string) {\n return this.http.get(`${environment.apiRoot}${EXAM_MODEL_URL}/${modelId}`).toPromise();\n }\n\n create(orientationModel: any) {\n return this.http.post(`${environment.apiRoot}${EXAM_MODEL_URL}`, orientationModel).toPromise();\n }\n\n update(orientationModel: any, modelId: string) {\n return this.http\n .put(`${environment.apiRoot}${EXAM_MODEL_URL}/${modelId}`, orientationModel)\n .toPromise();\n }\n\n deleteById(modelId: string, prescriberId = '') {\n const params = prescriberId ? { prescriberId } : {};\n return this.http\n .delete(`${environment.apiRoot}${EXAM_MODEL_URL}/${modelId}`, { params })\n .toPromise();\n }\n}\n","import { Component, OnDestroy, OnInit } from '@angular/core';\nimport { FormBuilder, FormGroup } from '@angular/forms';\nimport { CrService } from '@app/modules/document/services/cr.service';\nimport { environment } from '@env/environment';\nimport { NzModalRef } from 'ng-zorro-antd/modal';\nimport { ReplaySubject } from 'rxjs';\nimport { debounceTime, filter, takeUntil } from 'rxjs/operators';\nimport { MedicamentoBusca } from '../models/register-class';\n\n@Component({\n selector: 'app-modal-dispention',\n templateUrl: './modal-dispention.component.html',\n styleUrls: ['./modal-dispention.component.scss']\n})\nexport class ModalDispentionComponent implements OnInit, OnDestroy {\n medicament: any;\n dispesationForm: FormGroup;\n isNewItem = true;\n medicamentItems: MedicamentoBusca[] = [];\n\n batchForm: FormGroup;\n medicationForm: FormGroup;\n\n medications = [];\n loading = false;\n\n private destroyed$ = new ReplaySubject<boolean>();\n\n constructor(private fb: FormBuilder, private ref: NzModalRef, private crService: CrService) {\n this.batchForm = this.fb.group({ number: [''] });\n this.medicationForm = this.fb.group({ ean: [''] });\n }\n\n ngOnInit() {\n if (this.medicament.items) {\n // deep copy\n this.medicamentItems = JSON.parse(JSON.stringify(this.medicament.items));\n }\n\n this.medicationForm\n .get('ean')\n .valueChanges.pipe(\n filter(value => value && value.length >= 3),\n debounceTime(environment.debounceTime),\n takeUntil(this.destroyed$)\n )\n .subscribe(value => {\n try {\n this.loading = true;\n this.crService.searchMedicament(value).subscribe(medications => {\n this.medications = medications;\n });\n } catch (err) {\n console.error(err);\n }\n this.loading = false;\n });\n }\n\n ngOnDestroy(): void {\n this.destroyed$.next(true);\n this.destroyed$.complete();\n }\n\n selectMedicament(option: any) {\n this.medicamentItems.push({ ...option, show: true });\n this.isNewItem = false;\n this.medications = [];\n this.medicationForm.reset();\n }\n\n deleteMedicament(event) {\n event.stopPropagation();\n const path = event.path.find(p => p.id && p.id.includes('item-'));\n if (path) {\n const element = document.getElementById(path.id);\n const elementIndex = element.id.replace('item-', '');\n this.medicamentItems.splice(+elementIndex, 1);\n }\n\n if (!this.medicamentItems.length) {\n this.isNewItem = true;\n }\n }\n\n deleteBox(medicamentoBusca: MedicamentoBusca, nome: string) {\n const index = medicamentoBusca.caixas.findIndex(caixa => caixa.nome === nome);\n medicamentoBusca.caixas.splice(index, 1);\n }\n\n addBox(medicamentoBusca: MedicamentoBusca) {\n const number = this.batchForm.get('number').value;\n if (number) {\n if (!medicamentoBusca.caixas) {\n medicamentoBusca.caixas = [];\n }\n\n medicamentoBusca.caixas.push({ nome: number });\n this.batchForm.get('number').reset();\n }\n }\n\n newItem() {\n this.isNewItem = true;\n this.medicamentItems.forEach(item => (item.show = false));\n }\n\n cancel() {\n this.reset();\n this.ref.close();\n }\n\n private reset() {\n this.batchForm.reset();\n this.medicationForm.reset();\n this.medicamentItems = [];\n this.isNewItem = true;\n }\n\n finish() {\n this.medicamentItems.forEach(item => (item.show = false));\n this.medicament.items = this.medicamentItems;\n this.medicamentItems = [];\n this.ref.close();\n }\n\n get invalidForm() {\n return (\n (!this.medicamentItems.length && !this.medicament.items) ||\n this.medicamentItems.reduce((acc, item) => acc || !item.caixas || !item.caixas.length, false)\n );\n }\n}\n","export default \"<div theme>\\n <button type=\\\"button\\\" class=\\\"close pull-right\\\" aria-label=\\\"Close\\\" (click)=\\\"cancel()\\\">\\n <span aria-hidden=\\\"true\\\">×</span>\\n </button>\\n <h1 class=\\\"titulo\\\">Dispensar Medicamento</h1>\\n\\n <div class=\\\"modal-body pt-3 pb-3\\\">\\n <p class=\\\"title1\\\">{{ medicament.name }}</p>\\n <!-- <p class=\\\"title2\\\">{{ medicament.dosage }}</p> -->\\n <p class=\\\"title3\\\">{{ medicament.dosage }}</p>\\n\\n <nz-collapse>\\n <nz-collapse-panel\\n *ngFor=\\\"let item of medicamentItems; let i = index\\\"\\n [nzHeader]=\\\"item.nome\\\"\\n [nzActive]=\\\"item.show\\\"\\n [nzExtra]=\\\"extraTpl\\\"\\n [id]=\\\"'item-' + i\\\"\\n >\\n <p class=\\\"title3 mb-1\\\">{{ item.nome }} - {{ item.apresentacaoCustomizada }}</p>\\n <p class=\\\"title4 mb-1\\\">{{ item.principio }}</p>\\n <p class=\\\"title3 mb-1\\\">{{ item.laboratorio }}</p>\\n <p class=\\\"title3 mt-2\\\">\\n Intercambialidade:\\n <nz-switch\\n [(ngModel)]=\\\"item.intercambialidade\\\"\\n nzCheckedChildren=\\\"Sim\\\"\\n nzUnCheckedChildren=\\\"Não\\\"\\n ></nz-switch>\\n </p>\\n <p class=\\\"title5\\\" *ngIf=\\\"item.caixas?.length\\\">\\n <span class=\\\"badge-caixa\\\">{{ item.caixas.length }}</span> Quantas unidades desse produto\\n </p>\\n\\n <div class=\\\"row m-0\\\">\\n <div class=\\\"col-12 m-0\\\" *ngFor=\\\"let caixa of item.caixas\\\">\\n <span class=\\\"title3\\\">\\n <label class=\\\"title6\\\">Número de lote caixa:</label> {{ caixa.nome }}\\n </span>\\n <a class=\\\"remove-icon\\\" (click)=\\\"deleteBox(item, caixa.nome)\\\">\\n <i class=\\\"fa fa-trash-solid\\\" style=\\\"font-size: 16px;\\\"></i>\\n </a>\\n <hr class=\\\"m-0\\\" />\\n </div>\\n\\n <div class=\\\"col-10 pl-0 mt-2\\\">\\n <form nz-form [formGroup]=\\\"batchForm\\\">\\n <nz-form-item class=\\\"m-0\\\">\\n <nz-form-control>\\n <input\\n nz-input\\n formControlName=\\\"number\\\"\\n placeholder=\\\"Digite aqui o número do lote da caixa\\\"\\n maxlength=\\\"20\\\"\\n />\\n </nz-form-control>\\n </nz-form-item>\\n </form>\\n </div>\\n\\n <div class=\\\"col-2 align-self-center pl-0 mt-2\\\">\\n <a class=\\\"add-icon\\\" (click)=\\\"addBox(item)\\\">\\n <i class=\\\"fa fa-plus\\\" style=\\\"font-size: 20px;\\\"></i>\\n </a>\\n </div>\\n </div>\\n </nz-collapse-panel>\\n </nz-collapse>\\n <ng-template #extraTpl>\\n <i nz-icon nzType=\\\"delete\\\" (click)=\\\"deleteMedicament($event)\\\"></i>\\n </ng-template>\\n\\n <div class=\\\"row mt-2 mb-2\\\" *ngIf=\\\"isNewItem\\\">\\n <div class=\\\"col-12\\\" [formGroup]=\\\"medicationForm\\\">\\n <nz-input-group [nzSuffix]=\\\"suffixEan\\\">\\n <input\\n nz-input\\n formControlName=\\\"ean\\\"\\n [nzAutocomplete]=\\\"autoMedication\\\"\\n placeholder=\\\"Digite aqui o nome do medicamento ou código de barras para buscar\\\"\\n maxlength=\\\"250\\\"\\n />\\n <nz-autocomplete #autoMedication nzBackfill>\\n <nz-auto-option\\n (click)=\\\"selectMedicament(option)\\\"\\n *ngFor=\\\"let option of medications\\\"\\n class=\\\"mao\\\"\\n >\\n <div>{{ option?.nome }}, </div>\\n <div>{{ option.apresentacaoCustomizada }}, </div>\\n <div></div>\\n <div>{{ option?.tipo }}</div>\\n </nz-auto-option>\\n </nz-autocomplete>\\n </nz-input-group>\\n <ng-template #suffixEan>\\n <i nz-icon nzType=\\\"loading\\\" *ngIf=\\\"loading\\\" class=\\\"pr-2\\\"></i>\\n <i nz-icon nzType=\\\"barcode\\\" nzTheme=\\\"outline\\\" style=\\\"font-size: 20px;\\\"></i>\\n </ng-template>\\n </div>\\n </div>\\n </div>\\n <div class=\\\"row\\\">\\n <div class=\\\"col-3 d-flex justify-content-start\\\">\\n <button\\n type=\\\"button\\\"\\n class=\\\"btn btn-icon btn-cancel btn-add text-capitalize btn-save\\\"\\n (click)=\\\"cancel()\\\"\\n >\\n <span class=\\\"btn-inner--text\\\">CANCELAR</span>\\n </button>\\n </div>\\n\\n <div class=\\\"col-4 d-flex justify-content-center\\\">\\n <button\\n *ngIf=\\\"!invalidForm\\\"\\n type=\\\"button\\\"\\n class=\\\"btn btn-icon btn-cancel btn-add text-capitalize btn-save\\\"\\n (click)=\\\"newItem()\\\"\\n >\\n <span class=\\\"btn-inner--text\\\">NOVO ITEM</span>\\n </button>\\n </div>\\n\\n <div class=\\\"col-5 d-flex justify-content-end\\\">\\n <button\\n type=\\\"button\\\"\\n class=\\\"btn btn-icon btn-add text-capitalize btn-save\\\"\\n [ngClass]=\\\"invalidForm ? 'btn-cancel' : 'btn-info'\\\"\\n (click)=\\\"finish()\\\"\\n [disabled]=\\\"invalidForm\\\"\\n >\\n <span class=\\\"btn-inner--text\\\">CONCLUIR MEDICAMENTO</span>\\n </button>\\n </div>\\n </div>\\n</div>\\n\";","export default \".modal-header {\\n background-color: #4cbca3;\\n font-family: \\\"probold\\\";\\n}\\n\\n.titulo {\\n text-align: center;\\n font-size: 35px;\\n font-family: \\\"probold\\\";\\n color: var(--color-title);\\n}\\n\\n.btn-cancel {\\n color: #fff;\\n background-color: #8c8c8c;\\n border-color: #8c8c8c;\\n box-shadow: 0 4px 6px rgba(50, 50, 93, 0.11), 0 1px 3px rgba(0, 0, 0, 0.08);\\n}\\n\\n.btn-save {\\n padding-top: 7px;\\n padding-bottom: 7px;\\n margin-top: 13px;\\n margin-bottom: 5px;\\n}\\n\\n.title1 {\\n font-size: 18px;\\n font-family: \\\"Source Sans Pro\\\", sans-serif;\\n font-weight: bold;\\n}\\n\\n.title2 {\\n font-size: 16px;\\n font-family: \\\"Source Sans Pro\\\", sans-serif;\\n opacity: 0.8;\\n}\\n\\n.title3 {\\n font-size: 14px;\\n font-family: \\\"Source Sans Pro\\\", sans-serif;\\n}\\n\\n.title4 {\\n font-size: 14px;\\n font-family: \\\"Source Sans Pro\\\", sans-serif;\\n opacity: 0.8;\\n}\\n\\n.title5 {\\n font-size: 14px;\\n font-family: \\\"Source Sans Pro\\\", sans-serif;\\n font-weight: bold;\\n}\\n\\n.title6 {\\n font-size: 12px;\\n font-family: \\\"Source Sans Pro\\\", sans-serif;\\n opacity: 0.8;\\n}\\n\\n.badge-caixa {\\n display: inline-block;\\n min-width: 10px;\\n padding: 4px 7px;\\n font-size: 12px;\\n font-weight: 700;\\n line-height: 1;\\n color: #fff;\\n text-align: center;\\n white-space: nowrap;\\n vertical-align: middle;\\n background-color: #0b6054;\\n border-radius: 10px;\\n margin-right: 5px;\\n}\\n\\n.btn {\\n font-size: 12px;\\n}\\n\\n.modal-body {\\n max-height: 600px;\\n overflow: auto;\\n}\\n\\np {\\n color: #363636;\\n font-size: 20px;\\n font-family: \\\"prolight\\\";\\n margin-bottom: 0.5rem;\\n}\\n\\n::ng-deep .modal-dispensation .ant-input-group > .ant-input:first-child,\\n::ng-deep .modal-dispensation .ant-input-group-addon:first-child {\\n border-radius: 10px;\\n}\\n\\n::ng-deep .modal-dispensation .ant-switch-checked {\\n background-color: var(--bg-color-secondary);\\n}\\n\\n::ng-deep .modal-dispensation .ant-input-affix-wrapper:hover .ant-input:not(.ant-input-disabled) {\\n border-color: var(--color-input-border-hover);\\n}\";","import { Injectable, Pipe, PipeTransform } from '@angular/core';\r\nimport { OnlyNumbersPipe } from '@app/shared/pipes/only-numbers.pipe';\r\n\r\n@Pipe({\r\n name: 'isTel'\r\n})\r\n@Injectable()\r\nexport class IsTelPipe implements PipeTransform {\r\n transform(value): boolean {\r\n if (!!value) {\r\n const onlyNumbers = new OnlyNumbersPipe();\r\n const tel = onlyNumbers.transform(value);\r\n const ddd = parseInt(tel.substring(0, 2), 10);\r\n const telWithoutDDD = tel.substring(2, tel.length);\r\n if (ddd <= 10 || ddd >= 100) {\r\n return false;\r\n }\r\n return !(\r\n (telWithoutDDD.length !== 8 && telWithoutDDD.length !== 9) ||\r\n (telWithoutDDD.length === 9 && [7, 8, 9].indexOf(parseInt(telWithoutDDD.charAt(0), 10)) === -1)\r\n );\r\n }\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\nimport { Buffer } from 'buffer';\n\nexport interface AppState {\n isRennova: boolean;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class StateService {\n removeAppState() {\n localStorage.removeItem('state');\n }\n\n set data(appState: AppState) {\n const stateHash = Buffer.from(JSON.stringify(appState)).toString('base64');\n localStorage.setItem('state', stateHash);\n }\n\n get data(): AppState {\n const stateHash = localStorage.getItem('state');\n if (!stateHash) {\n return;\n }\n const state = Buffer.from(stateHash, 'base64').toString('ascii');\n return JSON.parse(state) as AppState;\n }\n}\n","export default \"::ng-deep .ant-drawer-left.ant-drawer-open .ant-drawer-content-wrapper {\\n box-shadow: 0 9px 18px rgba(0, 0, 0, 0.18);\\n}\\n::ng-deep .ant-drawer.ant-drawer-open .ant-drawer-mask {\\n opacity: 0.11;\\n}\\n::ng-deep .ant-drawer-body {\\n padding-top: 0;\\n height: 75vh;\\n overflow: auto;\\n}\\n::ng-deep .ant-drawer-open {\\n top: 80px;\\n}\\n::ng-deep .menu-drawer {\\n top: 80px;\\n background-color: #007260;\\n border: 1px solid #007260;\\n}\\n::ng-deep .menu-drawer .ant-drawer-content {\\n background-color: transparent;\\n}\\n::ng-deep .inner-menu {\\n display: flex;\\n flex-direction: column;\\n}\\n::ng-deep .inner-menu .menu-icon {\\n align-self: flex-end;\\n margin: 20px 0;\\n}\\n::ng-deep .inner-menu .menu-icon .fa {\\n font-size: 20px;\\n color: white;\\n}\\n::ng-deep .inner-menu .menu li {\\n padding: 20px 0;\\n}\\n::ng-deep .inner-menu .menu a {\\n color: white;\\n font-family: \\\"problack\\\";\\n font-size: 18px;\\n text-transform: uppercase;\\n}\\n::ng-deep .inner-menu .menu a:focus {\\n text-decoration: none;\\n}\\n::ng-deep .inner-menu .menu a .fa {\\n margin-right: 10px;\\n}\\n::ng-deep .medicationAutoComplete {\\n margin-top: 17px;\\n}\\n.toolbar {\\n display: flex;\\n}\\n.toolbar .menu-toggler {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n padding: 0;\\n border-radius: 0;\\n width: 80px;\\n filter: drop-shadow(0px 3px 6px rgba(0, 0, 0, 0.16));\\n margin: 0;\\n}\\n.toolbar .menu-toggler .fa:before {\\n font-size: 22px;\\n}\\n.toolbar .menu-toggler,\\n.toolbar .toolbar-options {\\n height: 80px;\\n}\\n.toolbar .toolbar-menu {\\n flex: 1;\\n}\\n.toolbar .toolbar-menu .toolbar-options {\\n background-color: #f5f5f5;\\n display: flex;\\n align-items: center;\\n justify-content: flex-end;\\n padding-right: 40px;\\n padding-left: 60px;\\n}\\n.toolbar .toolbar-menu .toolbar-options .btn {\\n font-family: \\\"problack\\\", sans-serif;\\n}\\n.toolbar .toolbar-menu .toolbar-options .btn-green {\\n background-color: #87ebe1;\\n border-color: #87ebe1;\\n color: #1b403a;\\n}\\n.toolbar .toolbar-menu .toolbar-options .btn-default {\\n background-color: #afafaf;\\n border-color: #afafaf;\\n color: white;\\n}\\n.toolbar .toolbar-menu .toolbar-tags {\\n background-color: #ebebeb;\\n height: 40px;\\n border-radius: 0 0 10px 10px;\\n}\\n.prescription {\\n padding-top: 2rem;\\n padding-left: 9.6rem;\\n padding-right: 10rem;\\n height: calc(100vh - 8.125rem);\\n overflow-y: auto;\\n}\\n.prescription .doc-type {\\n margin-right: 25px;\\n}\\n.prescription .hospital-brand {\\n position: relative;\\n display: flex;\\n align-self: flex-end;\\n justify-content: center;\\n flex-direction: column;\\n align-items: center;\\n padding-top: 15px;\\n}\\n.prescription .hospital-brand nz-dropdown {\\n align-self: flex-end;\\n}\\n.prescription .hospital-brand .rectangles {\\n display: flex;\\n flex-wrap: wrap;\\n width: 48px;\\n}\\n.prescription .hospital-brand .rectangles .rectangle {\\n width: 24px;\\n height: 24px;\\n}\\n.prescription .hospital-brand .rectangles .rectangle.bg-light-alt {\\n background-color: #4d4d4d;\\n}\\n.prescription .hospital-brand .hospital-name {\\n font-family: \\\"probold\\\";\\n font-size: 23px;\\n color: #4d4d4d;\\n margin-top: 10px;\\n}\\n.prescription .hospital-brand .arrow-circle {\\n font-size: 24px;\\n color: #4d4d4d;\\n position: absolute;\\n right: 0;\\n top: 0;\\n}\\n.prescription form .input-name {\\n background-color: transparent;\\n border-color: transparent;\\n font-family: \\\"Times New Roman\\\", Times, serif, \\\"proregular\\\", \\\"Source Serif Pro\\\", \\\"sans-serif\\\";\\n color: #920505 !important;\\n font-size: 40px;\\n height: auto;\\n border-radius: 0;\\n border-bottom: 1px solid;\\n}\\n.prescription form .input-name::-moz-placeholder {\\n color: rgba(146, 5, 5, 0.306);\\n}\\n.prescription form .input-name::placeholder, .prescription form .input-name {\\n color: rgba(146, 5, 5, 0.306);\\n}\\n@media (max-width: 1025px) {\\n .prescription form .input-name {\\n font-size: 20px;\\n }\\n}\\n.prescription form .input-name:hover {\\n border-bottom: 1px dashed #4d4d4d;\\n}\\n.prescription form .input-name:focus {\\n border-bottom: 1px dashed #4d4d4d;\\n box-shadow: none;\\n}\\n.add-prescription {\\n padding: 20px 0;\\n border-top: 1px solid #f5f5f5;\\n min-height: 81px;\\n display: flex;\\n justify-content: center;\\n}\\n@media (max-width: 1025px) {\\n .add-prescription .btn-icon .btn-inner--text {\\n font-size: 13px;\\n word-break: break-word;\\n }\\n}\\n.add-prescription.adding-bg {\\n background-color: #f5f5f5;\\n border-top: 1px solid transparent;\\n}\\n.add-prescription .btn-add-name {\\n background-color: var(--bg-color-primary);\\n border: 1px solid var(--bg-color-primary);\\n color: var(--color-white);\\n padding: 0px 10px;\\n margin: 10px;\\n}\\n.add-prescription .btn-add-outiline {\\n display: flex;\\n padding: 0 0 0 8px;\\n height: 40px;\\n align-items: center;\\n border-radius: 10px;\\n overflow: hidden;\\n border: 0;\\n font-family: \\\"probold\\\", sans-serif;\\n background-color: var(--bg-color-secondary);\\n color: var(--color-white);\\n}\\n.add-prescription .btn-add-outiline .btn-inner--icon {\\n background-color: var(--bg-color-primary);\\n color: var(--color-white);\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n height: 40px;\\n width: 50px;\\n}\\n.add-patient {\\n border: 0;\\n padding-left: 20px;\\n padding-bottom: 0;\\n min-height: 75px;\\n}\\n.footer {\\n height: 50px;\\n padding: 0;\\n border: 0;\\n z-index: 1;\\n background-color: var(--bg-footer);\\n}\\n.footer .btn {\\n box-shadow: none;\\n border-radius: 0;\\n height: 100%;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n padding-top: 0.725rem;\\n background-color: var(--bg-color-btn-save);\\n color: var(--color-white);\\n}\\n@media (max-width: 1025px) {\\n .footer .btn {\\n font-size: 11px;\\n }\\n}\\n.footer .btn i {\\n margin-left: 10px;\\n}\\n.footer .btn i:before {\\n font-size: 16px;\\n}\\n.medicationNameInput {\\n background-color: transparent;\\n border-color: transparent;\\n height: 100%;\\n box-shadow: none;\\n}\\ntextarea {\\n resize: none;\\n background-color: transparent;\\n border: 0;\\n border-radius: 0;\\n box-shadow: none;\\n padding-left: 12px;\\n color: #4d4d4d;\\n font-size: 18px;\\n}\\ntextarea:hover, textarea:focus {\\n border-color: transparent;\\n box-shadow: none;\\n}\\n.free-prescription {\\n display: flex;\\n}\\n.free-prescription .break-line {\\n margin-left: 7px;\\n white-space: pre-wrap;\\n}\\n.toolbar {\\n display: flex;\\n}\\n.toolbar .menu-toggler {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n padding: 0;\\n border-radius: 0;\\n width: 80px;\\n filter: drop-shadow(0px 3px 6px rgba(0, 0, 0, 0.16));\\n margin: 0;\\n}\\n.toolbar .menu-toggler .fa:before {\\n font-size: 22px;\\n}\\n.toolbar .menu-toggler,\\n.toolbar .toolbar-options {\\n height: 80px;\\n}\\n.toolbar .toolbar-menu {\\n flex: 1;\\n}\\n.toolbar .toolbar-menu .toolbar-options {\\n background-color: #f5f5f5;\\n display: flex;\\n align-items: center;\\n justify-content: flex-end;\\n padding-right: 40px;\\n padding-left: 60px;\\n}\\n.toolbar .toolbar-menu .toolbar-options .btn {\\n font-family: \\\"problack\\\", sans-serif;\\n}\\n.toolbar .toolbar-menu .toolbar-options .btn-green {\\n background-color: #87ebe1;\\n border-color: #87ebe1;\\n color: #1b403a;\\n}\\n.toolbar .toolbar-menu .toolbar-options .btn-default {\\n background-color: #afafaf;\\n border-color: #afafaf;\\n color: white;\\n}\\n.toolbar .toolbar-menu .toolbar-tags {\\n background-color: #ebebeb;\\n height: 40px;\\n border-radius: 0 0 10px 10px;\\n}\\n@media (max-width: 1025px) {\\n section.section.container-fluid.prescription.d-flex.flex-column {\\n padding: 20px;\\n }\\n\\n .ant-form-item-children input {\\n font-size: 16px;\\n }\\n}\\n.label-name-patient {\\n font-size: 16pt;\\n}\\n@media (min-width: 940px) {\\n .label-name-patient {\\n font-size: 28pt;\\n }\\n}\\n.label-name-patient__icon {\\n font-size: 12pt;\\n cursor: pointer;\\n color: red;\\n}\\n@media (min-width: 940px) {\\n .label-name-patient__icon {\\n font-size: 18pt;\\n }\\n}\";","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { environment } from '@env/environment';\nimport { Observable, of } from 'rxjs';\nimport { map, tap } from 'rxjs/operators';\nimport { version } from '../../../../package.json';\n\n@Injectable({ providedIn: 'root' })\nexport class CoreService {\n private _backendVersion = '';\n\n readonly SMALL_LENGTH_VIEW_PORT = 474;\n readonly MEDIUM_LENGTH_VIEW_PORT = 768;\n\n constructor(private http: HttpClient) {}\n\n get isMrd() {\n return window.location.origin.toLowerCase().includes('meureceituario');\n }\n\n get frontendVersion(): string {\n return version;\n }\n\n getBackendVersion(): Observable<string> {\n if (this._backendVersion) {\n return of(this._backendVersion);\n }\n return this.http.get<any>(`${environment.apiRoot}info`).pipe(\n map(({ version: v }) => v),\n tap(v => (this._backendVersion = v))\n );\n }\n\n isViewPortMobile(): boolean {\n return window.innerWidth <= this.SMALL_LENGTH_VIEW_PORT;\n }\n\n isViewPortTablet(): boolean {\n return window.innerWidth <= this.MEDIUM_LENGTH_VIEW_PORT;\n }\n}\n","export enum CpfCnpjApiErrors {\r\n INVALID_TOKEN = 1000,\r\n INSUFFICIENT_CREDITS = 1001,\r\n SUSPENDED_ACCOUNT = 1002,\r\n BLACKLIST = 1003,\r\n PACKAGE_UNAVAILABLE = 1004,\r\n IS_NOT_POSSIBLE_TO_CONSULT = 1005,\r\n OFFLINE_SUPPLIER = 1006,\r\n CPF_INVALID = 100,\r\n CPF_WITH_11_DIGIT = 101,\r\n CPF_DOES_NOT_EXIST = 102,\r\n CNPJ_INVALID = 200,\r\n CNPJ_WITH_11_DIGIT = 201,\r\n CNPJ_DOES_NOT_EXIST = 202\r\n}\r\n","import { Address } from './address';\nimport { Comercial } from './comercial';\nimport { User } from './decodedLoginToken';\nimport { ProfessionalType } from './professional-type.enum';\nimport { Specialty } from './specialty';\n\nexport type statusServiceCFM = 'SERVICE_AVAILABLE' | 'SERVICE_UNAVAILABLE';\n\nexport type CfmData = {\n validate: {\n isValid: boolean;\n status: statusServiceCFM;\n };\n consult: {\n name?: string;\n uf?: string;\n specialties?: string[];\n updateDate?: string;\n inscription?: {\n code?: string;\n description?: string;\n };\n situation?: {\n code?: string;\n status?: string;\n description?: string;\n };\n isValid: boolean;\n status: statusServiceCFM;\n errorCode?: string;\n errorMessage?: string;\n error?: any;\n };\n pendenteValidacao?: boolean;\n};\n\nexport class HealthProfessional {\n _id: string;\n userId: string;\n user: User;\n professionalType: ProfessionalType;\n name: string;\n fullname: string;\n cpf: string;\n regionalCouncilNumber: {\n label: string;\n number: string;\n uf: string;\n };\n specialties: Specialty[];\n cellphone: string;\n telephone: string;\n otherPhones?: string[];\n otherEmails?: string[];\n personalAddress?: Address;\n dateOfBirth?: Date;\n sex?: string;\n commercialData?: Comercial[];\n pets?: any[];\n cfm?: CfmData | any;\n\n loading?: boolean;\n loadingRevalidate?: boolean;\n loadingTenant?: boolean;\n\n static getRegionalCouncilLabel(professionalType: string) {\n const RegionalCouncilLabels = {\n dentist: 'CRO',\n doctor: 'CRM',\n pharmacist: 'CRF',\n biomedic: 'CRBM1',\n veterinarian: 'CRMV'\n };\n return RegionalCouncilLabels[professionalType];\n }\n\n static getProfessionalTypeName(professionalType: string) {\n const RegionalCouncilLabels = {\n dentist: 'Dentista',\n doctor: 'Médico',\n pharmacist: 'Farmacêutico',\n biomedic: 'Biomédico',\n veterinarian: 'Veterinário'\n };\n return RegionalCouncilLabels[professionalType];\n }\n\n static getProfessionalTypeNameLabel(professionalType: string) {\n const RegionalCouncilLabels = {\n dentist: 'Dentista',\n doctor: 'Médico(a)',\n pharmacist: 'Farmacêutico',\n biomedic: 'Biomédico',\n veterinarian: 'Veterinário(a)'\n };\n return RegionalCouncilLabels[professionalType];\n }\n}\n","import { Injectable, Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'isCompleteName'\r\n})\r\n@Injectable()\r\nexport class IsCompleteNamePipe implements PipeTransform {\r\n transform(name: string): boolean {\r\n return !!/^[a-záà âãéèêÃïóôõöúçñ']+\\s[a-záà âãéèêÃïóôõöúçñ ']+$/gi.exec(name);\r\n }\r\n}\r\n","export enum ProfessionalType {\n DOCTOR = 'doctor',\n DENTIST = 'dentist',\n PHARMACIST = 'pharmacist',\n BIOMEDIC = 'biomedic',\n VETERINARIAN = 'veterinarian'\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { environment } from '@env/environment';\nimport { Attestation } from '@app/shared/models/attestation';\n\nexport const ATTESTATION = `attestation`;\nexport const ATTESTATION_PRESCRIBER = `attestation/prescriber`;\nexport const ATTESTATION_PATIENT_URL = `attestation/patient`;\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AttestationService {\n constructor(private http: HttpClient) {}\n\n public save(attestation): Observable<any> {\n if (attestation.code) {\n return this.http.put(`${environment.apiRoot}${ATTESTATION}/${attestation.code}`, attestation);\n }\n return this.http.post(`${environment.apiRoot}${ATTESTATION}`, attestation);\n }\n\n public getAllPrescriberAttestations(prescriberId: string): Observable<Attestation[]> {\n return this.http.get<Attestation[]>(`${environment.apiRoot}${ATTESTATION}`, {\n params: { prescriberId }\n });\n }\n\n public getAttestationsByPrescriberUserId(prescriberId: string, filter: any): Observable<any> {\n return this.http.get<any>(`${environment.apiRoot}${ATTESTATION_PRESCRIBER}/${prescriberId}`, {\n params: filter\n });\n }\n\n public getAllPatientsAttestations(patientId: string) {\n return this.http.get<Attestation[]>(`${environment.apiRoot}${ATTESTATION}`, {\n params: { patientId }\n });\n }\n\n getAttestationsByPatientId(patientId: string, filter: any): Observable<any> {\n return this.http.get<any>(`${environment.apiRoot}${ATTESTATION_PATIENT_URL}/${patientId}`, {\n params: filter\n });\n }\n\n getAttestation(code: string) {\n return this.http.get(`${environment.apiRoot}${ATTESTATION}/${code}`);\n }\n\n getByFilter(filter: any): Promise<Attestation[]> {\n return this.http\n .get<Attestation[]>(`${environment.apiRoot}${ATTESTATION}/filter`, {\n params: filter\n })\n .toPromise();\n }\n\n delete(attestationId: number): Observable<any> {\n return this.http.delete(`${environment.apiRoot}${ATTESTATION}/${attestationId}`);\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { CoreService } from '@app/core/services/core.service';\n\nimport { version } from '../../../../../package.json';\n\n@Component({\n selector: 'app-AppVersion',\n template: `\n <div style=\"padding: 10px;\">\n <p>\n Varsão do Backend: <strong>{{ versionBack }}</strong>\n </p>\n\n <p>\n Varsão do Frontend: <strong>{{ versionFront }}</strong>\n </p>\n </div>\n `\n})\nexport class AppVersionComponent implements OnInit {\n versionFront: string = version;\n versionBack: string;\n\n constructor(private coreService: CoreService) {}\n\n ngOnInit() {\n this.coreService.getBackendVersion().subscribe(version => {\n this.versionBack = version;\n });\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { PdfService } from '@app/modules/document/services/pdf.service';\nimport { PdfData } from '@app/shared/models/pdf-data';\nimport { Retention } from '@app/shared/models/retention';\nimport { environment } from '@env/environment';\nimport { Observable } from 'rxjs';\n\nconst RETENTION_URL = 'retention';\n\n@Injectable({ providedIn: 'root' })\nexport class RetentionService {\n constructor(private http: HttpClient, private pdfService: PdfService) {}\n\n public getRetentionByCode(dispensationCode: string): Observable<Retention> {\n return this.http.get<Retention>(`${environment.apiRoot}${RETENTION_URL}/find/${dispensationCode}`);\n }\n public getRetentions(): Observable<Retention[]> {\n return this.http.get<Retention[]>(`${environment.apiRoot}${RETENTION_URL}`);\n }\n\n getRetentionsByFilter(filter: any): Observable<Retention[]> {\n return this.http.get<Retention[]>(`${environment.apiRoot}${RETENTION_URL}/filter`, {\n params: filter\n });\n }\n\n getRetentionOfThirdPartiesHistory(userId: string) {\n return this.http.get<any[]>(`${environment.apiRoot}${RETENTION_URL}/third-parties/${userId}`);\n }\n\n getRetentionOfThirdPartiesHistoryByFilter(userId: string, filter: any) {\n return this.http.get<any>(`${environment.apiRoot}${RETENTION_URL}/third-parties/filter/${userId}`, {\n params: filter\n });\n }\n\n saveRetentionOfThirdParties(retention: any) {\n return this.http.post(`${environment.apiRoot}${RETENTION_URL}/third-parties`, retention).toPromise();\n }\n\n cancel(data, isRetentionsThirdParties: boolean): Observable<any> {\n const payload = { userId: data.userId, reason: data.reason };\n return this.http.put(\n `${environment.apiRoot}${RETENTION_URL}/third-parties/${data.retentionId}/cancel?retentionsThirdParties=${isRetentionsThirdParties}`,\n {\n payload\n }\n );\n }\n\n async downloadThirdPartyPdf(id: string) {\n const pdf = await this.http\n .get<PdfData>(`${environment.apiRoot}${RETENTION_URL}/third-parties/${id}/pdf`)\n .toPromise();\n this.pdfService.openPdf(pdf);\n }\n}\n","import { Component, Input, OnInit, TemplateRef, ViewChild } from '@angular/core';\r\nimport { NzModalRef, NzModalService } from 'ng-zorro-antd';\r\n\r\n@Component({\r\n selector: 'app-dialog-modal',\r\n templateUrl: './dialog-modal.component.html',\r\n styleUrls: ['./dialog-modal.component.scss']\r\n})\r\nexport class DialogModalComponent {\r\n tplModal: NzModalRef;\r\n exibirConteundoExterno = false;\r\n\r\n @Input() title?: string;\r\n @Input() subtitle?: string;\r\n @Input() subtitle2?: string;\r\n\r\n @ViewChild('tplContent', { static: true })\r\n tplContent: TemplateRef<{}>;\r\n\r\n @ViewChild('tplFooter', { static: true })\r\n tplFooter: TemplateRef<{}>;\r\n\r\n constructor(private modalService: NzModalService) {}\r\n\r\n createTplModal(title: string, subtitle: string, subtitle2?: string): void {\r\n this.title = title;\r\n this.subtitle = subtitle;\r\n this.subtitle2 = subtitle2;\r\n this.tplModal = this.modalService.create({\r\n nzContent: this.tplContent,\r\n nzFooter: this.tplFooter,\r\n nzClosable: false,\r\n nzWidth: 650,\r\n nzMaskClosable: false,\r\n nzOnCancel: () => {},\r\n nzOnOk: () => {}\r\n });\r\n }\r\n\r\n createTplModalContent(content: TemplateRef<{}>): void {\r\n this.tplModal = this.modalService.create({\r\n nzContent: content,\r\n nzFooter: this.tplFooter,\r\n nzClosable: false,\r\n nzWidth: 650,\r\n nzMaskClosable: false,\r\n nzOnCancel: () => {},\r\n nzOnOk: () => {}\r\n });\r\n }\r\n\r\n destroyTplModal(): void {\r\n this.tplModal.destroy();\r\n }\r\n}\r\n","export default \"<ng-template #tplContent let-params let-ref=\\\"tplModal\\\">\\r\\n <div class=\\\"container\\\">\\r\\n <h4 class=\\\"title text-modal\\\" theme>\\r\\n {{ title }}\\r\\n </h4>\\r\\n <p>{{ subtitle }}</p>\\r\\n <p *ngIf=\\\"subtitle2\\\">{{ subtitle2 }}</p>\\r\\n </div>\\r\\n</ng-template>\\r\\n<ng-template #tplFooter>\\r\\n <div class=\\\"container modal-footer d-flex align-items-end flex-column\\\" theme>\\r\\n <div class=\\\"row\\\">\\r\\n <button class=\\\"btn btn-ok\\\" (click)=\\\"destroyTplModal()\\\">\\r\\n Ok\\r\\n </button>\\r\\n </div>\\r\\n </div>\\r\\n</ng-template>\\r\\n\";","export default \".title {\\n text-transform: none;\\n font-size: 50px;\\n line-height: normal;\\n}\\n\\np {\\n color: #363636;\\n font-size: 20px;\\n font-family: \\\"prolight\\\";\\n}\\n\\n.text-modal {\\n color: var(--bg-color-primary) !important;\\n}\\n\\n.modal-footer {\\n padding: 10px 32px;\\n background-color: var(--bg-modal-header);\\n}\\n\\n.modal-footer .btn {\\n font-size: 12px;\\n}\\n\\n::ng-deep .ant-modal-body {\\n text-align: center;\\n padding-bottom: 0;\\n}\\n\\n::ng-deep .ant-modal-content {\\n border-radius: 10px;\\n box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16);\\n max-height: 460px;\\n}\\n\\n::ng-deep .ant-modal-footer {\\n border-radius: 0 0 10px 10px;\\n border-top: 0;\\n padding: 0 !important;\\n}\";","export enum Permission {\r\n BASIC = 'basic',\r\n MASTER = 'master',\r\n MANAGER = 'manager'\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { UserService } from '@app/modules/user/user.service';\r\nimport { NoConcurrent } from '@app/shared/decorators/no-concurrent';\r\nimport { User } from '@app/shared/models/decodedLoginToken';\r\nimport { LoginResponse } from '@app/shared/models/loginResponse';\r\nimport { JwtHelperService } from '@auth0/angular-jwt';\r\nimport { environment } from '@env/environment';\r\nimport { LocalStorage } from '@ngx-pwa/local-storage';\r\nimport JwtDecode from 'jwt-decode';\r\nimport { of } from 'rxjs/internal/observable/of';\r\nimport { mergeMap, tap } from 'rxjs/operators';\r\n\r\nexport const USER_URL = 'user';\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AuthService {\r\n constructor(\r\n private http: HttpClient,\r\n private _localStorage: LocalStorage,\r\n private userService: UserService,\r\n private jwtHelperService: JwtHelperService\r\n ) {}\r\n\r\n get token(): string {\r\n return localStorage.getItem('token');\r\n }\r\n\r\n get isLoggedIn(): boolean {\r\n return this.token && !this.jwtHelperService.isTokenExpired(this.token);\r\n }\r\n\r\n get isLoggedOut(): boolean {\r\n return !this.isLoggedIn;\r\n }\r\n\r\n get hasAccessNewModulePrescription() {\r\n return this.user() && this.user().features.some(f => f.name === 'Novo Modulo Prescrição');\r\n }\r\n\r\n user(): User {\r\n return this.token && this.decodeToken(this.token);\r\n }\r\n\r\n @NoConcurrent()\r\n login({ email, password }: { email: string; password: string }) {\r\n return this.http.post(`${environment.apiRoot}${USER_URL}/login`, { email, password }).pipe(\r\n tap((res: LoginResponse) => {\r\n this.setSession(res.token);\r\n this.userService.clearAvatar();\r\n })\r\n );\r\n }\r\n\r\n refreshToken() {\r\n return this.http.get(`${environment.apiRoot}${USER_URL}/refresh`).pipe(\r\n tap((res: LoginResponse) => this.setSession(res.token)),\r\n mergeMap(_ => of(this.user()))\r\n );\r\n }\r\n\r\n logout() {\r\n this._localStorage.removeItem('id_token').subscribe();\r\n this._localStorage.removeItem('expire_at').subscribe();\r\n localStorage.removeItem('extra_data');\r\n localStorage.removeItem('userId');\r\n localStorage.removeItem('userType');\r\n localStorage.removeItem('fullUserId');\r\n localStorage.removeItem('token');\r\n localStorage.removeItem('hideWomensModal');\r\n this.userService.clearAvatar();\r\n }\r\n\r\n decodeToken(token: string): any {\r\n return JwtDecode(token);\r\n }\r\n\r\n private setSession(token: string) {\r\n localStorage.setItem('token', token);\r\n this._localStorage.setItem('id_token', token).subscribe();\r\n }\r\n}\r\n","import { Observable, of } from 'rxjs';\r\nimport { catchError } from 'rxjs/operators';\r\n\r\nexport function NoConcurrent() {\r\n return (target, propertyKey: string, descriptor: PropertyDescriptor) => {\r\n // save a reference to the original method this way we keep the values currently in the\r\n // descriptor and don't overwrite what another decorator might have done to the descriptor.\r\n if (descriptor === undefined) {\r\n descriptor = Object.getOwnPropertyDescriptor(target, propertyKey);\r\n }\r\n const originalMethod: any = descriptor.value;\r\n\r\n // editing the descriptor/value parameter\r\n descriptor.value = function() {\r\n const prop: any = target[propertyKey];\r\n const args: any = arguments;\r\n\r\n if (prop.$$noConcurrent) {\r\n return prop.$$noConcurrent;\r\n }\r\n\r\n return new Observable(subscriber => {\r\n const obs: Observable<any> = originalMethod.apply(this, args);\r\n prop.$$noConcurrent = obs;\r\n obs\r\n .pipe(\r\n catchError((err: Response | any) => {\r\n // console.log('no concurrent: received error');\r\n delete prop.$$noConcurrent;\r\n subscriber.error(err);\r\n subscriber.complete();\r\n return of();\r\n })\r\n )\r\n .subscribe(res => {\r\n delete prop.$$noConcurrent;\r\n subscriber.next(res);\r\n subscriber.complete();\r\n });\r\n });\r\n };\r\n\r\n // return edited descriptor as opposed to overwriting the descriptor\r\n return descriptor;\r\n };\r\n}\r\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormBuilder, Validators } from '@angular/forms';\nimport { ValidationService } from '@app/core/services/validation.service';\nimport { CepService } from '@app/modules/entry/services/cep.service';\nimport { BrazilianStates } from '@app/shared/data/Brazilian-states';\nimport { Furs } from '@app/shared/data/Fur';\nimport { BrazilState, Fur, Patient } from '@app/shared/models';\nimport { PetPatient } from '@app/shared/models/pet-patient';\nimport { Race } from '@app/shared/models/races';\nimport { Species } from '@app/shared/models/species';\nimport { markFormGroup } from '@app/utils/markFormGroup';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { PetPatientService } from '../../services/pet-patient.service';\nimport { DateUtils } from './../../../../shared/data/DateUtils';\nimport { nativeAsync } from '@app/shared/decorators/nativeAsync';\n\n@Component({\n selector: 'app-modal-edit-pet',\n templateUrl: './modal-edit-pet.component.html',\n styleUrls: ['./modal-edit-pet.component.scss']\n})\nexport class ModalEditPetComponent implements OnInit {\n @Input() pet: PetPatient;\n @Input() isVeterinarian = false;\n @Input() isConfirmation: boolean;\n @Input() displayAlert = true;\n @Output() submit = new EventEmitter<Patient>();\n @Output() onClose = new EventEmitter<Patient>();\n\n states: BrazilState[] = BrazilianStates;\n loading = false;\n species: Species[];\n races: Race[];\n furs: Fur[] = Furs;\n\n labelAge = 'Idade';\n\n form = this.fb.group({\n _id: [null],\n name: ['', Validators.required],\n species: ['', Validators.required],\n sex: ['', Validators.required],\n race: ['', Validators.required],\n isApproximateAge: [],\n approximateAgeLabel: [\n {\n value: '',\n disabled: true\n }\n ],\n dateOfBirth: ['', Validators.required],\n weight: [null],\n fur: [''],\n castration: [false, Validators.required],\n temperament: [''],\n microchipNumber: [''],\n responsible: this.fb.group({\n _id: [''],\n cpf: ['', [Validators.required, ValidationService.cpfValidator]],\n fullname: ['', Validators.required],\n name: ['', Validators.required],\n sex: ['', Validators.required],\n dateOfBirth: ['', Validators.required],\n membership: this.fb.group({\n mothersName: ['']\n }),\n cellphone: [''],\n telephone: [''],\n email: ['', Validators.email],\n emailContact: ['', Validators.email],\n address: this.fb.group({\n uf: [''],\n city: [''],\n complement: [''],\n number: [''],\n street: [''],\n neighborhood: [''],\n cep: ['']\n }),\n pendency: [null]\n }),\n doNotShowAgainPetDataConfirmationModal: [false]\n });\n\n constructor(\n private modalRef: BsModalRef,\n private fb: FormBuilder,\n private cepService: CepService,\n private petPatientService: PetPatientService\n ) {}\n\n @nativeAsync\n async ngOnInit() {\n this.species = await this.petPatientService.getSpecies().toPromise();\n this.patchForm();\n\n this.checkApproximateAge(this.pet.isApproximateAge);\n\n this.form.get('dateOfBirth').valueChanges.subscribe(dateOfBirth => {\n if (dateOfBirth) {\n const diffBetweenDate = DateUtils.diffBetweenDate(new Date(), dateOfBirth);\n\n this.form.get('approximateAgeLabel').setValue(diffBetweenDate.result);\n }\n });\n\n if (!this.isVeterinarian) {\n this.form.get('weight').disable();\n this.form.get('fur').disable();\n this.form.get('castration').disable();\n this.form.get('temperament').disable();\n this.form.get('microchipNumber').disable();\n }\n }\n\n @nativeAsync\n private async patchForm() {\n this.form.patchValue(this.pet);\n\n if (this.pet.species) {\n const speciesId = this.getSpeciesId(this.pet.species);\n this.races = await this.petPatientService.getRaces(speciesId).toPromise();\n }\n\n const date = new Date(this.pet.dateOfBirth);\n this.form.get('dateOfBirth').setValue(date.toISOString().substring(0, 10));\n\n this.form.get('responsible').patchValue(this.pet.responsible);\n }\n\n get cpfCtrl() {\n return this.form.get('cpf');\n }\n\n get dateCtrl() {\n return this.form.get('dateOfBirth');\n }\n\n get currentDate() {\n const now = new Date();\n const dd = String(now.getDate()).padStart(2, '0');\n const mm = String(now.getMonth() + 1).padStart(2, '0');\n const yyyy = now.getFullYear();\n return `${yyyy}-${mm}-${dd}`;\n }\n\n get isDependent() {\n return this.pet.responsible;\n }\n\n checkRepeatName(value: boolean) {\n if (value) {\n this.form.get('name').setValue(this.form.get('fullname').value);\n this.form.get('name').disable();\n } else {\n this.form.get('name').enable();\n }\n }\n\n @nativeAsync\n async onKey(event: any) {\n if (event.target.value.length === 10) {\n const cep = event.target.value.replace(/[^\\d]+/g, '');\n const data = await this.cepService.consult(cep);\n if (!data.erro) {\n this.form.controls['address'].patchValue({\n uf: data.uf,\n street: data.logradouro,\n neighborhood: data.bairro,\n city: data.localidade,\n number: null,\n cep: data.cep\n });\n }\n }\n }\n\n submitForm() {\n markFormGroup(this.form);\n const form = this.form.getRawValue();\n\n if (this.form.valid) {\n this.modalRef.hide();\n this.submit.emit(form);\n }\n }\n\n close() {\n this.modalRef.hide();\n this.onClose.emit();\n }\n\n private getSpeciesId(title: string) {\n const species = this.species.find(s => s.title === title);\n return species._id;\n }\n @nativeAsync\n async setSpecies(title: any) {\n const speciesId = this.getSpeciesId(title);\n await this.getRaces(speciesId);\n }\n @nativeAsync\n async getRaces(speciesId: string) {\n this.form.get('race').setValue('');\n this.races = await this.petPatientService.getRaces(speciesId).toPromise();\n }\n\n checkApproximateAge(value: boolean) {\n if (value) {\n this.labelAge = 'Idade Aproximada';\n } else {\n this.labelAge = 'Idade';\n }\n }\n}\n","export default \"<div class=\\\"modal-header\\\" theme>\\n <h4 class=\\\"modal-title pull-left text-white\\\">\\n <span *ngIf=\\\"isVeterinarian\\\">\\n {{ isConfirmation ? 'Dados do Paciente' : 'Editar paciente' }}\\n </span>\\n <span *ngIf=\\\"!isVeterinarian\\\">Editar Pet</span>\\n </h4>\\n <button type=\\\"button\\\" class=\\\"close pull-right\\\" aria-label=\\\"Close\\\" (click)=\\\"close()\\\">\\n <span aria-hidden=\\\"true\\\">×</span>\\n </button>\\n</div>\\n\\n<div class=\\\"modal-body\\\" theme>\\n <nz-alert\\n class=\\\"mb-4\\\"\\n nzType=\\\"warning\\\"\\n nzMessage=\\\"Confirme ou atualize os dados do pet.\\\"\\n *ngIf=\\\"displayAlert\\\"\\n ></nz-alert>\\n <form nz-form [formGroup]=\\\"form\\\">\\n <div class=\\\"row justify-content-between\\\">\\n <div [ngClass]=\\\"isDependent ? 'col-md-12' : 'col-md-6'\\\">\\n <div class=\\\"row align-items-center\\\">\\n <div class=\\\"col-md\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"species\\\">Espécie<span class=\\\"mandatory\\\"> *</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <select\\n id=\\\"species\\\"\\n nz-input\\n formControlName=\\\"species\\\"\\n class=\\\"capitalize\\\"\\n (change)=\\\"setSpecies($event.target.value)\\\"\\n >\\n <option value=\\\"\\\" selected>Selecionar</option>\\n <option *ngFor=\\\"let spec of species\\\" [value]=\\\"spec.title\\\">{{ spec.title }}</option>\\n </select>\\n <nz-form-explain *ngIf=\\\"form.get('species').dirty && form.get('species').errors\\\">\\n <ng-container *ngIf=\\\"form.get('species').hasError('required')\\\">\\n Campo obrigatório, por favor selecione a espécie.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n\\n <div class=\\\"col-md\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"race\\\">Raça <span class=\\\"mandatory\\\"> *</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <select\\n nz-input\\n id=\\\"race\\\"\\n formControlName=\\\"race\\\"\\n class=\\\"capitalize\\\"\\n *ngIf=\\\"races?.length > 0; else raceInput\\\"\\n >\\n <option value=\\\"\\\" selected>Selecionar</option>\\n <option *ngFor=\\\"let race of races\\\" [value]=\\\"race.title\\\">{{ race.title }}</option>\\n </select>\\n <ng-template #raceInput>\\n <input nz-input id=\\\"race\\\" formControlName=\\\"race\\\" autocomplete=\\\"disabled\\\" />\\n </ng-template>\\n <nz-form-explain *ngIf=\\\"form.get('race').dirty && form.get('race').errors\\\">\\n <ng-container *ngIf=\\\"form.get('race').hasError('required')\\\">\\n Campo obrigatório, por favor selecione a raça.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n </div>\\n </div>\\n </div>\\n\\n <div class=\\\"row justify-content-between\\\">\\n <div class=\\\"col-12\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"nome\\\">Nome do Pet<span class=\\\"mandatory\\\"> *</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n placeholder=\\\"ex: Rex\\\"\\n formControlName=\\\"name\\\"\\n id=\\\"nome\\\"\\n maxlength=\\\"128\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n <nz-form-explain *ngIf=\\\"form.get('name').dirty && form.get('name').errors\\\">\\n <ng-container *ngIf=\\\"form.get('name').hasError('required')\\\">\\n Campo obrigatório, por favor digite o nome e sobrenome.\\n </ng-container>\\n <ng-container\\n *ngIf=\\\"!form.get('name').hasError('required') && form.get('name').hasError('nome')\\\"\\n >\\n Por favor digite o nome e sobrenome.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n </div>\\n\\n <div class=\\\"row\\\">\\n <div class=\\\"col-md\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"weight\\\">Peso (kg)</nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n type=\\\"number\\\"\\n formControlName=\\\"weight\\\"\\n placeholder=\\\"0.0\\\"\\n id=\\\"weight\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n\\n <nz-form-explain *ngIf=\\\"form.get('weight').dirty && form.get('weight').errors\\\">\\n <ng-container *ngIf=\\\"form.get('weight').hasError('required')\\\">\\n Campo obrigatório, por favor digite data de nascimento.\\n </ng-container>\\n <ng-container\\n *ngIf=\\\"!form.get('weight').hasError('required') && form.get('weight').hasError('weight')\\\"\\n >\\n Nome inválido.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n\\n <div class=\\\"col-md\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"sex\\\">Sexo <span class=\\\"mandatory\\\">*</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <select formControlName=\\\"sex\\\" id=\\\"sex\\\" nz-input nzPlaceHolder=\\\"Selecione\\\">\\n <option value=\\\"M\\\">Macho</option>\\n <option value=\\\"F\\\">Fêmea</option>\\n </select>\\n <nz-form-explain *ngIf=\\\"form.get('sex').dirty && form.get('sex').errors\\\">\\n <ng-container *ngIf=\\\"form.get('sex').hasError('required')\\\">\\n Campo obrigatório, por favor selecione o sexo.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n </div>\\n\\n <div class=\\\"row\\\">\\n <div class=\\\"col-md\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"dateOfBirth\\\"\\n >Data de nascimento <span class=\\\"mandatory\\\"> *</span></nz-form-label\\n >\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n type=\\\"date\\\"\\n formControlName=\\\"dateOfBirth\\\"\\n placeholder=\\\"DD/MM/AAAA\\\"\\n id=\\\"dateOfBirth\\\"\\n [max]=\\\"currentDate\\\"\\n />\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n\\n <div class=\\\"col-md\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"approximateAge\\\">{{ labelAge }}</nz-form-label>\\n <nz-form-control>\\n <input nz-input id=\\\"approximateAge\\\" formControlName=\\\"approximateAgeLabel\\\" />\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n </div>\\n\\n <div class=\\\"row\\\">\\n <div class=\\\"col-md\\\">\\n <label\\n nz-checkbox\\n formControlName=\\\"isApproximateAge\\\"\\n style=\\\"font-size: 16px; margin-bottom: 8px;\\\"\\n (nzCheckedChange)=\\\"checkApproximateAge($event)\\\"\\n >Idade aproximada</label\\n >\\n </div>\\n </div>\\n\\n <div class=\\\"row mt-2 mb-2\\\" *ngIf=\\\"!isVeterinarian\\\">\\n <div class=\\\"col-md\\\">\\n <nz-form-label nzFor=\\\"weight\\\">Informação de preenchimento pelo profissional</nz-form-label>\\n </div>\\n </div>\\n\\n <div class=\\\"row\\\">\\n <div class=\\\"col-md\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"fur\\\">Pelagem</nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <select\\n [disabled]=\\\"!isVeterinarian\\\"\\n formControlName=\\\"fur\\\"\\n id=\\\"fur\\\"\\n nz-input\\n nzPlaceHolder=\\\"Selecione\\\"\\n >\\n <option *ngFor=\\\"let fur of furs\\\" [value]=\\\"fur.title\\\" class=\\\"capitalize\\\">{{\\n fur.title | capitalize\\n }}</option>\\n </select>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n\\n <div class=\\\"col-md\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"castration\\\">Castração</nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <select\\n [disabled]=\\\"!isVeterinarian\\\"\\n formControlName=\\\"castration\\\"\\n id=\\\"castration\\\"\\n nz-input\\n nzPlaceHolder=\\\"Selecione\\\"\\n >\\n <option [ngValue]=\\\"true\\\">Sim</option>\\n <option [ngValue]=\\\"false\\\">Não</option>\\n </select>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n </div>\\n\\n <div class=\\\"row\\\">\\n <div class=\\\"col\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"temperament\\\">Temperamento</nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <select formControlName=\\\"temperament\\\" id=\\\"temperament\\\" nz-input nzPlaceHolder=\\\"Selecione\\\">\\n <option value=\\\"aggressive\\\">Agressivo</option>\\n <option value=\\\"fearful\\\">Medroso</option>\\n <option value=\\\"dominant\\\">Dominante</option>\\n <option value=\\\"hyperactive\\\">Hiperativo</option>\\n <option value=\\\"alert\\\">Alerta</option>\\n <option value=\\\"docile\\\">Dócil</option>\\n </select>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n <div class=\\\"col\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"microchipNumber\\\">Nº do Microchip</nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n formControlName=\\\"microchipNumber\\\"\\n id=\\\"microchipNumber\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n </div>\\n </form>\\n</div>\\n\\n<div class=\\\"modal-footer\\\" theme [formGroup]=\\\"form\\\">\\n <label\\n nz-checkbox\\n formControlName=\\\"doNotShowAgainPetDataConfirmationModal\\\"\\n style=\\\"font-size: 14px;\\\"\\n *ngIf=\\\"isVeterinarian\\\"\\n >Não mostrar novamente</label\\n >\\n <div></div>\\n\\n <div class=\\\"footer-btns\\\">\\n <button class=\\\"ok-btn\\\" nz-button class=\\\"btn-secondary\\\" (click)=\\\"close()\\\">\\n {{ isConfirmation ? 'Fechar' : 'Cancelar' }}\\n </button>\\n <button class=\\\"ok-btn\\\" nz-button class=\\\"btn-primary\\\" (click)=\\\"submitForm()\\\">\\n Salvar <i class=\\\"fa\\\"></i>\\n </button>\\n </div>\\n</div>\\n<ngx-loading [show]=\\\"loading\\\" [config]=\\\"{ backdropBorderRadius: '3px' }\\\"></ngx-loading>\\n\";","export default \"::ng-deep .modal-content {\\n align-items: normal;\\n}\\n::ng-deep .modal-content .modal-footer {\\n display: flex;\\n justify-content: space-between;\\n}\\n::ng-deep .modal-content .modal-footer .footer-btns {\\n width: 40%;\\n display: flex;\\n justify-content: space-between;\\n}\";","import { Component } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { PrescriptionService } from '@app/modules/document/services/prescription.service';\nimport * as moment from 'moment';\n\n@Component({\n selector: 'app-consult',\n templateUrl: './consult.component.html',\n styleUrls: ['./consult.component.scss']\n})\nexport class ConsultComponent {\n prescription: any;\n showDispensations = true;\n private _allChecked = false;\n\n constructor(private router: Router, private prescriptionService: PrescriptionService) {\n this.prescription = this.prescriptionService.prescription;\n }\n\n get patient() {\n return this.prescription.patient;\n }\n\n get healthProfessional() {\n return this.prescription.healthProfessional;\n }\n\n get medicaments() {\n return this.prescription.medicaments;\n }\n\n get allChecked() {\n return this.medicaments.every(m => m.checked);\n }\n\n set allChecked(val: boolean) {\n this._allChecked = val;\n }\n\n get someChecked() {\n return this.medicaments.some(m => m.checked);\n }\n\n get indeterminate() {\n const medicamentsChecked = this.medicaments.reduce((acc, m) => acc + !!m.checked, 0);\n return medicamentsChecked > 0 && medicamentsChecked < this.medicaments.length;\n }\n\n updateAllChecked(): void {\n this.medicaments.forEach(m => (m.checked = this._allChecked));\n }\n\n getPatientAge() {\n return this.getAge(this.patient.dateOfBirth);\n }\n\n getAge(dateStr: string) {\n const now = moment(new Date());\n const date = moment(dateStr);\n return date.isValid() ? now.diff(date, 'years') : '';\n }\n\n getSpecialties(specialties: any[]) {\n return specialties.map(s => s.title).join(', ');\n }\n\n get hasDispensation(): boolean {\n return this.medicaments.find(m => m.dispensations && m.dispensations.length);\n }\n\n register(): void {\n this.router.navigate([`/dispensation/register`]);\n }\n}\n","export default \"<app-alternative-navbar titleIcon=\\\"fas fa-history\\\"></app-alternative-navbar>\\n<app-sidebar-menu></app-sidebar-menu>\\n\\n<div class=\\\"container my-4\\\" theme>\\n <div class=\\\"container-fluid patient-card p-3\\\">\\n <h3>PACIENTE: {{ patient.name }}</h3>\\n <h3>CPF: {{ patient.cpf | mask: '000.000.000-00' }}</h3>\\n <h4 *ngIf=\\\"patient.address as address\\\">\\n Endereço: {{ address.street }}, {{ address.number }} - {{ address.neighborhood }},\\n {{ address.city }}, {{ address.uf }} -\\n {{ address.cep | mask: '00.000-000' }}\\n </h4>\\n <h4 *ngIf=\\\"getPatientAge()\\\">Idade: {{ getPatientAge() }} anos</h4>\\n </div>\\n\\n <div class=\\\"container-fluid professional-card p-3\\\">\\n <h3 class=\\\"label-medico\\\">MÉDICO: {{ healthProfessional.name }}</h3>\\n <h4 class=\\\"label-medico\\\" *ngIf=\\\"healthProfessional.regionalCouncilNumber as rcn\\\">\\n {{ rcn.label }}: {{ rcn.number }}/{{ rcn.uf }}\\n </h4>\\n </div>\\n\\n <div class=\\\"container-fluid medicaments-card p-3\\\">\\n <ng-container *ngIf=\\\"hasDispensation\\\">\\n <p id=\\\"alert\\\">Atenção! Existem vendas registradas para esta receita!</p>\\n <p>\\n <button *ngIf=\\\"showDispensations\\\" class=\\\"btn btn-icon p-2\\\" (click)=\\\"showDispensations = false\\\">\\n <em class=\\\"fa fa-eye\\\"></em> Ocultar Dispensações \\n </button>\\n <button\\n *ngIf=\\\"!showDispensations\\\"\\n class=\\\"btn btn-icon btn-show-dispensations p-2\\\"\\n (click)=\\\"showDispensations = true\\\"\\n >\\n <em class=\\\"fa fa-eye-slash\\\"></em> Mostrar Dispensações \\n </button>\\n </p>\\n </ng-container>\\n\\n <p id=\\\"instructions\\\">\\n Selecione abaixo os medicamentos que deseja dispensar para começar.\\n </p>\\n\\n <div class=\\\"checkbox-group m-2\\\">\\n <label\\n nz-checkbox\\n id=\\\"select-all\\\"\\n [(ngModel)]=\\\"allChecked\\\"\\n (nzCheckedChange)=\\\"updateAllChecked()\\\"\\n [nzIndeterminate]=\\\"indeterminate\\\"\\n >SELECIONAR TODOS</label\\n >\\n <div class=\\\"checkbox-item\\\" *ngFor=\\\"let medicament of medicaments\\\">\\n <label nz-checkbox class=\\\"medicament-name\\\" [(ngModel)]=\\\"medicament.checked\\\">{{\\n medicament.name\\n }}</label>\\n <p class=\\\"pl-4\\\">{{ medicament.dosage }}</p>\\n\\n <ng-container *ngIf=\\\"showDispensations && medicament.dispensations\\\">\\n <div class=\\\"dispensation pl-5\\\" *ngFor=\\\"let dispensation of medicament.dispensations\\\">\\n <em class=\\\"fas fa-calendar-alt\\\"\\n > {{ dispensation.lastUpdated | date: 'dd/MM/yyyy HH:mm' }}</em\\n >\\n <p>{{ dispensation.name }}</p>\\n <p class=\\\"mb-4\\\">Lote: {{ dispensation.batch.lotNumber }}</p>\\n </div>\\n </ng-container>\\n </div>\\n </div>\\n </div>\\n\\n <div class=\\\"footer bg-dark d-flex align-items-center fixed-bottom justify-content-end\\\">\\n <button type=\\\"button\\\" class=\\\"btn btn-success\\\" (click)=\\\"register()\\\" [disabled]=\\\"!someChecked\\\">\\n CONTINUAR PARA DISPENSAÇÃO\\n <em class=\\\"fa fa-arrow-right\\\"></em>\\n </button>\\n </div>\\n</div>\\n\";","export default \"h3 {\\n margin: 0;\\n font-size: 18px;\\n color: var(--color-white);\\n font-weight: bold;\\n}\\n\\nh4 {\\n margin: 0;\\n font-size: 16px;\\n color: var(--color-white);\\n}\\n\\n.patient-card {\\n background-color: var(--bg-color-secondary);\\n}\\n\\np {\\n color: var(--color-card-pacientes);\\n font-family: \\\"proregular\\\";\\n}\\n\\n.professional-card {\\n background-color: #1c413a;\\n margin-top: -8px !important;\\n}\\n\\n.medicaments-card {\\n background-color: var(--bg-color-cinza-claro);\\n}\\n\\n.medicaments-card #alert {\\n text-align: center;\\n color: red;\\n}\\n\\n.medicaments-card #select-all {\\n color: var(--bg-color-primary);\\n}\\n\\n.medicaments-card p {\\n text-align: center;\\n}\\n\\n.medicaments-card .button {\\n text-align: center;\\n}\\n\\n.medicaments-card .btn-icon {\\n border-radius: 10px;\\n border: 0;\\n font-family: \\\"probold\\\", sans-serif;\\n background-color: var(--bg-color-primary);\\n color: var(--color-white);\\n}\\n\\n.medicaments-card .btn-show-dispensations {\\n background-color: var(--bg-color-secondary);\\n}\\n\\n.medicaments-card label {\\n display: block;\\n font-family: \\\"probold\\\", sans-serif;\\n font-size: 16px;\\n margin-top: 20px;\\n}\\n\\n.medicaments-card .checkbox-item p {\\n text-align: unset;\\n}\\n\\n.medicaments-card .checkbox-item .medicament-name {\\n font-size: 18px;\\n font-family: \\\"probold\\\", sans-serif;\\n}\\n\\n.medicaments-card .checkbox-item .dispensation i {\\n color: black;\\n opacity: 0.8;\\n font-style: normal;\\n}\\n\\n.medicaments-card .checkbox-item .dispensation p {\\n margin: 0;\\n}\\n\\n.medicaments-card .title2 {\\n font-size: 16px;\\n font-family: \\\"proregular\\\", sans-serif;\\n opacity: 0.8;\\n}\\n\\n.medicaments-card .title3 {\\n font-size: 14px;\\n font-family: \\\"proregular\\\", sans-serif;\\n}\";","import { PrescriptionService } from '@app/modules/document/services/prescription.service';\nimport { Injectable } from '@angular/core';\nimport { CanActivate, Router } from '@angular/router';\n\n@Injectable()\nexport class DispensationGuard implements CanActivate {\n constructor(private router: Router, private prescriptionService: PrescriptionService) {}\n\n canActivate(): boolean {\n if (!this.prescriptionService.prescription) {\n this.prescriptionService.pdfBase64 = null;\n this.router.navigate(['']);\n return false;\n }\n\n return true;\n }\n}\n","export default \"<app-alternative-navbar titleIcon=\\\"fas fa-history\\\"></app-alternative-navbar>\\n<app-sidebar-menu></app-sidebar-menu>\\n\\n<div class=\\\"container my-4\\\" theme>\\n <div class=\\\"container-fluid patient p-3\\\" *ngIf=\\\"patient?.name\\\" >\\n <label>PACIENTE: {{ patient.name }}</label>\\n </div>\\n <div class=\\\"container-fluid professional p-3\\\" *ngIf=\\\"healthProfessional?.name\\\" >\\n <label>MÉDICO: {{ healthProfessional.name }}</label>\\n </div>\\n\\n <nz-collapse [nzBordered]=\\\"false\\\" *ngIf=\\\"notSelectedMedicaments.length\\\" >\\n <nz-collapse-panel\\n nzHeader=\\\"Medicamentos não selecionados\\\"\\n class=\\\"not-selected-medicaments\\\"\\n [ngClass]=\\\"{ 'pb-3': selectedCount(notSelectedMedicaments) }\\\"\\n >\\n <div class=\\\"checkbox-item\\\" *ngFor=\\\"let medicament of notSelectedMedicaments\\\">\\n <label nz-checkbox class=\\\"medicament-name\\\" [(ngModel)]=\\\"medicament.include\\\">{{\\n medicament.name\\n }}</label>\\n <p class=\\\"pl-4\\\">{{ medicament.dosage }}</p>\\n </div>\\n\\n <button\\n *ngIf=\\\"selectedCount(notSelectedMedicaments)\\\"\\n class=\\\"btn btn-icon btn-add-outiline text-capitalize trash-solid-position\\\"\\n type=\\\"button\\\"\\n (click)=\\\"includeMedicaments()\\\"\\n >\\n <span class=\\\"btn-inner--text\\\"\\n >Incluir ({{ selectedCount(notSelectedMedicaments) }}) medicamento<span\\n *ngIf=\\\"selectedCount(notSelectedMedicaments) > 1\\\"\\n >s</span\\n ></span\\n >\\n <span class=\\\"btn-inner--icon\\\" theme><i class=\\\"fa fa-plus\\\"></i></span>\\n </button>\\n </nz-collapse-panel>\\n </nz-collapse>\\n\\n <div class=\\\"container-fluid medico-selecionado p-3\\\">\\n <span>Medicamentos selecionados</span>\\n </div>\\n\\n <div\\n class=\\\"container-fluid medico-selecionado-conteudo selected-medicaments pt-3 mb-2\\\"\\n *ngFor=\\\"let medicament of selectedMedicaments\\\"\\n >\\n <button\\n type=\\\"button\\\"\\n class=\\\"close pull-right\\\"\\n aria-label=\\\"Close\\\"\\n (click)=\\\"showModalAlert(medicament)\\\"\\n >\\n <span aria-hidden=\\\"true\\\" style=\\\"font-size: 2rem;\\\">×</span>\\n </button>\\n\\n <button\\n *ngIf=\\\"medicament.items?.length\\\"\\n type=\\\"button\\\"\\n class=\\\"close pull-right mr-3\\\"\\n aria-label=\\\"Close\\\"\\n (click)=\\\"showModal(medicament)\\\"\\n >\\n <span class=\\\"btn-inner--icon\\\"><i class=\\\"fa fa-pencil-solid\\\"></i></span>\\n </button>\\n\\n <label class=\\\"pl-4 m-0\\\">{{ medicament.name }}</label>\\n <p class=\\\"pl-4\\\">{{ medicament.dosage }}</p>\\n\\n <div\\n class=\\\"container-fluid medico-selecionado-conteudo pt-3 pb-3 d-flex justify-content-center\\\"\\n *ngIf=\\\"!medicament.items || !medicament.items.length\\\"\\n >\\n <button\\n class=\\\"btn btn-icon btn-add-outiline text-capitalize\\\"\\n type=\\\"button\\\"\\n (click)=\\\"showModal(medicament)\\\"\\n >\\n <span class=\\\"btn-inner--text\\\">Adicionar Dispensação</span>\\n <span class=\\\"btn-inner--icon\\\" theme><i class=\\\"fa fa-plus\\\"></i></span>\\n </button>\\n </div>\\n\\n <nz-collapse class=\\\"caixas pb-3\\\" *ngIf=\\\"medicament.items?.length\\\">\\n <nz-collapse-panel\\n *ngFor=\\\"let item of medicament.items\\\"\\n nzHeader=\\\"{{ item.nome }} - {{ item.apresentacaoCustomizada }}\\\"\\n >\\n <p class=\\\"title4 mb-1\\\">{{ item.principio }}</p>\\n <p class=\\\"title3 mb-1\\\">{{ item.laboratorio }}</p>\\n <p class=\\\"title3 mt-2\\\">\\n <span\\n class=\\\"exchange-icon\\\"\\n [ngStyle]=\\\"{ 'background-color': item.intercambialidade ? '#5ce1c2' : '#ebebeb' }\\\"\\n ><i class=\\\"fas fa-exchange\\\"></i\\n ></span>\\n Intercambialidade?\\n {{ item.intercambialidade ? 'Sim' : 'Não' }}\\n </p>\\n <p class=\\\"title5 m-0\\\" *ngIf=\\\"item.caixas?.length\\\">\\n <span class=\\\"badge-caixa\\\">{{ item.caixas.length }}</span> Quantas unidades desse produto:\\n {{ item.caixas.length }}\\n </p>\\n <p class=\\\"title6 pl-4 m-0 ml-1\\\" *ngFor=\\\"let caixa of item.caixas\\\">\\n Número de lote caixa: {{ caixa.nome }}\\n </p>\\n </nz-collapse-panel>\\n </nz-collapse>\\n </div>\\n</div>\\n\\n<div class=\\\"footer bg-dark d-flex align-items-center fixed-bottom justify-content-end\\\">\\n <button\\n type=\\\"button\\\"\\n class=\\\"btn btn-success\\\"\\n (click)=\\\"finish()\\\"\\n theme\\n [disabled]=\\\"!selectedMedicaments.length || dispensedMedicaments < selectedMedicaments.length\\\"\\n >\\n CONFIRMAR VENDA ({{ dispensedMedicaments }}/{{ selectedMedicaments.length }})\\n <i class=\\\"fa fa-arrow-right\\\"></i>\\n </button>\\n</div>\\n<ngx-loading [show]=\\\"loading\\\" [config]=\\\"{ backdropBorderRadius: '3px' }\\\"></ngx-loading>\\n\";","import { Component, OnInit } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { AuthService } from '@app/core/services/auth.service';\nimport { PrescriptionService } from '@app/modules/document/services/prescription.service';\nimport { RetentionService } from '@app/modules/document/services/retention.service';\nimport { PharmacyService } from '@app/modules/pharmacy/services/pharmacy.service';\nimport { ModalBuyerDataComponent } from '@app/shared/modals/modal-buyer-data/modal-buyer-data.component';\nimport { Pharmacy } from '@app/shared/models';\nimport { User } from '@app/shared/models/decodedLoginToken';\nimport { AppToastService } from '@app/shared/services/app-toast.service';\nimport { NzModalService } from 'ng-zorro-antd/modal';\nimport { ModalAlertComponent } from '../modal-alert/modal-alert.component';\nimport { ModalDispentionComponent } from '../modal-dispention/modal-dispention.component';\nimport { nativeAsync } from '@app/shared/decorators/nativeAsync';\n\n@Component({\n selector: 'app-register',\n templateUrl: './register.component.html',\n styleUrls: ['./register.component.scss']\n})\nexport class RegisterComponent implements OnInit {\n loading = false;\n prescription: any;\n private pharmacy: Pharmacy;\n thirdParties: any;\n prescriptionData: any;\n hash: any;\n\n constructor(\n private router: Router,\n private prescriptionService: PrescriptionService,\n private retentionService: RetentionService,\n private authService: AuthService,\n private pharmacyService: PharmacyService,\n private modalService: NzModalService,\n private notification: AppToastService\n ) {\n this.prescription = this.prescriptionService.prescription;\n }\n\n async ngOnInit() {\n const extraData = JSON.parse(localStorage.getItem('extra_data'));\n if (extraData) {\n this.pharmacy = await this.pharmacyService.getPharmacy(extraData.pharmacyId).toPromise();\n } else {\n this.pharmacy = await this.pharmacyService.getPharmacyByUserId(this.user._id).toPromise();\n }\n }\n\n get user(): User {\n return this.authService.user();\n }\n\n get patient() {\n return this.prescription.patient;\n }\n\n get healthProfessional() {\n return this.prescription.healthProfessional;\n }\n\n get medicaments() {\n return this.prescription.medicaments;\n }\n\n get notSelectedMedicaments() {\n return this.medicaments.filter(m => !m.checked && !m.hidden);\n }\n\n get selectedMedicaments() {\n return this.medicaments.filter(m => m.checked);\n }\n\n selectedCount(medicaments: any) {\n return medicaments.filter(m => m.include).length;\n }\n\n remove(medicament: any) {\n medicament.checked = false;\n }\n\n @nativeAsync\n async includeMedicaments() {\n this.notSelectedMedicaments.forEach(m => {\n if (m.include) {\n m.checked = true;\n m.include = false;\n }\n });\n }\n\n showModal(medicament: any) {\n this.modalService.create({\n nzContent: ModalDispentionComponent,\n nzClassName: 'modal-dispensation',\n nzComponentParams: {\n medicament: medicament\n },\n nzClosable: false,\n nzFooter: null,\n nzWidth: 600\n });\n }\n\n showModalAlert(medicament: any) {\n this.modalService.create({\n nzContent: ModalAlertComponent,\n nzClassName: 'modal-alert',\n nzComponentParams: {\n medicament: medicament\n },\n nzClosable: false,\n nzFooter: null\n });\n }\n\n get dispensedMedicaments() {\n return this.selectedMedicaments.filter(m => m.items).length;\n }\n @nativeAsync\n async finish() {\n const modal = this.modalService.create({\n nzContent: ModalBuyerDataComponent,\n nzComponentParams: {\n patient: this.prescription.patient,\n okText: 'Finalizar dispensação'\n },\n nzFooter: null,\n nzWidth: 900\n });\n\n modal.afterOpen.subscribe(_ => {\n modal.getContentComponent().saveRetention.subscribe(cpf => this.saveRentention(modal, cpf));\n });\n }\n\n @nativeAsync\n private async saveRentention(modal: any, cpf: string) {\n try {\n let dispensation: {};\n if (this.prescription.thirdParties) {\n const base64 = this.prescriptionService.pdfBase64.substring(\n this.prescriptionService.pdfBase64.indexOf(',') + 1\n );\n dispensation = {\n identifier: '',\n thirdParties: true,\n medicaments: this.selectedMedicaments.flatMap(medicament => {\n return medicament.items.flatMap(item => {\n return item.caixas.map(caixa => ({\n medicationName: 'unknown',\n medicationDispense: `${item.nome} - ${item.apresentacaoCustomizada}`,\n quantity: 1,\n lotNumber: caixa.nome,\n laboratory: {\n name: item.laboratorio,\n cnpj: item.cnpj\n }\n }));\n });\n }),\n pharmacy: {\n name: this.pharmacy.businessName || this.pharmacy.business_name_entity,\n cnpj: this.pharmacy.cnpj || this.pharmacy.cnpj_entity,\n phone: this.pharmacy.telephone,\n address: this.pharmacy.address\n },\n prescriptionData: base64\n };\n } else {\n dispensation = {\n identifier: this.prescription.identifier,\n thirdParties: false,\n medicaments: this.selectedMedicaments.flatMap(medicament => {\n return medicament.items.flatMap(item => {\n return item.caixas.map(caixa => ({\n uuid: medicament.uuid,\n medicationName: medicament.name,\n medicationDispense: `${item.nome} - ${item.apresentacaoCustomizada}`,\n quantity: 1,\n lotNumber: caixa.nome,\n laboratory: {\n name: item.laboratorio,\n cnpj: item.cnpj\n }\n }));\n });\n }),\n pharmacy: {\n name: this.pharmacy.businessName || this.pharmacy.business_name_entity,\n cnpj: this.pharmacy.cnpj || this.pharmacy.cnpj_entity,\n phone: this.pharmacy.telephone,\n address: this.pharmacy.address\n }\n };\n }\n\n this.loading = true;\n await this.prescriptionService.postDispensation(dispensation);\n await this.saveRetentionThirdParty(cpf);\n this.prescriptionService.pdfBase64 = null;\n this.notification.notify('success', 'Sucesso', 'Dispensação realizada com sucesso');\n window.location.href = '/dashboard';\n modal.close();\n } catch (err) {\n console.error(err);\n this.notification.notify('error', 'Erro', 'Ocorreu um erro ao realizar a dispensação');\n }\n this.loading = false;\n }\n\n private saveRetentionThirdParty(cpf: string) {\n const medications = this.selectedMedicaments.flatMap(medicament => {\n return medicament.items.map(\n (item: {\n ean: string;\n nome: string;\n apresentacaoCustomizada: any;\n caixas: any[];\n laboratorio: any;\n cnpj: string;\n }) => ({\n ean: item.ean,\n name: `${item.nome} - ${item.apresentacaoCustomizada}`,\n batches: item.caixas.map(caixa => caixa.nome),\n laboratory: {\n name: item.laboratorio,\n cnpj: item.cnpj\n }\n })\n );\n });\n\n const retention = {\n pdf: this.prescriptionService.pdfBase64,\n cpf,\n pharmacy: this.pharmacy.id,\n prescriber: this.healthProfessional,\n medications\n };\n return this.retentionService.saveRetentionOfThirdParties(retention);\n }\n}\n","export default \".patient {\\n background-color: #17c6ac;\\n font-family: \\\"probold\\\", sans-serif;\\n}\\n.patient label {\\n color: rgba(0, 0, 0, 0.8);\\n font-family: \\\"probold\\\", sans-serif;\\n font-size: 1.5rem;\\n margin: 0;\\n}\\n.professional {\\n background-color: #65f2da;\\n font-family: \\\"probold\\\", sans-serif;\\n}\\n.professional label {\\n color: rgba(0, 0, 0, 0.8);\\n font-family: \\\"probold\\\", sans-serif;\\n font-size: 1.5rem;\\n margin: 0;\\n}\\n.trash-solid-position {\\n border: 0;\\n float: right;\\n}\\n.not-selected-medicaments {\\n background-color: #e8fdfa;\\n font-size: 16px;\\n}\\n.not-selected-medicaments .checkbox-item p {\\n text-align: unset;\\n}\\n.not-selected-medicaments .checkbox-item .medicament-name {\\n font-family: \\\"probold\\\", sans-serif;\\n font-size: 18px;\\n}\\n.not-selected-medicaments .checkbox-item .dispensation i {\\n color: black;\\n font-style: normal;\\n opacity: 0.8;\\n}\\n.not-selected-medicaments .checkbox-item .dispensation p {\\n margin: 0;\\n}\\n.selected-medicaments {\\n font-family: \\\"probold\\\", sans-serif;\\n font-size: 18px;\\n}\\n.selected-medicaments label {\\n font-family: \\\"probold\\\", sans-serif;\\n font-size: 18px;\\n}\\n.selected-medicaments p {\\n color: var(--color-card-pacientes);\\n font-family: \\\"proregular\\\";\\n}\\n.btn-add-outiline {\\n align-items: center;\\n background-color: var(--bg-color-secondary);\\n border-radius: 10px;\\n border: 0;\\n color: var(--color-white);\\n display: flex;\\n font-family: \\\"probold\\\", sans-serif;\\n height: 40px;\\n overflow: hidden;\\n padding: 0 0 0 8px;\\n}\\n.btn-add-outiline .btn-inner--icon {\\n align-items: center;\\n background-color: var(--bg-color-primary);\\n color: var(--color-white);\\n display: flex;\\n height: 40px;\\n justify-content: center;\\n width: 50px;\\n}\\n.medico-selecionado {\\n background-color: #4d4d4d;\\n border-radius: 7px 7px 0px 0px;\\n color: #fff;\\n font-size: 16px;\\n}\\n.medico-selecionado-conteudo {\\n background-color: #ebebeb;\\n border-radius: 5px;\\n color: #4d4d4d;\\n}\\n.medico-selecionado-conteudo .title1 {\\n font-family: \\\"probold\\\", sans-serif;\\n font-size: 18px;\\n font-weight: 800;\\n}\\n.medico-selecionado-conteudo .title2 {\\n font-family: \\\"probold\\\", sans-serif;\\n font-size: 16px;\\n opacity: 0.8;\\n}\\n.medico-selecionado-conteudo .title3 {\\n font-family: \\\"probold\\\", sans-serif;\\n font-size: 14px;\\n}\\n.cursor {\\n cursor: pointer;\\n}\\n.caixas .title1 {\\n font-family: \\\"probold\\\", sans-serif;\\n font-size: 18px;\\n font-weight: bold;\\n}\\n.caixas .title2 {\\n font-family: \\\"probold\\\", sans-serif;\\n font-size: 16px;\\n opacity: 0.8;\\n}\\n.caixas .title3 {\\n font-family: \\\"probold\\\", sans-serif;\\n font-size: 14px;\\n}\\n.caixas .title4 {\\n font-family: \\\"probold\\\", sans-serif;\\n font-size: 14px;\\n opacity: 0.8;\\n}\\n.caixas .title5 {\\n font-family: \\\"probold\\\", sans-serif;\\n font-size: 14px;\\n font-weight: bold;\\n}\\n.caixas .title6 {\\n font-family: \\\"probold\\\", sans-serif;\\n font-size: 12px;\\n opacity: 0.8;\\n}\\n.caixas .badge-caixa {\\n background-color: #0b6054;\\n border-radius: 10px;\\n color: #fff;\\n display: inline-block;\\n font-size: 12px;\\n font-weight: 700;\\n line-height: 1;\\n margin-right: 5px;\\n min-width: 10px;\\n padding: 4px 7px;\\n text-align: center;\\n vertical-align: middle;\\n white-space: nowrap;\\n}\\n::ng-deep .ant-collapse-borderless > .ant-collapse-item:last-child {\\n border-color: #ebebeb;\\n border-radius: 0px 0px 7px 7px;\\n border-style: solid;\\n border-width: 1px;\\n}\\n.exchange-icon {\\n background-color: #ebebeb;\\n border-radius: 60px;\\n box-shadow: 0px 0px 2px #888;\\n display: inline-block;\\n font-size: 12px;\\n margin-right: 5px;\\n padding: 0 1px;\\n padding: 0.5em 0.6em;\\n}\";","import { Component, OnInit } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { PrescriptionService } from '@app/modules/document/services/prescription.service';\n\n@Component({\n selector: 'app-consult-empty',\n templateUrl: './consult-empty.component.html',\n styleUrls: ['./consult-empty.component.scss']\n})\nexport class ConsultEmpty implements OnInit {\n loading = false;\n prescription: any;\n showDispensations = true;\n pharmacy: any;\n\n constructor(private router: Router, private prescriptionService: PrescriptionService) {\n this.prescription = this.prescriptionService.prescription;\n }\n\n ngOnInit() {}\n\n register(): void {\n this.prescriptionService.prescription = {\n thirdParties: true,\n medicaments: [\n {\n hidden: true,\n checked: true\n }\n ]\n };\n this.router.navigate([`/dispensation/register`]);\n }\n\n get medicaments() {\n return this.prescription.medicaments;\n }\n}\n","export default \"<app-alternative-navbar titleIcon=\\\"fas fa-history\\\"></app-alternative-navbar>\\n<app-sidebar-menu></app-sidebar-menu>\\n\\n<div class=\\\"container mt-4\\\" theme>\\n <form (submit)=\\\"register()\\\">\\n <div class=\\\"row justify-content-md-center\\\">\\n <div>\\n <div class=\\\"container-serp\\\">\\n <div class=\\\"document-serp d-flex column\\\">\\n <img alt=\\\"border\\\" src=\\\"assets/icons/consultemptyborder.svg\\\" />\\n <div>\\n <h1>PDF localizado em nossa base!</h1>\\n <h2>Atenção! Existem vendas registradas para esta receita!</h2>\\n <p>\\n Esta receita não foi gerada pela Receita Digital e nem pelos nossos parceiros, mas\\n existem registros de vendas para este PDF. <br />\\n <br />\\n Isso significa que alguma outra farmácia já recebeu este mesmo arquivo PDF e registrou a\\n venda de medicamentos. <br />\\n <br />Confira o histórico abaixo antes de fazer novas vendas:\\n </p>\\n </div>\\n </div>\\n\\n <div class=\\\"document-serp medicaments-card d-flex column\\\">\\n <div class=\\\"checkbox-group m-2\\\">\\n <div class=\\\"checkbox-item\\\" *ngFor=\\\"let medicament of medicaments\\\">\\n <ng-container *ngIf=\\\"showDispensations && medicament.dispensations\\\">\\n <div class=\\\"dispensation pl-5\\\" *ngFor=\\\"let dispensation of medicament.dispensations\\\">\\n <em class=\\\"fas fa-calendar-alt calendar\\\"> {{ dispensation.lastUpdated | date: 'dd/MM/yyyy\\n HH:mm'\\n }}</em>\\n <div class=\\\"box\\\">\\n <p class=\\\"title1\\\" title=\\\"Nome\\\">{{ dispensation.name }}</p>\\n\\n <span class=\\\"quantity\\\" title=\\\"Quantidade\\\">{{ dispensation.quantity }}</span>\\n\\n </div>\\n </div>\\n </ng-container>\\n </div>\\n </div>\\n </div>\\n\\n <button class=\\\"btn btn-icon btn-add-outiline text-capitalize\\\" type=\\\"submit\\\">\\n <span class=\\\"btn-inner--text\\\">Adicionar Dispensação</span>\\n <span class=\\\"btn-inner--icon\\\" theme><em class=\\\"fa fa-plus\\\"></em></span>\\n </button>\\n </div>\\n </div>\\n </div>\\n </form>\\n\\n <div class=\\\"footer bg-dark d-flex align-items-center fixed-bottom\\\">\\n <div class=\\\"back-dispensation\\\">\\n <button type=\\\"button\\\" class=\\\"btn btn-secondary\\\" (click)=\\\"register()\\\" theme>\\n <em class=\\\"fa fa-arrow-left\\\"></em>\\n CANCELAR DISPENSAÇÃO\\n </button>\\n </div>\\n\\n <div class=\\\"go-dispensation\\\">\\n <button type=\\\"button\\\" class=\\\"btn btn-success\\\" (click)=\\\"register()\\\" theme>\\n CONTINUAR PARA DISPENSAÇÃO\\n <em class=\\\"fa fa-arrow-right\\\"></em>\\n </button>\\n </div>\\n </div>\\n</div>\\n\\n<ngx-loading [show]=\\\"loading\\\" [config]=\\\"{ backdropBorderRadius: '3px' }\\\"></ngx-loading>\\n\";","export default \".btn-add-outiline {\\n align-items: center;\\n background-color: var(--bg-color-secondary);\\n border-radius: 10px;\\n border: 0;\\n color: var(--color-white);\\n display: flex;\\n font-family: \\\"probold\\\", sans-serif;\\n height: 40px;\\n overflow: hidden;\\n padding: 0 0 0 8px;\\n}\\n.btn-add-outiline .btn-inner--icon {\\n align-items: center;\\n background-color: var(--bg-color-primary);\\n color: var(--color-white);\\n display: flex;\\n height: 40px;\\n justify-content: center;\\n width: 50px;\\n}\\n.container-serp {\\n align-items: center;\\n display: flex;\\n flex-direction: column;\\n}\\n.document-serp {\\n background: #ebebeb;\\n border-bottom-left-radius: 25px;\\n border-top-right-radius: 25px;\\n color: white;\\n margin-bottom: 5%;\\n padding: 50px;\\n width: auto;\\n}\\n@media screen and (min-width: 768px) {\\n .document-serp {\\n max-height: 60vh;\\n overflow-y: auto;\\n width: 40rem;\\n }\\n}\\n.document-serp h1 {\\n color: #1b403a;\\n font-family: \\\"Source Sans Pro Bold\\\";\\n font-size: 24pt;\\n font-weight: bold !important;\\n}\\n.document-serp h2 {\\n color: red;\\n font-family: \\\"Source Sans Pro Semibold\\\";\\n font-size: 20px;\\n font-weight: bold;\\n}\\n.document-serp p {\\n color: #1b403a;\\n font-family: \\\"Source Sans Pro Light\\\";\\n font-size: 18px;\\n}\\n.document-serp img {\\n margin-top: -3%;\\n position: absolute;\\n right: 32%;\\n}\\n.go-dispensation,\\n.back-dispensation {\\n width: 50%;\\n height: 100%;\\n display: flex;\\n}\\n.go-dispensation .btn-secondary,\\n.back-dispensation .btn-secondary {\\n background: gray;\\n border: none;\\n}\\n.go-dispensation {\\n justify-content: end;\\n}\\n.back-dispensation {\\n justify-content: start;\\n}\\n.medicaments-card {\\n padding-left: 0px !important;\\n border-top-right-radius: 0 !important;\\n}\\n.medicaments-card #alert {\\n text-align: center;\\n color: red;\\n}\\n.medicaments-card #select-all {\\n color: var(--bg-color-primary);\\n}\\n.medicaments-card p {\\n text-align: center;\\n}\\n.medicaments-card .button {\\n text-align: center;\\n}\\n.medicaments-card .btn-icon {\\n border-radius: 10px;\\n border: 0;\\n font-family: \\\"probold\\\", sans-serif;\\n background-color: var(--bg-color-primary);\\n color: var(--color-white);\\n}\\n.medicaments-card .btn-show-dispensations {\\n background-color: var(--bg-color-secondary);\\n}\\n.medicaments-card label {\\n display: block;\\n font-family: \\\"probold\\\", sans-serif;\\n font-size: 16px;\\n margin-top: 20px;\\n}\\n.medicaments-card .checkbox-item p {\\n text-align: unset;\\n}\\n.medicaments-card .checkbox-item .medicament-name {\\n font-size: 18px;\\n font-family: \\\"probold\\\", sans-serif;\\n}\\n.medicaments-card .checkbox-item .dispensation .box {\\n display: flex;\\n justify-content: space-between;\\n width: 105%;\\n margin-bottom: 5%;\\n}\\n.medicaments-card .checkbox-item .dispensation .box .title1 {\\n color: #1e1e1e;\\n font-family: \\\"Source Sans Pro Extralight\\\";\\n font-size: 14px;\\n text-transform: uppercase;\\n}\\n.medicaments-card .checkbox-item .dispensation .box .quantity {\\n font-family: \\\"Source Sans Pro Semibold\\\";\\n color: white;\\n font-size: 14px;\\n background: #0b6054;\\n width: 20px;\\n height: 20px;\\n border-radius: 34px;\\n text-align: center;\\n}\\n.medicaments-card .checkbox-item .dispensation .calendar {\\n color: black !important;\\n}\\n.medicaments-card .checkbox-item .dispensation i {\\n color: black;\\n opacity: 0.8;\\n font-style: normal;\\n}\\n.medicaments-card .checkbox-item .dispensation p {\\n margin: 0;\\n}\\n.medicaments-card .title2 {\\n font-size: 16px;\\n font-family: \\\"proregular\\\", sans-serif;\\n opacity: 0.8;\\n}\\n.medicaments-card .title3 {\\n font-size: 14px;\\n font-family: \\\"proregular\\\", sans-serif;\\n}\";","import { Component, OnInit } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { PrescriptionService } from '@app/modules/document/services/prescription.service';\n\n@Component({\n selector: 'app-consult-not-found',\n templateUrl: './consult-not-found.component.html',\n styleUrls: ['./consult-not-found.component.scss']\n})\nexport class ConsultNotFound implements OnInit {\n loading = false;\n prescription: any;\n showDispensations = true;\n\n constructor(private router: Router, private prescriptionService: PrescriptionService) {\n this.prescription = this.prescriptionService.prescription;\n }\n\n ngOnInit() {}\n\n register(): void {\n this.router.navigate([`/dispensation/register`]);\n }\n}\n","export default \"<app-alternative-navbar titleIcon=\\\"fas fa-history\\\"></app-alternative-navbar>\\n<app-sidebar-menu></app-sidebar-menu>\\n\\n<div class=\\\"container mt-4\\\" theme>\\n <form (submit)=\\\"register()\\\">\\n <div class=\\\"row justify-content-md-center\\\">\\n <div>\\n <div class=\\\"container-serp\\\">\\n <div class=\\\"document-serp d-flex column\\\">\\n <img alt=\\\"border\\\" src=\\\"assets/icons/consultnullborder.svg\\\" />\\n <div>\\n <h1>Receita não encontrada em nosso sistema!</h1>\\n <p>\\n Esta receita não foi gerada pela Receita Digital e nem pelos nossos <br /> parceiros.\\n\\n Também não existe registro para este PDF. <br />\\n\\n Clique abaixo para registrar as primeiras vendas. <br />\\n </p>\\n </div>\\n </div>\\n\\n <button class=\\\"btn btn-icon btn-add-outiline text-capitalize\\\" type=\\\"submit\\\">\\n <span class=\\\"btn-inner--text\\\">Adicionar Dispensação</span>\\n <span class=\\\"btn-inner--icon\\\" theme><em class=\\\"fa fa-plus\\\"></em></span>\\n </button>\\n </div>\\n </div>\\n </div>\\n </form>\\n\\n <div class=\\\"footer bg-dark d-flex align-items-center fixed-bottom\\\">\\n <div class=\\\"back-dispensation\\\">\\n <button type=\\\"button\\\" class=\\\"btn btn-secondary\\\" (click)=\\\"register()\\\" theme>\\n <em class=\\\"fa fa-arrow-left\\\"></em>\\n CANCELAR DISPENSAÇÃO\\n </button>\\n </div>\\n\\n <div class=\\\"go-dispensation\\\">\\n <button type=\\\"button\\\" class=\\\"btn btn-success\\\" (click)=\\\"register()\\\" theme>\\n CONTINUAR PARA DISPENSAÇÃO\\n <em class=\\\"fa fa-arrow-right\\\"></em>\\n </button>\\n </div>\\n </div>\\n</div>\\n\\n<ngx-loading [show]=\\\"loading\\\" [config]=\\\"{ backdropBorderRadius: '3px' }\\\"></ngx-loading>\\n\";","export default \".btn-add-outiline {\\n align-items: center;\\n background-color: var(--bg-color-secondary);\\n border-radius: 10px;\\n border: 0;\\n color: var(--color-white);\\n display: flex;\\n font-family: \\\"probold\\\", sans-serif;\\n height: 40px;\\n overflow: hidden;\\n padding: 0 0 0 8px;\\n}\\n.btn-add-outiline .btn-inner--icon {\\n align-items: center;\\n background-color: var(--bg-color-primary);\\n color: var(--color-white);\\n display: flex;\\n height: 40px;\\n justify-content: center;\\n width: 50px;\\n}\\n.container-serp {\\n align-items: center;\\n display: flex;\\n flex-direction: column;\\n}\\n.document-serp {\\n background: #17C6AC;\\n border-bottom-left-radius: 25px;\\n border-top-right-radius: 25px;\\n color: white;\\n margin-bottom: 5%;\\n padding: 50px;\\n width: auto;\\n}\\n@media screen and (min-width: 768px) {\\n .document-serp {\\n width: 40rem;\\n }\\n}\\n.document-serp h1 {\\n font-size: 20pt;\\n color: white;\\n font-weight: bold;\\n font-family: \\\"Source Sans Pro Bold\\\";\\n font-size: 24px;\\n}\\n.document-serp p {\\n color: white;\\n font-family: \\\"Source Sans Pro Light\\\";\\n font-size: 18px;\\n}\\n.document-serp img {\\n fill: #65F2DA;\\n position: absolute;\\n}\\n@media screen and (min-width: 1901px) {\\n .document-serp img {\\n margin-top: -3%;\\n right: 32%;\\n }\\n}\\n@media screen and (max-width: 1900px) {\\n .document-serp img {\\n margin-top: -4%;\\n right: 25%;\\n }\\n}\\n.go-dispensation,\\n.back-dispensation {\\n width: 50%;\\n height: 100%;\\n display: flex;\\n}\\n.go-dispensation .btn-secondary,\\n.back-dispensation .btn-secondary {\\n background: gray;\\n border: none;\\n}\\n.go-dispensation {\\n justify-content: end;\\n}\\n.back-dispensation {\\n justify-content: start;\\n}\";","import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\nimport { ConsultComponent } from './consult/consult.component';\nimport { DispensationGuard } from './guards/dispensation.guard';\nimport { RegisterComponent } from './register/register.component';\nimport { ConsultEmpty } from './consultempty/consult-empty.component';\nimport { ConsultNotFound } from './consultnotfound/consult-not-found.component';\n\nconst routes: Routes = [\n { path: 'consult', component: ConsultComponent, canActivate: [DispensationGuard] },\n { path: 'consult-empty', component: ConsultEmpty, canActivate: [DispensationGuard] },\n { path: 'consult-not-found', component: ConsultNotFound, canActivate: [DispensationGuard] },\n { path: 'register', component: RegisterComponent, canActivate: [DispensationGuard] }\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n providers: [DispensationGuard],\n exports: [RouterModule]\n})\nexport class DispensationRoutingModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { SharedModule } from '@app/shared';\nimport { NgxLoadingModule } from 'ngx-loading';\nimport { NgxMaskModule } from 'ngx-mask';\nimport { ConsultComponent } from './consult/consult.component';\nimport { DispensationRoutingModule } from './dispensation-routing.module';\nimport { RegisterComponent } from './register/register.component';\nimport { ConsultNotFound } from './consultnotfound/consult-not-found.component';\nimport { ConsultEmpty } from './consultempty/consult-empty.component';\n\n@NgModule({\n declarations: [ConsultComponent, RegisterComponent, ConsultNotFound, ConsultEmpty],\n imports: [\n CommonModule,\n SharedModule,\n DispensationRoutingModule,\n NgxMaskModule.forRoot(),\n NgxLoadingModule.forRoot({})\n ]\n})\nexport class DispensationModule {}\n","import { Injectable, Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'capitalize'\n})\n@Injectable()\nexport class CapitalizePipe implements PipeTransform {\n // first letter uppercase and the others lowercase\n transform(value: string): string {\n return value && value.charAt(0).toUpperCase() + value.slice(1).toLowerCase();\n }\n}\n","import { Injectable, Pipe, PipeTransform } from '@angular/core';\r\nimport { OnlyNumbersPipe } from '@app/shared/pipes/only-numbers.pipe';\r\nimport { numeroEspecial } from './helpers';\r\n\r\nconst INITIAL_LEN_TEL = 4;\r\n\r\n@Pipe({\r\n name: 'formattedCel'\r\n})\r\n@Injectable()\r\nexport class FormattedCelPipe implements PipeTransform {\r\n transform(value): string {\r\n if (value && value !== '') {\r\n let cel;\r\n const receivedValue = value ? new OnlyNumbersPipe().transform(value) : value;\r\n if (numeroEspecial(receivedValue) && receivedValue.length === 8) {\r\n cel = receivedValue.substring(0, 4) + '-' + receivedValue.substring(4, receivedValue.length - 4);\r\n } else if (numeroEspecial(receivedValue) && receivedValue.length > 8) {\r\n cel =\r\n receivedValue.substring(0, 4) +\r\n '-' +\r\n receivedValue.substring(4, receivedValue.length - 4) +\r\n '-' +\r\n receivedValue.substring(receivedValue.length - 4, receivedValue.length);\r\n } else if (receivedValue.length > 2 && receivedValue.length <= 7) {\r\n cel = `(${receivedValue.substring(0, 2)}) ${receivedValue.substring(2)}`;\r\n } else if (receivedValue.length <= 2) {\r\n cel = receivedValue.substring(0, 7);\r\n } else if (receivedValue.length === 9) {\r\n cel = `(${receivedValue.substring(0, 2)}) ${receivedValue.substring(\r\n 2,\r\n 8\r\n )}-${receivedValue.substring(8, receivedValue.length)}`;\r\n } else {\r\n cel = `(${receivedValue.substring(0, 2)}) ${receivedValue.substring(\r\n 2,\r\n 7\r\n )}-${receivedValue.substring(7, receivedValue.length)}`;\r\n }\r\n return cel;\r\n }\r\n }\r\n\r\n transform2(value): string {\r\n if (value && value !== '') {\r\n let cel;\r\n const receivedValue = value ? new OnlyNumbersPipe().transform(value) : value;\r\n if (numeroEspecial(receivedValue) && receivedValue.length === 8) {\r\n cel = receivedValue.substring(0, 4) + '-' + receivedValue.substring(4, receivedValue.length - 4);\r\n } else if (numeroEspecial(receivedValue) && receivedValue.length > 8) {\r\n cel =\r\n receivedValue.substring(0, 4) +\r\n '-' +\r\n receivedValue.substring(4, receivedValue.length - 4) +\r\n '-' +\r\n receivedValue.substring(receivedValue.length - 4, receivedValue.length);\r\n } else if (receivedValue.length > 2 && receivedValue.length <= 7) {\r\n cel = `(${receivedValue.substring(0, 2)}) ${receivedValue.substring(2)}`;\r\n } else if (receivedValue.length <= 2) {\r\n cel = receivedValue.substring(0, 7);\r\n } else {\r\n cel = `(${receivedValue.substring(0, 2)}) ${receivedValue.substring(\r\n 2,\r\n 7\r\n )}-${receivedValue.substring(7, receivedValue.length)}`;\r\n }\r\n return cel;\r\n }\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'formattedCnpj'\r\n})\r\nexport class FormattedCnpjPipe implements PipeTransform {\r\n transform(value: string): string {\r\n if (value && value !== '') {\r\n return value.replace(/(\\d{2})(\\d{3})(\\d{3})(\\d{4})(\\d{2})/g, '$1.$2.$3/$4-$5');\r\n }\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'formattedCpf'\r\n})\r\nexport class FormattedCpfPipe implements PipeTransform {\r\n transform(value: string): string {\r\n return value && value.replace(/(\\d{3})(\\d{3})(\\d{3})(\\d{2})/g, '$1.$2.$3-$4');\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'formattedMapaSipeagro'\n})\nexport class FormattedMapaSipeagroPipe implements PipeTransform {\n transform(value: string): string {\n return value && value.replace(/(\\d{5})(\\d{4})/g, '$1/$2');\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\n\n@Pipe({\n name: 'safe'\n})\nexport class SafePipe implements PipeTransform {\n constructor(private sanitizer: DomSanitizer) {}\n transform(url: string) {\n return this.sanitizer.bypassSecurityTrustResourceUrl(url);\n }\n}\n","import { PipeTransform, Pipe } from '@angular/core';\n\n@Pipe({\n name: 'toJSON'\n})\nexport class ToJsonPipe implements PipeTransform {\n transform(value = '{}'): string {\n return JSON.stringify(JSON.parse(value), null, 2);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { isObservable, of } from 'rxjs';\nimport { catchError, map, startWith } from 'rxjs/operators';\n\n@Pipe({\n name: 'withLoading'\n})\nexport class WithLoadingPipe implements PipeTransform {\n transform(val: unknown) {\n return isObservable(val)\n ? val.pipe(\n map((value: unknown) => ({ loading: false, value })),\n startWith({ loading: true }),\n catchError(error => of({ loading: false, error }))\n )\n : val;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'sexPetParsed'\n})\nexport class SexPetParsedPipe implements PipeTransform {\n transform(value: string): string {\n if (value && value !== '') {\n return value === 'M' ? 'Macho' : 'Fêmea';\n }\n }\n}\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { CapitalizePipe } from './capitalize.pipe';\r\nimport { FormattedCelPipe } from './formatted-cel.pipe';\r\nimport { FormattedCepPipe } from './formatted-cep.pipe';\r\nimport { FormattedCnpjPipe } from './formatted-cnpj.pipe';\r\nimport { FormattedCpfPipe } from './formatted-cpf.pipe';\r\nimport { FormattedMapaSipeagroPipe } from './formatted-mapa-sipeagro.pipe';\r\nimport { FormattedTelPipe } from './formatted-tel.pipe';\r\nimport { IsCompleteNamePipe } from './is-complete-name-pipe.pipe';\r\nimport { IsCpfPipe } from './is-cpf.pipe';\r\nimport { IsTelPipe } from './is-tel.pipe';\r\nimport { OnlyNumbersPipe } from './only-numbers.pipe';\r\nimport { SafePipe } from './safe.pipe';\r\nimport { ToJsonPipe } from './to-json.pipe';\r\nimport { WithLoadingPipe } from './with-loading.pipe';\r\nimport { SexPetParsedPipe } from './sex-pet-parserd.pipe';\r\n\r\n@NgModule({\r\n imports: [CommonModule],\r\n declarations: [\r\n IsCompleteNamePipe,\r\n FormattedTelPipe,\r\n FormattedCelPipe,\r\n IsTelPipe,\r\n OnlyNumbersPipe,\r\n IsCpfPipe,\r\n FormattedCepPipe,\r\n FormattedCpfPipe,\r\n FormattedCnpjPipe,\r\n SafePipe,\r\n ToJsonPipe,\r\n FormattedMapaSipeagroPipe,\r\n CapitalizePipe,\r\n WithLoadingPipe,\r\n SexPetParsedPipe\r\n ],\r\n exports: [\r\n IsCompleteNamePipe,\r\n FormattedTelPipe,\r\n FormattedCelPipe,\r\n IsTelPipe,\r\n OnlyNumbersPipe,\r\n IsCpfPipe,\r\n FormattedCepPipe,\r\n FormattedCpfPipe,\r\n FormattedCnpjPipe,\r\n SafePipe,\r\n ToJsonPipe,\r\n FormattedMapaSipeagroPipe,\r\n CapitalizePipe,\r\n WithLoadingPipe,\r\n SexPetParsedPipe\r\n ]\r\n})\r\nexport class PipesModule {}\r\n","import { Component, EventEmitter, OnInit, Output } from '@angular/core';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { ValidationService } from '@app/core/services/validation.service';\r\nimport { CepService } from '@app/modules/entry/services/cep.service';\r\nimport { HealthProfessionalService } from '@app/modules/health-professional/services/health-professional.service';\r\nimport { PatientsService } from '@app/modules/patients/services/patients.service';\r\nimport { PharmacistService } from '@app/modules/pharmacist/services/pharmacist.service';\r\nimport { PharmacyService } from '@app/modules/pharmacy/services/pharmacy.service';\r\nimport { BrazilianStates } from '@app/shared/data/Brazilian-states';\r\nimport { nativeAsync } from '@app/shared/decorators/nativeAsync';\r\nimport { BrazilState } from '@app/shared/models';\r\nimport { User } from '@app/shared/models/decodedLoginToken';\r\nimport { markFormGroup } from '@app/utils/markFormGroup';\r\nimport { NzModalRef } from 'ng-zorro-antd/modal';\r\nimport { Observable, of } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'app-modal-edit-address-data',\r\n templateUrl: './modal-edit-address-data.component.html',\r\n styleUrls: ['./modal-edit-address-data.component.scss']\r\n})\r\nexport class ModalEditAddressDataComponent implements OnInit {\r\n user: User;\r\n completeUser: any;\r\n isNew: boolean;\r\n userType: string;\r\n commercialData: any;\r\n commercialDataIndex: number;\r\n loading = false;\r\n form: FormGroup;\r\n\r\n states: BrazilState[] = BrazilianStates;\r\n\r\n @Output() updateUserEvent = new EventEmitter<any>();\r\n\r\n constructor(\r\n private fb: FormBuilder,\r\n private cepService: CepService,\r\n private patientService: PatientsService,\r\n private healthProfessionalService: HealthProfessionalService,\r\n private pharmacyService: PharmacyService,\r\n private pharmacistService: PharmacistService,\r\n private nzModalRef: NzModalRef\r\n ) {}\r\n\r\n ngOnInit() {\r\n if (this.userType === 'healthProfessional') {\r\n this.buildCommercialAddressForm();\r\n } else {\r\n this.buildAddressForm();\r\n }\r\n }\r\n get title() {\r\n return this.userType === 'patient' ? 'ENDEREÇO' : 'DADOS EMPRESARIAIS';\r\n }\r\n\r\n private buildCommercialAddressForm() {\r\n this.form = this.fb.group({\r\n email: ['', Validators.email],\r\n name: ['', Validators.required],\r\n telephone: ['', Validators.required],\r\n cellphone: [''],\r\n address: this.fb.group({\r\n uf: ['', Validators.required],\r\n city: ['', Validators.required],\r\n complement: [''],\r\n number: ['', Validators.required],\r\n street: ['', Validators.required],\r\n neighborhood: ['', Validators.required],\r\n cep: ['', [Validators.required, ValidationService.cepValidator]]\r\n }),\r\n logo: ['']\r\n });\r\n\r\n if (!this.isNew) {\r\n this.form.patchValue(this.commercialData);\r\n }\r\n }\r\n\r\n private buildAddressForm() {\r\n this.form = this.fb.group({\r\n address: this.fb.group({\r\n uf: ['', Validators.required],\r\n city: ['', Validators.required],\r\n complement: [''],\r\n number: ['', Validators.required],\r\n street: ['', Validators.required],\r\n neighborhood: ['', Validators.required],\r\n cep: ['', [Validators.required, ValidationService.cepValidator]]\r\n })\r\n });\r\n this.form.controls.address.patchValue(this.completeUser.address);\r\n }\r\n\r\n submitForm() {\r\n markFormGroup(this.form);\r\n if (this.form.valid) {\r\n this.loading = true;\r\n this.form.disable();\r\n let execute = new Observable();\r\n switch (this.userType) {\r\n case 'healthProfessional':\r\n if (this.isNew) {\r\n this.completeUser.commercialData.push(this.form.value);\r\n } else {\r\n this.completeUser.commercialData[this.commercialDataIndex] = this.form.value;\r\n }\r\n execute = this.healthProfessionalService.update(this.completeUser.userId, this.completeUser);\r\n break;\r\n case 'pharmacy':\r\n this.completeUser.address = this.form.value.address;\r\n execute = this.pharmacyService.update(this.completeUser._id, this.completeUser);\r\n break;\r\n case 'pharmacist':\r\n this.completeUser.address = this.form.value.address;\r\n execute = this.pharmacistService.update(this.completeUser._id, this.completeUser);\r\n break;\r\n\r\n default:\r\n this.completeUser.address = this.form.value.address;\r\n execute = this.patientService.update(this.completeUser._id, this.completeUser);\r\n }\r\n\r\n execute\r\n .subscribe(data => {\r\n this.nzModalRef.close(data);\r\n })\r\n .add(() => {\r\n this.loading = false;\r\n this.nzModalRef.destroy();\r\n });\r\n }\r\n }\r\n\r\n @nativeAsync\r\n async onKey(event: any) {\r\n if (event.target.value.length === 10) {\r\n const cep = event.target.value.replace(/[^\\d]+/g, '');\r\n const data = await this.cepService.consult(cep);\r\n if (!data.erro) {\r\n this.form.controls['address'].patchValue({\r\n uf: data.uf,\r\n street: data.logradouro,\r\n neighborhood: data.bairro,\r\n city: data.localidade,\r\n number: null,\r\n cep: data.cep\r\n });\r\n }\r\n }\r\n }\r\n}\r\n","export default \"<div theme>\\r\\n <header>\\r\\n <span class=\\\"title\\\">\\r\\n {{ title }}\\r\\n </span>\\r\\n </header>\\r\\n\\r\\n <div class=\\\"modal-body\\\">\\r\\n <form nz-form [formGroup]=\\\"form\\\" (ngSubmit)=\\\"submitForm()\\\">\\r\\n <ng-container *ngIf=\\\"userType === 'healthProfessional'\\\">\\r\\n <div>\\r\\n <nz-form-item>\\r\\n <nz-form-label nzFor=\\\"name\\\">Nome <span class=\\\"mandatory\\\">*</span></nz-form-label>\\r\\n <nz-form-control>\\r\\n <nz-input-group>\\r\\n <input\\r\\n type=\\\"text\\\"\\r\\n nz-input\\r\\n formControlName=\\\"name\\\"\\r\\n placeholder=\\\"Nome\\\"\\r\\n maxlength=\\\"128\\\"\\r\\n autocomplete=\\\"disabled\\\"\\r\\n />\\r\\n </nz-input-group>\\r\\n <nz-form-explain *ngIf=\\\"form.get('name').dirty && form.get('name').errors\\\">\\r\\n <ng-container *ngIf=\\\"form.get('name').hasError('required')\\\">\\r\\n Campo obrigatório, por favor digite o seu nome e sobrenome.\\r\\n </ng-container>\\r\\n </nz-form-explain>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n\\r\\n <div class=\\\"row\\\">\\r\\n <div class=\\\"col-md-6\\\">\\r\\n <nz-form-item *ngIf=\\\"form.get('telephone') as telephone\\\">\\r\\n <nz-form-label nzFor=\\\"telephone\\\"\\r\\n >Telefone 1 <span class=\\\"mandatory\\\">*</span></nz-form-label\\r\\n >\\r\\n <nz-form-control>\\r\\n <nz-input-group>\\r\\n <input\\r\\n nz-input\\r\\n type=\\\"text\\\"\\r\\n formControlName=\\\"telephone\\\"\\r\\n placeholder=\\\"(21) 92222-2222\\\"\\r\\n [mask]=\\\"telephone.value.length <= 10 ? '(00) 0000-00009' : '(00) 00000-0000'\\\"\\r\\n autocomplete=\\\"disabled\\\"\\r\\n />\\r\\n </nz-input-group>\\r\\n <nz-form-explain *ngIf=\\\"telephone.dirty && telephone.errors\\\">\\r\\n <ng-container *ngIf=\\\"telephone.hasError('required')\\\">\\r\\n Campo obrigatório, por favor digite seu telefone para contato.\\r\\n </ng-container>\\r\\n </nz-form-explain>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n </div>\\r\\n <div class=\\\"col-md-6\\\">\\r\\n <nz-form-item *ngIf=\\\"form.get('cellphone') as cellphone\\\">\\r\\n <nz-form-label nzFor=\\\"cellphone\\\">Telefone 2</nz-form-label>\\r\\n <nz-form-control>\\r\\n <nz-input-group>\\r\\n <input\\r\\n nz-input\\r\\n type=\\\"text\\\"\\r\\n formControlName=\\\"cellphone\\\"\\r\\n placeholder=\\\"(21) 92222-2222\\\"\\r\\n [mask]=\\\"cellphone.value.length <= 10 ? '(00) 0000-00009' : '(00) 00000-0000'\\\"\\r\\n autocomplete=\\\"disabled\\\"\\r\\n />\\r\\n </nz-input-group>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n </div>\\r\\n </div>\\r\\n\\r\\n <nz-form-item>\\r\\n <nz-form-label nzFor=\\\"email\\\">E-mail</nz-form-label>\\r\\n <nz-form-control nzErrorTip=\\\"E-mail inválido, por favor digite um endereço e-mail correto\\\">\\r\\n <nz-input-group>\\r\\n <input\\r\\n type=\\\"text\\\"\\r\\n nz-input\\r\\n formControlName=\\\"email\\\"\\r\\n placeholder=\\\"usuário@email.com\\\"\\r\\n autocomplete=\\\"disabled\\\"\\r\\n />\\r\\n </nz-input-group>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n <hr />\\r\\n </div>\\r\\n </ng-container>\\r\\n\\r\\n <div *ngIf=\\\"form.get('address') as addressGroup\\\" [formGroup]=\\\"addressGroup\\\">\\r\\n <nz-form-item>\\r\\n <nz-form-label nzFor=\\\"cep\\\">CEP <span class=\\\"mandatory\\\">*</span></nz-form-label>\\r\\n <nz-form-control nzErrorTip=\\\"Campo obrigatório, por favor digite o seu CEP.\\\">\\r\\n <nz-input-group>\\r\\n <input\\r\\n (keyup)=\\\"onKey($event)\\\"\\r\\n type=\\\"text\\\"\\r\\n nz-input\\r\\n formControlName=\\\"cep\\\"\\r\\n placeholder=\\\"CEP\\\"\\r\\n mask=\\\"00.000-000\\\"\\r\\n autocomplete=\\\"disabled\\\"\\r\\n />\\r\\n </nz-input-group>\\r\\n <nz-form-explain *ngIf=\\\"addressGroup.get('cep').dirty && addressGroup.get('cep').errors\\\">\\r\\n <ng-container *ngIf=\\\"addressGroup.get('cep').hasError('required')\\\">\\r\\n Campo obrigatório, por favor digite o cep.\\r\\n </ng-container>\\r\\n <ng-container\\r\\n *ngIf=\\\"\\r\\n !addressGroup.get('cep').hasError('required') &&\\r\\n addressGroup.get('cep').hasError('cep')\\r\\n \\\"\\r\\n >\\r\\n Cep inválido.\\r\\n </ng-container>\\r\\n </nz-form-explain>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n\\r\\n <div class=\\\"row\\\">\\r\\n <div class=\\\"col-7\\\">\\r\\n <nz-form-item>\\r\\n <nz-form-label nzFor=\\\"street\\\">Logradouro <span class=\\\"mandatory\\\">*</span></nz-form-label>\\r\\n <nz-form-control nzErrorTip=\\\"Campo obrigatório, por favor digite o seu Logradouro.\\\">\\r\\n <nz-input-group>\\r\\n <input\\r\\n type=\\\"text\\\"\\r\\n nz-input\\r\\n formControlName=\\\"street\\\"\\r\\n placeholder=\\\"Logradouro\\\"\\r\\n maxlength=\\\"128\\\"\\r\\n autocomplete=\\\"disabled\\\"\\r\\n />\\r\\n </nz-input-group>\\r\\n <nz-form-explain\\r\\n *ngIf=\\\"addressGroup.get('street').dirty && addressGroup.get('street').errors\\\"\\r\\n >\\r\\n <ng-container *ngIf=\\\"addressGroup.get('street').hasError('required')\\\">\\r\\n Campo obrigatório, por favor digite o logradouro.\\r\\n </ng-container>\\r\\n </nz-form-explain>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n </div>\\r\\n <div class=\\\"col-5\\\">\\r\\n <nz-form-item>\\r\\n <nz-form-label nzFor=\\\"number\\\">Número <span class=\\\"mandatory\\\">*</span></nz-form-label>\\r\\n <nz-form-control nzErrorTip=\\\"Campo obrigatório, por favor digite o seu número.\\\">\\r\\n <nz-input-group>\\r\\n <input\\r\\n nz-input\\r\\n formControlName=\\\"number\\\"\\r\\n placeholder=\\\"Número\\\"\\r\\n maxlength=\\\"10\\\"\\r\\n autocomplete=\\\"disabled\\\"\\r\\n />\\r\\n </nz-input-group>\\r\\n <nz-form-explain\\r\\n *ngIf=\\\"addressGroup.get('number').dirty && addressGroup.get('number').errors\\\"\\r\\n >\\r\\n <ng-container *ngIf=\\\"addressGroup.get('number').hasError('required')\\\">\\r\\n Campo obrigatório, por favor digite o número.\\r\\n </ng-container>\\r\\n </nz-form-explain>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n </div>\\r\\n </div>\\r\\n\\r\\n <nz-form-item>\\r\\n <nz-form-label nzFor=\\\"complement\\\">Complemento</nz-form-label>\\r\\n <nz-form-control>\\r\\n <nz-input-group>\\r\\n <input\\r\\n type=\\\"text\\\"\\r\\n nz-input\\r\\n formControlName=\\\"complement\\\"\\r\\n placeholder=\\\"Complemento\\\"\\r\\n maxlength=\\\"128\\\"\\r\\n autocomplete=\\\"disabled\\\"\\r\\n />\\r\\n </nz-input-group>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n\\r\\n <nz-form-item>\\r\\n <nz-form-label nzFor=\\\"neighborhood\\\">Bairro <span class=\\\"mandatory\\\">*</span></nz-form-label>\\r\\n <nz-form-control nzErrorTip=\\\"Campo obrigatório, por favor digite o seu Bairro.\\\">\\r\\n <nz-input-group>\\r\\n <input\\r\\n type=\\\"text\\\"\\r\\n nz-input\\r\\n formControlName=\\\"neighborhood\\\"\\r\\n placeholder=\\\"Bairro\\\"\\r\\n maxlength=\\\"128\\\"\\r\\n autocomplete=\\\"disabled\\\"\\r\\n />\\r\\n </nz-input-group>\\r\\n <nz-form-explain\\r\\n *ngIf=\\\"addressGroup.get('neighborhood').dirty && addressGroup.get('neighborhood').errors\\\"\\r\\n >\\r\\n <ng-container *ngIf=\\\"addressGroup.get('neighborhood').hasError('required')\\\">\\r\\n Campo obrigatório, por favor digite o bairro.\\r\\n </ng-container>\\r\\n </nz-form-explain>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n\\r\\n <div class=\\\"row\\\">\\r\\n <div class=\\\"col-7\\\">\\r\\n <nz-form-item>\\r\\n <nz-form-label nzFor=\\\"city\\\">Cidade <span class=\\\"mandatory\\\">*</span></nz-form-label>\\r\\n <nz-form-control nzErrorTip=\\\"Campo obrigatório, por favor digite o seu Cidade.\\\">\\r\\n <nz-input-group>\\r\\n <input\\r\\n type=\\\"text\\\"\\r\\n nz-input\\r\\n formControlName=\\\"city\\\"\\r\\n placeholder=\\\"Cidade\\\"\\r\\n maxlength=\\\"64\\\"\\r\\n autocomplete=\\\"disabled\\\"\\r\\n />\\r\\n </nz-input-group>\\r\\n <nz-form-explain\\r\\n *ngIf=\\\"addressGroup.get('city').dirty && addressGroup.get('city').errors\\\"\\r\\n >\\r\\n <ng-container *ngIf=\\\"addressGroup.get('city').hasError('required')\\\">\\r\\n Campo obrigatório, por favor digite a cidade.\\r\\n </ng-container>\\r\\n </nz-form-explain>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n </div>\\r\\n <div class=\\\"col-5\\\">\\r\\n <nz-form-item>\\r\\n <nz-form-label nzFor=\\\"uf\\\">UF <span class=\\\"mandatory\\\">*</span></nz-form-label>\\r\\n <nz-form-control\\r\\n nzHasFeedback\\r\\n nzErrorTip=\\\"Campo obrigatório, por favor selecione o UF do CRM\\\"\\r\\n >\\r\\n <nz-select\\r\\n formControlName=\\\"uf\\\"\\r\\n id=\\\"uf\\\"\\r\\n nzShowSearch\\r\\n nzAllowClear\\r\\n nzDropdownClassName=\\\"account-select\\\"\\r\\n nzPlaceHolder=\\\"Selecione\\\"\\r\\n >\\r\\n <nz-option\\r\\n *ngFor=\\\"let state of states\\\"\\r\\n [nzLabel]=\\\"state?.sigla\\\"\\r\\n [nzValue]=\\\"state?.sigla\\\"\\r\\n >\\r\\n </nz-option>\\r\\n </nz-select>\\r\\n <nz-form-explain *ngIf=\\\"addressGroup.get('uf').dirty && addressGroup.get('uf').errors\\\">\\r\\n <ng-container *ngIf=\\\"addressGroup.get('uf').hasError('required')\\\">\\r\\n Campo obrigatório, por favor selecione o UF.\\r\\n </ng-container>\\r\\n </nz-form-explain>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n </div>\\r\\n </div>\\r\\n </div>\\r\\n </form>\\r\\n\\r\\n <div *ngIf=\\\"loading\\\">\\r\\n <ng-template #indicatorTemplate><i nz-icon nzType=\\\"loading\\\"></i></ng-template>\\r\\n <nz-spin nzSimple [nzIndicator]=\\\"indicatorTemplate\\\"> </nz-spin>\\r\\n </div>\\r\\n\\r\\n <button class=\\\"btn btn-icon btn-ok btn-save\\\" type=\\\"button\\\" (click)=\\\"submitForm()\\\">\\r\\n <span class=\\\"btn-inner--text\\\">SALVAR</span>\\r\\n </button>\\r\\n </div>\\r\\n</div>\\r\\n\";","export default \"header {\\n width: 100%;\\n padding: 16px 24px;\\n border-bottom: 1px solid #e8e8e8;\\n border-radius: 4px 4px 0 0;\\n position: absolute;\\n top: 0;\\n left: 0;\\n background-color: var(--bg-modal-header);\\n color: var(--color-white);\\n}\\nheader .title {\\n margin: 0;\\n font-weight: 500;\\n color: var(--color-white);\\n font-size: 16px;\\n line-height: 22px;\\n word-wrap: break-word;\\n}\\n.modal-body {\\n padding-bottom: 40px;\\n margin-top: 37px;\\n height: 50vh;\\n overflow-y: scroll;\\n}\\n.modal-body input {\\n border-radius: 10px;\\n}\\n.modal-body button {\\n float: right;\\n}\\ni {\\n font-size: 24px;\\n}\\ninput::-webkit-input-placeholder {\\n color: #bdc2c7;\\n}\\n.mandatory {\\n color: red;\\n}\\n.btn {\\n font-size: 12px;\\n}\";","import { Component, EventEmitter, OnInit, Output } from '@angular/core';\nimport { FormBuilder, FormGroup } from '@angular/forms';\nimport { AuthService } from '@app/core/services/auth.service';\nimport { UserService } from '@app/modules/user/user.service';\nimport { ColorSetting } from '@app/shared/models/color-setting';\nimport { User } from '@app/shared/models/decodedLoginToken';\nimport { StateService } from '@app/shared/services/state.service';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { switchMap } from 'rxjs/operators';\n\n@Component({\n selector: 'app-modal-sucess-send-document',\n templateUrl: './modal-sucess-send-document.component.html',\n styleUrls: ['./modal-sucess-send-document.component.scss']\n})\nexport class ModalSucessSendDocumentComponent implements OnInit {\n @Output() closeModal = new EventEmitter<any>();\n isSuccessMsg = true;\n title: string;\n code: string;\n resend: boolean;\n colorSetting: ColorSetting;\n\n form: FormGroup;\n\n constructor(\n public modalRef: BsModalRef,\n private fb: FormBuilder,\n private userService: UserService,\n private authService: AuthService,\n private stateService: StateService\n ) {}\n\n get rennovaFeature(): boolean {\n const user: User = this.authService.user();\n return (\n user &&\n user.features.some(f => f.name === 'Rennova') &&\n this.stateService.data &&\n this.stateService.data.isRennova\n );\n }\n\n ngOnInit() {\n if (this.resend) {\n this.setTitle();\n } else {\n this.form = this.fb.group({\n doNotShowAgainModalSuccessPrescription: [false]\n });\n this.listenDoNotShowAgainModalSuccessPrescription();\n }\n }\n setTitle() {\n switch (this.code[0]) {\n case 'P':\n case 'I':\n this.title = `Receita ${this.resend ? 're' : ''}enviada com sucesso!`;\n break;\n case 'A':\n this.title = `Atestado ${this.resend ? 're' : ''}enviado com sucesso!`;\n break;\n case 'E':\n this.title = `Exame ${this.resend ? 're' : ''}enviado com sucesso!`;\n break;\n case 'O':\n default:\n this.title = `Documento ${this.resend ? 're' : ''}enviado com sucesso!`;\n }\n }\n\n close(): void {\n this.modalRef.hide();\n this.closeModal.emit();\n }\n\n get user(): User {\n return this.authService.user();\n }\n\n listenDoNotShowAgainModalSuccessPrescription() {\n this.form\n .get('doNotShowAgainModalSuccessPrescription')\n .valueChanges.pipe(\n switchMap(value =>\n this.userService.checkUi({ ...this.user.ui, doNotShowAgainModalSuccessPrescription: value })\n )\n )\n .subscribe();\n }\n}\n","export default \"<div class=\\\"modal-body\\\" theme>\\n <div *ngIf=\\\"!resend\\\">\\n <p style=\\\"font-weight: bold; text-align: justify;\\\" *ngIf=\\\"isSuccessMsg && !rennovaFeature\\\">\\n O link da Receita Digital foi enviado com sucesso! Se precisar, este documento poderá ser acessado\\n pelo seu Histórico de Documentos ou diretamente no perfil do paciente em\\n <a href=\\\"https://receitadigital.com/\\\">receitadigital.com</a>\\n </p>\\n\\n <p style=\\\"font-weight: bold;text-align: justify;\\\" *ngIf=\\\"isSuccessMsg && rennovaFeature\\\">\\n O link da Receita Digital foi enviado com sucesso! Se precisar, este documento poderá ser acessado\\n pelo seu Histórico de Documentos.\\n </p>\\n\\n <p style=\\\"font-weight: bold;text-align: justify;\\\" *ngIf=\\\"!isSuccessMsg && !rennovaFeature\\\">\\n Você optou por não enviar o link de acesso de forma automática. Mas fique tranquilo, este documento\\n poderá ser acessado pelo seu Histórico de Documentos e diretamente no perfil do paciente em\\n <a href=\\\"https://receitadigital.com/\\\">receitadigital.com</a>\\n </p>\\n\\n <p style=\\\"font-weight: bold;text-align: justify;\\\" *ngIf=\\\"!isSuccessMsg && rennovaFeature\\\">\\n Você optou por não enviar o link de acesso de forma automática. Mas fique tranquilo, este documento\\n poderá ser acessado pelo seu Histórico de Documentos.\\n </p>\\n\\n <form [formGroup]=\\\"form\\\">\\n <label nz-checkbox formControlName=\\\"doNotShowAgainModalSuccessPrescription\\\"\\n >Não mostrar novamente</label\\n >\\n </form>\\n </div>\\n\\n <div *ngIf=\\\"resend\\\">\\n <h4 class=\\\"title\\\" [ngStyle]=\\\"{ color: colorSetting?.primary }\\\">\\n {{ title }}\\n </h4>\\n <p>Código do documento: {{ code }}</p>\\n </div>\\n</div>\\n\\n<div\\n class=\\\"modal-footer\\\"\\n [ngStyle]=\\\"{\\n 'background-color': colorSetting?.secondary,\\n color: colorSetting?.secondary\\n }\\\"\\n theme\\n>\\n <button\\n (click)=\\\"close()\\\"\\n class=\\\"btn\\\"\\n theme\\n [ngStyle]=\\\"\\n colorSetting && {\\n 'background-color': colorSetting?.primary,\\n 'border-color': colorSetting?.primary\\n }\\n \\\"\\n >\\n Ok\\n </button>\\n</div>\\n\";","export default \".title {\\n text-transform: none;\\n font-size: 40px;\\n line-height: normal;\\n}\\n\\np {\\n color: #363636;\\n font-size: 20px;\\n font-family: \\\"prolight\\\";\\n}\\n\\n.modal-body {\\n text-align: center;\\n}\\n\\n.modal-footer {\\n background-color: var(--bg-color-secondary);\\n padding: 8px;\\n}\\n\\n.modal-footer .btn {\\n font-size: 12px;\\n color: #ebebeb;\\n text-decoration: none;\\n background-color: var(--bg-color-primary);\\n border-color: var(--bg-color-primary);\\n}\\n\\n.modal-footer .btn.btn-primary {\\n background-color: #1b403a;\\n border-color: #1b403a;\\n}\\n\\n.modal-footer .btn.btn-black {\\n background-color: #363636;\\n border-color: #363636;\\n}\";","import { Injectable } from '@angular/core';\r\nimport {\r\n AbstractControl,\r\n FormArray,\r\n FormControl,\r\n FormGroup,\r\n ValidationErrors,\r\n ValidatorFn\r\n} from '@angular/forms';\r\nimport { CoreModule } from '@app/core';\r\nimport { numeroEspecial } from '@app/shared/pipes/helpers';\r\nimport { IsCompleteNamePipe } from '@app/shared/pipes/is-complete-name-pipe.pipe';\r\nimport { IsTelPipe } from '@app/shared/pipes/is-tel.pipe';\r\nimport { OnlyNumbersPipe } from '@app/shared/pipes/only-numbers.pipe';\r\nimport * as moment from 'moment';\r\n\r\n@Injectable({\r\n providedIn: CoreModule\r\n})\r\nexport class ValidationService {\r\n constructor() {}\r\n\r\n static nomeValidator(control: FormControl): { [key: string]: boolean } | null {\r\n if (control.value === '' || new IsCompleteNamePipe().transform(control.value)) {\r\n return null;\r\n } else {\r\n return { nome: true };\r\n }\r\n }\r\n\r\n static telefoneValidator(control: FormControl): { [key: string]: boolean } | null {\r\n console.log('Telefone: ', control.value);\r\n if (control.value === '') {\r\n return null;\r\n }\r\n if (numeroEspecial(control.value) && new OnlyNumbersPipe().transform(control.value).length >= 8) {\r\n return null;\r\n } else if (new IsTelPipe().transform(control.value)) {\r\n return null;\r\n } else {\r\n return { telefone: true };\r\n }\r\n }\r\n\r\n static celularValidator2(control: FormControl): { [key: string]: boolean } | null {\r\n if (control.value === '') {\r\n return null;\r\n }\r\n if (numeroEspecial(control.value) && new OnlyNumbersPipe().transform(control.value).length >= 8) {\r\n return null;\r\n } else if (new IsTelPipe().transform(control.value)) {\r\n return null;\r\n } else {\r\n return { celular: true };\r\n }\r\n }\r\n\r\n static celularValidator(control: FormControl): { [key: string]: boolean } | null {\r\n if (control.value === '') {\r\n return null;\r\n }\r\n if (new OnlyNumbersPipe().transform(control.value).length === 11) {\r\n return null;\r\n } else {\r\n return { celular: true };\r\n }\r\n }\r\n\r\n static passwordConfirmationValidator(control: FormControl): { [key: string]: boolean } | null {\r\n if (control.get('password').value === control.get('passwordConfirmation').value) {\r\n return null;\r\n }\r\n control.get('passwordConfirmation').setErrors({ doNotMatch: true });\r\n }\r\n\r\n static cepValidator(control: FormControl): { [key: string]: boolean } | null {\r\n if (!control.value || new OnlyNumbersPipe().transform(control.value).length === 8) {\r\n return null;\r\n }\r\n return { cep: true };\r\n }\r\n\r\n static emailMatch(control: FormControl): { emailMatch: boolean } {\r\n const email = control.get('email');\r\n const emailConfirmation = control.get('emailConfirmation');\r\n if (email && emailConfirmation) {\r\n const match = email.value === emailConfirmation.value;\r\n const errors = emailConfirmation.errors || {};\r\n let error = null;\r\n\r\n if (match) {\r\n delete errors.emailMatch;\r\n error = errors;\r\n } else {\r\n error = { ...errors, emailMatch: true };\r\n }\r\n\r\n if (Object.entries(error).length === 0) {\r\n error = null;\r\n }\r\n\r\n if (emailConfirmation.dirty) {\r\n emailConfirmation.setErrors(error);\r\n }\r\n\r\n return error;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n static confirmEmailValidator(confirmEmailInput: string) {\r\n let confirmEmailControl: FormControl;\r\n let emailControl: FormControl;\r\n\r\n return (control: FormControl) => {\r\n if (!control.parent) {\r\n return null;\r\n }\r\n\r\n if (!confirmEmailControl) {\r\n confirmEmailControl = control;\r\n emailControl = control.parent.get(confirmEmailInput) as FormControl;\r\n emailControl.valueChanges.subscribe(() => {\r\n confirmEmailControl.updateValueAndValidity();\r\n });\r\n }\r\n\r\n if (emailControl.value.toLocaleLowerCase() !== confirmEmailControl.value.toLocaleLowerCase()) {\r\n return { notMatch: true };\r\n }\r\n\r\n return null;\r\n };\r\n }\r\n\r\n static mandatoryContact(control: FormControl): { emailMatch: boolean } {\r\n if (control.get('cellphone').value !== '' || control.get('telephone').value !== '') {\r\n control.get('cellphone').setErrors(null);\r\n control.get('telephone').setErrors(null);\r\n\r\n return null;\r\n }\r\n control.get('cellphone').setErrors({ mandatoryContact: true });\r\n control.get('telephone').setErrors({ mandatoryContact: true });\r\n }\r\n\r\n static cpfValidator({ value }: FormControl): { [key: string]: boolean } | null {\r\n let Soma;\r\n let Resto;\r\n Soma = 0;\r\n const strCPF = value && value.replace(/[^0-9]+/g, '');\r\n if (!strCPF) {\r\n return null;\r\n }\r\n if (\r\n strCPF === '00000000000' ||\r\n strCPF === '11111111111' ||\r\n strCPF === '22222222222' ||\r\n strCPF === '33333333333' ||\r\n strCPF === '44444444444' ||\r\n strCPF === '55555555555' ||\r\n strCPF === '66666666666' ||\r\n strCPF === '77777777777' ||\r\n strCPF === '88888888888' ||\r\n strCPF === '99999999999'\r\n ) {\r\n return { cpf: true };\r\n }\r\n\r\n for (let i = 1; i <= 9; i++) {\r\n Soma = Soma + parseInt(strCPF.substring(i - 1, i)) * (11 - i);\r\n }\r\n Resto = (Soma * 10) % 11;\r\n\r\n if (Resto === 10 || Resto === 11) {\r\n Resto = 0;\r\n }\r\n if (Resto !== parseInt(strCPF.substring(9, 10))) {\r\n return { cpf: true };\r\n }\r\n\r\n Soma = 0;\r\n for (let i = 1; i <= 10; i++) {\r\n Soma = Soma + parseInt(strCPF.substring(i - 1, i)) * (12 - i);\r\n }\r\n Resto = (Soma * 10) % 11;\r\n\r\n if (Resto === 10 || Resto === 11) {\r\n Resto = 0;\r\n }\r\n if (Resto !== parseInt(strCPF.substring(10, 11))) {\r\n return { cpf: true };\r\n }\r\n return null;\r\n }\r\n\r\n static cnpjValidator(control: FormControl): { [key: string]: boolean } | null {\r\n return ValidationService.isCnpjValid(control.value) ? null : { cnpj: true };\r\n }\r\n\r\n static isCnpjValid(value) {\r\n if (!value) {\r\n return false;\r\n }\r\n\r\n // Aceita receber o valor como string, número ou array com todos os dÃgitos\r\n const isString = typeof value === 'string';\r\n const validTypes = isString || Number.isInteger(value) || Array.isArray(value);\r\n\r\n // Elimina valor em formato inválido\r\n if (!validTypes) {\r\n return false;\r\n }\r\n\r\n // Filtro inicial para entradas do tipo string\r\n if (isString) {\r\n // Limita ao máximo de 18 caracteres, para CNPJ formatado\r\n if (value.length > 18) {\r\n return false;\r\n }\r\n\r\n // Teste Regex para veificar se é uma string apenas dÃgitos válida\r\n const digitsOnly = /^\\d{14}$/.test(value);\r\n // Teste Regex para verificar se é uma string formatada válida\r\n const validFormat = /^\\d{2}.\\d{3}.\\d{3}\\/\\d{4}-\\d{2}$/.test(value);\r\n\r\n // Se o formato é válido, usa um truque para seguir o fluxo da validação\r\n if (digitsOnly || validFormat) {\r\n true;\r\n }\r\n // Se não, retorna inválido\r\n else {\r\n return false;\r\n }\r\n }\r\n\r\n // Guarda um array com todos os dÃgitos do valor\r\n const match = value.toString().match(/\\d/g);\r\n const numbers = Array.isArray(match) ? match.map(Number) : [];\r\n\r\n // Valida a quantidade de dÃgitos\r\n if (numbers.length !== 14) {\r\n return false;\r\n }\r\n\r\n // Elimina inválidos com todos os dÃgitos iguais\r\n const items = Array.from(new Set(numbers));\r\n if (items.length === 1) {\r\n return false;\r\n }\r\n\r\n // Cálculo validador\r\n const calc = x => {\r\n const slice = numbers.slice(0, x);\r\n let factor = x - 7;\r\n let sum = 0;\r\n\r\n for (let i = x; i >= 1; i--) {\r\n const n = slice[x - i];\r\n sum += n * factor--;\r\n if (factor < 2) {\r\n factor = 9;\r\n }\r\n }\r\n\r\n const result = 11 - (sum % 11);\r\n\r\n return result > 9 ? 0 : result;\r\n };\r\n\r\n // Separa os 2 últimos dÃgitos de verificadores\r\n const digits = numbers.slice(12);\r\n\r\n // Valida 1o. dÃgito verificador\r\n const digit0 = calc(12);\r\n if (digit0 !== digits[0]) {\r\n return false;\r\n }\r\n\r\n // Valida 2o. dÃgito verificador\r\n const digit1 = calc(13);\r\n return digit1 === digits[1];\r\n }\r\n\r\n static dateValidator({ format = 'DDMMYYYY', max = new Date() } = {}): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n if (control.value.length !== format.length) {\r\n return { invalidDate: true };\r\n }\r\n\r\n const date = moment(control.value, format);\r\n if (!date.isValid()) {\r\n return { invalidDate: true };\r\n }\r\n\r\n if (max && max.getTime() < date.toDate().getTime()) {\r\n return { invalidDate: true };\r\n }\r\n\r\n return null;\r\n };\r\n }\r\n\r\n static birthdateValidator(): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n const age = moment().diff(moment(control.value, 'DDMMYYYY'), 'years', false);\r\n if (age < 18) {\r\n return { invalidBirthdate: true };\r\n }\r\n return null;\r\n };\r\n }\r\n\r\n static minLengthArray(min: number): ValidatorFn {\r\n return (c: AbstractControl): { [key: string]: any } => {\r\n if (c.value.length >= min) {\r\n return null;\r\n }\r\n\r\n return { minLengthArray: true };\r\n };\r\n }\r\n\r\n static printInvalidFields(form: FormGroup) {\r\n const arr = Object.entries(form.controls)\r\n .map(e => ({ entry: e[0], value: e[1].valid }))\r\n .filter(e => !e.value);\r\n console.log(arr);\r\n }\r\n\r\n static atLeastOne(formArray: FormArray): ValidatorFn {\r\n return (control: AbstractControl): { [key: string]: boolean } | null => {\r\n return !formArray.controls.length ? { required: true } : null;\r\n };\r\n }\r\n}\r\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { HealthProfessionalService } from '@app/modules/health-professional/services/health-professional.service';\nimport { PetPatient } from '@app/shared/models/pet-patient';\nimport { BsModalRef, BsModalService } from 'ngx-bootstrap/modal';\nimport { ModalAddPatientComponent } from '../modal-add-patient/modal-add-patient.component';\nimport { nativeAsync } from '@app/shared/decorators/nativeAsync';\n\n@Component({\n selector: 'app-modal-select-pet',\n templateUrl: './modal-select-pet.component.html',\n styleUrls: ['./modal-select-pet.component.scss']\n})\nexport class ModalSelectPetComponent implements OnInit {\n @Input() pets: any;\n @Input() prescriber: any;\n @Input() responsible: any;\n @Output() submit = new EventEmitter<any>();\n\n private prescriberPets: PetPatient[] = [];\n\n constructor(\n public modalRef: BsModalRef,\n private healthProfessionalService: HealthProfessionalService,\n private modalService: BsModalService\n ) {}\n\n ngOnInit(): void {\n this.healthProfessionalService\n .getPetsByResponsible(this.responsible._id)\n .subscribe((pets: PetPatient[]) => (this.prescriberPets = pets));\n }\n @nativeAsync\n async selectOrAddPatient(pet: PetPatient) {\n if (!this.hasDependent(pet)) {\n await this.addPetPatient(pet);\n }\n this.submit.emit({\n pet,\n isAdding: false\n });\n }\n\n @nativeAsync\n async addPetPatient(pet: PetPatient) {\n try {\n await this.healthProfessionalService.addPetPatient(pet._id).toPromise();\n } catch (err) {\n console.error(err);\n }\n }\n\n hasDependent(pet: PetPatient): boolean {\n const pets = this.prescriberPets;\n return pets.some(p => p._id === pet._id);\n }\n\n showModalAddPatient() {\n const initialState = {\n prescriber: this.prescriber,\n patient: this.responsible,\n isResponsible: true,\n existingPatient: true\n };\n const modal = this.modalService.show(ModalAddPatientComponent, {\n class: 'modal-lg',\n initialState,\n backdrop: 'static',\n keyboard: false\n });\n\n modal.content.updateListPatientEvent.subscribe((pet: PetPatient) => {\n modal.hide();\n this.modalRef.hide();\n this.submit.emit({\n pet,\n isAdding: true\n });\n });\n }\n}\n","export default \"<div class=\\\"modal-header\\\" theme>\\n <h4 class=\\\"modal-title pull-left text-white\\\">\\n Selecionar Pet\\n <h5 style=\\\"color: #0b6054;\\\">Tutor(a)/Responsável: {{ responsible?.fullname }}</h5>\\n <label style=\\\"font-size: 14px; margin-top: -5px; color: #0b6054; margin-bottom: 0;\\\"\\n >Selecione o Pet na lista abaixo ou adicione um novo pet para este Tutor/Responsável</label\\n >\\n </h4>\\n\\n <button type=\\\"button\\\" class=\\\"close pull-right\\\" aria-label=\\\"Close\\\" (click)=\\\"modalRef.hide()\\\">\\n <span aria-hidden=\\\"true\\\">×</span>\\n </button>\\n</div>\\n<div class=\\\"modal-body\\\">\\n <div *ngIf=\\\"pets.length > 0\\\" style=\\\"height: 300px; overflow: auto;\\\">\\n <div\\n style=\\\"color: #0000EE; text-decoration: underline; padding: 3px; cursor: pointer;\\\"\\n *ngFor=\\\"let pet of pets\\\"\\n (click)=\\\"selectOrAddPatient(pet)\\\"\\n >\\n {{ pet.name | titlecase }}\\n </div>\\n </div>\\n <p *ngIf=\\\"pets.length == 0\\\">O Responsável/Tutor ainda não possui nenhum pet cadastrado</p>\\n</div>\\n<div class=\\\"modal-footer\\\">\\n <button class=\\\"btn btn-primary\\\" (click)=\\\"showModalAddPatient()\\\">\\n adicionar novo pet\\n </button>\\n</div>\\n\";","export default \".modal-header {\\n width: 500px;\\n font-family: \\\"probold\\\";\\n}\\n\\n.modal-body {\\n width: 100% !important;\\n margin-top: 10px;\\n display: flex;\\n flex-direction: column;\\n justify-content: center;\\n}\\n\\n.modal-body .list-item-icon .fa {\\n margin-right: 15px;\\n}\\n\\n.modal-body ul li {\\n font-family: \\\"prolight\\\";\\n font-size: 15px;\\n margin-right: 0;\\n}\\n\\n.modal-body ul li .ant-divider {\\n background: #838383;\\n}\\n\\n.modal-body ul li .ant-divider-vertical {\\n margin: 0 20px;\\n height: 20px;\\n}\\n\\n.btn-icon {\\n padding: 5px;\\n margin: 0 0 5px 5px;\\n border: 0;\\n box-shadow: none;\\n background-color: transparent;\\n}\";","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Pharmacist, Pharmacy } from '@app/shared/models';\nimport { environment } from '@env/environment';\nimport { Observable } from 'rxjs';\n\nconst PHARMACIST_URL = 'pharmacist';\nconst PHARMACIST_PHARMACY_URL = 'pharmacist/pharmacy';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PharmacistService {\n constructor(private http: HttpClient) {}\n\n save(pharmacist: any): Observable<Pharmacist> {\n pharmacist.originHost = window.location.origin;\n return this.http.post<Pharmacist>(`${environment.apiRoot}${PHARMACIST_URL}`, pharmacist);\n }\n\n update(id: string, data: any): Observable<Pharmacist> {\n return this.http.put<Pharmacist>(`${environment.apiRoot}${PHARMACIST_URL}/${id}`, data);\n }\n\n getPharmacistsByPharmacyId(pharmacyId: string, filter: any): Observable<any> {\n return this.http.get<any>(`${environment.apiRoot}${PHARMACIST_PHARMACY_URL}/${pharmacyId}`, {\n params: filter\n });\n }\n\n getPharmacistByUserId(userId: string): Observable<any> {\n return this.http.get<any>(`${environment.apiRoot}${PHARMACIST_URL}/user/${userId}`);\n }\n\n getPharmacyByCpf(cpf: string): Observable<Pharmacist> {\n return this.http.get<Pharmacist>(`${environment.apiRoot}${PHARMACIST_URL}/cpf/${cpf}`);\n }\n\n getPharmaciesByFilter(filter: any): Observable<any> {\n return this.http.get<Pharmacist[]>(`${environment.apiRoot}${PHARMACIST_URL}/filter`, {\n params: filter\n });\n }\n\n getPharmacies(pharmacistId) {\n return this.http.get<Pharmacy[]>(\n `${environment.apiRoot}${PHARMACIST_URL}/pharmacies/${pharmacistId}`\n );\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { environment } from '@env/environment';\nimport { Observable } from 'rxjs';\nimport { DataBigboostConsult } from '../models/paciente';\nimport { ResponseSearchCnpj } from '../models/reponse-search-cnpj';\n\nconst API_UL = `${environment.apiRoot}bigboost`;\n\n@Injectable({\n providedIn: 'root'\n})\nexport class BigboostService {\n constructor(private http: HttpClient) {}\n\n consultCpf(cpf: string, birthdate?: string): Observable<DataBigboostConsult> {\n const params = birthdate ? { birthdate } : {};\n return this.http.get<DataBigboostConsult>(`${API_UL}/cpf/${cpf}`, { params });\n }\n\n consultCnpj(cnpj: string): Promise<ResponseSearchCnpj> {\n return this.http.get<ResponseSearchCnpj>(`${API_UL}/cnpj/${cnpj}`).toPromise();\n }\n}\n","export const environment = {\n production: true,\n local: false,\n environment: 'prod',\n apiRoot: 'https://api.receitadigital.com/api/',\n apiV1: 'https://api.receitadigital.com/v1',\n host: 'https://app.receitadigital.com/',\n plusGApp: 'https://assine.gosigner.com.br',\n envPlusSecretKey: '637e2ffee279a02ff6d1ccec224d01db',\n envPlusSecretKeyIS: 'a5e82ce673fe7007f96fb2c2b7fce055',\n envKeySpecialty: 'fr1MzCU8RC3YPIX8prW9EalrEfoYiWqi8afdVbDk',\n envKeyMedicament: 'wBwNQLTg2t3bTFWjNhgZ01iFEnJC3Mu05D4G23IE',\n envAdminApiKey: 'RfMlZ8UB8GiRkdfeN4c5COCL58ldtauB',\n debounceTime: 300,\n maintenance: false,\n template: '',\n versionCheckURL: 'https://app.receitadigital.com/version.json',\n tempoDeValidadeDaSessao: 240,\n appRedirectV2Enabled: true,\n appV2UrlValidationDocument: 'https://app2.receitadigital.com/d/v',\n envCmSereneApiKey: 'HIFJDEFD49490440EI2B1H9C1C4DFBJ2'\n};\n","import { InjectionToken } from '@angular/core';\n\nexport const THEMES = new InjectionToken('THEMES');\nexport const ACTIVE_THEME = new InjectionToken('ACTIVE_THEME');\n\nexport interface Theme {\n title: string;\n name: string;\n favicon: string;\n properties: any;\n}\n\nexport interface ThemeOptions {\n themes: Theme[];\n active: string;\n}\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { OnlyNumbersPipe } from './only-numbers.pipe';\r\n\r\n@Pipe({\r\n name: 'formattedCep'\r\n})\r\nexport class FormattedCepPipe implements PipeTransform {\r\n transform(value: string): string {\r\n if (value && value !== '') {\r\n let cep;\r\n const receivedValue = value ? new OnlyNumbersPipe().transform(value) : value;\r\n if (receivedValue.length <= 5) {\r\n cep = receivedValue.substring(0, receivedValue.length);\r\n } else {\r\n cep = `${receivedValue.substring(0, 5)}-${receivedValue.substring(5, receivedValue.length)}`;\r\n }\r\n return cep;\r\n }\r\n }\r\n}\r\n","export enum TypePatientEnum {\n ADULT = 'ADULT',\n MINOR = 'MINOR'\n}\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { ValidationService } from '@app/core/services/validation.service';\nimport { HealthProfessionalService } from '@app/modules/health-professional/services/health-professional.service';\nimport { PatientsService } from '@app/modules/patients/services/patients.service';\nimport { DateUtils } from '@app/shared/data/DateUtils';\nimport { HealthProfessional, Patient } from '@app/shared/models';\nimport { ProfessionalType } from '@app/shared/models/professional-type.enum';\nimport { AppToastService } from '@app/shared/services/app-toast.service';\nimport { BigboostService } from '@app/shared/services/bigboost.service';\nimport { markFormGroup } from '@app/utils';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { TypePatientEnum } from '../../enum/type-patient';\nimport { nativeAsync } from '@app/shared/decorators/nativeAsync';\n\n@Component({\n selector: 'app-modal-search',\n templateUrl: './modal-search.component.html',\n styleUrls: ['./modal-search.component.scss']\n})\nexport class ModalSearchComponent implements OnInit {\n @Input() user: any;\n @Input() prescriber: HealthProfessional;\n @Input() addPatient = false;\n @Input() cpf: string;\n @Output() searchEvent = new EventEmitter();\n @Output() openModalAddPatientEvent = new EventEmitter<any>();\n @Output() openModalSelectPetEvent = new EventEmitter<any>();\n @Output() updateListPatientEvent = new EventEmitter<any>();\n @Output() loadingSpinnerEvent = new EventEmitter<boolean>();\n\n form: FormGroup;\n loading = false;\n showPetsList: boolean;\n\n enumTypePatient = TypePatientEnum;\n typePatientSelect: TypePatientEnum;\n\n alertOptions = {\n nzDuration: 5000\n };\n\n constructor(\n private fb: FormBuilder,\n public modalRef: BsModalRef,\n private patientsService: PatientsService,\n private healthProfessionalService: HealthProfessionalService,\n private notification: AppToastService,\n private bigboostService: BigboostService\n ) {}\n\n ngOnInit() {\n this.form = this.fb.group({\n cpf: [\n this.cpf,\n [\n Validators.required,\n Validators.minLength(11),\n Validators.maxLength(11),\n ValidationService.cpfValidator\n ]\n ],\n dateOfBirth: [],\n noCpf: [this.isVeterinarian]\n });\n\n this.form.get('noCpf').valueChanges.subscribe(value => {\n if (value) {\n this.form.get('dateOfBirth').clearValidators();\n } else {\n this.form.get('dateOfBirth').setValidators([Validators.required]);\n }\n });\n }\n\n get noCpf() {\n return this.form.value.noCpf;\n }\n\n get isVeterinarian(): boolean {\n return this.prescriber && this.prescriber.professionalType === ProfessionalType.VETERINARIAN;\n }\n\n @nativeAsync\n async search() {\n markFormGroup(this.form);\n if (this.form.valid) {\n const { cpf, noCpf, dateOfBirth } = this.form.value;\n this.loadingSpinnerEvent.emit(true);\n\n if (!noCpf && this.typePatientSelect === this.enumTypePatient.ADULT) {\n const patientLinked = await this.patientLinked(cpf);\n if (Boolean(patientLinked)) {\n this.notification.notify(\n 'warning',\n 'Aviso',\n 'O paciente informado já existe na sua lista de pacientes'\n );\n this.loadingSpinnerEvent.emit(false);\n this.modalRef.hide();\n return;\n }\n }\n\n try {\n const patient = await this.getPatientByCpf(cpf);\n const isUnderAge = DateUtils.isUnderAge(patient.dateOfBirth);\n if (this.isVeterinarian) {\n this.openModalSelectPetEvent.emit({ patient });\n } else if (\n !noCpf &&\n ((this.typePatientSelect === this.enumTypePatient.ADULT && !isUnderAge) ||\n (this.typePatientSelect === this.enumTypePatient.MINOR && isUnderAge))\n ) {\n await this.addPatientToProfessional(patient._id);\n this.updateListPatientEvent.emit(patient);\n this.notification.notify(\n 'warning',\n 'Aviso',\n 'O Paciente informado já existe! Adicionando o mesmo na sua lista de pacientes'\n );\n } else if (isUnderAge) {\n let mensage = '';\n if (this.typePatientSelect === this.enumTypePatient.ADULT) {\n mensage = 'O CPF é de um paciente menor, tente novamente como Paciente Menor';\n } else if (this.typePatientSelect === this.enumTypePatient.MINOR && noCpf) {\n mensage = 'CPF é de um menor, tente novamente com o CPF do responsável';\n } else {\n mensage = 'O CPF é de um paciente maior, tente novamente como Paciente Maior';\n }\n\n this.notification.notify('warning', 'Aviso', mensage);\n } else if (this.typePatientSelect === this.enumTypePatient.MINOR && !noCpf) {\n this.notification.notify(\n 'warning',\n 'Aviso',\n 'O CPF é de um paciente maior, tente novamente como Paciente Maior'\n );\n } else {\n this.openModalAddPatientEvent.emit({\n patient: patient,\n isResponsible: noCpf,\n existingPatient: true\n });\n }\n this.modalRef.hide();\n } catch (err) {\n if (err.status === 404) {\n this.consultCpf(cpf, noCpf, dateOfBirth);\n } else {\n this.notification.notify('error', 'Atenção', 'Ocorreu um erro ao tentar buscar paciente.');\n }\n }\n }\n this.loadingSpinnerEvent.emit(false);\n }\n @nativeAsync\n async consultCpf(cpf: string, noCpf: boolean, dateOfBirth?: string) {\n try {\n this.loadingSpinnerEvent.emit(true);\n const consult = await this.bigboostService.consultCpf(cpf, dateOfBirth).toPromise();\n this.modalRef.hide();\n this.loadingSpinnerEvent.emit(false);\n if (consult.menorIdade && this.enumTypePatient.ADULT === this.typePatientSelect) {\n this.notification.notify(\n 'warning',\n 'Aviso',\n 'O CPF é de um paciente menor, tente novamente como Paciente Menor'\n );\n } else if (\n !consult.menorIdade &&\n !noCpf &&\n this.enumTypePatient.MINOR === this.typePatientSelect\n ) {\n this.notification.notify(\n 'warning',\n 'Aviso',\n ' O CPF é de um paciente maior, tente novamente como Paciente Maior'\n );\n } else if (consult.menorIdade && noCpf) {\n this.notification.notify(\n 'warning',\n 'Aviso',\n 'CPF é de um menor, tente novamente com o CPF do responsável'\n );\n } else {\n this.openModalAddPatientEvent.emit({\n patient: consult,\n isResponsible: noCpf || this.isVeterinarian,\n existingPatient: false\n });\n }\n } catch (error) {\n if (error.status === 401) {\n this.notification.notify(\n 'warning',\n 'Aviso',\n 'A data de nascimento não pertence a este CPF. Favor digitar novamente.'\n );\n this.loadingSpinnerEvent.emit(false);\n this.form.get('dateOfBirth').setErrors({ nonMatchingCpf: true });\n return;\n }\n if (error.status === 404) {\n this.modalRef.hide();\n this.notification.notify(\n 'error',\n 'Error ao consultar CPF',\n 'CPF não localizado na Receita Federal. Verifique as informações digitadas e tente novamente. Em caso de dúvidas, entre em contato com nosso atendimento',\n 8000\n );\n this.loadingSpinnerEvent.emit(false);\n\n return;\n }\n this.notification.notify(\n 'error',\n 'Atenção',\n 'A importação de dados do CPF está com instabilidade, preencha manualmente ou tente novamente mais tarde.'\n );\n this.openModalAddPatientEvent.emit({\n patient: null,\n isResponsible: noCpf,\n existingPatient: false\n });\n }\n }\n\n tratarPacienteAdulto(patient: Patient) {\n const isUnderAge = DateUtils.isUnderAge(patient.dateOfBirth);\n if (isUnderAge) {\n } else {\n }\n }\n @nativeAsync\n async patientLinked(cpf: string) {\n const result = await this.healthProfessionalService\n .getPatientsByUserId(cpf, this.user._id)\n .toPromise();\n\n return result.length ? result[0] : null;\n }\n\n changeTypePatient(typePatient: TypePatientEnum) {\n this.typePatientSelect = typePatient;\n if (this.typePatientSelect === this.enumTypePatient.MINOR) {\n this.form.get('dateOfBirth').setValidators([Validators.required]);\n }\n }\n @nativeAsync\n private async addPatientToProfessional(patientId: string) {\n await this.healthProfessionalService.addPatient(this.prescriber._id, patientId).toPromise();\n }\n @nativeAsync\n private async getPatientByCpf(cpf: string) {\n return await this.patientsService.getPatientByCpf(cpf).toPromise();\n }\n}\n","export default \"<div class=\\\"modal-header\\\" theme>\\n <h4 class=\\\"modal-title pull-left text-white\\\" *ngIf=\\\"addPatient; else templateTitleSearch\\\">\\n Adicionar paciente <span *ngIf=\\\"typePatientSelect === enumTypePatient.MINOR\\\">menor</span>\\n </h4>\\n <ng-template #templateTitleSearch>\\n <h4 class=\\\"modal-title pull-left text-white\\\">\\n Buscar paciente\\n </h4>\\n </ng-template>\\n\\n <button type=\\\"button\\\" class=\\\"close pull-right\\\" aria-label=\\\"Close\\\" (click)=\\\"modalRef.hide()\\\">\\n <span aria-hidden=\\\"true\\\">×</span>\\n </button>\\n</div>\\n<div theme *ngIf=\\\"typePatientSelect || isVeterinarian; else templateSelectTypePatient\\\">\\n <form [formGroup]=\\\"form\\\" (submit)=\\\"search()\\\">\\n <div class=\\\"modal-body\\\">\\n <p>\\n Digite abaixo o CPF do\\n <span [ngClass]=\\\"{ 'red-bold': noCpf || isVeterinarian }\\\">{{\\n noCpf || isVeterinarian ? 'responsável' : 'paciente'\\n }}</span\\n >.\\n </p>\\n <div style=\\\"width: calc(100% - 50px);\\\" class=\\\"mb-3\\\">\\n <div class=\\\"d-flex flex-column\\\">\\n <div\\n class=\\\"d-flex align-items-start\\\"\\n [ngClass]=\\\"\\n !noCpf && typePatientSelect === enumTypePatient.MINOR\\n ? 'justify-content-around'\\n : 'justify-content-center'\\n \\\"\\n >\\n <div class=\\\"d-flex flex-column\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"cpf\\\">CPF <span class=\\\"mandatory\\\"> *</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n id=\\\"cpf\\\"\\n formControlName=\\\"cpf\\\"\\n placeholder=\\\"000.000.000-00\\\"\\n mask=\\\"000.000.000-00\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n </nz-form-control>\\n </nz-form-item>\\n <label\\n *ngIf=\\\"addPatient && typePatientSelect === enumTypePatient.MINOR\\\"\\n nz-checkbox\\n class=\\\"mb-3\\\"\\n formControlName=\\\"noCpf\\\"\\n >Menor sem CPF?</label\\n >\\n </div>\\n <nz-form-item\\n *ngIf=\\\"typePatientSelect === enumTypePatient.MINOR && !this.form.get('noCpf').value\\\"\\n >\\n <nz-form-label nzFor=\\\"dateOfBirth\\\"\\n >Data de nascimento<span class=\\\"mandatory\\\"> *</span></nz-form-label\\n >\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n id=\\\"dateOfBirth\\\"\\n type=\\\"date\\\"\\n formControlName=\\\"dateOfBirth\\\"\\n placeholder=\\\"DD/MM/AAAA\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n </nz-form-control>\\n </nz-form-item>\\n <button\\n class=\\\"ok-btn btn-salvar\\\"\\n [ngClass]=\\\"{ 'ml-3': noCpf || typePatientSelect === enumTypePatient.ADULT }\\\"\\n nz-button\\n type=\\\"submit\\\"\\n theme\\n >\\n Pesquisar <i class=\\\"fa\\\"></i>\\n </button>\\n </div>\\n </div>\\n </div>\\n </div>\\n </form>\\n</div>\\n\\n<ng-template #templateSelectTypePatient>\\n <div class=\\\"modal-body\\\">\\n <p>O Paciente é:</p>\\n <div\\n style=\\\"\\n display: flex;\\n justify-content: space-around;\\n margin-bottom: 20px;\\n width: calc(100% - 150px);\\n \\\"\\n >\\n <button\\n nz-button\\n theme\\n class=\\\"btn-select-type-patient\\\"\\n (click)=\\\"changeTypePatient(enumTypePatient.ADULT)\\\"\\n >\\n Adulto\\n </button>\\n <button\\n nz-button\\n theme\\n class=\\\"btn-select-type-patient\\\"\\n (click)=\\\"changeTypePatient(enumTypePatient.MINOR)\\\"\\n >\\n Menor\\n </button>\\n </div>\\n </div>\\n</ng-template>\\n\";","export default \".modal-header {\\n width: 500px;\\n font-family: \\\"probold\\\";\\n}\\n\\n.modal-body {\\n width: 100% !important;\\n margin-top: 10px;\\n padding: 0px;\\n display: flex;\\n align-items: center;\\n flex-direction: column;\\n justify-content: center;\\n}\\n\\n.modal-body input {\\n height: 40px;\\n}\\n\\n.modal-body .submit {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n position: relative;\\n z-index: 1;\\n right: -118px;\\n top: -28px;\\n font-size: 15px;\\n margin: 0px;\\n width: 30px;\\n}\\n\\n.modal-body .submit i {\\n cursor: pointer;\\n}\\n\\np {\\n color: #363636;\\n font-size: 20px;\\n font-family: \\\"prolight\\\";\\n text-align: center;\\n}\\n\\n.red-bold {\\n color: red;\\n font-weight: bold;\\n}\\n\\n.btn-salvar,\\n.btn-salvar:hover {\\n margin-top: 32px;\\n color: var(--color-white);\\n background-color: var(--bg-color-primary);\\n border-color: var(--bg-color-primary);\\n}\\n\\n.btn-select-type-patient {\\n width: 120px;\\n height: 50px;\\n font-size: 20px;\\n border: 1px solid #bcfdef;\\n background-color: #f1fffc;\\n border-radius: 10px;\\n color: #363636;\\n font-weight: 500;\\n}\\n\\n.btn-select-type-patient:hover {\\n box-shadow: 3px 2px 39px -11px #7d7d7d;\\n}\";","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { environment } from '@env/environment';\n\nexport const ATTESTATION_MODEL_URL = 'attestation-model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AttestationModelService {\n constructor(private http: HttpClient) {}\n\n getListByPrescriberId(prescriberId: any): any {\n return this.http\n .get(`${environment.apiRoot}${ATTESTATION_MODEL_URL}?prescriberId=${prescriberId}`)\n .toPromise();\n }\n\n getById(modelId: string) {\n return this.http.get(`${environment.apiRoot}${ATTESTATION_MODEL_URL}/${modelId}`).toPromise();\n }\n\n create(attestationModel: any) {\n return this.http\n .post(`${environment.apiRoot}${ATTESTATION_MODEL_URL}`, attestationModel)\n .toPromise();\n }\n\n update(attestationModel: any, modelId: string) {\n return this.http\n .put(`${environment.apiRoot}${ATTESTATION_MODEL_URL}/${modelId}`, attestationModel)\n .toPromise();\n }\n\n deleteById(modelId: string, prescriberId = '') {\n const params = prescriberId ? { prescriberId } : {};\n return this.http\n .delete(`${environment.apiRoot}${ATTESTATION_MODEL_URL}/${modelId}`, { params })\n .toPromise();\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { environment } from '@env/environment';\n\nexport const PRESCRIPTION_MODEL_URL = 'prescription-model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PrescriptionModelService {\n constructor(private http: HttpClient) {}\n\n getListByPrescriberId(prescriberId: any): any {\n const params = { prescriberId };\n return this.http.get(`${environment.apiRoot}${PRESCRIPTION_MODEL_URL}`, { params }).toPromise();\n }\n\n getById(modelId: string, prescriberId = '') {\n const params = prescriberId ? { prescriberId } : {};\n return this.http\n .get(`${environment.apiRoot}${PRESCRIPTION_MODEL_URL}/${modelId}`, { params })\n .toPromise();\n }\n\n create(prescriptionModel: any, prescriberId = '') {\n const params = prescriberId ? { prescriberId } : {};\n return this.http\n .post(`${environment.apiRoot}${PRESCRIPTION_MODEL_URL}`, prescriptionModel, { params })\n .toPromise();\n }\n\n update(prescriptionModel: any, modelId: string, prescriberId = '') {\n const params = prescriberId ? { prescriberId } : {};\n return this.http\n .put(`${environment.apiRoot}${PRESCRIPTION_MODEL_URL}/${modelId}`, prescriptionModel, { params })\n .toPromise();\n }\n\n deleteById(modelId: string, prescriberId = '') {\n const params = prescriberId ? { prescriberId } : {};\n return this.http\n .delete(`${environment.apiRoot}${PRESCRIPTION_MODEL_URL}/${modelId}`, { params })\n .toPromise();\n }\n}\n","import { PetPatient } from './../../../shared/models/pet-patient';\r\nimport { HttpClient, HttpParams } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { HealthProfessional, Patient } from '@app/shared/models';\r\nimport { User } from '@app/shared/models/decodedLoginToken';\r\nimport { environment } from '@env/environment';\r\nimport { CroppedEvent } from 'ngx-photo-editor';\r\nimport { Observable } from 'rxjs';\r\n\r\nexport const HEALTH_PROFESSIONAL_URL = 'health-professional';\r\nexport const NEW_PATIENT_URL = 'new-patient';\r\nexport const ADD_PATIENT_URL = 'add-patient';\r\nexport const REMOVE_PATIENT_URL = 'remove-patient';\r\nexport const REMOVE_PET_PATIENT_URL = 'remove-pet-patient';\r\nexport const USER_URL = 'user';\r\n\r\ninterface UploadResponse {\r\n message: string;\r\n url: string;\r\n}\r\n@Injectable({ providedIn: 'root' })\r\nexport class HealthProfessionalService {\r\n constructor(private http: HttpClient) {}\r\n\r\n save(healthProfessional: HealthProfessional): Observable<HealthProfessional> {\r\n return this.http.post<HealthProfessional>(\r\n `${environment.apiRoot}${HEALTH_PROFESSIONAL_URL}`,\r\n healthProfessional\r\n );\r\n }\r\n\r\n savePatient(healthProfessionalId: string, patient: Patient): Observable<Patient> {\r\n return this.http.post<Patient>(\r\n `${environment.apiRoot}${HEALTH_PROFESSIONAL_URL}/${healthProfessionalId}/${NEW_PATIENT_URL}`,\r\n patient\r\n );\r\n }\r\n\r\n savePetPatient(patient: Patient): Observable<Patient> {\r\n return this.http.post<Patient>(`${environment.apiRoot}${HEALTH_PROFESSIONAL_URL}/pets`, patient);\r\n }\r\n\r\n addPatient(healthProfessionalId: string, patientId: any): Observable<HealthProfessional> {\r\n return this.http.put<HealthProfessional>(\r\n `${environment.apiRoot}${HEALTH_PROFESSIONAL_URL}/${healthProfessionalId}/${ADD_PATIENT_URL}`,\r\n { patientId: patientId }\r\n );\r\n }\r\n\r\n addPetPatient(petId: string): Observable<HealthProfessional> {\r\n return this.http.put<HealthProfessional>(\r\n `${environment.apiRoot}${HEALTH_PROFESSIONAL_URL}/pets/${petId}`,\r\n { petId }\r\n );\r\n }\r\n\r\n removePatient(healthProfessionalId: string, patientId: any): Observable<HealthProfessional> {\r\n return this.http.put<HealthProfessional>(\r\n `${environment.apiRoot}${HEALTH_PROFESSIONAL_URL}/${healthProfessionalId}/${REMOVE_PATIENT_URL}`,\r\n { patientId: patientId }\r\n );\r\n }\r\n\r\n removePetPatient(healthProfessionalId: string, patientId: any): Observable<HealthProfessional> {\r\n return this.http.put<HealthProfessional>(\r\n `${environment.apiRoot}${HEALTH_PROFESSIONAL_URL}/${healthProfessionalId}/${REMOVE_PET_PATIENT_URL}`,\r\n { patientId: patientId }\r\n );\r\n }\r\n\r\n getUser(userId): Observable<User> {\r\n return this.http.get<User>(`${environment.apiRoot}${USER_URL}/${userId}`);\r\n }\r\n\r\n getHealthProfessional(id: string): Observable<HealthProfessional> {\r\n return this.http.get<HealthProfessional>(`${environment.apiRoot}${HEALTH_PROFESSIONAL_URL}/${id}`);\r\n }\r\n\r\n getHealthProfessionalByCpf(cpf: string, type?: string): Observable<HealthProfessional> {\r\n const params = type ? { type } : {};\r\n return this.http.get<HealthProfessional>(`${environment.apiRoot}${HEALTH_PROFESSIONAL_URL}/${cpf}`, {\r\n params\r\n });\r\n }\r\n\r\n getPatientsById(id: string, userId: string): Observable<Patient[]> {\r\n return this.http.get<Patient[]>(\r\n `${environment.apiRoot}${HEALTH_PROFESSIONAL_URL}/${userId}/patients/${id}`\r\n );\r\n }\r\n\r\n getPetsById(id: string, userId: string): Observable<Patient[]> {\r\n return this.http.get<Patient[]>(\r\n `${environment.apiRoot}${HEALTH_PROFESSIONAL_URL}/${userId}/pet-patients/${id}`\r\n );\r\n }\r\n\r\n getPatientsByUserId(query: string, userId: string): Observable<Patient[]> {\r\n if (query !== null && !this.onlyNumbers(query)) {\r\n query = query.toLocaleLowerCase();\r\n }\r\n return this.http.get<Patient[]>(\r\n `${environment.apiRoot}${HEALTH_PROFESSIONAL_URL}/${userId}/patients?query=${query}`\r\n );\r\n }\r\n\r\n getPatientsByUserIdWithPagination(\r\n query: string,\r\n userId: string,\r\n pageSize: number,\r\n skip: number,\r\n filtersFast: { womenOver40: boolean; minors: boolean; adults: boolean }\r\n ): Observable<any> {\r\n let params = new HttpParams()\r\n .set('skip', skip.toString())\r\n .set('pageSize', pageSize.toString())\r\n .set('womenOver40', `${filtersFast.womenOver40}`)\r\n .set('minors', `${filtersFast.minors}`)\r\n .set('adults', `${filtersFast.adults}`);\r\n\r\n if (query !== null) {\r\n if (!this.onlyNumbers(query)) {\r\n query = query.toLocaleLowerCase();\r\n }\r\n params = params.set('query', query);\r\n }\r\n return this.http.get<any>(\r\n `${environment.apiRoot}${HEALTH_PROFESSIONAL_URL}/${userId}/patients/filter`,\r\n { params }\r\n );\r\n }\r\n\r\n getPets(query: string): Observable<Patient[]> {\r\n if (query) {\r\n query = query.toLocaleLowerCase();\r\n }\r\n\r\n return this.http.get<Patient[]>(\r\n `${environment.apiRoot}${HEALTH_PROFESSIONAL_URL}/pets?query=${query}`\r\n );\r\n }\r\n\r\n getPetsWithPagination(query: string, pageSize: number, skip: number): Observable<any> {\r\n let params = new HttpParams().set('skip', skip.toString()).set('pageSize', pageSize.toString());\r\n if (query !== null) {\r\n if (!this.onlyNumbers(query)) {\r\n query = query.toLocaleLowerCase();\r\n }\r\n params = params.set('query', query);\r\n }\r\n return this.http.get<any>(`${environment.apiRoot}${HEALTH_PROFESSIONAL_URL}/pets/filter`, {\r\n params\r\n });\r\n }\r\n\r\n getPetsByResponsible(responsibleId: string) {\r\n return this.http.get<PetPatient[]>(\r\n `${environment.apiRoot}${HEALTH_PROFESSIONAL_URL}/pets?responsibleId=${responsibleId}`\r\n );\r\n }\r\n\r\n private onlyNumbers(value: string): Boolean {\r\n return value && value.match(/^[0-9]+$/) != null;\r\n }\r\n\r\n getHealthProfessionals(): Observable<HealthProfessional[]> {\r\n return this.http.get<HealthProfessional[]>(`${environment.apiRoot}${HEALTH_PROFESSIONAL_URL}`);\r\n }\r\n\r\n getHealthProfessionalsByProfessionalType(professionalType: string, filter: any): Observable<any> {\r\n return this.http.get<any>(\r\n `${environment.apiRoot}${HEALTH_PROFESSIONAL_URL}/professional-type/${professionalType}`,\r\n {\r\n params: filter\r\n }\r\n );\r\n }\r\n\r\n getHealthProfessionalsByFilter(\r\n filter: any,\r\n skip?: string,\r\n limit?: string\r\n ): Observable<HealthProfessional[]> {\r\n const params = new HttpParams()\r\n .set('filter', JSON.stringify(filter))\r\n .set('skip', skip)\r\n .set('limit', limit);\r\n\r\n return this.http.get<HealthProfessional[]>(`${environment.apiRoot}${HEALTH_PROFESSIONAL_URL}`, {\r\n params\r\n });\r\n }\r\n\r\n getHealthProfessionalByUserId(userId: string): Observable<HealthProfessional> {\r\n return this.http.get<HealthProfessional>(\r\n `${environment.apiRoot}${HEALTH_PROFESSIONAL_URL}/user/${userId}`\r\n );\r\n }\r\n addCommercialData(userId: string, commercialData: any) {\r\n return this.http.put<HealthProfessional>(\r\n `${environment.apiRoot}${HEALTH_PROFESSIONAL_URL}/add-commercial-data/${userId}`,\r\n commercialData\r\n );\r\n }\r\n\r\n update(id: string, data: any): Observable<HealthProfessional> {\r\n return this.http.put<HealthProfessional>(\r\n `${environment.apiRoot}${HEALTH_PROFESSIONAL_URL}/user/${id}`,\r\n data\r\n );\r\n }\r\n\r\n resolvePending(professionalType: string) {\r\n return this.http.put(`${environment.apiRoot}${HEALTH_PROFESSIONAL_URL}/pendency`, {\r\n professionalType\r\n });\r\n }\r\n\r\n exportData() {\r\n return this.http\r\n .get(`${environment.apiRoot}${HEALTH_PROFESSIONAL_URL}/export`)\r\n .subscribe((response: any) => {\r\n const blob = new Blob([response.data], { type: 'text/csv' });\r\n const a = document.createElement('a');\r\n a.href = URL.createObjectURL(blob);\r\n a.download = 'medicos.csv';\r\n a.click();\r\n });\r\n }\r\n\r\n uploadDocument(base64: string) {\r\n return this.http.post<UploadResponse>(\r\n `${environment.apiRoot}${HEALTH_PROFESSIONAL_URL}/upload-document`,\r\n { base64 }\r\n );\r\n }\r\n\r\n importPatients(healthProfessionalId: string, file: Blob) {\r\n const formData = new FormData();\r\n formData.append('patients', file);\r\n return this.http\r\n .post<{ count: number }>(\r\n `${environment.apiRoot}${HEALTH_PROFESSIONAL_URL}/${healthProfessionalId}/patients/import`,\r\n formData\r\n )\r\n .toPromise();\r\n }\r\n\r\n unsubscribe(id: string) {\r\n return this.http.delete(`${environment.apiRoot}${HEALTH_PROFESSIONAL_URL}/${id}`);\r\n }\r\n\r\n uploadLogo({ file, base64 }: CroppedEvent, commercialId: string) {\r\n const data = new FormData();\r\n\r\n data.append('logo', file);\r\n return this.http\r\n .put<any>(\r\n `${environment.apiRoot}${HEALTH_PROFESSIONAL_URL}/commercial-data/${commercialId}/logo`,\r\n data\r\n )\r\n .toPromise();\r\n }\r\n\r\n removeLog(commercialId: string) {\r\n return this.http.delete(\r\n `${environment.apiRoot}${HEALTH_PROFESSIONAL_URL}/commercial-data/${commercialId}/logo`\r\n );\r\n }\r\n\r\n refreshCrmStatus(healthProfessionalId: string) {\r\n return this.http\r\n .put(`${environment.apiRoot}${HEALTH_PROFESSIONAL_URL}/${healthProfessionalId}/cfm`, {})\r\n .toPromise();\r\n }\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { FormBuilder } from '@angular/forms';\r\nimport { HealthProfessionalService } from '@app/modules/health-professional/services/health-professional.service';\r\nimport { HealthProfessional, Patient, Pharmacy } from '@app/shared/models';\r\nimport { Administrator } from '@app/shared/models/admin';\r\nimport { Prescription } from '@app/shared/models/prescription';\r\nimport { environment } from '@env/environment';\r\nimport { Observable } from 'rxjs';\r\nimport { PatientsService } from '../patients/services/patients.service';\r\nimport { PharmacyService } from '../pharmacy/services/pharmacy.service';\r\nimport { LogsService } from './logs/logs.service';\r\nimport { map } from 'rxjs/operators';\r\n\r\nconst ADMIN_URL = 'administrator';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AdminService {\r\n constructor(\r\n private http: HttpClient,\r\n private fb: FormBuilder,\r\n private patientService: PatientsService,\r\n private healthProfessionalService: HealthProfessionalService,\r\n private pharmacyService: PharmacyService,\r\n private logsService: LogsService\r\n ) {}\r\n\r\n save(administrator: Administrator): Observable<Administrator> {\r\n return this.http.post<Administrator>(`${environment.apiRoot}${ADMIN_URL}`, administrator);\r\n }\r\n\r\n update(id: string, admin: any): Promise<Administrator> {\r\n return this.http.put<Administrator>(`${environment.apiRoot}${ADMIN_URL}/${id}`, admin).toPromise();\r\n }\r\n\r\n getAdmins(filter?: any): Promise<Administrator[]> {\r\n return this.http\r\n .get<Administrator[]>(`${environment.apiRoot}${ADMIN_URL}`, {\r\n params: filter\r\n })\r\n .toPromise();\r\n }\r\n\r\n deleteAdmin(id: string) {\r\n return this.http.delete(`${environment.apiRoot}${ADMIN_URL}/${id}`).toPromise();\r\n }\r\n\r\n filterData(\r\n dataType: string,\r\n filterForm: any\r\n ): Observable<HealthProfessional[] | Patient[] | Pharmacy[] | Prescription> {\r\n switch (dataType) {\r\n case 'patients':\r\n return this.patientService\r\n .getPatientsByFilter(filterForm)\r\n .pipe(map(reponse => reponse.patients));\r\n case 'doctors':\r\n return this.healthProfessionalService.getHealthProfessionalsByProfessionalType(\r\n 'doctor',\r\n filterForm\r\n );\r\n case 'dentists':\r\n return this.healthProfessionalService.getHealthProfessionalsByProfessionalType(\r\n 'dentist',\r\n filterForm\r\n );\r\n case 'pharmacies':\r\n return this.pharmacyService.getPharmaciesByFilter(filterForm);\r\n case 'logs':\r\n return this.logsService.getLogsByFilter(filterForm);\r\n }\r\n }\r\n\r\n async exportData(dataType: string, filter: any) {\r\n const params = {\r\n dataType,\r\n ...filter\r\n };\r\n const response = await this.http\r\n .get<any>(`${environment.apiRoot}${ADMIN_URL}/export`, {\r\n params,\r\n responseType: 'blob' as 'json'\r\n })\r\n .toPromise();\r\n const a = document.createElement('a');\r\n a.href = URL.createObjectURL(response);\r\n a.download = `${dataType}.xls`;\r\n a.click();\r\n }\r\n\r\n getClientApps(): Observable<any> {\r\n return this.http.get(`${environment.apiV1}/clients`);\r\n }\r\n\r\n toggleTentat(userType: string, userId: string, valor: string) {\r\n return this.http.patch(`${environment.apiRoot}${ADMIN_URL}/${userType}/${userId}/tenant`, {\r\n tenant: valor\r\n });\r\n }\r\n}\r\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { ExamType } from '@app/shared/models';\nimport { Exam } from '@app/shared/models/exam';\nimport { ExamBase } from '@app/shared/models/ExamBase';\nimport { environment } from '@env/environment';\nimport { Observable } from 'rxjs';\n\nconst EXAM_URL = 'exam';\nconst EXAM_BASE_URL = 'exams-base';\nexport const EXAM_PRESCRIBER = `exam/prescriber`;\nconst EXAM_PATIENT = `exam/patient`;\nconst TYPES_URL = 'types';\n@Injectable({\n providedIn: 'root'\n})\nexport class ExamService {\n constructor(private http: HttpClient) {}\n uploadExams(file: File, isPet: boolean) {\n const formData = new FormData();\n formData.append('file', file);\n return this.http.post(`${environment.apiRoot}${EXAM_BASE_URL}/import?isPet=${isPet}`, formData);\n }\n\n findAllByQuery(query: string, isVeterinarian: boolean) {\n return this.http.get<ExamBase[]>(\n `${environment.apiRoot}${EXAM_BASE_URL}?query=${query}&pet=${isVeterinarian}`\n );\n }\n\n public getMaterials(): Observable<string[]> {\n return this.http.get<string[]>(`${environment.apiRoot}${EXAM_URL}/${TYPES_URL}/materials`);\n }\n\n public getExamTypes(material: string, examType: string): Observable<ExamType[]> {\n return this.http.get<ExamType[]>(\n `${environment.apiRoot}${EXAM_URL}/${TYPES_URL}?material=${material}&examType=${examType}`\n );\n }\n\n public save(exam: Exam) {\n if (exam.code) {\n return this.http.put(`${environment.apiRoot}${EXAM_URL}/${exam.code}`, exam);\n }\n return this.http.post(`${environment.apiRoot}${EXAM_URL}`, exam);\n }\n\n public getAllPrescriberExams(prescriberId: string) {\n return this.http.get<Exam[]>(`${environment.apiRoot}${EXAM_URL}`, {\n params: { prescriberId }\n });\n }\n\n public getExamsByPrescriberUserId(prescriberId: string, filter: any): Observable<any> {\n return this.http.get<any>(`${environment.apiRoot}${EXAM_PRESCRIBER}/${prescriberId}`, {\n params: filter\n });\n }\n\n public getAllPatientExams(patientId: string) {\n return this.http.get<Exam[]>(`${environment.apiRoot}${EXAM_URL}`, {\n params: { patientId }\n });\n }\n\n getExamsByPatientId(patientId: string, filter: any): Observable<any> {\n return this.http.get<any>(`${environment.apiRoot}${EXAM_PATIENT}/${patientId}`, { params: filter });\n }\n\n getExam(code: string) {\n return this.http.get(`${environment.apiRoot}${EXAM_URL}/${code}`);\n }\n\n getByFilter(filter: any): Promise<Exam[]> {\n return this.http\n .get<Exam[]>(`${environment.apiRoot}${EXAM_URL}/filter`, {\n params: filter\n })\n .toPromise();\n }\n\n delete(examId: number): Observable<any> {\n return this.http.delete(`${environment.apiRoot}${EXAM_URL}/${examId}`);\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { environment } from '@env/environment';\n\nexport const ORIENTATION_MODEL_URL = 'orientation-model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class OrientationModelService {\n constructor(private http: HttpClient) {}\n\n getListByPrescriberId(prescriberId: any): any {\n return this.http\n .get(`${environment.apiRoot}${ORIENTATION_MODEL_URL}?prescriberId=${prescriberId}`)\n .toPromise();\n }\n\n getById(modelId: string) {\n return this.http.get(`${environment.apiRoot}${ORIENTATION_MODEL_URL}/${modelId}`).toPromise();\n }\n\n create(orientationModel: any) {\n return this.http\n .post(`${environment.apiRoot}${ORIENTATION_MODEL_URL}`, orientationModel)\n .toPromise();\n }\n\n update(orientationModel: any, modelId: string) {\n return this.http\n .put(`${environment.apiRoot}${ORIENTATION_MODEL_URL}/${modelId}`, orientationModel)\n .toPromise();\n }\n\n deleteById(modelId: string, prescriberId = '') {\n const params = prescriberId ? { prescriberId } : {};\n return this.http\n .delete(`${environment.apiRoot}${ORIENTATION_MODEL_URL}/${modelId}`, { params })\n .toPromise();\n }\n}\n","import { Patient } from './patient';\n\nexport class PetPatient {\n _id?: string;\n id?: string;\n name?: string;\n sex?: string;\n race?: string;\n isApproximateAge?: boolean;\n approximateAge?: number;\n dateOfBirth?: Date | string;\n weight?: number;\n fur?: string;\n species?: string;\n castration?: string;\n img?: string;\n temperament?: string;\n microchipNumber?: string;\n responsible?: Patient;\n doNotShowAgainPetDataConfirmationModal?: boolean;\n}\n","import { Observable } from 'rxjs';\nimport { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Patient } from '@app/shared/models/patient';\nimport { environment } from '@env/environment';\nimport { HealthProfessional } from '@app/shared/models/health-professional';\nimport { Infusion, InfusionRequest } from '@app/shared/models/infusion';\n\nconst INFUSIONS_URL = 'infusions';\n\nexport class Orientation {\n _id: string;\n code: string;\n createdAt: Date;\n status: string;\n type: string;\n patient: Patient;\n healthProfessional: HealthProfessional;\n title: string;\n orientations: string[];\n local: any;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class InfusionService {\n constructor(private http: HttpClient) {}\n\n save(infusion: InfusionRequest) {\n if (infusion.code) {\n return this.http.put<Infusion>(\n `${environment.apiRoot}${INFUSIONS_URL}/${infusion.code}`,\n infusion\n );\n }\n return this.http.post(`${environment.apiRoot}${INFUSIONS_URL}`, infusion);\n }\n\n getInfusion(code: string): Observable<Infusion> {\n return this.http.get<Infusion>(`${environment.apiRoot}${INFUSIONS_URL}/${code}`);\n }\n\n getByFilter(filter: any) {\n return this.http\n .get<Orientation[]>(`${environment.apiRoot}${INFUSIONS_URL}/filter`, {\n params: filter\n })\n .toPromise();\n }\n}\n","import { Component, EventEmitter, Input, OnInit, Output, TemplateRef, ViewChild } from '@angular/core';\nimport { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport { AuthService } from '@app/core/services/auth.service';\nimport { ValidationService } from '@app/core/services/validation.service';\nimport { DocumentService } from '@app/modules/document/services/document.service';\nimport { PrescriptionService } from '@app/modules/document/services/prescription.service';\nimport { PatientsService } from '@app/modules/patients/services/patients.service';\nimport { PetPatientService } from '@app/modules/patients/services/pet-patient.service';\nimport { UserService } from '@app/modules/user/user.service';\nimport { Patient } from '@app/shared/models';\nimport { ColorSetting } from '@app/shared/models/color-setting';\nimport { User } from '@app/shared/models/decodedLoginToken';\nimport { AppToastService } from '@app/shared/services/app-toast.service';\nimport { RennovaService } from '@app/shared/services/rennova.service';\nimport { StateService } from '@app/shared/services/state.service';\nimport { markFormGroup } from '@app/utils/markFormGroup';\nimport { NzModalRef, NzModalService } from 'ng-zorro-antd/modal';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { ModalResendDocumentoEmptyComponent } from '../modal-resend-documento-empty/modal-resend-documento-empty.component';\nimport { ModalSucessSendDocumentComponent } from '../modal-sucess-send-document/modal-sucess-send-document.component';\nimport { nativeAsync } from '@app/shared/decorators/nativeAsync';\nimport { environment } from '@env/environment';\nimport { DeviceDetectorService } from 'ngx-device-detector';\n\n@Component({\n selector: 'app-modal-send-document',\n templateUrl: './modal-send-document.component.html',\n styleUrls: ['./modal-send-document.component.scss']\n})\nexport class ModalSendDocumentComponent implements OnInit {\n @Input() colorSetting: ColorSetting;\n @Output() closeModal = new EventEmitter<any>();\n\n tplModal: NzModalRef;\n\n @ViewChild('tplTitle')\n tplTitle: TemplateRef<{}>;\n\n @ViewChild('tplContent', { static: true })\n tplContent: TemplateRef<{}>;\n\n @ViewChild('tplFooter', { static: true })\n tplFooter: TemplateRef<{}>;\n\n title: string;\n code: string;\n loading = false;\n resend = false;\n sendDocumentRequired = false;\n showDownloadSignedPdf = true;\n doNotShowModalSuccessSendDocument = false;\n\n cellphoneStateInitial: string;\n emailStateinitial: string;\n\n private patient: Patient;\n\n sendForm: FormGroup;\n\n constructor(\n private fb: FormBuilder,\n private modalService: NzModalService,\n private bsModalService: BsModalService,\n private patientService: PatientsService,\n private petPatientService: PetPatientService,\n private authService: AuthService,\n private prescriptionService: PrescriptionService,\n private notification: AppToastService,\n private userService: UserService,\n private documentService: DocumentService,\n private stateService: StateService,\n private router: Router,\n private rennovaService: RennovaService,\n private deviceService: DeviceDetectorService\n ) {\n this.sendForm = this.fb.group(\n {\n name: [''],\n emailChecked: [false],\n smsChecked: [false],\n whatsappChecked: [false],\n patientId: [''],\n sms: ['', Validators.compose([ValidationService.celularValidator])],\n email: ['', Validators.email],\n whatsapp: ['', Validators.compose([ValidationService.celularValidator])]\n },\n { validators: [Validators.compose([this.requiredEmail, this.requiredSms, this.requiredWhatsapp])] }\n );\n }\n\n ngOnInit() {\n if (!this.isRennova) {\n this.listenFields();\n }\n }\n\n get userLogin(): User {\n return this.authService.user();\n }\n\n get isRennova() {\n return this.stateService.data && this.stateService.data.isRennova && this.codeIsRennova();\n }\n\n get emailChecked() {\n return this.sendForm.get('emailChecked').value;\n }\n\n get smsChecked() {\n return this.sendForm.get('smsChecked').value;\n }\n\n get whatsappChecked() {\n return this.sendForm.get('whatsappChecked').value;\n }\n\n get email() {\n return this.sendForm.get('email');\n }\n\n get sms() {\n return this.sendForm.get('sms');\n }\n\n get whatsapp() {\n return this.sendForm.get('whatsapp');\n }\n\n get linkAcesso() {\n if (environment.appRedirectV2Enabled) {\n return `${environment.appV2UrlValidationDocument}/${this.code}`;\n }\n return `${window.location.origin}/p/${this.code}`;\n }\n\n requiredEmail(control: FormControl): { [key: string]: boolean } | null {\n if (!control.get('emailChecked').value) {\n control.get('email').setErrors(null);\n } else if (!control.get('email').value) {\n control.get('email').setErrors({ requiredEmail: true });\n }\n return null;\n }\n\n requiredSms(control: FormControl): { [key: string]: boolean } | null {\n if (!control.get('smsChecked').value) {\n control.get('sms').setErrors(null);\n } else if (!control.get('sms').value) {\n control.get('sms').setErrors({ requiredSms: true });\n }\n return null;\n }\n\n requiredWhatsapp(control: FormControl): { [key: string]: boolean } | null {\n if (!control.get('whatsappChecked').value) {\n control.get('whatsapp').setErrors(null);\n } else if (!control.get('whatsapp').value) {\n control.get('whatsapp').setErrors({ requiredWhatsapp: true });\n }\n return null;\n }\n\n copyLinkAccess() {\n navigator.clipboard.writeText(this.linkAcesso);\n this.notification.notify('success', 'Sucesso', 'Link de acesso copiado!');\n }\n\n @nativeAsync\n async createTplModal(\n code: string,\n patientId: string,\n {\n title = '',\n resend = false,\n sendDocumentRequired = false,\n showDownloadSignedPdf = true,\n isPet = false,\n colorSetting = null,\n doNotShowModalSuccessSendDocument = false\n } = {}\n ) {\n this.code = code;\n this.resend = resend;\n this.sendDocumentRequired = sendDocumentRequired;\n this.showDownloadSignedPdf = showDownloadSignedPdf && this.deviceService.isDesktop();\n this.colorSetting = colorSetting;\n this.doNotShowModalSuccessSendDocument = doNotShowModalSuccessSendDocument;\n\n switch (code[0]) {\n case 'P':\n case 'I':\n case 'V':\n this.title = 'Receita salva com sucesso!';\n break;\n case 'A':\n this.title = 'Atestado salvo com sucesso!';\n break;\n case 'E':\n this.title = 'Pedido de exame salvo com sucesso!';\n break;\n case 'O':\n this.title = 'Documento de orientações salvo com sucesso!';\n break;\n default: {\n if (code.substring(0, 3) === 'REN') {\n this.title = 'Documento enviado com sucesso!';\n } else {\n this.title = 'Documento salvo com sucesso!';\n }\n }\n }\n\n if (title) {\n this.title = title;\n }\n\n this.create();\n\n if (isPet) {\n await this.getPet(patientId);\n } else {\n await this.getPatient(patientId);\n }\n }\n\n private create() {\n this.tplModal = this.modalService.create({\n nzContent: this.tplContent,\n nzFooter: this.tplFooter,\n nzClosable: false,\n nzWidth: 650,\n nzMaskClosable: false,\n nzClassName: 'modal-send-document',\n nzOnOk: () => {},\n nzOnCancel: () => {}\n });\n\n this.tplModal.afterOpen.subscribe(() => {\n const elements = document.getElementsByClassName('ant-modal-footer');\n if (elements && this.colorSetting) {\n elements[0].setAttribute('style', `background-color: ${this.colorSetting.footer}`);\n }\n });\n }\n @nativeAsync\n async getPatient(patientId: string) {\n try {\n this.loading = true;\n this.patient = await this.patientService.getPatient(patientId).toPromise();\n this.initForm(this.patient);\n } catch (error) {\n console.error(error);\n }\n this.loading = false;\n }\n @nativeAsync\n async getPet(petId: string) {\n try {\n this.loading = true;\n const { responsible } = await this.petPatientService.getPetById(petId).toPromise();\n this.patient = responsible;\n if (this.patient) {\n this.initForm(this.patient);\n }\n } catch (error) {\n console.error(error);\n }\n this.loading = false;\n }\n\n private initForm(patient: Patient) {\n this.emailStateinitial = patient.user && (patient.user.emailContact || patient.user.email);\n if (!this.emailStateinitial && patient.responsible && patient.responsible.user) {\n this.emailStateinitial = patient.responsible.user.emailContact || patient.responsible.user.email;\n }\n\n if (this.emailStateinitial) {\n this.sendForm.get('email').setValue(this.emailStateinitial);\n this.sendForm.get('emailChecked').setValue(!!this.emailStateinitial);\n this.sendForm.get('email').markAsDirty();\n }\n\n this.cellphoneStateInitial = patient.cellphone || patient.telephone;\n if (patient.responsible) {\n this.cellphoneStateInitial = patient.responsible.cellphone || patient.responsible.telephone;\n }\n this.sendForm.get('sms').setValue(this.cellphoneStateInitial);\n this.sendForm.get('smsChecked').setValue(!!this.cellphoneStateInitial);\n this.sendForm.get('sms').markAsDirty();\n this.sendForm.get('whatsapp').setValue(this.cellphoneStateInitial);\n this.sendForm.get('whatsappChecked').setValue(!!this.cellphoneStateInitial);\n this.sendForm.get('whatsapp').markAsDirty();\n this.sendForm.get('patientId').setValue(patient._id);\n }\n sendRennova() {\n this.sendEmailsRennova(this.code);\n this.showModalSuccessSendDocument();\n this.tplModal.close();\n }\n @nativeAsync\n async send() {\n markFormGroup(this.sendForm);\n try {\n if (this.sendForm.valid) {\n if (this.someFieldWasChecked) {\n this.loading = true;\n const data = {\n email: this.emailChecked ? this.sendForm.value.email : undefined,\n sms: this.smsChecked ? this.sendForm.value.sms : undefined,\n name: this.sendForm.value.name,\n code: this.code,\n patientId: this.sendForm.value.patientId,\n originHost: window.location.origin\n };\n await this.patientService.sendDocument(data).toPromise();\n\n if (this.whatsappChecked) {\n await this.openWhatsAppTab();\n }\n }\n\n if (this.resend) {\n this.showModalSuccessSendDocument();\n } else if (this.userLogin) {\n this.loading = true;\n const { doNotShowAgainModalSuccessPrescription } = await this.userService\n .getControllerUserUi(this.userLogin._id)\n .toPromise();\n\n if (!doNotShowAgainModalSuccessPrescription) {\n this.showModalSuccessSendDocument();\n }\n }\n this.loading = false;\n }\n\n this.close();\n } catch (error) {\n this.loading = false;\n }\n }\n\n get someFieldWasChecked(): boolean {\n return this.smsChecked || this.whatsappChecked || this.emailChecked;\n }\n\n async downloadPrescriptionPdf(code: string) {\n try {\n this.loading = true;\n await this.prescriptionService.downloadOrGeneratePdf(code);\n this.notification.notify('success', 'Sucesso', 'Download realizado com sucesso!');\n } catch (err) {\n console.error(err);\n }\n this.loading = false;\n }\n\n @nativeAsync\n private async openWhatsAppTab() {\n const documentText = this.getDocumentText(this.code);\n const doctorName = await this.getDoctorName();\n\n const labelCpf = this.code[0] === 'V' ? 'responsável' : 'paciente';\n\n const text = `Olá, ${this.patient.name}! ${documentText} ${doctorName}.\nClique no link e visualize o documento digitando os 4 primeiros dÃgitos do CPF do ${labelCpf}: ${this.linkAcesso}\nEm caso de dúvidas, acesse o atendimento em receitadigital.com`;\n\n const whatsapp = this.sendForm.value.whatsapp;\n const phone = `55${whatsapp}`;\n const encodedText = encodeURIComponent(text);\n const url = `https://wa.me/${phone}?text=${encodedText}`;\n\n window.open(url, '_blank');\n }\n\n private getDocumentText(code: string) {\n switch (code[0]) {\n case 'P':\n case 'I':\n return 'Aqui está a sua *Receita Digital* enviada';\n case 'A':\n return 'Aqui está o seu *Atestado* enviado';\n case 'E':\n return 'Aqui está o seu *Pedido de Exame* enviado';\n case 'V':\n return this.getDocumentTextVet();\n case 'O':\n default:\n return 'Aqui está o seu *Documento* enviado';\n }\n }\n\n getDocumentTextVet() {\n switch (this.code.substring(0, 4)) {\n case 'VETE':\n return `Aqui está o pedido de *Exame(s)* do seu Pet enviado`;\n case 'VETA':\n return `Aqui está o *Atestado* do seu Pet enviado`;\n case 'VETO':\n return `Aqui está o *Documento* do seu Pet enviado`;\n default:\n return `Aqui está a *Receita Digital* do seu Pet enviada`;\n }\n }\n\n @nativeAsync\n private async getDoctorName() {\n if (this.userLogin) {\n if (this.userLogin.sex === 'F') {\n return `pela Dra. ${this.userLogin.name}`;\n }\n return `pelo Dr. ${this.userLogin.name}`;\n }\n\n const { healthProfessional } = await this.documentService.getDocument(this.code);\n if (healthProfessional.sex === 'F') {\n return `pela Dra. ${healthProfessional.name}`;\n }\n return `pelo Dr. ${healthProfessional.name}`;\n }\n\n private showModalSuccessSendDocument() {\n if (this.doNotShowModalSuccessSendDocument) {\n return;\n }\n const viewSucessMsg =\n (this.emailChecked && this.email.value) ||\n (this.smsChecked && this.sms.value) ||\n (this.whatsappChecked && this.whatsapp.value);\n\n if (!viewSucessMsg && this.resend) {\n const initialState = { code: this.code };\n const modal = this.bsModalService.show(ModalResendDocumentoEmptyComponent, {\n initialState,\n backdrop: 'static',\n keyboard: false\n });\n modal.content.afterInit.subscribe(() => {\n this.close();\n });\n\n modal.content.goBack.subscribe(() => {\n this.create();\n });\n } else {\n const initialState = {\n code: this.code,\n resend: this.resend,\n colorSetting: this.colorSetting,\n isSuccessMsg: viewSucessMsg,\n patientId: this.patient._id\n };\n const modal = this.bsModalService.show(ModalSucessSendDocumentComponent, {\n initialState,\n backdrop: 'static',\n keyboard: false\n });\n\n modal.content.closeModal.subscribe(() => {\n this.close(true);\n const route = this.router.url.split('?')[0];\n this.router.navigate([route]);\n });\n }\n }\n\n confirmClose() {\n if (this.resend) {\n this.close();\n } else {\n this.modalService.confirm({\n nzTitle: 'Atenção',\n nzContent: 'Tem certeza que deseja cancelar o envio do documento?',\n nzOkText: 'Sim',\n nzCancelText: 'Não',\n nzOnOk: () => this.close()\n });\n }\n }\n\n close(sent?: boolean) {\n this.tplModal.destroy();\n this.closeModal.emit(sent);\n }\n\n private listenFields() {\n this.sendForm.get('emailChecked').valueChanges.subscribe(checked => {\n if (!checked) {\n this.sendForm.get('email').setValue(this.emailStateinitial);\n }\n });\n\n this.sendForm.get('smsChecked').valueChanges.subscribe(checked => {\n if (!checked) {\n this.sendForm.get('sms').setValue(this.cellphoneStateInitial);\n }\n });\n\n this.sendForm.get('whatsappChecked').valueChanges.subscribe(checked => {\n if (!checked) {\n this.sendForm.get('whatsapp').setValue(this.cellphoneStateInitial);\n }\n });\n }\n\n private sendEmailsRennova(code: string) {\n this.rennovaService.sendDocument({ code }).subscribe();\n }\n\n codeIsRennova() {\n return this.code && this.code.substring(0, 3) === 'REN';\n }\n}\n","export default \"<ng-template #tplContent>\\n <div class=\\\"d-flex flex-column justify-content-center align-items-center\\\">\\n <h1 class=\\\"title\\\" [ngStyle]=\\\"{ color: colorSetting?.primary }\\\">\\n {{ title }}\\n </h1>\\n <p>Código do documento: {{ code }}</p>\\n </div>\\n\\n <div class=\\\"container send-document\\\" [formGroup]=\\\"sendForm\\\" theme *ngIf=\\\"!isRennova\\\">\\n <p>Seu paciente já pode consultar esse documento no Portal do Paciente!</p>\\n <h6 [ngStyle]=\\\"{ color: colorSetting?.secondary }\\\">\\n <span *ngIf=\\\"sendDocumentRequired; else notRequired\\\">\\n Selecione ao menos uma opção para {{ resend ? 'reenviar' : 'enviar' }} o link para o paciente.\\n </span>\\n <ng-template #notRequired>\\n Deseja {{ resend ? 'reenviar' : 'enviar' }} o link para o paciente?\\n </ng-template>\\n </h6>\\n\\n <ng-template #addOnBeforeTemplateEmail>\\n <label nz-checkbox formControlName=\\\"emailChecked\\\">E-mail</label>\\n </ng-template>\\n <ng-template #addOnBeforeTemplateSms>\\n <label nz-checkbox formControlName=\\\"smsChecked\\\">SMS</label>\\n </ng-template>\\n <ng-template #addOnBeforeTemplateWhatsapp>\\n <label nz-checkbox formControlName=\\\"whatsappChecked\\\">WhatsApp</label>\\n </ng-template>\\n <div class=\\\"inputs responsive\\\">\\n <nz-form-item>\\n <nz-form-control>\\n <nz-input-group [nzAddOnBefore]=\\\"addOnBeforeTemplateEmail\\\">\\n <input\\n nz-input\\n formControlName=\\\"email\\\"\\n placeholder=\\\"Digite um e-mail\\\"\\n [ngClass]=\\\"{ disabled: !emailChecked }\\\"\\n [ngStyle]=\\\"{\\n 'background-color': colorSetting?.inputBackground,\\n 'border-color': colorSetting?.inputBorder,\\n color: colorSetting?.primary\\n }\\\"\\n />\\n </nz-input-group>\\n <nz-form-explain *ngIf=\\\"email.dirty && email.errors\\\">\\n <ng-container *ngIf=\\\"email.hasError('requiredEmail')\\\">\\n Informe um e-mail para envio\\n </ng-container>\\n <ng-container *ngIf=\\\"!email.hasError('requiredEmail') && email.invalid\\\">\\n E-mail inválido, por favor digite um e-mail válido.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n\\n <nz-form-item>\\n <nz-form-control>\\n <nz-input-group [nzAddOnBefore]=\\\"addOnBeforeTemplateSms\\\">\\n <input\\n nz-input\\n formControlName=\\\"sms\\\"\\n mask=\\\"(00) 00000-0000\\\"\\n placeholder=\\\"Digite um número de celular\\\"\\n [ngClass]=\\\"{ disabled: !smsChecked }\\\"\\n [ngStyle]=\\\"{\\n 'background-color': colorSetting?.inputBackground,\\n 'border-color': colorSetting?.inputBorder,\\n color: colorSetting?.primary\\n }\\\"\\n />\\n </nz-input-group>\\n <nz-form-explain *ngIf=\\\"sms.dirty && sms.errors\\\">\\n <ng-container *ngIf=\\\"sms.hasError('requiredSms')\\\">\\n Informe um telefone celular para envio\\n </ng-container>\\n <ng-container *ngIf=\\\"!sms.hasError('requiredSms') && sms.hasError('celular')\\\">\\n Celular inválido, por favor digite um número válido.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n\\n <nz-form-item>\\n <nz-form-control>\\n <nz-input-group [nzAddOnBefore]=\\\"addOnBeforeTemplateWhatsapp\\\">\\n <input\\n nz-input\\n formControlName=\\\"whatsapp\\\"\\n mask=\\\"(00) 00000-0000\\\"\\n placeholder=\\\"Digite um número de celular\\\"\\n [ngClass]=\\\"{ disabled: !whatsappChecked }\\\"\\n [ngStyle]=\\\"{\\n 'background-color': colorSetting?.inputBackground,\\n 'border-color': colorSetting?.inputBorder,\\n color: colorSetting?.primary\\n }\\\"\\n />\\n </nz-input-group>\\n <nz-form-explain *ngIf=\\\"whatsapp.dirty && whatsapp.errors\\\">\\n <ng-container *ngIf=\\\"whatsapp.hasError('requiredWhatsapp')\\\">\\n Informe um telefone celular para envio\\n </ng-container>\\n <ng-container *ngIf=\\\"!whatsapp.hasError('requiredWhatsapp') && whatsapp.hasError('celular')\\\">\\n Celular inválido, por favor digite um número válido.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n </div>\\n <div class=\\\"d-flex flex-column justify-content-start align-items-start\\\">\\n <h6 class=\\\"d-block\\\" *ngIf=\\\"showDownloadSignedPdf\\\">\\n Para baixar o PDF assinado,\\n <a class=\\\"link\\\" href=\\\"javascript:;\\\" (click)=\\\"downloadPrescriptionPdf(code)\\\">clique aqui!</a>\\n </h6>\\n <div class=\\\"row\\\">\\n <div class=\\\"col-6-md pl-3\\\">\\n Link de acesso ao documento:\\n </div>\\n <div class=\\\"col-6-md pl-md-1 pl-3\\\">\\n <a class=\\\"link\\\" [href]=\\\"linkAcesso\\\" target=\\\"_blank\\\">{{ linkAcesso }}</a>\\n <i\\n (click)=\\\"copyLinkAccess()\\\"\\n style=\\\"cursor: pointer;\\\"\\n class=\\\"ml-2\\\"\\n nz-icon\\n nzType=\\\"copy\\\"\\n nzTheme=\\\"outline\\\"\\n ></i>\\n </div>\\n </div>\\n </div>\\n</ng-template>\\n\\n<ng-template #tplFooter>\\n <div\\n class=\\\"container d-flex align-items-end flex-column modal-footer\\\"\\n theme\\n [ngStyle]=\\\"{\\n 'background-color': colorSetting?.secondary,\\n color: colorSetting?.secondary\\n }\\\"\\n >\\n <div class=\\\"row\\\">\\n <button\\n (click)=\\\"isRennova ? sendRennova() : send()\\\"\\n class=\\\"btn btn-ok\\\"\\n [disabled]=\\\"\\n !sendForm.valid || (sendDocumentRequired && !emailChecked && !smsChecked && !whatsappChecked)\\n \\\"\\n [ngStyle]=\\\"{\\n 'background-color': colorSetting?.primary,\\n 'border-color': colorSetting?.primary\\n }\\\"\\n >\\n Finalizar\\n </button>\\n </div>\\n </div>\\n</ng-template>\\n<ngx-loading [show]=\\\"loading\\\" [config]=\\\"{ backdropBorderRadius: '3px' }\\\"></ngx-loading>\\n\";","export default \".title {\\n text-transform: none;\\n font-size: 40px;\\n line-height: normal;\\n}\\n@media (max-width: 1025px) {\\n .title {\\n font-size: 22px;\\n line-height: 24px;\\n }\\n}\\np {\\n color: #363636;\\n font-family: \\\"prolight\\\";\\n font-size: 18px;\\n text-align: center;\\n}\\n.print-without-sign {\\n font-size: 12px;\\n color: #1b403a;\\n margin-bottom: 0;\\n}\\n.print-without-sign a:not(.btn) {\\n font-family: \\\"problack\\\";\\n text-decoration: underline;\\n}\\n.modal-footer {\\n padding: 10px 32px;\\n background-color: var(--bg-modal-header);\\n}\\n.modal-footer .btn {\\n font-size: 12px;\\n}\\n.link {\\n color: blue;\\n text-decoration: underline;\\n}\\n::ng-deep .modal-send-document .ant-modal-content {\\n border-radius: 10px;\\n box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16);\\n}\\n::ng-deep .modal-send-document .ant-modal-confirm .ant-modal-confirm-btns {\\n float: none;\\n}\\n::ng-deep .modal-send-document .ant-input-group-addon {\\n width: 93px;\\n}\\n::ng-deep .modal-send-document .ant-modal-footer {\\n border-radius: 0 0 10px 10px;\\n border-top: 0;\\n padding: 0 !important;\\n}\\n@media (max-width: 1025px) {\\n .container.send-document {\\n padding: 0;\\n }\\n .container.send-document .sub-title {\\n font-size: 18px;\\n line-height: 18px;\\n }\\n\\n .inputs.responsive {\\n padding: 0;\\n }\\n .inputs.responsive .ant-form-item label {\\n margin-top: 0px;\\n font-size: 14px !important;\\n }\\n}\\n.disabled {\\n pointer-events: none;\\n opacity: 0.6;\\n -webkit-appearance: none;\\n -moz-appearance: none;\\n}\";","import { Component, OnDestroy, OnInit } from '@angular/core';\nimport { FormBuilder } from '@angular/forms';\nimport { AppToastService } from '@app/shared/services/app-toast.service';\nimport { NzModalRef } from 'ng-zorro-antd/modal';\nimport { ReplaySubject } from 'rxjs';\n\n@Component({\n selector: 'app-modal-alert',\n templateUrl: './modal-alert.component.html',\n styleUrls: ['./modal-alert.component.scss']\n})\nexport class ModalAlertComponent implements OnInit, OnDestroy {\n medicament: any;\n\n private destroyed$ = new ReplaySubject<boolean>();\n\n constructor(private fb: FormBuilder, private ref: NzModalRef, private notification: AppToastService) {}\n\n ngOnInit() {\n console.log(this.medicament);\n }\n\n ngOnDestroy(): void {\n this.destroyed$.next(true);\n this.destroyed$.complete();\n }\n cancel() {\n this.ref.close();\n }\n\n remove(medicament: any) {\n medicament.checked = false;\n this.ref.close();\n }\n}\n","export default \"<button type=\\\"button\\\" class=\\\"close pull-right\\\" aria-label=\\\"Close\\\" (click)=\\\"cancel()\\\">\\n <span aria-hidden=\\\"true\\\">×</span>\\n</button>\\n<h1 class=\\\"title-alert\\\">Atenção</h1>\\n\\n<p class=\\\"alert-message mb-1\\\">\\n Deseja excluir o medicamento\\n</p>\\n\\n<span class=\\\"medicament-info\\\">\\n {{ medicament.name }}\\n</span>\\n\\n<p class=\\\"alert-message mb-1\\\">\\n da sua lista de dispensação?\\n</p>\\n\\n<p class=\\\"text-message mb-1\\\">\\n Você pode excluir um medicamento da sua lista de dispensação caso o comprador/paciente não vá\\n comprá-lo. Ao fazer isso, o registro da dispensação não será efetuado no sistema. Mas fique tranquilo!\\n Você poderá incluir este medicamento novamente em uma dispensação futura!\\n</p>\\n\\n<div class=\\\"row baseboard mb-3 pb-3 mt-3 pt-3\\\">\\n <div class=\\\"col-6\\\">\\n <button type=\\\"button\\\" class=\\\"btn btn-icon text-capitalize btn-keep\\\" (click)=\\\"cancel()\\\">\\n <span class=\\\"btn-inner--text\\\">MANTER MEDICAMENTO</span>\\n </button>\\n </div>\\n\\n <div class=\\\"col-6\\\">\\n <button type=\\\"button\\\" class=\\\"btn btn-icon text-capitalize btn-remove\\\" (click)=\\\"remove(medicament)\\\">\\n <span class=\\\"btn-inner--text\\\">EXCLUIR MEDICAMENTO</span>\\n </button>\\n </div>\\n</div>\\n\";","export default \".title-alert {\\n color: #1ae0c2;\\n font-size: 45px;\\n text-align: center;\\n font-family: \\\"Source Sans Pro\\\", sans-serif;\\n font-weight: 800;\\n}\\n\\n.alert-message {\\n color: #0b6054;\\n font-size: 25px;\\n text-align: center;\\n font-family: \\\"Source Sans Pro\\\", sans-serif;\\n}\\n\\n.text-message {\\n color: #363636;\\n font-size: 14px;\\n text-align: center;\\n font-family: \\\"Source Sans Pro\\\", sans-serif;\\n}\\n\\n.baseboard {\\n background-color: #1ae0c2;\\n margin-left: -24px;\\n margin-right: -24px;\\n}\\n\\n.btn-keep {\\n color: #363636;\\n background-color: white;\\n border-color: white;\\n}\\n\\n.btn-remove {\\n background-color: #1c413a;\\n color: #fff;\\n}\\n\\n.medicament-info {\\n color: #0b6054;\\n font-size: 25px;\\n font-family: \\\"Source Sans Pro\\\", sans-serif;\\n font-weight: 800;\\n}\\n\\n::ng-deep .modal-alert .ant-modal-body {\\n text-align: center;\\n padding-bottom: 0;\\n}\\n\\n::ng-deep .modal-alert .ant-modal-content {\\n border-radius: 10px;\\n box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16);\\n max-height: 460px;\\n}\\n\\n::ng-deep .modal-alert .ant-modal-footer {\\n border-radius: 0 0 10px 10px;\\n border-top: 0;\\n padding: 0 !important;\\n}\";","import { Injectable, Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'isCpf'\r\n})\r\n@Injectable()\r\nexport class IsCpfPipe implements PipeTransform {\r\n transform(value: string): any {\r\n if (value) {\r\n value = value.toString().replace(/[^\\d]+/g, '');\r\n let numeros, digitos, soma, i, resultado, digitos_iguais;\r\n\r\n digitos_iguais = 1;\r\n\r\n if (value.length < 11) {\r\n return false;\r\n }\r\n\r\n for (i = 0; i < value.length - 1; i++) {\r\n if (value.charAt(i) !== value.charAt(i + 1)) {\r\n digitos_iguais = 0;\r\n break;\r\n }\r\n }\r\n\r\n if (!digitos_iguais) {\r\n numeros = value.substring(0, 9);\r\n digitos = value.substring(9);\r\n soma = 0;\r\n for (let b = 10; b > 1; b--) {\r\n soma += numeros.charAt(10 - b) * b;\r\n }\r\n\r\n resultado = soma % 11 < 2 ? 0 : 11 - (soma % 11);\r\n if (resultado !== parseFloat(digitos.charAt(0))) {\r\n return false;\r\n }\r\n numeros = value.substring(0, 10);\r\n soma = 0;\r\n\r\n for (let a = 11; a > 1; a--) {\r\n soma += numeros.charAt(11 - a) * a;\r\n }\r\n resultado = soma % 11 < 2 ? 0 : 11 - (soma % 11);\r\n return resultado === parseFloat(digitos.charAt(1));\r\n } else {\r\n return false;\r\n }\r\n } else {\r\n return false;\r\n }\r\n }\r\n}\r\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { ProtocolGroup } from '@app/shared/models/protocol';\nimport { environment } from '@env/environment';\nimport { map } from 'rxjs/operators';\n\n@Injectable({ providedIn: 'root' })\nexport class VictaProtocolService {\n constructor(private http: HttpClient) {}\n\n getProtocols(professionalType: string, params = {}) {\n return this.http\n .get<ProtocolGroup[]>(`${environment.apiRoot}victa-protocols`, { params })\n .pipe(\n map(groups => {\n groups.forEach(group => {\n group.protocols = group.protocols.filter(({ professionals }) =>\n professionals.includes(professionalType)\n );\n });\n return groups.filter(({ protocols }) => protocols.length);\n })\n )\n .toPromise();\n }\n\n import(file: File) {\n const formData = new FormData();\n formData.append('file', file);\n return this.http.post(`${environment.apiRoot}victa-protocols/import`, formData).toPromise();\n }\n}\n","import { Component, EventEmitter, OnInit, Output } from '@angular/core';\nimport { AppToastService } from '@app/shared/services/app-toast.service';\nimport { RennovaService } from '@app/shared/services/rennova.service';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { ProductRennova } from './../../models/product-rennova';\n\n@Component({\n selector: 'app-modal-add-product-rennova',\n templateUrl: './modal-add-product-rennova.component.html',\n styleUrls: ['./modal-add-product-rennova.component.scss']\n})\nexport class ModalAddProductRennovaComponent implements OnInit {\n products: ProductRennova[] = [];\n loading = false;\n hasError = false;\n\n @Output() selectEvent = new EventEmitter<ProductRennova>();\n\n constructor(\n public modalRef: BsModalRef,\n private rennovaService: RennovaService,\n private notification: AppToastService\n ) {}\n\n ngOnInit(): void {\n this.findAllProducts();\n }\n findAllProducts() {\n this.loading = true;\n this.rennovaService.findAll().subscribe(\n products => {\n this.products = products;\n },\n () => {\n this.notification.notify('error', 'Ocorreu um erro ao buscar produtos da rennova.', '');\n this.modalRef.hide();\n },\n () => {\n this.loading = false;\n }\n );\n }\n\n activeChange(product: ProductRennova) {\n product.active = !product.active;\n }\n\n onSelect(product: ProductRennova) {\n this.selectEvent.emit(product);\n this.modalRef.hide();\n }\n}\n","export default \"<div class=\\\"modal-container\\\">\\n <div theme class=\\\"modal-header\\\">\\n <h4 class=\\\"modal-title pull-left text-white\\\">Produtos Rennova</h4>\\n <button type=\\\"button\\\" class=\\\"close pull-right\\\" aria-label=\\\"Close\\\" (click)=\\\"modalRef.hide()\\\">\\n <span aria-hidden=\\\"true\\\">×</span>\\n </button>\\n </div>\\n <div class=\\\"align-flex-center\\\" *ngIf=\\\"loading\\\">\\n <nz-spin nzSimple></nz-spin>\\n </div>\\n <div class=\\\"modal-body\\\" *ngIf=\\\"!loading && products?.length > 0\\\">\\n <nz-list nzBordered>\\n <nz-list-item *ngFor=\\\"let product of products\\\">\\n <div class=\\\"d-flex flex-column w-100\\\">\\n <div class=\\\"item-container align-items-center\\\">\\n <div class=\\\"d-flex align-items-center\\\">\\n <div (click)=\\\"activeChange(product)\\\" style=\\\"padding: 10px;\\\">\\n <i nz-icon nzType=\\\"right\\\" *ngIf=\\\"!product.active\\\" nzTheme=\\\"outline\\\"></i>\\n <i nz-icon nzType=\\\"down\\\" *ngIf=\\\"product.active\\\" nzTheme=\\\"outline\\\"></i>\\n </div>\\n <span style=\\\"margin-top: 3px; font-weight: 600;\\\"> {{ product.name }}</span>\\n </div>\\n <button class=\\\"ok-btn btn-selecionar\\\" nz-button (click)=\\\"onSelect(product)\\\">\\n Adicionar\\n </button>\\n </div>\\n <div class=\\\"p-3\\\" *ngIf=\\\"product?.active\\\">\\n <div *ngFor=\\\"let item of product.items\\\">\\n <h6>{{ item.name }}</h6>\\n <ul *ngIf=\\\"item.descriptions.length > 0\\\">\\n <li *ngFor=\\\"let obj of item.descriptions\\\">\\n <div class=\\\"d-flex\\\">\\n <span style=\\\"text-align: justify; font-family: monospace;\\\">\\n {{ obj?.fullDescription }}\\n </span>\\n </div>\\n </li>\\n </ul>\\n </div>\\n <p style=\\\"font-weight: 700; text-align: justify;\\\">{{ product.observation }}</p>\\n </div>\\n </div>\\n </nz-list-item>\\n </nz-list>\\n </div>\\n <div class=\\\"align-flex-center\\\" *ngIf=\\\"!loading && products?.length === 0\\\">\\n <h5>Nenhum produto cadastrado</h5>\\n </div>\\n</div>\\n\";","export default \".modal-container {\\n width: 374px;\\n}\\n@media (min-width: 1025px) {\\n .modal-container {\\n width: 500px;\\n }\\n}\\n.modal-container .modal-header {\\n font-family: \\\"probold\\\";\\n}\\n.modal-container .modal-body {\\n padding: 10px;\\n}\\n.modal-container .item-container {\\n flex: 1;\\n display: flex;\\n align-items: center;\\n justify-content: space-between;\\n border-bottom: 1px solid #dcdcdc;\\n background-color: #dcdcdc;\\n min-height: 40px;\\n}\\n.modal-container .item-container i {\\n cursor: pointer;\\n}\\n.modal-container .item-container .ant-list-item::ng-deep {\\n padding: 0;\\n}\\n.modal-container .ok-btn {\\n background-color: #00d3b2;\\n color: white;\\n margin-right: 15px;\\n border: none;\\n}\\n.align-flex-center {\\n height: 42px;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n}\\n::ng-deep .ant-list-bordered .ant-list-item {\\n padding: 0;\\n}\\n::ng-deep .ant-spin-dot-item {\\n background-color: #095147;\\n}\";","import { AfterViewInit, Directive, ElementRef, HostBinding, HostListener } from '@angular/core';\r\n\r\n@Directive({\r\n selector: 'textarea[appAutoSize]'\r\n})\r\nexport class AutoSizeDirective implements AfterViewInit {\r\n @HostBinding('class.overflow-hidden') className = true;\r\n @HostBinding('attr.rows') rows = 1;\r\n\r\n constructor(private elem: ElementRef) {}\r\n\r\n public ngAfterViewInit() {\r\n this.resize();\r\n }\r\n\r\n @HostListener('input')\r\n private resize() {\r\n const textarea = this.elem.nativeElement as HTMLTextAreaElement;\r\n // Reset textarea height to auto that correctly calculate the new height\r\n textarea.style.height = 'auto';\r\n // Set new height\r\n textarea.style.height = `${textarea.scrollHeight}px`;\r\n }\r\n}\r\n","import { Directive, ElementRef, HostListener } from '@angular/core';\r\nimport { FormattedCepPipe } from '@app/shared/pipes/formatted-cep.pipe';\r\nimport { NgControl } from '@angular/forms';\r\n\r\n@Directive({\r\n selector: '[appCep]'\r\n})\r\nexport class CepDirective {\r\n constructor(private ngControl: NgControl) {}\r\n\r\n private formattedCep = new FormattedCepPipe();\r\n\r\n @HostListener('input', ['$event'])\r\n onInputChange(event: Event | any) {\r\n this.cep(event.target.value);\r\n }\r\n\r\n cep(value: string): void {\r\n this.ngControl.control.setValue(this.formattedCep.transform(value));\r\n }\r\n}\r\n","import { Directive, ElementRef, HostBinding, Input, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { AbstractControl, NG_VALIDATORS, Validator } from '@angular/forms';\r\nimport * as CNPJ from '@fnando/cnpj';\r\nimport * as CPF from '@fnando/cpf';\r\nimport { OnlyNumbersPipe } from '@app/shared/pipes';\r\n\r\n@Directive({\r\n selector: `[appCPF],[cnpj]`,\r\n providers: [\r\n {\r\n multi: true,\r\n provide: NG_VALIDATORS,\r\n useExisting: CpfCnpjDirective\r\n }\r\n ]\r\n})\r\nexport class CpfCnpjDirective implements Validator, OnChanges {\r\n @Input()\r\n cpf: string;\r\n @Input()\r\n cnpj: string;\r\n private inputMaxLength: number;\r\n private onChange: () => void;\r\n private onlyNumbersPipe = new OnlyNumbersPipe();\r\n\r\n constructor(private el: ElementRef) {}\r\n\r\n @HostBinding('attr.maxlength')\r\n get maxlength() {\r\n return this.inputMaxLength;\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (this.onChange) {\r\n this.onChange();\r\n const { cnpj, cpf } = changes;\r\n this._inputChange((cnpj || ({} as any)).currentValue || (cpf || ({} as any)).currentValue);\r\n }\r\n }\r\n\r\n validate(c: AbstractControl): { [key: string]: any } {\r\n if (this.cpf) {\r\n const cpf = CPF.isValid(this.cpf);\r\n return cpf ? null : { cpf: true };\r\n } else if (this.cnpj) {\r\n const cnpj = CNPJ.isValid(this.cnpj);\r\n return cnpj ? null : { cnpj: true };\r\n }\r\n }\r\n\r\n registerOnValidatorChange?(fn: () => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n private _inputChange(text: string) {\r\n const value = this.onlyNumbersPipe.transform(text);\r\n const { nativeElement } = this.el;\r\n if (value) {\r\n if (this.cnpj) {\r\n nativeElement.value = CNPJ.format(value);\r\n this.inputMaxLength = 14;\r\n } else {\r\n nativeElement.value = CPF.format(value);\r\n this.inputMaxLength = 11;\r\n }\r\n }\r\n }\r\n}\r\n","import { Directive, ElementRef, HostListener, Input, OnChanges, SimpleChanges } from '@angular/core';\n\n@Directive({\n selector: '[appDigitOnly],[digitOnly]'\n})\nexport class DigitOnlyDirective implements OnChanges {\n private hasDecimalPoint = false;\n private navigationKeys = [\n 'Backspace',\n 'Delete',\n 'Tab',\n 'Escape',\n 'Enter',\n 'Home',\n 'End',\n 'ArrowLeft',\n 'ArrowRight',\n 'Clear',\n 'Copy',\n 'Paste'\n ];\n\n @Input() decimal = false;\n @Input() decimalSeparator = '.';\n @Input() min = -Infinity;\n @Input() max = Infinity;\n @Input() pattern?: string | RegExp;\n private regex: RegExp;\n inputElement: HTMLInputElement;\n\n constructor(public el: ElementRef) {\n this.inputElement = el.nativeElement;\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.pattern) {\n this.regex = this.pattern ? RegExp(this.pattern) : null;\n }\n\n if (changes.min) {\n const maybeMin = Number(this.min);\n this.min = isNaN(maybeMin) ? -Infinity : maybeMin;\n }\n\n if (changes.max) {\n const maybeMax = Number(this.max);\n this.max = isNaN(maybeMax) ? Infinity : maybeMax;\n }\n }\n\n @HostListener('keydown', ['$event'])\n onKeyDown(e: KeyboardEvent): any {\n if (\n this.navigationKeys.indexOf(e.key) > -1 || // Allow: navigation keys: backspace, delete, arrows etc.\n (e.key === 'a' && e.ctrlKey === true) || // Allow: Ctrl+A\n (e.key === 'c' && e.ctrlKey === true) || // Allow: Ctrl+C\n (e.key === 'v' && e.ctrlKey === true) || // Allow: Ctrl+V\n (e.key === 'x' && e.ctrlKey === true) || // Allow: Ctrl+X\n (e.key === 'a' && e.metaKey === true) || // Allow: Cmd+A (Mac)\n (e.key === 'c' && e.metaKey === true) || // Allow: Cmd+C (Mac)\n (e.key === 'v' && e.metaKey === true) || // Allow: Cmd+V (Mac)\n (e.key === 'x' && e.metaKey === true) // Allow: Cmd+X (Mac)\n ) {\n // let it happen, don't do anything\n return;\n }\n\n let newValue = '';\n\n if (this.decimal && e.key === this.decimalSeparator) {\n newValue = this.forecastValue(e.key);\n if (newValue.split(this.decimalSeparator).length > 2) {\n // has two or more decimal points\n e.preventDefault();\n return;\n } else {\n this.hasDecimalPoint = newValue.indexOf(this.decimalSeparator) > -1;\n return; // Allow: only one decimal point\n }\n }\n\n // Ensure that it is a number and stop the keypress\n if (e.key === ' ' || isNaN(Number(e.key))) {\n e.preventDefault();\n return;\n }\n\n newValue = newValue || this.forecastValue(e.key);\n // check the input pattern RegExp\n if (this.regex) {\n if (!this.regex.test(newValue)) {\n e.preventDefault();\n return;\n }\n }\n\n const newNumber = Number(newValue);\n if (newNumber > this.max || newNumber < this.min) {\n e.preventDefault();\n }\n }\n\n @HostListener('paste', ['$event'])\n onPaste(event: any): void {\n let pastedInput: string;\n if (window['clipboardData']) {\n // Browser is IE\n pastedInput = window['clipboardData'].getData('text');\n } else if (event.clipboardData && event.clipboardData.getData) {\n // Other browsers\n pastedInput = event.clipboardData.getData('text/plain');\n }\n\n this.pasteData(pastedInput);\n event.preventDefault();\n }\n\n @HostListener('drop', ['$event'])\n onDrop(event: DragEvent): void {\n const textData = event.dataTransfer.getData('text');\n this.inputElement.focus();\n this.pasteData(textData);\n event.preventDefault();\n }\n\n private pasteData(pastedContent: string): void {\n const sanitizedContent = this.sanitizeInput(pastedContent);\n const pasted = document.execCommand('insertText', false, sanitizedContent);\n if (!pasted) {\n if (this.inputElement.setRangeText) {\n const { selectionStart: start, selectionEnd: end } = this.inputElement;\n this.inputElement.setRangeText(sanitizedContent, start, end, 'end');\n } else {\n // Browser does not support setRangeText, e.g. IE\n this.insertAtCursor(this.inputElement, sanitizedContent);\n }\n }\n if (this.decimal) {\n this.hasDecimalPoint = this.inputElement.value.indexOf(this.decimalSeparator) > -1;\n }\n }\n\n // The following 2 methods were added from the below article for browsers that do not support setRangeText\n // https://stackoverflow.com/questions/11076975/how-to-insert-text-into-the-textarea-at-the-current-cursor-position\n private insertAtCursor(myField: HTMLInputElement, myValue: string): void {\n const startPos = myField.selectionStart;\n const endPos = myField.selectionEnd;\n\n myField.value =\n myField.value.substring(0, startPos) +\n myValue +\n myField.value.substring(endPos, myField.value.length);\n\n const pos = startPos + myValue.length;\n myField.focus();\n myField.setSelectionRange(pos, pos);\n\n this.triggerEvent(myField, 'input');\n }\n\n private triggerEvent(el: HTMLInputElement, type: string): void {\n if ('createEvent' in document) {\n // modern browsers, IE9+\n const e = document.createEvent('HTMLEvents');\n e.initEvent(type, false, true);\n el.dispatchEvent(e);\n }\n }\n // end stack overflow code\n\n private sanitizeInput(input: string): string {\n let result = '';\n if (this.decimal && this.isValidDecimal(input)) {\n const regex = new RegExp(`[^0-9${this.decimalSeparator}]`, 'g');\n result = input.replace(regex, '');\n } else {\n result = input.replace(/[^0-9]/g, '');\n }\n\n const maxLength = this.inputElement.maxLength;\n if (maxLength > 0) {\n // the input element has maxLength limit\n const allowedLength = maxLength - this.inputElement.value.length;\n result = allowedLength > 0 ? result.substring(0, allowedLength) : '';\n }\n return result;\n }\n\n private isValidDecimal(string: string): boolean {\n if (!this.hasDecimalPoint) {\n return string.split(this.decimalSeparator).length <= 2;\n } else {\n // the input element already has a decimal separator\n const selectedText = this.getSelection();\n if (selectedText && selectedText.indexOf(this.decimalSeparator) > -1) {\n return string.split(this.decimalSeparator).length <= 2;\n } else {\n return string.indexOf(this.decimalSeparator) < 0;\n }\n }\n }\n\n private getSelection(): string {\n return this.inputElement.value.substring(\n this.inputElement.selectionStart,\n this.inputElement.selectionEnd\n );\n }\n\n private forecastValue(key: string): string {\n const selectionStart = this.inputElement.selectionStart;\n const selectionEnd = this.inputElement.selectionEnd;\n const oldValue = this.inputElement.value;\n const selection = oldValue.substring(selectionStart, selectionEnd);\n return selection\n ? oldValue.replace(selection, key)\n : oldValue.substring(0, selectionStart) + key + oldValue.substring(selectionStart);\n }\n}\n","import { Directive, ElementRef, Input, AfterViewInit } from '@angular/core';\n\n@Directive({\n selector: '[appFocus]'\n})\nexport class FocusDirective implements AfterViewInit {\n @Input() focus: boolean;\n\n constructor(private elementRef: ElementRef) {}\n\n ngAfterViewInit() {\n if (this.focus) {\n this.elementRef.nativeElement.focus();\n }\n }\n}\n","import { Directive, HostListener } from '@angular/core';\n\n@Directive({\n selector: '[onlyNumbers]'\n})\nexport class OnlyNumbersDirective {\n regexStr = '^[0-9]*$';\n\n @HostListener('keydown', ['$event'])\n onKeyDown(event: KeyboardEvent) {\n if (\n [46, 8, 9, 27, 13, 110, 190].indexOf(event.keyCode) !== -1 ||\n // Allow: Ctrl+A\n (event.keyCode == 65 && event.ctrlKey === true) ||\n // Allow: Ctrl+C\n (event.keyCode == 67 && event.ctrlKey === true) ||\n // Allow: Ctrl+V\n (event.keyCode == 86 && event.ctrlKey === true) ||\n // Allow: Ctrl+X\n (event.keyCode == 88 && event.ctrlKey === true) ||\n // Allow: home, end, left, right\n (event.keyCode >= 35 && event.keyCode <= 39)\n ) {\n // let it happen, don't do anything\n return;\n }\n const ch = String.fromCharCode(event.keyCode);\n const regEx = new RegExp(this.regexStr);\n if (regEx.test(ch)) {\n return;\n } else {\n event.preventDefault();\n }\n }\n}\n","import { Directive, ElementRef, HostBinding, HostListener, Renderer2 } from '@angular/core';\r\nimport { AbstractControl, NG_VALIDATORS, Validator } from '@angular/forms';\r\nimport { IsCpfPipe } from '@app/shared/pipes/is-cpf.pipe';\r\nimport * as CPF from '@fnando/cpf';\r\nimport { IsCompleteNamePipe, OnlyNumbersPipe } from '@app/shared/pipes';\r\n\r\n@Directive({\r\n selector: '[appPatientSearch]',\r\n providers: [\r\n {\r\n multi: true,\r\n provide: NG_VALIDATORS,\r\n useExisting: PatientSearchDirective\r\n }\r\n ]\r\n})\r\nexport class PatientSearchDirective implements Validator {\r\n private inputMaxLength: number;\r\n private onChange: (value: string) => void;\r\n private isCPF = new IsCpfPipe();\r\n private isCompleteName = new IsCompleteNamePipe();\r\n private onlyNumbers = new OnlyNumbersPipe();\r\n\r\n constructor(private el: ElementRef, private renderer: Renderer2) {}\r\n\r\n @HostBinding('attr.maxlength')\r\n get maxlength() {\r\n return this.inputMaxLength;\r\n }\r\n\r\n validate(c: AbstractControl): { [key: string]: any } {\r\n if (this.onlyNumbers.transform(c.value)) {\r\n const cpf = this.isCPF.transform(c.value);\r\n return cpf ? null : { cpf: true };\r\n }\r\n return this.isCompleteName.transform(c.value) ? null : { nome: true };\r\n }\r\n\r\n registerOnValidatorChange?(fn: () => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n @HostListener('input', ['$event.target.value'])\r\n private _inputChange(text: string) {\r\n const { nativeElement } = this.el;\r\n if (this.isCPF.transform(text)) {\r\n nativeElement.value = CPF.format(nativeElement.value);\r\n this.inputMaxLength = 11;\r\n } else {\r\n this.renderer.removeAttribute(nativeElement, 'maxlength');\r\n }\r\n\r\n if (this.onChange) {\r\n this.onChange(text);\r\n }\r\n }\r\n}\r\n","import { Directive, ElementRef, HostListener, Input } from '@angular/core';\r\nimport { FormattedTelPipe } from '@app/shared/pipes/formatted-tel.pipe';\r\nimport { NgControl } from '@angular/forms';\r\n\r\n@Directive({\r\n selector: '[appTelephone]'\r\n})\r\nexport class TelephoneDirective {\r\n @Input()\r\n telephone: string;\r\n\r\n constructor(private element: ElementRef, private ngControl: NgControl) {}\r\n\r\n private formattedTel = new FormattedTelPipe();\r\n @HostListener('input', ['$event'])\r\n onInputChange(event: Event | any) {\r\n this.tel(event.target.value);\r\n }\r\n\r\n tel(value: string): void {\r\n this.ngControl.control.setValue(this.formattedTel.transform(value));\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { AutoSizeDirective } from './auto-size.directive';\r\nimport { CepDirective } from './cep.directive';\r\nimport { CpfCnpjDirective } from './cpf-cnpj.directive';\r\nimport { DigitOnlyDirective } from './digit-only.directive';\r\nimport { FocusDirective } from './focus.directive';\r\nimport { OnlyNumbersDirective } from './only-numbers.directive';\r\nimport { PatientSearchDirective } from './patient-search.directive';\r\nimport { TelephoneDirective } from './telephone.directive';\r\n\r\n@NgModule({\r\n imports: [CommonModule],\r\n declarations: [\r\n CpfCnpjDirective,\r\n TelephoneDirective,\r\n AutoSizeDirective,\r\n FocusDirective,\r\n PatientSearchDirective,\r\n CepDirective,\r\n DigitOnlyDirective,\r\n OnlyNumbersDirective\r\n ],\r\n exports: [\r\n CpfCnpjDirective,\r\n TelephoneDirective,\r\n AutoSizeDirective,\r\n FocusDirective,\r\n PatientSearchDirective,\r\n CepDirective,\r\n DigitOnlyDirective,\r\n OnlyNumbersDirective\r\n ]\r\n})\r\nexport class DirectivesModule {}\r\n","export default \"<header id=\\\"alternative-navbar\\\">\\n <nav class=\\\"navbar navbar-expand-lg navbar-light\\\">\\n <div>\\n <a class=\\\"navbar-brand\\\" (click)=\\\"redirect()\\\" style=\\\"margin-top: -118px;\\\">\\n <img\\n [src]=\\\"isThemeActiveReceitaDigital() ? 'assets/img/logo-03.png' : 'assets/img/mrd/logo-03.png'\\\"\\n [alt]=\\\"isThemeActiveReceitaDigital() ? 'Logo Receita Digital' : 'Logo MRD'\\\"\\n />\\n </a>\\n <app-icon-menu></app-icon-menu>\\n </div>\\n\\n <div class=\\\"container-fluid-new pb-5\\\">\\n <div class=\\\"row flex-wrap justify-content-md-center\\\">\\n <div class=\\\"col-md-12\\\">\\n <div class=\\\"collapse navbar-collapse\\\" id=\\\"navbar-default\\\">\\n <ul class=\\\"navbar-nav\\\">\\n <li class=\\\"nav-item\\\">\\n <a href=\\\"#\\\" class=\\\"nav-link\\\" (click)=\\\"$event.preventDefault()\\\">\\n <div class=\\\"photo\\\" *ngIf=\\\"user\\\">\\n <img [alt]=\\\"user.name\\\" class=\\\"img-fluid\\\" src=\\\"/assets/img/default-avatar.png\\\" />\\n </div>\\n </a>\\n </li>\\n <h1 class=\\\"navbar-text\\\" *ngIf=\\\"user.userType === 'pharmacy'\\\">\\n <h2 class=\\\"card-title color-white\\\">{{ completeUser?.businessName }}</h2>\\n <h6 class=\\\"card-subtitle mb-2 color-white\\\">\\n CNPJ: {{ completeUser?.cnpj | mask: '00.000.000/0000-00' }}\\n </h6>\\n </h1>\\n <h1 class=\\\"navbar-text\\\" *ngIf=\\\"user.userType === 'pharmacist'\\\">\\n <h2 class=\\\"card-title color-white\\\">{{ user?.name }}</h2>\\n <h6 class=\\\"card-subtitle mb-2 color-white\\\">\\n CPF: {{ user?.cpf | mask: '000.000.000-00' }}\\n </h6>\\n </h1>\\n </ul>\\n <ul class=\\\"navbar-nav ml-lg-auto align-items-center\\\">\\n <li class=\\\"nav-item\\\">\\n <a (click)=\\\"logout()\\\" class=\\\"nav-link nav-link-icon logoutIcon\\\">\\n <i class=\\\"fa fa-exit icon-exit\\\"></i>\\n </a>\\n </li>\\n </ul>\\n </div>\\n </div>\\n\\n <div class=\\\"col-md-2 tile-container ml-2 mr-2\\\">\\n <a routerLink=\\\"/dashboard\\\">\\n <div class=\\\"card\\\">\\n <div class=\\\"card-body carddispensar\\\">\\n <div class=\\\"align-items-center flex-column justify-content-center\\\">\\n <label class=\\\"font-white padding font-card\\\"\\n >DISPENSAR<br />\\n <i class=\\\"fas fa-plus-square\\\" style=\\\"color: #fff;\\\"></i>\\n </label>\\n </div>\\n </div>\\n </div>\\n </a>\\n </div>\\n\\n <div class=\\\"col-md-2 tile-container ml-2 mr-2\\\" *ngIf=\\\"user?.userType === 'pharmacy'\\\">\\n <a routerLink=\\\"/historic\\\">\\n <div class=\\\"card\\\">\\n <div class=\\\"card-body cardhistorico\\\">\\n <div class=\\\"align-items-center flex-column justify-content-center\\\">\\n <label class=\\\"font-white padding font-card\\\"\\n >HISTÓRICO DE<br />RETENÇÕES \\n <i class=\\\"fa fa-history\\\" style=\\\"color: #fff;\\\"></i>\\n </label>\\n </div>\\n </div>\\n </div>\\n </a>\\n </div>\\n\\n <div class=\\\"col-md-2 tile-container ml-2 mr-2\\\" *ngIf=\\\"user?.userType === 'pharmacy'\\\">\\n <a routerLink=\\\"/pharmacist/\\\">\\n <div class=\\\"card\\\">\\n <div class=\\\"card-body cardfarmaceuticos\\\">\\n <div class=\\\"align-items-center flex-column justify-content-center\\\">\\n <label class=\\\"font-green padding font-card\\\"\\n >FARMACÊUTICOS<br />\\n <i class=\\\"fa fa-user-friends\\\"></i>\\n </label>\\n </div>\\n </div>\\n </div>\\n </a>\\n </div>\\n\\n <div class=\\\"col-md-2 tile-container ml-2 mr-2\\\">\\n <a routerLink=\\\"/profile\\\">\\n <div class=\\\"card\\\">\\n <div class=\\\"card-body cardarquivopdfs\\\">\\n <div class=\\\"align-items-center flex-column justify-content-center\\\">\\n <label class=\\\"font-green padding font-card\\\"\\n >MEUS DADOS<br />\\n <i class=\\\"fa fa-account-box\\\"></i>\\n </label>\\n </div>\\n </div>\\n </div>\\n </a>\\n </div>\\n </div>\\n </div>\\n </nav>\\n</header>\\n\";","import { Component, Input } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { AuthService } from '@app/core/services/auth.service';\nimport { User } from '@app/shared/models/decodedLoginToken';\nimport { ThemeService } from '@app/theme';\n\n@Component({\n selector: 'app-alternative-navbar-cip',\n templateUrl: './alternative-navbar-cip.component.html',\n styleUrls: ['./alternative-navbar-cip.component.scss']\n})\nexport class AlternativeNavbarCipComponent {\n @Input() completeUser: any;\n\n constructor(\n private router: Router,\n private themeService: ThemeService,\n private authService: AuthService\n ) {}\n\n get user(): User {\n return this.authService.user();\n }\n\n redirect() {\n const { permission, userType } = this.user;\n const url = permission === 'basic' || userType !== 'admin' ? '/dashboard' : '/admin';\n this.router.navigate([url]);\n }\n\n isThemeActiveReceitaDigital() {\n const active = this.themeService.getActiveTheme();\n return active.name === 'theme-receita-digital';\n }\n\n logout() {\n this.authService.logout();\n this.router.navigate(['entry/login']);\n }\n}\n","export default \".navbar-brand {\\n height: 100%;\\n width: 80px;\\n flex: 0 0 80px;\\n margin: 0;\\n justify-content: center;\\n display: flex;\\n align-items: center;\\n}\\n\\n.backgroundcolorgreen {\\n background-color: #1c413a;\\n}\\n\\n.navbar-brand img {\\n height: 100px;\\n}\\n\\n.container-fluid-new {\\n background-color: #17c6ac;\\n margin-left: 7px;\\n margin-top: 7px;\\n width: 100%;\\n border-radius: 7px;\\n}\\n\\n.navbar {\\n position: relative;\\n filter: drop-shadow(0 3px 6px rgba(128, 128, 128, 0.16));\\n border-radius: 5px;\\n padding: 0;\\n background-color: white;\\n}\\n\\n.navbar .nav-link {\\n padding-right: 0.4rem;\\n padding-left: 0.4rem;\\n}\\n\\n.navbar .navbar-header {\\n display: flex;\\n align-items: center;\\n}\\n\\n.navbar .navbar-header .navbar-text {\\n font-size: 25px;\\n font-family: \\\"prosemibold\\\", sans-serif;\\n margin-left: 16px;\\n margin-bottom: 0;\\n color: var(--on-background-header);\\n}\\n\\n.navbar .navbar-header .navbar-text i {\\n font-size: 20px;\\n margin-left: 10px;\\n}\\n\\n.navbar.bg-primary .nav-link,\\n.navbar.bg-primary .navbar-text {\\n color: white;\\n}\\n\\n.container-fluid {\\n background-color: #17c6ac;\\n}\\n\\n.paddingtopbottom {\\n padding-bottom: 25px;\\n padding-top: 25px;\\n}\\n\\n.card {\\n position: relative;\\n background-color: #17c6ac;\\n}\\n\\n.font-white {\\n color: #ffffff;\\n}\\n\\n.padding {\\n padding-bottom: 5px;\\n}\\n\\n.font-green {\\n color: #1c413a;\\n}\\n\\n.font-card {\\n font-family: \\\"Source Sans Pro\\\", sans-serif;\\n font-weight: bold;\\n cursor: pointer;\\n font-size: 18px;\\n}\\n\\n.carddispensar {\\n background-color: #1c413a;\\n color: #ffffff;\\n text-align: center;\\n border-radius: 5px;\\n padding: 30px;\\n min-height: 100px;\\n}\\n\\n.cardarquivopdfs {\\n background-color: #ebebeb;\\n color: #1c413a;\\n text-align: center;\\n border-radius: 5px;\\n padding: 30px;\\n min-height: 100px;\\n}\\n\\n.cardhistorico {\\n background-color: #0b6054;\\n color: #ffffff;\\n text-align: center;\\n border-radius: 5px;\\n padding: 30px;\\n min-height: 100px;\\n}\\n\\n.cardfarmaceuticos {\\n background-color: #65f2da;\\n color: #1c413a;\\n text-align: center;\\n border-radius: 5px;\\n padding: 30px;\\n min-height: 100px;\\n}\\n\\n.tile-container {\\n padding: 0px;\\n}\\n\\n.tile-container .option-title {\\n text-align: center !important;\\n}\\n\\n.jumbotron {\\n padding: 2rem 1rem;\\n margin-bottom: 2rem;\\n background-color: #17c6ac;\\n border-radius: 0.3rem;\\n}\\n\\n.tiles {\\n height: 120px;\\n box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16);\\n text-transform: uppercase;\\n font-size: 20px;\\n color: white;\\n font-family: \\\"problack\\\", sans-serif;\\n transition: all 300ms ease;\\n}\\n\\n.tiles.card-nova-prescricao {\\n background-color: var(--background-card-prescricao);\\n}\\n\\n.tiles.card-historico-prescricao {\\n background-color: var(--background-card-historico);\\n}\\n\\n.tiles.card-pacientes {\\n background-color: var(--background-card-pacientes);\\n color: var(--color-card-pacientes);\\n}\\n\\n.tiles.card-meus-dados {\\n background-color: var(--background-card-meus-dados);\\n}\\n\\n.tiles.card-tele-consulta {\\n background-color: var(--background-card-tele-consulta);\\n}\\n\\n.tiles.card-agenda-virtual {\\n background-color: var(--backgorund-card-agenda-virtual);\\n}\\n\\n.tiles:hover {\\n transform: translateY(-1px);\\n z-index: 1;\\n}\\n\\n.logoutIcon.white {\\n color: #fff;\\n}\\n\\n.logoutIcon.green {\\n color: #1ae0c2;\\n}\\n\\n.logoutIcon.primary {\\n color: #0b6054;\\n}\\n\\n.logoutIcon.default {\\n color: #ffffff;\\n}\\n\\n.logoutIcon.info {\\n color: #17c6ac;\\n}\\n\\n.logoutIcon.success {\\n color: #00d3b2;\\n}\\n\\n.icon-exit {\\n color: var(--on-background-header);\\n}\\n\\nh1,\\nh2,\\nh3,\\nh4,\\nh5,\\nh6,\\n.h1,\\n.h2,\\n.h3,\\n.h4,\\n.h5,\\n.h6 {\\n margin-bottom: 0.5rem;\\n font-family: inherit;\\n font-weight: 400;\\n line-height: 1.5;\\n color: #ffffff;\\n}\\n\\n.color-white {\\n color: #ffffff !important;\\n}\\n\\n.photo {\\n display: inline-block;\\n height: 60px;\\n width: 60px;\\n border-radius: 50%;\\n vertical-align: middle;\\n overflow: hidden;\\n}\\n\\n@media screen and (max-width: 500px) {\\n .navbar .navbar-header {\\n margin-left: 30px;\\n margin-top: -10px;\\n }\\n .navbar .navbar-header .navbar-text {\\n margin-left: 6px;\\n }\\n .navbar .navbar-header .navbar-text i {\\n font-size: 12px;\\n }\\n}\";","export default \"<app-alternative-navbar-cip\\r\\n *ngIf=\\\"hasCipFeature; else templateOld\\\"\\r\\n [completeUser]=\\\"completeUser\\\"\\r\\n></app-alternative-navbar-cip>\\r\\n\\r\\n<!-- ************************************************************************************************************** -->\\r\\n<ng-template #templateOld>\\r\\n <header id=\\\"alternative-navbar\\\">\\r\\n <nav class=\\\"navbar navbar-expand-lg navbar-light\\\">\\r\\n <a class=\\\"navbar-brand\\\" (click)=\\\"redirect()\\\">\\r\\n <img\\r\\n [src]=\\\"isThemeActiveReceitaDigital() ? 'assets/img/logo-03.png' : 'assets/img/mrd/logo-03.png'\\\"\\r\\n [alt]=\\\"isThemeActiveReceitaDigital() ? 'Logo Receita Digital' : 'Logo MRD'\\\"\\r\\n />\\r\\n </a>\\r\\n <div class=\\\"container-fluid\\\">\\r\\n <div class=\\\"collapse navbar-collapse\\\" id=\\\"navbar-default\\\">\\r\\n <div class=\\\"navbar-header\\\">\\r\\n <app-icon-menu *ngIf=\\\"user?.userType !== 'admin'\\\"></app-icon-menu>\\r\\n <h1 class=\\\"navbar-text\\\" *ngIf=\\\"title\\\">\\r\\n <span class=\\\"pipe-menu\\\">|</span> {{ title }}\\r\\n <i class=\\\"fa icon-title\\\" [ngClass]=\\\"titleIcon\\\"></i>\\r\\n </h1>\\r\\n </div>\\r\\n\\r\\n <ul class=\\\"navbar-nav ml-lg-auto align-items-center \\\">\\r\\n <li class=\\\"nav-item\\\" *ngIf=\\\"false\\\">\\r\\n <button (click)=\\\"toggle()\\\">Mudar Tema</button>\\r\\n </li>\\r\\n <li class=\\\"nav-item\\\" *ngIf=\\\"user\\\">\\r\\n <a routerLink=\\\"/profile\\\" class=\\\"nav-link\\\">\\r\\n <div title=\\\"Meus Dados\\\">\\r\\n <ng-container *ngIf=\\\"avatarB64; else noAvatar\\\">\\r\\n <img [alt]=\\\"user.name\\\" class=\\\"avatar\\\" [src]=\\\"avatarB64\\\" />\\r\\n </ng-container>\\r\\n <ng-template #noAvatar>\\r\\n <img\\r\\n [alt]=\\\"user.name\\\"\\r\\n class=\\\"avatar\\\"\\r\\n src=\\\"/assets/img/default-avatar.png\\\"\\r\\n *ngIf=\\\"user.sex !== 'F'\\\"\\r\\n />\\r\\n <img\\r\\n [alt]=\\\"user.name\\\"\\r\\n class=\\\"avatar\\\"\\r\\n src=\\\"/assets/img/default-avatar.F.png\\\"\\r\\n *ngIf=\\\"user.sex === 'F'\\\"\\r\\n />\\r\\n </ng-template>\\r\\n </div>\\r\\n </a>\\r\\n </li>\\r\\n <li class=\\\"nav-item\\\">\\r\\n <a (click)=\\\"logout()\\\" class=\\\"nav-link nav-link-icon logoutIcon\\\">\\r\\n <i class=\\\"fa fa-exit icon-exit\\\"></i>\\r\\n </a>\\r\\n </li>\\r\\n </ul>\\r\\n </div>\\r\\n </div>\\r\\n </nav>\\r\\n </header>\\r\\n</ng-template>\\r\\n\";","import { Component, Input, OnInit } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { AuthService } from '@app/core/services/auth.service';\r\nimport { PharmacyService } from '@app/modules/pharmacy/services/pharmacy.service';\r\nimport { UserService } from '@app/modules/user/user.service';\r\nimport { AdditionalFeatureAccept } from '@app/shared/models';\r\nimport { ThemeService } from '@app/theme';\r\n\r\n@Component({\r\n selector: 'app-alternative-navbar',\r\n templateUrl: './alternative-navbar.component.html',\r\n styleUrls: ['./alternative-navbar.component.scss']\r\n})\r\nexport class AlternativeNavbarComponent implements OnInit {\r\n @Input() title: string;\r\n @Input() titleIcon: string;\r\n completeUser: any;\r\n avatarB64: string;\r\n\r\n constructor(\r\n private authService: AuthService,\r\n private router: Router,\r\n private themeService: ThemeService,\r\n private pharmacyService: PharmacyService,\r\n private userService: UserService\r\n ) {}\r\n\r\n ngOnInit() {\r\n if (this.user.userType === 'pharmacy') {\r\n this.pharmacyService\r\n .getPharmacyByUserId(this.user._id)\r\n .subscribe(res => (this.completeUser = res));\r\n }\r\n\r\n this.userService.getAvatar().subscribe(avatar => (this.avatarB64 = avatar));\r\n }\r\n\r\n get user() {\r\n return this.authService.user();\r\n }\r\n\r\n get hasCipFeature() {\r\n const cipFeature = this.user && this.user.features.find(f => f.name === 'CIP');\r\n return cipFeature && cipFeature.accept === AdditionalFeatureAccept.YES;\r\n }\r\n\r\n redirect() {\r\n const { permission, userType } = this.user;\r\n const url = permission === 'basic' || userType !== 'admin' ? '/dashboard' : '/admin';\r\n window.location.href = url;\r\n }\r\n\r\n toggle() {\r\n if (this.isThemeActiveReceitaDigital()) {\r\n this.themeService.setTheme('theme-mrd');\r\n } else {\r\n this.themeService.setTheme('theme-receita-digital');\r\n }\r\n }\r\n\r\n isThemeActiveReceitaDigital() {\r\n const active = this.themeService.getActiveTheme();\r\n return active.name === 'theme-receita-digital';\r\n }\r\n\r\n logout() {\r\n this.authService.logout();\r\n this.router.navigate(['entry/login']);\r\n }\r\n}\r\n","export default \".navbar-brand {\\n height: 100%;\\n width: 80px;\\n flex: 0 0 80px;\\n margin: 0;\\n justify-content: center;\\n display: flex;\\n align-items: center;\\n background-color: white;\\n}\\n\\n.navbar {\\n background-color: var(--background-header);\\n height: 80px;\\n padding: 0;\\n position: relative;\\n filter: drop-shadow(0 3px 6px rgba(128, 128, 128, 0.16));\\n}\\n\\n.navbar .nav-link {\\n padding-right: 0.4rem;\\n padding-left: 0.4rem;\\n}\\n\\n.navbar .navbar-header {\\n display: flex;\\n align-items: center;\\n}\\n\\n.navbar .navbar-header .navbar-text {\\n font-size: 25px;\\n font-family: \\\"prosemibold\\\", sans-serif;\\n margin-left: 16px;\\n margin-bottom: 0;\\n color: var(--on-background-header);\\n}\\n\\n.navbar .navbar-header .navbar-text i {\\n font-size: 20px;\\n margin-left: 10px;\\n}\\n\\n.navbar.bg-primary .nav-link,\\n.navbar.bg-primary .navbar-text {\\n color: white;\\n}\\n\\n.logoutIcon.white {\\n color: #fff;\\n}\\n\\n.logoutIcon.green {\\n color: #1ae0c2;\\n}\\n\\n.logoutIcon.primary {\\n color: #0b6054;\\n}\\n\\n.logoutIcon.default {\\n color: #ffffff;\\n}\\n\\n.logoutIcon.info {\\n color: #17c6ac;\\n}\\n\\n.logoutIcon.success {\\n color: #00d3b2;\\n}\\n\\n.icon-exit {\\n color: var(--on-background-header);\\n}\\n\\n@media screen and (max-width: 500px) {\\n .navbar .navbar-header {\\n margin-left: 30px;\\n margin-top: -10px;\\n }\\n .navbar .navbar-header .navbar-text {\\n margin-left: 6px;\\n }\\n .navbar .navbar-header .navbar-text i {\\n font-size: 12px;\\n }\\n}\";","import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n selector: 'app-footer-mobile',\n templateUrl: './footer-mobile.component.html',\n styleUrls: ['./footer-mobile.component.scss']\n})\nexport class FooterMobileComponent implements OnInit {\n @Input() frontendVersion: string;\n @Input() backendVersion: string;\n\n constructor() {}\n\n ngOnInit() {}\n}\n","export default \"<footer theme>\\n <div class=\\\"d-flex align-items-center\\\">\\n <div class=\\\"d-flex flex-fill\\\">\\n <a class=\\\"mr-3 helpContainer\\\" href=\\\"https://ajuda.receitadigital.com\\\"><i class=\\\"fa fa-comments mr-1\\\"></i>Fale Conosco.</a>\\n </div>\\n </div>\\n <div class=\\\"box-version-and-social-medias\\\">\\n <div class=\\\"versions\\\">\\n <span class=\\\"m-2\\\">F: {{ frontendVersion }}</span>\\n <span class=\\\"m-2\\\">B: {{ backendVersion }}</span>\\n </div>\\n <div class=\\\"social-medias\\\">\\n <a href=\\\"https://www.instagram.com/receitadigital\\\" target=\\\"_blank\\\" style=\\\" margin-right: 10px;\\\"\\n ><i class=\\\"fa fa-instagram\\\"></i\\n ></a>\\n <a href=\\\"https://www.facebook.com/ReceitaDigital/\\\" target=\\\"_blank\\\" style=\\\" margin-right: 10px;\\\"\\n ><i class=\\\"fa fa-facebook\\\"></i\\n ></a>\\n <a href=\\\"https://www.linkedin.com/company/receitadigital/\\\" target=\\\"_blank\\\"\\n ><i class=\\\"fa fa-linkedin\\\"></i\\n ></a>\\n </div>\\n </div>\\n</footer>\\n\";","export default \"footer {\\n background: var(--background-section);\\n position: absolute;\\n bottom: 0;\\n width: 100%;\\n color: #fff;\\n height: 65px;\\n z-index: 999;\\n display: flex;\\n flex-direction: column;\\n align-items: center;\\n box-sizing: border-box;\\n}\\n\\n.box-version-and-social-medias {\\n width: 100%;\\n height: 10px;\\n display: flex;\\n justify-content: space-between;\\n}\\n\\n.versions {\\n display: flex;\\n width: 100%;\\n align-items: center;\\n justify-content: center;\\n}\\n\\n.social-medias {\\n width: 100%;\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n}\\n\\n.social-medias a {\\n color: #fff;\\n}\";","export default \"<footer class=\\\"footer\\\">\\r\\n <div class=\\\"d-flex flex-fill\\\" *ngIf=\\\"isThemeActiveReceitaDigital()\\\">\\r\\n <a class=\\\"mr-3 helpContainer\\\" target=\\\"_blank\\\" href=\\\"https://ajuda.receitadigital.com\\\"><i class=\\\"fa fa-comments mr-1\\\"></i>Fale Conosco.</a>\\r\\n </div>\\r\\n</footer>\\r\\n\";","import { Component, HostListener } from '@angular/core';\r\nimport { CoreService } from '@app/core/services/core.service';\r\nimport { ThemeService } from '@app/theme';\r\n\r\n@Component({\r\n selector: 'app-footer',\r\n templateUrl: './footer.component.html',\r\n styleUrls: ['./footer.component.scss']\r\n})\r\nexport class FooterComponent {\r\n actualDate = new Date();\r\n isMobile = false;\r\n\r\n @HostListener('window:resize', ['$event'])\r\n onResize(event) {\r\n this.isMobile = this.coreService.isViewPortMobile();\r\n }\r\n\r\n constructor(private themeService: ThemeService, private coreService: CoreService) {}\r\n\r\n isThemeActiveReceitaDigital() {\r\n const active = this.themeService.getActiveTheme();\r\n return active.name === 'theme-receita-digital';\r\n }\r\n}\r\n","export default \"footer {\\n background: var(--background-section);\\n position: absolute;\\n bottom: 0;\\n width: 100%;\\n display: flex;\\n height: 50px;\\n z-index: 999;\\n}\\n\\n.footer {\\n justify-content: space-between;\\n align-items: center;\\n}\\n\\n.footer .versions {\\n display: flex;\\n}\\n\\n.footer .box-marca-and-social-medias {\\n display: flex;\\n align-items: center;\\n}\\n\\n.footer .container-fluid {\\n padding: 0 30px;\\n}\\n\\n@media (max-width: 1025px) {\\n .footer .container-fluid {\\n padding: 0 20px 0 10px;\\n }\\n}\\n\\n.footer a i {\\n font-size: 14px;\\n}\\n\\n.footer .copyright {\\n font-size: 10px;\\n}\\n\\n@media (max-width: 414px) {\\n .footer {\\n height: 60px;\\n }\\n .footer .versions {\\n position: absolute;\\n top: 22px;\\n left: 0;\\n }\\n .footer .social-icons {\\n position: absolute;\\n right: 7px;\\n top: 30px;\\n }\\n .footer .box-marca {\\n position: absolute;\\n left: 15%;\\n width: 100%;\\n top: 5px;\\n }\\n}\\n\\n.footer div {\\n justify-content: center !important;\\n}\\n\\n@media (min-width: 800px) {\\n .footer div {\\n justify-content: flex-end !important;\\n }\\n}\";","export default \"<div id=\\\"icon-menubar\\\">\\n <i class=\\\"fa fa-subject icon-menu\\\" theme (click)=\\\"toggleMenu()\\\"></i>\\n</div>\\n\";","import { DOCUMENT } from '@angular/common';\nimport { Component, OnInit, Inject, Renderer2 } from '@angular/core';\n\n@Component({\n selector: 'app-icon-menu',\n templateUrl: './icon-menu.component.html',\n styleUrls: ['./icon-menu.component.scss']\n})\nexport class IconMenuComponent implements OnInit {\n static activeMenu = false;\n constructor(@Inject(DOCUMENT) private document: Document, private renderer: Renderer2) {}\n\n ngOnInit() {}\n\n toggleMenu() {\n IconMenuComponent.activeMenu = !IconMenuComponent.activeMenu;\n if (IconMenuComponent.activeMenu) {\n this.renderer.setStyle(this.document.getElementById('siderbar-menu'), 'left', '0');\n this.renderer.setStyle(this.document.getElementById('siderbar-menu-blur'), 'left', '0');\n } else {\n this.renderer.setStyle(this.document.getElementById('siderbar-menu'), 'left', '-330px');\n this.renderer.setStyle(this.document.getElementById('siderbar-menu-blur'), 'left', '-100%');\n }\n }\n}\n","export default \".icon-menu,\\n.pipe-menu {\\n color: var(--color-icon-menu);\\n font-size: 25px;\\n}\\n\\n.icon-menu:hover {\\n cursor: pointer;\\n transition: 0.3s all;\\n color: var(--color-icon-menu);\\n}\\n\\n@media screen and (max-width: 500px) {\\n #icon-menubar {\\n margin-top: 15px;\\n margin-left: 15px;\\n }\\n\\n .icon-menu {\\n font-size: 20px;\\n }\\n}\";","import { Component, OnInit } from '@angular/core';\r\nimport { AuthService } from '@app/core/services/auth.service';\r\n\r\n@Component({\r\n selector: 'app-navbar',\r\n templateUrl: './navbar.component.html',\r\n styleUrls: ['./navbar.component.scss']\r\n})\r\nexport class NavbarComponent implements OnInit {\r\n constructor(private authService: AuthService) {}\r\n\r\n ngOnInit() {}\r\n\r\n get isLoggedOut(): boolean {\r\n return this.authService.isLoggedOut;\r\n }\r\n}\r\n","export default \"<header>\\r\\n <nav class=\\\"navbar navbar-expand-lg navbar-light\\\">\\r\\n <div class=\\\"container-fluid\\\">\\r\\n <a class=\\\"navbar-brand\\\" routerLink=\\\"/\\\">\\r\\n <img src=\\\"assets/img/logo-01.jpg\\\" alt=\\\"Logo Receita Digital\\\" id=\\\"brand-home\\\" />\\r\\n </a>\\r\\n <button\\r\\n class=\\\"navbar-toggler\\\"\\r\\n type=\\\"button\\\"\\r\\n data-toggle=\\\"collapse\\\"\\r\\n data-target=\\\"#navbar-default\\\"\\r\\n aria-controls=\\\"navbar-default\\\"\\r\\n aria-expanded=\\\"false\\\"\\r\\n aria-label=\\\"Toggle navigation\\\"\\r\\n >\\r\\n <span class=\\\"navbar-toggler-icon\\\"></span>\\r\\n </button>\\r\\n <div class=\\\"collapse navbar-collapse\\\" id=\\\"navbar-default\\\">\\r\\n <div class=\\\"navbar-collapse-header\\\">\\r\\n <div class=\\\"row\\\">\\r\\n <div class=\\\"col-6 collapse-brand\\\">\\r\\n <a href=\\\"#\\\">\\r\\n <img src=\\\"assets/img/logo-01.jpg\\\" />\\r\\n </a>\\r\\n </div>\\r\\n <div class=\\\"col-6 collapse-close\\\">\\r\\n <button\\r\\n type=\\\"button\\\"\\r\\n class=\\\"navbar-toggler\\\"\\r\\n data-toggle=\\\"collapse\\\"\\r\\n data-target=\\\"#navbar-default\\\"\\r\\n aria-controls=\\\"navbar-default\\\"\\r\\n aria-expanded=\\\"false\\\"\\r\\n aria-label=\\\"Toggle navigation\\\"\\r\\n >\\r\\n <span></span>\\r\\n <span></span>\\r\\n </button>\\r\\n </div>\\r\\n </div>\\r\\n </div>\\r\\n\\r\\n <ul class=\\\"navbar-nav ml-lg-auto align-items-center\\\">\\r\\n <!-- <li class=\\\"nav-item\\\" routerLinkActive=\\\"active\\\">\\r\\n <a class=\\\"nav-link\\\" routerLink=\\\"\\\">\\r\\n InÃcio\\r\\n </a>\\r\\n </li>\\r\\n <li class=\\\"nav-item\\\">\\r\\n <a class=\\\"nav-link\\\" href=\\\"#\\\">\\r\\n Para pacientes\\r\\n </a>\\r\\n </li>\\r\\n <li class=\\\"nav-item\\\">\\r\\n <a class=\\\"nav-link\\\" href=\\\"#\\\">\\r\\n Para Médicos\\r\\n </a>\\r\\n </li>\\r\\n <li class=\\\"nav-item\\\">\\r\\n <a class=\\\"nav-link\\\" href=\\\"#\\\">\\r\\n Para Farmácias\\r\\n </a>\\r\\n </li> -->\\r\\n <!-- <li class=\\\"nav-item\\\">\\r\\n <a class=\\\"nav-link\\\" href=\\\"#\\\">\\r\\n Contato\\r\\n </a>\\r\\n </li> -->\\r\\n <ng-container *ngIf=\\\"isLoggedOut\\\">\\r\\n <li class=\\\"nav-item\\\">\\r\\n <a class=\\\"btn btn-primary btn-md register-btn\\\" routerLink=\\\"/entry/account-type\\\">\\r\\n Cadastre-se\\r\\n </a>\\r\\n </li>\\r\\n <li class=\\\"nav-item\\\" theme>\\r\\n <a routerLink=\\\"/entry/login\\\" class=\\\"btn btn-icon btn-success btn-circle\\\">\\r\\n <span class=\\\"btn-inner--icon\\\"><i class=\\\"fa fa-user-solid\\\"></i></span>\\r\\n </a>\\r\\n </li>\\r\\n </ng-container>\\r\\n </ul>\\r\\n </div>\\r\\n </div>\\r\\n </nav>\\r\\n</header>\\r\\n\";","export default \".navbar {\\n max-height: 80px;\\n filter: drop-shadow(0 3px 6px rgba(128, 128, 128, 0.16));\\n border: 1px solid transparent;\\n}\\n.navbar .nav-link {\\n padding-right: 0.4rem;\\n padding-left: 0.4rem;\\n}\\n.navbar .nav-link,\\n.navbar .btn {\\n text-transform: uppercase;\\n font-family: \\\"problack\\\", sans-serif;\\n}\\n.navbar .nav-link.register-btn,\\n.navbar .btn.register-btn {\\n height: 40px;\\n display: flex;\\n align-items: center;\\n}\";","export default \"<ng-container *ngIf=\\\"hasCipFeature; then templateNew; else templateOld\\\"></ng-container>\\n<ng-template #templateNew>\\n <nav id=\\\"siderbar-menu\\\" class=\\\"sidebar\\\" theme>\\n <div class=\\\"inner-menu\\\">\\n <ul class=\\\"menu list-unstyled\\\">\\n <li>\\n <a routerLink=\\\"/\\\"> <i class=\\\"fas fa-plus-square\\\"></i> Dispensar </a>\\n </li>\\n\\n <li *ngIf=\\\"user?.userType === 'pharmacy'\\\">\\n <a routerLink=\\\"/historic\\\"> <i class=\\\"fa fa-history\\\"></i> Histórico de Retenções </a>\\n </li>\\n\\n <li *ngIf=\\\"user?.userType === 'pharmacy'\\\">\\n <a routerLink=\\\"/pharmacist/\\\"> <i class=\\\"fa fa-user-friends\\\"></i> Farmacêuticos </a>\\n </li>\\n\\n <li *ngIf=\\\"hasAccessToManipulatedFunctionality()\\\">\\n <a routerLink=\\\"/personalized-medications\\\">\\n <i class=\\\"fa fa-account-box\\\"></i>\\n Manipulados\\n </a>\\n </li>\\n\\n <li>\\n <a routerLink=\\\"/profile\\\">\\n <i class=\\\"fa fa-account-box\\\"></i>\\n Meus dados\\n </a>\\n </li>\\n </ul>\\n </div>\\n </nav>\\n</ng-template>\\n<!-- ************************************************************************************************************** -->\\n<ng-template #templateOld>\\n <nav id=\\\"siderbar-menu\\\" class=\\\"sidebar\\\" theme>\\n <div class=\\\"inner-menu\\\">\\n <ul class=\\\"menu list-unstyled\\\" [ngSwitch]=\\\"user?.userType\\\">\\n <ng-container *ngSwitchCase=\\\"'healthProfessional'\\\">\\n <li>\\n <a routerLink=\\\"/dashboard\\\">\\n <i class=\\\"fa fa-view-compact\\\"></i>\\n Meu Painel\\n </a>\\n </li>\\n <li>\\n <a\\n [routerLink]=\\\"\\n isVeterinarian || authService.hasAccessNewModulePrescription\\n ? ['/document/new']\\n : ['/prescription/new']\\n \\\"\\n >\\n <i class=\\\"fa fa-plus\\\"></i>\\n Nova Prescrição\\n </a>\\n </li>\\n <li>\\n <a routerLink=\\\"/favorites\\\">\\n <i class=\\\"fa fa-heart\\\"></i>\\n Modelos Favoritos\\n </a>\\n </li>\\n <li>\\n <a routerLink=\\\"/historic\\\">\\n <i class=\\\"fa fa-history\\\"></i>\\n Histórico de Documentos\\n </a>\\n </li>\\n <li>\\n <a routerLink=\\\"/patients\\\" class=\\\"submenu\\\">\\n <i class=\\\"fa fa-assignment\\\"></i>\\n Meus Pacientes\\n </a>\\n </li>\\n <li *ngIf=\\\"hasAccessToManipulatedFunctionality()\\\">\\n <a routerLink=\\\"/personalized-medications\\\" class=\\\"submenu\\\">\\n <i class=\\\"fa fa-assignment\\\"></i>\\n Personalizar Tratamento\\n </a>\\n </li>\\n <li>\\n <a routerLink=\\\"/profile\\\">\\n <i class=\\\"fa fa-account-box\\\"></i>\\n Meus dados\\n </a>\\n </li>\\n <li *ngIf=\\\"hasRennovaFeature\\\">\\n <a (click)=\\\"redirectDocumentNew(true)\\\">\\n <i class=\\\"fa fa-syringe\\\"></i>\\n Prescrição Rennova\\n </a>\\n </li>\\n </ng-container>\\n\\n <ng-container *ngSwitchCase=\\\"'patient'\\\">\\n <li>\\n <a routerLink=\\\"/dashboard\\\">\\n <i class=\\\"fa fa-view-compact\\\"></i>\\n Meu Painel\\n </a>\\n </li>\\n <a routerLink=\\\"/historic\\\">\\n <i class=\\\"fa fa-business\\\"></i>\\n Minhas Prescrições\\n </a>\\n <li>\\n <a routerLink=\\\"/profile\\\">\\n <i class=\\\"fa fa-account-box\\\"></i>\\n Meus Dados\\n </a>\\n </li>\\n </ng-container>\\n\\n <ng-container *ngSwitchCase=\\\"'pharmacy'\\\">\\n <li>\\n <a routerLink=\\\"/dashboard\\\">\\n <i class=\\\"fa fa-view-compact\\\"></i>\\n Meu painel\\n </a>\\n </li>\\n <li>\\n <a (click)=\\\"openSearch()\\\" class=\\\"submenu\\\">\\n <i class=\\\"fa fa-search\\\"></i>\\n Buscar Receitas\\n </a>\\n </li>\\n <li *ngIf=\\\"!hasFarmaRennovaFeature\\\">\\n <a routerLink=\\\"/pharmacy/recipe\\\">\\n <i class=\\\"fas fa-clipboard-list\\\"></i> Receitas de Terceiros\\n </a>\\n </li>\\n <li>\\n <a routerLink=\\\"/pharmacist/\\\"> <i class=\\\"fa fa-user-friends\\\"></i>Farmacêuticos</a>\\n </li>\\n <li>\\n <a routerLink=\\\"/historic\\\"> <i class=\\\"fa fa-history\\\"></i>Histórico de Retenções</a>\\n </li>\\n <li *ngIf=\\\"hasAccessToManipulatedFunctionality()\\\">\\n <a routerLink=\\\"/personalized-medications\\\">\\n <i class=\\\"fa fa-account-box\\\"></i>\\n Manipulados\\n </a>\\n </li>\\n <li>\\n <a routerLink=\\\"/profile\\\">\\n <i class=\\\"fa fa-account-box\\\"></i>\\n Meus Dados\\n </a>\\n </li>\\n </ng-container>\\n\\n <ng-container *ngSwitchCase=\\\"'pharmacist'\\\">\\n <li>\\n <a routerLink=\\\"/dashboard\\\">\\n <i class=\\\"fa fa-view-compact\\\"></i>\\n Meu painel\\n </a>\\n </li>\\n <li>\\n <a (click)=\\\"openSearch()\\\" class=\\\"submenu\\\">\\n <i class=\\\"fa fa-search\\\"></i>\\n Buscar Receitas\\n </a>\\n </li>\\n <li>\\n <a routerLink=\\\"/pharmacy/recipe\\\">\\n <i class=\\\"fas fa-clipboard-list\\\"></i>\\n Receita de Terceiros\\n </a>\\n </li>\\n <li>\\n <a routerLink=\\\"/profile\\\">\\n <i class=\\\"fa fa-account-box\\\"></i>\\n Meus dados\\n </a>\\n </li>\\n <li *ngIf=\\\"hasAccessToManipulatedFunctionality()\\\">\\n <a routerLink=\\\"/personalized-medications\\\">\\n <i class=\\\"fa fa-account-box\\\"></i>\\n Manipulados\\n </a>\\n </li>\\n </ng-container>\\n\\n <ng-container *ngSwitchCase=\\\"'admin'\\\">\\n <li>\\n <a (click)=\\\"changeRoute('')\\\">\\n <i class=\\\"fa fa-view-compact\\\"></i>\\n Visão geral\\n </a>\\n </li>\\n\\n <li *ngIf=\\\"user?.permission === Permission.MASTER\\\">\\n <a (click)=\\\"changeRoute('register')\\\">\\n <i class=\\\"fa fa-business\\\"></i>\\n Cadastrar Administrador\\n </a>\\n </li>\\n\\n <li>\\n <a (click)=\\\"changeRoute('doctors')\\\">\\n <i class=\\\"fa fa-user\\\"></i>\\n Médicos\\n </a>\\n <ul>\\n <li class=\\\"subitem\\\" (click)=\\\"changeRoute('dentists')\\\"><a>Dentistas</a></li>\\n <li class=\\\"subitem\\\" (click)=\\\"changeRoute('patients')\\\"><a>Pacientes</a></li>\\n <li class=\\\"subitem\\\" (click)=\\\"changeRoute('pharmacies')\\\"><a>Farmácias</a></li>\\n <li class=\\\"subitem\\\" (click)=\\\"changeRoute('pharmacists')\\\"><a>Farmacêuticos</a></li>\\n </ul>\\n </li>\\n\\n <li>\\n <a (click)=\\\"changeRoute('prescribers')\\\">\\n <i class=\\\"fas fa-user\\\"></i>\\n Atividade dos Prescritores\\n </a>\\n </li>\\n\\n <li>\\n <a (click)=\\\"changeRoute('prescriptions')\\\">\\n <i class=\\\"fa fa-file-medical\\\"></i>\\n Prescrições\\n </a>\\n <ul>\\n <li class=\\\"subitem\\\" (click)=\\\"changeRoute('attestations')\\\"><a>Atestados</a></li>\\n <li class=\\\"subitem\\\" (click)=\\\"changeRoute('exams')\\\"><a>Exames</a></li>\\n <li class=\\\"subitem\\\" (click)=\\\"changeRoute('orientations')\\\"><a>Outros documentos</a></li>\\n <li class=\\\"subitem\\\" (click)=\\\"changeRoute('retentions')\\\"><a>Retenções</a></li>\\n </ul>\\n </li>\\n\\n <li>\\n <a (click)=\\\"changeRoute('specialties')\\\">\\n <i class=\\\"fas fa-file-alt\\\"></i>\\n Especialidades\\n </a>\\n <ul>\\n <li class=\\\"subitem\\\" (click)=\\\"changeRoute('medicaments')\\\"><a>Medicamentos</a></li>\\n <li class=\\\"subitem\\\" (click)=\\\"changeRoute('additional-features')\\\">\\n <a>Funcionalidades adicionais</a>\\n </li>\\n </ul>\\n </li>\\n\\n <li>\\n <a (click)=\\\"changeRoute('logs')\\\">\\n <i class=\\\"fa fa-business\\\"></i>\\n QR Code Logs\\n </a>\\n <ul>\\n <li class=\\\"subitem\\\" (click)=\\\"changeRoute('logs')\\\"><a>Todos</a></li>\\n <li class=\\\"subitem\\\" (click)=\\\"changeRoute('logs', { groupBy: 'date' })\\\"><a>Por dia</a></li>\\n <li class=\\\"subitem\\\" (click)=\\\"changeRoute('logs', { groupBy: 'month' })\\\"><a>Por mês</a></li>\\n <li class=\\\"subitem\\\" (click)=\\\"changeRoute('logs', { groupBy: 'prescription' })\\\">\\n <a>Por prescrição</a>\\n </li>\\n </ul>\\n </li>\\n\\n <li>\\n <a (click)=\\\"changeRoute('unsubscribe-user')\\\">\\n <i class=\\\"ml-1 mr-3\\\" nz-icon nzType=\\\"user-delete\\\" nzTheme=\\\"outline\\\"></i>\\n Descadastrar usuário\\n </a>\\n </li>\\n </ng-container>\\n </ul>\\n </div>\\n <div class=\\\"versions\\\">\\n <div>\\n <span class=\\\"m-2\\\">F: {{ frontendVersion }}</span>\\n <span class=\\\"m-2\\\">B: {{ backendVersion$ | async }}</span>\\n </div>\\n </div>\\n </nav>\\n</ng-template>\\n\\n<div id=\\\"siderbar-menu-blur\\\"></div>\\n\";","import { DOCUMENT } from '@angular/common';\nimport { Component, Inject, OnInit, Renderer2 } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { AuthService } from '@app/core/services/auth.service';\nimport { CoreService } from '@app/core/services/core.service';\nimport { HealthProfessionalService } from '@app/modules/health-professional/services/health-professional.service';\nimport { PharmacistService } from '@app/modules/pharmacist/services/pharmacist.service';\nimport { ModalSearchComponent } from '@app/shared/modals/modal-search/modal-search.component';\nimport { AdditionalFeatureAccept } from '@app/shared/models';\nimport { User } from '@app/shared/models/decodedLoginToken';\nimport { ProfessionalType } from '@app/shared/models/professional-type.enum';\nimport { StateService } from '@app/shared/services/state.service';\nimport { BsModalRef, BsModalService } from 'ngx-bootstrap/modal';\nimport { Observable } from 'rxjs';\nimport { IconMenuComponent } from '../icon-menu/icon-menu.component';\nimport { Permission } from './../../models/permission.enum';\nimport { nativeAsync } from '@app/shared/decorators/nativeAsync';\n\n@Component({\n selector: 'app-sidebar-menu',\n templateUrl: './sidebar-menu.component.html',\n styleUrls: ['./sidebar-menu.component.scss']\n})\nexport class SidebarMenuComponent implements OnInit {\n modalRef: BsModalRef;\n visible = false;\n userId: string;\n userType: string;\n completeUser: any;\n functionalities = [];\n Permission = Permission;\n backendVersion$: Observable<string>;\n\n constructor(\n @Inject(DOCUMENT) private document: Document,\n private renderer: Renderer2,\n private router: Router,\n private modalService: BsModalService,\n public authService: AuthService,\n private pharmacistService: PharmacistService,\n private coreService: CoreService,\n private stateService: StateService,\n private healthProfessionalService: HealthProfessionalService\n ) {\n this.backendVersion$ = this.coreService.getBackendVersion();\n this.router.events.subscribe(() => this.closeMenu());\n }\n\n ngOnInit() {\n this.getCompleteUser(this.user);\n this.userId = localStorage.getItem('userId');\n this.userType = localStorage.getItem('userType');\n document.getElementById('siderbar-menu-blur').addEventListener('click', () => this.closeMenu());\n }\n\n get user(): User {\n return this.authService.user();\n }\n\n private getCompleteUser(user) {\n if (user.userType === 'pharmacist') {\n this.getPharmacistData();\n } else if (user.userType === 'healthProfessional') {\n this.getHealthProfessionalData();\n }\n }\n @nativeAsync\n async getPharmacistData() {\n this.completeUser = await this.pharmacistService.getPharmacistByUserId(this.user._id).toPromise();\n }\n @nativeAsync\n async getHealthProfessionalData() {\n this.completeUser = await this.healthProfessionalService\n .getHealthProfessional(this.user._id)\n .toPromise();\n }\n\n get frontendVersion(): string {\n return this.coreService.frontendVersion;\n }\n\n get hasFarmaRennovaFeature(): boolean {\n return this.user && this.user.features.some(f => f.name === 'Farma Rennova');\n }\n\n get hasRennovaFeature(): boolean {\n return this.user && this.user.features.some(f => f.name === 'Rennova');\n }\n\n get isVeterinarian(): boolean {\n return this.completeUser && this.completeUser.professionalType == ProfessionalType.VETERINARIAN;\n }\n\n private closeMenu() {\n const sidebarMenu = this.document.getElementById('siderbar-menu');\n if (sidebarMenu) {\n this.renderer.setStyle(sidebarMenu, 'left', '-330px');\n }\n const sidebarMenuBlur = this.document.getElementById('siderbar-menu-blur');\n if (sidebarMenuBlur) {\n this.renderer.setStyle(sidebarMenuBlur, 'left', '-100%');\n }\n IconMenuComponent.activeMenu = false;\n }\n\n close(): void {\n this.visible = false;\n }\n\n changeRoute(route: string, queryParams: any) {\n this.router.navigate(['/admin', route], { queryParams });\n }\n\n openSearch() {\n this.modalRef = this.modalService.show(ModalSearchComponent, {\n backdrop: 'static',\n keyboard: false\n });\n }\n\n hasAccessToManipulatedFunctionality() {\n return false && this.user && this.user.features.find(f => f.name === 'Manipulados');\n }\n\n get hasCipFeature() {\n const cipFeature = this.user && this.user.features.find(f => f.name === 'CIP');\n return cipFeature && cipFeature.accept === AdditionalFeatureAccept.YES;\n }\n\n redirectDocumentNew(isRennova: boolean) {\n this.stateService.data = { isRennova };\n this.router.navigateByUrl('/document/new');\n }\n}\n","export default \".sidebar {\\n position: absolute;\\n top: 80px;\\n height: calc(100% - 80px);\\n width: 326px;\\n background-color: var(--bg-color-primary);\\n z-index: 1000;\\n left: -330px;\\n transition: all 0.3s;\\n border: 0;\\n padding: 24px;\\n font-size: 14px;\\n line-height: 1.5;\\n word-wrap: break-word;\\n}\\n\\n.sidebar.active {\\n left: 0;\\n}\\n\\n#siderbar-menu-blur {\\n position: absolute;\\n top: 80px;\\n height: calc(100% - 80px);\\n width: 100%;\\n z-index: 999;\\n transition: all 0.3s;\\n left: -100%;\\n visibility: visible;\\n}\\n\\n#siderbar-menu-blur.active {\\n left: 0;\\n visibility: visible;\\n}\\n\\na:hover {\\n color: var(--color-hover-item-menu) !important;\\n}\\n\\n.submenu {\\n color: #ffffff;\\n}\\n\\n.inner-menu .menu a .fas {\\n margin-right: 10px !important;\\n}\\n\\n.menu .list-unstyled {\\n padding-top: 20px !important;\\n padding-bottom: 20px !important;\\n}\\n\\n.inner-menu {\\n display: flex;\\n flex-direction: column;\\n height: 50%;\\n}\\n\\n.inner-menu .menu-icon {\\n align-self: flex-end;\\n margin: 20px 0;\\n}\\n\\n.inner-menu .menu-icon .fa {\\n font-size: 20px;\\n color: white;\\n}\\n\\n.inner-menu .menu li {\\n padding: 20px 0;\\n}\\n\\n.inner-menu .menu a {\\n color: white;\\n font-family: \\\"problack\\\";\\n font-size: 18px;\\n text-transform: uppercase;\\n}\\n\\n.inner-menu .menu a:focus {\\n text-decoration: none;\\n}\\n\\n.inner-menu .menu a .fa {\\n margin-right: 10px;\\n}\\n\\n.versions {\\n height: 50%;\\n display: flex;\\n flex-direction: column;\\n justify-content: flex-end;\\n}\\n\\n.versions div {\\n color: var(--color-white);\\n}\";","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { RouterModule } from '@angular/router';\r\nimport { ThemeModule, themeMrd, themeReceitaDigital } from '@app/theme';\r\nimport { environment } from '@env/environment';\r\nimport { NgxMaskModule } from 'ngx-mask';\r\nimport { AlternativeNavbarCipComponent } from './alternative-navbar-cip/alternative-navbar-cip.component';\r\nimport { AlternativeNavbarComponent } from './alternative-navbar/alternative-navbar.component';\r\nimport { FooterMobileComponent } from './footer/footer-mobile/footer-mobile.component';\r\nimport { FooterComponent } from './footer/footer.component';\r\nimport { IconMenuComponent } from './icon-menu/icon-menu.component';\r\nimport { NavbarComponent } from './navbar/navbar.component';\r\nimport { SidebarMenuComponent } from './sidebar-menu/sidebar-menu.component';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n RouterModule,\r\n FormsModule,\r\n ThemeModule.forRoot({\r\n themes: [themeReceitaDigital, themeMrd],\r\n active: environment.template\r\n }),\r\n NgxMaskModule.forRoot()\r\n ],\r\n declarations: [\r\n NavbarComponent,\r\n FooterComponent,\r\n FooterMobileComponent,\r\n AlternativeNavbarComponent,\r\n AlternativeNavbarCipComponent,\r\n IconMenuComponent,\r\n SidebarMenuComponent\r\n ],\r\n exports: [NavbarComponent, FooterComponent, AlternativeNavbarComponent, SidebarMenuComponent]\r\n})\r\nexport class LayoutModule {}\r\n","import { CommonModule, registerLocaleData } from '@angular/common';\r\nimport pt from '@angular/common/locales/pt';\r\nimport { NgModule } from '@angular/core';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { RouterModule } from '@angular/router';\r\nimport { ModalSearchComponent } from '@app/shared/modals/modal-search/modal-search.component';\r\nimport { PipesModule } from '@app/shared/pipes';\r\nimport { ThemeModule, themeMrd, themeReceitaDigital } from '@app/theme';\r\nimport { environment } from '@env/environment';\r\nimport { InViewportModule } from 'ng-in-viewport';\r\nimport { NZ_I18N, pt_BR } from 'ng-zorro-antd/i18n';\r\nimport { NgxMaskModule } from 'ngx-mask';\r\nimport { ComponentsModule } from './components/components.module';\r\nimport { DirectivesModule } from './directives/directives.module';\r\nimport { LayoutModule } from './layout/layout.module';\r\nimport { ModalAddProductRennovaComponent } from './modals/modal-add-product-rennova/modal-add-product-rennova.component';\r\nimport { ModalBuyerDataComponent } from './modals/modal-buyer-data/modal-buyer-data.component';\r\nimport { ModalNewPortalDigitalSignaturesComponent } from './modals/modal-new-portal-digital-signatures/modal-new-portal-digital-signatures.component';\r\nimport { NgxLoadingModule } from 'ngx-loading';\r\nimport { ModalProtocolsLibraryComponent } from './modals/modal-protocols-library/modal-protocols-library.component';\r\n\r\nregisterLocaleData(pt);\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n RouterModule,\r\n LayoutModule,\r\n InViewportModule,\r\n DirectivesModule,\r\n PipesModule,\r\n ComponentsModule,\r\n ThemeModule.forRoot({\r\n themes: [themeReceitaDigital, themeMrd],\r\n active: environment.template\r\n }),\r\n NgxMaskModule.forRoot(),\r\n NgxLoadingModule.forRoot({})\r\n ],\r\n exports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n RouterModule,\r\n LayoutModule,\r\n InViewportModule,\r\n DirectivesModule,\r\n PipesModule,\r\n ComponentsModule,\r\n ThemeModule,\r\n NgxMaskModule,\r\n NgxLoadingModule\r\n ],\r\n providers: [{ provide: NZ_I18N, useValue: pt_BR }],\r\n declarations: [\r\n ModalAddProductRennovaComponent,\r\n ModalSearchComponent,\r\n ModalBuyerDataComponent,\r\n ModalNewPortalDigitalSignaturesComponent,\r\n ModalProtocolsLibraryComponent\r\n ]\r\n})\r\nexport class SharedModule {}\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\r\nimport { Router } from '@angular/router';\r\nimport { AuthService } from '@app/core/services/auth.service';\r\nimport { AppToastService } from '@app/shared/services/app-toast.service';\r\nimport { ThemeService } from '@app/theme';\r\nimport { markFormGroup } from '@app/utils/markFormGroup';\r\nimport { of } from 'rxjs';\r\nimport { switchMap, take } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'app-login',\r\n templateUrl: './login.component.html',\r\n styleUrls: ['./login.component.scss']\r\n})\r\nexport class LoginComponent implements OnInit {\r\n loading: boolean;\r\n\r\n form = new FormGroup({\r\n email: new FormControl('', Validators.compose([Validators.email, Validators.required])),\r\n password: new FormControl('', Validators.required)\r\n });\r\n\r\n constructor(\r\n private router: Router,\r\n private authService: AuthService,\r\n private notification: AppToastService,\r\n private themeService: ThemeService\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.form.get('email').valueChanges.subscribe(email => {\r\n this.form.get('email').setValue(email && email.toLowerCase(), { emitEvent: false });\r\n });\r\n }\r\n\r\n login() {\r\n markFormGroup(this.form);\r\n if (this.form.valid) {\r\n this.loading = true;\r\n this.authService\r\n .login(this.form.value)\r\n .pipe(\r\n switchMap(_ => of(this.authService.user())),\r\n take(1)\r\n )\r\n .subscribe(\r\n user => {\r\n this.loading = false;\r\n if (user.userType === 'admin') {\r\n window.location.href = '/admin';\r\n } else {\r\n window.location.href = '/dashboard';\r\n }\r\n },\r\n err => {\r\n if (err.status === 400 || err.status === 401 || err.status === 429) {\r\n this.notification.notify('warning', 'Avisos', err.error.message);\r\n } else {\r\n this.notification.notify('warning', 'Aviso', 'Erro interno');\r\n }\r\n this.loading = false;\r\n }\r\n );\r\n }\r\n }\r\n\r\n isThemeActiveReceitaDigital() {\r\n const active = this.themeService.getActiveTheme();\r\n return active.name === 'theme-receita-digital';\r\n }\r\n}\r\n","export default \"<section class=\\\"section-hero header\\\" theme>\\r\\n <div class=\\\"container d-flex align-items-center justify-content-center flex-column\\\">\\r\\n <a routerLink=\\\"/\\\" class=\\\"brand-bg\\\">\\r\\n <img\\r\\n [ngStyle]=\\\"\\r\\n isThemeActiveReceitaDigital()\\r\\n ? {\\r\\n position: 'relative',\\r\\n top: '-12px'\\r\\n }\\r\\n : { position: 'relative', top: '-48px' }\\r\\n \\\"\\r\\n [src]=\\\"\\r\\n isThemeActiveReceitaDigital() ? 'assets/img/logo-01.jpg' : 'assets/img/mrd/logo-com-texto.png'\\r\\n \\\"\\r\\n class=\\\"img-fluid\\\"\\r\\n alt=\\\"Logo Receita Digital\\\"\\r\\n />\\r\\n </a>\\r\\n <h1 class=\\\"mb-5 mt-5\\\">\\r\\n Login\\r\\n </h1>\\r\\n </div>\\r\\n</section>\\r\\n<section class=\\\"section container d-flex justify-content-center align-items-center\\\" theme>\\r\\n <div class=\\\"w-46 ml-5 d-flex flex-column\\\">\\r\\n <form nz-form [formGroup]=\\\"form\\\" (ngSubmit)=\\\"login()\\\">\\r\\n <div class=\\\"row\\\">\\r\\n <div class=\\\"col-10\\\">\\r\\n <nz-form-item class=\\\"mb-4\\\" *ngIf=\\\"form.get('email') as email\\\">\\r\\n <nz-form-label nzFor=\\\"email\\\" class=\\\"label-control\\\">E-mail</nz-form-label>\\r\\n <nz-form-control nzHasFeedback>\\r\\n <input\\r\\n nz-input\\r\\n id=\\\"email\\\"\\r\\n type=\\\"email\\\"\\r\\n placeholder=\\\"usuário@email.com\\\"\\r\\n formControlName=\\\"email\\\"\\r\\n class=\\\"label-control\\\"\\r\\n style=\\\"text-transform: lowercase;\\\"\\r\\n (keydown.space)=\\\"$event.preventDefault()\\\"\\r\\n />\\r\\n <nz-form-explain *ngIf=\\\"email.dirty && email.errors\\\">\\r\\n <ng-container *ngIf=\\\"email.hasError('required')\\\">\\r\\n Campo obrigatório, por favor digite seu e-mail.\\r\\n </ng-container>\\r\\n <ng-container *ngIf=\\\"!email.hasError('required') && email.hasError('email')\\\">\\r\\n E-mail inválido, por favor digite um e-mail válido.\\r\\n </ng-container>\\r\\n </nz-form-explain>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n </div>\\r\\n </div>\\r\\n <div class=\\\"row\\\">\\r\\n <div class=\\\"col-10\\\">\\r\\n <nz-form-item class=\\\"mb-4\\\">\\r\\n <nz-form-label nzFor=\\\"senha\\\">Senha</nz-form-label>\\r\\n <nz-form-control nzHasFeedback>\\r\\n <app-input-password\\r\\n placeholder=\\\"Digite a senha\\\"\\r\\n formControlName=\\\"password\\\"\\r\\n ></app-input-password>\\r\\n <nz-form-explain *ngIf=\\\"form.get('password').dirty && form.get('password').errors\\\">\\r\\n <ng-container *ngIf=\\\"form.get('password').hasError('required')\\\">\\r\\n Campo obrigatório, por favor digite uma senha.\\r\\n </ng-container>\\r\\n </nz-form-explain>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n </div>\\r\\n\\r\\n <div class=\\\"col-2\\\">\\r\\n <nz-form-item class=\\\"mb-4\\\">\\r\\n <nz-form-label> </nz-form-label>\\r\\n <nz-form-control>\\r\\n <button class=\\\"btn btn-success\\\"><i class=\\\"fa fa-arrow-right\\\"></i></button>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n </div>\\r\\n </div>\\r\\n </form>\\r\\n <a routerLink=\\\"/entry/reset-password\\\" class=\\\"mb-4\\\">Esqueceu a senha?</a>\\r\\n <a *ngIf=\\\"isThemeActiveReceitaDigital()\\\" routerLink=\\\"/entry/account-type\\\"\\r\\n >Ainda não possui uma conta?</a\\r\\n >\\r\\n </div>\\r\\n</section>\\r\\n\\r\\n<ngx-loading [show]=\\\"loading\\\" [config]=\\\"{ backdropBorderRadius: '3px' }\\\"></ngx-loading>\\r\\n\";","export default \".header {\\n background-color: var(--background-header);\\n}\\n\\n::ng-deep .cdk-global-scrollblock {\\n position: static;\\n overflow: hidden !important;\\n}\\n\\n.btn {\\n padding: 0;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n width: 44px;\\n height: 44px;\\n line-height: 0;\\n}\\n\\na {\\n color: var(--color-title);\\n}\";","export default \"<div class=\\\"page-register\\\">\\n <section class=\\\"section-hero section-header\\\" theme>\\n <div class=\\\"container\\\">\\n <a routerLink=\\\"/\\\" class=\\\"brand-bg\\\">\\n <img\\n [ngStyle]=\\\"\\n isThemeActiveReceitaDigital()\\n ? {\\n position: 'relative',\\n top: '-12px'\\n }\\n : { position: 'relative', top: '-48px' }\\n \\\"\\n [src]=\\\"\\n isThemeActiveReceitaDigital()\\n ? 'assets/img/logo-01.jpg'\\n : 'assets/img/mrd/logo-com-texto.png'\\n \\\"\\n class=\\\"img-fluid\\\"\\n alt=\\\"Logo Receita Digital\\\"\\n />\\n </a>\\n <div class=\\\"row\\\">\\n <div class=\\\"col-md-10\\\">\\n <h1>\\n Cadastre-se <br />\\n em nossa plataforma\\n </h1>\\n </div>\\n </div>\\n </div>\\n </section>\\n <section class=\\\"register-form\\\">\\n <div class=\\\"container pt-4\\\" [ngSwitch]=\\\"routerParam\\\">\\n <app-health-professional-form\\n *ngIf=\\\"routerParam === 'dentist' || routerParam === 'doctor' || routerParam === 'veterinarian'\\\"\\n [professionalType]=\\\"routerParam\\\"\\n (formChange)=\\\"form = $event\\\"\\n ></app-health-professional-form>\\n\\n <app-patient-form *ngSwitchCase=\\\"'patient'\\\" (formChange)=\\\"form = $event\\\"></app-patient-form>\\n\\n <app-pharmacy-form *ngSwitchCase=\\\"'pharmacy'\\\" (formChange)=\\\"form = $event\\\"></app-pharmacy-form>\\n\\n <div class=\\\"terms-area\\\" *ngIf=\\\"viewBtnSaveAndTermsDisclaimer\\\">\\n <label\\n nz-checkbox\\n class=\\\"terms-disclaimer\\\"\\n [(ngModel)]=\\\"isCheckedTerms\\\"\\n *ngIf=\\\"isThemeActiveReceitaDigital(); else mrd\\\"\\n >\\n Ao clicar em Salvar, você concorda com os\\n <button class=\\\"terms-btn\\\" (click)=\\\"redirect()\\\" theme>\\n Termos de Uso\\n </button>\\n e\\n <button class=\\\"terms-btn\\\" (click)=\\\"redirect(true)\\\" theme>\\n PolÃtica de Privacidade\\n </button>\\n do Receita Digital.\\n </label>\\n <ng-template #mrd>\\n <label nz-checkbox class=\\\"terms-disclaimer\\\" [(ngModel)]=\\\"isCheckedTerms\\\">\\n Ao clicar em Salvar, você concorda com os\\n <button class=\\\"terms-btn\\\" (click)=\\\"redirect()\\\" theme>\\n Termos de Uso</button\\n >e<button class=\\\"terms-btn\\\" (click)=\\\"openConditions()\\\" theme>PolÃtica de Privacidade</button\\n >do Meu Receituário Digital/Receita Digital.\\n </label>\\n </ng-template>\\n </div>\\n </div>\\n </section>\\n</div>\\n<div class=\\\"footer-save d-flex align-items-center fixed-bottom justify-content-between mt-3\\\" theme>\\n <div class=\\\"ml-2 flex-fill\\\">\\n <div\\n [ngStyle]=\\\"{\\n 'font-size': isMobile && viewBtnSaveAndTermsDisclaimer ? '11px' : '14px'\\n }\\\"\\n >\\n <div *ngIf=\\\"isThemeActiveReceitaDigital()\\\">\\n <div class=\\\"d-flex flex-fill justify-content-end\\\">\\n <a class=\\\"mr-3 helpContainer\\\" href=\\\"https://ajuda.receitadigital.com\\\"\\n ><i class=\\\"fa fa-comments mr-1\\\"></i>Fale Conosco.</a\\n >\\n </div>\\n </div>\\n </div>\\n </div>\\n <div *ngIf=\\\"!isMobile\\\"></div>\\n <button\\n *ngIf=\\\"viewBtnSaveAndTermsDisclaimer\\\"\\n type=\\\"button\\\"\\n class=\\\"btn footer-save-btn\\\"\\n (click)=\\\"submit()\\\"\\n >\\n Salvar <i class=\\\"fa fa-arrow-right\\\"></i>\\n </button>\\n</div>\\n\\n<ng-template #contentModalErrorCfmValidate>\\n <div class=\\\"container custom-container\\\">\\n <span class=\\\"title text-modal\\\" theme>Cadastro não finalizado!</span>\\n <h5 style=\\\"color: red; font-weight: bold;\\\">Erro ao validar dados médico na base do CFM.</h5>\\n <p>Não foi possivel localizar seu cadastro médico com o CPF e CRM informados</p>\\n <p>Verifique e digite novamente ou entre em contato com nosso atendimento para esclarecimentos</p>\\n </div>\\n</ng-template>\\n\\n<ng-template #contentModalErrorCfmConsult>\\n <div class=\\\"container custom-container\\\">\\n <span class=\\\"title text-modal\\\" theme>Cadastro não finalizado!</span>\\n <h5 style=\\\"color: red; font-weight: bold;\\\">Erro ao validar dados médico na base do CFM.</h5>\\n <p>O status do CRM informado é invalido e nao permite cadastramento.</p>\\n <p>Verifique e digite novamente ou entre em contato com nosso atendimento para esclarecimentos</p>\\n </div>\\n</ng-template>\\n\\n<app-modal-terms-and-conditions> </app-modal-terms-and-conditions>\\n\\n<ngx-loading [show]=\\\"loading\\\" [config]=\\\"{ backdropBorderRadius: '3px' }\\\"></ngx-loading>\\n<app-dialog-modal></app-dialog-modal>\\n\";","import { Component, OnInit, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-modal-terms-and-conditions',\r\n templateUrl: './modal-terms-and-conditions.component.html',\r\n styleUrls: ['./modal-terms-and-conditions.component.scss']\r\n})\r\nexport class ModalTermsAndConditionsComponent implements OnInit {\r\n @Input()\r\n isVisible = false;\r\n constructor() {}\r\n\r\n ngOnInit() {}\r\n\r\n openModal() {\r\n this.isVisible = true;\r\n }\r\n\r\n close() {\r\n this.isVisible = false;\r\n }\r\n}\r\n","export default \"<div class=\\\"modal\\\" *ngIf=\\\"isVisible\\\">\\r\\n <div class=\\\"modal-content\\\">\\r\\n <div class=\\\"header\\\">\\r\\n <span>TERMO DE USO E POLÃTICA DE PRIVACIDADE – RECEITA DIGITAL</span>\\r\\n <nz-divider nzOrientation=\\\"left\\\"></nz-divider>\\r\\n </div>\\r\\n\\r\\n <div class=\\\"modal-body\\\">\\r\\n <app-terms-and-conditions></app-terms-and-conditions>\\r\\n </div>\\r\\n\\r\\n <div class=\\\"modal-footer\\\">\\r\\n <button class=\\\"btn-ok\\\" nz-button (click)=\\\"close()\\\" theme>\\r\\n Ok\\r\\n </button>\\r\\n </div>\\r\\n </div>\\r\\n</div>\\r\\n\";","export default \".modal {\\n display: block;\\n position: fixed;\\n z-index: 1;\\n left: 0;\\n top: 0;\\n width: 100%;\\n height: 100%;\\n background-color: black;\\n background-color: rgba(0, 0, 0, 0.4);\\n}\\n\\n.modal-content {\\n background-color: #fefefe;\\n margin: 5% auto;\\n border-radius: 10px;\\n width: 800px;\\n text-align: center;\\n box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16);\\n max-height: 75%;\\n}\\n\\n.modal-body {\\n padding: 50px;\\n scroll-padding-top: 20px;\\n margin-bottom: 25px;\\n overflow: auto;\\n}\\n\\n.header {\\n padding-top: 25px;\\n padding-bottom: 25px;\\n text-align: center;\\n}\\n\\n.modal-footer {\\n border-radius: 0 0 10px 10px;\\n border-top: 0;\\n}\\n\\n.btn-ok {\\n background-color: var(--bg-color-primary);\\n border-color: var(--bg-color-primary);\\n color: var(--on-bg-color-primary);\\n}\\n\\n.btn-ok:hover,\\n.btn-ok:focus {\\n background-color: var(--bg-color-secondary);\\n border-color: var(--bg-color-secondary);\\n color: var(--on-bg-color-secondary);\\n}\";","import { HttpErrorResponse } from '@angular/common/http';\nimport { Component, HostListener, OnInit, ViewChild, TemplateRef } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { CoreService } from '@app/core/services/core.service';\nimport { DialogModalComponent } from '@app/shared/components/dialog-modal/dialog-modal.component';\nimport { CpfCnpjApiErrors } from '@app/shared/models/cpf-cnpj-api-errors.enum';\nimport { AppToastService } from '@app/shared/services/app-toast.service';\nimport { BigboostService } from '@app/shared/services/bigboost.service';\nimport { ThemeService } from '@app/theme';\nimport { logInvalidForm } from '@app/utils/logInvalidForm';\nimport { markFormGroup } from '@app/utils/markFormGroup';\nimport { Observable, throwError } from 'rxjs';\nimport { catchError, take } from 'rxjs/operators';\nimport { RegisterService } from '../../services/register.service';\nimport { ModalTermsAndConditionsComponent } from './modal-terms-and-conditions/modal-terms-and-conditions.component';\nimport { nativeAsync } from '@app/shared/decorators/nativeAsync';\nimport { NzModalService } from 'ng-zorro-antd';\nimport { HealthProfessional } from '@app/shared/models';\n\n@Component({\n selector: 'app-register',\n templateUrl: './register.component.html',\n styleUrls: ['./register.component.scss']\n})\nexport class RegisterComponent implements OnInit {\n actualDate = new Date();\n isDisabledButton = true;\n isCheckedTerms = false;\n isVisible = false;\n loading = false;\n\n form: FormGroup;\n routerParam: string;\n backendVersion$: Observable<string>;\n\n @ViewChild(DialogModalComponent, { static: true })\n dialogModal: DialogModalComponent;\n\n @ViewChild('contentModalErrorCfmValidate', { static: true })\n contentModalErrorCfmValidate: TemplateRef<{}>;\n\n @ViewChild('contentModalErrorCfmConsult', { static: true })\n contentModalErrorCfmConsult: TemplateRef<{}>;\n\n @ViewChild(ModalTermsAndConditionsComponent, { static: true })\n modalTermsAndConditionsComponent: ModalTermsAndConditionsComponent;\n\n isMobile = false;\n\n @HostListener('window:resize', ['$event'])\n onResize(event) {\n this.isMobile = this.coreService.isViewPortMobile();\n }\n\n constructor(\n private router: Router,\n private _route: ActivatedRoute,\n private registerService: RegisterService,\n private notification: AppToastService,\n private bigboostService: BigboostService,\n private themeService: ThemeService,\n private coreService: CoreService,\n private modalService: NzModalService\n ) {\n this.backendVersion$ = this.coreService.getBackendVersion();\n }\n\n ngOnInit(): void {\n this.routerParam = this._route.snapshot.paramMap.get('type');\n }\n\n get verifiedCpf() {\n return !!this.form && this.form.value.verifiedCpf;\n }\n\n get verified() {\n return !!this.form && this.form.value.verified;\n }\n\n get isPharmacyPublic() {\n return this.routerParam === 'pharmacy' && !!this.form && this.form.value.public_pharmacy;\n }\n\n get frontendVersion(): string {\n return this.coreService.frontendVersion;\n }\n\n get isRegisterDoctor() {\n return this.routerParam === 'doctor';\n }\n\n get viewBtnSaveAndTermsDisclaimer(): boolean {\n return (\n ((this.routerParam === 'patient' ||\n this.routerParam === 'doctor' ||\n this.routerParam === 'dentist' ||\n this.routerParam === 'veterinarian') &&\n this.verifiedCpf) ||\n (this.routerParam === 'pharmacy' && this.verified)\n );\n }\n\n handleError(err: HttpErrorResponse) {\n console.error(err);\n const message = err.error ? err.error.message : 'Houve um erro no cadastro';\n return throwError(message);\n }\n\n openTermsAndConditionsModal() {\n this.modalTermsAndConditionsComponent.openModal();\n }\n\n redirect(privacy?: boolean) {\n let url;\n if (this.routerParam === 'patient') {\n url = this.router.createUrlTree(['policies', 'termspatient']);\n }\n if (this.routerParam === 'doctor') {\n url = this.router.createUrlTree(['policies', 'termsdoctor']);\n }\n if (this.routerParam === 'dentist') {\n url = this.router.createUrlTree(['policies', 'termsdentist']);\n }\n if (this.routerParam === 'veterinarian') {\n url = this.router.createUrlTree(['policies', 'termsveterinary']);\n }\n if (this.routerParam === 'pharmacy') {\n url = this.router.createUrlTree(['policies', 'termspharmacy']);\n }\n if (privacy) {\n url = this.router.createUrlTree(['policies', 'privacypolicy']);\n }\n if (url) {\n window.open(url.toString(), '_blank');\n }\n }\n\n openTerms() {\n window.open('assets/file/mrd_termos.pdf', '_blank');\n }\n\n openConditions() {\n window.open('assets/file/mrd_politica.pdf', '_blank');\n }\n\n @nativeAsync\n async isValidCpfCnpj(cpf, cnpj) {\n try {\n this.loading = true;\n let consult: any;\n let message = '';\n if (cpf) {\n consult = await this.bigboostService.consultCpf(cpf).toPromise();\n message =\n 'A importação de dados do CPF está com instabilidade, preencha manualmente ou tente novamente mais tarde.';\n } else {\n consult = await this.bigboostService.consultCnpj(cnpj);\n message =\n 'A importação de dados do CNPJ está com instabilidade, preencha manualmente ou tente novamente mais tarde.';\n }\n this.loading = false;\n\n if (consult.status === 1) {\n return true;\n }\n if (consult.status === -1 || consult.erroCodigo >= 1000) {\n consult.erro = consult.erroCodigo >= 1000 ? consult.erro : message;\n this.form.value.pendency = consult;\n return true;\n }\n if (consult.status === 0 && consult.erroCodigo && consult.erroCodigo < 1000) {\n if (Object.values(CpfCnpjApiErrors).includes(consult.erroCodigo)) {\n this.notification.notify('warning', 'Aviso', consult.erro);\n return false;\n }\n }\n return false;\n } catch (error) {\n this.loading = false;\n }\n }\n\n @nativeAsync\n async submit() {\n markFormGroup(this.form);\n if (this.routerParam === 'pharmacy') {\n this.markVerified();\n }\n this.loading = true;\n\n const isHealthProfessional =\n this.routerParam === 'doctor' ||\n this.routerParam === 'dentist' ||\n this.routerParam === 'veterinarian';\n\n if (isHealthProfessional && this.form.value.specialties.length === 0) {\n this.notification.notify('warning', 'Aviso', 'Você precisa escolher ao menos uma especialidade.');\n } else if (this.form.invalid) {\n logInvalidForm(this.form);\n this.notification.notify('warning', 'Aviso', 'Confira os campos obrigatórios');\n } else if (!this.isCheckedTerms) {\n this.notification.notify(\n 'warning',\n 'Aviso',\n 'Para concluir o seu cadastro é necessário concordar com os Termo de Uso e PolÃtica de Privacidade da Receita Digital'\n );\n } else {\n await this.register(this.form.getRawValue());\n }\n this.loading = false;\n }\n\n private markVerified() {\n const controlVerified = this.form.get('verified');\n if (controlVerified) {\n controlVerified.setValue(true);\n }\n }\n\n @nativeAsync\n private async register(data: any) {\n try {\n const response = await this.registerService\n .register(this.routerParam, data)\n .pipe(take(1))\n .toPromise();\n\n if (this.isRegisterDoctor) {\n const dadosProfissionais = response as HealthProfessional;\n const title = dadosProfissionais.cfm.pendenteValidacao\n ? 'Recebemos seu cadastro!'\n : 'Cadastro realizado com sucesso!';\n const subtitle = 'Acesse seu e-mail para ativar a conta e cadastrar sua senha!';\n const textoComplemento = dadosProfissionais.cfm.pendenteValidacao\n ? 'Seu cadastro será liberado após a validação dos dados pela nossa equipe (RES 2299/2021 CFM)'\n : null;\n\n this.dialogModal.createTplModal(title, subtitle, textoComplemento);\n } else {\n this.dialogModal.createTplModal(\n 'Cadastro realizado com sucesso.',\n 'Acesse seu e-mail para ativar a conta e cadastrar sua senha!'\n );\n }\n\n this.router.navigate(['entry/login']);\n } catch (httpError) {\n this.loading = false;\n const errMsg = httpError.error ? httpError.error.message : 'Houve um erro no cadastro';\n const errCode = httpError.error ? httpError.error.errorCode : '';\n if (errCode === 'ERROR_CRM_VALIDADO_INVALIDO') {\n this.dialogModal.createTplModalContent(this.contentModalErrorCfmValidate);\n } else if (errCode === 'ERROR_CRM_CONSULTADO_IRREGULAR') {\n this.dialogModal.createTplModalContent(this.contentModalErrorCfmConsult);\n } else {\n this.notification.notify('error', 'Erro', errMsg);\n if (this.routerParam === 'pharmacy') {\n if (this.isPharmacyPublic) {\n this.form.get('cnes').setErrors(null);\n } else {\n this.form.get('cnpj').setErrors(null);\n }\n } else {\n this.form.get('cpf').setErrors(null);\n }\n this.form.get('email').setErrors(null);\n if (errMsg === 'E-mail já cadastrado') {\n this.form.get('email').setErrors({ alreadyExists: true });\n } else if (errMsg === 'CPF já cadastrado') {\n this.form.get('cpf').setErrors({ alreadyExists: true });\n } else if (errMsg === 'CNES já cadastrado') {\n this.form.get('cnes').setErrors({ alreadyExists: true });\n } else if (errMsg === 'CNPJ já cadastrado') {\n this.form.get('cnpj').setErrors({ alreadyExists: true });\n }\n }\n }\n }\n\n isThemeActiveReceitaDigital() {\n const active = this.themeService.getActiveTheme();\n return active.name === 'theme-receita-digital';\n }\n}\n","export default \".section-hero {\\n height: 300px;\\n}\\n.section-hero h1 {\\n margin-top: 2%;\\n}\\n.page-register {\\n overflow-y: auto;\\n height: calc(100vh - 3.125rem);\\n padding-bottom: 1.25rem;\\n}\\n.register-form {\\n flex: 1;\\n}\\n.register-form .terms-area .terms-disclaimer {\\n margin-left: 0.25rem;\\n font-size: 13px;\\n}\\n.register-form .terms-area .terms-btn {\\n background: none;\\n border: none;\\n color: var(--bg-color-secondary);\\n outline: none;\\n font-weight: bold;\\n}\\n.loading-icon {\\n margin-right: 8px;\\n}\\n.ok-btn {\\n background-color: #00d3b2;\\n}\\n.footer-save {\\n margin-top: 50px;\\n background-color: var(--bg-footer);\\n}\\n.footer-save .copyright {\\n color: white;\\n padding-left: 20px;\\n font-family: Arial, sans-serif;\\n display: flex;\\n flex-direction: column;\\n align-items: center;\\n}\\n.footer-save .footer-save-btn {\\n background-color: var(--bg-color-btn-save);\\n color: var(--color-white) !important;\\n}\\n.custom-container {\\n display: flex;\\n flex-direction: column;\\n align-items: center;\\n gap: 16px;\\n}\\n.custom-container .title {\\n text-transform: none;\\n font-size: 30pt;\\n line-height: normal;\\n}\\n.custom-container p {\\n color: #363636;\\n font-size: 20px;\\n font-family: \\\"prolight\\\";\\n}\\n.custom-container .text-modal {\\n color: var(--bg-color-primary) !important;\\n}\";","export default \"<section class=\\\"section-hero section-header\\\" theme>\\n <div class=\\\"container\\\">\\n <a routerLink=\\\"/\\\" class=\\\"brand-bg\\\">\\n <img\\n [ngStyle]=\\\"\\n isThemeActiveReceitaDigital\\n ? {\\n position: 'relative',\\n top: '-12px'\\n }\\n : { position: 'relative', top: '-48px' }\\n \\\"\\n [src]=\\\"\\n isThemeActiveReceitaDigital ? 'assets/img/logo-01.jpg' : 'assets/img/mrd/logo-com-texto.png'\\n \\\"\\n class=\\\"img-fluid\\\"\\n alt=\\\"Logo Receita Digital\\\"\\n />\\n </a>\\n <h1 class=\\\"mb-5 mt-5\\\">\\n Escolha o tipo de conta que deseja criar\\n </h1>\\n </div>\\n</section>\\n<section class=\\\"section-form\\\">\\n <div class=\\\"container pt-5\\\">\\n <form nz-form [formGroup]=\\\"accountTypeForm\\\" (ngSubmit)=\\\"submitForm($event)\\\">\\n <div class=\\\"row\\\">\\n <div class=\\\"col-8 col-lg-4\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"account-select\\\" theme>Tipo de Conta</nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <nz-select\\n id=\\\"account-select\\\"\\n formControlName=\\\"account\\\"\\n [nzPlaceHolder]=\\\"'Selecione o tipo de conta'\\\"\\n nzDropdownClassName=\\\"account-select\\\"\\n nzAllowClear\\n theme\\n >\\n <nz-option nzValue=\\\"doctor\\\" nzLabel=\\\"Médico\\\"></nz-option>\\n <nz-option nzValue=\\\"dentist\\\" nzLabel=\\\"Dentista\\\"></nz-option>\\n <nz-option nzValue=\\\"veterinarian\\\" nzLabel=\\\"Veterinário\\\"></nz-option>\\n <nz-option\\n nzValue=\\\"patient\\\"\\n nzLabel=\\\"Paciente\\\"\\n *ngIf=\\\"isThemeActiveReceitaDigital\\\"\\n ></nz-option>\\n <nz-option\\n nzValue=\\\"pharmacy\\\"\\n nzLabel=\\\"Farmácia\\\"\\n *ngIf=\\\"isThemeActiveReceitaDigital\\\"\\n ></nz-option>\\n </nz-select>\\n <nz-form-explain\\n *ngIf=\\\"accountTypeForm.get('account').dirty && accountTypeForm.get('account').errors\\\"\\n >\\n <ng-container *ngIf=\\\"accountTypeForm.get('account').hasError('required')\\\">\\n Campo Obrigatório, por favor selecione o tipo de conta.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n <div class=\\\"row justify-content-end\\\">\\n <div class=\\\"col-4 col-lg-2 d-flex justify-content-end\\\">\\n <button class=\\\"btn btn-circle btn-success\\\" theme><i class=\\\"fa fa-arrow-right\\\"></i></button>\\n </div>\\n </div>\\n </div>\\n </form>\\n </div>\\n</section>\\n\";","import { Component, OnInit } from '@angular/core';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport { ThemeService } from '@app/theme';\nimport { environment } from '@env/environment';\n\n@Component({\n selector: 'app-account-type',\n templateUrl: './account-type.component.html',\n styleUrls: ['./account-type.component.scss']\n})\nexport class AccountTypeComponent implements OnInit {\n accountTypeForm: FormGroup = new FormGroup({\n account: new FormControl(null, Validators.required)\n });\n constructor(private router: Router, private themeService: ThemeService) {}\n\n ngOnInit() {\n const maintenance = environment.maintenance;\n if (maintenance) {\n this.router.navigate([`/update`]);\n }\n }\n\n submitForm($event): void {\n $event.preventDefault();\n const accountCtrl = this.accountTypeForm.get('account');\n accountCtrl.markAsDirty();\n accountCtrl.updateValueAndValidity();\n if (this.accountTypeForm.valid) {\n this.router.navigate(['/entry/register', accountCtrl.value]);\n }\n }\n\n get isThemeActiveReceitaDigital() {\n const active = this.themeService.getActiveTheme();\n return active.name === 'theme-receita-digital';\n }\n}\n","export default \".section-hero {\\n height: 350px;\\n}\\n.section-hero h1 {\\n margin-top: 8.4%;\\n}\\n.ant-row {\\n min-height: 113.83px;\\n}\\n.ant-form-item {\\n font-family: \\\"proregular\\\", sans-serif;\\n}\\n.ant-form-item-with-help {\\n margin: 0 0 24px;\\n}\\n.btn-circle {\\n width: 50px;\\n height: 50px;\\n line-height: 0;\\n margin-top: 25px;\\n}\\n.section-form {\\n padding-bottom: 80px;\\n min-height: calc(100vh - 463px);\\n}\\n.btn-black2 {\\n background-color: #363636;\\n border-color: #363636;\\n color: white;\\n text-transform: none;\\n min-width: 148px;\\n box-shadow: none;\\n}\\n.mrd-logo {\\n position: relative;\\n top: -48px;\\n}\";","import { Component, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-welcome',\r\n templateUrl: './welcome.component.html',\r\n styleUrls: ['./welcome.component.scss']\r\n})\r\nexport class WelcomeComponent implements OnInit {\r\n constructor() {}\r\n\r\n ngOnInit() {}\r\n}\r\n","export default \"<section class=\\\"section-hero bg-green\\\">\\r\\n <div class=\\\"container\\\">\\r\\n <div class=\\\"row justify-content-center\\\">\\r\\n <a routerLink=\\\"/\\\" class=\\\"brand-bg\\\">\\r\\n <img src=\\\"assets/img/logo-inline-alt.svg\\\" class=\\\"img-fluid\\\" alt=\\\"Logo Receita Digital\\\" />\\r\\n </a>\\r\\n </div>\\r\\n <div class=\\\"row justify-content-center\\\">\\r\\n <div class=\\\"hero d-flex justify-content-center flex-column align-items-center\\\">\\r\\n <h1 class=\\\"text-center\\\">\\r\\n Seja Bem-vindo <br />\\r\\n ao Receita Digital\\r\\n </h1>\\r\\n <p class=\\\"text-primary\\\">Agora você já pode prescrever gratuitamente</p>\\r\\n <p class=\\\"text-primary\\\">\\r\\n Lembre-se de confirmar a sua conta <br />\\r\\n através do link enviado por e-mail\\r\\n </p>\\r\\n <div class=\\\"hero-links\\\">\\r\\n <a routerLink=\\\"/dashboard\\\" class=\\\"btn btn-primary\\\">Ir para o meu painel</a>\\r\\n <a href=\\\"#\\\" class=\\\"btn btn-secondary\\\">Começar a prescrever</a>\\r\\n </div>\\r\\n </div>\\r\\n </div>\\r\\n </div>\\r\\n</section>\\r\\n\";","export default \".section-hero {\\n min-height: calc(100vh - 50px);\\n}\\n\\n.hero {\\n padding-top: 5rem;\\n padding-bottom: 5rem;\\n}\\n\\n.hero p {\\n font-family: \\\"prolight\\\", sans-serif;\\n font-size: 25px;\\n}\\n\\n.hero p:nth-child(3) {\\n margin-top: 1.2rem;\\n margin-bottom: 3.2rem;\\n}\";","export default \"<section class=\\\"section-hero section-header\\\">\\r\\n <div class=\\\"container d-flex align-items-center justify-content-center flex-column\\\">\\r\\n <a routerLink=\\\"/\\\" class=\\\"brand-bg\\\">\\r\\n <img\\r\\n [ngStyle]=\\\"\\r\\n isThemeActiveReceitaDigital()\\r\\n ? {\\r\\n position: 'relative',\\r\\n top: '-12px'\\r\\n }\\r\\n : { position: 'relative', top: '-48px' }\\r\\n \\\"\\r\\n [src]=\\\"\\r\\n isThemeActiveReceitaDigital() ? 'assets/img/logo-01.jpg' : 'assets/img/mrd/logo-com-texto.png'\\r\\n \\\"\\r\\n class=\\\"img-fluid\\\"\\r\\n alt=\\\"Logo Receita Digital\\\"\\r\\n />\\r\\n </a>\\r\\n <h1 class=\\\"mt-5\\\">\\r\\n Recupere sua senha\\r\\n </h1>\\r\\n </div>\\r\\n <div class=\\\"section-footer p-3 d-flex align-items-center justify-content-center\\\">\\r\\n <h5>Digite o e-mail cadastrado para recuperar sua senha.</h5>\\r\\n </div>\\r\\n</section>\\r\\n<section class=\\\"section container d-flex justify-content-center align-items-center\\\">\\r\\n <div class=\\\"w-46 ml-5 d-flex flex-column\\\">\\r\\n <form nz-form [formGroup]=\\\"form\\\">\\r\\n <div class=\\\"row\\\">\\r\\n <div class=\\\"col-md-11\\\">\\r\\n <nz-form-item class=\\\"mb-4\\\">\\r\\n <nz-form-control nzHasFeedback>\\r\\n <input nz-input type=\\\"email\\\" placeholder=\\\"E-mail\\\" formControlName=\\\"accountField\\\" />\\r\\n <nz-form-explain *ngIf=\\\"form.get('accountField').dirty && form.get('accountField').errors\\\">\\r\\n <ng-container>\\r\\n E-mail inválido, por favor digite um e-mail válido.\\r\\n </ng-container>\\r\\n </nz-form-explain>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n </div>\\r\\n\\r\\n <div class=\\\"col-md-11\\\">\\r\\n <div class=\\\"row\\\">\\r\\n <div class=\\\"col-sm-12 col-md-5 d-flex align-items-center\\\">\\r\\n <button routerLink=\\\"/entry/\\\" class=\\\"btn btn-back\\\">Voltar</button>\\r\\n </div>\\r\\n <div class=\\\"col-sm-12 col-md-7 d-flex justify-content-end\\\">\\r\\n <button (click)=\\\"sendEmail()\\\" class=\\\"btn btn-success\\\">Prosseguir</button>\\r\\n </div>\\r\\n </div>\\r\\n </div>\\r\\n </div>\\r\\n </form>\\r\\n </div>\\r\\n</section>\\r\\n<ngx-loading [show]=\\\"loading\\\" [config]=\\\"{ backdropBorderRadius: '3px' }\\\"></ngx-loading>\\r\\n\";","export default \".bg-black {\\n background-color: #1e1e1e;\\n}\\n\\n.section-footer {\\n height: 89px;\\n}\\n\\n.section-footer h5 {\\n font-size: 25px;\\n color: white;\\n margin-bottom: 0;\\n}\\n\\n:host ::ng-deep .anticon-check-circle-fill {\\n color: #1e1e1e;\\n}\\n\\n.btn-back {\\n background-color: #f7f7f7;\\n border: 1px solid #eee;\\n}\";","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { environment } from '@env/environment';\r\nimport { nativeAsync } from '@app/shared/decorators/nativeAsync';\r\n\r\nexport const USER_URL = `user`;\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AccountService {\r\n originHost: string;\r\n constructor(private http: HttpClient) {}\r\n\r\n sendEmail(email: string) {\r\n return this.http.post<any>(`${environment.apiRoot}${USER_URL}/forgot-password`, {\r\n email: email,\r\n originHost: window.location.origin\r\n });\r\n }\r\n\r\n checkToken(token: string) {\r\n return this.http.get(`${environment.apiRoot}${USER_URL}/reset-password/${token}`);\r\n }\r\n\r\n @nativeAsync\r\n async activateAccount(form: any) {\r\n form.originHost = window.location.origin;\r\n return await this.http.post(`${environment.apiRoot}${USER_URL}/activate-account`, form).toPromise();\r\n }\r\n\r\n changePassword(token: string, form: any) {\r\n return this.http.post(`${environment.apiRoot}${USER_URL}/reset-password/${token}`, form);\r\n }\r\n}\r\n","import { Component } from '@angular/core';\nimport { FormBuilder, Validators } from '@angular/forms';\nimport { AppToastService } from '@app/shared/services/app-toast.service';\nimport { ThemeService } from '@app/theme';\nimport { AccountService } from '../../services/account.service';\nimport { nativeAsync } from '@app/shared/decorators/nativeAsync';\n\n@Component({\n selector: 'app-forgot-password',\n templateUrl: './reset-password.component.html',\n styleUrls: ['./reset-password.component.scss']\n})\nexport class ResetPasswordComponent {\n loading: boolean;\n\n form = this.fb.group({\n accountField: ['', Validators.compose([Validators.required, Validators.email])]\n });\n\n constructor(\n private fb: FormBuilder,\n private accountService: AccountService,\n private notification: AppToastService,\n private themeService: ThemeService\n ) {}\n\n @nativeAsync\n async sendEmail() {\n this.loading = true;\n try {\n const res = await this.accountService.sendEmail(this.form.value.accountField).toPromise();\n this.notification.notify('info', res.message, null);\n } catch (err) {\n console.error(err);\n }\n this.loading = false;\n }\n\n isThemeActiveReceitaDigital() {\n const active = this.themeService.getActiveTheme();\n return active.name === 'theme-receita-digital';\n }\n}\n","import { Component } from '@angular/core';\r\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\r\nimport { Router } from '@angular/router';\r\nimport { AppToastService } from '@app/shared/services/app-toast.service';\r\nimport { ThemeService } from '@app/theme';\r\nimport { markFormGroup } from '@app/utils/markFormGroup';\r\nimport { AccountService } from '../../services/account.service';\r\n\r\n@Component({\r\n selector: 'app-change-password',\r\n templateUrl: './change-password.component.html',\r\n styleUrls: ['./change-password.component.scss', '../reset-password/reset-password.component.scss']\r\n})\r\nexport class ChangePasswordComponent {\r\n loading: boolean;\r\n form = new FormGroup(\r\n {\r\n password: new FormControl('', [Validators.required, Validators.minLength(6)]),\r\n confirmPassword: new FormControl('', Validators.required)\r\n },\r\n { validators: [this.checkPasswords] }\r\n );\r\n\r\n constructor(\r\n private router: Router,\r\n private accountService: AccountService,\r\n private notification: AppToastService,\r\n private themeService: ThemeService\r\n ) {}\r\n\r\n checkPasswords(group: FormGroup) {\r\n const password = group.get('password').value;\r\n const confirmPassword = group.get('confirmPassword').value;\r\n if (password !== confirmPassword) {\r\n group.get('confirmPassword').setErrors({\r\n mismatch: true,\r\n required: !confirmPassword\r\n });\r\n }\r\n return null;\r\n }\r\n\r\n async changePassword() {\r\n markFormGroup(this.form);\r\n if (this.form.valid) {\r\n const url = window.location.href.split('/');\r\n const token = url[url.length - 1];\r\n\r\n try {\r\n this.loading = true;\r\n await this.accountService.checkToken(token).toPromise();\r\n await this.accountService.changePassword(token, this.form.value).toPromise();\r\n this.loading = false;\r\n this.notification.notify('success', 'Senha atualizada com sucesso', null);\r\n this.router.navigate([`/entry`]);\r\n } catch (err) {\r\n console.log(err);\r\n this.loading = false;\r\n if (err.error.message) {\r\n this.notification.notify('error', 'Alerta', err.error.message);\r\n }\r\n }\r\n }\r\n }\r\n\r\n isThemeActiveReceitaDigital() {\r\n const active = this.themeService.getActiveTheme();\r\n return active.name === 'theme-receita-digital';\r\n }\r\n}\r\n","export default \"<section class=\\\"section-hero section-header\\\" theme>\\r\\n <div class=\\\"container d-flex align-items-center justify-content-center flex-column\\\">\\r\\n <a routerLink=\\\"/\\\" class=\\\"brand-bg\\\">\\r\\n <img\\r\\n [ngStyle]=\\\"\\r\\n isThemeActiveReceitaDigital()\\r\\n ? {\\r\\n position: 'relative',\\r\\n top: '-12px'\\r\\n }\\r\\n : { position: 'relative', top: '-48px' }\\r\\n \\\"\\r\\n [src]=\\\"\\r\\n isThemeActiveReceitaDigital() ? 'assets/img/logo-01.jpg' : 'assets/img/mrd/logo-com-texto.png'\\r\\n \\\"\\r\\n class=\\\"img-fluid\\\"\\r\\n alt=\\\"Logo Receita Digital\\\"\\r\\n />\\r\\n </a>\\r\\n <h1 class=\\\"mt-5\\\">\\r\\n Defina sua nova senha\\r\\n </h1>\\r\\n </div>\\r\\n</section>\\r\\n<section class=\\\"section container d-flex justify-content-center align-items-center\\\" theme>\\r\\n <div class=\\\"w-50 ml-5 d-flex flex-column\\\">\\r\\n <p class=\\\"pr-3\\\">\\r\\n Crie uma senha forte utilizando seis caracteres ou mais. Ela deve conter uma combinação de letras\\r\\n maiúsculas e minúsculas, números e sÃmbolos.\\r\\n </p>\\r\\n <form nz-form [formGroup]=\\\"form\\\">\\r\\n <div class=\\\"row\\\">\\r\\n <div class=\\\"col-md-11\\\">\\r\\n <nz-form-item class=\\\"mb-4\\\">\\r\\n <nz-form-control nzHasFeedback>\\r\\n <app-input-password placeholder=\\\"Senha\\\" formControlName=\\\"password\\\"></app-input-password>\\r\\n <nz-form-explain *ngIf=\\\"form.get('password').dirty && form.get('password').errors\\\">\\r\\n <ng-container *ngIf=\\\"form.get('password').hasError('required')\\\">\\r\\n A senha é obrigatória.\\r\\n </ng-container>\\r\\n </nz-form-explain>\\r\\n </nz-form-control>\\r\\n <app-password-strength [password]=\\\"form.value.password\\\"></app-password-strength>\\r\\n </nz-form-item>\\r\\n </div>\\r\\n <div class=\\\"col-md-11\\\">\\r\\n <nz-form-item class=\\\"mb-4\\\">\\r\\n <nz-form-control nzHasFeedback>\\r\\n <app-input-password\\r\\n placeholder=\\\"Confirme sua senha\\\"\\r\\n formControlName=\\\"confirmPassword\\\"\\r\\n ></app-input-password>\\r\\n <nz-form-explain\\r\\n *ngIf=\\\"form.get('confirmPassword').dirty && form.get('confirmPassword').errors\\\"\\r\\n >\\r\\n <ng-container *ngIf=\\\"form.get('confirmPassword').hasError('required')\\\">\\r\\n A senha de confirmação é obrigatória.\\r\\n </ng-container>\\r\\n </nz-form-explain>\\r\\n <nz-form-explain\\r\\n *ngIf=\\\"form.get('confirmPassword').dirty && form.get('confirmPassword').errors\\\"\\r\\n >\\r\\n <ng-container *ngIf=\\\"form.get('confirmPassword').hasError('mismatch')\\\">\\r\\n Senhas diferentes.\\r\\n </ng-container>\\r\\n </nz-form-explain>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n </div>\\r\\n <div class=\\\"col-md-11 d-flex justify-content-end\\\">\\r\\n <button (click)=\\\"changePassword()\\\" class=\\\"btn btn-ok\\\" [disabled]=\\\"!form.valid\\\">\\r\\n SALVAR\\r\\n </button>\\r\\n </div>\\r\\n </div>\\r\\n </form>\\r\\n </div>\\r\\n</section>\\r\\n<ngx-loading [show]=\\\"loading\\\" [config]=\\\"{ backdropBorderRadius: '3px' }\\\"></ngx-loading>\\r\\n\";","export default \"\";","export default \"<section class=\\\"section-hero header\\\" theme>\\r\\n <div class=\\\"container d-flex align-items-center justify-content-center flex-column\\\">\\r\\n <a routerLink=\\\"/\\\" class=\\\"brand-bg\\\">\\r\\n <img\\r\\n *ngIf=\\\"isThemeActiveReceitaDigital; else mrdLogo\\\"\\r\\n src=\\\"assets/img/logo-01.jpg\\\"\\r\\n alt=\\\"Logo Receita Digital\\\"\\r\\n style=\\\"position: relative; top: -12px;\\\"\\r\\n />\\r\\n\\r\\n <ng-template #mrdLogo>\\r\\n <img src=\\\"assets/img/mrd/logo-com-texto.png\\\" class=\\\"mrd-logo\\\" alt=\\\"Logo MRD\\\" />\\r\\n </ng-template>\\r\\n </a>\\r\\n <h1 class=\\\"mb-5 mt-5\\\">\\r\\n Defina uma senha para ativar sua conta\\r\\n </h1>\\r\\n </div>\\r\\n</section>\\r\\n<section class=\\\"section container d-flex justify-content-center align-items-center p-4\\\" theme>\\r\\n <div class=\\\"d-flex flex-column form\\\">\\r\\n <p class=\\\"pr-3\\\">\\r\\n Crie uma senha forte utilizando seis caracteres ou mais. Ela deve conter uma combinação de letras\\r\\n maiúsculas e minúsculas, números e sÃmbolos.\\r\\n </p>\\r\\n <form nz-form [formGroup]=\\\"passwordForm\\\">\\r\\n <div class=\\\"row\\\">\\r\\n <div class=\\\"col-md-11\\\">\\r\\n <nz-form-item class=\\\"mb-4\\\">\\r\\n <nz-form-control nzHasFeedback>\\r\\n <app-input-password placeholder=\\\"Senha\\\" formControlName=\\\"password\\\"></app-input-password>\\r\\n <nz-form-explain\\r\\n *ngIf=\\\"passwordForm.get('password').dirty && passwordForm.get('password').errors\\\"\\r\\n >\\r\\n <ng-container *ngIf=\\\"passwordForm.get('password').hasError('required')\\\">\\r\\n A senha é obrigatória.\\r\\n </ng-container>\\r\\n </nz-form-explain>\\r\\n </nz-form-control>\\r\\n <app-password-strength\\r\\n [password]=\\\"passwordForm.value.password\\\"\\r\\n (isStrong)=\\\"isPasswordStrong = $event\\\"\\r\\n ></app-password-strength>\\r\\n </nz-form-item>\\r\\n </div>\\r\\n <div class=\\\"col-md-11\\\">\\r\\n <nz-form-item class=\\\"mb-4\\\">\\r\\n <nz-form-control nzHasFeedback>\\r\\n <app-input-password\\r\\n placeholder=\\\"Confirme sua senha\\\"\\r\\n formControlName=\\\"confirmPassword\\\"\\r\\n ></app-input-password>\\r\\n <nz-form-explain\\r\\n *ngIf=\\\"\\r\\n passwordForm.get('confirmPassword').dirty && passwordForm.get('confirmPassword').errors\\r\\n \\\"\\r\\n >\\r\\n <ng-container *ngIf=\\\"passwordForm.get('confirmPassword').hasError('required')\\\">\\r\\n A senha de confirmação é obrigatória.\\r\\n </ng-container>\\r\\n <ng-container *ngIf=\\\"passwordForm.get('confirmPassword').hasError('notEqual')\\\">\\r\\n Senhas diferentes.\\r\\n </ng-container>\\r\\n </nz-form-explain>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n </div>\\r\\n <div class=\\\"col-md-11 d-flex justify-content-end\\\">\\r\\n <button (click)=\\\"activateAccount()\\\" class=\\\"btn btn-ok\\\" [disabled]=\\\"!passwordForm.valid\\\">\\r\\n Ativar conta\\r\\n </button>\\r\\n </div>\\r\\n </div>\\r\\n </form>\\r\\n </div>\\r\\n</section>\\r\\n\\r\\n<ngx-loading [show]=\\\"loading\\\" [config]=\\\"{ backdropBorderRadius: '3px' }\\\"></ngx-loading>\\r\\n<app-modal-activate-account></app-modal-activate-account>\\r\\n\";","import { Component, OnInit, ViewChild } from '@angular/core';\r\nimport { FormControl, FormGroup, ValidationErrors, Validators } from '@angular/forms';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { DialogModalComponent } from '@app/shared/components/dialog-modal/dialog-modal.component';\r\nimport { ModalActivateAccountComponent } from '@app/shared/components/modal-activate-account/modal-activate-account.component';\r\nimport { AppToastService } from '@app/shared/services/app-toast.service';\r\nimport { ThemeService } from '@app/theme';\r\nimport { markFormGroup } from '@app/utils/markFormGroup';\r\nimport { AccountService } from '../../services/account.service';\r\nimport { nativeAsync } from '@app/shared/decorators/nativeAsync';\r\n\r\n@Component({\r\n selector: 'app-activate-account',\r\n templateUrl: './activate-account.component.html',\r\n styleUrls: ['./activate-account.component.scss']\r\n})\r\nexport class ActivateAccountComponent implements OnInit {\r\n token: string;\r\n loading: boolean;\r\n userType: string;\r\n passwordForm = new FormGroup({});\r\n isPasswordStrong = false;\r\n\r\n @ViewChild(ModalActivateAccountComponent, { static: true })\r\n professionalModal: ModalActivateAccountComponent;\r\n\r\n @ViewChild(DialogModalComponent, { static: true })\r\n dialogModal: DialogModalComponent;\r\n\r\n private validatePassword: ValidationErrors | null;\r\n\r\n constructor(\r\n private activatedRoute: ActivatedRoute,\r\n private router: Router,\r\n private accountService: AccountService,\r\n private notification: AppToastService,\r\n private themeService: ThemeService\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.validatePassword = (form: FormGroup) => {\r\n const { password, confirmPassword } = form.value;\r\n if (password !== confirmPassword) {\r\n form.get('confirmPassword').setErrors({ ...form.get('confirmPassword').errors, notEqual: true });\r\n return { notEqual: true };\r\n } else {\r\n form.get('confirmPassword').setErrors(null);\r\n }\r\n\r\n if (!this.isPasswordStrong) {\r\n return { weakPassword: true };\r\n }\r\n\r\n return null;\r\n };\r\n\r\n this.passwordForm = new FormGroup(\r\n {\r\n password: new FormControl('', [Validators.required, Validators.minLength(6)]),\r\n confirmPassword: new FormControl('', Validators.required)\r\n },\r\n this.validatePassword\r\n );\r\n\r\n this.activatedRoute.paramMap.subscribe(params => {\r\n this.token = params.get('token');\r\n });\r\n\r\n this.activatedRoute.queryParams.subscribe(queryParams => {\r\n if (queryParams.userType) {\r\n this.userType = queryParams.userType;\r\n }\r\n });\r\n }\r\n\r\n @nativeAsync\r\n async activateAccount() {\r\n try {\r\n markFormGroup(this.passwordForm);\r\n if (this.passwordForm.valid) {\r\n this.loading = true;\r\n const token = this.token;\r\n const form = { token: token, ...this.passwordForm.value };\r\n await this.accountService.activateAccount(form);\r\n this.loading = false;\r\n this.notification.notify('success', 'Conta ativada com sucesso', null);\r\n this.router.navigate([`/entry`]);\r\n }\r\n } catch (err) {\r\n this.loading = false;\r\n this.notification.notify('error', 'Aviso', err.error.message);\r\n }\r\n }\r\n\r\n get isThemeActiveReceitaDigital() {\r\n const active = this.themeService.getActiveTheme();\r\n return active.name === 'theme-receita-digital';\r\n }\r\n}\r\n","export default \".header {\\n background-color: var(--background-header);\\n}\\n\\n.section-hero {\\n height: 350px;\\n}\\n\\n.section-hero h1 {\\n margin-top: 8.4%;\\n}\\n\\n.mrd-logo {\\n position: relative;\\n top: -48px;\\n}\\n\\n.btn {\\n font-size: 12px;\\n}\\n\\n@media screen and (orientation: landscape) {\\n .form {\\n width: 50%;\\n }\\n}\";","export default \"<section class=\\\"section-hero bg-green\\\">\\n <div class=\\\"container d-flex align-items-center justify-content-center flex-column\\\">\\n <a routerLink=\\\"/\\\" class=\\\"brand-bg\\\">\\n <img src=\\\"assets/img/logo-01.png\\\" class=\\\"img-fluid\\\" alt=\\\"Logo Receita Digital\\\" />\\n </a>\\n <h1 class=\\\"mb-5 mt-5\\\">\\n Farmácias\\n </h1>\\n </div>\\n</section>\\n<section class=\\\"section container d-flex justify-content-center align-items-center\\\" theme>\\n <div>\\n <h2 class=\\\"title\\\">\\n Selecione uma farmácia para continuar.\\n </h2>\\n <div class=\\\"row\\\">\\n <div class=\\\"col-9\\\">\\n <nz-select nzShowSearch nzPlaceHolder=\\\"Selecione uma farmácia\\\" [(ngModel)]=\\\"selectedPharmacy\\\">\\n <nz-option\\n *ngFor=\\\"let pharmacy of pharmacies\\\"\\n [nzValue]=\\\"pharmacy\\\"\\n [nzLabel]=\\\"pharmacy.businessName || pharmacy.business_name_entity\\\"\\n ></nz-option>\\n </nz-select>\\n </div>\\n <div class=\\\"col-3\\\">\\n <button class=\\\"btn btn-success\\\" (click)=\\\"continue()\\\" [disabled]=\\\"!selectedPharmacy\\\">\\n <i class=\\\"fa fa-arrow-right\\\"></i>\\n </button>\\n </div>\\n </div>\\n </div>\\n</section>\\n\";","import { Component, OnInit } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { AuthService } from '@app/core/services/auth.service';\nimport { PharmacistService } from '@app/modules/pharmacist/services/pharmacist.service';\nimport { nativeAsync } from '@app/shared/decorators/nativeAsync';\nimport { Pharmacy } from '@app/shared/models';\nimport { User } from '@app/shared/models/decodedLoginToken';\n\n@Component({\n selector: 'app-pharmacy-option',\n templateUrl: './pharmacy-option.component.html',\n styleUrls: ['./pharmacy-option.component.scss']\n})\nexport class PharmacyOptionComponent implements OnInit {\n pharmacies: Pharmacy[] = [];\n selectedPharmacy: any = null;\n loading: boolean;\n\n constructor(\n private router: Router,\n private authService: AuthService,\n private pharmacistService: PharmacistService\n ) {\n const state = this.router.getCurrentNavigation().extras.state;\n if (state) {\n this.pharmacies = state.pharmacies;\n } else {\n const extraData = JSON.parse(localStorage.getItem('extra_data'));\n if (extraData) {\n window.location.href = '/dashboard';\n }\n }\n }\n\n @nativeAsync\n async ngOnInit() {\n if (!this.pharmacies) {\n await this.getPharmacies(this.user);\n }\n }\n\n get user(): User {\n return this.authService.user();\n }\n\n @nativeAsync\n async getPharmacies(user) {\n this.loading = true;\n const result = await this.pharmacistService.getPharmacies(user._id).toPromise();\n this.loading = false;\n if (result.length === 1) {\n localStorage.setItem(\n 'extra_data',\n JSON.stringify({ pharmacyUserId: result[0].userId, pharmacyId: result[0]._id })\n );\n window.location.href = '/dashboard';\n } else {\n this.pharmacies = result;\n }\n }\n\n continue() {\n localStorage.setItem(\n 'extra_data',\n JSON.stringify({\n pharmacyUserId: this.selectedPharmacy.userId,\n pharmacyId: this.selectedPharmacy._id\n })\n );\n window.location.href = '/dashboard';\n }\n}\n","export default \"nz-select {\\n margin-right: 8px;\\n width: 400px;\\n}\";","import { NgModule } from '@angular/core';\r\nimport { Routes, RouterModule } from '@angular/router';\r\nimport { LoginComponent } from './pages/login/login.component';\r\nimport { RegisterComponent } from './pages/register/register.component';\r\nimport { AccountTypeComponent } from './pages/register/account-type.component';\r\nimport { WelcomeComponent } from './pages/welcome/welcome.component';\r\nimport { ResetPasswordComponent } from './pages/reset-password/reset-password.component';\r\nimport { ChangePasswordComponent } from './pages/change-password/change-password.component';\r\nimport { ActivateAccountComponent } from './pages/activate-account/activate-account.component';\r\nimport { PharmacyOptionComponent } from './pages/pharmacy-option/pharmacy-option.component';\r\n\r\nconst routes: Routes = [\r\n { path: '', pathMatch: 'full', redirectTo: 'login' },\r\n { path: 'login', component: LoginComponent },\r\n { path: 'pharmacy-options', component: PharmacyOptionComponent },\r\n { path: 'account-type', component: AccountTypeComponent },\r\n { path: 'register/:type', component: RegisterComponent },\r\n { path: 'registration-complete', component: WelcomeComponent },\r\n { path: 'reset-password', component: ResetPasswordComponent },\r\n { path: 'reset-password/:token', component: ChangePasswordComponent },\r\n { path: 'activate-account/:token', component: ActivateAccountComponent }\r\n];\r\n\r\n@NgModule({\r\n imports: [RouterModule.forChild(routes)],\r\n exports: [RouterModule]\r\n})\r\nexport class EntryRoutingModule {}\r\n","import { animate, group, state, style, transition, trigger } from '@angular/animations';\r\nimport { Component, EventEmitter, HostListener, Input, OnInit, Output } from '@angular/core';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { CoreService } from '@app/core/services/core.service';\r\nimport { ValidationService } from '@app/core/services/validation.service';\r\nimport { CepService } from '@app/modules/entry/services/cep.service';\r\nimport { ModalAddPatientComponent } from '@app/modules/patients/pages/modal-add-patient/modal-add-patient.component';\r\nimport { PatientsService } from '@app/modules/patients/services/patients.service';\r\nimport { BrazilianStates } from '@app/shared/data/Brazilian-states';\r\nimport { nativeAsync } from '@app/shared/decorators/nativeAsync';\r\nimport { BrazilState } from '@app/shared/models';\r\nimport { DataBigboostConsult } from '@app/shared/models/paciente';\r\nimport { AppToastService } from '@app/shared/services/app-toast.service';\r\nimport { BigboostService } from '@app/shared/services/bigboost.service';\r\nimport { environment } from '@env/environment';\r\nimport * as moment from 'moment';\r\nimport { BsModalService } from 'ngx-bootstrap/modal';\r\nimport { Observable } from 'rxjs';\r\n\r\ntype typeEntryPatient = 'HUMANO' | 'ANIMAL';\r\n\r\n@Component({\r\n selector: 'app-patient-form',\r\n templateUrl: './patient-form.component.html',\r\n styleUrls: ['./patient-form.component.scss'],\r\n animations: [\r\n trigger('slideInOut', [\r\n state('in', style({ height: '*', opacity: 0 })),\r\n transition(':leave', [\r\n style({ height: '*', opacity: 1 }),\r\n group([animate(300, style({ height: 0 })), animate('400ms ease-in-out', style({ opacity: 0 }))])\r\n ]),\r\n transition(':enter', [\r\n style({ height: 0, opacity: 0 }),\r\n group([\r\n animate(300, style({ height: '*' })),\r\n animate('400ms ease-in-out', style({ opacity: 1 }))\r\n ])\r\n ])\r\n ])\r\n ]\r\n})\r\nexport class PatientFormComponent implements OnInit {\r\n @Input() patient: DataBigboostConsult;\r\n @Input() isRegisteredByPatient = true;\r\n @Input() getForm: Observable<boolean>;\r\n @Output() submit = new EventEmitter<FormGroup>();\r\n @Output() formChange = new EventEmitter<FormGroup>();\r\n\r\n isProduction = environment.production;\r\n valueTypeEntryPatient: typeEntryPatient = 'HUMANO';\r\n isMobile = false;\r\n\r\n form = this.fb.group({\r\n name: ['', [Validators.required, ValidationService.nomeValidator]],\r\n fullname: ['', [Validators.required, ValidationService.nomeValidator]],\r\n checkNoCpf: [false],\r\n cpf: ['', [Validators.required, ValidationService.cpfValidator]],\r\n sex: ['', Validators.required],\r\n birthdate: ['', [Validators.required, ValidationService.dateValidator()]],\r\n dateOfBirth: ['', [Validators.required, ValidationService.dateValidator({ format: 'YYYY-MM-DD' })]],\r\n cellphone: ['', Validators.required],\r\n telephone: [''],\r\n email: ['', [Validators.required, Validators.email]],\r\n membership: this.fb.group({\r\n mothersName: ['']\r\n }),\r\n address: this.fb.group({\r\n uf: ['', Validators.required],\r\n city: ['', Validators.required],\r\n complement: [''],\r\n number: ['', Validators.required],\r\n street: ['', Validators.required],\r\n neighborhood: ['', Validators.required],\r\n cep: ['', [Validators.required, ValidationService.cepValidator]]\r\n }),\r\n pendency: [null],\r\n verifiedCpf: [false]\r\n });\r\n\r\n states: BrazilState[] = BrazilianStates;\r\n loading = false;\r\n consult: any;\r\n private lastCpf: string;\r\n private lastDateOfBirth: string;\r\n\r\n constructor(\r\n private fb: FormBuilder,\r\n private cepService: CepService,\r\n private modalService: BsModalService,\r\n private notification: AppToastService,\r\n private bigboostService: BigboostService,\r\n private patientsService: PatientsService,\r\n private coreService: CoreService\r\n ) {\r\n this.onResize();\r\n }\r\n\r\n @HostListener('window:resize')\r\n onResize() {\r\n this.isMobile = this.coreService.isViewPortMobile();\r\n }\r\n\r\n ngOnInit() {\r\n this.initForm();\r\n\r\n if (this.patient) {\r\n this.handleConsultCpf(this.patient);\r\n }\r\n\r\n this.formChange.emit(this.form);\r\n }\r\n\r\n private initForm() {\r\n if (this.isRegisteredByPatient) {\r\n this.form.addControl('identity', this.fb.control(''));\r\n this.form.addControl(\r\n 'emailConfirmation',\r\n this.fb.control('', Validators.compose([Validators.required, Validators.email]))\r\n );\r\n this.form.validator = ValidationService.emailMatch;\r\n\r\n this.form.get('emailConfirmation').valueChanges.subscribe(email => {\r\n this.form.get('emailConfirmation').setValue(email && email.toLowerCase(), { emitEvent: false });\r\n });\r\n }\r\n\r\n this.form.get('cpf').valueChanges.subscribe(cpf => {\r\n if (this.lastCpf !== cpf && !this.hasPendency) {\r\n this.verifiedCpf = false;\r\n }\r\n });\r\n\r\n this.form.get('birthdate').valueChanges.subscribe(birthdate => {\r\n const dateOfBirth = moment(birthdate, 'DD/MM/YYYY').format('YYYY-MM-DD');\r\n if (this.lastDateOfBirth !== dateOfBirth) {\r\n if (!this.hasPendency) {\r\n this.verifiedCpf = false;\r\n }\r\n this.form.get('dateOfBirth').setValue(dateOfBirth);\r\n }\r\n });\r\n\r\n this.form.get('email').valueChanges.subscribe(email => {\r\n this.form.get('email').setValue(email && email.toLowerCase(), { emitEvent: false });\r\n });\r\n }\r\n\r\n get hasPendency() {\r\n return (this.patient && this.patient.status !== 1) || this.form.value.pendency;\r\n }\r\n\r\n get cpfCtrl() {\r\n return this.form.get('cpf');\r\n }\r\n\r\n get dateCtrl() {\r\n return this.form.get('birthdate');\r\n }\r\n\r\n get verifiedCpf() {\r\n return this.form.get('verifiedCpf').value;\r\n }\r\n\r\n set verifiedCpf(value: boolean) {\r\n this.form.get('verifiedCpf').setValue(value);\r\n }\r\n\r\n @nativeAsync\r\n async consultCpf() {\r\n const { cpf, birthdate: date, checkNoCpf } = this.form.value;\r\n // A data que vem no formulário não vem no formato para que possa ser formatada.\r\n // Essa linha vai fazer com que a data fique no formato 00/00/0000.\r\n let noCpf = checkNoCpf;\r\n if (!noCpf) {\r\n noCpf = this.valueTypeEntryPatient === 'ANIMAL';\r\n }\r\n\r\n const dateOfBirth = moment(date, 'DDMMYYYY').format('YYYY-MM-DD');\r\n\r\n if (\r\n this.cpfCtrl.valid &&\r\n this.dateCtrl.valid &&\r\n (this.lastCpf !== cpf || this.lastDateOfBirth !== dateOfBirth || !this.verifiedCpf)\r\n ) {\r\n try {\r\n this.loading = true;\r\n const existsPatient = Boolean(await this.patientsService.existsPatient(cpf).toPromise());\r\n if (existsPatient) {\r\n if (!noCpf) {\r\n this.notification.notify(\r\n 'warning',\r\n 'Aviso',\r\n `Paciente já cadastrado. Favor entrar em contato com a Central de atendimento`\r\n );\r\n } else {\r\n const patient = await this.patientsService.getPatientByCpf(cpf).toPromise();\r\n this.showModalAddPatient(patient, noCpf, existsPatient);\r\n }\r\n this.loading = false;\r\n } else {\r\n const consult = await this.bigboostService.consultCpf(cpf, dateOfBirth).toPromise();\r\n this.consult = consult;\r\n this.loading = false;\r\n if (noCpf) {\r\n if (consult.menorIdade) {\r\n this.notification.notify(\r\n 'warning',\r\n 'Aviso',\r\n 'CPF é de um menor, tente novamente com o CPF do responsável'\r\n );\r\n } else {\r\n const valueNoCpf = noCpf;\r\n this.showModalAddPatient(consult, valueNoCpf);\r\n }\r\n } else {\r\n if (consult.menorIdade) {\r\n const valueNoCpf = noCpf;\r\n this.showModalAddPatient(consult, valueNoCpf);\r\n } else {\r\n this.handleConsultCpf(consult);\r\n }\r\n }\r\n }\r\n } catch (err) {\r\n console.error(err);\r\n this.loading = false;\r\n if (err.status === 404) {\r\n this.notification.notify(\r\n 'error',\r\n 'Error ao consultar CPF',\r\n 'CPF não localizado na Receita Federal. Verifique as informações digitadas e tente novamente. Em caso de dúvidas, entre em contato com nosso atendimento',\r\n 8000\r\n );\r\n return;\r\n }\r\n\r\n if (err.status === 500 || err.status === 0) {\r\n this.notification.notify(\r\n 'error',\r\n 'Error ao consultar CPF',\r\n 'Plataforma de consulta de CPF com erro ao tentar realizar consulta do CPF',\r\n 8000\r\n );\r\n return;\r\n }\r\n\r\n if (err.status === 400 && err.error.code === 'ERRO_CPF_INVALID') {\r\n this.notification.notify('warning', 'Aviso', 'CPF informado é invalido!');\r\n this.form.get('cpf').setErrors({ cpf: true });\r\n } else {\r\n const consult = {\r\n status: -1,\r\n cpf,\r\n erroCodigo: err.status,\r\n erro: 'A importação de dados do cpf está com instabilidade'\r\n };\r\n this.form.get('pendency').setValue(consult);\r\n if (err.status === 401) {\r\n this.notification.notify(\r\n 'warning',\r\n 'Aviso',\r\n 'Data de nascimento não corresponde ao CPF informado'\r\n );\r\n this.form.get('birthdate').setErrors({ nonMatchingCpf: true });\r\n this.verifiedCpf = false;\r\n } else {\r\n this.handleConsultCpf(consult);\r\n }\r\n }\r\n }\r\n this.lastCpf = cpf;\r\n this.lastDateOfBirth = dateOfBirth;\r\n }\r\n }\r\n\r\n private showModalAddPatient(consult, noCpf, existingPatient = false) {\r\n const initialState = {\r\n patient: consult,\r\n registeredByResponsible: true,\r\n isPet: this.valueTypeEntryPatient === 'ANIMAL',\r\n isResponsible: noCpf || !consult.menorIdade,\r\n existingPatient\r\n };\r\n const modal = this.modalService.show(ModalAddPatientComponent, {\r\n class: 'modal-lg',\r\n initialState,\r\n backdrop: 'static',\r\n keyboard: false\r\n });\r\n }\r\n\r\n private handleConsultCpf(consult: DataBigboostConsult) {\r\n this.form.get('name').reset();\r\n this.form.get('name').enable();\r\n\r\n if (consult.status === 1) {\r\n this.form.get('fullname').disable();\r\n this.form.get('pendency').setValue(null);\r\n this.setForm(consult);\r\n if (!this.isRegisteredByPatient) {\r\n this.form.get('cpf').disable({ emitEvent: false });\r\n this.form.get('birthdate').disable({ emitEvent: false });\r\n }\r\n } else {\r\n this.form.get('fullname').enable();\r\n this.form.get('pendency').setValue(consult);\r\n this.form.get('cpf').setValue(consult.cpf);\r\n this.resetForm();\r\n if (consult.erro) {\r\n this.notification.notify(\r\n 'warning',\r\n 'Aviso',\r\n 'A importação de dados do CPF está com instabilidade, mas você poderá se cadastrar preenchendo os campos manualmente.'\r\n );\r\n }\r\n }\r\n this.verifiedCpf = true;\r\n }\r\n\r\n private setForm(consult: DataBigboostConsult) {\r\n this.form.get('cpf').setValue(consult.cpf);\r\n this.form.get('fullname').setValue(consult.nome);\r\n this.form.get('name').setValue(consult.nome);\r\n this.form.get('sex').setValue(consult.genero);\r\n if (!this.form.value.dateOfBirth) {\r\n const nascimento = moment(consult.nascimento, 'DD/MM/YYYY');\r\n this.form.get('dateOfBirth').setValue(nascimento.format('YYYY-MM-DD'));\r\n this.form.get('birthdate').setValue(nascimento.format('DDMMYYYY'));\r\n }\r\n\r\n this.lastCpf = this.form.value.cpf;\r\n this.lastDateOfBirth = this.form.value.dateOfBirth;\r\n }\r\n\r\n private resetForm() {\r\n this.form.get('fullname').reset();\r\n this.form.get('sex').reset();\r\n }\r\n\r\n @nativeAsync\r\n async onKey(event: any) {\r\n if (event.target.value.length === 10) {\r\n const cep = event.target.value.replace(/[^\\d]+/g, '');\r\n const data = await this.cepService.consult(cep);\r\n if (!data.erro) {\r\n this.form.controls['address'].patchValue({\r\n uf: data.uf,\r\n street: data.logradouro,\r\n neighborhood: data.bairro,\r\n city: data.localidade,\r\n number: null,\r\n cep: data.cep\r\n });\r\n }\r\n }\r\n }\r\n\r\n checkEmail(disable: boolean) {\r\n if (disable) {\r\n this.form.get('email').reset();\r\n this.form.get('email').disable();\r\n } else {\r\n this.form.get('email').enable();\r\n }\r\n }\r\n}\r\n","export default \"<nz-alert\\r\\n *ngIf=\\\"!patient || patient.status === 1\\\"\\r\\n class=\\\"mb-4\\\"\\r\\n nzType=\\\"warning\\\"\\r\\n nzMessage=\\\"Para agilizar seu cadastro, buscaremos dados complementares no site da Receita Federal.\\r\\nEste é um procedimento seguro e o sigilo dos seus dados é garantido pela nossa plataforma\\\"\\r\\n></nz-alert>\\r\\n\\r\\n<nz-radio-group [(ngModel)]=\\\"valueTypeEntryPatient\\\" style=\\\"margin-bottom: 10px;\\\">\\r\\n <label nz-radio nzValue=\\\"HUMANO\\\">Humano</label>\\r\\n <label nz-radio nzValue=\\\"ANIMAL\\\">Animal</label>\\r\\n</nz-radio-group>\\r\\n\\r\\n<ng-container *ngIf=\\\"!isMobile; else temaplateCheckBoxOrMsg\\\"></ng-container>\\r\\n\\r\\n<form nz-form [formGroup]=\\\"form\\\" theme>\\r\\n <div class=\\\"row justify-content-between\\\">\\r\\n <div class=\\\"col-md-6\\\">\\r\\n <div class=\\\"row align-items-center\\\">\\r\\n <div class=\\\"col-md\\\">\\r\\n <nz-form-item>\\r\\n <nz-form-label nzFor=\\\"cpf\\\">CPF <span class=\\\"mandatory\\\">*</span></nz-form-label>\\r\\n <nz-form-control nzHasFeedback>\\r\\n <input\\r\\n nz-input\\r\\n id=\\\"cpf\\\"\\r\\n formControlName=\\\"cpf\\\"\\r\\n placeholder=\\\"000.000.000-00\\\"\\r\\n mask=\\\"000.000.000-00\\\"\\r\\n />\\r\\n <nz-form-explain *ngIf=\\\"cpfCtrl.dirty && cpfCtrl.errors\\\">\\r\\n <ng-container *ngIf=\\\"cpfCtrl.hasError('required')\\\">\\r\\n Campo obrigatório, por favor digite seu CPF.\\r\\n </ng-container>\\r\\n <ng-container *ngIf=\\\"!cpfCtrl.hasError('required') && cpfCtrl.hasError('cpf')\\\">\\r\\n CPF inválido, por favor digite um CPF válido.\\r\\n </ng-container>\\r\\n <ng-container *ngIf=\\\"cpfCtrl.hasError('alreadyExists')\\\">\\r\\n CPF já cadastrado.\\r\\n </ng-container>\\r\\n </nz-form-explain>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n </div>\\r\\n\\r\\n <div class=\\\"col-md\\\">\\r\\n <nz-form-item>\\r\\n <nz-form-label nzFor=\\\"birthdate\\\"\\r\\n >Data de nascimento<span class=\\\"mandatory\\\"> *</span></nz-form-label\\r\\n >\\r\\n <nz-form-control nzHasFeedback>\\r\\n <input\\r\\n nz-input\\r\\n id=\\\"birthdate\\\"\\r\\n type=\\\"tel\\\"\\r\\n mask=\\\"00/00/0000\\\"\\r\\n formControlName=\\\"birthdate\\\"\\r\\n placeholder=\\\"DD/MM/AAAA\\\"\\r\\n />\\r\\n <nz-form-explain *ngIf=\\\"dateCtrl.dirty && dateCtrl.errors\\\">\\r\\n <ng-container *ngIf=\\\"dateCtrl.hasError('required')\\\">\\r\\n Campo obrigatório, por favor digite sua data de nascimento.\\r\\n </ng-container>\\r\\n <ng-container *ngIf=\\\"!dateCtrl.hasError('required') && dateCtrl.hasError('birthdate')\\\">\\r\\n Nome inválido.\\r\\n </ng-container>\\r\\n <ng-container *ngIf=\\\"dateCtrl.hasError('invalidDate') && dateCtrl.value.length > 0\\\">\\r\\n Data inválida.\\r\\n </ng-container>\\r\\n <ng-container *ngIf=\\\"dateCtrl.hasError('nonMatchingCpf')\\\">\\r\\n Data de nascimento não corresponde ao CPF informado.\\r\\n </ng-container>\\r\\n </nz-form-explain>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n </div>\\r\\n\\r\\n <div class=\\\"col-auto pt-3\\\" *ngIf=\\\"isRegisteredByPatient\\\">\\r\\n <button\\r\\n nz-button\\r\\n class=\\\"btn-primary\\\"\\r\\n (click)=\\\"consultCpf()\\\"\\r\\n [disabled]=\\\"cpfCtrl.invalid || dateCtrl.invalid || loading\\\"\\r\\n >\\r\\n OK\\r\\n </button>\\r\\n </div>\\r\\n\\r\\n <ng-container *ngIf=\\\"verifiedCpf\\\">\\r\\n <div class=\\\"col-12\\\">\\r\\n <nz-form-item>\\r\\n <nz-form-label nzFor=\\\"fullname\\\"\\r\\n >Nome completo <span class=\\\"mandatory\\\">*</span></nz-form-label\\r\\n >\\r\\n <nz-form-control nzHasFeedback>\\r\\n <input\\r\\n formControlName=\\\"fullname\\\"\\r\\n id=\\\"fullname\\\"\\r\\n nz-input\\r\\n placeholder=\\\"ex: João Gilberto\\\"\\r\\n maxlength=\\\"128\\\"\\r\\n autocomplete=\\\"disabled\\\"\\r\\n />\\r\\n <nz-form-explain *ngIf=\\\"form.get('fullname').dirty && form.get('fullname').errors\\\">\\r\\n <ng-container *ngIf=\\\"form.get('fullname').hasError('required')\\\">\\r\\n Campo obrigatório, por favor digite o seu nome e sobrenome.\\r\\n </ng-container>\\r\\n <ng-container\\r\\n *ngIf=\\\"\\r\\n !form.get('fullname').hasError('required') &&\\r\\n form.get('fullname').hasError('fullname')\\r\\n \\\"\\r\\n >\\r\\n Por favor digite o seu nome e sobrenome.\\r\\n </ng-container>\\r\\n </nz-form-explain>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n </div>\\r\\n <div class=\\\"col-12\\\">\\r\\n <nz-form-item>\\r\\n <nz-form-label nzFor=\\\"name\\\"\\r\\n >Nome de exibição/social<span class=\\\"mandatory\\\">*</span></nz-form-label\\r\\n >\\r\\n <nz-form-control nzHasFeedback>\\r\\n <input\\r\\n formControlName=\\\"name\\\"\\r\\n id=\\\"name\\\"\\r\\n nz-input\\r\\n placeholder=\\\"ex: João Gilberto\\\"\\r\\n maxlength=\\\"128\\\"\\r\\n autocomplete=\\\"disabled\\\"\\r\\n />\\r\\n <nz-form-explain *ngIf=\\\"form.get('name').dirty && form.get('name').errors\\\">\\r\\n <ng-container *ngIf=\\\"form.get('name').hasError('required')\\\">\\r\\n Campo obrigatório, por favor digite um nome de exibição.\\r\\n </ng-container>\\r\\n <ng-container\\r\\n *ngIf=\\\"!form.get('name').hasError('required') && form.get('name').hasError('name')\\\"\\r\\n >\\r\\n Por favor digite um nome de exibição.\\r\\n </ng-container>\\r\\n </nz-form-explain>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n </div>\\r\\n\\r\\n <ng-container *ngIf=\\\"isRegisteredByPatient\\\">\\r\\n <div class=\\\"col-6\\\">\\r\\n <nz-form-item>\\r\\n <nz-form-label nzFor=\\\"identity\\\">Identidade</nz-form-label>\\r\\n <nz-form-control nzHasFeedback>\\r\\n <input\\r\\n nz-input\\r\\n id=\\\"identity\\\"\\r\\n formControlName=\\\"identity\\\"\\r\\n placeholder=\\\"ex: 18.040.818-5\\\"\\r\\n maxlength=\\\"12\\\"\\r\\n />\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n </div>\\r\\n\\r\\n <div class=\\\"col-6\\\">\\r\\n <nz-form-item>\\r\\n <nz-form-label nzFor=\\\"sex\\\">Sexo <span class=\\\"mandatory\\\">*</span></nz-form-label>\\r\\n <nz-form-control nzHasFeedback>\\r\\n <select formControlName=\\\"sex\\\" id=\\\"sex\\\" nz-input nzPlaceHolder=\\\"Selecione\\\">\\r\\n <option value=\\\"M\\\">Masculino</option>\\r\\n <option value=\\\"F\\\">Feminino</option>\\r\\n </select>\\r\\n <nz-form-explain *ngIf=\\\"form.get('sex').dirty && form.get('sex').errors\\\">\\r\\n <ng-container *ngIf=\\\"form.get('sex').hasError('required')\\\">\\r\\n Campo obrigatório, por favor selecione o sexo.\\r\\n </ng-container>\\r\\n </nz-form-explain>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n </div>\\r\\n </ng-container>\\r\\n\\r\\n <div class=\\\"col-12\\\" [formGroup]=\\\"form.get('membership')\\\">\\r\\n <nz-form-item>\\r\\n <nz-form-label nzFor=\\\"mothersName\\\">Nome da mãe</nz-form-label>\\r\\n <nz-form-control nzHasFeedback>\\r\\n <input\\r\\n nz-input\\r\\n placeholder=\\\"Digite o nome da mãe\\\"\\r\\n formControlName=\\\"mothersName\\\"\\r\\n id=\\\"mothersName\\\"\\r\\n maxlength=\\\"128\\\"\\r\\n autocomplete=\\\"disabled\\\"\\r\\n />\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n </div>\\r\\n </ng-container>\\r\\n </div>\\r\\n\\r\\n <ng-container *ngIf=\\\"isMobile; else temaplateCheckBoxOrMsg\\\"></ng-container>\\r\\n <ng-template #temaplateCheckBoxOrMsg>\\r\\n <div class=\\\"mt-2\\\">\\r\\n <label\\r\\n *ngIf=\\\"!verifiedCpf && valueTypeEntryPatient === 'HUMANO'\\\"\\r\\n nz-checkbox\\r\\n class=\\\"mb-2\\\"\\r\\n formControlName=\\\"checkNoCpf\\\"\\r\\n >Menor sem CPF?</label\\r\\n >\\r\\n\\r\\n <div *ngIf=\\\"form.get('checkNoCpf').value || valueTypeEntryPatient === 'ANIMAL'\\\">\\r\\n <span\\r\\n >{{ isMobile ? 'Digite abaixo' : 'Digite acima' }} o CPF e data de nascimento do(a)\\r\\n <span class=\\\"mandatory\\\">responsável</span></span\\r\\n >\\r\\n </div>\\r\\n </div>\\r\\n </ng-template>\\r\\n </div>\\r\\n\\r\\n <ng-container *ngIf=\\\"verifiedCpf\\\">\\r\\n <div class=\\\"col-md-5\\\" [@slideInOut]>\\r\\n <nz-form-item *ngIf=\\\"form.get('cellphone') as cellphone\\\">\\r\\n <nz-form-label nzFor=\\\"cellphone\\\"\\r\\n >Telefone 1 <span class=\\\"mandatory\\\">*</span>\\r\\n <app-popover-button\\r\\n content=\\\"Será utilizado para receber suas receitas e demais documentos via WhatsApp e SMS\\\"\\r\\n ></app-popover-button>\\r\\n </nz-form-label>\\r\\n <nz-form-control nzHasFeedback>\\r\\n <input\\r\\n nz-input\\r\\n id=\\\"cellphone\\\"\\r\\n [mask]=\\\"cellphone.value.length <= 10 ? '(00) 0000-00009' : '(00) 00000-0000'\\\"\\r\\n placeholder=\\\"(21) 92222-2222\\\"\\r\\n formControlName=\\\"cellphone\\\"\\r\\n autocomplete=\\\"disabled\\\"\\r\\n />\\r\\n <nz-form-explain *ngIf=\\\"cellphone.dirty && cellphone.errors\\\">\\r\\n <ng-container *ngIf=\\\"cellphone.hasError('required')\\\">\\r\\n Campo obrigatório, por favor digite seu telefone para contato.\\r\\n </ng-container>\\r\\n </nz-form-explain>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n\\r\\n <nz-form-item *ngIf=\\\"form.get('telephone') as telephone\\\">\\r\\n <nz-form-label nzFor=\\\"telephone\\\" class=\\\"cellphone\\\">Telefone 2</nz-form-label>\\r\\n <nz-form-control>\\r\\n <input\\r\\n nz-input\\r\\n id=\\\"telephone\\\"\\r\\n [mask]=\\\"telephone.value.length <= 10 ? '(00) 0000-00009' : '(00) 00000-0000'\\\"\\r\\n formControlName=\\\"telephone\\\"\\r\\n placeholder=\\\"(21) 2222-2222\\\"\\r\\n autocomplete=\\\"disabled\\\"\\r\\n />\\r\\n <nz-form-explain *ngIf=\\\"telephone.dirty && telephone.errors\\\">\\r\\n <ng-container *ngIf=\\\"telephone.hasError('telephone')\\\">\\r\\n Telefone inválido, por favor digite um número válido.\\r\\n </ng-container>\\r\\n </nz-form-explain>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n\\r\\n <nz-form-item>\\r\\n <div class=\\\"row\\\">\\r\\n <div class=\\\"col-5\\\">\\r\\n <nz-form-label nzFor=\\\"email\\\">E-mail <span class=\\\"mandatory\\\">*</span></nz-form-label>\\r\\n </div>\\r\\n <div class=\\\"col\\\">\\r\\n <label\\r\\n *ngIf=\\\"!isRegisteredByPatient\\\"\\r\\n nz-checkbox\\r\\n (nzCheckedChange)=\\\"checkEmail($event)\\\"\\r\\n style=\\\"font-size: 14px;\\\"\\r\\n >Não cadastrar e-mail</label\\r\\n >\\r\\n </div>\\r\\n </div>\\r\\n <nz-form-control nzHasFeedback>\\r\\n <input\\r\\n nz-input\\r\\n id=\\\"email\\\"\\r\\n type=\\\"email\\\"\\r\\n formControlName=\\\"email\\\"\\r\\n placeholder=\\\"usuario@email.com\\\"\\r\\n style=\\\"text-transform: lowercase;\\\"\\r\\n (keydown.space)=\\\"$event.preventDefault()\\\"\\r\\n autocomplete=\\\"disabled\\\"\\r\\n />\\r\\n\\r\\n <nz-form-explain>\\r\\n <ng-container *ngIf=\\\"form.get('email').hasError('required') && form.get('email').dirty\\\">\\r\\n <span class=\\\"error\\\">Campo obrigatório, por favor digite seu e-mail.</span><br />\\r\\n </ng-container>\\r\\n <ng-container *ngIf=\\\"form.get('email').invalid && form.get('email').value?.length > 0\\\">\\r\\n <span\\r\\n class=\\\"error\\\"\\r\\n *ngIf=\\\"form.get('email').hasError('alreadyExists'); else invalidEmail\\\"\\r\\n >E-mail já cadastrado, por favor escolha outro e-mail.</span\\r\\n >\\r\\n <ng-template #invalidEmail>\\r\\n <span class=\\\"error\\\">E-mail inválido, por favor digite um e-mail válido.</span>\\r\\n </ng-template>\\r\\n <br />\\r\\n </ng-container>\\r\\n </nz-form-explain>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n\\r\\n <nz-form-item *ngIf=\\\"isRegisteredByPatient\\\">\\r\\n <nz-form-label nzFor=\\\"emailConfirmation\\\"\\r\\n >Confirmação de e-mail<span class=\\\"mandatory\\\"> *</span>\\r\\n </nz-form-label>\\r\\n <nz-form-control nzHasFeedback>\\r\\n <input\\r\\n nz-input\\r\\n id=\\\"emailConfirmation\\\"\\r\\n formControlName=\\\"emailConfirmation\\\"\\r\\n placeholder=\\\"usuario@email.com\\\"\\r\\n type=\\\"email\\\"\\r\\n style=\\\"text-transform: lowercase;\\\"\\r\\n (keydown.space)=\\\"$event.preventDefault()\\\"\\r\\n onpaste=\\\"false\\\"\\r\\n autocomplete=\\\"disabled\\\"\\r\\n />\\r\\n\\r\\n <nz-form-explain class=\\\"error\\\">\\r\\n <ng-container\\r\\n *ngIf=\\\"\\r\\n form.get('emailConfirmation').hasError('required') &&\\r\\n form.get('emailConfirmation').dirty\\r\\n \\\"\\r\\n >\\r\\n <span> Campo obrigatório, por favor digite seu e-mail.</span><br />\\r\\n </ng-container>\\r\\n\\r\\n <ng-container *ngIf=\\\"form.get('emailConfirmation').hasError('emailMatch')\\\">\\r\\n <span>Os endereços de e-mail não correspondem</span><br />\\r\\n </ng-container>\\r\\n\\r\\n <ng-container\\r\\n *ngIf=\\\"\\r\\n !form.hasError('emailMatch') &&\\r\\n form.get('emailConfirmation').invalid &&\\r\\n form.get('emailConfirmation').value.length > 0\\r\\n \\\"\\r\\n >\\r\\n <span>E-mail inválido, por favor digite um e-mail válido.</span><br />\\r\\n </ng-container>\\r\\n </nz-form-explain>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n\\r\\n <nz-form-item *ngIf=\\\"!isRegisteredByPatient\\\">\\r\\n <nz-form-label nzFor=\\\"sex\\\">Sexo <span class=\\\"mandatory\\\">*</span></nz-form-label>\\r\\n <nz-form-control nzHasFeedback>\\r\\n <select formControlName=\\\"sex\\\" id=\\\"sex\\\" nz-input nzPlaceHolder=\\\"Selecione\\\">\\r\\n <option value=\\\"M\\\">Masculino</option>\\r\\n <option value=\\\"F\\\">Feminino</option>\\r\\n </select>\\r\\n <nz-form-explain *ngIf=\\\"form.get('sex').dirty && form.get('sex').errors\\\">\\r\\n <ng-container *ngIf=\\\"form.get('sex').hasError('required')\\\">\\r\\n Campo obrigatório, por favor selecione o sexo.\\r\\n </ng-container>\\r\\n </nz-form-explain>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n </div>\\r\\n\\r\\n <nz-divider nzOrientation=\\\"left\\\" nzText=\\\"Endereço\\\"></nz-divider>\\r\\n <app-address-data-form [form]=\\\"form.get('address')\\\" [required]=\\\"true\\\"></app-address-data-form>\\r\\n\\r\\n <!-- <div class=\\\"col-md-12\\\" [@slideInOut] *ngIf=\\\"form.get('address')\\\">\\r\\n <div class=\\\"row\\\" [formGroup]=\\\"form.get('address')\\\">\\r\\n <div class=\\\"col-md-3\\\">\\r\\n <nz-form-item>\\r\\n <nz-form-label nzFor=\\\"cep\\\">CEP<span class=\\\"mandatory\\\"> *</span></nz-form-label>\\r\\n <nz-form-control nzHasFeedback>\\r\\n <input\\r\\n nz-input\\r\\n id=\\\"cep\\\"\\r\\n formControlName=\\\"cep\\\"\\r\\n placeholder=\\\"00.000-000\\\"\\r\\n mask=\\\"00.000-000\\\"\\r\\n autocomplete=\\\"disabled\\\"\\r\\n (keyup)=\\\"onKey($event)\\\"\\r\\n />\\r\\n <nz-form-explain *ngIf=\\\"form.get('address.cep').dirty && form.get('address.cep').errors\\\">\\r\\n <ng-container *ngIf=\\\"form.get('address.cep').hasError('required')\\\">\\r\\n Campo obrigatório, por favor digite seu CEP.\\r\\n </ng-container>\\r\\n <ng-container\\r\\n *ngIf=\\\"\\r\\n !form.get('address.cep').hasError('required') &&\\r\\n form.get('address.cep').hasError('address.cep')\\r\\n \\\"\\r\\n >\\r\\n CEP inválido, por favor digite um CEP válido.\\r\\n </ng-container>\\r\\n </nz-form-explain>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n </div>\\r\\n\\r\\n <div class=\\\"col-md-6\\\">\\r\\n <nz-form-item>\\r\\n <nz-form-label nzFor=\\\"logradouro\\\"\\r\\n >Logradouro<span class=\\\"mandatory\\\"> *</span></nz-form-label\\r\\n >\\r\\n <nz-form-control nzHasFeedback>\\r\\n <input\\r\\n formControlName=\\\"street\\\"\\r\\n id=\\\"street\\\"\\r\\n nz-input\\r\\n placeholder=\\\"Digite o logradouro\\\"\\r\\n maxlength=\\\"128\\\"\\r\\n autocomplete=\\\"disabled\\\"\\r\\n />\\r\\n <nz-form-explain\\r\\n *ngIf=\\\"form.get('address.street').dirty && form.get('address.street').errors\\\"\\r\\n >\\r\\n <ng-container *ngIf=\\\"form.get('address.street').hasError('required')\\\">\\r\\n Campo obrigatório, por favor digite o logradouro.\\r\\n </ng-container>\\r\\n </nz-form-explain>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n </div>\\r\\n\\r\\n <div class=\\\"col-12 col-md-3\\\">\\r\\n <nz-form-item>\\r\\n <nz-form-label nzFor=\\\"number\\\">Número<span class=\\\"mandatory\\\"> *</span></nz-form-label>\\r\\n <nz-form-control nzHasFeedback>\\r\\n <input\\r\\n formControlName=\\\"number\\\"\\r\\n id=\\\"number\\\"\\r\\n nz-input\\r\\n placeholder=\\\"Digite o número\\\"\\r\\n maxlength=\\\"10\\\"\\r\\n autocomplete=\\\"disabled\\\"\\r\\n />\\r\\n <nz-form-explain\\r\\n *ngIf=\\\"form.get('address.number').dirty && form.get('address.number').errors\\\"\\r\\n >\\r\\n <ng-container *ngIf=\\\"form.get('address.number').hasError('required')\\\">\\r\\n Campo obrigatório, por favor digite o número.\\r\\n </ng-container>\\r\\n </nz-form-explain>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n </div>\\r\\n\\r\\n <div class=\\\"col-12 col-md-3\\\">\\r\\n <nz-form-item>\\r\\n <nz-form-label nzFor=\\\"complement\\\">Complemento</nz-form-label>\\r\\n <nz-form-control nzHasFeedback>\\r\\n <input\\r\\n formControlName=\\\"complement\\\"\\r\\n id=\\\"complement\\\"\\r\\n nz-input\\r\\n placeholder=\\\"Digite o complemento\\\"\\r\\n maxlength=\\\"128\\\"\\r\\n autocomplete=\\\"disabled\\\"\\r\\n />\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n </div>\\r\\n\\r\\n <div class=\\\"col-12 col-md-3\\\">\\r\\n <nz-form-item>\\r\\n <nz-form-label nzFor=\\\"neighborhood\\\">Bairro<span class=\\\"mandatory\\\"> *</span></nz-form-label>\\r\\n <nz-form-control nzHasFeedback>\\r\\n <input\\r\\n formControlName=\\\"neighborhood\\\"\\r\\n id=\\\"neighborhood\\\"\\r\\n nz-input\\r\\n placeholder=\\\"Digite o bairro\\\"\\r\\n maxlength=\\\"128\\\"\\r\\n autocomplete=\\\"disabled\\\"\\r\\n />\\r\\n <nz-form-explain\\r\\n *ngIf=\\\"\\r\\n form.get('address.neighborhood').dirty && form.get('address.neighborhood').errors\\r\\n \\\"\\r\\n >\\r\\n <ng-container *ngIf=\\\"form.get('address.neighborhood').hasError('required')\\\">\\r\\n Campo obrigatório, por favor digite o bairro.\\r\\n </ng-container>\\r\\n </nz-form-explain>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n </div>\\r\\n\\r\\n <div class=\\\"col-12 col-md-4\\\">\\r\\n <nz-form-item>\\r\\n <nz-form-label nzFor=\\\"city\\\">Cidade<span class=\\\"mandatory\\\"> *</span></nz-form-label>\\r\\n <nz-form-control nzHasFeedback>\\r\\n <input\\r\\n formControlName=\\\"city\\\"\\r\\n id=\\\"city\\\"\\r\\n nz-input\\r\\n placeholder=\\\"Digite a cidade\\\"\\r\\n maxlength=\\\"64\\\"\\r\\n autocomplete=\\\"disabled\\\"\\r\\n />\\r\\n <nz-form-explain\\r\\n *ngIf=\\\"form.get('address.city').dirty && form.get('address.city').errors\\\"\\r\\n >\\r\\n <ng-container *ngIf=\\\"form.get('address.city').hasError('required')\\\">\\r\\n Campo obrigatório, por favor digite a cidade.\\r\\n </ng-container>\\r\\n </nz-form-explain>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n </div>\\r\\n\\r\\n <div class=\\\"col-12 col-md-2\\\">\\r\\n <nz-form-item>\\r\\n <nz-form-label nzFor=\\\"uf\\\">UF<span class=\\\"mandatory\\\"> *</span></nz-form-label>\\r\\n <nz-form-control nzHasFeedback>\\r\\n <select\\r\\n *ngIf=\\\"!isRegisteredByPatient\\\"\\r\\n id=\\\"uf\\\"\\r\\n formControlName=\\\"uf\\\"\\r\\n nz-input\\r\\n nzAllowClear\\r\\n nzShowSearch\\r\\n nzPlaceHolder=\\\"Selecione\\\"\\r\\n >\\r\\n <option *ngFor=\\\"let state of states\\\" [value]=\\\"state?.sigla\\\">{{ state?.sigla }}</option>\\r\\n </select>\\r\\n <nz-select\\r\\n *ngIf=\\\"isRegisteredByPatient\\\"\\r\\n formControlName=\\\"uf\\\"\\r\\n id=\\\"uf\\\"\\r\\n nzAllowClear\\r\\n nzShowSearch\\r\\n nzPlaceHolder=\\\"Selecione\\\"\\r\\n >\\r\\n <nz-option\\r\\n *ngFor=\\\"let state of states\\\"\\r\\n [nzLabel]=\\\"state?.sigla\\\"\\r\\n [nzValue]=\\\"state?.sigla\\\"\\r\\n ></nz-option>\\r\\n </nz-select>\\r\\n <nz-form-explain *ngIf=\\\"form.get('address.uf').dirty && form.get('address.uf').errors\\\">\\r\\n <ng-container *ngIf=\\\"form.get('address.uf').hasError('required')\\\">\\r\\n Campo obrigatório, por favor selecione o UF.\\r\\n </ng-container>\\r\\n </nz-form-explain>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n </div>\\r\\n </div>\\r\\n </div> -->\\r\\n </ng-container>\\r\\n </div>\\r\\n</form>\\r\\n<ngx-loading [show]=\\\"loading\\\" [config]=\\\"{ backdropBorderRadius: '3px' }\\\"></ngx-loading>\\r\\n\";","export default \"::ng-deep .ant-divider-inner-text {\\n font-family: \\\"probold\\\", sans-serif;\\n color: #0b6054;\\n}\\n\\n.date-picker {\\n background-color: red;\\n}\\n\\ninput::-webkit-input-placeholder {\\n color: #bdc2c7;\\n}\\n\\ninput::-webkit-input-placeholder {\\n color: #bdc2c7;\\n}\\n\\n.mandatory {\\n color: red;\\n}\\n\\n.error {\\n color: red;\\n}\\n\\n.cellphone {\\n padding-bottom: 6px;\\n padding-top: 8px;\\n}\\n\\nh2 {\\n font-family: \\\"probold\\\", sans-serif;\\n font-size: 18px;\\n color: #0b6054;\\n}\\n\\n.display-name {\\n margin-top: 36px;\\n}\\n\\n.ant-btn:hover,\\n.ant-btn:focus {\\n color: white;\\n background-color: #0b6054;\\n border-color: #0b6054;\\n}\";","export default \"<form [formGroup]=\\\"form\\\" nz-form theme>\\r\\n <div class=\\\"row justify-content-between\\\">\\r\\n <nz-alert\\r\\n class=\\\"mb-4\\\"\\r\\n nzType=\\\"warning\\\"\\r\\n nzMessage=\\\"Para agilizar seu cadastro, buscaremos dados complementares no site da Receita Federal.\\r\\nEste é um procedimento seguro e o sigilo dos seus dados é garantido pela nossa plataforma\\\"\\r\\n ></nz-alert>\\r\\n <div class=\\\"col-md-6\\\">\\r\\n <div class=\\\"row\\\">\\r\\n <div class=\\\"col-md-10\\\" *ngIf=\\\"!isPharmacyPublic\\\">\\r\\n <nz-form-item>\\r\\n <nz-form-label nzFor=\\\"cnpj\\\">CNPJ<span class=\\\"mandatory\\\"> *</span></nz-form-label>\\r\\n <nz-form-control nzHasFeedback>\\r\\n <input\\r\\n nz-input\\r\\n id=\\\"cnpj\\\"\\r\\n mask=\\\"00.000.000/0000-00\\\"\\r\\n formControlName=\\\"cnpj\\\"\\r\\n placeholder=\\\"00.000.000/0000-00\\\"\\r\\n />\\r\\n <nz-form-explain *ngIf=\\\"form.get('cnpj').dirty && form.get('cnpj').errors\\\">\\r\\n <ng-container *ngIf=\\\"form.get('cnpj').hasError('required')\\\">\\r\\n Campo obrigatório, por favor digite seu CNPJ.\\r\\n </ng-container>\\r\\n <ng-container\\r\\n *ngIf=\\\"!form.get('cnpj').hasError('required') && form.get('cnpj').hasError('cnpj')\\\"\\r\\n >\\r\\n CNPJ inválido, por favor digite um CNPJ válido.\\r\\n </ng-container>\\r\\n </nz-form-explain>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n </div>\\r\\n\\r\\n <div class=\\\"col-md-10\\\" *ngIf=\\\"isPharmacyPublic\\\">\\r\\n <nz-form-item>\\r\\n <nz-form-label nzFor=\\\"cnes\\\">CNES<span class=\\\"mandatory\\\"> *</span></nz-form-label>\\r\\n <nz-form-control nzHasFeedback>\\r\\n <input nz-input [attr.id]=\\\"cnes\\\" formControlName=\\\"cnes\\\" type=\\\"number\\\" />\\r\\n <nz-form-explain *ngIf=\\\"form.get('cnes').dirty && form.get('cnes').errors\\\">\\r\\n <ng-container *ngIf=\\\"form.get('cnes').hasError('required')\\\">\\r\\n Campo obrigatório, por favor digite seu CNES.\\r\\n </ng-container>\\r\\n </nz-form-explain>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n </div>\\r\\n <div class=\\\"col-md-2 btn-consulta-cnpj\\\">\\r\\n <button\\r\\n nz-button\\r\\n class=\\\"btn-primary\\\"\\r\\n (click)=\\\"handleConsult()\\\"\\r\\n [disabled]=\\\"isLoading || form.get('cnes').invalid || form.get('cnpj').invalid\\\"\\r\\n >\\r\\n <span *ngIf=\\\"!isLoading\\\">OK</span>\\r\\n <span\\r\\n class=\\\"spinner-border spinner-border-sm\\\"\\r\\n role=\\\"status\\\"\\r\\n aria-hidden=\\\"true\\\"\\r\\n *ngIf=\\\"isLoading\\\"\\r\\n ></span>\\r\\n </button>\\r\\n </div>\\r\\n\\r\\n <div class=\\\"col-md-12\\\" *ngIf=\\\"!verified\\\">\\r\\n <nz-form-item class=\\\"d-flex align-items-center\\\">\\r\\n <nz-form-control>\\r\\n <input\\r\\n nz-input\\r\\n type=\\\"checkbox\\\"\\r\\n formControlName=\\\"public_pharmacy\\\"\\r\\n id=\\\"public_parmacy\\\"\\r\\n theme\\r\\n />\\r\\n <nz-form-label style=\\\"margin-left: 8px; cursor: pointer;\\\" nzFor=\\\"public_parmacy\\\" theme\\r\\n >Sou uma Farmácia Pública</nz-form-label\\r\\n >\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n </div>\\r\\n\\r\\n <div class=\\\"col-md-12\\\" *ngIf=\\\"verified && !isPharmacyPublic\\\">\\r\\n <nz-form-item>\\r\\n <nz-form-label nzFor=\\\"nomeFantasia\\\"\\r\\n >Nome Fantasia<span class=\\\"mandatory\\\"> *</span></nz-form-label\\r\\n >\\r\\n <nz-form-control nzHasFeedback>\\r\\n <input\\r\\n [attr.id]=\\\"'nomeFantasia'\\\"\\r\\n formControlName=\\\"fantasyName\\\"\\r\\n nz-input\\r\\n placeholder=\\\"ex: Farmácia Dona Santa\\\"\\r\\n autocomplete=\\\"disabled\\\"\\r\\n />\\r\\n <nz-form-explain *ngIf=\\\"form.get('fantasyName').dirty && form.get('fantasyName').errors\\\">\\r\\n <ng-container *ngIf=\\\"form.get('fantasyName').hasError('required')\\\">\\r\\n Por favor digite o nome empresarial.\\r\\n </ng-container>\\r\\n </nz-form-explain>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n </div>\\r\\n\\r\\n <div class=\\\"col-md-12\\\" *ngIf=\\\"verified && isPharmacyPublic\\\">\\r\\n <nz-form-item>\\r\\n <nz-form-label nzFor=\\\"cnpjEntity\\\"\\r\\n >CNPJ da mantenedora<span class=\\\"mandatory\\\"> *</span></nz-form-label\\r\\n >\\r\\n <nz-form-control nzHasFeedback>\\r\\n <input [attr.id]=\\\"'cnpjEntity'\\\" formControlName=\\\"cnpj_entity\\\" nz-input disabled />\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n </div>\\r\\n\\r\\n <div class=\\\"col-md-12\\\" *ngIf=\\\"verified\\\">\\r\\n <nz-form-item>\\r\\n <nz-form-label nzFor=\\\"businessName\\\"\\r\\n >Razão Social<span class=\\\"mandatory\\\"> *</span></nz-form-label\\r\\n >\\r\\n <nz-form-control nzHasFeedback *ngIf=\\\"!isPharmacyPublic\\\">\\r\\n <input\\r\\n [attr.id]=\\\"'businessName'\\\"\\r\\n formControlName=\\\"businessName\\\"\\r\\n nz-input\\r\\n placeholder=\\\"ex: Nome da Empresa no CNPJ Ltda\\\"\\r\\n autocomplete=\\\"disabled\\\"\\r\\n />\\r\\n </nz-form-control>\\r\\n\\r\\n <nz-form-control nzHasFeedback *ngIf=\\\"isPharmacyPublic\\\">\\r\\n <input\\r\\n [attr.id]=\\\"'business_name_entity'\\\"\\r\\n formControlName=\\\"business_name_entity\\\"\\r\\n nz-input\\r\\n disabled\\r\\n />\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n </div>\\r\\n <div class=\\\"col-md-12\\\" *ngIf=\\\"verified\\\" [formGroup]=\\\"form.get('cnae')\\\">\\r\\n <nz-form-item>\\r\\n <nz-form-label nzFor=\\\"cnaeCode\\\">{{\\r\\n isPharmacyPublic ? 'CNAE da mantenedora' : 'CNAE'\\r\\n }}</nz-form-label>\\r\\n <nz-form-control nzHasFeedback>\\r\\n <input [attr.id]=\\\"'cnaeCode'\\\" formControlName=\\\"code\\\" nz-input />\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n <nz-form-item>\\r\\n <nz-form-label nzFor=\\\"cnaeDescription\\\">Descrição CNAE</nz-form-label>\\r\\n <nz-form-control nzHasFeedback>\\r\\n <input [attr.id]=\\\"'cnaeDescription'\\\" formControlName=\\\"description\\\" nz-input />\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n </div>\\r\\n\\r\\n <!-- <div\\r\\n class=\\\"col-md-12\\\"\\r\\n *ngIf=\\\"verified && isPharmacyPublic\\\"\\r\\n [formGroup]=\\\"form.get('cnae_entity')\\\"\\r\\n >\\r\\n <nz-form-item>\\r\\n <nz-form-label nzFor=\\\"cnaeCode\\\"\\r\\n >CNAE da mantenedora<span class=\\\"mandatory\\\"> *</span></nz-form-label\\r\\n >\\r\\n <nz-form-control nzHasFeedback>\\r\\n <input [attr.id]=\\\"'cnaeCode'\\\" formControlName=\\\"code\\\" nz-input disabled />\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n <nz-form-item>\\r\\n <nz-form-label nzFor=\\\"cnaeDescription\\\"\\r\\n >Descrição CNAE<span class=\\\"mandatory\\\"> *</span></nz-form-label\\r\\n >\\r\\n <nz-form-control nzHasFeedback>\\r\\n <input [attr.id]=\\\"'cnaeDescription'\\\" formControlName=\\\"description\\\" nz-input disabled />\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n </div> -->\\r\\n </div>\\r\\n </div>\\r\\n <div class=\\\"col-md-5\\\" *ngIf=\\\"verified\\\">\\r\\n <div class=\\\"row\\\">\\r\\n <div class=\\\"col-md-12\\\" *ngIf=\\\"isPharmacyPublic\\\">\\r\\n <nz-form-item>\\r\\n <nz-form-label nzFor=\\\"nomeFantasia\\\"\\r\\n >Nome Fantasia/Nome da Instituição<span class=\\\"mandatory\\\"> *</span></nz-form-label\\r\\n >\\r\\n <nz-form-control nzHasFeedback>\\r\\n <input\\r\\n [attr.id]=\\\"'nomeFantasia'\\\"\\r\\n formControlName=\\\"fantasyName\\\"\\r\\n nz-input\\r\\n placeholder=\\\"ex: Farmácia Dona Santa\\\"\\r\\n autocomplete=\\\"disabled\\\"\\r\\n />\\r\\n <nz-form-explain *ngIf=\\\"form.get('fantasyName').dirty && form.get('fantasyName').errors\\\">\\r\\n <ng-container *ngIf=\\\"form.get('fantasyName').hasError('required')\\\">\\r\\n Por favor digite o nome empresarial.\\r\\n </ng-container>\\r\\n </nz-form-explain>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n </div>\\r\\n\\r\\n <div class=\\\"col-md-12\\\">\\r\\n <nz-form-item>\\r\\n <nz-form-label nzFor=\\\"email\\\">E-mail<span class=\\\"mandatory\\\"> *</span></nz-form-label>\\r\\n <nz-form-control nzHasFeedback>\\r\\n <input\\r\\n nz-input\\r\\n id=\\\"email\\\"\\r\\n type=\\\"email\\\"\\r\\n formControlName=\\\"email\\\"\\r\\n placeholder=\\\"usuario@email.com\\\"\\r\\n style=\\\"text-transform: lowercase;\\\"\\r\\n (keydown.space)=\\\"$event.preventDefault()\\\"\\r\\n autocomplete=\\\"disabled\\\"\\r\\n />\\r\\n <nz-form-explain\\r\\n *ngIf=\\\"\\r\\n (form.get('email').hasError('required') && form.get('email').dirty) ||\\r\\n (form.get('email').invalid && form.get('email').value.length > 0)\\r\\n \\\"\\r\\n >\\r\\n <ng-container *ngIf=\\\"form.get('email').hasError('required') && form.get('email').dirty\\\">\\r\\n <span class=\\\"error\\\">Campo obrigatório, por favor digite seu e-mail.</span><br />\\r\\n </ng-container>\\r\\n <ng-container *ngIf=\\\"form.get('email').invalid && form.get('email').value.length > 0\\\">\\r\\n <span class=\\\"error\\\">E-mail inválido, por favor digite um e-mail válido.</span><br />\\r\\n </ng-container>\\r\\n </nz-form-explain>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n </div>\\r\\n <div class=\\\"col-md-12\\\">\\r\\n {{ form.erros | json }}\\r\\n <nz-form-item>\\r\\n <nz-form-label nzFor=\\\"emailConfirmation\\\"\\r\\n >Confirmação de e-mail<span class=\\\"mandatory\\\"> *</span>\\r\\n </nz-form-label>\\r\\n <nz-form-control nzHasFeedback>\\r\\n <input\\r\\n nz-input\\r\\n id=\\\"emailConfirmation\\\"\\r\\n formControlName=\\\"emailConfirmation\\\"\\r\\n placeholder=\\\"usuário@email.com\\\"\\r\\n type=\\\"email\\\"\\r\\n style=\\\"text-transform: lowercase;\\\"\\r\\n (keydown.space)=\\\"$event.preventDefault()\\\"\\r\\n (onpaste)=\\\"(false)\\\"\\r\\n autocomplete=\\\"disabled\\\"\\r\\n />\\r\\n <nz-form-explain\\r\\n *ngIf=\\\"form.get('emailConfirmation').dirty && form.get('emailConfirmation').errors\\\"\\r\\n >\\r\\n <ng-container *ngIf=\\\"form.get('emailConfirmation').hasError('required')\\\">\\r\\n <span class=\\\"error\\\">Campo obrigatório, por favor digite seu e-mail.</span><br />\\r\\n </ng-container>\\r\\n\\r\\n <ng-container\\r\\n *ngIf=\\\"\\r\\n form.get('emailConfirmation').hasError('notMatch') &&\\r\\n form.get('email').dirty &&\\r\\n form.get('email').value.length > 0 &&\\r\\n form.get('emailConfirmation').dirty &&\\r\\n form.get('emailConfirmation').value.length > 0\\r\\n \\\"\\r\\n >\\r\\n <span class=\\\"error\\\">Os endereços de e-mail não correspondem</span><br />\\r\\n </ng-container>\\r\\n </nz-form-explain>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n </div>\\r\\n <div class=\\\"col-md-6\\\">\\r\\n <nz-form-item *ngIf=\\\"form.get('telephone') as telephone\\\">\\r\\n <nz-form-label nzFor=\\\"telephone\\\">Telefone 1 <span class=\\\"mandatory\\\">*</span></nz-form-label>\\r\\n <nz-form-control nzHasFeedback>\\r\\n <input\\r\\n nz-input\\r\\n id=\\\"telephone\\\"\\r\\n formControlName=\\\"telephone\\\"\\r\\n placeholder=\\\"(21) 2222-2222\\\"\\r\\n [mask]=\\\"telephone.value.length <= 10 ? '(00) 0000-00009' : '(00) 00000-0000'\\\"\\r\\n autocomplete=\\\"disabled\\\"\\r\\n />\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n </div>\\r\\n </div>\\r\\n </div>\\r\\n </div>\\r\\n\\r\\n <nz-divider nzOrientation=\\\"left\\\" nzText=\\\"Endereço\\\" *ngIf=\\\"verified\\\"></nz-divider>\\r\\n\\r\\n <div class=\\\"row\\\" *ngIf=\\\"verified && form.get('address') as address\\\" [formGroup]=\\\"address\\\">\\r\\n <div class=\\\"col-md-3\\\">\\r\\n <nz-form-item>\\r\\n <nz-form-label nzFor=\\\"cep\\\">CEP<span class=\\\"mandatory\\\"> *</span></nz-form-label>\\r\\n <nz-form-control nzHasFeedback>\\r\\n <input\\r\\n nz-input\\r\\n id=\\\"cep\\\"\\r\\n formControlName=\\\"cep\\\"\\r\\n placeholder=\\\"00.000-000\\\"\\r\\n mask=\\\"00.000-000\\\"\\r\\n (keyup)=\\\"onKey($event, address)\\\"\\r\\n autocomplete=\\\"disabled\\\"\\r\\n />\\r\\n <nz-form-explain *ngIf=\\\"address.get('cep').dirty && address.get('cep').errors\\\">\\r\\n <ng-container *ngIf=\\\"address.get('cep').hasError('required')\\\">\\r\\n Campo obrigatório, por favor digite o cep.\\r\\n </ng-container>\\r\\n <ng-container\\r\\n *ngIf=\\\"!address.get('cep').hasError('required') && address.get('cep').hasError('cep')\\\"\\r\\n >\\r\\n CEP inválido.\\r\\n </ng-container>\\r\\n </nz-form-explain>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n </div>\\r\\n <div class=\\\"col-md-6\\\">\\r\\n <nz-form-item>\\r\\n <nz-form-label nzFor=\\\"logradouro\\\">Logradouro<span class=\\\"mandatory\\\"> *</span></nz-form-label>\\r\\n <nz-form-control nzHasFeedback>\\r\\n <input\\r\\n nz-input\\r\\n id=\\\"logradouro\\\"\\r\\n formControlName=\\\"street\\\"\\r\\n placeholder=\\\"Digite o logradouro\\\"\\r\\n maxlength=\\\"128\\\"\\r\\n autocomplete=\\\"disabled\\\"\\r\\n />\\r\\n <nz-form-explain *ngIf=\\\"address.get('street').dirty && address.get('street').errors\\\">\\r\\n <ng-container *ngIf=\\\"address.get('street').hasError('required')\\\">\\r\\n Campo obrigatório, por favor digite o logradouro.\\r\\n </ng-container>\\r\\n </nz-form-explain>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n </div>\\r\\n <div class=\\\"col-md-3\\\">\\r\\n <nz-form-item>\\r\\n <nz-form-label nzFor=\\\"addressNumber\\\">Número<span class=\\\"mandatory\\\"> *</span></nz-form-label>\\r\\n <nz-form-control nzHasFeedback>\\r\\n <input\\r\\n formControlName=\\\"number\\\"\\r\\n id=\\\"addressNumber\\\"\\r\\n nz-input\\r\\n placeholder=\\\"Digite o número\\\"\\r\\n maxlength=\\\"10\\\"\\r\\n autocomplete=\\\"disabled\\\"\\r\\n />\\r\\n <nz-form-explain *ngIf=\\\"address.get('number').dirty && address.get('number').errors\\\">\\r\\n <ng-container *ngIf=\\\"address.get('number').hasError('required')\\\">\\r\\n Campo obrigatório, por favor digite o número.\\r\\n </ng-container>\\r\\n </nz-form-explain>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n </div>\\r\\n <div class=\\\"col-md-3\\\">\\r\\n <nz-form-item>\\r\\n <nz-form-label nzFor=\\\"complement\\\">Complemento</nz-form-label>\\r\\n <nz-form-control nzHasFeedback>\\r\\n <input\\r\\n formControlName=\\\"complement\\\"\\r\\n id=\\\"complement\\\"\\r\\n nz-input\\r\\n placeholder=\\\"Digite o complemento\\\"\\r\\n maxlength=\\\"128\\\"\\r\\n />\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n </div>\\r\\n <div class=\\\"col-md-3\\\">\\r\\n <nz-form-item>\\r\\n <nz-form-label nzFor=\\\"neighborhood\\\">Bairro<span class=\\\"mandatory\\\"> *</span></nz-form-label>\\r\\n <nz-form-control nzHasFeedback>\\r\\n <input\\r\\n formControlName=\\\"neighborhood\\\"\\r\\n id=\\\"neighborhood\\\"\\r\\n nz-input\\r\\n placeholder=\\\"Digite o bairro\\\"\\r\\n maxlength=\\\"128\\\"\\r\\n autocomplete=\\\"disabled\\\"\\r\\n />\\r\\n <nz-form-explain\\r\\n *ngIf=\\\"address.get('neighborhood').dirty && address.get('neighborhood').errors\\\"\\r\\n >\\r\\n <ng-container *ngIf=\\\"address.get('neighborhood').hasError('required')\\\">\\r\\n Campo obrigatório, por favor digite o bairro.\\r\\n </ng-container>\\r\\n </nz-form-explain>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n </div>\\r\\n <div class=\\\"col-md-4\\\">\\r\\n <nz-form-item>\\r\\n <nz-form-label nzFor=\\\"city\\\">Cidade<span class=\\\"mandatory\\\"> *</span></nz-form-label>\\r\\n <nz-form-control nzHasFeedback>\\r\\n <input\\r\\n formControlName=\\\"city\\\"\\r\\n id=\\\"city\\\"\\r\\n nz-input\\r\\n placeholder=\\\"Digite a cidade\\\"\\r\\n maxlength=\\\"64\\\"\\r\\n autocomplete=\\\"disabled\\\"\\r\\n />\\r\\n <nz-form-explain *ngIf=\\\"address.get('city').dirty && address.get('city').errors\\\">\\r\\n <ng-container *ngIf=\\\"address.get('city').hasError('required')\\\">\\r\\n Campo obrigatório, por favor digite a cidade.\\r\\n </ng-container>\\r\\n </nz-form-explain>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n </div>\\r\\n <div class=\\\"col-md-2\\\">\\r\\n <nz-form-item>\\r\\n <nz-form-label nzFor=\\\"uf\\\">UF<span class=\\\"mandatory\\\"> *</span></nz-form-label>\\r\\n <nz-form-control nzHasFeedback>\\r\\n <nz-select\\r\\n formControlName=\\\"uf\\\"\\r\\n id=\\\"uf\\\"\\r\\n nzAllowClear\\r\\n nzShowSearch\\r\\n nzDropdownClassName=\\\"account-select\\\"\\r\\n nzPlaceHolder=\\\"Selecione\\\"\\r\\n >\\r\\n <nz-option\\r\\n *ngFor=\\\"let state of states\\\"\\r\\n [nzLabel]=\\\"state?.sigla\\\"\\r\\n [nzValue]=\\\"state?.sigla\\\"\\r\\n ></nz-option>\\r\\n </nz-select>\\r\\n <nz-form-explain *ngIf=\\\"address.get('uf').dirty && address.get('uf').errors\\\">\\r\\n <ng-container *ngIf=\\\"address.get('uf').hasError('required')\\\">\\r\\n Campo obrigatório, por favor selecione o UF.\\r\\n </ng-container>\\r\\n </nz-form-explain>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n </div>\\r\\n </div>\\r\\n\\r\\n <nz-divider nzOrientation=\\\"left\\\" nzText=\\\"Dados do Responsável Técnico\\\" *ngIf=\\\"verified\\\"></nz-divider>\\r\\n <div\\r\\n class=\\\"row justify-content-between\\\"\\r\\n [formGroup]=\\\"form.get('technicalResponsible')\\\"\\r\\n *ngIf=\\\"verified\\\"\\r\\n >\\r\\n <div class=\\\"col-md-6\\\">\\r\\n <nz-form-item>\\r\\n <nz-form-label nzFor=\\\"nomeTechnicalResponsible\\\">Nome</nz-form-label>\\r\\n <nz-form-control nzHasFeedback>\\r\\n <input\\r\\n id=\\\"nomeTechnicalResponsible\\\"\\r\\n formControlName=\\\"name\\\"\\r\\n maxlength=\\\"128\\\"\\r\\n nz-input\\r\\n placeholder=\\\"ex: XYZ\\\"\\r\\n autocomplete=\\\"disabled\\\"\\r\\n />\\r\\n <nz-form-explain\\r\\n *ngIf=\\\"\\r\\n form.get('technicalResponsible.name').dirty && form.get('technicalResponsible.name').errors\\r\\n \\\"\\r\\n >\\r\\n <ng-container *ngIf=\\\"form.get('technicalResponsible.name').hasError('required')\\\">\\r\\n Por favor digite o nome.\\r\\n </ng-container>\\r\\n </nz-form-explain>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n\\r\\n <nz-form-item>\\r\\n <nz-form-label nzFor=\\\"cpfTechnicalResponsible\\\">CPF</nz-form-label>\\r\\n <nz-form-control nzHasFeedback>\\r\\n <input\\r\\n formControlName=\\\"cpf\\\"\\r\\n nz-input\\r\\n placeholder=\\\"000.000.000-00\\\"\\r\\n mask=\\\"000.000.000-00\\\"\\r\\n autocomplete=\\\"disabled\\\"\\r\\n id=\\\"cpfTechnicalResponsible\\\"\\r\\n />\\r\\n <nz-form-explain\\r\\n *ngIf=\\\"\\r\\n form.get('technicalResponsible.cpf').dirty && form.get('technicalResponsible.cpf').errors\\r\\n \\\"\\r\\n >\\r\\n <ng-container *ngIf=\\\"form.get('technicalResponsible.cpf').hasError('cpf')\\\">\\r\\n CPF inválido, por favor digite um CPF válido.\\r\\n </ng-container>\\r\\n </nz-form-explain>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n </div>\\r\\n\\r\\n <div class=\\\"col-md-6\\\">\\r\\n <div [formGroup]=\\\"form.get('technicalResponsible.crf')\\\">\\r\\n <nz-form-item>\\r\\n <nz-form-label nzFor=\\\"crfTechnicalResponsible\\\">CRF</nz-form-label>\\r\\n <nz-form-control nzHasFeedback>\\r\\n <input\\r\\n formControlName=\\\"number\\\"\\r\\n nz-input\\r\\n placeholder=\\\"Digite o CRF\\\"\\r\\n maxlength=\\\"10\\\"\\r\\n id=\\\"crfTechnicalResponsible\\\"\\r\\n />\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n <nz-form-item>\\r\\n <nz-form-label>UF</nz-form-label>\\r\\n <nz-form-control nzHasFeedback>\\r\\n <nz-select\\r\\n formControlName=\\\"uf\\\"\\r\\n id=\\\"crm-uf\\\"\\r\\n nzShowSearch\\r\\n nzAllowClear\\r\\n nzDropdownClassName=\\\"account-select\\\"\\r\\n nzPlaceHolder=\\\"Selecione\\\"\\r\\n >\\r\\n <nz-option *ngFor=\\\"let state of states\\\" [nzLabel]=\\\"state?.sigla\\\" [nzValue]=\\\"state?.sigla\\\">\\r\\n </nz-option>\\r\\n </nz-select>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n </div>\\r\\n </div>\\r\\n </div>\\r\\n</form>\\r\\n<ngx-loading [show]=\\\"isLoading\\\" [config]=\\\"{ backdropBorderRadius: '3px' }\\\"></ngx-loading>\\r\\n\";","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { environment } from '@env/environment';\nimport { Observable } from 'rxjs';\nimport { ResponseConsultsCnes } from '../models/response-consults-cnes';\n\nconst API_UL = `${environment.apiRoot}open-data`;\n\n@Injectable({\n providedIn: 'root'\n})\nexport class OpenDataService {\n constructor(private http: HttpClient) {}\n\n consultCnes(cnes: string): Observable<ResponseConsultsCnes> {\n return this.http.get<ResponseConsultsCnes>(`${API_UL}/cnes/${cnes}`);\n }\n}\n","import { distinctUntilChanged } from 'rxjs/operators';\r\nimport { HttpErrorResponse } from '@angular/common/http';\r\nimport {\r\n AfterContentChecked,\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n OnInit,\r\n Output\r\n} from '@angular/core';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { ValidationService } from '@app/core/services/validation.service';\r\nimport { CepService } from '@app/modules/entry/services/cep.service';\r\nimport { BrazilianStates } from '@app/shared/data/Brazilian-states';\r\nimport { BrazilState } from '@app/shared/models';\r\nimport { ResponseSearchCnpj } from '@app/shared/models/reponse-search-cnpj';\r\nimport { AppToastService } from '@app/shared/services/app-toast.service';\r\nimport { BigboostService } from './../../../../../shared/services/bigboost.service';\r\nimport { OpenDataService } from './../../../../../shared/services/open-data.service';\r\nimport { nativeAsync } from '@app/shared/decorators/nativeAsync';\r\n\r\nconst onlyNumbers = (valor: string) => {\r\n return valor.replace(/[^0-9]+/g, '');\r\n};\r\n\r\n@Component({\r\n selector: 'app-pharmacy-form',\r\n templateUrl: './pharmacy-form.component.html',\r\n styleUrls: ['./pharmacy-form.component.scss']\r\n})\r\nexport class PharmacyFormComponent implements OnInit, AfterContentChecked {\r\n readonly STATUS_VALID = 'VALID';\r\n\r\n @Output() formChange: EventEmitter<FormGroup> = new EventEmitter<FormGroup>();\r\n\r\n states: BrazilState[] = BrazilianStates;\r\n\r\n form: FormGroup;\r\n isLoading = false;\r\n\r\n constructor(\r\n private fb: FormBuilder,\r\n private cepService: CepService,\r\n private bigboostService: BigboostService,\r\n private openDataService: OpenDataService,\r\n private notification: AppToastService,\r\n private cdr: ChangeDetectorRef\r\n ) {\r\n this.form = this.fb.group({\r\n cnpj: [null, [Validators.required, ValidationService.cnpjValidator]],\r\n businessName: ['', Validators.required],\r\n fantasyName: ['', Validators.required],\r\n cnae: this.fb.group({\r\n code: [''],\r\n description: ['']\r\n }),\r\n cpfResponsible: ['', [ValidationService.cpfValidator]],\r\n telephone: ['', Validators.required],\r\n cellphone: [''],\r\n email: ['', [Validators.required, Validators.email]],\r\n emailConfirmation: [\r\n '',\r\n [Validators.required, Validators.email, ValidationService.confirmEmailValidator('email')]\r\n ],\r\n licenseNumber: [''],\r\n technicalResponsible: this.fb.group({\r\n name: ['', Validators.compose([ValidationService.nomeValidator])],\r\n cpf: ['', [ValidationService.cpfValidator]],\r\n crf: this.fb.group({\r\n number: [''],\r\n uf: ['']\r\n })\r\n }),\r\n address: this.fb.group({\r\n uf: [null, Validators.required],\r\n city: ['', Validators.required],\r\n complement: [''],\r\n number: ['', Validators.required],\r\n street: ['', Validators.required],\r\n neighborhood: ['', Validators.required],\r\n cep: ['', [Validators.required, ValidationService.cepValidator]]\r\n }),\r\n pendency: [null],\r\n public_pharmacy: [false],\r\n cnes: [null],\r\n cnpj_entity: [''],\r\n business_name_entity: [''],\r\n verified: [false]\r\n });\r\n }\r\n\r\n get isPharmacyPublic(): boolean {\r\n return this.form.get('public_pharmacy').value;\r\n }\r\n\r\n ngOnInit() {\r\n this.form.get('email').valueChanges.subscribe(email => {\r\n this.form.get('email').setValue(email && email.toLowerCase(), { emitEvent: false });\r\n this.formChange.emit(this.form);\r\n });\r\n this.form.get('emailConfirmation').valueChanges.subscribe(email => {\r\n this.form.get('emailConfirmation').setValue(email && email.toLowerCase(), { emitEvent: false });\r\n this.formChange.emit(this.form);\r\n });\r\n\r\n this.form.get('cnpj').valueChanges.subscribe(() => {\r\n this.form.get('verified').setValue(false);\r\n this.formChange.emit(this.form);\r\n });\r\n this.listenAndApplyValitationsPublicPharmacy();\r\n this.formChange.emit(this.form);\r\n }\r\n\r\n ngAfterContentChecked(): void {\r\n this.cdr.detectChanges();\r\n }\r\n\r\n listenAndApplyValitationsPublicPharmacy() {\r\n this.form\r\n .get('public_pharmacy')\r\n .valueChanges.pipe(distinctUntilChanged())\r\n .subscribe(value => {\r\n if (value) {\r\n this.form.get('cnes').setValidators([Validators.required]);\r\n this.form.get('cnpj_entity').setValidators([Validators.required]);\r\n\r\n this.form.get('cnpj').clearValidators();\r\n this.form.get('businessName').clearValidators();\r\n if (!this.verified) {\r\n this.form.get('cnpj').reset();\r\n }\r\n } else {\r\n this.form.get('cnes').clearValidators();\r\n this.form.get('cnpj_entity').clearValidators();\r\n\r\n this.form.get('cnpj').setValidators([Validators.required, ValidationService.cnpjValidator]);\r\n this.form.get('businessName').setValidators([Validators.required]);\r\n if (!this.verified) {\r\n this.form.get('cnes').reset();\r\n }\r\n }\r\n this.form.get('cnes').updateValueAndValidity();\r\n this.form.get('cnpj_entity').updateValueAndValidity();\r\n\r\n this.form.get('cnpj').updateValueAndValidity();\r\n this.form.get('businessName').updateValueAndValidity();\r\n this.formChange.emit(this.form);\r\n });\r\n }\r\n\r\n @nativeAsync\r\n async handleConsult() {\r\n if (this.isPharmacyPublic) {\r\n await this.handleConsultCnes();\r\n } else {\r\n await this.handleConsultCnpj();\r\n }\r\n }\r\n\r\n @nativeAsync\r\n async handleConsultCnes() {\r\n this.isLoading = true;\r\n const cnes = this.form.get('cnes').value;\r\n this.openDataService\r\n .consultCnes(cnes)\r\n .subscribe(\r\n response => {\r\n const cnae = {\r\n code: response.cnae_entity,\r\n description: response.cnae_entity_description\r\n };\r\n const pharmacyInformation = {\r\n cnes: response.cnes,\r\n cnpj_entity: response.cnpj_entity,\r\n business_name_entity: response.business_name,\r\n fantasyName: response.fantasy_name,\r\n cnae: {\r\n ...cnae\r\n }\r\n };\r\n\r\n this.form.patchValue(pharmacyInformation);\r\n this.verified = true;\r\n this.cdr.detectChanges();\r\n this.form.get('cnae').disable();\r\n },\r\n (httpError: HttpErrorResponse) => {\r\n if (httpError.status === 400 || httpError.status === 409) {\r\n const { message } = httpError.error;\r\n this.notification.notify('warning', message);\r\n } else {\r\n this.notification.notify('error', 'Error ao tentar consultar CNAE');\r\n }\r\n console.error(httpError);\r\n this.verified = false;\r\n }\r\n )\r\n .add(() => {\r\n this.isLoading = false;\r\n this.cdr.detectChanges();\r\n });\r\n }\r\n\r\n @nativeAsync\r\n async handleConsultCnpj() {\r\n this.isLoading = true;\r\n const cnpj = onlyNumbers(this.form.get('cnpj').value);\r\n try {\r\n const response = await this.bigboostService.consultCnpj(cnpj);\r\n if (response.erro) {\r\n if (response.erroCodigo === 102) {\r\n this.handleErrorMessageStatusCode102();\r\n return;\r\n } else {\r\n const consult = {\r\n status: -1,\r\n cnpj,\r\n erroCodigo: response.erroCodigo,\r\n erro: 'A importação de dados do cnpj está com instabilidade'\r\n };\r\n this.form.get('pendency').setValue(consult);\r\n this.notification.notify(\r\n 'warning',\r\n 'Aviso',\r\n 'A importação de dados do CNPJ está com instabilidade, mas você poderá se cadastrar preenchendo os campos manualmente.'\r\n );\r\n this.verified = true;\r\n }\r\n }\r\n\r\n this.setDataForm(response);\r\n if (response) {\r\n this.form.get('businessName').disable();\r\n }\r\n this.verified = true;\r\n } catch (err) {\r\n if (err.status === 400 || err.status === 409) {\r\n const { message } = err.error;\r\n this.notification.notify('warning', message);\r\n this.form.get('cnpj').setErrors({ notExists: true });\r\n } else {\r\n this.notification.notify('error', 'Error ao tentar consultar CNPJ');\r\n }\r\n console.error(err);\r\n this.verified = false;\r\n } finally {\r\n this.isLoading = false;\r\n this.cdr.detectChanges();\r\n }\r\n }\r\n\r\n private handleErrorMessageStatusCode102(): void {\r\n this.notification.notify(\r\n 'warning',\r\n 'Aviso',\r\n 'O CNPJ informado não existe em nossos fornecedores. Por favor, confira o número do CNPJ e tente novamente. ' +\r\n 'Em caso de dúvidas, entre em contato com o nosso suporte'\r\n );\r\n }\r\n\r\n get verified() {\r\n return this.form.get('verified').value;\r\n }\r\n\r\n set verified(value: boolean) {\r\n this.form.get('verified').setValue(value);\r\n this.cdr.detectChanges();\r\n }\r\n\r\n private setDataForm(response: ResponseSearchCnpj): void {\r\n const cnae = response.cnae\r\n ? {\r\n code: response ? response.cnae.fiscal : null,\r\n description: response ? response.cnae.descricao : null\r\n }\r\n : {\r\n code: '',\r\n description: ''\r\n };\r\n const pharmacyInformation = {\r\n businessName: response ? response.razao : null,\r\n fantasyName: response ? response.fantasia : null,\r\n cnae: {\r\n ...cnae\r\n }\r\n };\r\n\r\n this.form.patchValue(pharmacyInformation);\r\n }\r\n\r\n @nativeAsync\r\n async onKey(event: any, address: FormGroup) {\r\n if (event.target.value.length === 10) {\r\n const cep = event.target.value.replace(/[^\\d]+/g, '');\r\n const data = await this.cepService.consult(cep);\r\n if (!data.erro) {\r\n address.patchValue({\r\n uf: data.uf,\r\n street: data.logradouro,\r\n neighborhood: data.bairro,\r\n city: data.localidade,\r\n number: null,\r\n cep: data.cep\r\n });\r\n }\r\n }\r\n }\r\n}\r\n","export default \".add-more,\\n::ng-deep .ant-divider-inner-text {\\n font-family: \\\"probold\\\", sans-serif;\\n color: #0b6054;\\n}\\n\\ninput::-webkit-input-placeholder {\\n color: #bdc2c7;\\n}\\n\\ninput::-webkit-input-placeholder {\\n color: #bdc2c7;\\n}\\n\\n.mandatory {\\n color: red;\\n}\\n\\n.error {\\n color: red;\\n}\\n\\n.btn-consulta-cnpj {\\n display: flex;\\n justify-content: flex-end;\\n align-items: center;\\n margin-top: 15px;\\n margin-left: -15px;\\n}\\n\\n.btn-consulta-cnpj[disabled] {\\n color: rgba(0, 0, 0, 0.25) !important;\\n background-color: #f5f5f5 !important;\\n border-color: #d9d9d9 !important;\\n text-shadow: none !important;\\n box-shadow: none !important;\\n}\";","import { Component, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-terms-and-conditions',\r\n templateUrl: './terms-and-conditions.component.html',\r\n styleUrls: ['./terms-and-conditions.component.scss']\r\n})\r\nexport class TermsAndConditionsComponent implements OnInit {\r\n constructor() {}\r\n\r\n ngOnInit() {}\r\n}\r\n","export default \"<div>\\r\\n <!-- <h4>\\r\\n TERMO DE USO E POLÃTICA DE PRIVACIDADE – RECEITA DIGITAL\\r\\n </h4> -->\\r\\n POR FAVOR, LEIA ATENTAMENTE ESTE TERMO DE USO E POLÃTICA DE PRIVACIDADE, POIS AO CLICAR EM “LI E ACEITO\\r\\n OS TERMOS DE USO E POLÃTICA DE PRIVACIDADE†VOCÊ ESTà ACEITANDO ELETRONICAMENTE AS REGRAS AQUI\\r\\n ESTABELECIDAS E DEMONSTRANDO A SUA\\r\\n\\r\\n <br />\\r\\n CONCORDÂNCIA AO USAR NOSSA PLATAFORMA OU APLICATIVO.\\r\\n <br />\\r\\n Em caso de dúvidas, antes de utilizar nossa plataforma/aplicativo, entre em contato por meio do nosso\\r\\n canal de atendimento: contato@receitadigital.com\\r\\n <br /><br />\\r\\n 1 - INTRODUÇÃO\\r\\n <br />\\r\\n O site/ plataforma receitadigital.com e aplicativo, fazem parte de um hub de serviços de tecnologia\\r\\n oferecidos pela K&I - KNOWLEDGE AND INTELLIGENCE TECNOLOGIA LTDA, inscrita no CNPJ: 34.307.169/0001-00,\\r\\n com sede na Rua do Carmo, nº 71- 5º andar, Centro – Rio de Janeiro- RJ, CEP 20011-020, simplesmente\\r\\n denominada como “Receita Digitalâ€. A empresa referida neste Termo de uso e PolÃtica de privacidade será\\r\\n denominada como “Receita Digital†e compromete-se a adotar as providências necessárias e de sua\\r\\n responsabilidade para a proteção da privacidade dos usuários nos serviços oferecidos. Este Termo de Uso\\r\\n e PolÃtica de privacidade descreve as regras aplicáveis ao contratante/usuário no acesso e uso da nossa\\r\\n plataforma e aplicativo. Ela foi elaborada para reafirmar o nosso compromisso com a privacidade e a\\r\\n segurança relacionadas aos serviços interativos e à s informações coletadas e armazenadas dos nossos\\r\\n usuários. O documento abrange o tratamento que a nossa plataforma e aplicativo dão à s informações\\r\\n capazes de identificar nossos contratantes/usuários. Todas as informações serão tratadas em\\r\\n concordância com a Lei Geral de Proteção de Dados Pessoais de 14 de agosto de 2018 (Lei nº\\r\\n 13.709/2018).\\r\\n <br /><br />\\r\\n 2 - DENOMINAÇÕES DESTE TERMO DE USO E POLÃTICA DE PRIVACIDADE.\\r\\n <br />\\r\\n 2.1) A manutenção/suporte técnico utilizado por prescritores, farmácias e pacientes será realizado por\\r\\n meio do fale conosco.\\r\\n\\r\\n <br />\\r\\n 2.2) Fale Conosco: Canal de contato entre a Receita Digital e seus contratantes (prescritores,\\r\\n farmácias e pacientes) para recebimento de chamados de Suporte ou Manutenção.\\r\\n\\r\\n <br />\\r\\n 2.3) Contratante: aquele que usa a plataforma/aplicativo e se sujeita a estes Termos de Uso e PolÃtica\\r\\n de Privacidade, sejam prescritores/Estabelecimentos de saúde, farmácias/drogarias e pacientes.\\r\\n\\r\\n <br />\\r\\n 2.4) Comprador: pessoa que apresenta a receita nos estabelecimentos comerciais Farmácias/Drogarias para\\r\\n compra. Poderá ser o próprio paciente/cliente ou outra pessoa autorizada pelo paciente/cliente.\\r\\n\\r\\n <br />\\r\\n 2.5) Customização: inserções, adequações, modificações e desenvolvimento de funções na plataforma\\r\\n mediante demanda especial do Contratante. As customizações não interferem sobre os direitos de\\r\\n propriedade da plataforma que permanece em poder da Receita Digital.\\r\\n\\r\\n <br />\\r\\n 2.6) Dados: qualquer informação inserida na plataforma/aplicativo, seja na forma escrita, de áudio,\\r\\n vÃdeo ou audiovisual.\\r\\n\\r\\n <br />\\r\\n 2.7) Farmácia/ Drogaria: estabelecimento comercial público ou particular onde ocorre a dispensação e\\r\\n comercialização de medicamentos prescritos e produtos para a saúde.\\r\\n\\r\\n <br />\\r\\n 2.8) Prescritores: profissionais da saúde que prescrevem receitas de medicamentos a seus pacientes/\\r\\n clientes dentro da plataforma Receita Digital.\\r\\n\\r\\n <br />\\r\\n 2.9) Manutenção: serviços que visam manter o uso adequado da plataforma/aplicativo da Receita Digital,\\r\\n como correções e configurações.\\r\\n\\r\\n <br />\\r\\n 2.10) Mensagem de Dados: toda informação gerada, enviada, recebida ou comunicada por meio eletrônico,\\r\\n ou similar.\\r\\n\\r\\n <br />\\r\\n 2.11) Mudanças e ajustes: incremento nas funcionalidades ou tecnologia da plataforma, resultando ou não\\r\\n em nova versão, disponibilizadas a critério da equipe de desenvolvimento e programação da Receita\\r\\n Digital.\\r\\n\\r\\n <br />\\r\\n 2.12) Paciente/Cliente: pessoa sujeita a tratamento prescritor que recebe a prescrição de medicamentos.\\r\\n\\r\\n <br />\\r\\n 2.13) Planos de saúde: empresas que operam planos de saúde para a oferta de serviços prescritores,\\r\\n hospitalares, exames, tratamentos, mediante contrapartida financeira.\\r\\n\\r\\n <br />\\r\\n 2.14) Plataforma/Aplicativo: programa de computador da marca Receita Digital, em suas diferentes\\r\\n versões e funcionalidades, de propriedade exclusiva da K&I - KNOWLEDGE AND INTELLIGENCE TECNOLOGIA\\r\\n LTDA, inscrita no CNPJ: 34.307.169/0001-00, protegido e regulado pela Lei 9.609/98.\\r\\n\\r\\n <br />\\r\\n 2.15) PolÃtica de Privacidade: regras sobre privacidade, uso e transmissão de dados disponÃvel no\\r\\n site www.receitadigital.com e www.receitadigital.com.br e www.receitadigital.med.br\\r\\n\\r\\n <br />\\r\\n 2.16) Medicamentos/Produtos: itens de produção da Indústria que compõem o banco de dados da Receita\\r\\n Digital.\\r\\n\\r\\n <br />\\r\\n 2.17) Suporte: Serviço de Atendimento ao usuário para esclarecimento de dúvidas quanto à instalação e\\r\\n utilização da plataforma.\\r\\n\\r\\n <br />\\r\\n 2.18) Usuário: pessoa fÃsica ou jurÃdica (farmácias e drogarias) que é o nosso destinatário final de\\r\\n produtos ou serviços, nos termos do art. 2o e parágrafo único do Código de Defesa do Consumidor - Lei\\r\\n 8.078, de 11 de setembro de 1990 que utiliza a plataforma Receita Digital.\\r\\n\\r\\n <br /><br />\\r\\n 3- PLATAFORMA/ APLICATIVO DE PRODUTOS E SERVIÇOS\\r\\n <br />\\r\\n O Termo de Uso e PolÃtica de Privacidade aceitos constituem o contrato entre a Receita Digital e o\\r\\n Usuário/Contratante, e são suficientes neste momento para a formação e produção dos respectivos efeitos\\r\\n contratuais no caso de prescritores e pacientes Prescritores, Farmácias/Drogarias estão sujeitos à \\r\\n Proposta Comercial no que for cabÃvel. A Receita Digital licencia o uso da plataforma aos mesmos de\\r\\n forma gratuita para a versão básica (Beta e funcionalidades do pacote “básico).\\r\\n <br />\\r\\n A Receita Digital se reserva o direito de divulgar promoções pontuais, que não configuram compromisso\\r\\n permanente junto aos usuários. Documentação complementar poderá ser produzida, vindo a integrar este\\r\\n Termo de Uso. Este Termo de Uso é composto por regras de licenciamento de uso do Software e Serviços de\\r\\n tecnologia da informação.\\r\\n\\r\\n <br />\\r\\n A plataforma/aplicativo da Receita Digital possibilita o acesso a informações por integrantes da cadeia\\r\\n do negócio e profissionais da Contratante (estabelecimentos de saúde e/ou farmácias e drogarias),\\r\\n mediante autorização prévia de compartilhamento de dados.\\r\\n\\r\\n <br />\\r\\n Cada camada da plataforma/aplicativo contempla informações relevantes para determinados públicos,\\r\\n Prescritores/Estabelecimentos de saúde, Farmácias/Drogarias, Pacientes e Planos de Saúde e o acesso a\\r\\n estas informações dar-se-á por meio de cadastro/ emissão de senhas exclusivas/ assinaturas com\\r\\n certificação digital e autorizações prévias, a fim de atender à s regras da PolÃtica de Privacidade.\\r\\n\\r\\n <br />\\r\\n Ao realizar o cadastro na plataforma/aplicativo Receita Digital, o contratante/usuário deverá fornecer\\r\\n dados, tais como: informações pessoais identificáveis para criação de perfil e Informações\\r\\n profissionais e de pessoa jurÃdica. O contratante/usuário reconhece a importância da veracidade das\\r\\n informações fornecidas de si mesmo e das empresas e se compromete a mantê-las atualizadas, completas e\\r\\n verdadeiras assumindo a correspondente responsabilidade caso não sejam.\\r\\n\\r\\n <br />\\r\\n As futuras Extensões de funcionalidade estão cobertas por este Termo de Uso e PolÃtica de Privacidade e\\r\\n seguem todas as suas regras, inclusive à s relativas à PolÃtica de Privacidade.\\r\\n\\r\\n <br />\\r\\n O uso adequado da plataforma/aplicativo pressupõe o atendimento a requisitos técnicos indispensáveis\\r\\n por parte do Contratante.\\r\\n\\r\\n <br />\\r\\n A Receita Digital é exclusiva proprietária e detentora dos direitos autorais sobre a plataforma/\\r\\n aplicativo protegidos e regulados pela Lei 9.609/98. Face aos direitos autorais que lhe pertencem,\\r\\n detém a exclusiva liberdade de exploração da plataforma/aplicativo, para os fins a que se destina.\\r\\n\\r\\n <br />\\r\\n A infração aos direitos autorais da Receita Digital implica em indenização por perdas e danos e/ou\\r\\n lucros cessantes na forma da lei.\\r\\n\\r\\n <br />\\r\\n Dentre outras práticas inaceitáveis e ilegais, considera-se violação de direitos autorais da Receita\\r\\n Digital a utilização, modificação, comercialização ou integração desautorizada da\\r\\n plataforma/aplicativo.\\r\\n\\r\\n <br />\\r\\n Para fins de auditoria e verificação de contrafação, pirataria ou uso indevido da\\r\\n plataforma/aplicativo, a Receita Digital detém livre acesso ao ambiente computacional dos\\r\\n Contratantes/Usuários.\\r\\n\\r\\n <br />\\r\\n A Receita Digital, caso entenda ser viável tecnicamente, prestará serviços de integração da\\r\\n plataforma/aplicativo com outros softwares/sistemas do Contratante/usuário, mediante prévio acordo\\r\\n convencionado entre as partes.\\r\\n\\r\\n <br />\\r\\n A Receita Digital desaconselha que integrações sejam realizadas diretamente pelo Contratante/Usuário,\\r\\n pois poderão desestabilizar nossa plataforma/aplicativo ou impactar seu funcionamento. Nestes casos, a\\r\\n Receita Digital não será responsabilizada, porém, pode auxiliar mediante demanda personalizada e\\r\\n proposta especÃfica.\\r\\n\\r\\n <br />\\r\\n <br />\\r\\n 4 - REFERENTE À MARCA, WEBSITE E PLATAFORMA/APLICATIVO\\r\\n\\r\\n <br />\\r\\n A Receita Digital é marca registrada da K&I - KNOWLEDGE AND INTELLIGENCE TECNOLOGIA LTDA, inscrita no\\r\\n CNPJ: 34.307.169/0001-00 protegida junto ao INPI, conforme Lei 9.279/96. É proibida a utilização\\r\\n desautorizada da referida marca, que incluem o nome e logotipo, salvo mediante consentimento expresso\\r\\n da Receita Digital.\\r\\n\\r\\n <br />\\r\\n\\r\\n Estão reservados à  K&I - KNOWLEDGE AND INTELLIGENCE TECNOLOGIA LTDA, todos os direitos autorais\\r\\n relativos ao website, plataforma, aplicativo, desenho, programação, conteúdo, ficando expressamente\\r\\n proibida a reprodução, comunicação, distribuição e transformação dos referidos elementos protegidos,\\r\\n salvo mediante consentimento expresso da Receita Digital. A Receita Digital não utilizará marcas do\\r\\n Contratante/Usuário, exceto para divulgação da condição de Usuário na plataforma/aplicativo da Receita\\r\\n Digital e mediante consentimento do Contratante/usuário. O Contratante/Usuário poderá impedir a\\r\\n divulgação de sua marca como Usuário na plataforma/aplicativo da Receita Digital, mediante comunicação\\r\\n expressa e inequÃvoca à Receita Digital, com prazo razoável para cumprimento.\\r\\n <br />\\r\\n <br />\\r\\n 5 - DA LICENÇA E PERMISSÃO DE USO\\r\\n <br />\\r\\n No caso da versão Premium e/ou aquisição de serviços/funcionalidades para utilizar a\\r\\n plataforma/aplicativo o Contratante/Usuário deverá estar adimplente com relação ao valor da licença e\\r\\n dos serviços, se for o caso, manter conexão à internet de boa qualidade, de acordo com as orientações\\r\\n da Receita Digital e respeitar o limite de um usuários e/ou prescrição ou dispensação por licença\\r\\n adquirida.\\r\\n\\r\\n <br />\\r\\n A conexão à internet de boa qualidade é fundamental ao adequado funcionamento da plataforma/aplicativo\\r\\n da Receita Digital, bem como permite a sua atualização tecnológica e outros serviços.\\r\\n\\r\\n <br />\\r\\n A plataforma/aplicativo não admite utilização off-line. O uso da plataforma/aplicativo pressupõe o\\r\\n respeito e prévia adesão à PolÃtica de Privacidade e aos direitos fundamentais a privacidade, imagem,\\r\\n honra, direitos autorais e regras de preservação de dados, inclusive condições comerciais, pedidos,\\r\\n registros pessoais e cadastrais. O Contratante/usuário deverá informar à Receita Digital sobre bloqueio\\r\\n ou restrições de uso da plataforma/aplicativo Receita Digital mediante comunicação prévia comprovada e\\r\\n inequÃvoca.\\r\\n\\r\\n <br />\\r\\n <br />\\r\\n 6 - DOS DADOS FORNECIDOS E ARMAZENADOS\\r\\n <br />\\r\\n É fundamental que o Contratante/Usuário detenha a titularidade ou autorização para inserção e/ou acesso\\r\\n aos Dados. O Contratante/Usuário é responsável pelos Dados transmitidos, inseridos e acessados. A\\r\\n Receita Digital é responsável pelo seu armazenamento e acesso para oferecer com eficiência todos\\r\\n serviços de seu interesse no site/plataforma e aplicativo, bem como para garantir sua segurança,\\r\\n monitorar fraudes, cumprir nossas obrigações legais ou disponibilizar um canal de atendimento\\r\\n especializado para os nossos usuários.\\r\\n\\r\\n <br />\\r\\n Consentir com o uso de cookies de acordo com os termos desta polÃtica ao acessar nosso site/plataforma\\r\\n ou aplicativo pela primeira vez nos permitirá usar cookies toda vez que você acessar nosso\\r\\n site/plataforma ou aplicativo.\\r\\n\\r\\n <br />\\r\\n Caso o Contratante tenha interesse na exclusão ou limitação de acesso e/ou uso de Dados, deverá\\r\\n informar à Receita Digital, mediante comunicação prévia aos administradores da plataforma/aplicativo de\\r\\n comprovada e inequÃvoca pelo e-mail contato@receitadigital.com.\\r\\n\\r\\n <br />\\r\\n O Contratante/ usuário que não concordar com o presente Termo e quiser proceder com o cancelamento de\\r\\n seu cadastro, removerá seus dados para futuras consultas, mas esta remoção não funcionará de maneira\\r\\n retroativa, ou seja, as ações anteriores à essa decisão continuarão armazenadas e com uso de acordo com\\r\\n os termos previstos no presente Instrumento.\\r\\n\\r\\n <br />\\r\\n A plataforma/aplicativo pertence exclusivamente à Receita Digital, assim, a mesma está autorizada a\\r\\n incluir produtos, pacote de serviços próprios e de seus parceiros comerciais no mesmo, ceder espaços\\r\\n publicitários bem como explorar amplamente a plataforma/aplicativo dentro de suas aptidões técnicas.\\r\\n\\r\\n <br />\\r\\n A inserção de Dados deve respeitar a PolÃtica de Privacidade da plataforma/aplicativo Receita Digital.\\r\\n\\r\\n <br /><br />\\r\\n 7 - TERMO DE GARANTIA E VALIDADE TÉCNICA\\r\\n <br />\\r\\n Durante a vigência contratual, a receita Digital garante o funcionamento adequado da\\r\\n plataforma/aplicativo Receita Digital para os fins a que se destina.\\r\\n\\r\\n <br />\\r\\n Erros são naturais e aceitáveis em plataforma/aplicativos, principalmente em sua versão Beta. Portanto,\\r\\n não dão ensejo à garantia, inclusive porque esta é de versão gratuita para todos os usuários\\r\\n (prescritores/Estabelecimentos de saúde, farmácias/drogarias e pacientes). O uso da garantia pressupõe\\r\\n o atendimento das instruções da plataforma/aplicativo, disponibilizadas no website Receita Digital e\\r\\n atualização tecnológica. Dentro do prazo de validade técnica, a Receita Digital garante a prestação de\\r\\n serviços relativos ao adequado funcionamento da plataforma/aplicativo. A plataforma/aplicativo será\\r\\n considerada adequada desde que suficiente na utilização para os fins a que se propõe, segundo suas\\r\\n especificações técnicas. Por tratar-se de bem móvel imaterial, sujeito a adaptações e incremento\\r\\n tecnológico, a Receita Digital não garante que a plataforma/aplicativo não apresentará erros, mas fará\\r\\n o possÃvel para minimizá-los e/ou consertá-los caso ocorram.\\r\\n\\r\\n <br /><br />\\r\\n 8 - DAS RESPONSABILIDADES\\r\\n <br />\\r\\n A responsabilidade da Receita Digital é de meio, e não de finalidade ou resultado sobre o uso ou a\\r\\n expectativa do Contratante/usuário com relação à plataforma/aplicativo e serviços ofertados.\\r\\n\\r\\n <br />\\r\\n <br />\\r\\n A Receita Digital poderá disponibilizar o software, o serviço, a plataforma, o aplicativo, o ambiente\\r\\n técnico, o atendimento, dentre outros, a fim de que o Contratante e demais\\r\\n\\r\\n <br />\\r\\n Usuários interajam, se relacionem, publiquem, acessem, utilizem ou pratiquem quaisquer outros atos\\r\\n autorizados, ofertados ou disponÃveis no plataforma/aplicativo Receita Digital, de forma direta, sem a\\r\\n intermediação da Receita Digital.\\r\\n\\r\\n <br />\\r\\n A Receita Digital não intermedia, não edita, não audita, não fiscaliza e não monitora as ações e\\r\\n relações entre os Contratantes/Usuários e demais Usuários e estes e terceiros.\\r\\n\\r\\n <br />\\r\\n Eventuais intervenções da Receita Digital quanto ao uso da plataforma/aplicativo somente serão\\r\\n realizadas para fins de incremento de suas aptidões ou correções de erros e problemas.\\r\\n\\r\\n <br />\\r\\n Algumas disposições especÃficas sobre a responsabilidade compartilhada da Receita Digital e\\r\\n Contratante/Usuário:\\r\\n\\r\\n <br />\\r\\n Fato de Terceiro – A Receita Digital e o Contratante/Usuário reconhecem que a plataforma/aplicativo é\\r\\n segura, todavia, assim como ocorre em outros ambientes virtuais, está sujeito a ameaças e violação\\r\\n criminosa, sendo estas causas excludentes da responsabilidade dos mesmos. Ainda, as tecnologias web são\\r\\n suportadas por serviços de comunicação, tais como, internet e rede de telecomunicações, não oferecidos\\r\\n pela Receita Digital e que podem impactar no desempenho da plataforma/aplicativo, sendo considerados\\r\\n como fatos de terceiros, excludentes de responsabilidade.\\r\\n\\r\\n <br />\\r\\n Dever de Colaboração RecÃproca – Receita Digital e Contratante/usuário deverão fornecer assistência\\r\\n razoável um ao outro, sem nenhum custo, para responder auditorias regulatórias, inspeções, inquéritos\\r\\n ou pedidos de autoridade relativos a plataforma/aplicativo, serviços ou transmissão de dados.\\r\\n\\r\\n <br />\\r\\n Informação – O Contratante/Usuário deverá notificar a Receita Digital de qualquer informação que receba\\r\\n sobre a segurança da plataforma/aplicativo, incluindo informação confirmada ou não confirmada de\\r\\n eventos adversos, graves ou inesperados associados com o uso do mesmo. Caso Fortuito ou Força Maior – A\\r\\n Receita Digital e o Contratante/Usuário não responderão por prejuÃzos resultantes de caso fortuito ou\\r\\n força maior, nos termos do Artigo 393, do Código Civil. São exemplos de Caso Fortuito ou Força Maior\\r\\n excludentes de responsabilidade, dentre outros, os seguintes eventos:\\r\\n\\r\\n <br />\\r\\n a) falhas decorrentes de um fato ou impedimento além do controle razoável da Receita Digital e do\\r\\n Contratante/Usuário;\\r\\n\\r\\n <br />\\r\\n b) atos ou fatos cuja inconformidade a Receita Digital e o Contratante/Usuário não poderiam\\r\\n razoavelmente esperar ou levar em conta no momento da conclusão do termo;\\r\\n\\r\\n <br />\\r\\n c) fatos que a Receita Digital e o Contratante/Usuário não poderiam razoavelmente ter evitado ou\\r\\n superado seus efeitos, inclusive intervenção de hackers, crackers, softwares de terceiros, antivÃrus,\\r\\n firewall, proxy, entre outros;\\r\\n\\r\\n <br />\\r\\n d) guerra (declarada ou não), conflitos armados ou ameaça grave destes, ataque hostil, bloqueio,\\r\\n embargo militar, invasão, ato de inimigo estrangeiro, guerra civil, rebelião, motim e revolução,\\r\\n comoção ou desordem, violência de multidão ou ato de desobediência civil;\\r\\n\\r\\n <br />\\r\\n e) ato de sabotagem, terrorismo ou pirataria, inclusive pirataria virtual; f) ato de autoridade,\\r\\n regulação, expropriação ou aquisição compulsória;\\r\\n <br />\\r\\n <br />\\r\\n g) fatos da natureza, pestes, epidemia, desastres naturais como tempestade, ciclone, tufão, furacão,\\r\\n relâmpago, tornado, tempestade violenta, terremoto, atividades vulcânicas; deslizamento de terras,\\r\\n maremoto, tsunami, inundação, danos ou destruição pela seca;\\r\\n\\r\\n <br />\\r\\n h) explosão, incêndio, raio, destruição de máquinas, equipamentos, fábricas, e de qualquer tipo de\\r\\n instalação, break-down de transportes, telecomunicações ou de corrente elétrica;\\r\\n\\r\\n <br />\\r\\n i) perturbação geral no trabalho, tais como, mas não limitadas a boicotar, greve, lock-out, ocupação de\\r\\n fábricas e instalações; Tempo Razoável - quando a duração ou impedimento invocado superar o prazo de 60\\r\\n (sessenta) dias, privando substancialmente a Receita Digital e o Contratante/Usuário dos efeitos deste\\r\\n termo, qualquer um destes poderá rescindir o contrato, sem ônus ou indenização.\\r\\n\\r\\n <br />\\r\\n Limitação da Responsabilidade: Respeitadas à s previsões legais relativas a esta espécie de\\r\\n Termo/Contrato, a Receita Digital não será responsabilizada pelo uso abusivo da plataforma/aplicativo\\r\\n ou serviços quando o Contratante/Usuário pratica ofensa, difamação, ameaça, assédio, contrafação ou\\r\\n outras formas de violação de direitos pessoais ou proprietários, inclusive por lucros cessantes, perda\\r\\n de dados, descontinuidade de negócios, relacionados ao uso ou mau uso da plataforma/aplicativo, mesmo\\r\\n nos casos em que a Receita Digital tenha sido comunicada. Limitação Econômica da Responsabilidade:\\r\\n Tratando-se de hipótese em que é admitida a limitação da responsabilidade, segundo as regras legais e\\r\\n parâmetros jurisdicionais de cada PaÃs, em qualquer circunstância, a responsabilidade integral da\\r\\n Receita Digital, com relação à totalidade dos danos suportados, não será superior a R$ 1.000,00 (mil\\r\\n reais). Em conformidade ao art. 48 da Lei nº 13.709, a Receita Digital comunicará ao\\r\\n Contratante/usuário e à Autoridade Nacional de Proteção de Dados (ANPD) a ocorrência de incidente de\\r\\n segurança que possa acarretar risco ou dano relevante ao Contratante/usuário.\\r\\n <br />\\r\\n <br />\\r\\n 9 - POLÃTICA DE PRIVACIDADE\\r\\n\\r\\n <br />\\r\\n A PolÃtica de Privacidade da Receita Digital contém normas de uso correto da plataforma/aplicativo e\\r\\n serviços oferecidos no que respeita aos dados pessoais dos Contratantes, Usuários e terceiros que\\r\\n tenham acesso aos mesmos.\\r\\n\\r\\n <br />\\r\\n A PolÃtica de Privacidade protege e regula especialmente os direitos da personalidade referentes à \\r\\n imagem, honra e vida privada das pessoas e empresas no âmbito do uso da plataforma/aplicativo.\\r\\n\\r\\n <br />\\r\\n É nossa PolÃtica de Privacidade que define a forma e limites de uso dos seus dados pessoais pela\\r\\n Receita Digital, sempre no intuito de melhorarmos nossa experiência com o Contratante/usuário. A\\r\\n legitimidade do objetivo da ação sempre prevalecerá.\\r\\n\\r\\n <br />\\r\\n A Contratante/Usuário permite, de acordo com a PolÃtica de Privacidade, que dados sejam transmitidos\\r\\n por meio da plataforma/aplicativo, para ações comerciais, promocionais e estatÃsticas, mediante prévia\\r\\n autorização por Mensagem de Dados. O objetivo será sempre oferecer com eficiência todos serviços de\\r\\n interesse do contratante/usuário na plataforma/aplicativo, bem como para garantir sua segurança,\\r\\n monitorar fraudes, cumprir nossas obrigações legais ou disponibilizar um canal de atendimento\\r\\n especializado para os contratantes/usuários.\\r\\n\\r\\n <br />\\r\\n Em caso de fusão, aquisição ou venda de participação societária pela Receita Digital, os dados, em sua\\r\\n totalidade, poderão ser transferidos ao terceiro envolvido a fim de garantir a continuidade de uso da\\r\\n plataforma/aplicativo.\\r\\n\\r\\n <br />\\r\\n É bom saber que os dados dos contratantes/usuários desde que manipulados de forma consciente,\\r\\n equilibrada e dentro da legalidade contribuem para o crescimento e aprimoramento da\\r\\n plataforma/aplicativo e serviços ofertados no conceito de nuvem, que pressupõe máxima integração,\\r\\n acessibilidade e proveito. Se você faz parte do grupo de pessoas que utilizam esse tipo de\\r\\n plataforma/aplicativo e serviços coligados compartilhe seus dados com empresas que possuem boas\\r\\n práticas e polÃticas claras de uso de dados.\\r\\n\\r\\n <br />\\r\\n 10 - DA VIGÊNCIA DO USO DA PLATAFORMA/APLICATIVO\\r\\n <br />\\r\\n O prazo de uso da plataforma/aplicativo e serviços coligados da Receita Digital será indeterminado,\\r\\n salvo se a proposta comercial inicial dispuser o contrário.\\r\\n\\r\\n <br />\\r\\n O uso da plataforma/aplicativo poderá ser rescindido a qualquer tempo, mediante notificação expressa\\r\\n com 60 (sessenta) dias de antecedência.\\r\\n\\r\\n <br />\\r\\n O contrato entre a Receita Digital - K&I - KNOWLEDGE AND INTELLIGENCE TECNOLOGIA LTDA e o\\r\\n Contratante/Usuário poderá ser rescindido de pleno direito, independentemente de notificação ou\\r\\n interpelação, a qualquer tempo, no caso de qualquer das disposições deste Termo de Uso, podendo ainda,\\r\\n implicar em indenização por perdas e danos. Falência, recuperação judicial, extrajudicial ou liquidação\\r\\n da Receita Digital e/ou do Contratante/usuário implicam na rescisão contratual de pleno direito.\\r\\n\\r\\n <br /><br />\\r\\n 11- DO PRAZO E REVOGAÇÃO DOS TERMOS DE USO E POLÃTICA DE PRIVACIDADE\\r\\n <br />\\r\\n Este Termo de Uso e PolÃtica de Privacidade entra em vigor na data de sua publicação, acima\\r\\n identificada, e seu prazo é indeterminado. O constante aprimoramento da plataforma/aplicativo Receita\\r\\n Digital e seus serviços bem como as alterações legais e mercadológicas poderá ensejar a modificação das\\r\\n regras previstas neste Termo de Uso e PolÃtica de Privacidade, neste caso, haverá a revogação deste\\r\\n instrumento, com imediata substituição por versão atualizada que passará a regular a relação entre a\\r\\n Receita Digital e o Contratante/usuário dentro de 10 (dez) dias úteis a contar da publicação.\\r\\n\\r\\n <br />\\r\\n A substituição deste Termo de Uso e PolÃtica de Privacidade por outro será divulgada nos canais de\\r\\n comunicação com o Contratante/usuário da Receita Digital, inclusive e-mail, porém, a responsabilidade\\r\\n de se manter informado é exclusivamente deste, que deverá visitar regularmente o site ou e-mails\\r\\n enviados pela Receita Digital.\\r\\n\\r\\n <br />\\r\\n A adesão à novos Termos de Uso e PolÃtica de Privacidade dar-se-á mediante a continuidade na utilização\\r\\n da plataforma/aplicativo Receita Digital e seus serviços coligados.\\r\\n\\r\\n <br />\\r\\n A discordância com os novos Termos de Uso e PolÃtica de Privacidade deverá ser imediatamente informada\\r\\n pelo Contratante/Usuário ao setor de Atendimento da Receita Digital para fins de solução da\\r\\n controvérsia ou rescisão do contrato.\\r\\n <br /><br />\\r\\n 12 - SOBRE AS REGRAS GERAIS DESTE TERMO DE USO E POLÃTICA DE PRIVACIDADE\\r\\n <br />\\r\\n A Receita Digital poderá aceitar o descumprimento destas regras pelo Contratante/Usuário sem que\\r\\n signifique que renunciou a seus direitos, que as disposições foram alteradas ou que não possa vir a\\r\\n aplicá-las integralmente de forma imediata ou a qualquer tempo.\\r\\n\\r\\n <br />\\r\\n Se algumas regras deste Termo de Uso e PolÃtica de Privacidade não puderem ser aplicadas, este fato não\\r\\n afetará o todo do instrumento que permanecerá válido e vigente.\\r\\n\\r\\n <br />\\r\\n Se o Contratante/Usuário adquirir e disponibilizar a plataforma/aplicativo Receita Digital para outros\\r\\n usuários deverá informá-los sobre as condições deste Termo de Uso e PolÃtica de Privacidade, em\\r\\n especial de que o uso implicação em aceitação irrestrita das disposições previstas neste documento.\\r\\n\\r\\n <br />\\r\\n A Receita Digital e o Contratante/usuário reconhecem que este Termo de Uso e PolÃtica de Privacidade\\r\\n prevê condições proporcionais, não existindo vÃcios ou defeitos que possam acarretar a sua nulidade, em\\r\\n especial relacionados com dolo, erro, fraude, simulação ou coação, inexistindo qualquer fato que possa\\r\\n ser configurado como estado de perigo ou de necessidade.\\r\\n\\r\\n <br />\\r\\n As disposições deste Termo de Uso e PolÃtica de Privacidade prevalecerão sobre quaisquer outros\\r\\n entendimentos ou acordos anteriores.\\r\\n\\r\\n <br />\\r\\n A Receita Digital e o Contratante/usuário reconhecem a validade das mensagens de dados nas comunicações\\r\\n relativas ao uso da plataforma/ aplicativo e seus serviços, com equivalência probatória e funcional aos\\r\\n documentos em suporte de papel, desde que observada a efetividade da comunicação, sua integridade,\\r\\n autenticidade e a segurança do meio pelo qual são transmitidas.\\r\\n\\r\\n <br />\\r\\n A violação das disposições deste Termo de Uso e PolÃtica de Privacidade resultará ao infrator o dever\\r\\n de indenizar por perdas e dados, além de multa contratual a ser fixada por arbitramento, conforme as\\r\\n circunstâncias do caso.\\r\\n <br /><br />\\r\\n 13- LEI APLICÃVEL <br />\\r\\n <br />\\r\\n O presente Termo/Contrato será regido pela legislação do Brasil.\\r\\n <br /><br />\\r\\n 14- DO FORO\\r\\n <br />\\r\\n Ressalvados os direitos de consumidor, em que prevalece o foro do domicÃlio deste, qualquer questão ou\\r\\n controvérsia decorrente do presente Termo/Contrato será dirimida no foro da cidade do Rio de Janeiro –\\r\\n RJ. “Receita Digital†- K&I - KNOWLEDGE AND INTELLIGENCE TECNOLOGIA LTDA, inscrita no CNPJ:\\r\\n 34.307.169/0001-00, com sede na Rua do Carmo, nº 71- 5º andar, Centro – Rio de Janeiro- RJ, CEP\\r\\n 20011-020.\\r\\n\\r\\n <br /><br />\\r\\n</div>\\r\\n\";","export default \"\";","import { animate, group, state, style, transition, trigger } from '@angular/animations';\nimport { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\nimport { FormArray, FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { ValidationService } from '@app/core/services/validation.service';\nimport { SpecialtiesService } from '@app/modules/admin/listing/features-listing/specialties.service';\nimport { CepService } from '@app/modules/entry/services/cep.service';\nimport { CfmService } from '@app/modules/entry/services/cfm.service';\nimport { BrazilianStates } from '@app/shared/data/Brazilian-states';\nimport { nativeAsync } from '@app/shared/decorators/nativeAsync';\nimport { Specialty } from '@app/shared/models';\nimport { BrazilState } from '@app/shared/models/brazil-state';\nimport { HealthProfessional } from '@app/shared/models/health-professional';\nimport { AppToastService } from '@app/shared/services/app-toast.service';\nimport { BigboostService } from '@app/shared/services/bigboost.service';\nimport { environment } from '@env/environment';\nimport * as moment from 'moment';\nimport { NzI18nService, pt_BR } from 'ng-zorro-antd/i18n';\nimport { ReplaySubject } from 'rxjs';\nimport { debounceTime, map } from 'rxjs/operators';\n\n@Component({\n selector: 'app-health-professional-form',\n templateUrl: './health-professional-form.component.html',\n styleUrls: ['./health-professional-form.component.scss'],\n animations: [\n trigger('slideInOut', [\n state('in', style({ height: '*', opacity: 0 })),\n transition(':leave', [\n style({ height: '*', opacity: 1 }),\n group([animate(300, style({ height: 0 })), animate('400ms ease-in-out', style({ opacity: 0 }))])\n ]),\n transition(':enter', [\n style({ height: 0, opacity: 0 }),\n group([\n animate(300, style({ height: '*' })),\n animate('400ms ease-in-out', style({ opacity: 1 }))\n ])\n ])\n ])\n ]\n})\nexport class HealthProfessionalFormComponent implements OnInit, OnDestroy {\n @Input() professionalType: string;\n @Output() formChange = new EventEmitter<FormGroup>();\n\n specialtiesOptions: Specialty[] = [];\n selectedSpecialties: string[] = [];\n loading: boolean;\n states: BrazilState[] = BrazilianStates;\n form: FormGroup;\n\n private lastCpf: string;\n private lastDateOfBirth: string;\n private destroyed$: ReplaySubject<boolean> = new ReplaySubject();\n\n constructor(\n private fb: FormBuilder,\n private cepService: CepService,\n private specialtyService: SpecialtiesService,\n private notification: AppToastService,\n private bigboostService: BigboostService,\n private i18n: NzI18nService\n ) {}\n\n ngOnInit() {\n this.buildForm();\n this.getSpecialties();\n\n // add specialty after init\n this.addSpecialty();\n\n this.form.get('professionalType').setValue(this.professionalType);\n this.form.get('regionalCouncilNumber.label').setValue(this.regionalCouncilLabel);\n\n this.form.get('cpf').valueChanges.subscribe(cpf => {\n if (this.lastCpf !== cpf && !this.hasPendency) {\n this.verifiedCpf = false;\n }\n });\n\n this.form.get('birthdate').valueChanges.subscribe(birthdate => {\n const dateOfBirth = moment(birthdate, 'DD/MM/YYYY').format('YYYY-MM-DD');\n if (this.lastDateOfBirth !== dateOfBirth) {\n if (!this.hasPendency) {\n this.verifiedCpf = false;\n }\n this.form.get('dateOfBirth').setValue(dateOfBirth);\n }\n });\n\n this.form.get('email').valueChanges.subscribe(email => {\n this.form.get('email').setValue(email.toLowerCase(), { emitEvent: false });\n });\n\n this.form.get('emailConfirmation').valueChanges.subscribe(emailConfirmation => {\n this.form.get('emailConfirmation').setValue(emailConfirmation.toLowerCase(), { emitEvent: false });\n });\n\n this.i18n.setLocale(pt_BR);\n\n this.formChange.emit(this.form);\n }\n\n private buildForm() {\n this.form = this.fb.group(\n {\n professionalType: ['', Validators.required],\n name: ['', [Validators.required, ValidationService.nomeValidator]],\n fullname: ['', [Validators.required, ValidationService.nomeValidator]],\n cpf: ['', [Validators.required, ValidationService.cpfValidator]],\n sex: [null, Validators.required],\n birthdate: [\n '',\n [\n Validators.required,\n ValidationService.dateValidator(),\n ValidationService.birthdateValidator()\n ]\n ],\n dateOfBirth: [\n '',\n [Validators.required, ValidationService.dateValidator({ format: 'YYYY-MM-DD' })]\n ],\n membership: this.fb.group({\n mothersName: ['']\n }),\n regionalCouncilNumber: this.fb.group({\n number: ['', Validators.required],\n uf: ['', Validators.required],\n label: ['', Validators.required]\n }),\n mapaSipeagro: [''],\n cellphone: ['', Validators.required],\n telephone: [''],\n email: ['', [Validators.required, Validators.email]],\n emailConfirmation: ['', [Validators.required, Validators.email]],\n specialties: this.fb.array([], Validators.required),\n commercialData: this.fb.array([this.buildCommercialForm()]),\n pendency: [null],\n verifiedCpf: [false]\n },\n { validator: ValidationService.emailMatch }\n );\n }\n\n get isDentist() {\n return this.professionalType === 'dentist';\n }\n\n get isVeterinarian(): boolean {\n return this.professionalType === 'veterinarian';\n }\n\n get currentDate() {\n const now = new Date();\n const dd = String(now.getDate()).padStart(2, '0');\n const mm = String(now.getMonth() + 1).padStart(2, '0');\n const yyyy = now.getFullYear();\n return `${yyyy}-${mm}-${dd}`;\n }\n\n get hasPendency() {\n return this.form.value.pendency;\n }\n\n get verifiedCpf() {\n return this.form.get('verifiedCpf').value;\n }\n\n set verifiedCpf(value: boolean) {\n this.form.get('verifiedCpf').setValue(value);\n }\n\n get cpfCtrl() {\n return this.form.get('cpf');\n }\n\n get dateCtrl() {\n return this.form.get('birthdate');\n }\n\n get commercialForm(): FormArray {\n return <FormArray>this.form.get('commercialData');\n }\n\n get specialtiesForm(): FormArray {\n return <FormArray>this.form.get('specialties');\n }\n\n get regionalCouncilLabel() {\n return HealthProfessional.getRegionalCouncilLabel(this.professionalType);\n }\n\n private getSpecialties() {\n this.specialtyService.getSpecialtiesByType(this.professionalType).subscribe(specialties => {\n specialties.forEach(function(item, i) {\n if (item.code === 1) {\n specialties.splice(i, 1);\n specialties.unshift(item);\n }\n });\n this.specialtiesOptions = specialties;\n });\n }\n\n addSpecialties() {\n if (this.selectedSpecialties.length <= 3) {\n const specialtiesArray = this.selectedSpecialties.map(id => this.buildSpecialtyForm(id));\n this.form.setControl('specialties', this.fb.array(specialtiesArray, Validators.required));\n } else if (this.selectedSpecialties.length > 3) {\n this.selectedSpecialties.pop();\n this.notification.notify('warning', 'Aviso', 'Você pode escolher no máximo 3 especialidades');\n }\n }\n\n @nativeAsync\n async consultCpf() {\n const { cpf, birthdate: date } = this.form.value;\n // A data que vem no formulário não vem no formato para que possa ser formatada.\n // Essa linha vai fazer com que a data fique no formato 00/00/0000.\n const dateOfBirth = moment(date, 'DDMMYYYY').format('YYYY-MM-DD');\n\n const age = moment().diff(moment(date, 'DDMMYYYY'), 'years', false);\n if (age < 18) {\n this.notification.notify('warning', 'Cadastro proibido para menores');\n this.form.get('birthdate').setErrors({ invalidBirthdate: true });\n return;\n }\n\n if (\n this.cpfCtrl.valid &&\n this.dateCtrl.valid &&\n (this.lastCpf !== cpf || this.lastDateOfBirth !== dateOfBirth || !this.verifiedCpf)\n ) {\n try {\n this.loading = true;\n const consult = await this.bigboostService.consultCpf(cpf, dateOfBirth).toPromise();\n this.loading = false;\n this.handleConsultCpf(consult);\n } catch (err) {\n console.error(err);\n this.loading = false;\n if (err.status === 404) {\n this.notification.notify(\n 'error',\n 'Error ao consultar CPF',\n 'CPF não localizado na Receita Federal. Verifique as informações digitadas e tente novamente. Em caso de dúvidas, entre em contato com nosso atendimento',\n 8000\n );\n return;\n }\n\n if (err.status === 500) {\n this.notification.notify(\n 'error',\n 'Error ao consultar CPF',\n 'Plataforma de consulta de CPF com erro ao tentar realizar consulta do CPF',\n 8000\n );\n return;\n }\n const consult = {\n status: -1,\n cpf,\n erroCodigo: err.status,\n erro: 'A importação de dados do cpf está com instabilidade'\n };\n this.form.get('pendency').setValue(consult);\n if (err.status === 401) {\n this.notification.notify(\n 'warning',\n 'Aviso',\n 'Data de nascimento não corresponde ao CPF informado'\n );\n this.form.get('birthdate').setErrors({ nonMatchingCpf: true });\n this.verifiedCpf = false;\n } else {\n this.handleConsultCpf(consult);\n }\n }\n this.lastCpf = cpf;\n this.lastDateOfBirth = dateOfBirth;\n }\n }\n\n private handleConsultCpf(consult: any) {\n this.form.get('name').reset();\n this.form.get('name').enable();\n\n if (consult.status === 1) {\n this.form.get('cpf').disable();\n this.form.get('birthdate').disable();\n this.form.get('fullname').disable();\n this.form.get('pendency').setValue(null);\n this.setForm(consult);\n } else {\n this.form.get('fullname').enable();\n this.form.get('pendency').setValue(consult);\n this.resetForm();\n if (consult.erro) {\n this.notification.notify(\n 'warning',\n 'Aviso',\n 'A importação de dados do CPF está com instabilidade, mas você poderá se cadastrar preenchendo os campos manualmente.'\n );\n }\n }\n this.verifiedCpf = true;\n }\n\n private setForm(consult: any) {\n this.form.get('fullname').setValue(consult.nome);\n this.form.get('name').setValue(consult.nome);\n this.form.get('sex').setValue(consult.genero);\n this.form.get('membership.mothersName').setValue(consult.mae);\n\n this.lastCpf = this.form.value.cpf;\n this.lastDateOfBirth = this.form.value.dateOfBirth;\n }\n\n private resetForm() {\n this.form.get('fullname').reset();\n this.form.get('sex').reset();\n this.form.get('membership.mothersName').reset();\n }\n\n @nativeAsync\n async onKey(event: any, addressGroup: FormGroup) {\n if (event.target.value.length === 10) {\n const cep = event.target.value.replace(/[^\\d]+/g, '');\n const data = await this.cepService.consult(cep);\n if (!data.erro) {\n addressGroup.patchValue({\n uf: data.uf,\n street: data.logradouro,\n neighborhood: data.bairro,\n city: data.localidade,\n number: null,\n cep: data.cep\n });\n }\n }\n }\n\n trackById(index, specialty: Specialty) {\n return specialty ? specialty.code : null;\n }\n\n ngOnDestroy(): void {\n this.destroyed$.next(true);\n this.destroyed$.complete();\n }\n\n addSpecialty() {\n this.specialtiesForm.push(this.buildSpecialtyForm());\n }\n\n addComercial() {\n this.commercialForm.push(this.buildCommercialForm());\n }\n\n private buildSpecialtyForm(id: string = null) {\n if (this.isDentist || this.isVeterinarian) {\n return this.fb.group({\n specialty: [id, Validators.required]\n });\n }\n return this.fb.group({\n specialty: [id, Validators.required],\n rqe: [null, this.isDentist || this.isVeterinarian ? null : Validators.required],\n notExists: [null]\n });\n }\n\n private buildCommercialForm() {\n const commercialForm = this.fb.group({\n email: ['', Validators.email],\n name: ['', Validators.required],\n logo: [''],\n telephone: ['', Validators.required],\n cellphone: [''],\n address: this.fb.group({\n uf: [null, Validators.required],\n city: ['', Validators.required],\n complement: [''],\n number: ['', Validators.required],\n street: ['', Validators.required],\n neighborhood: ['', Validators.required],\n cep: ['', [Validators.required, ValidationService.cepValidator]]\n })\n });\n\n commercialForm.get('email').valueChanges.subscribe(email => {\n commercialForm.get('email').setValue(email.toLowerCase(), { emitEvent: false });\n });\n\n return commercialForm;\n }\n\n checkRQE(rqeForm: FormGroup, disable: boolean) {\n if (disable) {\n rqeForm.setValidators(null);\n rqeForm.setValue(null);\n rqeForm.disable();\n } else {\n rqeForm.setValidators(Validators.required);\n rqeForm.markAsPristine();\n rqeForm.enable();\n }\n }\n\n cancel() {\n this.buildForm();\n this.formChange.emit(this.form);\n }\n}\n","export default \"<form nz-form [formGroup]=\\\"form\\\" theme>\\n <div class=\\\"row justify-content-between\\\">\\n <nz-alert\\n class=\\\"mb-4\\\"\\n nzType=\\\"warning\\\"\\n nzMessage=\\\"Para agilizar seu cadastro, buscaremos dados complementares no site da Receita Federal.\\nEste é um procedimento seguro e o sigilo dos seus dados é garantido pela nossa plataforma\\\"\\n ></nz-alert>\\n <div class=\\\"col-md-6\\\">\\n <div class=\\\"row align-items-center\\\">\\n <div class=\\\"col-md\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"cpf\\\">CPF <span class=\\\"mandatory\\\">*</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n id=\\\"cpf\\\"\\n formControlName=\\\"cpf\\\"\\n mask=\\\"000.000.000-00\\\"\\n placeholder=\\\"000.000.000-00\\\"\\n />\\n <nz-form-explain *ngIf=\\\"cpfCtrl.dirty && cpfCtrl.errors\\\">\\n <ng-container *ngIf=\\\"cpfCtrl.hasError('required')\\\">\\n Campo obrigatório, por favor digite seu CPF.\\n </ng-container>\\n <ng-container *ngIf=\\\"!cpfCtrl.hasError('required') && cpfCtrl.hasError('cpf')\\\">\\n CPF inválido, por favor digite um CPF válido.\\n </ng-container>\\n <ng-container *ngIf=\\\"cpfCtrl.hasError('alreadyExists')\\\">\\n CPF já cadastrado.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n <div class=\\\"col-md\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"birthdate\\\"\\n >Data de nascimento <span class=\\\"mandatory\\\">*</span></nz-form-label\\n >\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n id=\\\"birthdate\\\"\\n type=\\\"tel\\\"\\n mask=\\\"00/00/0000\\\"\\n formControlName=\\\"birthdate\\\"\\n placeholder=\\\"DD/MM/AAAA\\\"\\n />\\n <nz-form-explain *ngIf=\\\"dateCtrl.dirty && dateCtrl.errors\\\">\\n <ng-container *ngIf=\\\"dateCtrl.hasError('required')\\\">\\n Campo obrigatório, por favor digite sua data de nascimento.\\n </ng-container>\\n <ng-container *ngIf=\\\"!dateCtrl.hasError('required') && dateCtrl.hasError('birthdate')\\\">\\n Data inválida.\\n </ng-container>\\n <ng-container *ngIf=\\\"dateCtrl.hasError('invalidDate') && dateCtrl.value.length > 0\\\">\\n Data inválida.\\n </ng-container>\\n <ng-container *ngIf=\\\"dateCtrl.hasError('nonMatchingCpf')\\\">\\n Data de nascimento não corresponde ao CPF informado.\\n </ng-container>\\n <ng-container\\n *ngIf=\\\"!dateCtrl.hasError('invalidDate') && dateCtrl.hasError('invalidBirthdate')\\\"\\n >\\n Proibido para menores\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n\\n <div class=\\\"col-auto pt-3\\\" *ngIf=\\\"!verifiedCpf\\\">\\n <button\\n nz-button\\n class=\\\"btn-primary\\\"\\n (click)=\\\"consultCpf()\\\"\\n [disabled]=\\\"cpfCtrl.invalid || dateCtrl.invalid || loading\\\"\\n >\\n OK\\n </button>\\n </div>\\n\\n <div class=\\\"col-auto pt-3\\\" *ngIf=\\\"verifiedCpf\\\">\\n <button nz-button class=\\\"btn-defaulf\\\" (click)=\\\"cancel()\\\">\\n cancelar\\n </button>\\n </div>\\n\\n <ng-container *ngIf=\\\"verifiedCpf\\\">\\n <div class=\\\"col-12\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"fullname\\\"\\n >Nome completo <span class=\\\"mandatory\\\">*</span></nz-form-label\\n >\\n <nz-form-control nzHasFeedback>\\n <input\\n formControlName=\\\"fullname\\\"\\n id=\\\"fullname\\\"\\n nz-input\\n placeholder=\\\"ex: João Gilberto\\\"\\n maxlength=\\\"128\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n <nz-form-explain *ngIf=\\\"form.get('fullname').dirty && form.get('fullname').errors\\\">\\n <ng-container *ngIf=\\\"form.get('fullname').hasError('required')\\\">\\n Campo obrigatório, por favor digite o seu nome e sobrenome.\\n </ng-container>\\n <ng-container\\n *ngIf=\\\"\\n !form.get('fullname').hasError('required') &&\\n form.get('fullname').hasError('fullname')\\n \\\"\\n >\\n Por favor digite o seu nome e sobrenome.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n <div class=\\\"col-12\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"name\\\"\\n >Nome de exibição/social <span class=\\\"mandatory\\\">*</span></nz-form-label\\n >\\n <nz-form-control nzHasFeedback>\\n <input\\n formControlName=\\\"name\\\"\\n id=\\\"name\\\"\\n nz-input\\n placeholder=\\\"ex: João Gilberto\\\"\\n maxlength=\\\"128\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n <nz-form-explain *ngIf=\\\"form.get('name').dirty && form.get('name').errors\\\">\\n <ng-container *ngIf=\\\"form.get('name').hasError('required')\\\">\\n Campo obrigatório, por favor digite um nome de exibição.\\n </ng-container>\\n <ng-container\\n *ngIf=\\\"!form.get('name').hasError('required') && form.get('name').hasError('name')\\\"\\n >\\n Por favor digite um nome de exibição.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n <div class=\\\"col-12\\\">\\n <div class=\\\"row\\\">\\n <div class=\\\"col-4\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"sex\\\">Sexo <span class=\\\"mandatory\\\">*</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <nz-select formControlName=\\\"sex\\\" id=\\\"sex\\\" nzPlaceHolder=\\\"Selecione\\\">\\n <nz-option nzLabel=\\\"Masculino\\\" nzValue=\\\"M\\\"></nz-option>\\n <nz-option nzLabel=\\\"Feminino\\\" nzValue=\\\"F\\\"></nz-option>\\n </nz-select>\\n <nz-form-explain *ngIf=\\\"form.get('sex').dirty && form.get('sex').errors\\\">\\n <ng-container *ngIf=\\\"form.get('sex').hasError('required')\\\">\\n Campo obrigatório, por favor selecione o sexo.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n <div class=\\\"col-5\\\" [formGroup]=\\\"form.get('regionalCouncilNumber')\\\">\\n <nz-form-item *ngIf=\\\"form.get('regionalCouncilNumber.number') as ctrl\\\">\\n <nz-form-label nzFor=\\\"regionalCouncilNumber-number\\\"\\n >{{ regionalCouncilLabel }} <span class=\\\"mandatory\\\">*</span></nz-form-label\\n >\\n <nz-form-control nzHasFeedback>\\n <input\\n id=\\\"regionalCouncilNumber-number\\\"\\n nz-input\\n type=\\\"text\\\"\\n formControlName=\\\"number\\\"\\n autocomplete=\\\"disabled\\\"\\n inputmode=\\\"numeric\\\"\\n pattern=\\\"[0-9]*\\\"\\n maxlength=\\\"10\\\"\\n digitOnly\\n />\\n <nz-form-explain *ngIf=\\\"ctrl.dirty && ctrl.errors\\\">\\n <ng-container *ngIf=\\\"ctrl.hasError('required'); else restriction\\\">\\n Campo obrigatório, por favor digite seu {{ regionalCouncilLabel }}.\\n </ng-container>\\n <ng-template #restriction>\\n <ng-container *ngIf=\\\"ctrl.hasError('restriction'); else notFound\\\">\\n {{ ctrl.getError('restriction') }}\\n </ng-container>\\n </ng-template>\\n <ng-template #notFound>\\n <ng-container *ngIf=\\\"ctrl.hasError('notFound'); else internalError\\\">\\n Registro CRM inválido.\\n </ng-container>\\n </ng-template>\\n <ng-template #internalError>\\n <ng-container *ngIf=\\\"ctrl.hasError('internalError')\\\">\\n {{ ctrl.getError('internalError') }}\\n </ng-container>\\n </ng-template>\\n <ng-template #invalid>\\n <ng-container *ngIf=\\\"ctrl.invalid\\\">\\n CRM inválido, por favor verifique o número e UF.\\n </ng-container>\\n </ng-template>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n <div class=\\\"col-3\\\" [formGroup]=\\\"form.get('regionalCouncilNumber')\\\">\\n <nz-form-item *ngIf=\\\"form.get('regionalCouncilNumber.uf') as ctrl\\\">\\n <nz-form-label nzFor=\\\"uf\\\">UF<span class=\\\"mandatory\\\"> *</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <nz-select\\n formControlName=\\\"uf\\\"\\n id=\\\"uf\\\"\\n nzShowSearch\\n nzAllowClear\\n nzDropdownClassName=\\\"account-select\\\"\\n nzPlaceHolder=\\\"Selecione\\\"\\n >\\n <nz-option\\n *ngFor=\\\"let state of states\\\"\\n [nzLabel]=\\\"state?.sigla\\\"\\n [nzValue]=\\\"state?.sigla\\\"\\n >\\n </nz-option>\\n </nz-select>\\n <nz-form-explain *ngIf=\\\"ctrl.dirty && ctrl.errors\\\">\\n <ng-container *ngIf=\\\"ctrl.hasError('required'); else restriction\\\">\\n Campo obrigatório, por favor selecione o UF.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n </div>\\n\\n <div class=\\\"row\\\" *ngIf=\\\"isVeterinarian\\\">\\n <nz-form-item class=\\\"col-12\\\">\\n <nz-form-label nzFor=\\\"mapaSipeagro\\\">MAPA Sipeagro </nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n formControlName=\\\"mapaSipeagro\\\"\\n id=\\\"mapaSipeagro\\\"\\n nz-input\\n type=\\\"number\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n <nz-form-explain\\n *ngIf=\\\"form.get('mapaSipeagro').dirty && form.get('mapaSipeagro').errors\\\"\\n >\\n <ng-container *ngIf=\\\"form.get('mapaSipeagro').hasError('required')\\\">\\n Campo obrigatório, por favor digite seu MAPA Sipeagro.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n </div>\\n <ng-container *ngIf=\\\"isDentist; else doctorSpecialties\\\">\\n <div class=\\\"col-12\\\">\\n <nz-form-item>\\n <nz-form-label\\n >Especialidades(s) <span class=\\\"max-quantity\\\">no máximo 3 opções </span\\n ><span class=\\\"mandatory\\\"> *</span></nz-form-label\\n >\\n <nz-form-control>\\n <nz-select\\n id=\\\"specialties\\\"\\n nzSize=\\\"large\\\"\\n nzMode=\\\"multiple\\\"\\n nzDropdownClassName=\\\"account-select\\\"\\n nzPlaceHolder=\\\"Selecione a sua especialidade\\\"\\n [(ngModel)]=\\\"selectedSpecialties\\\"\\n (ngModelChange)=\\\"addSpecialties()\\\"\\n [ngModelOptions]=\\\"{ standalone: true }\\\"\\n nzAllowClear\\n nzShowSearch\\n >\\n <nz-option\\n *ngFor=\\\"let specialty of specialtiesOptions; trackBy: trackById\\\"\\n [nzLabel]=\\\"specialty?.title\\\"\\n [nzValue]=\\\"specialty?._id\\\"\\n >\\n </nz-option>\\n </nz-select>\\n <nz-form-explain\\n *ngIf=\\\"form.get('specialties').dirty && !form.get('specialties').errors\\\"\\n >\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n </ng-container>\\n\\n <ng-template #doctorSpecialties formArrayName=\\\"specialties\\\">\\n <div\\n class=\\\"col-12\\\"\\n *ngFor=\\\"let specialty of specialtiesForm.controls; let i = index\\\"\\n [@slideInOut]\\n [formGroup]=\\\"specialty\\\"\\n >\\n <div class=\\\"row justify-content-between\\\">\\n <div [ngClass]=\\\"specialtiesForm.length > 1 ? 'col-11' : 'col-12'\\\">\\n <nz-divider\\n nzOrientation=\\\"left\\\"\\n [nzText]=\\\"'Especialidades ' + (specialtiesForm.length > 1 ? i + 1 : '')\\\"\\n ></nz-divider>\\n </div>\\n <div\\n class=\\\"col-1 pl-0 d-flex align-items-center justify-content-center\\\"\\n *ngIf=\\\"specialtiesForm.length > 1\\\"\\n >\\n <a\\n (click)=\\\"$event.preventDefault()\\\"\\n [nzContent]=\\\"contentTemplateSpecialty\\\"\\n class=\\\"popover-trigger\\\"\\n nz-popover\\n nzPlacement=\\\"right\\\"\\n >\\n <i class=\\\"fa fa-ellipsis-solid\\\"></i>\\n </a>\\n <ng-template #contentTemplateSpecialty>\\n <a (click)=\\\"specialtiesForm.removeAt(i)\\\"><i class=\\\"fa fa-trash-solid\\\"></i></a>\\n </ng-template>\\n </div>\\n </div>\\n <div class=\\\"row\\\">\\n <div [ngClass]=\\\"isVeterinarian ? 'col-12' : 'col-7'\\\">\\n <nz-form-item>\\n <nz-form-label [nzFor]=\\\"'specialty_' + i\\\"\\n >Especialidade <span class=\\\"mandatory\\\">*</span></nz-form-label\\n >\\n <nz-form-control nzHasFeedback *ngIf=\\\"specialty.get('specialty') as specialtyId\\\">\\n <nz-select\\n [id]=\\\"'specialty_' + i\\\"\\n formControlName=\\\"specialty\\\"\\n nzSize=\\\"large\\\"\\n nzDropdownClassName=\\\"account-select\\\"\\n nzPlaceHolder=\\\"Selecione uma especialidade\\\"\\n nzAllowClear\\n nzShowSearch\\n >\\n <nz-option\\n *ngFor=\\\"let specialty of specialtiesOptions; trackBy: trackById\\\"\\n class=\\\"disableClick\\\"\\n [nzLabel]=\\\"specialty?.title\\\"\\n [nzValue]=\\\"specialty?._id\\\"\\n >\\n </nz-option>\\n </nz-select>\\n <nz-form-explain *ngIf=\\\"specialtyId.dirty && specialtyId.errors\\\">\\n <ng-container *ngIf=\\\"specialtyId.hasError('required')\\\">\\n Campo obrigatório, por favor selecione uma especialidade.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n <div class=\\\"col-5\\\" *ngIf=\\\"!isVeterinarian\\\">\\n <nz-form-item *ngIf=\\\"specialty.get('rqe') as rqe\\\">\\n <div class=\\\"row\\\">\\n <div class=\\\"col-5 pr-0\\\">\\n <nz-form-label [nzFor]=\\\"'rqe_' + i\\\"\\n >RQE <span class=\\\"mandatory\\\">*</span></nz-form-label\\n >\\n </div>\\n <div class=\\\"col pl-0\\\">\\n <label\\n nz-checkbox\\n formControlName=\\\"notExists\\\"\\n (nzCheckedChange)=\\\"checkRQE(rqe, $event)\\\"\\n style=\\\"font-size: 14px;\\\"\\n >Não possuo</label\\n >\\n </div>\\n </div>\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n [id]=\\\"'rqe_' + i\\\"\\n formControlName=\\\"rqe\\\"\\n maxlength=\\\"20\\\"\\n onlyNumbers\\n />\\n <nz-form-explain *ngIf=\\\"rqe.dirty && rqe.errors\\\">\\n <ng-container *ngIf=\\\"rqe.hasError('required')\\\">\\n Campo obrigatório, por favor informe o RQE da especialidade.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n </div>\\n </div>\\n <div class=\\\"col-12 pb-4\\\" *ngIf=\\\"specialtiesForm.length < 3\\\">\\n <button\\n (click)=\\\"addSpecialty()\\\"\\n class=\\\"btn btn-icon btn-success btn-add text-capitalize\\\"\\n type=\\\"button\\\"\\n >\\n <span class=\\\"btn-inner--text\\\">Adicionar Outra Especialidade</span>\\n <span class=\\\"btn-inner--icon\\\"><i class=\\\"fa fa-plus\\\"></i></span>\\n </button>\\n </div>\\n </ng-template>\\n </ng-container>\\n </div>\\n </div>\\n\\n <div class=\\\"col-md-5\\\" [@slideInOut] *ngIf=\\\"verifiedCpf\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"email\\\">E-mail<span class=\\\"mandatory\\\"> *</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n id=\\\"email\\\"\\n type=\\\"email\\\"\\n formControlName=\\\"email\\\"\\n placeholder=\\\"usuario@email.com\\\"\\n style=\\\"text-transform: lowercase;\\\"\\n (keydown.space)=\\\"$event.preventDefault()\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n <nz-form-explain *ngIf=\\\"form.get('email').dirty && form.get('email').errors\\\">\\n <ng-container *ngIf=\\\"form.get('email').hasError('required')\\\">\\n Campo obrigatório, por favor digite seu e-mail.\\n </ng-container>\\n <ng-container\\n *ngIf=\\\"!form.get('email').hasError('required') && form.get('email').hasError('email')\\\"\\n >\\n E-mail inválido, por favor digite um e-mail válido.\\n </ng-container>\\n <ng-container *ngIf=\\\"form.get('email').hasError('alreadyExists')\\\">\\n E-mail já cadastrado, por favor escolha outro e-mail.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"emailConfirmation\\\"\\n >Confirmação de e-mail<span class=\\\"mandatory\\\"> *</span>\\n </nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n id=\\\"emailConfirmation\\\"\\n type=\\\"email\\\"\\n formControlName=\\\"emailConfirmation\\\"\\n placeholder=\\\"usuario@email.com\\\"\\n style=\\\"text-transform: lowercase;\\\"\\n (keydown.space)=\\\"$event.preventDefault()\\\"\\n onpaste=\\\"false\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n <nz-form-explain>\\n <ng-container\\n *ngIf=\\\"\\n form.get('emailConfirmation').hasError('required') && form.get('emailConfirmation').dirty\\n \\\"\\n >\\n <span class=\\\"error\\\"> Campo obrigatório, por favor digite seu e-mail.</span><br />\\n </ng-container>\\n\\n <ng-container\\n *ngIf=\\\"\\n form.get('emailConfirmation').invalid && form.get('emailConfirmation').value.length > 0\\n \\\"\\n >\\n <span class=\\\"error\\\">E-mail inválido, por favor digite um e-mail válido.</span><br />\\n </ng-container>\\n <ng-container\\n *ngIf=\\\"\\n form.hasError('emailMatch') &&\\n form.get('email').dirty &&\\n form.get('email').value.length > 0 &&\\n form.get('emailConfirmation').dirty &&\\n form.get('emailConfirmation').value.length > 0\\n \\\"\\n >\\n <span class=\\\"error\\\">Os endereços de e-mail não correspondem.</span><br />\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n\\n <nz-form-item *ngIf=\\\"form.get('cellphone') as cellphone\\\">\\n <nz-form-label nzFor=\\\"cellphone\\\">Telefone 1 <span class=\\\"mandatory\\\">*</span></nz-form-label>\\n <nz-form-control>\\n <input\\n nz-input\\n id=\\\"cellphone\\\"\\n [mask]=\\\"cellphone.value.length <= 10 ? '(00) 0000-00009' : '(00) 00000-0000'\\\"\\n formControlName=\\\"cellphone\\\"\\n placeholder=\\\"(21) 92222-2222\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n <nz-form-explain *ngIf=\\\"cellphone.dirty && cellphone.errors\\\">\\n <ng-container *ngIf=\\\"cellphone.hasError('required')\\\">\\n Campo obrigatório, por favor digite seu telefone para contato.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"telephone\\\">Telefone 2</nz-form-label>\\n <nz-form-control>\\n <input\\n nz-input\\n id=\\\"telephone\\\"\\n [mask]=\\\"form.get('telephone').value.length <= 10 ? '(00) 0000-00009' : '(00) 00000-0000'\\\"\\n formControlName=\\\"telephone\\\"\\n placeholder=\\\"(21) 2222-2222\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n </div>\\n\\n <ng-container *ngIf=\\\"verifiedCpf && commercialForm?.controls.length\\\">\\n <ng-container formArrayName=\\\"commercialData\\\">\\n <div\\n *ngFor=\\\"let group of commercialForm.controls; let i = index\\\"\\n [@slideInOut]\\n [formGroup]=\\\"group\\\"\\n >\\n <div class=\\\"row justify-content-between\\\">\\n <div [ngClass]=\\\"commercialForm.length > 1 ? 'col-11' : 'col-12'\\\">\\n <nz-divider\\n nzOrientation=\\\"left\\\"\\n [nzText]=\\\"'Dados comerciais ' + (commercialForm.length > 1 ? i + 1 : '')\\\"\\n ></nz-divider>\\n </div>\\n <div\\n class=\\\"col-1 pl-0 d-flex align-items-center justify-content-center\\\"\\n *ngIf=\\\"commercialForm.length > 1\\\"\\n >\\n <a\\n (click)=\\\"$event.preventDefault()\\\"\\n [nzContent]=\\\"contentTemplateComercial\\\"\\n class=\\\"popover-trigger\\\"\\n nz-popover\\n nzPlacement=\\\"right\\\"\\n >\\n <i class=\\\"fa fa-ellipsis-solid\\\"></i>\\n </a>\\n <ng-template #contentTemplateComercial>\\n <a (click)=\\\"commercialForm.removeAt(i)\\\"><i class=\\\"fa fa-trash-solid\\\"></i></a>\\n </ng-template>\\n </div>\\n </div>\\n <div class=\\\"row mb-3 mt-3 justify-content-between\\\">\\n <div class=\\\"col-md-6\\\">\\n <div class=\\\"row align-items-center\\\">\\n <div class=\\\"col-12\\\">\\n <nz-form-item>\\n <nz-form-label [nzFor]=\\\"'nome_' + i\\\"\\n >Nome<span class=\\\"mandatory\\\"> *</span>\\n </nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n [id]=\\\"'nome_' + i\\\"\\n formControlName=\\\"name\\\"\\n nz-input\\n placeholder=\\\"ex: ClÃnica Dona Ana\\\"\\n maxlength=\\\"128\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n <nz-form-explain *ngIf=\\\"group.get('name').dirty && group.get('name').errors\\\">\\n <ng-container *ngIf=\\\"group.get('name').hasError('required')\\\">\\n Campo obrigatório, por favor digite o nome.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n <div class=\\\"col-12\\\">\\n <nz-form-item>\\n <nz-form-label [nzFor]=\\\"'email_' + i\\\">E-mail</nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n [id]=\\\"'email_' + i\\\"\\n formControlName=\\\"email\\\"\\n nz-input\\n placeholder=\\\"usuario@email.com\\\"\\n type=\\\"email\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n <nz-form-explain *ngIf=\\\"group.get('email').dirty && group.get('email').errors\\\">\\n <ng-container\\n *ngIf=\\\"\\n (!group.get('email').hasError('required') &&\\n group.get('email').hasError('email')) ||\\n group.get('email').invalid\\n \\\"\\n >\\n E-mail inválido, por favor digite um e-mail válido.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n </div>\\n </div>\\n <div class=\\\"col-md-5\\\">\\n <div class=\\\"row align-items-center\\\">\\n <div class=\\\"col-12\\\">\\n <nz-form-item>\\n <nz-form-label [nzFor]=\\\"'telephone_' + i\\\" class=\\\"mb-0\\\"\\n >Telefone 1 <span class=\\\"mandatory\\\">*</span>\\n <app-popover-button\\n content=\\\"Será exibido no cabeçalho dos documentos emitidos na plataforma\\\"\\n ></app-popover-button>\\n </nz-form-label>\\n <nz-form-control>\\n <input\\n [id]=\\\"'telephone_' + i\\\"\\n [mask]=\\\"\\n group.get('telephone').value.length <= 10 ? '(00) 0000-00009' : '(00) 00000-0000'\\n \\\"\\n formControlName=\\\"telephone\\\"\\n nz-input\\n placeholder=\\\"(21) 92222-2222\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n <nz-form-explain\\n *ngIf=\\\"group.get('telephone').dirty && group.get('telephone').errors\\\"\\n >\\n <ng-container *ngIf=\\\"group.get('telephone').hasError('required')\\\">\\n Campo obrigatório, por favor digite o telefone comercial.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n <div class=\\\"col-12\\\">\\n <nz-form-item>\\n <nz-form-label [nzFor]=\\\"'cellphone_' + i\\\">Telefone 2</nz-form-label>\\n <nz-form-control>\\n <input\\n [id]=\\\"'cellphone_' + i\\\"\\n [mask]=\\\"\\n group.get('cellphone').value.length <= 10 ? '(00) 0000-00009' : '(00) 00000-0000'\\n \\\"\\n formControlName=\\\"cellphone\\\"\\n nz-input\\n placeholder=\\\"(21) 2222-2222\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n </div>\\n </div>\\n <div\\n class=\\\"col-12 mt-3\\\"\\n *ngIf=\\\"group.get('address') as addressGroup\\\"\\n [formGroup]=\\\"addressGroup\\\"\\n >\\n <div class=\\\"row\\\">\\n <div class=\\\"col-md-3\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"cep\\\">CEP <span class=\\\"mandatory\\\">*</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n mask=\\\"00.000-000\\\"\\n formControlName=\\\"cep\\\"\\n id=\\\"cep\\\"\\n (keyup)=\\\"onKey($event, addressGroup)\\\"\\n nz-input\\n placeholder=\\\"00.000-000\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n <nz-form-explain\\n *ngIf=\\\"addressGroup.get('cep').dirty && addressGroup.get('cep').errors\\\"\\n >\\n <ng-container *ngIf=\\\"addressGroup.get('cep').hasError('required')\\\">\\n Campo obrigatório, por favor digite o cep.\\n </ng-container>\\n <ng-container\\n *ngIf=\\\"\\n !addressGroup.get('cep').hasError('required') &&\\n addressGroup.get('cep').hasError('cep')\\n \\\"\\n >\\n Cep inválido.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n <div class=\\\"col-md-6\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"street\\\"\\n >Logradouro<span class=\\\"mandatory\\\"> *</span></nz-form-label\\n >\\n <nz-form-control nzHasFeedback>\\n <input\\n id=\\\"street\\\"\\n formControlName=\\\"street\\\"\\n nz-input\\n placeholder=\\\"Digite o logradouro\\\"\\n maxlength=\\\"128\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n <nz-form-explain\\n *ngIf=\\\"addressGroup.get('street').dirty && addressGroup.get('street').errors\\\"\\n >\\n <ng-container *ngIf=\\\"addressGroup.get('street').hasError('required')\\\">\\n Campo obrigatório, por favor digite o logradouro.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n <div class=\\\"col-md-3\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"addressNumber\\\"\\n >Número<span class=\\\"mandatory\\\"> *</span></nz-form-label\\n >\\n <nz-form-control nzHasFeedback>\\n <input\\n formControlName=\\\"number\\\"\\n id=\\\"addressNumber\\\"\\n nz-input\\n placeholder=\\\"Digite o número\\\"\\n maxlength=\\\"10\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n <nz-form-explain\\n *ngIf=\\\"addressGroup.get('number').dirty && addressGroup.get('number').errors\\\"\\n >\\n <ng-container *ngIf=\\\"addressGroup.get('number').hasError('required')\\\">\\n Campo obrigatório, por favor digite o número.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n <div class=\\\"col-md-3\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"complement\\\">Complemento</nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n formControlName=\\\"complement\\\"\\n id=\\\"complement\\\"\\n nz-input\\n placeholder=\\\"Digite o complemento\\\"\\n maxlength=\\\"128\\\"\\n />\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n <div class=\\\"col-md-3\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"neighborhood\\\"\\n >Bairro<span class=\\\"mandatory\\\"> *</span></nz-form-label\\n >\\n <nz-form-control nzHasFeedback>\\n <input\\n formControlName=\\\"neighborhood\\\"\\n id=\\\"neighborhood\\\"\\n nz-input\\n placeholder=\\\"Digite o bairro\\\"\\n maxlength=\\\"128\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n <nz-form-explain\\n *ngIf=\\\"\\n addressGroup.get('neighborhood').dirty && addressGroup.get('neighborhood').errors\\n \\\"\\n >\\n <ng-container *ngIf=\\\"addressGroup.get('neighborhood').hasError('required')\\\">\\n Campo obrigatório, por favor digite o bairro.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n <div class=\\\"col-md-4\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"city\\\">Cidade <span class=\\\"mandatory\\\">*</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n formControlName=\\\"city\\\"\\n id=\\\"city\\\"\\n nz-input\\n placeholder=\\\"Digite a cidade\\\"\\n maxlength=\\\"64\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n <nz-form-explain\\n *ngIf=\\\"addressGroup.get('city').dirty && addressGroup.get('city').errors\\\"\\n >\\n <ng-container *ngIf=\\\"addressGroup.get('city').hasError('required')\\\">\\n Campo obrigatório, por favor digite a cidade.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n <div class=\\\"col-md-2\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"uf\\\">UF <span class=\\\"mandatory\\\">*</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <nz-select\\n formControlName=\\\"uf\\\"\\n id=\\\"uf\\\"\\n nzAllowClear\\n nzShowSearch\\n nzDropdownClassName=\\\"account-select\\\"\\n nzPlaceHolder=\\\"Selecione\\\"\\n >\\n <nz-option\\n *ngFor=\\\"let state of states\\\"\\n [nzLabel]=\\\"state?.sigla\\\"\\n [nzValue]=\\\"state?.sigla\\\"\\n ></nz-option>\\n </nz-select>\\n <nz-form-explain\\n *ngIf=\\\"addressGroup.get('uf').dirty && addressGroup.get('uf').errors\\\"\\n >\\n <ng-container *ngIf=\\\"addressGroup.get('uf').hasError('required')\\\">\\n Campo obrigatório, por favor selecione o UF.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n </div>\\n </div>\\n </div>\\n </div>\\n </ng-container>\\n <div class=\\\"row mb-3\\\">\\n <div class=\\\"col-10\\\">\\n <button\\n (click)=\\\"addComercial()\\\"\\n class=\\\"btn btn-icon btn-success btn-add text-capitalize\\\"\\n type=\\\"button\\\"\\n >\\n <span class=\\\"btn-inner--text\\\">Adicionar Dados Comerciais</span>\\n <span class=\\\"btn-inner--icon\\\"><i class=\\\"fa fa-plus\\\"></i></span>\\n </button>\\n </div>\\n </div>\\n </ng-container>\\n</form>\\n<ngx-loading [show]=\\\"loading\\\" [config]=\\\"{ backdropBorderRadius: '3px' }\\\"></ngx-loading>\\n\";","export default \".btn-add {\\n display: flex;\\n padding: 0 0 0 1.25rem;\\n height: 40px;\\n align-items: center;\\n border-radius: 10px;\\n overflow: hidden;\\n border: 0;\\n font-family: \\\"probold\\\", sans-serif;\\n background-color: var(--bg-color-secondary);\\n}\\n.btn-add .btn-inner--icon {\\n background-color: var(--bg-color-primary);\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n height: 40px;\\n width: 50px;\\n}\\n.popover-trigger {\\n padding: 8px;\\n color: #6f6f6f;\\n font-size: 16px;\\n margin-top: 16px;\\n}\\n.add-more,\\n::ng-deep .ant-divider-inner-text {\\n font-family: \\\"probold\\\", sans-serif;\\n}\\n.title {\\n text-transform: none;\\n font-size: 16px;\\n}\\n.title i:before {\\n margin-left: 0;\\n}\\n.avatar {\\n width: 128px;\\n height: 128px;\\n}\\n.upload-icon {\\n font-size: 32px;\\n color: #999;\\n}\\n.ant-upload-text {\\n margin-top: 8px;\\n color: #666;\\n}\\n::ng-deep .ant-upload {\\n display: inline-block;\\n overflow: hidden;\\n text-align: center;\\n vertical-align: middle;\\n box-shadow: 0 1px 20px 0 rgba(0, 0, 0, 0.1);\\n padding: 0;\\n}\\n::ng-deep .ant-upload img {\\n max-width: 250px;\\n}\\n::ng-deep .ant-upload .ant-uploader-container {\\n padding: 10px;\\n}\\n::ng-deep .ant-select-selection {\\n height: 100%;\\n}\\ninput::-webkit-input-placeholder {\\n color: #bdc2c7;\\n}\\n.mandatory {\\n color: red;\\n}\\n.error {\\n color: red;\\n}\\n.max-quantity {\\n font-size: 10px !important;\\n}\\n.ant-btn:hover,\\n.ant-btn:focus {\\n color: white;\\n background-color: #0b6054;\\n border-color: #0b6054;\\n}\";","import {\n Component,\n OnInit,\n Input,\n Output,\n EventEmitter,\n OnChanges,\n SimpleChange,\n SimpleChanges\n} from '@angular/core';\n\n@Component({\n selector: 'app-password-strength',\n templateUrl: './password-strength.component.html',\n styleUrls: ['./password-strength.component.scss']\n})\nexport class PasswordStrengthComponent implements OnChanges {\n @Input() password: string;\n @Output() isStrong = new EventEmitter<boolean>();\n\n bar0: string;\n bar1: string;\n bar2: string;\n bar3: string;\n bar4: string;\n\n msg = '';\n private colors = ['darkred', 'orangered', 'orange', 'yellowgreen'];\n\n ngOnChanges(changes: SimpleChanges) {\n const password = changes.password.currentValue;\n this.setBarColors(this.colors.length, '#DDD');\n\n if (password) {\n const pwdStrength = this.checkStrength(password);\n const c = this.getColor(pwdStrength);\n this.setBarColors(c.idx, c.col);\n\n this.isStrong.emit(pwdStrength >= 30);\n this.msg = this.getMessage(c.idx);\n } else {\n this.msg = '';\n }\n }\n\n private checkStrength(p: string) {\n const lowerLetters = /[a-z]+/.test(p);\n const upperLetters = /[A-Z]+/.test(p);\n const numbers = /[0-9]+/.test(p);\n const symbols = /[$-/:-?{-~!\"^_@`\\[\\]]/g.test(p);\n\n const flags = [lowerLetters, upperLetters, numbers, symbols];\n\n const passedMatches = flags.reduce((sum, item) => sum + +item, 0);\n\n let force = 0;\n force += 2 * p.length + +(p.length >= 10);\n force += passedMatches * 10;\n\n // short password\n force = p.length <= 6 ? Math.min(force, 10) : force;\n\n // poor variety of characters\n force = passedMatches === 1 ? Math.min(force, 10) : force;\n force = passedMatches === 2 ? Math.min(force, 20) : force;\n force = passedMatches === 3 ? Math.min(force, 30) : force;\n force = passedMatches === 4 ? Math.min(force, 40) : force;\n\n return force;\n }\n\n private getColor(force: number) {\n let idx = 0;\n if (force <= 10) {\n idx = 0;\n } else if (force <= 20) {\n idx = 1;\n } else if (force <= 30) {\n idx = 2;\n } else {\n idx = 3;\n }\n return {\n idx: idx + 1,\n col: this.colors[idx]\n };\n }\n\n private setBarColors(count: number, col: string) {\n for (let i = 0; i < count; i++) {\n this['bar' + i] = col;\n }\n }\n\n private getMessage(idx: number) {\n switch (idx) {\n case 1:\n return 'Muito fraca';\n case 2:\n return 'Fraca';\n case 3:\n return 'Média';\n case 4:\n return 'Forte';\n case 5:\n return 'Muito forte';\n }\n }\n}\n","export default \"<div class=\\\"strength\\\">\\n <ul class=\\\"strengthBar\\\">\\n <li class=\\\"point\\\" [style.background-color]=\\\"bar0\\\"></li>\\n <li class=\\\"point\\\" [style.background-color]=\\\"bar1\\\"></li>\\n <li class=\\\"point\\\" [style.background-color]=\\\"bar2\\\"></li>\\n <li class=\\\"point\\\" [style.background-color]=\\\"bar3\\\"></li>\\n </ul>\\n <br />\\n <p>{{ msg }}</p>\\n</div>\\n\";","export default \".strength {\\n margin: 0 auto;\\n text-align: center;\\n}\\n\\n.strengthBar {\\n display: inline;\\n list-style: none;\\n margin: 0;\\n padding: 0;\\n vertical-align: 2px;\\n}\\n\\n.point:last-of-type {\\n margin: 0 !important;\\n}\\n\\n.point {\\n background: #DDD;\\n border-radius: 2px;\\n display: inline-block;\\n height: 5px;\\n margin-right: 1px;\\n width: 62px;\\n}\\n\\np {\\n font-weight: bold;\\n font-size: 14px;\\n}\";","export default \"<div class=\\\"row justify-content-between\\\">\\n <div class=\\\"col-md-6\\\">\\n <form nz-form [formGroup]=\\\"cpfForm\\\" (ngSubmit)=\\\"searchCpf()\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"cpfResponsibleResp\\\" theme\\n >CPF do responsável <span class=\\\"mandatory\\\">*</span></nz-form-label\\n >\\n <div class=\\\"row\\\">\\n <div class=\\\"col-8\\\">\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n id=\\\"cpfResponsible\\\"\\n formControlName=\\\"cpf\\\"\\n placeholder=\\\"Digite o CPF\\\"\\n mask=\\\"000.000.000-00\\\"\\n theme\\n />\\n <nz-form-explain *ngIf=\\\"cpf.dirty && cpf.errors\\\">\\n <ng-container *ngIf=\\\"cpf.hasError('required')\\\">\\n Campo obrigatório.\\n </ng-container>\\n <ng-container *ngIf=\\\"!cpf.hasError('required') && cpf.hasError('cpf')\\\">\\n CPF inválido.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </div>\\n <div class=\\\"col-4 pt-1\\\">\\n <button nz-button class=\\\"btn-primary\\\" type=\\\"submit\\\" [disabled]=\\\"cpfForm.invalid\\\">\\n OK\\n </button>\\n </div>\\n </div>\\n </nz-form-item>\\n </form>\\n\\n <div *ngIf=\\\"consulted\\\" class=\\\"row\\\" [formGroup]=\\\"responsibleForm\\\">\\n <nz-form-item class=\\\"col-12\\\">\\n <nz-form-label nzFor=\\\"nameRespResp\\\" theme\\n >Nome completo <span class=\\\"mandatory\\\">*</span></nz-form-label\\n >\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n placeholder=\\\"Nome do Responsável\\\"\\n formControlName=\\\"fullname\\\"\\n id=\\\"nameResp\\\"\\n theme\\n />\\n <nz-form-explain\\n *ngIf=\\\"responsibleForm.get('fullname').dirty && responsibleForm.get('fullname').errors\\\"\\n >\\n <ng-container *ngIf=\\\"responsibleForm.get('fullname').hasError('required')\\\">\\n Campo obrigatório, por favor digite o nome e sobrenome do responsável.\\n </ng-container>\\n <ng-container\\n *ngIf=\\\"\\n !responsibleForm.get('fullname').hasError('required') &&\\n responsibleForm.get('fullname').hasError('nome')\\n \\\"\\n >\\n Por favor digite o seu nome e sobrenome.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n\\n <nz-form-item class=\\\"col-6\\\">\\n <nz-form-label nzFor=\\\"sexRespResp\\\" theme>Sexo<span class=\\\"mandatory\\\"> *</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <select formControlName=\\\"sex\\\" id=\\\"sexResp\\\" nz-input nzPlaceHolder=\\\"Selecione\\\" theme>\\n <option value=\\\"F\\\">Feminino</option>\\n <option value=\\\"M\\\" selected>Masculino</option>\\n </select>\\n <nz-form-explain *ngIf=\\\"responsibleForm.get('sex').dirty && responsibleForm.get('sex').errors\\\">\\n <ng-container *ngIf=\\\"responsibleForm.get('sex').hasError('required')\\\">\\n Campo obrigatório, por favor selecione o sexo.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n\\n <nz-form-item class=\\\"col-6\\\">\\n <nz-form-label nzFor=\\\"dateOfBirthRespResp\\\" theme\\n >Data de nascimento<span class=\\\"mandatory\\\"> *</span></nz-form-label\\n >\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n type=\\\"date\\\"\\n formControlName=\\\"dateOfBirth\\\"\\n placeholder=\\\"DD/MM/AAAA\\\"\\n [max]=\\\"currentDate\\\"\\n id=\\\"dateOfBirthResp\\\"\\n theme\\n />\\n\\n <nz-form-explain\\n *ngIf=\\\"responsibleForm.get('dateOfBirth').dirty && responsibleForm.get('dateOfBirth').errors\\\"\\n >\\n <ng-container *ngIf=\\\"responsibleForm.get('dateOfBirth').hasError('required')\\\">\\n Campo obrigatório, por favor digite sua data de nascimento.\\n </ng-container>\\n <ng-container\\n *ngIf=\\\"\\n !responsibleForm.get('dateOfBirth').hasError('required') &&\\n responsibleForm.get('dateOfBirth').hasError('dateOfBirth')\\n \\\"\\n >\\n Nome inválido.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n\\n <nz-form-item class=\\\"col-12\\\" [formGroup]=\\\"responsibleForm.get('membership')\\\" *ngIf=\\\"!hasAccount\\\">\\n <nz-form-label nzFor=\\\"mothersName\\\" theme\\n >Nome da mãe <span class=\\\"mandatory\\\">*</span></nz-form-label\\n >\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n placeholder=\\\"Digite o nome da mãe\\\"\\n formControlName=\\\"mothersName\\\"\\n id=\\\"mothersName\\\"\\n maxlength=\\\"128\\\"\\n theme\\n />\\n <nz-form-explain\\n *ngIf=\\\"\\n responsibleForm.get('membership.mothersName').dirty &&\\n responsibleForm.get('membership.mothersName').errors\\n \\\"\\n >\\n <ng-container *ngIf=\\\"responsibleForm.get('membership.mothersName').hasError('required')\\\">\\n Campo obrigatório, por favor digite o nome da mãe do responsável.\\n </ng-container>\\n <ng-container\\n *ngIf=\\\"\\n !responsibleForm.get('membership.mothersName').hasError('required') &&\\n responsibleForm.get('membership.mothersName').hasError('membership.mothersName')\\n \\\"\\n >\\n Nome inválido.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n </div>\\n\\n <div class=\\\"col-md-5\\\" [formGroup]=\\\"responsibleForm\\\" *ngIf=\\\"consulted\\\">\\n <nz-form-item>\\n <div class=\\\"row\\\">\\n <div class=\\\"col-md-6\\\">\\n <nz-form-label nzFor=\\\"name\\\" theme\\n >Nome de exibição/social <span class=\\\"mandatory\\\">*</span></nz-form-label\\n >\\n </div>\\n <div class=\\\"col-md-6\\\" *ngIf=\\\"!hasAccount\\\">\\n <label\\n #repeatName\\n nz-checkbox\\n (nzCheckedChange)=\\\"checkRepeatName($event)\\\"\\n style=\\\"font-size: 13px;margin-right: -11px;\\\"\\n theme\\n >Repetir nome completo</label\\n >\\n </div>\\n </div>\\n <nz-form-control>\\n <input nz-input formControlName=\\\"name\\\" id=\\\"name\\\" maxlength=\\\"128\\\" />\\n <nz-form-explain *ngIf=\\\"responsibleForm.get('name').dirty && responsibleForm.get('name').errors\\\">\\n <ng-container *ngIf=\\\"responsibleForm.get('name').hasError('required')\\\">\\n Por favor digite o seu nome de exibição\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n\\n <nz-form-item *ngIf=\\\"responsibleForm.get('cellphone') as cellphone\\\">\\n <nz-form-label nzFor=\\\"cellphone\\\" theme\\n >Telefone 1 <span class=\\\"mandatory\\\">*</span>\\n <!-- <app-popover-button\\n content=\\\"Será utilizado para receber receitas e demais documentos via WhatsApp e SMS\\\"\\n ></app-popover-button> -->\\n </nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n id=\\\"cellphone\\\"\\n [mask]=\\\"cellphone.value.length <= 10 ? '(00) 0000-00009' : '(00) 00000-0000'\\\"\\n formControlName=\\\"cellphone\\\"\\n theme\\n />\\n <nz-form-explain *ngIf=\\\"cellphone.dirty && cellphone.errors\\\">\\n <ng-container *ngIf=\\\"cellphone.hasError('required')\\\">\\n Campo obrigatório, por favor digite seu telefone para contato.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n\\n <nz-form-item *ngIf=\\\"!hasAccount && responsibleForm.get('telephone') as telephone\\\">\\n <nz-form-label nzFor=\\\"telephone\\\" theme>Telefone 2</nz-form-label>\\n <nz-form-control>\\n <input\\n nz-input\\n id=\\\"telephone\\\"\\n [mask]=\\\"telephone.value.length <= 10 ? '(00) 0000-00009' : '(00) 00000-0000'\\\"\\n formControlName=\\\"telephone\\\"\\n theme\\n />\\n <nz-form-explain *ngIf=\\\"telephone.dirty && telephone.errors\\\">\\n <ng-container *ngIf=\\\"telephone.hasError('telephone')\\\">\\n Telefone inválido, por favor digite um número válido.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n\\n <nz-form-item>\\n <div class=\\\"row\\\">\\n <div class=\\\"col-5\\\">\\n <nz-form-label nzFor=\\\"emailResp\\\" theme>E-mail <span class=\\\"mandatory\\\">*</span></nz-form-label>\\n </div>\\n <div class=\\\"col\\\">\\n <label\\n *ngIf=\\\"!responsibleForm.get('_id').value\\\"\\n nz-checkbox\\n (nzCheckedChange)=\\\"checkEmail($event)\\\"\\n >Não cadastrar e-mail\\n </label>\\n </div>\\n </div>\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n type=\\\"email\\\"\\n autocomplete=\\\"new-email\\\"\\n formControlName=\\\"email\\\"\\n id=\\\"emailResp\\\"\\n style=\\\"text-transform: lowercase;\\\"\\n (keydown.space)=\\\"$event.preventDefault()\\\"\\n theme\\n />\\n <nz-form-explain\\n *ngIf=\\\"responsibleForm.get('email').dirty && responsibleForm.get('email').errors\\\"\\n >\\n <ng-container *ngIf=\\\"responsibleForm.get('email').hasError('required')\\\">\\n Campo obrigatório, por favor digite seu e-mail.\\n </ng-container>\\n <ng-container\\n *ngIf=\\\"\\n (!responsibleForm.get('email').hasError('required') &&\\n responsibleForm.get('email').hasError('email')) ||\\n responsibleForm.get('email').invalid\\n \\\"\\n >\\n E-mail inválido, por favor digite um e-mail válido.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n\\n <ng-container *ngIf=\\\"consulted\\\" [@slideInOut]>\\n <nz-divider nzOrientation=\\\"left\\\" nzText=\\\"Endereço\\\"></nz-divider>\\n\\n <div class=\\\"col-md-12\\\" *ngIf=\\\"responsibleForm.get('address')\\\">\\n <div class=\\\"row\\\" [formGroup]=\\\"responsibleForm.get('address')\\\">\\n <div class=\\\"col-md-3\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"cep\\\">CEP<span class=\\\"mandatory\\\"> *</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n (keyup)=\\\"onKey($event)\\\"\\n formControlName=\\\"cep\\\"\\n id=\\\"cep\\\"\\n nz-input\\n placeholder=\\\"00.000-000\\\"\\n mask=\\\"00.000-000\\\"\\n />\\n <nz-form-explain\\n *ngIf=\\\"\\n responsibleForm.get('address.cep').dirty && responsibleForm.get('address.cep').errors\\n \\\"\\n >\\n <ng-container *ngIf=\\\"responsibleForm.get('address.cep').hasError('required')\\\">\\n Campo obrigatório, por favor digite seu CEP.\\n </ng-container>\\n <ng-container\\n *ngIf=\\\"\\n !responsibleForm.get('address.cep').hasError('required') &&\\n responsibleForm.get('address.cep').hasError('address.cep')\\n \\\"\\n >\\n CEP inválido, por favor digite um CEP válido.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n\\n <div class=\\\"col-md-6\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"logradouro\\\">Logradouro<span class=\\\"mandatory\\\"> *</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n formControlName=\\\"street\\\"\\n id=\\\"street\\\"\\n nz-input\\n placeholder=\\\"Digite o logradouro\\\"\\n maxlength=\\\"128\\\"\\n />\\n <nz-form-explain\\n *ngIf=\\\"\\n responsibleForm.get('address.street').dirty &&\\n responsibleForm.get('address.street').errors\\n \\\"\\n >\\n <ng-container *ngIf=\\\"responsibleForm.get('address.street').hasError('required')\\\">\\n Campo obrigatório, por favor digite o logradouro.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n\\n <div class=\\\"col-12 col-md-3\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"number\\\">Número<span class=\\\"mandatory\\\"> *</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n formControlName=\\\"number\\\"\\n id=\\\"number\\\"\\n nz-input\\n placeholder=\\\"Digite o número\\\"\\n maxlength=\\\"10\\\"\\n />\\n <nz-form-explain\\n *ngIf=\\\"\\n responsibleForm.get('address.number').dirty &&\\n responsibleForm.get('address.number').errors\\n \\\"\\n >\\n <ng-container *ngIf=\\\"responsibleForm.get('address.number').hasError('required')\\\">\\n Campo obrigatório, por favor digite o número.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n\\n <div class=\\\"col-12 col-md-3\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"complement\\\">Complemento</nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n formControlName=\\\"complement\\\"\\n id=\\\"complement\\\"\\n nz-input\\n placeholder=\\\"Digite o complemento\\\"\\n maxlength=\\\"128\\\"\\n />\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n\\n <div class=\\\"col-12 col-md-3\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"neighborhood\\\">Bairro<span class=\\\"mandatory\\\"> *</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n formControlName=\\\"neighborhood\\\"\\n id=\\\"neighborhood\\\"\\n nz-input\\n placeholder=\\\"Digite o bairro\\\"\\n maxlength=\\\"128\\\"\\n />\\n <nz-form-explain\\n *ngIf=\\\"\\n responsibleForm.get('address.neighborhood').dirty &&\\n responsibleForm.get('address.neighborhood').errors\\n \\\"\\n >\\n <ng-container *ngIf=\\\"responsibleForm.get('address.neighborhood').hasError('required')\\\">\\n Campo obrigatório, por favor digite o bairro.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n\\n <div class=\\\"col-12 col-md-4\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"city\\\">Cidade<span class=\\\"mandatory\\\"> *</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n formControlName=\\\"city\\\"\\n id=\\\"city\\\"\\n nz-input\\n placeholder=\\\"Digite a cidade\\\"\\n maxlength=\\\"64\\\"\\n />\\n <nz-form-explain\\n *ngIf=\\\"\\n responsibleForm.get('address.city').dirty && responsibleForm.get('address.city').errors\\n \\\"\\n >\\n <ng-container *ngIf=\\\"responsibleForm.get('address.city').hasError('required')\\\">\\n Campo obrigatório, por favor digite a cidade.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n\\n <div class=\\\"col-12 col-md-2\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"uf\\\">UF<span class=\\\"mandatory\\\"> *</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <select\\n id=\\\"uf\\\"\\n formControlName=\\\"uf\\\"\\n nz-input\\n nzAllowClear\\n nzShowSearch\\n nzPlaceHolder=\\\"Selecione\\\"\\n >\\n <option *ngFor=\\\"let state of states\\\" [value]=\\\"state?.sigla\\\">{{ state?.sigla }}</option>\\n </select>\\n <nz-form-explain\\n *ngIf=\\\"\\n responsibleForm.get('address.uf').dirty && responsibleForm.get('address.uf').errors\\n \\\"\\n >\\n <ng-container *ngIf=\\\"responsibleForm.get('address.uf').hasError('required')\\\">\\n Campo obrigatório, por favor selecione o UF.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n </div>\\n </div>\\n </ng-container>\\n</div>\\n<ngx-loading [show]=\\\"loading\\\" [config]=\\\"{ backdropBorderRadius: '3px' }\\\"></ngx-loading>\\n\";","import { animate, group, state, style, transition, trigger } from '@angular/animations';\nimport { Component, EventEmitter, OnInit, Output, ViewChild } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { AuthService } from '@app/core/services/auth.service';\nimport { ValidationService } from '@app/core/services/validation.service';\nimport { CepService } from '@app/modules/entry/services/cep.service';\nimport { HealthProfessionalService } from '@app/modules/health-professional/services/health-professional.service';\nimport { PatientsService } from '@app/modules/patients/services/patients.service';\nimport { BrazilianStates } from '@app/shared/data/Brazilian-states';\nimport { nativeAsync } from '@app/shared/decorators/nativeAsync';\nimport { BrazilState, Patient } from '@app/shared/models';\nimport { User } from '@app/shared/models/decodedLoginToken';\nimport { DataBigboostConsult } from '@app/shared/models/paciente';\nimport { BigboostService } from '@app/shared/services/bigboost.service';\n\n@Component({\n selector: 'app-responsible-form',\n templateUrl: './responsible-form.component.html',\n styleUrls: ['./responsible-form.component.scss'],\n animations: [\n trigger('slideInOut', [\n state('in', style({ height: '*', opacity: 0 })),\n transition(':leave', [\n style({ height: '*', opacity: 1 }),\n group([animate(300, style({ height: 0 })), animate('400ms ease-in-out', style({ opacity: 0 }))])\n ]),\n transition(':enter', [\n style({ height: 0, opacity: 0 }),\n group([\n animate(300, style({ height: '*' })),\n animate('400ms ease-in-out', style({ opacity: 1 }))\n ])\n ])\n ])\n ]\n})\nexport class ResponsibleFormComponent implements OnInit {\n @Output() formChange = new EventEmitter<FormGroup>();\n\n cpfForm: FormGroup;\n responsibleForm: FormGroup;\n loading = false;\n consulted = false;\n states: BrazilState[] = BrazilianStates;\n\n @ViewChild('repeatName')\n private repeatNameCheckbox: any;\n\n constructor(\n private fb: FormBuilder,\n private authService: AuthService,\n private healthProfessionalService: HealthProfessionalService,\n private patientService: PatientsService,\n private bigboostService: BigboostService,\n private cepService: CepService\n ) {}\n\n ngOnInit() {\n this.initForm();\n this.formChange.emit(this.responsibleForm);\n }\n\n get user(): User {\n return this.authService.user();\n }\n\n private initForm() {\n this.cpfForm = this.fb.group({\n cpf: ['', [Validators.required, ValidationService.cpfValidator]]\n });\n\n this.responsibleForm = this.fb.group({\n _id: [null],\n name: ['', [Validators.required, ValidationService.nomeValidator]],\n fullname: ['', [Validators.required, ValidationService.nomeValidator]],\n cpf: ['', [Validators.required, ValidationService.cpfValidator]],\n cellphone: ['', Validators.required],\n telephone: [''],\n email: ['', [Validators.required, Validators.email]],\n dateOfBirth: [null, Validators.required],\n sex: ['', Validators.required],\n membership: this.fb.group({\n mothersName: ['', Validators.required]\n }),\n address: this.fb.group({\n uf: ['', Validators.required],\n city: ['', Validators.required],\n complement: [''],\n number: ['', Validators.required],\n street: ['', Validators.required],\n neighborhood: ['', Validators.required],\n cep: ['', [Validators.required, ValidationService.cepValidator]]\n }),\n pendency: [null]\n });\n\n this.responsibleForm.get('fullname').valueChanges.subscribe(fullname => {\n if (this.repeatNameCheckbox && this.repeatNameCheckbox.nzChecked) {\n if (!fullname) {\n this.repeatNameCheckbox.nzChecked = false;\n this.responsibleForm.get('name').enable();\n }\n this.responsibleForm.get('name').setValue(fullname);\n }\n });\n\n this.responsibleForm.get('email').valueChanges.subscribe(email => {\n if (email) {\n this.responsibleForm.get('email').setValue(email.toLowerCase(), { emitEvent: false });\n }\n });\n }\n\n get cpf() {\n return this.cpfForm.get('cpf');\n }\n\n get currentDate() {\n const now = new Date();\n const dd = String(now.getDate()).padStart(2, '0');\n const mm = String(now.getMonth() + 1).padStart(2, '0');\n const yyyy = now.getFullYear();\n return `${yyyy}-${mm}-${dd}`;\n }\n\n get hasAccount(): boolean {\n return !!this.responsibleForm.value._id;\n }\n\n checkEmail(value: boolean) {\n if (value) {\n this.responsibleForm.get('email').disable();\n } else {\n this.responsibleForm.get('email').enable();\n }\n }\n\n @nativeAsync\n async searchCpf() {\n try {\n const cpf = this.cpf.value;\n\n this.loading = true;\n let patient = await this.hasPatient(cpf);\n this.consulted = true;\n\n this.responsibleForm.disable();\n if (!patient) {\n patient = await this.getPatient(cpf);\n }\n\n if (patient) {\n this.patchForm(patient);\n } else {\n const consult = await this.consultCpf(cpf);\n if (consult.status === 1) {\n this.patchFormConsult(consult);\n } else {\n this.responsibleForm.enable();\n this.responsibleForm.get('pendency').setValue(consult);\n }\n }\n\n if (this.hasAccount) {\n this.responsibleForm.get('email').disable();\n } else if (this.responsibleForm.disabled) {\n this.responsibleForm.enable();\n this.disableForm();\n }\n } catch (err) {\n console.error(err);\n }\n this.loading = false;\n }\n\n checkRepeatName(value: boolean) {\n if (value) {\n this.responsibleForm.get('name').setValue(this.responsibleForm.get('fullname').value);\n this.responsibleForm.get('name').disable();\n } else {\n this.responsibleForm.get('name').enable();\n }\n }\n\n private patchForm(patient: Patient) {\n this.responsibleForm.patchValue(patient);\n const date = new Date(patient.dateOfBirth);\n this.responsibleForm.get('dateOfBirth').setValue(date.toISOString().substring(0, 10));\n if (patient.user) {\n this.responsibleForm.get('email').setValue(patient.user.email);\n }\n if (!patient.fullname) {\n this.responsibleForm.get('fullname').setValue(patient.name);\n }\n }\n\n private patchFormConsult(consult: DataBigboostConsult) {\n this.responsibleForm.get('_id').setValue(null);\n this.responsibleForm.get('name').setValue(consult.nome);\n this.responsibleForm.get('fullname').setValue(consult.nome);\n this.responsibleForm.get('cpf').setValue(consult.cpf);\n this.responsibleForm.get('sex').setValue(consult.genero);\n this.responsibleForm.get('membership.mothersName').setValue(consult.mae);\n this.responsibleForm.get('email').setValue('');\n this.responsibleForm.get('cellphone').setValue('');\n this.responsibleForm.get('telephone').setValue('');\n this.responsibleForm.get('pendency').setValue(null);\n const date = consult.nascimento.split('/');\n const dateOfBirth = new Date(`${date[1]}/${date[0]}/${date[2]}`);\n this.responsibleForm.get('dateOfBirth').setValue(dateOfBirth.toISOString().substring(0, 10));\n }\n\n private disableForm() {\n this.responsibleForm.get('fullname').disable();\n this.responsibleForm.get('cpf').disable();\n this.responsibleForm.get('sex').disable();\n this.responsibleForm.get('membership.mothersName').disable();\n this.responsibleForm.get('dateOfBirth').disable();\n }\n\n @nativeAsync\n private async hasPatient(cpf: string) {\n const result = await this.healthProfessionalService\n .getPatientsByUserId(cpf, this.user._id)\n .toPromise();\n return result.length ? result[0] : null;\n }\n\n @nativeAsync\n private async getPatient(cpf: string) {\n try {\n return await this.patientService.getPatientByCpf(cpf).toPromise();\n } catch (err) {\n return null;\n }\n }\n\n @nativeAsync\n private async consultCpf(cpf: string) {\n try {\n return await this.bigboostService.consultCpf(cpf).toPromise();\n } catch (err) {\n console.error(err);\n const consult = {\n status: -1,\n cpf,\n erroCodigo: err.status,\n erro: 'A importação de dados do cpf está com instabilidade'\n };\n return consult;\n }\n }\n\n @nativeAsync\n async onKey(event: any) {\n if (event.target.value.length === 10) {\n const cep = event.target.value.replace(/[^\\d]+/g, '');\n const data = await this.cepService.consult(cep);\n if (!data.erro) {\n this.responsibleForm.controls['address'].setValue({\n uf: data.uf,\n street: data.logradouro,\n neighborhood: data.bairro,\n city: data.localidade,\n number: null,\n cep: data.cep\n });\n }\n }\n }\n}\n","export default \".mandatory {\\n color: red;\\n}\\n\\n.ant-btn:hover,\\n.ant-btn:focus {\\n color: white;\\n background-color: #0b6054;\\n border-color: #0b6054;\\n}\";","export default \"<form nz-form [formGroup]=\\\"form\\\" theme>\\n <div class=\\\"row justify-content-between\\\">\\n <div class=\\\"col-md-6\\\">\\n <div class=\\\"row\\\">\\n <h2 class=\\\"col-md-12 bold tipografy-h2\\\" theme>PACIENTE MENOR DE IDADE</h2>\\n <nz-form-item class=\\\"col-md-12\\\">\\n <nz-form-label nzFor=\\\"nome\\\">Nome completo<span class=\\\"mandatory\\\"> *</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n placeholder=\\\"ex: João Gilberto\\\"\\n formControlName=\\\"fullname\\\"\\n id=\\\"nome\\\"\\n maxlength=\\\"128\\\"\\n theme\\n />\\n <nz-form-explain *ngIf=\\\"form.get('fullname').dirty && form.get('fullname').errors\\\">\\n <ng-container *ngIf=\\\"form.get('fullname').hasError('required')\\\">\\n Campo obrigatório, por favor digite o nome e sobrenome.\\n </ng-container>\\n <ng-container\\n *ngIf=\\\"\\n !form.get('fullname').hasError('required') && form.get('fullname').hasError('nome')\\n \\\"\\n >\\n Por favor digite o nome e sobrenome.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n <nz-form-item class=\\\"col-md-6\\\" *ngIf=\\\"!hideCpf\\\">\\n <nz-form-label nzFor=\\\"cpf\\\" theme>CPF<span class=\\\"mandatory\\\"> *</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n placeholder=\\\"000.000.000-00\\\"\\n mask=\\\"000.000.000-00\\\"\\n formControlName=\\\"cpf\\\"\\n id=\\\"cpf\\\"\\n theme\\n />\\n <nz-form-explain *ngIf=\\\"form.get('cpf').dirty && form.get('cpf').errors\\\">\\n <ng-container *ngIf=\\\"form.get('cpf').hasError('required')\\\">\\n Campo obrigatório, por favor digite o CPF.\\n </ng-container>\\n <ng-container\\n *ngIf=\\\"!form.get('cpf').hasError('required') && form.get('cpf').hasError('cpf')\\\"\\n >\\n CPF inválido, por favor digite um CPF válido.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n\\n <nz-form-item class=\\\"col-md\\\">\\n <nz-form-label nzFor=\\\"dateOfBirth\\\" theme\\n >Data de nascimento<span class=\\\"mandatory\\\"> *</span></nz-form-label\\n >\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n type=\\\"date\\\"\\n formControlName=\\\"dateOfBirth\\\"\\n placeholder=\\\"DD/MM/AAAA\\\"\\n [max]=\\\"currentDate\\\"\\n id=\\\"dateOfBirth\\\"\\n theme\\n />\\n\\n <nz-form-explain *ngIf=\\\"form.get('dateOfBirth').dirty && form.get('dateOfBirth').errors\\\">\\n <ng-container *ngIf=\\\"form.get('dateOfBirth').hasError('required')\\\">\\n Campo obrigatório, por favor digite data de nascimento.\\n </ng-container>\\n <ng-container\\n *ngIf=\\\"\\n !form.get('dateOfBirth').hasError('required') &&\\n form.get('dateOfBirth').hasError('dateOfBirth')\\n \\\"\\n >\\n Nome inválido.\\n </ng-container>\\n <ng-container\\n *ngIf=\\\"\\n !form.get('dateOfBirth').hasError('required') &&\\n form.get('dateOfBirth').hasError('isNotMinor')\\n \\\"\\n >\\n Dependente deve ser menor de idade.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n\\n <nz-form-item class=\\\"col-md-12\\\" [formGroup]=\\\"form.get('membership')\\\">\\n <div class=\\\"row\\\">\\n <div class=\\\"col-4\\\">\\n <nz-form-label nzFor=\\\"mothersName\\\" theme\\n >Nome da mãe<span class=\\\"mandatory\\\"> *</span></nz-form-label\\n >\\n </div>\\n <div class=\\\"col\\\" *ngIf=\\\"mothersName\\\">\\n <label\\n #responsibleName\\n nz-checkbox\\n (nzCheckedChange)=\\\"checkMothersName($event)\\\"\\n style=\\\"font-size: 14px;\\\"\\n theme\\n >Repetir nome do responsável</label\\n >\\n </div>\\n </div>\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n placeholder=\\\"Digite o nome da mãe\\\"\\n formControlName=\\\"mothersName\\\"\\n id=\\\"mothersName\\\"\\n maxlength=\\\"128\\\"\\n theme\\n />\\n <nz-form-explain\\n *ngIf=\\\"\\n form.get('membership.mothersName').dirty && form.get('membership.mothersName').errors\\n \\\"\\n >\\n <ng-container *ngIf=\\\"form.get('membership.mothersName').hasError('required')\\\">\\n Campo obrigatório, por favor digite o nome da mãe.\\n </ng-container>\\n <ng-container\\n *ngIf=\\\"\\n !form.get('membership.mothersName').hasError('required') &&\\n form.get('membership.mothersName').hasError('membership.mothersName')\\n \\\"\\n >\\n Nome inválido.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n </div>\\n\\n <div class=\\\"col-md-6\\\">\\n <div class=\\\"row\\\">\\n <nz-form-item class=\\\"col-md-12 display-name\\\">\\n <div class=\\\"row\\\">\\n <div class=\\\"col-md-6\\\">\\n <nz-form-label nzFor=\\\"name\\\" theme\\n >Nome de exibição/social <span class=\\\"mandatory\\\">*</span></nz-form-label\\n >\\n </div>\\n <div class=\\\"col-md-6\\\">\\n <label\\n theme\\n #repeatName\\n nz-checkbox\\n (nzCheckedChange)=\\\"checkRepeatName($event)\\\"\\n style=\\\"font-size: 13px; margin-right: -11px;\\\"\\n >Repetir nome completo\\n </label>\\n </div>\\n </div>\\n <nz-form-control>\\n <input nz-input formControlName=\\\"name\\\" id=\\\"name\\\" maxlength=\\\"128\\\" theme />\\n <nz-form-explain *ngIf=\\\"form.get('name').dirty && form.get('name').errors\\\">\\n <ng-container *ngIf=\\\"form.get('name').hasError('required')\\\">\\n Por favor digite o nome de exibição\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n <nz-form-item class=\\\"col-6\\\">\\n <nz-form-label nzFor=\\\"sex\\\" theme>Sexo<span class=\\\"mandatory\\\"> *</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <select formControlName=\\\"sex\\\" id=\\\"sex\\\" nz-input nzPlaceHolder=\\\"Selecione\\\" theme>\\n <option value=\\\"M\\\">Masculino</option>\\n <option value=\\\"F\\\">Feminino</option>\\n </select>\\n <nz-form-explain *ngIf=\\\"form.get('sex').dirty && form.get('sex').errors\\\">\\n <ng-container *ngIf=\\\"form.get('sex').hasError('required')\\\">\\n Campo obrigatório, por favor selecione o sexo.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n </div>\\n\\n <nz-divider nzOrientation=\\\"left\\\" *ngIf=\\\"!hideCpf\\\"></nz-divider>\\n\\n <app-responsible-form\\n *ngIf=\\\"!hideCpf\\\"\\n class=\\\"col-md-12\\\"\\n (formChange)=\\\"addResponsibleForm($event)\\\"\\n ></app-responsible-form>\\n </div>\\n</form>\\n\";","import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\nimport { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';\nimport { ValidationService } from '@app/core/services/validation.service';\nimport { DataBigboostConsult } from '@app/shared/models/paciente';\nimport { AppToastService } from '@app/shared/services/app-toast.service';\n\n@Component({\n selector: 'app-underage-patient-form',\n templateUrl: './underage-patient-form.component.html',\n styleUrls: ['./underage-patient-form.component.scss']\n})\nexport class UnderagePatientFormComponent implements OnInit {\n @Input() mothersName: string;\n @Input() patient: DataBigboostConsult;\n @Input() hideCpf = false;\n @Output() formChange = new EventEmitter<FormGroup>();\n\n @ViewChild('repeatName', { static: true })\n repeatNameCheckbox: any;\n\n form = this.fb.group({\n name: ['', [Validators.required, ValidationService.nomeValidator]],\n fullname: ['', [Validators.required, ValidationService.nomeValidator]],\n sex: ['', Validators.required],\n dateOfBirth: [null, [Validators.required, UnderagePatientFormComponent.validateUnderAge]],\n membership: this.fb.group({\n mothersName: ['', Validators.required]\n }),\n pendency: [null],\n verifiedCpf: [false]\n });\n\n static validateUnderAge(control: FormControl): { [key: string]: boolean } | null {\n const birthdate = new Date(control.value);\n const diffDate = Date.now() - birthdate.getTime();\n const ageDate = new Date(diffDate);\n const years = Math.abs(ageDate.getUTCFullYear() - 1970);\n if (years >= 18) {\n return { isNotMinor: true };\n }\n\n return null;\n }\n\n constructor(private fb: FormBuilder, private notification: AppToastService) {}\n\n ngOnInit() {\n this.initForm();\n if (this.patient) {\n this.handleConsultCpf(this.patient);\n }\n this.formChange.emit(this.form);\n }\n\n private initForm() {\n if (!this.hideCpf) {\n this.form.addControl(\n 'cpf',\n this.fb.control('', [Validators.required, ValidationService.cpfValidator])\n );\n }\n\n this.form.get('fullname').valueChanges.subscribe(fullname => {\n if (this.repeatNameCheckbox && this.repeatNameCheckbox.nzChecked) {\n if (!fullname) {\n this.repeatNameCheckbox.nzChecked = false;\n this.form.get('name').enable();\n }\n this.form.get('name').setValue(fullname);\n }\n });\n }\n\n private handleConsultCpf(consult: DataBigboostConsult) {\n if (consult.status === 1) {\n this.form.get('pendency').setValue(null);\n this.setForm(consult);\n this.disableForm();\n } else {\n this.form.get('pendency').setValue(consult);\n if (consult.erro) {\n this.notification.notify('warning', 'Aviso', consult.erro);\n }\n }\n }\n\n private setForm(consult: DataBigboostConsult) {\n this.form.get('name').setValue(consult.nome);\n this.form.get('fullname').setValue(consult.nome);\n this.form.get('cpf').setValue(consult.cpf);\n this.form.get('sex').setValue(consult.genero);\n this.form.get('membership.mothersName').setValue(consult.mae);\n const date = consult.nascimento.split('/');\n const dateOfBirth = new Date(`${date[1]}/${date[0]}/${date[2]}`);\n this.form.get('dateOfBirth').setValue(dateOfBirth.toISOString().substring(0, 10));\n }\n\n private disableForm() {\n this.form.get('fullname').disable();\n this.form.get('cpf').disable();\n this.form.get('sex').disable();\n this.form.get('membership.mothersName').disable();\n this.form.get('dateOfBirth').disable();\n }\n\n get currentDate() {\n const now = new Date();\n const dd = String(now.getDate()).padStart(2, '0');\n const mm = String(now.getMonth() + 1).padStart(2, '0');\n const yyyy = now.getFullYear();\n return `${yyyy}-${mm}-${dd}`;\n }\n\n checkRepeatName(value: boolean) {\n if (value) {\n this.form.get('name').setValue(this.form.get('fullname').value);\n this.form.get('name').disable();\n } else {\n this.form.get('name').enable();\n }\n }\n\n checkMothersName(value: boolean) {\n if (value) {\n this.form.get('membership.mothersName').setValue(this.mothersName);\n this.form.get('membership.mothersName').disable();\n } else {\n this.form.get('membership.mothersName').enable();\n }\n }\n\n addResponsibleForm(responsibleForm: FormGroup) {\n this.form.addControl('responsible', responsibleForm);\n }\n}\n","export default \"input::-webkit-input-placeholder {\\n color: #bdc2c7;\\n}\\n\\ninput::-webkit-input-placeholder {\\n color: #bdc2c7;\\n}\\n\\n.mandatory {\\n color: red;\\n}\\n\\nh2 {\\n font-family: \\\"probold\\\", sans-serif;\\n font-size: 18px;\\n color: var(--color-label-input);\\n}\\n\\n.display-name {\\n margin-top: 36px;\\n}\";","import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { AuthService } from '@app/core/services/auth.service';\nimport { ValidationService } from '@app/core/services/validation.service';\nimport { CepService } from '@app/modules/entry/services/cep.service';\nimport { HealthProfessionalService } from '@app/modules/health-professional/services/health-professional.service';\nimport { PatientsService } from '@app/modules/patients/services/patients.service';\nimport { BrazilianStates } from '@app/shared/data/Brazilian-states';\nimport { nativeAsync } from '@app/shared/decorators/nativeAsync';\nimport { BrazilState, HealthProfessional, Patient } from '@app/shared/models';\nimport { User } from '@app/shared/models/decodedLoginToken';\nimport { DataBigboostConsult } from '@app/shared/models/paciente';\n\n@Component({\n selector: 'app-responsible-patient-form',\n templateUrl: './responsible-patient-form.component.html',\n styleUrls: ['./responsible-patient-form.component.scss']\n})\nexport class ResponsiblePatientFormComponent implements OnInit {\n @Input() prescriber: HealthProfessional;\n @Input() patient: DataBigboostConsult;\n @Input() registeredByResponsible: boolean;\n @Output() formChange = new EventEmitter<FormGroup>();\n @Output() updateList = new EventEmitter<any>();\n\n @ViewChild('repeatName', { static: true })\n repeatNameCheckbox: any;\n\n loading = false;\n states: BrazilState[] = BrazilianStates;\n dependents: Patient[];\n showDependentForm = false;\n private patientsCache = new Map<string, boolean>();\n\n private _form = this.fb.group({\n responsible: this.fb.group(\n {\n _id: [null],\n name: ['', [Validators.required, ValidationService.nomeValidator]],\n fullname: ['', [Validators.required, ValidationService.nomeValidator]],\n cpf: ['', Validators.required],\n sex: ['', Validators.required],\n dateOfBirth: [null, Validators.required],\n cellphone: ['', Validators.required],\n telephone: [''],\n email: ['', [Validators.required, Validators.email]],\n emailConfirmation: ['', [Validators.required, Validators.email]],\n membership: this.fb.group({\n mothersName: ['']\n }),\n address: this.fb.group({\n uf: ['', Validators.required],\n city: ['', Validators.required],\n complement: [''],\n number: ['', Validators.required],\n street: ['', Validators.required],\n neighborhood: ['', Validators.required],\n cep: ['', [Validators.required, ValidationService.cepValidator]]\n }),\n pendency: [null]\n },\n { validator: ValidationService.emailMatch }\n )\n });\n\n constructor(\n private fb: FormBuilder,\n private cepService: CepService,\n private authService: AuthService,\n private patientsService: PatientsService,\n private healthProfessionalService: HealthProfessionalService\n ) {}\n\n @nativeAsync\n async ngOnInit() {\n this.loading = true;\n this.initForm();\n const patient = await this.getPatientByCpf();\n if (patient) {\n this.patchForm(patient);\n this.dependents = patient.dependents;\n this.showDependentForm = !this.dependents.length;\n this.dependents.forEach(({ _id }) => this.cacheDependentId(_id));\n } else {\n this.setForm(this.patient);\n }\n\n if (this.hasAccount) {\n this.disableForm();\n }\n this.formChange.emit(this._form);\n this.loading = false;\n }\n\n get user(): User {\n return this.authService.user();\n }\n\n get form() {\n return <FormGroup>this._form.get('responsible');\n }\n\n private initForm() {\n this.form.get('fullname').valueChanges.subscribe(fullname => {\n if (this.repeatNameCheckbox && this.repeatNameCheckbox.nzChecked) {\n if (!fullname) {\n this.repeatNameCheckbox.nzChecked = false;\n this.form.get('name').enable();\n }\n this.form.get('name').setValue(fullname);\n }\n });\n }\n\n private patchForm(patient: Patient) {\n this.form.patchValue(patient);\n if (patient.user) {\n this.form.get('email').setValue(patient.user.email);\n }\n const date = new Date(patient.dateOfBirth);\n this.form.get('dateOfBirth').setValue(date.toISOString().substring(0, 10));\n if (!patient.fullname) {\n this.form.get('fullname').setValue(patient.name);\n }\n }\n\n private setForm(consult: DataBigboostConsult) {\n if (consult.status === 1) {\n this.form.get('cpf').setValue(consult.cpf);\n this.form.get('fullname').setValue(consult.nome);\n this.form.get('sex').setValue(consult.genero);\n this.form.get('membership.mothersName').setValue(consult.mae);\n const date = consult.nascimento.split('/');\n const dateOfBirth = new Date(`${date[1]}/${date[0]}/${date[2]}`);\n this.form.get('dateOfBirth').setValue(dateOfBirth.toISOString().substring(0, 10));\n\n this.form.get('cpf').disable();\n this.form.get('fullname').disable();\n this.form.get('dateOfBirth').disable();\n this.form.get('sex').disable();\n } else {\n this.form.get('pendency').setValue(consult);\n }\n }\n\n private disableForm() {\n this.form.get('name').disable();\n this.form.get('fullname').disable();\n this.form.get('cpf').disable();\n this.form.get('dateOfBirth').disable();\n this.form.get('sex').disable();\n\n // remove required\n this.form.setValidators(null);\n this.form.get('email').setValidators([Validators.email]);\n this.form.get('emailConfirmation').setValidators([Validators.email]);\n this.form.get('name').clearValidators();\n this.form.get('fullname').clearValidators();\n this.form.get('cpf').clearValidators();\n this.form.get('dateOfBirth').clearValidators();\n this.form.get('sex').clearValidators();\n }\n\n @nativeAsync\n private async getPatientByCpf() {\n try {\n return await this.patientsService.getPatientByCpf(this.patient.cpf).toPromise();\n } catch (_) {\n return null;\n }\n }\n\n get hasAccount() {\n return !!this.form.get('_id').value;\n }\n\n get currentDate() {\n const now = new Date();\n const dd = String(now.getDate()).padStart(2, '0');\n const mm = String(now.getMonth() + 1).padStart(2, '0');\n const yyyy = now.getFullYear();\n return `${yyyy}-${mm}-${dd}`;\n }\n\n checkRepeatName(value: boolean) {\n if (value) {\n this.form.get('name').setValue(this.form.get('fullname').value);\n this.form.get('name').disable();\n } else {\n this.form.get('name').enable();\n }\n }\n\n checkEmail(disable: boolean) {\n if (disable) {\n this.form.get('email').reset();\n this.form.get('email').disable();\n } else {\n this.form.get('email').enable();\n }\n }\n\n @nativeAsync\n async onKey(event: any) {\n if (event.target.value.length === 10) {\n const cep = event.target.value.replace(/[^\\d]+/g, '');\n const data = await this.cepService.consult(cep);\n if (!data.erro) {\n this.form.controls['address'].patchValue({\n uf: data.uf,\n street: data.logradouro,\n neighborhood: data.bairro,\n city: data.localidade,\n number: null,\n cep: data.cep\n });\n }\n }\n }\n\n addUnderageForm(form: FormGroup) {\n Object.keys(form.controls).forEach(key => {\n const control = form.controls[key];\n this._form.addControl(key, control);\n });\n }\n\n addPatient(patient: Patient) {\n this.healthProfessionalService.addPatient(this.prescriber._id, patient._id).subscribe(_ => {\n this.cacheDependentId(patient._id);\n this.updateList.emit();\n });\n }\n\n removePatient(patient: Patient) {\n this.healthProfessionalService.removePatient(this.prescriber._id, patient._id).subscribe(_ => {\n this.cacheDependentId(patient._id);\n this.updateList.emit();\n });\n }\n\n hasDependent(patient: Patient) {\n return this.patientsCache.get(patient._id);\n }\n\n private cacheDependentId(id: string) {\n this.healthProfessionalService.getPatientsById(id, this.user._id).subscribe(\n p => this.patientsCache.set(id, true),\n err => {\n if (err.status === 404) {\n this.patientsCache.set(id, false);\n } else {\n console.error(err);\n }\n }\n );\n }\n}\n","export default \"<form nz-form [formGroup]=\\\"form\\\" theme>\\n <div class=\\\"row justify-content-between\\\">\\n <div class=\\\"col-md-6\\\">\\n <div class=\\\"row\\\">\\n <h2 class=\\\"col-md-12 bold\\\">DADOS DO RESPONSÃVEL</h2>\\n <div class=\\\"col-md-12\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"fullname\\\"\\n >Nome completo <span class=\\\"mandatory\\\">*</span></nz-form-label\\n >\\n <nz-form-control nzHasFeedback>\\n <input\\n formControlName=\\\"fullname\\\"\\n id=\\\"fullname\\\"\\n nz-input\\n placeholder=\\\"ex: João Gilberto\\\"\\n maxlength=\\\"128\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n <nz-form-explain *ngIf=\\\"form.get('fullname').dirty && form.get('fullname').errors\\\">\\n <ng-container *ngIf=\\\"form.get('fullname').hasError('required')\\\">\\n Campo obrigatório, por favor digite o seu nome e sobrenome.\\n </ng-container>\\n <ng-container\\n *ngIf=\\\"\\n !form.get('fullname').hasError('required') &&\\n form.get('fullname').hasError('fullname')\\n \\\"\\n >\\n Por favor digite o seu nome e sobrenome.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n\\n <div class=\\\"col-md\\\">\\n <nz-form-item *ngIf=\\\"form.get('cpf') as cpfCtrl\\\">\\n <nz-form-label nzFor=\\\"cpf\\\">CPF <span class=\\\"mandatory\\\">*</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n id=\\\"cpf\\\"\\n formControlName=\\\"cpf\\\"\\n placeholder=\\\"000.000.000-00\\\"\\n mask=\\\"000.000.000-00\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n <nz-form-explain *ngIf=\\\"cpfCtrl.dirty && cpfCtrl.errors\\\">\\n <ng-container *ngIf=\\\"cpfCtrl.hasError('required')\\\">\\n Campo obrigatório, por favor digite seu CPF.\\n </ng-container>\\n <ng-container *ngIf=\\\"!cpfCtrl.hasError('required') && cpfCtrl.hasError('cpf')\\\">\\n CPF inválido, por favor digite um CPF válido.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n\\n <div class=\\\"col-md\\\">\\n <nz-form-item *ngIf=\\\"form.get('dateOfBirth') as dateCtrl\\\">\\n <nz-form-label nzFor=\\\"dateOfBirth\\\"\\n >Data de nascimento<span class=\\\"mandatory\\\"> *</span></nz-form-label\\n >\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n id=\\\"dateOfBirth\\\"\\n type=\\\"date\\\"\\n formControlName=\\\"dateOfBirth\\\"\\n placeholder=\\\"DD/MM/AAAA\\\"\\n [max]=\\\"currentDate\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n\\n <nz-form-explain *ngIf=\\\"dateCtrl.dirty && dateCtrl.errors\\\">\\n <ng-container *ngIf=\\\"dateCtrl.hasError('required')\\\">\\n Campo obrigatório, por favor digite sua data de nascimento.\\n </ng-container>\\n <ng-container *ngIf=\\\"!dateCtrl.hasError('required') && dateCtrl.hasError('dateOfBirth')\\\">\\n Nome inválido.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n\\n <nz-form-item class=\\\"col-6\\\" *ngIf=\\\"!hasAccount\\\">\\n <nz-form-label nzFor=\\\"sex\\\">Sexo <span class=\\\"mandatory\\\">*</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <select formControlName=\\\"sex\\\" id=\\\"sex\\\" nz-input nzPlaceHolder=\\\"Selecione\\\">\\n <option value=\\\"M\\\">Masculino</option>\\n <option value=\\\"F\\\">Feminino</option>\\n </select>\\n <nz-form-explain *ngIf=\\\"form.get('sex').dirty && form.get('sex').errors\\\">\\n <ng-container *ngIf=\\\"form.get('sex').hasError('required')\\\">\\n Campo obrigatório, por favor selecione o sexo.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n\\n <div class=\\\"col-12\\\" [formGroup]=\\\"form.get('membership')\\\" *ngIf=\\\"!hasAccount\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"mothersName\\\"\\n >Nome da mãe<span class=\\\"mandatory\\\"> *</span></nz-form-label\\n >\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n placeholder=\\\"Digite o nome da mãe\\\"\\n formControlName=\\\"mothersName\\\"\\n id=\\\"mothersName\\\"\\n maxlength=\\\"128\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n <nz-form-explain\\n *ngIf=\\\"\\n form.get('membership.mothersName').dirty && form.get('membership.mothersName').errors\\n \\\"\\n >\\n <ng-container *ngIf=\\\"form.get('membership.mothersName').hasError('required')\\\">\\n Campo obrigatório, por favor digite o nome da mãe.\\n </ng-container>\\n <ng-container\\n *ngIf=\\\"\\n !form.get('membership.mothersName').hasError('required') &&\\n form.get('membership.mothersName').hasError('membership.mothersName')\\n \\\"\\n >\\n Nome inválido.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n </div>\\n </div>\\n\\n <div class=\\\"col-md-6\\\">\\n <nz-form-item class=\\\"display-name\\\">\\n <div class=\\\"row\\\">\\n <div class=\\\"col-md-6\\\">\\n <nz-form-label nzFor=\\\"name\\\" style=\\\"margin-left: 0px;\\\"\\n >Nome de exibição/social<span class=\\\"mandatory\\\">*</span></nz-form-label\\n >\\n </div>\\n\\n <div class=\\\"col-md-6\\\" *ngIf=\\\"!hasAccount\\\">\\n <label\\n #repeatName\\n nz-checkbox\\n (nzCheckedChange)=\\\"checkRepeatName($event)\\\"\\n style=\\\"font-size: 13px; margin-right: -11px;\\\"\\n >Repetir nome completo</label\\n >\\n </div>\\n </div>\\n\\n <nz-form-control nzHasFeedback>\\n <input\\n formControlName=\\\"name\\\"\\n id=\\\"name\\\"\\n nz-input\\n placeholder=\\\"ex: João Gilberto\\\"\\n maxlength=\\\"128\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n <nz-form-explain *ngIf=\\\"form.get('name').dirty && form.get('name').errors\\\">\\n <ng-container *ngIf=\\\"form.get('name').hasError('required')\\\">\\n Campo obrigatório, por favor digite um nome de exibição.\\n </ng-container>\\n <ng-container\\n *ngIf=\\\"!form.get('name').hasError('required') && form.get('name').hasError('name')\\\"\\n >\\n Por favor digite um nome de exibição.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n\\n <div class=\\\"row\\\">\\n <nz-form-item class=\\\"col-6\\\" *ngIf=\\\"hasAccount\\\">\\n <nz-form-label nzFor=\\\"sex\\\">Sexo <span class=\\\"mandatory\\\">*</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <select formControlName=\\\"sex\\\" id=\\\"sex\\\" nz-input nzPlaceHolder=\\\"Selecione\\\">\\n <option value=\\\"M\\\">Masculino</option>\\n <option value=\\\"F\\\">Feminino</option>\\n </select>\\n <nz-form-explain *ngIf=\\\"form.get('sex').dirty && form.get('sex').errors\\\">\\n <ng-container *ngIf=\\\"form.get('sex').hasError('required')\\\">\\n Campo obrigatório, por favor selecione o sexo.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n\\n <ng-container *ngIf=\\\"!hasAccount\\\">\\n <nz-form-item *ngIf=\\\"form.get('cellphone') as cellphone\\\">\\n <nz-form-label nzFor=\\\"cellphone\\\"\\n >Telefone 1 <span class=\\\"mandatory\\\">*</span>\\n <!-- <app-popover-button\\n content=\\\"Será utilizado para receber receitas e demais documentos via WhatsApp e SMS\\\"\\n ></app-popover-button> -->\\n </nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n id=\\\"cellphone\\\"\\n [mask]=\\\"cellphone.value.length <= 10 ? '(00) 0000-00009' : '(00) 00000-0000'\\\"\\n placeholder=\\\"(21) 92222-2222\\\"\\n formControlName=\\\"cellphone\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n <nz-form-explain *ngIf=\\\"cellphone.dirty && cellphone.errors\\\">\\n <ng-container *ngIf=\\\"cellphone.hasError('required')\\\">\\n Campo obrigatório, por favor digite seu telefone para contato.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n\\n <nz-form-item *ngIf=\\\"form.get('telephone') as telephone\\\">\\n <nz-form-label nzFor=\\\"telephone\\\">Telefone 2</nz-form-label>\\n <nz-form-control>\\n <input\\n nz-input\\n id=\\\"telephone\\\"\\n [mask]=\\\"telephone.value.length <= 10 ? '(00) 0000-00009' : '(00) 00000-0000'\\\"\\n formControlName=\\\"telephone\\\"\\n placeholder=\\\"(21) 2222-2222\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n <nz-form-explain *ngIf=\\\"telephone.dirty && telephone.errors\\\">\\n <ng-container *ngIf=\\\"telephone.hasError('telephone')\\\">\\n Telefone inválido, por favor digite um número válido.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n\\n <nz-form-item>\\n <div class=\\\"row\\\">\\n <div class=\\\"col-5\\\">\\n <nz-form-label nzFor=\\\"email\\\">E-mail <span class=\\\"mandatory\\\">*</span></nz-form-label>\\n </div>\\n <div class=\\\"col\\\" *ngIf=\\\"!registeredByResponsible\\\">\\n <label nz-checkbox (nzCheckedChange)=\\\"checkEmail($event)\\\" style=\\\"font-size: 13px;\\\"\\n >Não cadastrar e-mail</label\\n >\\n </div>\\n </div>\\n <nz-form-control nzHasFeedback *ngIf=\\\"form.get('email') as email\\\">\\n <input\\n nz-input\\n id=\\\"email\\\"\\n type=\\\"email\\\"\\n formControlName=\\\"email\\\"\\n placeholder=\\\"usuario@email.com\\\"\\n style=\\\"text-transform: lowercase;\\\"\\n (keydown.space)=\\\"$event.preventDefault()\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n <nz-form-explain *ngIf=\\\"email.touched && email.errors\\\">\\n <ng-container *ngIf=\\\"email.hasError('exists'); else required\\\">\\n E-mail já existe, por favor escolha outro e-mail.\\n </ng-container>\\n <ng-template #required>\\n <ng-container *ngIf=\\\"email.hasError('required') && email.dirty; else invalid\\\">\\n <span class=\\\"error\\\">Campo obrigatório, por favor digite seu e-mail.</span>\\n </ng-container>\\n </ng-template>\\n <ng-template #invalid>\\n <ng-container *ngIf=\\\"email.invalid && email.value.length > 0\\\">\\n <span class=\\\"error\\\">E-mail inválido, por favor digite um e-mail válido.</span>\\n </ng-container>\\n </ng-template>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"emailConfirmation\\\"\\n >Confirmação de e-mail<span class=\\\"mandatory\\\"> *</span>\\n </nz-form-label>\\n <nz-form-control nzHasFeedback *ngIf=\\\"form.get('emailConfirmation') as emailConfirmation\\\">\\n <input\\n nz-input\\n id=\\\"emailConfirmation\\\"\\n type=\\\"email\\\"\\n formControlName=\\\"emailConfirmation\\\"\\n placeholder=\\\"usuario@email.com\\\"\\n style=\\\"text-transform: lowercase;\\\"\\n (keydown.space)=\\\"$event.preventDefault()\\\"\\n onpaste=\\\"false\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n <nz-form-explain>\\n <ng-container *ngIf=\\\"emailConfirmation.hasError('required') && emailConfirmation.dirty\\\">\\n <span class=\\\"error\\\"> Campo obrigatório, por favor digite seu e-mail.</span><br />\\n </ng-container>\\n\\n <nz-form-explain>\\n <ng-container *ngIf=\\\"emailConfirmation.hasError('required') && emailConfirmation.dirty\\\">\\n <span class=\\\"error\\\"> Campo obrigatório, por favor digite seu e-mail.</span><br />\\n </ng-container>\\n\\n <ng-container *ngIf=\\\"emailConfirmation.invalid && emailConfirmation.value.length > 0\\\">\\n <span class=\\\"error\\\">E-mail inválido, por favor digite um e-mail válido.</span><br />\\n </ng-container>\\n\\n <ng-container\\n *ngIf=\\\"\\n form.hasError('emailMatch') &&\\n form.get('email').dirty &&\\n form.get('email').value.length > 0 &&\\n emailConfirmation.dirty &&\\n emailConfirmation.value.length > 0\\n \\\"\\n >\\n <span class=\\\"error\\\">Os endereços de e-mail não correspondem</span><br />\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </ng-container>\\n </div>\\n\\n <!-- <nz-form-explain>\\n <ng-container *ngIf=\\\"pharmacistForm.get('emailConfirmation').hasError('required')\\n && pharmacistForm.get('emailConfirmation').dirty\\\">\\n <span class=\\\"error\\\"> Campo obrigatório, por favor digite seu e-mail.</span><br/>\\n </ng-container>\\n\\n <ng-container *ngIf=\\\"pharmacistForm.get('emailConfirmation').invalid\\n && pharmacistForm.get('emailConfirmation').value.length > 0\\\">\\n <span class=\\\"error\\\">E-mail inválido, por favor digite um e-mail válido.</span><br/>\\n </ng-container>\\n\\n <ng-container *ngIf=\\\"pharmacistForm.hasError('emailMatch')\\n && pharmacistForm.get('email').dirty\\n && pharmacistForm.get('email').value.length > 0\\n && pharmacistForm.get('emailConfirmation').dirty\\n && pharmacistForm.get('emailConfirmation').value.length > 0\\n \\\">\\n <span class=\\\"error\\\">Os endereços de e-mail não correspondem</span><br/>\\n </ng-container>\\n\\n </nz-form-explain> -->\\n\\n <nz-divider nzOrientation=\\\"left\\\" nzText=\\\"Endereço\\\" *ngIf=\\\"!hasAccount\\\"></nz-divider>\\n\\n <div class=\\\"col-md-12\\\" *ngIf=\\\"!hasAccount\\\">\\n <div class=\\\"row\\\" [formGroup]=\\\"form.get('address')\\\">\\n <div class=\\\"col-md-3\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"cep\\\">CEP<span class=\\\"mandatory\\\"> *</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n (keyup)=\\\"onKey($event)\\\"\\n mask=\\\"00.000-000\\\"\\n formControlName=\\\"cep\\\"\\n id=\\\"cep\\\"\\n nz-input\\n placeholder=\\\"00.000-000\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n <nz-form-explain *ngIf=\\\"form.get('address.cep').dirty && form.get('address.cep').errors\\\">\\n <ng-container *ngIf=\\\"form.get('address.cep').hasError('required')\\\">\\n Campo obrigatório, por favor digite seu CEP.\\n </ng-container>\\n <ng-container\\n *ngIf=\\\"\\n !form.get('address.cep').hasError('required') &&\\n form.get('address.cep').hasError('address.cep')\\n \\\"\\n >\\n CEP inválido, por favor digite um CEP válido.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n\\n <div class=\\\"col-md-6\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"logradouro\\\">Logradouro<span class=\\\"mandatory\\\"> *</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n formControlName=\\\"street\\\"\\n id=\\\"street\\\"\\n nz-input\\n placeholder=\\\"Digite o logradouro\\\"\\n maxlength=\\\"128\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n <nz-form-explain\\n *ngIf=\\\"form.get('address.street').dirty && form.get('address.street').errors\\\"\\n >\\n <ng-container *ngIf=\\\"form.get('address.street').hasError('required')\\\">\\n Campo obrigatório, por favor digite o logradouro.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n\\n <div class=\\\"col-12 col-md-3\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"number\\\">Número<span class=\\\"mandatory\\\"> *</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n formControlName=\\\"number\\\"\\n id=\\\"number\\\"\\n nz-input\\n placeholder=\\\"Digite o número\\\"\\n maxlength=\\\"10\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n <nz-form-explain\\n *ngIf=\\\"form.get('address.number').dirty && form.get('address.number').errors\\\"\\n >\\n <ng-container *ngIf=\\\"form.get('address.number').hasError('required')\\\">\\n Campo obrigatório, por favor digite o número.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n\\n <div class=\\\"col-12 col-md-3\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"complement\\\">Complemento</nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n formControlName=\\\"complement\\\"\\n id=\\\"complement\\\"\\n nz-input\\n placeholder=\\\"Digite o complemento\\\"\\n maxlength=\\\"128\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n\\n <div class=\\\"col-12 col-md-3\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"neighborhood\\\">Bairro<span class=\\\"mandatory\\\"> *</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n formControlName=\\\"neighborhood\\\"\\n id=\\\"neighborhood\\\"\\n nz-input\\n placeholder=\\\"Digite o bairro\\\"\\n maxlength=\\\"128\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n <nz-form-explain\\n *ngIf=\\\"form.get('address.neighborhood').dirty && form.get('address.neighborhood').errors\\\"\\n >\\n <ng-container *ngIf=\\\"form.get('address.neighborhood').hasError('required')\\\">\\n Campo obrigatório, por favor digite o bairro.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n\\n <div class=\\\"col-12 col-md-4\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"city\\\">Cidade<span class=\\\"mandatory\\\"> *</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n formControlName=\\\"city\\\"\\n id=\\\"city\\\"\\n nz-input\\n placeholder=\\\"Digite a cidade\\\"\\n maxlength=\\\"64\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n <nz-form-explain *ngIf=\\\"form.get('address.city').dirty && form.get('address.city').errors\\\">\\n <ng-container *ngIf=\\\"form.get('address.city').hasError('required')\\\">\\n Campo obrigatório, por favor digite a cidade.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n\\n <div class=\\\"col-12 col-md-2\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"uf\\\">UF<span class=\\\"mandatory\\\"> *</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <select\\n id=\\\"uf\\\"\\n formControlName=\\\"uf\\\"\\n nz-input\\n nzAllowClear\\n nzShowSearch\\n nzPlaceHolder=\\\"Selecione\\\"\\n >\\n <option *ngFor=\\\"let state of states\\\" [value]=\\\"state?.sigla\\\">{{ state?.sigla }}</option>\\n </select>\\n <nz-form-explain *ngIf=\\\"form.get('address.uf').dirty && form.get('address.uf').errors\\\">\\n <ng-container *ngIf=\\\"form.get('address.uf').hasError('required')\\\">\\n Campo obrigatório, por favor selecione o UF.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n </div>\\n </div>\\n\\n <ng-container *ngIf=\\\"dependents?.length\\\">\\n <nz-divider nzOrientation=\\\"left\\\"></nz-divider>\\n <h2 class=\\\"col-md-12 bold\\\">DEPENDENTES</h2>\\n <ul>\\n <li *ngFor=\\\"let dependent of dependents\\\">\\n {{ dependent.name }}\\n <button\\n *ngIf=\\\"!hasDependent(dependent)\\\"\\n (click)=\\\"addPatient(dependent)\\\"\\n title=\\\"Adicionar paciente\\\"\\n class=\\\"btn-icon mr-0 p-0\\\"\\n >\\n <i class=\\\"fa fa-plus\\\"></i>\\n </button>\\n <button\\n *ngIf=\\\"hasDependent(dependent)\\\"\\n (click)=\\\"removePatient(dependent)\\\"\\n title=\\\"Remover paciente\\\"\\n class=\\\"btn-icon mr-0 p-0\\\"\\n >\\n <i class=\\\"fa fa-trash-solid\\\"></i>\\n </button>\\n </li>\\n </ul>\\n </ng-container>\\n\\n <nz-divider nzOrientation=\\\"left\\\"></nz-divider>\\n\\n <ng-container *ngIf=\\\"!loading\\\">\\n <app-add-button\\n *ngIf=\\\"hasAccount && !showDependentForm\\\"\\n class=\\\"col\\\"\\n label=\\\"Adicionar dependente\\\"\\n (click)=\\\"showDependentForm = true\\\"\\n ></app-add-button>\\n\\n <app-underage-patient-form\\n *ngIf=\\\"!hasAccount || showDependentForm\\\"\\n class=\\\"col-md-12\\\"\\n [hideCpf]=\\\"true\\\"\\n [mothersName]=\\\"form.get('fullname').value\\\"\\n (formChange)=\\\"addUnderageForm($event)\\\"\\n ></app-underage-patient-form>\\n </ng-container>\\n </div>\\n</form>\\n<ngx-loading [show]=\\\"loading\\\" [config]=\\\"{ backdropBorderRadius: '3px' }\\\"></ngx-loading>\\n\";","export default \"input::-webkit-input-placeholder {\\n color: #bdc2c7;\\n}\\n\\ninput::-webkit-input-placeholder {\\n color: #bdc2c7;\\n}\\n\\n.mandatory {\\n color: red;\\n}\\n\\n.error {\\n color: red;\\n}\\n\\nh2 {\\n font-family: \\\"probold\\\", sans-serif;\\n font-size: 18px;\\n color: var(--color-label-input);\\n}\\n\\n.display-name {\\n margin-top: 36px;\\n}\\n\\n.btn-icon {\\n padding: 5px;\\n margin: 0 0 5px 5px;\\n border: 0;\\n box-shadow: none;\\n background-color: transparent;\\n}\";","import { NgModule } from '@angular/core';\n\nimport { EntryRoutingModule } from '@app/modules/entry/entry-routing.module';\nimport { LoginComponent } from '@app/modules/entry/pages/login/login.component';\nimport { RegisterComponent } from '@app/modules/entry/pages/register/register.component';\nimport { SharedModule } from '@app/shared';\nimport { AccountTypeComponent } from '@app/modules/entry/pages/register/account-type.component';\nimport { WelcomeComponent } from '@app/modules/entry/pages/welcome/welcome.component';\nimport { ResetPasswordComponent } from '@app/modules/entry/pages/reset-password/reset-password.component';\nimport { PatientFormComponent } from '@app/modules/entry/pages/register/patient-form/patient-form.component';\nimport { PharmacyFormComponent } from '@app/modules/entry/pages/register/pharmacy-form/pharmacy-form.component';\nimport { ChangePasswordComponent } from '@app/modules/entry/pages/change-password/change-password.component';\nimport { NgxMaskModule } from 'ngx-mask';\nimport { NzDatePickerModule } from 'ng-zorro-antd/date-picker';\nimport { NzModalModule } from 'ng-zorro-antd/modal';\nimport { TermsAndConditionsComponent } from './pages/register/terms-and-conditions/terms-and-conditions.component';\nimport { ActivateAccountComponent } from './pages/activate-account/activate-account.component';\nimport { NgxLoadingModule } from 'ngx-loading';\nimport { ModalTermsAndConditionsComponent } from './pages/register/modal-terms-and-conditions/modal-terms-and-conditions.component';\nimport { HealthProfessionalFormComponent } from './pages/register/health-professional-form/health-professional-form.component';\nimport { PasswordStrengthComponent } from './pages/password-strength/password-strength.component';\nimport { PharmacyOptionComponent } from './pages/pharmacy-option/pharmacy-option.component';\nimport { ResponsibleFormComponent } from './pages/register/underage-patient-form/responsible-form/responsible-form.component';\nimport { UnderagePatientFormComponent } from './pages/register/underage-patient-form/underage-patient-form.component';\nimport { ResponsiblePatientFormComponent } from './pages/register/responsible-patient-form/responsible-patient-form.component';\n\n@NgModule({\n imports: [\n SharedModule,\n EntryRoutingModule,\n NzDatePickerModule,\n NzModalModule,\n NgxLoadingModule,\n NgxMaskModule.forRoot()\n ],\n declarations: [\n LoginComponent,\n RegisterComponent,\n AccountTypeComponent,\n WelcomeComponent,\n ResetPasswordComponent,\n PatientFormComponent,\n PharmacyFormComponent,\n ChangePasswordComponent,\n TermsAndConditionsComponent,\n ActivateAccountComponent,\n ModalTermsAndConditionsComponent,\n HealthProfessionalFormComponent,\n PasswordStrengthComponent,\n PharmacyOptionComponent,\n ResponsibleFormComponent,\n UnderagePatientFormComponent,\n ResponsiblePatientFormComponent\n ],\n exports: [PatientFormComponent, UnderagePatientFormComponent, ResponsiblePatientFormComponent]\n})\nexport class EntryModule {}\n","import { Component } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { AuthService } from '@app/core/services/auth.service';\nimport { AppToastService } from '@app/shared/services/app-toast.service';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { PrescriptionService } from '../../../modules/document/services/prescription.service';\nimport { User } from './../../models/decodedLoginToken';\nimport { nativeAsync } from '@app/shared/decorators/nativeAsync';\n\n@Component({\n selector: 'app-modal-search',\n templateUrl: './modal-search.component.html',\n styleUrls: ['./modal-search.component.scss']\n})\nexport class ModalSearchComponent {\n constructor(\n private router: Router,\n public modalRef: BsModalRef,\n private notification: AppToastService,\n private prescriptionService: PrescriptionService,\n private authService: AuthService\n ) {}\n\n get user(): User {\n return this.authService.user();\n }\n\n get hasFarmaRennovaFeature(): boolean {\n return this.user && this.user.features.some(f => f.name === 'Farma Rennova');\n }\n\n @nativeAsync\n async search(param: string) {\n param = param === undefined ? '' : param.replace(/[^a-z0-9]+/gi, '');\n if (param === '') {\n this.modalRef.hide();\n this.notification.notify('warning', 'Atenção', 'CPF ou Código da Receita não informado');\n } else if (param.length === 11 || param.length === 15) {\n if (param.length === 15 && !this.hasFarmaRennovaFeature && param.substring(0, 3) === 'REN') {\n this.notification.notify('warning', 'Atenção', 'Código informado inválido');\n } else {\n await this.requests(param);\n }\n } else {\n this.modalRef.hide();\n this.notification.notify('warning', 'Atenção', 'CPF ou código inválido');\n }\n }\n\n @nativeAsync\n private async requests(param: string) {\n try {\n const prescriptions = await this.prescriptionService.getPrescriptionsPatient(param).toPromise();\n\n if (param.length === 11) {\n if (prescriptions.length === 0) {\n this.notification.notify(\n 'warning',\n 'Atenção',\n 'Não existe prescrições com medicamentos a serem dispensados para o CPF informado'\n );\n return;\n }\n\n this.router.navigate(['/document/listing-prescriptions/', param], {\n state: { prescriptions: prescriptions }\n });\n } else {\n this.router.navigate(['/document/confirmation', param], {\n state: { prescription: prescriptions }\n });\n }\n this.modalRef.hide();\n } catch (error) {\n this.modalRef.hide();\n if (error.status === 404) {\n this.notification.notify('warning', 'Atenção', error.error.message);\n }\n }\n }\n}\n","export default \"<div class=\\\"modal-header\\\">\\n <h4 class=\\\"modal-title pull-left text-white\\\">Buscar receita</h4>\\n <button type=\\\"button\\\" class=\\\"close pull-right\\\" aria-label=\\\"Close\\\" (click)=\\\"modalRef.hide()\\\">\\n <span aria-hidden=\\\"true\\\">×</span>\\n </button>\\n</div>\\n<form (submit)=\\\"search(param.value)\\\">\\n <div class=\\\"modal-body\\\">\\n <p>Digite abaixo o CPF (apenas números) do paciente ou o código da receita</p>\\n <input nz-input #param theme />\\n <label>\\n <i class=\\\"fa fa-arrow-right\\\" (click)=\\\"search(param.value)\\\"></i>\\n </label>\\n </div>\\n</form>\\n\";","export default \".modal-header {\\n background-color: #4cbca3;\\n font-family: \\\"probold\\\";\\n}\\n\\n.modal-body {\\n padding: 0px;\\n height: 170px;\\n display: flex;\\n align-items: center;\\n flex-direction: column;\\n justify-content: center;\\n}\\n\\n.modal-body input {\\n width: 265px;\\n height: 35px;\\n}\\n\\n.modal-body label {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n position: relative;\\n z-index: 1;\\n right: -118px;\\n top: -28px;\\n font-size: 15px;\\n margin: 0px;\\n width: 30px;\\n}\\n\\n.modal-body label i {\\n cursor: pointer;\\n}\\n\\np {\\n color: #363636;\\n font-size: 20px;\\n font-family: \\\"prolight\\\";\\n text-align: center;\\n}\";","export function nativeAsync(target, method, descriptor) {\n const originalMethod = target[method];\n descriptor.value = function() {\n return Promise.resolve(originalMethod.apply(this, arguments));\n };\n}\n","import { Component, EventEmitter, HostListener, OnInit, Output } from '@angular/core';\nimport { FormBuilder, Validators } from '@angular/forms';\nimport { CoreService } from '@app/core/services/core.service';\nimport { PetPatientService } from '@app/modules/patients/services/pet-patient.service';\nimport { DateUtils } from '@app/shared/data/DateUtils';\nimport { nativeAsync } from '@app/shared/decorators/nativeAsync';\nimport { Race } from '@app/shared/models/races';\nimport { Species } from '@app/shared/models/species';\nimport { markFormGroup } from '@app/utils';\n\n@Component({\n selector: 'app-modal-pet-form',\n templateUrl: './modal-pet-form.component.html',\n styleUrls: ['./modal-pet-form.component.scss']\n})\nexport class ModalPetFormComponent implements OnInit {\n @Output() submit = new EventEmitter<any>();\n\n constructor(\n private fb: FormBuilder,\n private petPatientService: PetPatientService,\n private coreService: CoreService\n ) {\n this.onResize();\n }\n\n loading = false;\n species: Species[];\n races: Race[];\n\n labelAge = 'Idade';\n\n form = this.fb.group({\n _id: [null],\n name: ['', Validators.required],\n species: ['', Validators.required],\n sex: ['', Validators.required],\n race: ['', Validators.required],\n dateOfBirth: ['', Validators.required],\n isApproximateAge: [],\n approximateAgeLabel: [\n {\n value: '',\n disabled: true\n }\n ]\n });\n\n isMobile = false;\n\n @nativeAsync\n async ngOnInit() {\n this.species = await this.petPatientService.getSpecies().toPromise();\n this.form.get('dateOfBirth').valueChanges.subscribe(dateOfBirth => {\n if (dateOfBirth) {\n const diffBetweenDate = DateUtils.diffBetweenDate(new Date(), dateOfBirth);\n\n this.form.get('approximateAgeLabel').setValue(diffBetweenDate.result);\n }\n });\n }\n\n @HostListener('window:resize')\n onResize() {\n this.isMobile = this.coreService.isViewPortMobile();\n }\n\n @nativeAsync\n async setSpecies(title: any) {\n const species = this.species.find(s => s.title === title);\n await this.getRaces(species._id);\n }\n\n @nativeAsync\n async getRaces(speciesId: string) {\n this.form.get('race').setValue('');\n this.races = await this.petPatientService.getRaces(speciesId).toPromise();\n }\n\n submitForm() {\n markFormGroup(this.form);\n\n if (this.form.valid) {\n this.submit.emit(this.form.value);\n }\n }\n\n get currentDate() {\n const now = new Date();\n return this.formatDate(now);\n }\n\n private formatDate(now: Date) {\n const dd = String(now.getDate()).padStart(2, '0');\n const mm = String(now.getMonth() + 1).padStart(2, '0');\n const yyyy = now.getFullYear();\n return `${yyyy}-${mm}-${dd}`;\n }\n\n checkApproximateAge(value: boolean) {\n if (value) {\n this.labelAge = 'Idade Aproximada';\n } else {\n this.labelAge = 'Idade';\n }\n }\n}\n","export default \"<div theme class=\\\"d-flex flex-column\\\">\\n <header>\\n <span class=\\\"title\\\">\\n ADICIONAR PET\\n </span>\\n </header>\\n\\n <div class=\\\"modal-body\\\">\\n <form nz-form [formGroup]=\\\"form\\\">\\n <div class=\\\"row justify-content-between\\\">\\n <div class=\\\"col-md-12\\\">\\n <div class=\\\"row\\\">\\n <div class=\\\"col-md\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"species\\\">Espécie<span class=\\\"mandatory\\\"> *</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <select\\n id=\\\"species\\\"\\n nz-input\\n formControlName=\\\"species\\\"\\n class=\\\"capitalize\\\"\\n (change)=\\\"setSpecies($event.target.value)\\\"\\n >\\n <option value=\\\"\\\" selected>Selecionar</option>\\n <option *ngFor=\\\"let spec of species\\\" [value]=\\\"spec.title\\\">{{ spec.title }}</option>\\n </select>\\n <nz-form-explain *ngIf=\\\"form.get('species').dirty && form.get('species').errors\\\">\\n <ng-container *ngIf=\\\"form.get('species').hasError('required')\\\">\\n Campo obrigatório, por favor selecione a espécie.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n\\n <div class=\\\"col-md\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"race\\\">Raça <span class=\\\"mandatory\\\">*</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <select\\n nz-input\\n id=\\\"race\\\"\\n formControlName=\\\"race\\\"\\n class=\\\"capitalize\\\"\\n *ngIf=\\\"races?.length > 0; else raceInput\\\"\\n >\\n <option value=\\\"\\\" selected>Selecionar</option>\\n <option *ngFor=\\\"let race of races\\\" [value]=\\\"race.title\\\">{{ race.title }}</option>\\n </select>\\n <ng-template #raceInput>\\n <input nz-input id=\\\"race\\\" formControlName=\\\"race\\\" autocomplete=\\\"disabled\\\" />\\n </ng-template>\\n <nz-form-explain *ngIf=\\\"form.get('race').dirty && form.get('race').errors\\\">\\n <ng-container *ngIf=\\\"form.get('race').hasError('required')\\\">\\n Campo obrigatório, por favor selecione a raça.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n </div>\\n </div>\\n </div>\\n\\n <div class=\\\"row justify-content-between\\\">\\n <div class=\\\"col\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"nome\\\">Nome do Pet<span class=\\\"mandatory\\\"> *</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n placeholder=\\\"ex: Rex\\\"\\n formControlName=\\\"name\\\"\\n id=\\\"nome\\\"\\n maxlength=\\\"128\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n <nz-form-explain *ngIf=\\\"form.get('name').dirty && form.get('name').errors\\\">\\n <ng-container *ngIf=\\\"form.get('name').hasError('required')\\\">\\n Campo obrigatório, por favor digite o nome e sobrenome.\\n </ng-container>\\n <ng-container\\n *ngIf=\\\"!form.get('name').hasError('required') && form.get('name').hasError('nome')\\\"\\n >\\n Por favor digite o nome e sobrenome.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n <div class=\\\"col-md-4\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"sex\\\">Sexo <span class=\\\"mandatory\\\">*</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <select formControlName=\\\"sex\\\" id=\\\"sex\\\" nz-input nzPlaceHolder=\\\"Selecione\\\">\\n <option value=\\\"M\\\">Macho</option>\\n <option value=\\\"F\\\">Fêmea</option>\\n </select>\\n <nz-form-explain *ngIf=\\\"form.get('sex').dirty && form.get('sex').errors\\\">\\n <ng-container *ngIf=\\\"form.get('sex').hasError('required')\\\">\\n Campo obrigatório, por favor selecione o sexo.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n </div>\\n\\n <div class=\\\"row\\\">\\n <div class=\\\"col-md\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"dateOfBirth\\\"\\n >Data de nascimento<span class=\\\"mandatory\\\">*</span></nz-form-label\\n >\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n type=\\\"date\\\"\\n formControlName=\\\"dateOfBirth\\\"\\n placeholder=\\\"DD/MM/AAAA\\\"\\n id=\\\"dateOfBirth\\\"\\n [max]=\\\"currentDate\\\"\\n />\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n <div class=\\\"col-md\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"approximateAge\\\">{{ labelAge }}</nz-form-label>\\n <nz-form-control>\\n <input nz-input id=\\\"approximateAge\\\" formControlName=\\\"approximateAgeLabel\\\" />\\n </nz-form-control>\\n </nz-form-item>\\n <label\\n nz-checkbox\\n formControlName=\\\"isApproximateAge\\\"\\n style=\\\"font-size: 16px; margin-bottom: 8px;\\\"\\n (nzCheckedChange)=\\\"checkApproximateAge($event)\\\"\\n >Idade aproximada</label\\n >\\n </div>\\n </div>\\n </form>\\n </div>\\n\\n <div class=\\\"modal-footer\\\" theme>\\n <button class=\\\"ok-btn\\\" nz-button class=\\\"btn-primary\\\" (click)=\\\"submitForm()\\\">\\n Salvar <i class=\\\"fa\\\"></i>\\n </button>\\n </div>\\n</div>\\n<ngx-loading [show]=\\\"loading\\\" [config]=\\\"{ backdropBorderRadius: '3px' }\\\"></ngx-loading>\\n\";","export default \"header {\\n width: 100%;\\n padding: 16px 24px;\\n border-bottom: 1px solid #e8e8e8;\\n border-radius: 4px 4px 0 0;\\n position: absolute;\\n top: 0;\\n left: 0;\\n background-color: var(--bg-modal-header);\\n color: var(--color-white);\\n}\\nheader .title {\\n margin: 0;\\n color: var(--color-white);\\n font-weight: 500;\\n font-size: 16px;\\n line-height: 22px;\\n word-wrap: break-word;\\n}\\n.modal-body {\\n padding-bottom: 40px;\\n margin-top: 37px;\\n max-height: 60vh;\\n overflow: hidden;\\n overflow-y: auto;\\n}\\n.modal-body input {\\n border-radius: 10px;\\n}\\n.modal-body input::-webkit-input-placeholder {\\n color: #bdc2c7;\\n}\\n@media (max-width: 978px) {\\n .modal-body {\\n padding: 0;\\n }\\n}\";","import { Injectable } from '@angular/core';\nimport { Pharmacist, Pharmacy } from '@app/shared/models';\n\nimport { HttpClient } from '@angular/common/http';\nimport { Observable } from 'rxjs';\n\nimport { Retention } from '@app/shared/models/retention';\nimport { environment } from '@env/environment';\n\nexport const PHARMACY_URL = 'pharmacy';\nconst ADD_PHARMACIST_URL = 'add-pharmacist';\nconst REMOVE_PHARMACIST_URL = 'remove-pharmacist';\n\n@Injectable({ providedIn: 'root' })\nexport class PharmacyService {\n constructor(private http: HttpClient) {}\n\n save(pharmacy: Pharmacy): Observable<Pharmacy> {\n return this.http.post<Pharmacy>(`${environment.apiRoot}${PHARMACY_URL}`, pharmacy);\n }\n\n update(id: string, data: Pharmacy) {\n return this.http.put<Retention[]>(`${environment.apiRoot}${PHARMACY_URL}/${id}`, data);\n }\n\n getPharmacy(id: string): Observable<Pharmacy> {\n return this.http.get<Pharmacy>(`${environment.apiRoot}${PHARMACY_URL}/find/${id}`);\n }\n\n getPharmacies(): Observable<Pharmacy[]> {\n return this.http.get<Pharmacy[]>(`${environment.apiRoot}${PHARMACY_URL}`);\n }\n\n getPharmaciesByFilter(filter: any): Observable<any> {\n return this.http.get<Pharmacy[]>(`${environment.apiRoot}${PHARMACY_URL}/filter`, { params: filter });\n }\n\n getPharmacyByUserId(userId: string): Observable<Pharmacy> {\n return this.http.get<Pharmacy>(`${environment.apiRoot}${PHARMACY_URL}/user/${userId}`);\n }\n\n getRetentionHistory(userId: string) {\n return this.http.get<Retention[]>(`${environment.apiRoot}${PHARMACY_URL}/retentions/${userId}`);\n }\n\n getRetentionHistoryByFilter(userId: string, filter: any) {\n return this.http.get<any>(`${environment.apiRoot}${PHARMACY_URL}/retentions/filter/${userId}`, {\n params: filter\n });\n }\n\n resolvePending() {\n return this.http.post(`${environment.apiRoot}${PHARMACY_URL}/pendency`, {});\n }\n\n addPharmacist(pharmacyId, pharmacistId) {\n return this.http.post<Pharmacy>(\n `${environment.apiRoot}${PHARMACY_URL}/${pharmacyId}/${ADD_PHARMACIST_URL}`,\n { pharmacistId: pharmacistId }\n );\n }\n\n removePharmacist(pharmaciId: string, pharmacistId: any): Observable<Pharmacist> {\n return this.http.put<Pharmacist>(\n `${environment.apiRoot}${PHARMACY_URL}/${pharmaciId}/${REMOVE_PHARMACIST_URL}`,\n { pharmacistId: pharmacistId }\n );\n }\n\n importPharmacies(file: File, isPublic: boolean) {\n const formData = new FormData();\n formData.append('file', file);\n return this.http.post(`${environment.apiRoot}${PHARMACY_URL}/import?isPublic=${isPublic}`, formData);\n }\n\n checkUiDoNotShowAgainModalNewPortalDigitalSignatures(value: boolean): Observable<any> {\n return this.http.patch<any>(`${environment.apiRoot}${PHARMACY_URL}/ui`, {\n doNotShowAgainModalNewPortalDigitalSignatures: value\n });\n }\n}\n","import { Component, Input, OnInit, TemplateRef, ViewChild } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { NzModalRef, NzModalService } from 'ng-zorro-antd/modal';\n\n@Component({\n selector: 'app-modal-activate-account',\n templateUrl: './modal-activate-account.component.html',\n styleUrls: ['./modal-activate-account.component.scss']\n})\nexport class ModalActivateAccountComponent implements OnInit {\n tplModal: NzModalRef;\n\n @Input() title?: string;\n @Input() subtitle?: string;\n @Input() content?: string;\n\n @ViewChild('tplContent', { static: true })\n tplContent: TemplateRef<{}>;\n\n @ViewChild('tplFooter', { static: true })\n tplFooter: TemplateRef<{}>;\n\n constructor(private modalService: NzModalService, private router: Router) {}\n\n ngOnInit() {}\n\n createTplModal(title, subtitle, content?): void {\n this.title = title;\n this.subtitle = subtitle;\n this.content = content;\n this.tplModal = this.modalService.create({\n nzContent: this.tplContent,\n nzFooter: this.tplFooter,\n nzClosable: true,\n nzWidth: 650,\n nzMaskClosable: true,\n nzOnCancel: () => {},\n nzOnOk: () => console.log('Click ok')\n });\n }\n\n destroyTplModal(): void {\n this.tplModal.destroy();\n }\n\n public redirect() {\n window.open('https://receitadigital.safeweb.com.br/#/');\n this.router.navigate([`/entry`]);\n this.modalService.closeAll();\n }\n}\n","export default \"<ng-template #tplContent let-params let-ref=\\\"tplModal\\\">\\n <div class=\\\"container row\\\">\\n <div class=\\\"col-8 description-area\\\">\\n <h4 class=\\\"title text-primary\\\">\\n {{ title }}\\n </h4>\\n <h4 class=\\\"subtitle text-primary\\\">{{ subtitle }}</h4>\\n <br />\\n <h4 class=\\\"certificate-info text-primary\\\">{{ content }}</h4>\\n </div>\\n <div class=\\\"col-4 logos-area\\\">\\n <div>\\n <img class=\\\"logo\\\" src=\\\"assets/img/logo-01.png\\\" alt=\\\"\\\" />\\n <img class=\\\"plus\\\" src=\\\"assets/img/mais.png\\\" alt=\\\"\\\" />\\n <img class=\\\"logo\\\" src=\\\"assets/img/safe-web.png\\\" alt=\\\"\\\" />\\n </div>\\n <a (click)=\\\"redirect()\\\">Clique aqui e faça o seu</a>\\n </div>\\n </div>\\n</ng-template>\\n<ng-template #tplFooter>\\n <div>\\n <span\\n >*O desconto apresentado é exclusivo para parceiros Receita Digital no primeiro ano de utilização.\\n Este certificado não possui limitação no número de assinaturas.</span\\n >\\n </div>\\n</ng-template>\\n\";","export default \".title {\\n text-transform: none;\\n font-size: 50px;\\n line-height: normal;\\n}\\n\\np {\\n color: #363636;\\n font-size: 20px;\\n font-family: \\\"prolight\\\";\\n}\\n\\n::ng-deep .ant-modal {\\n margin-top: auto;\\n margin-bottom: auto;\\n height: 100vh;\\n width: 93vw !important;\\n}\\n\\n::ng-deep .ant-modal .logos-area {\\n display: flex;\\n flex-direction: column;\\n align-items: center;\\n justify-content: space-around;\\n}\\n\\n::ng-deep .ant-modal .logos-area a {\\n font-size: 1.8rem;\\n height: 52px;\\n width: 323px;\\n border-radius: 50px;\\n font-weight: bold;\\n color: white;\\n background-color: #ef8233;\\n}\\n\\n::ng-deep .ant-modal-body {\\n display: flex;\\n text-align: center;\\n justify-content: space-evenly;\\n}\\n\\n::ng-deep .ant-modal-body .logo {\\n width: 260px;\\n}\\n\\n::ng-deep .ant-modal-body .plus {\\n width: 55px;\\n}\\n\\n::ng-deep .ant-modal-content {\\n border-radius: 50px;\\n box-shadow: 0 3px 6px rgba(185, 154, 154, 0.16);\\n width: 93vw;\\n}\\n\\n::ng-deep .ant-modal-content .ant-modal-close:focus {\\n outline: none;\\n}\\n\\n::ng-deep .ant-modal-footer {\\n text-align: center;\\n font-size: 1rem;\\n color: white;\\n background-color: #2a5f54;\\n border-bottom-right-radius: 50px;\\n border-bottom-left-radius: 50px;\\n}\\n\\n.text-primary {\\n color: #1b403a !important;\\n}\\n\\n.description-area {\\n text-align: initial;\\n}\\n\\n.description-area .subtitle {\\n font-size: 2.3rem;\\n}\\n\\n.description-area .certificate-info {\\n font-weight: bolder;\\n}\";","import moment from 'moment';\n\nconst AGE_TEENAGER = 13;\nconst AGE_ADULT = 18;\n\nexport class DateUtils {\n static isUnderAge(dateOfBirth: Date | string, format = null) {\n const date = dateOfBirth instanceof Date ? dateOfBirth : moment(dateOfBirth, format);\n const age = moment().diff(date, 'years', false);\n return age < AGE_ADULT;\n }\n static isUnderThirteenTearsOfAge(dateOfBirth: Date | string, format = null) {\n const date = dateOfBirth instanceof Date ? dateOfBirth : moment(dateOfBirth, format);\n const age = moment().diff(date, 'years', false);\n return age < AGE_TEENAGER;\n }\n\n static diffBetweenDate(date1: Date | string, date2: Date | string) {\n // new date instance\n const newDate1 = new Date(date1);\n const newDate2 = new Date(date2);\n\n // Get the Timestamp\n const date1TimeStamp = newDate1.getTime();\n const date2TimeStamp = newDate2.getTime();\n\n let calc;\n\n // Check which timestamp is greater\n if (date1TimeStamp > date2TimeStamp) {\n calc = new Date(date1TimeStamp - date2TimeStamp);\n } else {\n calc = new Date(date2TimeStamp - date1TimeStamp);\n }\n // Retrieve the date, month and year\n const calcFormatTmp = calc.getDate() + '-' + (calc.getMonth() + 1) + '-' + calc.getFullYear();\n // Convert to an array and store\n const calcFormat = calcFormatTmp.split('-');\n // Subtract each member of our array from the default date\n const daysPassed = Number(Math.abs(Number(calcFormat[0])) - 1);\n const monthsPassed = Number(Math.abs(Number(calcFormat[1])) - 1);\n const yearsPassed = Number(Math.abs(Number(calcFormat[2])) - 1970);\n\n // Set up custom text\n const yrsTxt = ['ano', 'anos'];\n const mnthsTxt = ['mês', 'meses'];\n const daysTxt = ['dia', 'dias'];\n\n // Convert to days and sum together\n const totalDays = yearsPassed * 365 + monthsPassed * 30.417 + daysPassed;\n const totalSecs = totalDays * 24 * 60 * 60;\n const totalMins = totalDays * 24 * 60;\n const totalHours = totalDays * 24;\n const totalWeeks = totalDays >= 7 ? totalDays / 7 : 0;\n\n // display result with custom text\n const result =\n (yearsPassed == 1\n ? yearsPassed + ' ' + yrsTxt[0] + ' '\n : yearsPassed > 1\n ? yearsPassed + ' ' + yrsTxt[1] + ' '\n : '') +\n (monthsPassed == 1\n ? monthsPassed + ' ' + mnthsTxt[0]\n : monthsPassed > 1\n ? monthsPassed + ' ' + mnthsTxt[1] + ' '\n : '') +\n (daysPassed == 1\n ? daysPassed + ' ' + daysTxt[0]\n : daysPassed > 1\n ? daysPassed + ' ' + daysTxt[1]\n : '');\n\n // return the result\n return {\n totalDays: Math.round(totalDays),\n totalWeeks: Math.round(totalWeeks),\n totalHours: Math.round(totalHours),\n totalMinutes: Math.round(totalMins),\n totalSeconds: Math.round(totalSecs),\n result: result.trim()\n };\n }\n}\n","var map = {\n\t\"./af\": \"K/tc\",\n\t\"./af.js\": \"K/tc\",\n\t\"./ar\": \"jnO4\",\n\t\"./ar-dz\": \"o1bE\",\n\t\"./ar-dz.js\": \"o1bE\",\n\t\"./ar-kw\": \"Qj4J\",\n\t\"./ar-kw.js\": \"Qj4J\",\n\t\"./ar-ly\": \"HP3h\",\n\t\"./ar-ly.js\": \"HP3h\",\n\t\"./ar-ma\": \"CoRJ\",\n\t\"./ar-ma.js\": \"CoRJ\",\n\t\"./ar-sa\": \"gjCT\",\n\t\"./ar-sa.js\": \"gjCT\",\n\t\"./ar-tn\": \"bYM6\",\n\t\"./ar-tn.js\": \"bYM6\",\n\t\"./ar.js\": \"jnO4\",\n\t\"./az\": \"SFxW\",\n\t\"./az.js\": \"SFxW\",\n\t\"./be\": \"H8ED\",\n\t\"./be.js\": \"H8ED\",\n\t\"./bg\": \"hKrs\",\n\t\"./bg.js\": \"hKrs\",\n\t\"./bm\": \"p/rL\",\n\t\"./bm.js\": \"p/rL\",\n\t\"./bn\": \"kEOa\",\n\t\"./bn-bd\": \"loYQ\",\n\t\"./bn-bd.js\": \"loYQ\",\n\t\"./bn.js\": \"kEOa\",\n\t\"./bo\": \"0mo+\",\n\t\"./bo.js\": \"0mo+\",\n\t\"./br\": \"aIdf\",\n\t\"./br.js\": \"aIdf\",\n\t\"./bs\": \"JVSJ\",\n\t\"./bs.js\": \"JVSJ\",\n\t\"./ca\": \"1xZ4\",\n\t\"./ca.js\": \"1xZ4\",\n\t\"./cs\": \"PA2r\",\n\t\"./cs.js\": \"PA2r\",\n\t\"./cv\": \"A+xa\",\n\t\"./cv.js\": \"A+xa\",\n\t\"./cy\": \"l5ep\",\n\t\"./cy.js\": \"l5ep\",\n\t\"./da\": \"DxQv\",\n\t\"./da.js\": \"DxQv\",\n\t\"./de\": \"tGlX\",\n\t\"./de-at\": \"s+uk\",\n\t\"./de-at.js\": \"s+uk\",\n\t\"./de-ch\": \"u3GI\",\n\t\"./de-ch.js\": \"u3GI\",\n\t\"./de.js\": \"tGlX\",\n\t\"./dv\": \"WYrj\",\n\t\"./dv.js\": \"WYrj\",\n\t\"./el\": \"jUeY\",\n\t\"./el.js\": \"jUeY\",\n\t\"./en-au\": \"Dmvi\",\n\t\"./en-au.js\": \"Dmvi\",\n\t\"./en-ca\": \"OIYi\",\n\t\"./en-ca.js\": \"OIYi\",\n\t\"./en-gb\": \"Oaa7\",\n\t\"./en-gb.js\": \"Oaa7\",\n\t\"./en-ie\": \"4dOw\",\n\t\"./en-ie.js\": \"4dOw\",\n\t\"./en-il\": \"czMo\",\n\t\"./en-il.js\": \"czMo\",\n\t\"./en-in\": \"7C5Q\",\n\t\"./en-in.js\": \"7C5Q\",\n\t\"./en-nz\": \"b1Dy\",\n\t\"./en-nz.js\": \"b1Dy\",\n\t\"./en-sg\": \"t+mt\",\n\t\"./en-sg.js\": \"t+mt\",\n\t\"./eo\": \"Zduo\",\n\t\"./eo.js\": \"Zduo\",\n\t\"./es\": \"iYuL\",\n\t\"./es-do\": \"CjzT\",\n\t\"./es-do.js\": \"CjzT\",\n\t\"./es-mx\": \"tbfe\",\n\t\"./es-mx.js\": \"tbfe\",\n\t\"./es-us\": \"Vclq\",\n\t\"./es-us.js\": \"Vclq\",\n\t\"./es.js\": \"iYuL\",\n\t\"./et\": \"7BjC\",\n\t\"./et.js\": \"7BjC\",\n\t\"./eu\": \"D/JM\",\n\t\"./eu.js\": \"D/JM\",\n\t\"./fa\": \"jfSC\",\n\t\"./fa.js\": \"jfSC\",\n\t\"./fi\": \"gekB\",\n\t\"./fi.js\": \"gekB\",\n\t\"./fil\": \"1ppg\",\n\t\"./fil.js\": \"1ppg\",\n\t\"./fo\": \"ByF4\",\n\t\"./fo.js\": \"ByF4\",\n\t\"./fr\": \"nyYc\",\n\t\"./fr-ca\": \"2fjn\",\n\t\"./fr-ca.js\": \"2fjn\",\n\t\"./fr-ch\": \"Dkky\",\n\t\"./fr-ch.js\": \"Dkky\",\n\t\"./fr.js\": \"nyYc\",\n\t\"./fy\": \"cRix\",\n\t\"./fy.js\": \"cRix\",\n\t\"./ga\": \"USCx\",\n\t\"./ga.js\": \"USCx\",\n\t\"./gd\": \"9rRi\",\n\t\"./gd.js\": \"9rRi\",\n\t\"./gl\": \"iEDd\",\n\t\"./gl.js\": \"iEDd\",\n\t\"./gom-deva\": \"qvJo\",\n\t\"./gom-deva.js\": \"qvJo\",\n\t\"./gom-latn\": \"DKr+\",\n\t\"./gom-latn.js\": \"DKr+\",\n\t\"./gu\": \"4MV3\",\n\t\"./gu.js\": \"4MV3\",\n\t\"./he\": \"x6pH\",\n\t\"./he.js\": \"x6pH\",\n\t\"./hi\": \"3E1r\",\n\t\"./hi.js\": \"3E1r\",\n\t\"./hr\": \"S6ln\",\n\t\"./hr.js\": \"S6ln\",\n\t\"./hu\": \"WxRl\",\n\t\"./hu.js\": \"WxRl\",\n\t\"./hy-am\": \"1rYy\",\n\t\"./hy-am.js\": \"1rYy\",\n\t\"./id\": \"UDhR\",\n\t\"./id.js\": \"UDhR\",\n\t\"./is\": \"BVg3\",\n\t\"./is.js\": \"BVg3\",\n\t\"./it\": \"bpih\",\n\t\"./it-ch\": \"bxKX\",\n\t\"./it-ch.js\": \"bxKX\",\n\t\"./it.js\": \"bpih\",\n\t\"./ja\": \"B55N\",\n\t\"./ja.js\": \"B55N\",\n\t\"./jv\": \"tUCv\",\n\t\"./jv.js\": \"tUCv\",\n\t\"./ka\": \"IBtZ\",\n\t\"./ka.js\": \"IBtZ\",\n\t\"./kk\": \"bXm7\",\n\t\"./kk.js\": \"bXm7\",\n\t\"./km\": \"6B0Y\",\n\t\"./km.js\": \"6B0Y\",\n\t\"./kn\": \"PpIw\",\n\t\"./kn.js\": \"PpIw\",\n\t\"./ko\": \"Ivi+\",\n\t\"./ko.js\": \"Ivi+\",\n\t\"./ku\": \"JCF/\",\n\t\"./ku.js\": \"JCF/\",\n\t\"./ky\": \"lgnt\",\n\t\"./ky.js\": \"lgnt\",\n\t\"./lb\": \"RAwQ\",\n\t\"./lb.js\": \"RAwQ\",\n\t\"./lo\": \"sp3z\",\n\t\"./lo.js\": \"sp3z\",\n\t\"./lt\": \"JvlW\",\n\t\"./lt.js\": \"JvlW\",\n\t\"./lv\": \"uXwI\",\n\t\"./lv.js\": \"uXwI\",\n\t\"./me\": \"KTz0\",\n\t\"./me.js\": \"KTz0\",\n\t\"./mi\": \"aIsn\",\n\t\"./mi.js\": \"aIsn\",\n\t\"./mk\": \"aQkU\",\n\t\"./mk.js\": \"aQkU\",\n\t\"./ml\": \"AvvY\",\n\t\"./ml.js\": \"AvvY\",\n\t\"./mn\": \"lYtQ\",\n\t\"./mn.js\": \"lYtQ\",\n\t\"./mr\": \"Ob0Z\",\n\t\"./mr.js\": \"Ob0Z\",\n\t\"./ms\": \"6+QB\",\n\t\"./ms-my\": \"ZAMP\",\n\t\"./ms-my.js\": \"ZAMP\",\n\t\"./ms.js\": \"6+QB\",\n\t\"./mt\": \"G0Uy\",\n\t\"./mt.js\": \"G0Uy\",\n\t\"./my\": \"honF\",\n\t\"./my.js\": \"honF\",\n\t\"./nb\": \"bOMt\",\n\t\"./nb.js\": \"bOMt\",\n\t\"./ne\": \"OjkT\",\n\t\"./ne.js\": \"OjkT\",\n\t\"./nl\": \"+s0g\",\n\t\"./nl-be\": \"2ykv\",\n\t\"./nl-be.js\": \"2ykv\",\n\t\"./nl.js\": \"+s0g\",\n\t\"./nn\": \"uEye\",\n\t\"./nn.js\": \"uEye\",\n\t\"./oc-lnc\": \"Fnuy\",\n\t\"./oc-lnc.js\": \"Fnuy\",\n\t\"./pa-in\": \"8/+R\",\n\t\"./pa-in.js\": \"8/+R\",\n\t\"./pl\": \"jVdC\",\n\t\"./pl.js\": \"jVdC\",\n\t\"./pt\": \"8mBD\",\n\t\"./pt-br\": \"0tRk\",\n\t\"./pt-br.js\": \"0tRk\",\n\t\"./pt.js\": \"8mBD\",\n\t\"./ro\": \"lyxo\",\n\t\"./ro.js\": \"lyxo\",\n\t\"./ru\": \"lXzo\",\n\t\"./ru.js\": \"lXzo\",\n\t\"./sd\": \"Z4QM\",\n\t\"./sd.js\": \"Z4QM\",\n\t\"./se\": \"//9w\",\n\t\"./se.js\": \"//9w\",\n\t\"./si\": \"7aV9\",\n\t\"./si.js\": \"7aV9\",\n\t\"./sk\": \"e+ae\",\n\t\"./sk.js\": \"e+ae\",\n\t\"./sl\": \"gVVK\",\n\t\"./sl.js\": \"gVVK\",\n\t\"./sq\": \"yPMs\",\n\t\"./sq.js\": \"yPMs\",\n\t\"./sr\": \"zx6S\",\n\t\"./sr-cyrl\": \"E+lV\",\n\t\"./sr-cyrl.js\": \"E+lV\",\n\t\"./sr.js\": \"zx6S\",\n\t\"./ss\": \"Ur1D\",\n\t\"./ss.js\": \"Ur1D\",\n\t\"./sv\": \"X709\",\n\t\"./sv.js\": \"X709\",\n\t\"./sw\": \"dNwA\",\n\t\"./sw.js\": \"dNwA\",\n\t\"./ta\": \"PeUW\",\n\t\"./ta.js\": \"PeUW\",\n\t\"./te\": \"XLvN\",\n\t\"./te.js\": \"XLvN\",\n\t\"./tet\": \"V2x9\",\n\t\"./tet.js\": \"V2x9\",\n\t\"./tg\": \"Oxv6\",\n\t\"./tg.js\": \"Oxv6\",\n\t\"./th\": \"EOgW\",\n\t\"./th.js\": \"EOgW\",\n\t\"./tk\": \"Wv91\",\n\t\"./tk.js\": \"Wv91\",\n\t\"./tl-ph\": \"Dzi0\",\n\t\"./tl-ph.js\": \"Dzi0\",\n\t\"./tlh\": \"z3Vd\",\n\t\"./tlh.js\": \"z3Vd\",\n\t\"./tr\": \"DoHr\",\n\t\"./tr.js\": \"DoHr\",\n\t\"./tzl\": \"z1FC\",\n\t\"./tzl.js\": \"z1FC\",\n\t\"./tzm\": \"wQk9\",\n\t\"./tzm-latn\": \"tT3J\",\n\t\"./tzm-latn.js\": \"tT3J\",\n\t\"./tzm.js\": \"wQk9\",\n\t\"./ug-cn\": \"YRex\",\n\t\"./ug-cn.js\": \"YRex\",\n\t\"./uk\": \"raLr\",\n\t\"./uk.js\": \"raLr\",\n\t\"./ur\": \"UpQW\",\n\t\"./ur.js\": \"UpQW\",\n\t\"./uz\": \"Loxo\",\n\t\"./uz-latn\": \"AQ68\",\n\t\"./uz-latn.js\": \"AQ68\",\n\t\"./uz.js\": \"Loxo\",\n\t\"./vi\": \"KSF8\",\n\t\"./vi.js\": \"KSF8\",\n\t\"./x-pseudo\": \"/X5v\",\n\t\"./x-pseudo.js\": \"/X5v\",\n\t\"./yo\": \"fzPg\",\n\t\"./yo.js\": \"fzPg\",\n\t\"./zh-cn\": \"XDpg\",\n\t\"./zh-cn.js\": \"XDpg\",\n\t\"./zh-hk\": \"SatO\",\n\t\"./zh-hk.js\": \"SatO\",\n\t\"./zh-mo\": \"OmwH\",\n\t\"./zh-mo.js\": \"OmwH\",\n\t\"./zh-tw\": \"kOpN\",\n\t\"./zh-tw.js\": \"kOpN\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"RnhZ\";","import { HttpErrorResponse } from '@angular/common/http';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { FormArray, FormControl, FormGroup, Validators } from '@angular/forms';\nimport { markFormGroup } from '@app/utils/markFormGroup';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { HealthProfessional } from './../../../../shared/models/health-professional';\n\nimport { ColorSetting } from '@app/shared/models/color-setting';\nimport { AppToastService } from '@app/shared/services/app-toast.service';\nimport { AttestationModelService } from '../../services/attestation-model.service';\nimport { ExamModelService } from '../../services/exam-model.service';\nimport { OrientationModelService } from '../../services/orientation-model.service';\nimport { PrescriptionModelService } from '../../services/prescription-model.service';\n\n@Component({\n selector: 'app-model-add-favorite-prescription',\n templateUrl: './model-add-favorite-document.component.html',\n styleUrls: ['./model-add-favorite-document.component.scss']\n})\nexport class ModelAddFavoriteDocumentComponent implements OnInit {\n readonly HTTP_STATUS_CONFLICT = 409;\n\n @Input() prescriber: HealthProfessional;\n @Input() documentType = '';\n @Input() documentModel: any;\n @Input() colorSetting: ColorSetting;\n typesOfDocuments = ['Prescrição', 'Exame', 'Atestado', 'Outros'];\n loading: boolean;\n message = '';\n\n documentModelForm: FormGroup;\n payload: any;\n constructor(\n public modalRef: BsModalRef,\n private prescriptionModelService: PrescriptionModelService,\n private orientationModelService: OrientationModelService,\n private examModelService: ExamModelService,\n private attestationModelService: AttestationModelService,\n private notification: AppToastService\n ) {}\n\n ngOnInit() {\n switch (this.documentType) {\n case this.typesOfDocuments[0]:\n this.buildPrescriptionForm();\n break;\n case this.typesOfDocuments[1]:\n this.buildExamForm();\n break;\n case this.typesOfDocuments[2]:\n this.buildAttestationForm();\n break;\n\n case this.typesOfDocuments[3]:\n this.buildOrientationForm();\n break;\n }\n this.setDocumentModel();\n }\n\n setDocumentModel() {\n if (this.documentType === this.typesOfDocuments[0]) {\n this.setPrescritpionModel();\n } else if (this.documentType === this.typesOfDocuments[1]) {\n this.setExamModel();\n } else if (this.documentType === this.typesOfDocuments[2]) {\n this.setAttestationModel();\n } else if (this.documentType === this.typesOfDocuments[3]) {\n this.setOrientationModel();\n }\n }\n\n setPrescritpionModel() {\n if (this.documentModel) {\n this.documentModelForm.patchValue({ prescriber: this.prescriber, ...this.documentModel });\n this.documentModel.medicaments.forEach(m => {\n this.addPrescription({\n ...m,\n nome: m.name,\n id: m.medicamentId,\n principio: m.principle,\n laboratorio: m.laboratory,\n ean: m.ean,\n apresentacaoCustomizada: m.description,\n quantity: m.prescribedQuantity\n });\n });\n }\n }\n\n setExamModel() {\n if (this.documentModel) {\n this.documentModelForm.patchValue({ prescriber: this.prescriber, ...this.documentModel });\n const value = this.documentModel.justification.reduce(\n (acc, val) => (acc ? `${acc}\\n${val}` : val),\n ''\n );\n this.documentModelForm.get('text').setValue(value);\n }\n }\n\n setOrientationModel() {\n if (this.documentModel) {\n this.documentModelForm.patchValue({\n titleOrientation: this.documentModel.title,\n prescriber: this.prescriber,\n ...this.documentModel\n });\n const value = this.documentModel.orientations.reduce(\n (accumulator, currentValue) => accumulator + '\\n' + currentValue\n );\n this.documentModelForm.get('text').setValue(value);\n }\n }\n\n setAttestationModel() {\n if (this.documentModel) {\n this.documentModelForm.patchValue({ prescriber: this.prescriber, ...this.documentModel });\n const value = this.documentModel.description.reduce(\n (accumulator, currentValue) => accumulator + '\\n' + currentValue\n );\n this.documentModelForm.get('text').setValue(value);\n }\n }\n\n private buildPrescriptionForm() {\n this.documentModelForm = new FormGroup({\n title: new FormControl('', Validators.required),\n prescriber: new FormControl(''),\n medication: new FormControl(''),\n medicaments: new FormArray([], Validators.required)\n });\n }\n\n private buildOrientationForm() {\n this.documentModelForm = new FormGroup({\n title: new FormControl('', Validators.required),\n titleOrientation: new FormControl('', Validators.required),\n prescriber: new FormControl(''),\n text: new FormControl(''),\n orientations: new FormControl('', Validators.required)\n });\n }\n\n private buildAttestationForm() {\n this.documentModelForm = new FormGroup({\n title: new FormControl('', Validators.required),\n prescriber: new FormControl(''),\n text: new FormControl(''),\n description: new FormControl('', Validators.required)\n });\n }\n\n private buildExamForm() {\n this.documentModelForm = new FormGroup({\n title: new FormControl('', Validators.required),\n text: new FormControl('')\n });\n }\n\n public addPrescription({\n nome,\n id,\n principio,\n laboratorio,\n ean,\n apresentacaoCustomizada,\n dosage = '',\n quantity = 1,\n prescriptionTypeId,\n typeCr\n }): void {\n this.medicamentosFormCtrl.push(\n this.formMedicamentos({\n name: nome,\n medicamentId: id,\n principle: principio,\n laboratory: laboratorio,\n ean: ean,\n description: apresentacaoCustomizada,\n dosage,\n quantity,\n prescriptionTypeId,\n typeCr\n })\n );\n this.documentModelForm.get('medication').setValue(null);\n }\n\n formMedicamentos({\n name,\n medicamentId,\n principle,\n laboratory,\n ean,\n quantity,\n description,\n dosage,\n prescriptionTypeId,\n typeCr\n }): FormGroup {\n return new FormGroup({\n name: new FormControl(name),\n medicamentId: new FormControl(medicamentId),\n prescribedQuantity: new FormControl(quantity),\n dosage: new FormControl(dosage),\n description: new FormControl(description),\n principle: new FormControl(principle),\n laboratory: new FormControl(laboratory),\n ean: new FormControl(ean),\n prescriptionTypeId: new FormControl(prescriptionTypeId),\n typeCr: new FormControl(typeCr)\n });\n }\n\n getText(arrayText: any[]) {\n return arrayText.reduce((acc, val) => (acc ? `${acc}\\n${val}` : val), '');\n }\n\n saveDocumentModel = () => {\n try {\n markFormGroup(this.documentModelForm);\n this.loading = true;\n if (this.documentModelForm.valid) {\n switch (this.documentType) {\n case this.typesOfDocuments[0]:\n this.prescriptionModelService\n .create(this.documentModelForm.value, this.prescriber && this.prescriber.userId)\n .then(() => this.onSuccessCreateFavorite())\n .catch(error => this.onFailureCreateFavorite(error));\n break;\n\n case this.typesOfDocuments[1]:\n this.examModelService\n .create({\n ...this.documentModel,\n ...this.documentModelForm.value\n })\n .then(() => this.onSuccessCreateFavorite())\n .catch(error => this.onFailureCreateFavorite(error));\n break;\n\n case this.typesOfDocuments[2]:\n this.attestationModelService\n .create(this.documentModelForm.value)\n .then(() => this.onSuccessCreateFavorite())\n .catch(error => this.onFailureCreateFavorite(error));\n break;\n\n case this.typesOfDocuments[3]:\n this.orientationModelService\n .create(this.documentModelForm.value)\n .then(() => this.onSuccessCreateFavorite())\n .catch(error => this.onFailureCreateFavorite(error));\n break;\n }\n }\n this.loading = false;\n } catch (err) {\n this.loading = false;\n this.message = err.error.message;\n console.log(err);\n }\n };\n\n onSuccessCreateFavorite() {\n this.modalRef.hide();\n this.notification.notify('success', 'Sucesso', `Modelo ${this.documentType} salvo com sucesso`);\n }\n\n onFailureCreateFavorite(error: HttpErrorResponse) {\n if (error.status === this.HTTP_STATUS_CONFLICT) {\n this.notification.notify(\n 'warning',\n 'Atenção',\n 'Já existe um modelo com este tÃtulo. Digite outro tÃtulo'\n );\n } else {\n this.notification.notify('warning', 'Error', 'Ocorreu um error ao tentar cadastrado modelo.');\n }\n }\n\n get medicamentosFormCtrl(): FormArray {\n return <FormArray>this.documentModelForm.get('medicaments');\n }\n}\n","export default \"<div\\n theme\\n class=\\\"modal-header\\\"\\n [ngStyle]=\\\"\\n colorSetting && {\\n 'background-color': colorSetting?.secondary,\\n 'border-color': colorSetting?.secondary\\n }\\n \\\"\\n>\\n <h4 class=\\\"modal-title pull-left text-white\\\">Cadastrar novo modelo</h4>\\n <button type=\\\"button\\\" class=\\\"close pull-right\\\" aria-label=\\\"Close\\\" (click)=\\\"modalRef.hide()\\\">\\n <span aria-hidden=\\\"true\\\">×</span>\\n </button>\\n</div>\\n<div>\\n <div class=\\\"modal-body\\\">\\n <div *ngIf=\\\"message\\\">\\n <nz-alert nzType=\\\"warning\\\" [nzMessage]=\\\"message\\\"></nz-alert>\\n <br />\\n </div>\\n\\n <div class=\\\"prescription\\\" [formGroup]=\\\"documentModelForm\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"title\\\" theme [ngStyle]=\\\"colorSetting && { color: colorSetting?.primary }\\\"\\n >TÃtulo<span class=\\\"mandatory\\\"> *</span></nz-form-label\\n >\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n formControlName=\\\"title\\\"\\n attr.id=\\\"title\\\"\\n placeholder=\\\"Digite o tÃtulo do modelo...\\\"\\n [ngStyle]=\\\"\\n colorSetting && {\\n 'background-color': colorSetting?.inputBackground,\\n 'border-color': colorSetting?.inputBorder\\n }\\n \\\"\\n theme\\n />\\n <nz-form-explain\\n *ngIf=\\\"documentModelForm.get('title').dirty && documentModelForm.get('title').errors\\\"\\n >\\n <ng-container *ngIf=\\\"documentModelForm.get('title').hasError('required')\\\">\\n Campo obrigatório, por favor digite o tÃtulo.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n <ng-container formArrayName=\\\"medicaments\\\" *ngIf=\\\"documentType === typesOfDocuments[0]\\\">\\n <ng-container\\n *ngFor=\\\"let medicament of documentModelForm.get('medicaments')['controls']; let i = index\\\"\\n [formGroup]=\\\"medicament\\\"\\n >\\n <div class=\\\"medication-container\\\">\\n <div *ngIf=\\\"(documentModelForm.value?.medicaments)[i]?.medicamentId\\\">\\n <h4 class=\\\"title\\\">\\n {{ i + 1 }}. {{ (documentModelForm.value?.medicaments)[i]?.name }}\\n <p class=\\\"mb-0 description\\\">\\n {{ (documentModelForm.value?.medicaments)[i]?.apresentacaoCustomizada }}\\n </p>\\n </h4>\\n <h2 class=\\\"activePrinciples\\\">\\n {{ (documentModelForm.value?.medicaments)[i]?.principle }} -\\n {{ (documentModelForm.value?.medicaments)[i]?.description }}\\n </h2>\\n </div>\\n\\n <div\\n *ngIf=\\\"!(documentModelForm.value?.medicaments)[i]?.medicamentId\\\"\\n class=\\\"free-prescription\\\"\\n >\\n <h4 class=\\\"title\\\">{{ i + 1 }}.</h4>\\n <h4 class=\\\"title break-line\\\">{{ (documentModelForm.value?.medicaments)[i]?.name }}</h4>\\n </div>\\n\\n <nz-form-item>\\n <nz-form-label [nzFor]=\\\"'dosage_' + i\\\" class=\\\"sr-only\\\">Posologia</nz-form-label>\\n <nz-form-control>\\n <textarea\\n [id]=\\\"'dosage_' + i\\\"\\n appAutoSize\\n appFocus\\n formControlName=\\\"dosage\\\"\\n nz-input\\n placeholder=\\\"Posologia\\\"\\n disabled=\\\"true\\\"\\n ></textarea>\\n </nz-form-control>\\n </nz-form-item>\\n <app-auto-width-input-number\\n [id]=\\\"'quantidade' + i\\\"\\n formControlName=\\\"prescribedQuantity\\\"\\n disabled=\\\"true\\\"\\n [colorSetting]=\\\"colorSetting\\\"\\n >\\n </app-auto-width-input-number>\\n <!-- <button *ngIf=\\\"!signed\\\" (click)=\\\"deletePrescription(i)\\\" class=\\\"btn btn-icon btn-simple delete-medication-btn\\\"\\n type=\\\"button\\\">\\n <span class=\\\"btn-inner--icon\\\"><i class=\\\"fa fa-trash-solid\\\"></i></span>\\n </button> -->\\n </div>\\n </ng-container>\\n </ng-container>\\n <ng-container *ngIf=\\\"documentType === typesOfDocuments[1]\\\">\\n <div class=\\\"medication-container\\\">\\n <div *ngFor=\\\"let item of documentModel.examList\\\">\\n Material: {{ item.material }}\\n <div>\\n Exames:\\n <div *ngFor=\\\"let exam of item.exams\\\" style=\\\"padding-left: 20px;\\\">\\n {{ exam.name }}\\n </div>\\n </div>\\n </div>\\n <div *ngIf=\\\"getText(documentModel.justification)\\\">\\n <p class=\\\"mt-4 mb-0\\\">Justificativa:</p>\\n <nz-form-item>\\n <nz-form-control>\\n <textarea rows=\\\"4\\\" attr.id=\\\"text\\\" nz-input formControlName=\\\"text\\\" disabled></textarea>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n </div>\\n </ng-container>\\n <ng-container *ngIf=\\\"documentType === typesOfDocuments[2]\\\">\\n <div class=\\\"medication-container\\\">\\n <nz-form-item>\\n <nz-form-control>\\n <textarea rows=\\\"4\\\" [attr.id]=\\\"'text'\\\" nz-input formControlName=\\\"text\\\" disabled></textarea>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n </ng-container>\\n <ng-container *ngIf=\\\"documentType === typesOfDocuments[3]\\\">\\n <div class=\\\"medication-container\\\">\\n <nz-form-item>\\n <nz-form-control>\\n <textarea rows=\\\"4\\\" [attr.id]=\\\"'text'\\\" nz-input formControlName=\\\"text\\\" disabled></textarea>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n </ng-container>\\n </div>\\n </div>\\n <div class=\\\"modal-footer\\\">\\n <button\\n class=\\\"ok-btn btn-cancel\\\"\\n nz-button\\n (click)=\\\"modalRef.hide()\\\"\\n theme\\n [ngStyle]=\\\"colorSetting && { color: colorSetting.primary }\\\"\\n >\\n Cancelar\\n </button>\\n <button\\n theme\\n class=\\\"ok-btn btn-salvar\\\"\\n nz-button\\n (click)=\\\"saveDocumentModel()\\\"\\n [disabled]=\\\"!documentModelForm.valid\\\"\\n [ngStyle]=\\\"\\n colorSetting && {\\n 'background-color': colorSetting.primary,\\n 'border-color': colorSetting.primary\\n }\\n \\\"\\n >\\n Salvar <i class=\\\"fa\\\"></i>\\n </button>\\n </div>\\n</div>\\n<ngx-loading [show]=\\\"loading\\\" [config]=\\\"{ backdropBorderRadius: '3px' }\\\"></ngx-loading>\\n\";","export default \".modal-body {\\n padding: 40px;\\n}\\n.modal-body input {\\n border-radius: 10px;\\n}\\n.modal-body .btn-save {\\n float: right;\\n padding-top: 7px;\\n padding-bottom: 7px;\\n margin-top: 13px;\\n margin-bottom: 5px;\\n}\\n.modal-body i {\\n font-size: 24px;\\n}\\n.modal-body .mandatory {\\n color: red;\\n}\\n.modal-body input::-webkit-input-placeholder {\\n color: #bdc2c7;\\n}\\n::ng-deep .ant-select-selection {\\n height: 100%;\\n}\\n.modal-header {\\n margin: 0;\\n font-family: \\\"probold\\\";\\n width: 950px !important;\\n}\\n.modal-footer {\\n margin: 0;\\n}\\n.prescription ::ng-deep .ant-drawer-left.ant-drawer-open .ant-drawer-content-wrapper {\\n box-shadow: 0 9px 18px rgba(0, 0, 0, 0.18);\\n}\\n.prescription ::ng-deep .ant-drawer.ant-drawer-open .ant-drawer-mask {\\n opacity: 0.11;\\n}\\n.prescription ::ng-deep .ant-drawer-body {\\n padding-top: 0;\\n height: 90vh;\\n overflow: auto;\\n}\\n.prescription ::ng-deep .ant-drawer-open {\\n top: 80px;\\n}\\n.prescription ::ng-deep .menu-drawer {\\n top: 80px;\\n background-color: #007260;\\n border: 1px solid #007260;\\n}\\n.prescription ::ng-deep .menu-drawer .ant-drawer-content {\\n background-color: transparent;\\n}\\n.prescription ::ng-deep .inner-menu {\\n display: flex;\\n flex-direction: column;\\n}\\n.prescription ::ng-deep .inner-menu .menu-icon {\\n align-self: flex-end;\\n margin: 20px 0;\\n}\\n.prescription ::ng-deep .inner-menu .menu-icon .fa {\\n font-size: 20px;\\n color: white;\\n}\\n.prescription ::ng-deep .inner-menu .menu li {\\n padding: 20px 0;\\n}\\n.prescription ::ng-deep .inner-menu .menu a {\\n color: white;\\n font-family: \\\"problack\\\";\\n font-size: 18px;\\n text-transform: uppercase;\\n}\\n.prescription ::ng-deep .inner-menu .menu a:focus {\\n text-decoration: none;\\n}\\n.prescription ::ng-deep .inner-menu .menu a .fa {\\n margin-right: 10px;\\n}\\n.prescription ::ng-deep .medicationAutoComplete {\\n margin-top: 17px;\\n}\\n.prescription .toolbar {\\n display: flex;\\n}\\n.prescription .toolbar .menu-toggler {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n padding: 0;\\n border-radius: 0;\\n width: 80px;\\n filter: drop-shadow(0px 3px 6px rgba(0, 0, 0, 0.16));\\n margin: 0;\\n}\\n.prescription .toolbar .menu-toggler .fa:before {\\n font-size: 22px;\\n}\\n.prescription .toolbar .menu-toggler,\\n.prescription .toolbar .toolbar-options {\\n height: 80px;\\n}\\n.prescription .toolbar .toolbar-menu {\\n flex: 1;\\n}\\n.prescription .toolbar .toolbar-menu .toolbar-options {\\n background-color: #f5f5f5;\\n display: flex;\\n align-items: center;\\n justify-content: flex-end;\\n padding-right: 40px;\\n padding-left: 60px;\\n}\\n.prescription .toolbar .toolbar-menu .toolbar-options .btn {\\n font-family: \\\"problack\\\", sans-serif;\\n}\\n.prescription .toolbar .toolbar-menu .toolbar-options .btn-green {\\n background-color: #87ebe1;\\n border-color: #87ebe1;\\n color: #1b403a;\\n}\\n.prescription .toolbar .toolbar-menu .toolbar-options .btn-default {\\n background-color: #afafaf;\\n border-color: #afafaf;\\n color: white;\\n}\\n.prescription .toolbar .toolbar-menu .toolbar-tags {\\n background-color: #ebebeb;\\n height: 40px;\\n border-radius: 0 0 10px 10px;\\n}\\n.prescription .add-prescription {\\n padding: 20px 0;\\n border-top: 1px solid #f5f5f5;\\n min-height: 81px;\\n display: flex;\\n justify-content: center;\\n}\\n.prescription .add-prescription.adding-bg {\\n background-color: #f5f5f5;\\n border-top: 1px solid transparent;\\n}\\n.prescription .add-prescription .btn-add-name {\\n background-color: var(--bg-color-primary);\\n border: 1px solid var(--bg-color-primary);\\n color: var(--color-white);\\n padding: 0px 10px;\\n margin: 10px;\\n}\\n.prescription .add-prescription .btn-add {\\n display: flex;\\n padding: 0 0 0 1.25rem;\\n height: 40px;\\n align-items: center;\\n border-radius: 10px;\\n overflow: hidden;\\n border: 0;\\n font-family: \\\"probold\\\", sans-serif;\\n}\\n.prescription .add-prescription .btn-add .btn-inner--icon {\\n background-color: #1b403a;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n height: 40px;\\n width: 50px;\\n}\\n.prescription .btn-add-name {\\n padding: 0px 10px;\\n margin: 10px;\\n}\\n.prescription .medicationNameInput {\\n background-color: transparent;\\n border-color: transparent;\\n height: 100%;\\n box-shadow: none;\\n}\\n.prescription .free-prescription {\\n display: flex;\\n}\\n.prescription .free-prescription .break-line {\\n margin-left: 7px;\\n white-space: pre-wrap;\\n}\\n.prescription textarea {\\n resize: none;\\n background-color: transparent;\\n border: 0;\\n border-radius: 0;\\n box-shadow: none;\\n padding-left: 12px;\\n color: #4d4d4d;\\n font-size: 18px;\\n}\\n.prescription textarea:hover, .prescription textarea:focus {\\n border-color: transparent;\\n box-shadow: none;\\n}\\ntextarea {\\n box-sizing: border-box;\\n width: 100%;\\n}\\n.btn-salvar,\\n.btn-salvar:hover {\\n color: var(--color-white);\\n background-color: var(--bg-color-primary);\\n border-color: var(--bg-color-primary);\\n}\";","import { Injectable } from '@angular/core';\nimport { Library } from '../models/library';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { environment } from '@env/environment';\n\nconst API_UL = ``;\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LibraryService {\n constructor(private http: HttpClient) {}\n\n search(query = 'Serene'): Observable<Library[]> {\n return this.http.get<Library[]>(`${environment.apiRoot}libraries?library=${query}`);\n }\n\n uploadProtocols(file: File) {\n const formData = new FormData();\n formData.append('file', file);\n return this.http.post(`${environment.apiRoot}libraries/import-protocols`, formData);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ManipulatedProfile } from '@app/shared/models';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { environment } from '@env/environment';\n\nconst MANIPULATED_PROFILE_URL = 'manipulated-profile';\nconst MANIPULATION_URL = 'manipulation';\nconst MANIPULATED_PROFILE_PRESCRIBER_URL = `manipulated-profile/prescriber`;\nconst DRAFT_MANIPULATED_PROFILE_PATIENT_URL = `manipulated-profile/patient/draft`;\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ManipulatedProfileService {\n constructor(private http: HttpClient) {}\n\n save(manipulatedProfile: ManipulatedProfile): Observable<ManipulatedProfile> {\n return this.http.post<ManipulatedProfile>(\n `${environment.apiRoot}${MANIPULATED_PROFILE_URL}`,\n manipulatedProfile\n );\n }\n\n update(id, manipulatedProfile: any): Observable<ManipulatedProfile> {\n return this.http.put<ManipulatedProfile>(\n `${environment.apiRoot}${MANIPULATED_PROFILE_URL}/${id}`,\n manipulatedProfile\n );\n }\n\n addPendency(manipulatedProfileId, pendency: any): Observable<ManipulatedProfile> {\n return this.http.put<ManipulatedProfile>(\n `${environment.apiRoot}${MANIPULATED_PROFILE_URL}/${manipulatedProfileId}/add-pendency`,\n pendency\n );\n }\n\n resolvePending(manipulatedProfileId, pendency: any): Observable<ManipulatedProfile> {\n return this.http.put<ManipulatedProfile>(\n `${environment.apiRoot}${MANIPULATED_PROFILE_URL}/${manipulatedProfileId}/resolve-pending`,\n pendency\n );\n }\n\n conclude(id, manipulatedProfile: any): Observable<ManipulatedProfile> {\n return this.http.put<ManipulatedProfile>(\n `${environment.apiRoot}${MANIPULATED_PROFILE_URL}/${MANIPULATION_URL}/conclude/${id}`,\n manipulatedProfile\n );\n }\n\n updateEditingExpirationTime(id: any): Observable<ManipulatedProfile> {\n return this.http.put<ManipulatedProfile>(\n `${environment.apiRoot}${MANIPULATED_PROFILE_URL}/${MANIPULATION_URL}/editing-expiration-time/${id}`,\n {}\n );\n }\n\n getManipulatedProfilesByPrescriberUserId(prescriber: string, filter: any): Observable<any> {\n return this.http.get<any>(\n `${environment.apiRoot}${MANIPULATED_PROFILE_PRESCRIBER_URL}/${prescriber}`,\n {\n params: filter\n }\n );\n }\n\n getManipulatedProfiles(filter: any): Observable<any> {\n return this.http.get<any>(`${environment.apiRoot}${MANIPULATED_PROFILE_URL}`, {\n params: filter\n });\n }\n\n getPendencytHistory(manipulatedProfileId: any): Observable<any> {\n return this.http.get<any>(\n `${environment.apiRoot}${MANIPULATED_PROFILE_URL}/pendency/${manipulatedProfileId}/history`\n );\n }\n\n getManipulatedProfilesForPharmacist(pharmacyId, filter: any): Observable<any> {\n return this.http.get<any>(\n `${environment.apiRoot}${MANIPULATED_PROFILE_URL}/pharmacist/${pharmacyId}`,\n {\n params: filter\n }\n );\n }\n\n getManipulatedProfilesByPharmacy(pharmacyId: string, filter: any): Observable<any> {\n return this.http.get<any>(\n `${environment.apiRoot}${MANIPULATED_PROFILE_URL}/pharmacy/${pharmacyId}`,\n {\n params: filter\n }\n );\n }\n\n getManipulatedProfileById(profileId: string): Observable<ManipulatedProfile> {\n return this.http.get<ManipulatedProfile>(\n `${environment.apiRoot}${MANIPULATED_PROFILE_URL}/${profileId}`\n );\n }\n\n getManipulatedProfileByIdForManipulation(\n profileId: string,\n pharmacyId: string\n ): Observable<ManipulatedProfile> {\n return this.http.get<ManipulatedProfile>(\n `${environment.apiRoot}${MANIPULATED_PROFILE_URL}/${MANIPULATION_URL}/${profileId}/${pharmacyId}`\n );\n }\n\n getDraftManipulatedBrofileByPatient(patientId) {\n return this.http.get<any>(\n `${environment.apiRoot}${DRAFT_MANIPULATED_PROFILE_PATIENT_URL}/${patientId}`\n );\n }\n}\n","import { Md5 } from 'ts-md5/dist/md5';\r\nexport const md5 = (content: string) => Md5.hashStr(content);\r\n","export enum AdditionalFeatureAccept {\n NONE = 'none',\n YES = 'yes',\n NO = 'no'\n}\n","import { Address } from './address';\r\nimport { Pendency } from './pendency';\r\n\r\nexport class Buyer {\r\n _id: string;\r\n name: string;\r\n cpf: string;\r\n telephone: string;\r\n cellphone: string;\r\n identity: string;\r\n address: Address;\r\n createdAt: Date;\r\n pendency: Pendency;\r\n}\r\n","class Pendency {\n question: string;\n answer: string;\n}\n\nexport class ManipulatedProfile {\n static get skinTypes() {\n return [\n { label: 'Fototipo I', value: 1 },\n { label: 'Fototipo II', value: 2 },\n { label: 'Fototipo III', value: 3 },\n { label: 'Fototipo IV', value: 4 },\n { label: 'Fototipo V', value: 5 }\n ];\n }\n\n static get degreesOfOiliness() {\n return [\n { label: 'Normal', value: 1 },\n { label: 'Oleosa', value: 2 },\n { label: 'Seca', value: 3 },\n { label: 'Mista', value: 4 }\n ];\n }\n\n static get treatments() {\n return [\n { label: 'Oral', value: 1 },\n { label: 'Topico', value: 2 },\n { label: 'Ambos', value: 3 }\n ];\n }\n\n static get proceduresOptions() {\n return [\n { label: 'Ultrassom Microfocada', value: 1 },\n { label: 'Radiofrequencia', value: 2 },\n { label: 'Microagulhamento', value: 3 },\n { label: 'Luz pulsada', value: 4 },\n { label: 'Peeling', value: 5 },\n { label: 'Prenchimento', value: 6 },\n { label: 'Toxina Butolinica', value: 7 },\n { label: 'Bioestimulador', value: 8 }\n ];\n }\n static get proceduresTime() {\n return [\n { label: 'Hoje', value: 1 },\n { label: 'Ate uma semana', value: 2 },\n { label: 'Ate quinze dias', value: 3 },\n { label: 'Ate 30 dias', value: 4 },\n { label: 'Mais de 30 dias', value: 5 }\n ];\n }\n\n static get treatmentRoutinesOptions() {\n return [\n { label: 'Limpeza', value: 1 },\n { label: 'Tonificação', value: 2 },\n { label: 'Hidratação', value: 3 },\n { label: 'Fotoproteção', value: 4 },\n { label: 'Tratamento especifico', value: 5 }\n ];\n }\n\n static get pathologiesOptions() {\n return [\n { label: 'Acene', value: 1 },\n { label: 'Rosacea', value: 2 },\n { label: 'Melanoses', value: 3 },\n { label: 'Fotoenvelhecimento agudo', value: 4 },\n { label: 'Dermatite atópica', value: 5 },\n { label: 'Psioriase', value: 6 },\n { label: 'Melasma', value: 7 },\n { label: 'Outra(Será criado posteriormente uma fórrmula adicional se necessário)', value: 8 }\n ];\n }\n\n static RASCUNHO = 'Rascunho';\n static ENVIADO = 'Enviado';\n _id: any;\n patient: any;\n prescriber: any;\n weight: number;\n height: number;\n skinType: number;\n oilinessDegree: number;\n photoaging: number;\n procedures: number[];\n pigmentation: number;\n skinflaccidity: number;\n sensitivity: number;\n wrinklesdepth: number;\n hydrationlevel: number;\n procedureTime: number;\n requiredTreatment: number;\n treatmentRoutines: number[];\n pathologies: number[];\n status: string;\n dosage: string;\n pendency: Pendency;\n medicaments: any[];\n}\n","import { Address } from './address';\nimport { Membership } from './membership';\nimport { Crf } from './crf';\nimport { MedicalData } from './medical-data';\nimport { User } from './decodedLoginToken';\n\nexport class Pharmacist {\n _id: string;\n userId: string;\n name: string;\n cpf: string;\n identity: string;\n telephone: string;\n cellphone: string;\n sex: string;\n dateOfBirth: Date;\n membership: Membership;\n maritalStatus: string;\n color: string;\n profession: string;\n schooling: string;\n address: Address;\n medicalData: MedicalData;\n user: User;\n crf: Crf;\n}\n","import { Component, OnDestroy, OnInit, ViewChild } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { AuthService } from '@app/core/services/auth.service';\nimport { DocumentService } from '@app/modules/document/services/document.service';\nimport { PrescriptionService } from '@app/modules/document/services/prescription.service';\nimport { RetentionService } from '@app/modules/document/services/retention.service';\nimport { ModalCancelRetentionComponent } from '@app/modules/historic/modal-cancel-retention/modal-cancel-retention.component';\nimport { PatientsService } from '@app/modules/patients/services/patients.service';\nimport { PharmacyService } from '@app/modules/pharmacy/services/pharmacy.service';\nimport { ModalSendDocumentComponent } from '@app/shared/components/modal-send-document/modal-send-document.component';\nimport { HealthProfessional, Patient } from '@app/shared/models';\nimport { Attestation } from '@app/shared/models/attestation';\nimport { User } from '@app/shared/models/decodedLoginToken';\nimport { Exam } from '@app/shared/models/exam';\nimport { Orientation } from '@app/shared/models/orientation';\nimport { Prescription } from '@app/shared/models/prescription';\nimport { AppToastService } from '@app/shared/services/app-toast.service';\nimport { StateService } from '@app/shared/services/state.service';\nimport { NzModalService } from 'ng-zorro-antd/modal';\nimport { AttestationService } from '../document/pages/attestation/attestation.service';\nimport { OrientationService } from '../document/pages/orientation/orientation.service';\nimport { ExamService } from '../document/services/exam.service';\nimport { HealthProfessionalService } from '../health-professional/services/health-professional.service';\nimport { nativeAsync } from '@app/shared/decorators/nativeAsync';\n\n@Component({\n selector: 'app-historic',\n templateUrl: './historic.component.html',\n styleUrls: ['./historic.component.scss']\n})\nexport class HistoricComponent implements OnInit, OnDestroy {\n navTitle: string;\n retentions: any[] = [];\n prescriptions: any[] = [];\n attestations: Attestation[] = [];\n exams: Exam[] = [];\n orientations: Orientation[] = [];\n retentionOfThirdParties: any[] = [];\n pharmacyId: string;\n loading: boolean;\n loadingFilter: boolean;\n patient: Patient;\n userType = '';\n patientId = '';\n selectedTabIndex = 0;\n filter: any = {};\n pageSize = 7;\n selectedTab = 'prescription';\n tabs = [];\n paginationData = [\n { skip: 0, totalRecord: 0, orderBy: 'updatedAt', sortOrder: -1 },\n { skip: 0, totalRecord: 0, orderBy: 'updatedAt', sortOrder: -1 },\n { skip: 0, totalRecord: 0, orderBy: 'updatedAt', sortOrder: -1 },\n { skip: 0, totalRecord: 0, orderBy: 'updatedAt', sortOrder: -1 }\n ];\n healthProfessional: HealthProfessional;\n scrollConfig = { x: '1010px' };\n isVisibleModalCancelRetention = false;\n\n @ViewChild(ModalSendDocumentComponent, { static: true })\n modalSendDocumentComponent: ModalSendDocumentComponent;\n\n constructor(\n private authService: AuthService,\n private patientService: PatientsService,\n private pharmacyService: PharmacyService,\n private documentService: DocumentService,\n private prescriptionService: PrescriptionService,\n private attestationService: AttestationService,\n private examsService: ExamService,\n private orientationService: OrientationService,\n private retentionService: RetentionService,\n private healthProfessionalService: HealthProfessionalService,\n private modalService: NzModalService,\n private notification: AppToastService,\n private router: Router,\n private route: ActivatedRoute,\n private stateService: StateService\n ) {}\n\n @nativeAsync\n async ngOnInit() {\n this.userType = this.user.userType;\n this.navTitle = this.user.userType === 'pharmacy' ? 'Retenções' : 'Histórico de Documentos';\n this.tabs =\n this.user.userType === 'pharmacy'\n ? ['prescription', 'retentionOfThirdParties']\n : ['prescription', 'attestation', 'exam', 'orientation'];\n\n if (this.user.userType === 'patient') {\n this.loading = true;\n this.patient = await this.patientService.getPatientByUserId(this.user._id).toPromise();\n } else if (this.user.userType === 'healthProfessional') {\n this.loading = true;\n this.healthProfessional = await this.healthProfessionalService\n .getHealthProfessional(this.user._id)\n .toPromise();\n }\n\n const { patientId } = this.route.snapshot.queryParams;\n if (patientId) {\n this.patientId = patientId;\n }\n\n await this.initData();\n }\n @nativeAsync\n async initData() {\n try {\n this.loading = true;\n const filter = this.getBaseFilter();\n await this.loadPrescriptions(filter);\n this.loading = false;\n await this.loadAttestations(filter);\n await this.loadExams(filter);\n await this.loadOrientations(filter);\n await this.loadRetentionOfThirdParties(filter);\n } catch (error) {\n console.error(error);\n this.loading = false;\n }\n }\n\n get user(): User {\n return this.authService.user();\n }\n\n get dependents() {\n if (this.patient) {\n const dependents: any = this.patient.dependents;\n const pets: any = this.patient.pets;\n return dependents.concat(pets);\n }\n }\n @nativeAsync\n async loadData() {\n try {\n this.loadingFilter = true;\n const filter = this.getBaseFilter();\n this.prescriptions = [];\n this.retentionOfThirdParties = [];\n this.attestations = [];\n this.orientations = [];\n this.exams = [];\n switch (this.selectedTab) {\n case 'prescription':\n await this.loadPrescriptions(filter);\n break;\n case 'retentionOfThirdParties':\n await this.loadRetentionOfThirdParties(filter);\n break;\n case 'attestation':\n await this.loadAttestations(filter);\n break;\n case 'orientation':\n await this.loadOrientations(filter);\n break;\n default:\n await this.loadExams(filter);\n }\n this.loadingFilter = false;\n } catch (error) {\n this.loadingFilter = false;\n }\n }\n @nativeAsync\n async loadPrescriptions(filter) {\n let result = null;\n switch (this.user.userType) {\n case 'healthProfessional':\n result = await this.prescriptionService\n .getPrescriptionsByPrescriberUserId(this.user._id, filter)\n .toPromise();\n break;\n\n case 'pharmacy':\n result = await this.pharmacyService\n .getRetentionHistoryByFilter(this.user._id, filter)\n .toPromise();\n break;\n default:\n result = await this.prescriptionService\n .getPrescriptionsByPatientId(filter.dependent || this.patient._id, filter)\n .toPromise();\n }\n if (result) {\n this.prescriptions = result.prescriptions;\n this.paginationData[0].totalRecord = result.totalRecord;\n }\n }\n @nativeAsync\n async loadAttestations(filter) {\n let result = null;\n switch (this.user.userType) {\n case 'healthProfessional':\n result = await this.attestationService\n .getAttestationsByPrescriberUserId(this.user._id, filter)\n .toPromise();\n break;\n case 'patient':\n result = await this.attestationService\n .getAttestationsByPatientId(this.patient._id, filter)\n .toPromise();\n break;\n default:\n this.attestations = [];\n }\n if (result) {\n this.attestations = result.attestations;\n this.paginationData[1].totalRecord = result.totalRecord;\n }\n }\n @nativeAsync\n async loadExams(filter) {\n let result = null;\n switch (this.user.userType) {\n case 'healthProfessional':\n result = await this.examsService.getExamsByPrescriberUserId(this.user._id, filter).toPromise();\n break;\n case 'patient':\n result = await this.examsService.getExamsByPatientId(this.patient._id, filter).toPromise();\n break;\n default:\n this.exams = [];\n }\n if (result) {\n this.exams = result.exams;\n this.paginationData[2].totalRecord = result.totalRecord;\n }\n }\n @nativeAsync\n async loadOrientations(filter) {\n let result = null;\n switch (this.user.userType) {\n case 'healthProfessional':\n result = await this.orientationService\n .getOrientationsByPrescriberUserId(this.user._id, filter)\n .toPromise();\n break;\n case 'patient':\n result = await this.orientationService\n .getOrientationsByPatientId(this.patient._id, filter)\n .toPromise();\n break;\n default:\n this.orientations = [];\n }\n if (result) {\n this.orientations = result.orientations;\n this.paginationData[3].totalRecord = result.totalRecord;\n }\n }\n @nativeAsync\n async loadRetentionOfThirdParties(filter) {\n if (this.user.userType === 'pharmacy') {\n const result = await this.retentionService\n .getRetentionOfThirdPartiesHistoryByFilter(this.user._id, filter)\n .toPromise();\n this.retentionOfThirdParties = result.retentionOfThirdParties;\n this.paginationData[1].totalRecord = result.totalRecord;\n }\n }\n\n ngOnDestroy(): void {\n window.sessionStorage.clear();\n }\n\n getBaseFilter() {\n return {\n ...this.filter,\n patientId: this.patientId,\n limit: this.pageSize,\n skip: this.paginationData[this.selectedTabIndex].skip,\n orderBy: this.paginationData[this.selectedTabIndex].orderBy,\n sortOrder: this.paginationData[this.selectedTabIndex].sortOrder,\n professionalType: this.healthProfessional && this.healthProfessional.professionalType\n };\n }\n @nativeAsync\n async search(filter) {\n delete this.patientId;\n this.filter = filter;\n this.paginationData[this.selectedTabIndex].skip = 0;\n this.loadData();\n }\n @nativeAsync\n async loadPrescriptionByPharmacy() {\n this.prescriptions = await this.pharmacyService.getRetentionHistory(this.user._id).toPromise();\n }\n @nativeAsync\n async pageIndexChanged(pageIndex: any) {\n this.paginationData[this.selectedTabIndex].skip = this.pageSize * (pageIndex - 1);\n await this.loadData();\n }\n\n tabChange(args: any): void {\n this.selectedTabIndex = args.index;\n this.selectedTab = this.tabs[this.selectedTabIndex];\n this.loadData();\n }\n\n getPreWriterInfo(prescription) {\n const prescriber = {\n name: '',\n label: '',\n regionalCouncil: { label: '', number: 0, uf: '' },\n specialties: ''\n };\n\n if (prescription && prescription.healthProfessional) {\n const { professionalType, name, regionalCouncilNumber } = prescription.healthProfessional;\n\n prescriber.label = HealthProfessional.getProfessionalTypeName(professionalType);\n prescriber.name = name;\n prescriber.regionalCouncil.label = HealthProfessional.getRegionalCouncilLabel(professionalType);\n prescriber.regionalCouncil.number = regionalCouncilNumber.number;\n prescriber.regionalCouncil.uf = regionalCouncilNumber.uf;\n }\n return prescriber;\n }\n @nativeAsync\n async downloadPrescriptionPdf(prescription) {\n try {\n this.loading = true;\n if (prescription.status === 'Não Assinada') {\n await this.prescriptionService.generatePdf(prescription.code);\n } else {\n await this.prescriptionService.downloadOrGeneratePdf(prescription.code);\n }\n this.notification.notify('success', 'Sucesso', 'Download realizado com sucesso!');\n } catch (err) {\n console.error(err);\n }\n this.loading = false;\n }\n @nativeAsync\n async downloadPrescriptionPdfOfThirdParties(retention) {\n try {\n this.loading = true;\n await this.retentionService.downloadThirdPartyPdf(retention._id);\n } catch (err) {\n console.error(err);\n if (err.status === 404) {\n this.notification.notify('warning', 'Aviso', 'PDF não encontrado');\n }\n }\n this.loading = false;\n }\n @nativeAsync\n async showModalCancelPrescrition(prescription) {\n const code = prescription.code;\n const isCodeRennova = code.substring(0, 3) === 'REN';\n let nzContent =\n `Tem certeza que deseja excluir <b>permanentemente</b> o documento ${code}? ` +\n 'Esta ação impedirá que o paciente acesse o documento na plataforma e a farmácia ' +\n 'não poderá validá-lo no processo de venda do medicamento.';\n if (isCodeRennova) {\n nzContent =\n `Tem certeza que deseja excluir <b>permanentemente</b> o documento ${code}? ` +\n 'Esta ação impedirá que Rennova visualize o documento e dê andamento ao processo de venda do medicamento.';\n }\n this.modalService.confirm({\n nzTitle: 'Alerta',\n nzContent,\n nzOnOk: () => {\n this.prescriptionService.delete(prescription._id).subscribe(\n _ => {\n this.notification.notify('success', 'Sucesso', 'Prescrição excluÃda com sucesso');\n this.loadPrescriptions(this.getBaseFilter());\n },\n err => {\n this.notification.notify('warning', 'Aviso', err.error.message);\n }\n );\n }\n });\n return false;\n }\n @nativeAsync\n async showModalCancelExam(exam) {\n this.modalService.confirm({\n nzTitle: 'Alerta',\n nzContent:\n `Tem certeza que deseja excluir <b>permanentemente</b> o documento ${exam.code}? ` +\n 'Esta ação impedirá que o paciente acesse o documento na plataforma e o ' +\n '<b>Laboratório/ClÃnica</b> não poderá validá-lo na prestação do serviço.',\n nzOnOk: () => {\n this.examsService.delete(exam._id).subscribe(\n _ => {\n this.notification.notify('success', 'Sucesso', 'Exame excluÃdo com sucesso');\n this.loadExams(this.getBaseFilter());\n },\n err => {\n this.notification.notify('warning', 'Aviso', err.error.message);\n }\n );\n }\n });\n return false;\n }\n @nativeAsync\n async showModalCancelAttestation(exam) {\n this.modalService.confirm({\n nzTitle: 'Alerta',\n nzContent:\n `Tem certeza que deseja excluir <b>permanentemente</b> o documento ${exam.code}? ` +\n 'Esta ação impedirá que o paciente acesse o documento na plataforma.',\n nzOnOk: () => {\n this.attestationService.delete(exam._id).subscribe(\n _ => {\n this.notification.notify('success', 'Sucesso', 'Exame excluÃdo com sucesso');\n this.loadAttestations(this.getBaseFilter());\n },\n err => {\n this.notification.notify('warning', 'Aviso', err.error.message);\n }\n );\n }\n });\n return false;\n }\n @nativeAsync\n async showModalCancelOrientation(orientation) {\n this.modalService.confirm({\n nzTitle: 'Alerta',\n nzContent:\n `Tem certeza que deseja excluir <b>permanentemente</b> o documento ${orientation.code}? ` +\n 'Esta ação impedirá que o paciente acesse o documento na plataforma e a ' +\n '<b>Instituição/Empresa</b> não poderá reconhecê-lo como válido.',\n nzOnOk: () => {\n this.orientationService.delete(orientation._id).subscribe(\n _ => {\n this.notification.notify('success', 'Sucesso', 'Documento excluÃdo com sucesso');\n this.loadOrientations(this.getBaseFilter());\n },\n err => {\n this.notification.notify('warning', 'Aviso', err.error.message);\n }\n );\n }\n });\n return false;\n }\n\n showModalCancelRetention(retention, isRetentionsThirdParties = false) {\n const modal = this.modalService.create({\n nzContent: ModalCancelRetentionComponent,\n nzComponentParams: {\n userId: this.user._id,\n retentionId: retention._id,\n isRetentionsThirdParties\n },\n nzFooter: null\n });\n modal.afterOpen.subscribe(() => {\n modal\n .getContentComponent()\n .updateListPrescriptionEvent.subscribe(data => this.search(this.filter));\n });\n }\n\n showModalSendDocument(item: Prescription) {\n const title = 'Documento Assinado';\n this.modalSendDocumentComponent.createTplModal(item.code, item.patient._id || item.pet._id, {\n title,\n resend: true,\n isPet: !!item.pet\n });\n }\n\n archiveItem(code: string) {\n this.modalService.confirm({\n nzTitle: 'Alerta',\n nzContent: `Tem certeza que deseja arquivar o documento ${code}? Você poderá acessá-lo novamente através do filtro \"Arquivados\".`,\n nzOnOk: () =>\n this.documentService.archive(code).subscribe(\n res => this.initData(),\n err => this.notification.notify('error', 'Aviso', 'Erro ao arquivar documento')\n )\n });\n }\n\n unarchiveItem(code: string) {\n this.modalService.confirm({\n nzTitle: 'Alerta',\n nzContent: `Tem certeza que deseja <b>desarquivar</b> o documento ${code}?`,\n nzOnOk: () =>\n this.documentService.unarchive(code).subscribe(\n res => this.initData(),\n err => this.notification.notify('error', 'Aviso', 'Erro ao desarquivar documento')\n )\n });\n }\n\n navigateToNew({ code, version }, document: string) {\n const regex = /^[a-z]/i;\n const queryParams = regex.test(code[0]) ? {} : { queryParams: { document } };\n const path = version === 'BETA' ? '/document' : '/prescription';\n this.router.navigate([path, code, 'new'], queryParams);\n }\n\n navigateToEdit({ code, version }, documentType: string) {\n const regex = /^[a-z]/i;\n const queryParams = regex.test(code[0]) ? {} : { queryParams: { documentType } };\n const rennovaFeature = this.user.features && this.user.features.find(f => f.name === 'Rennova');\n this.stateService.data = { isRennova: rennovaFeature && code.substring(0, 3) === 'REN' };\n const path = version === 'BETA' ? '/document' : '/prescription';\n this.router.navigate([path, code, 'edit'], queryParams);\n }\n @nativeAsync\n async onSortChange(params) {\n this.paginationData[this.selectedTabIndex].orderBy = params.key;\n this.paginationData[this.selectedTabIndex].sortOrder = params.value === 'descend' ? -1 : 1;\n await this.loadData();\n }\n\n hasSignedItem(items: any[]): boolean {\n return items.some(i => i.status === 'Assinada');\n }\n\n getMaleStatus(status: string) {\n switch (status) {\n case 'Assinada':\n return 'Assinado';\n case 'Não Assinada':\n return 'Não Assinado';\n case 'Dispensada Parcial':\n return 'Dispensado Parcial';\n case 'Dispensada Total':\n return 'Dispensado Total';\n case 'ExcluÃda':\n return 'ExcluÃdo';\n }\n }\n}\n","export default \"<app-alternative-navbar [title]=\\\"navTitle\\\" titleIcon=\\\"fas fa-history\\\"></app-alternative-navbar>\\n<app-sidebar-menu></app-sidebar-menu>\\n\\n<div class=\\\"container historic\\\">\\n <app-form-filter\\n [userType]=\\\"userType\\\"\\n [tab]=\\\"selectedTab\\\"\\n [dependents]=\\\"dependents\\\"\\n (search)=\\\"search($event)\\\"\\n [isVet]=\\\"healthProfessional?.professionalType === 'veterinarian'\\\"\\n ></app-form-filter>\\n\\n <div>\\n <nz-tabset (nzSelectChange)=\\\"tabChange($event)\\\">\\n <nz-tab nzTitle=\\\"Receitas locais\\\">\\n <nz-table\\n #nzTable\\n [nzData]=\\\"prescriptions\\\"\\n [nzLoading]=\\\"loading\\\"\\n [nzTotal]=\\\"paginationData[0].totalRecord\\\"\\n [nzPageSize]=\\\"pageSize\\\"\\n nzFrontPagination=\\\"false\\\"\\n (nzPageIndexChange)=\\\"pageIndexChanged($event)\\\"\\n nzNoResult=\\\"Você não possui nenhuma prescrição\\\"\\n [nzScroll]=\\\"scrollConfig\\\"\\n >\\n <thead nzAlign=\\\"center\\\" (nzSortChange)=\\\"onSortChange($event)\\\">\\n <tr>\\n <th nzShowExpand></th>\\n <th *ngIf=\\\"userType === 'pharmacy'\\\" nzShowSort nzSortKey=\\\"updatedAt\\\">\\n Data da Dispensação\\n </th>\\n <th\\n *ngIf=\\\"userType === 'patient' || userType === 'healthProfessional'\\\"\\n nzShowSort\\n nzSortKey=\\\"updatedAt\\\"\\n >\\n Data de atualização\\n </th>\\n <th>Código da prescrição</th>\\n <th *ngIf=\\\"userType === 'healthProfessional'\\\"></th>\\n <th *ngIf=\\\"userType === 'pharmacy'\\\">CPF do comprador</th>\\n <th *ngIf=\\\"userType === 'pharmacy'\\\">Código da dispensação</th>\\n <th *ngIf=\\\"userType === 'pharmacy'\\\">Registro do Prescritor</th>\\n <th *ngIf=\\\"userType === 'patient'\\\" nzShowSort nzSortKey=\\\"healthProfessional.name\\\">\\n Médico(a)/Dentista Prescritor(a)\\n </th>\\n <th *ngIf=\\\"userType === 'healthProfessional'\\\" nzShowSort nzSortKey=\\\"patient.name\\\">\\n Paciente\\n </th>\\n <th *ngIf=\\\"userType !== 'pharmacy'\\\">Status</th>\\n <th>Ações</th>\\n </tr>\\n </thead>\\n <tbody>\\n <ng-template ngFor let-item [ngForOf]=\\\"nzTable.data\\\" *ngIf=\\\"userType === 'pharmacy'\\\">\\n <ng-container>\\n <tr>\\n <td nzShowExpand [(nzExpand)]=\\\"item.expand\\\"></td>\\n <td>{{ item.updatedAt | date: 'dd/MM/yyyy, HH:mm' }}</td>\\n <td>{{ item.prescription?.code }}</td>\\n <td>{{ item.cpfBuyer | formattedCpf }}</td>\\n <td>{{ item.dispensationCode }}</td>\\n <td>\\n {{ item.healthProfessional?.regionalCouncilNumber.number }}\\n </td>\\n <td *ngIf=\\\"userType !== 'pharmacy'\\\">{{ item.prescription?.status }}</td>\\n <td>\\n <div class=\\\"row justify-content-start\\\">\\n <div [ngClass]=\\\"user.userType === 'pharmacy' ? 'col' : 'col-2'\\\">\\n <div\\n (click)=\\\"\\n downloadPrescriptionPdf({\\n code: item.prescription.code,\\n patient: item.patient\\n })\\n \\\"\\n title=\\\"Baixar prescrição\\\"\\n >\\n <i\\n nz-icon\\n nzType=\\\"file-pdf\\\"\\n nzTheme=\\\"twotone\\\"\\n nzTwotoneColor=\\\"#B22222\\\"\\n class=\\\"icon-pdf\\\"\\n ></i>\\n </div>\\n </div>\\n <div [ngClass]=\\\"user.userType === 'pharmacy' ? 'col' : 'col-2'\\\">\\n <a\\n title=\\\"Cancelar retenção\\\"\\n (click)=\\\"showModalCancelRetention(item)\\\"\\n *ngIf=\\\"\\n item.prescription.status === 'Dispensada' ||\\n item.prescription.status === 'Dispensada Parcial' ||\\n item.prescription.status === 'Dispensada Total'\\n \\\"\\n >\\n <i class=\\\"fa fa-trash-solid\\\"></i>\\n </a>\\n </div>\\n </div>\\n </td>\\n </tr>\\n <tr [(nzExpand)]=\\\"item.expand\\\" *ngFor=\\\"let medicament of item.medicaments\\\">\\n <td></td>\\n <td colspan=\\\"5\\\">\\n <span class=\\\"title\\\"> {{ getPreWriterInfo(item).label }}: </span>\\n <span>{{ getPreWriterInfo(item).name }}</span>\\n <br />\\n <div class=\\\"d-flex\\\">\\n <span class=\\\"title\\\"> Medicamento: </span>\\n <span class=\\\"break-line\\\"> {{ medicament.description }}</span>\\n </div>\\n <span class=\\\"title\\\"> Quantidade prescrita: </span\\n ><span> {{ medicament.prescribedQuantity }}</span>\\n <br />\\n <span class=\\\"title\\\"> Quantidade retida: </span\\n ><span> {{ medicament.quantityRetained }}</span>\\n <br />\\n <br />\\n <div *ngIf=\\\"item.buyer\\\">\\n <span class=\\\"title\\\"> Nome do comprador: </span><span> {{ item.buyer?.name }}</span>\\n <br />\\n <span class=\\\"title\\\"> RG do comprador: </span\\n ><span> {{ item.buyer?.identity }}</span>\\n <br />\\n <span class=\\\"title\\\"> Endereço do comprador: </span\\n ><span>\\n {{ item.buyer?.address.street }}, {{ item.buyer?.address.number }},\\n {{ item.buyer?.address.neighborhood }} - {{ item.buyer?.address.uf }}</span\\n >\\n </div>\\n </td>\\n </tr>\\n </ng-container>\\n </ng-template>\\n\\n <ng-template\\n ngFor\\n let-item\\n [ngForOf]=\\\"nzTable.data\\\"\\n *ngIf=\\\"userType === 'patient' || userType === 'healthProfessional'\\\"\\n >\\n <ng-container>\\n <tr>\\n <td nzShowExpand [(nzExpand)]=\\\"item.expand\\\"></td>\\n <td>{{ item.updatedAt | date: 'dd/MM/yyyy, HH:mm' }}</td>\\n <td>{{ item.code }}</td>\\n <td *ngIf=\\\"userType === 'patient'\\\">\\n {{ item.healthProfessional?.name }}\\n </td>\\n <td *ngIf=\\\"userType === 'healthProfessional'\\\" class=\\\"p-0\\\">\\n <img\\n *ngIf=\\\"item.patient?.responsible\\\"\\n src=\\\"assets/icons/hand-holding-medical.svg\\\"\\n width=\\\"22px\\\"\\n />\\n </td>\\n <td *ngIf=\\\"userType === 'healthProfessional'\\\" class=\\\"pl-0\\\">\\n {{ item.patient?.name || item.pet?.name }}\\n <span\\n class=\\\"responsible-name\\\"\\n *ngIf=\\\"item.patient?.responsible || item.pet?.responsible\\\"\\n ><br />RESPONSÃVEL:\\n {{ item.patient.responsible?.name || item.pet.responsible?.name }}\\n </span>\\n </td>\\n <td *ngIf=\\\"userType !== 'pharmacy'\\\">{{ item.status }}</td>\\n <td>\\n <div class=\\\"row justify-content-start\\\">\\n <div\\n class=\\\"col-2\\\"\\n *ngIf=\\\"\\n item.status !== 'Não Assinada' ||\\n healthProfessional?.professionalType === 'veterinarian'\\n \\\"\\n >\\n <div (click)=\\\"downloadPrescriptionPdf(item)\\\" title=\\\"Baixar prescrição\\\">\\n <i\\n nz-icon\\n nzType=\\\"file-pdf\\\"\\n nzTheme=\\\"twotone\\\"\\n nzTwotoneColor=\\\"#B22222\\\"\\n class=\\\"icon-pdf\\\"\\n ></i>\\n </div>\\n </div>\\n\\n <div\\n *ngIf=\\\"userType === 'healthProfessional' && item.status !== 'Não Assinada'\\\"\\n class=\\\"col-2\\\"\\n >\\n <a title=\\\"Repetir prescrição\\\" (click)=\\\"navigateToNew(item, 'prescription')\\\">\\n <i class=\\\"fa fa-repeat\\\"></i>\\n </a>\\n </div>\\n\\n <div\\n *ngIf=\\\"userType === 'healthProfessional' && item.status === 'Não Assinada'\\\"\\n class=\\\"col-2\\\"\\n >\\n <a title=\\\"Editar prescrição\\\" (click)=\\\"navigateToEdit(item, 'prescription')\\\">\\n <i class=\\\"fa fa-pencil-solid\\\"></i>\\n </a>\\n </div>\\n\\n <div\\n class=\\\"col-2\\\"\\n *ngIf=\\\"userType === 'healthProfessional' && hasSignedItem(prescriptions)\\\"\\n >\\n <a\\n *ngIf=\\\"item.status === 'Assinada' || item.status === 'Dispensada Parcial'\\\"\\n title=\\\"Reenviar prescrição\\\"\\n (click)=\\\"showModalSendDocument(item)\\\"\\n >\\n <img src=\\\"assets/icons/reenvio.png\\\" width=\\\"22px\\\" />\\n </a>\\n </div>\\n\\n <div class=\\\"col-2\\\" *ngIf=\\\"userType !== 'pharmacy' && !item.archived\\\">\\n <a title=\\\"Arquivar\\\" (click)=\\\"archiveItem(item.code)\\\">\\n <i class=\\\"fas fa-archive\\\"></i>\\n </a>\\n </div>\\n\\n <div class=\\\"col-2\\\" *ngIf=\\\"userType !== 'pharmacy' && item.archived\\\">\\n <a title=\\\"Desarquivar\\\" (click)=\\\"unarchiveItem(item.code)\\\">\\n <i class=\\\"fas fa-inbox\\\"></i>\\n </a>\\n </div>\\n\\n <div class=\\\"col-2\\\">\\n <a\\n title=\\\"Excluir prescrição\\\"\\n (click)=\\\"showModalCancelPrescrition(item)\\\"\\n *ngIf=\\\"\\n (item.status === 'Não Assinada' || item.status === 'Assinada') &&\\n userType === 'healthProfessional'\\n \\\"\\n >\\n <i class=\\\"fa fa-trash-solid\\\"></i>\\n </a>\\n </div>\\n </div>\\n </td>\\n </tr>\\n <tr [nzExpand]=\\\"item.expand\\\">\\n <td></td>\\n <td colspan=\\\"6\\\">\\n <ng-container *ngIf=\\\"item.code.substring(0, 3) === 'REN'; else templateMedicament\\\">\\n <div *ngFor=\\\"let productItem of item.productsRennova; let i = index\\\" class=\\\"row\\\">\\n <div class=\\\"col-sm-3\\\">\\n {{ i + 1 }})<span> {{ productItem.product.name }}</span>\\n </div>\\n <div class=\\\"col-sm\\\" *ngIf=\\\"productItem.product as product\\\">\\n <div *ngFor=\\\"let item of product.items\\\">\\n <span style=\\\"font-size: 14px; font-weight: bold;\\\">{{ item.name }}</span>\\n <ul *ngIf=\\\"item.descriptions.length > 0\\\">\\n <li *ngFor=\\\"let obj of item.descriptions\\\">\\n <div class=\\\"d-flex\\\">\\n <span style=\\\"font-family: monospace; font-size: 12px;\\\">\\n {{ obj?.fullDescription }}\\n </span>\\n </div>\\n </li>\\n </ul>\\n </div>\\n </div>\\n <div class=\\\"col-sm-3\\\">\\n <span>[{{ productItem.prescribedQuantity }}] Embalagem</span>\\n </div>\\n </div>\\n </ng-container>\\n <ng-template #templateMedicament>\\n <div *ngFor=\\\"let medicament of item.medicaments; let i = index\\\" class=\\\"row\\\">\\n <div class=\\\"col-sm\\\">\\n {{ i + 1 }})<span> {{ medicament.name }}</span>\\n </div>\\n <div class=\\\"col-sm\\\">\\n <span>{{ medicament.dosage }}</span>\\n </div>\\n <div class=\\\"col-sm\\\">\\n <span>[{{ medicament.prescribedQuantity }}] Embalagem</span>\\n </div>\\n </div>\\n </ng-template>\\n </td>\\n </tr>\\n </ng-container>\\n </ng-template>\\n </tbody>\\n </nz-table>\\n </nz-tab>\\n\\n <nz-tab nzTitle=\\\"Atestados\\\" *ngIf=\\\"userType === 'healthProfessional' || userType === 'patient'\\\">\\n <nz-table\\n #nzTable\\n [nzData]=\\\"attestations\\\"\\n [nzLoading]=\\\"loading\\\"\\n [nzTotal]=\\\"paginationData[1].totalRecord\\\"\\n [nzPageSize]=\\\"pageSize\\\"\\n (nzPageIndexChange)=\\\"pageIndexChanged($event)\\\"\\n nzFrontPagination=\\\"false\\\"\\n nzNoResult=\\\"Você não possui nenhum atestado\\\"\\n [nzScroll]=\\\"scrollConfig\\\"\\n >\\n <thead nzAlign=\\\"center\\\" (nzSortChange)=\\\"onSortChange($event)\\\">\\n <tr>\\n <th nzShowExpand></th>\\n <th nzShowSort nzSortKey=\\\"updatedAt\\\">\\n Data de atualização\\n </th>\\n <th>Código do atestado</th>\\n <th *ngIf=\\\"userType === 'healthProfessional'\\\"></th>\\n <th *ngIf=\\\"userType === 'patient'\\\">Médico(a)/Dentista Prescritor(a)</th>\\n <th *ngIf=\\\"userType === 'healthProfessional'\\\" nzShowSort nzSortKey=\\\"patient.name\\\">\\n Paciente\\n </th>\\n <th>Status</th>\\n <th>Ações</th>\\n </tr>\\n </thead>\\n <tbody>\\n <ng-template\\n ngFor\\n let-item\\n [ngForOf]=\\\"nzTable.data\\\"\\n *ngIf=\\\"userType === 'patient' || userType === 'healthProfessional'\\\"\\n >\\n <ng-container>\\n <tr>\\n <td nzShowExpand [(nzExpand)]=\\\"item.expand\\\"></td>\\n <td>{{ item.updatedAt | date: 'dd/MM/yyyy, HH:mm' }}</td>\\n <td>{{ item.code }}</td>\\n <td *ngIf=\\\"userType === 'patient'\\\">\\n {{ item.healthProfessional?.name }}\\n </td>\\n <td *ngIf=\\\"userType === 'healthProfessional'\\\" class=\\\"p-0\\\">\\n <img\\n *ngIf=\\\"item.patient?.responsible\\\"\\n src=\\\"assets/icons/hand-holding-medical.svg\\\"\\n width=\\\"22px\\\"\\n />\\n </td>\\n <td *ngIf=\\\"userType === 'healthProfessional'\\\" class=\\\"pl-0\\\">\\n {{ item.patient?.name || item.pet?.name }}\\n <span\\n class=\\\"responsible-name\\\"\\n *ngIf=\\\"item.patient?.responsible || item.pet?.responsible\\\"\\n ><br />RESPONSÃVEL:\\n {{ item.patient.responsible?.name || item.pet.responsible?.name }}\\n </span>\\n </td>\\n <td>{{ getMaleStatus(item.status) }}</td>\\n <td>\\n <div class=\\\"row justify-content-start\\\">\\n <div class=\\\"col-2\\\">\\n <div\\n *ngIf=\\\"\\n item.status !== 'Não Assinada' ||\\n healthProfessional?.professionalType === 'veterinarian'\\n \\\"\\n (click)=\\\"downloadPrescriptionPdf(item)\\\"\\n title=\\\"Baixar atestado\\\"\\n >\\n <i\\n nz-icon\\n nzType=\\\"file-pdf\\\"\\n nzTheme=\\\"twotone\\\"\\n nzTwotoneColor=\\\"#B22222\\\"\\n class=\\\"icon-pdf\\\"\\n ></i>\\n </div>\\n </div>\\n <div\\n *ngIf=\\\"userType === 'healthProfessional' && item.status === 'Não Assinada'\\\"\\n class=\\\"col-2\\\"\\n >\\n <a title=\\\"Editar atestado\\\" (click)=\\\"navigateToEdit(item, 'attestation')\\\">\\n <i class=\\\"fa fa-pencil-solid\\\"></i>\\n </a>\\n </div>\\n\\n <div\\n *ngIf=\\\"userType === 'healthProfessional' && item.status !== 'Não Assinada'\\\"\\n class=\\\"col-2\\\"\\n >\\n <a title=\\\"Repetir atestado\\\" (click)=\\\"navigateToNew(item, 'attestation')\\\">\\n <i class=\\\"fa fa-repeat\\\"></i>\\n </a>\\n </div>\\n\\n <div\\n class=\\\"col-2\\\"\\n *ngIf=\\\"userType === 'healthProfessional' && hasSignedItem(attestations)\\\"\\n >\\n <a\\n *ngIf=\\\"item.status === 'Assinada'\\\"\\n title=\\\"Reenviar atestado\\\"\\n (click)=\\\"showModalSendDocument(item)\\\"\\n >\\n <img src=\\\"assets/icons/reenvio.png\\\" width=\\\"22px\\\" />\\n </a>\\n </div>\\n\\n <div class=\\\"col-2\\\" *ngIf=\\\"userType !== 'pharmacy' && !item.archived\\\">\\n <a title=\\\"Arquivar\\\" (click)=\\\"archiveItem(item.code)\\\">\\n <i class=\\\"fas fa-archive\\\"></i>\\n </a>\\n </div>\\n\\n <div class=\\\"col-2\\\" *ngIf=\\\"userType !== 'pharmacy' && item.archived\\\">\\n <a title=\\\"Desarquivar\\\" (click)=\\\"unarchiveItem(item.code)\\\">\\n <i class=\\\"fas fa-inbox\\\"></i>\\n </a>\\n </div>\\n\\n <div class=\\\"col-2\\\">\\n <a\\n title=\\\"Excluir atestado\\\"\\n (click)=\\\"showModalCancelAttestation(item)\\\"\\n *ngIf=\\\"\\n (item.status === 'Não Assinada' || item.status === 'Assinada') &&\\n userType === 'healthProfessional'\\n \\\"\\n >\\n <i class=\\\"fa fa-trash-solid\\\"></i>\\n </a>\\n </div>\\n </div>\\n </td>\\n </tr>\\n <tr [nzExpand]=\\\"item.expand\\\">\\n <td></td>\\n <td colspan=\\\"6\\\">\\n <span *ngFor=\\\"let text of item.description; let i = index\\\">\\n <br *ngIf=\\\"i > 0\\\" />\\n {{ text }}\\n <br />\\n </span>\\n </td>\\n </tr>\\n </ng-container>\\n </ng-template>\\n </tbody>\\n </nz-table>\\n </nz-tab>\\n\\n <nz-tab nzTitle=\\\"Exames\\\" *ngIf=\\\"userType === 'healthProfessional' || userType === 'patient'\\\">\\n <nz-table\\n #nzTable\\n [nzData]=\\\"exams\\\"\\n [nzLoading]=\\\"loading\\\"\\n nzFrontPagination=\\\"false\\\"\\n [nzPageSize]=\\\"pageSize\\\"\\n [nzTotal]=\\\"paginationData[2].totalRecord\\\"\\n (nzPageIndexChange)=\\\"pageIndexChanged($event)\\\"\\n [nzNoResult]=\\\"'Você não possui nenhum exame.'\\\"\\n [nzScroll]=\\\"scrollConfig\\\"\\n >\\n <thead nzAlign=\\\"center\\\" (nzSortChange)=\\\"onSortChange($event)\\\">\\n <tr>\\n <th nzShowExpand></th>\\n <th nzShowSort nzSortKey=\\\"updatedAt\\\">\\n Data de atualização\\n </th>\\n <th>Código do exame</th>\\n <th *ngIf=\\\"userType === 'healthProfessional'\\\"></th>\\n <th *ngIf=\\\"userType === 'pharmacy'\\\">Registro do Prescritor</th>\\n <th *ngIf=\\\"userType === 'patient'\\\">Médico(a)/Dentista Prescritor(a)</th>\\n <th *ngIf=\\\"userType === 'healthProfessional'\\\" nzShowSort nzSortKey=\\\"patient.name\\\">\\n Paciente\\n </th>\\n <th *ngIf=\\\"userType !== 'pharmacy'\\\">Status</th>\\n <th *ngIf=\\\"userType !== 'pharmacy'\\\">Ações</th>\\n </tr>\\n </thead>\\n <tbody>\\n <ng-template\\n ngFor\\n let-item\\n [ngForOf]=\\\"nzTable.data\\\"\\n *ngIf=\\\"userType === 'patient' || userType === 'healthProfessional'\\\"\\n >\\n <ng-container>\\n <tr>\\n <td nzShowExpand [(nzExpand)]=\\\"item.expand\\\"></td>\\n <td>{{ item.updatedAt | date: 'dd/MM/yyyy, HH:mm' }}</td>\\n <td>{{ item.code }}</td>\\n <td *ngIf=\\\"userType === 'patient'\\\">\\n {{ item.healthProfessional?.name }}\\n </td>\\n <td *ngIf=\\\"userType === 'healthProfessional'\\\" class=\\\"p-0\\\">\\n <img\\n *ngIf=\\\"item.patient?.responsible\\\"\\n src=\\\"assets/icons/hand-holding-medical.svg\\\"\\n width=\\\"22px\\\"\\n />\\n </td>\\n <td *ngIf=\\\"userType === 'healthProfessional'\\\" class=\\\"pl-0\\\">\\n {{ item.patient?.name || item.pet?.name }}\\n <span\\n class=\\\"responsible-name\\\"\\n *ngIf=\\\"item.patient?.responsible || item.pet?.responsible\\\"\\n ><br />RESPONSÃVEL:\\n {{ item.patient.responsible?.name || item.pet.responsible?.name }}\\n </span>\\n </td>\\n <td *ngIf=\\\"userType !== 'pharmacy'\\\">{{ getMaleStatus(item.status) }}</td>\\n <td>\\n <div class=\\\"row justify-content-start\\\">\\n <div class=\\\"col-2\\\">\\n <div\\n *ngIf=\\\"\\n item.status !== 'Não Assinada' ||\\n healthProfessional?.professionalType === 'veterinarian'\\n \\\"\\n (click)=\\\"downloadPrescriptionPdf(item)\\\"\\n title=\\\"Baixar exame\\\"\\n >\\n <i\\n nz-icon\\n nzType=\\\"file-pdf\\\"\\n nzTheme=\\\"twotone\\\"\\n nzTwotoneColor=\\\"#B22222\\\"\\n class=\\\"icon-pdf\\\"\\n ></i>\\n </div>\\n </div>\\n <div\\n *ngIf=\\\"userType === 'healthProfessional' && item.status === 'Não Assinada'\\\"\\n class=\\\"col-2\\\"\\n >\\n <a title=\\\"Editar exame\\\" (click)=\\\"navigateToEdit(item, 'exam')\\\">\\n <i class=\\\"fa fa-pencil-solid\\\"></i>\\n </a>\\n </div>\\n\\n <div\\n *ngIf=\\\"userType === 'healthProfessional' && item.status !== 'Não Assinada'\\\"\\n class=\\\"col-2\\\"\\n >\\n <a title=\\\"Repetir exame\\\" (click)=\\\"navigateToNew(item, 'exam')\\\">\\n <i class=\\\"fa fa-repeat\\\"></i>\\n </a>\\n </div>\\n\\n <div\\n class=\\\"col-2\\\"\\n *ngIf=\\\"userType === 'healthProfessional' && hasSignedItem(exams)\\\"\\n >\\n <a\\n *ngIf=\\\"item.status === 'Assinada'\\\"\\n title=\\\"Reenviar prescrição\\\"\\n (click)=\\\"showModalSendDocument(item)\\\"\\n >\\n <img src=\\\"assets/icons/reenvio.png\\\" width=\\\"22px\\\" />\\n </a>\\n </div>\\n\\n <div class=\\\"col-2\\\" *ngIf=\\\"userType !== 'pharmacy' && !item.archived\\\">\\n <a title=\\\"Arquivar\\\" (click)=\\\"archiveItem(item.code)\\\">\\n <i class=\\\"fas fa-archive\\\"></i>\\n </a>\\n </div>\\n\\n <div class=\\\"col-2\\\" *ngIf=\\\"userType !== 'pharmacy' && item.archived\\\">\\n <a title=\\\"Desarquivar\\\" (click)=\\\"unarchiveItem(item.code)\\\">\\n <i class=\\\"fas fa-inbox\\\"></i>\\n </a>\\n </div>\\n\\n <div class=\\\"col-2\\\">\\n <a\\n title=\\\"Excluir exame\\\"\\n (click)=\\\"showModalCancelExam(item)\\\"\\n *ngIf=\\\"\\n (item.status === 'Não Assinada' || item.status === 'Assinada') &&\\n userType === 'healthProfessional'\\n \\\"\\n >\\n <i class=\\\"fa fa-trash-solid\\\"></i>\\n </a>\\n </div>\\n </div>\\n </td>\\n </tr>\\n <tr [nzExpand]=\\\"item.expand\\\">\\n <td></td>\\n <td colspan=\\\"6\\\">\\n <div class=\\\"col\\\" *ngFor=\\\"let examItem of item.examList\\\">\\n <div class=\\\"row\\\">\\n <span class=\\\"title\\\">Material:</span\\n ><span class=\\\"break-line\\\"> {{ examItem.material }}</span>\\n </div>\\n <div class=\\\"row\\\">\\n <span class=\\\"title\\\">Exame:</span>\\n </div>\\n <div class=\\\"row\\\">\\n <ol>\\n <li *ngFor=\\\"let exam of examItem.exams\\\">{{ exam.name }}</li>\\n </ol>\\n </div>\\n </div>\\n <div class=\\\"col\\\" *ngIf=\\\"item.justification\\\">\\n <div class=\\\"row\\\">\\n <span class=\\\"title\\\">Justificativa:</span>\\n </div>\\n <div class=\\\"row\\\">\\n <span *ngFor=\\\"let text of item.justification; let i = index\\\">\\n <br *ngIf=\\\"i > 0\\\" />\\n {{ text }}\\n <br />\\n </span>\\n </div>\\n </div>\\n </td>\\n </tr>\\n </ng-container>\\n </ng-template>\\n </tbody>\\n </nz-table>\\n </nz-tab>\\n\\n <nz-tab\\n nzTitle=\\\"Outros documentos\\\"\\n *ngIf=\\\"userType === 'healthProfessional' || userType === 'patient'\\\"\\n >\\n <nz-table\\n #nzTable\\n [nzData]=\\\"orientations\\\"\\n [nzLoading]=\\\"loading\\\"\\n nzFrontPagination=\\\"false\\\"\\n [nzPageSize]=\\\"pageSize\\\"\\n [nzTotal]=\\\"paginationData[3].totalRecord\\\"\\n (nzPageIndexChange)=\\\"pageIndexChanged($event)\\\"\\n nzNoResult=\\\"Você não possui nenhum documento.\\\"\\n [nzScroll]=\\\"scrollConfig\\\"\\n >\\n <thead nzAlign=\\\"center\\\" (nzSortChange)=\\\"onSortChange($event)\\\">\\n <tr>\\n <th nzShowExpand></th>\\n <th nzShowSort nzSortKey=\\\"updatedAt\\\">\\n Data de atualização\\n </th>\\n <th>Código do documento</th>\\n <th *ngIf=\\\"userType === 'healthProfessional'\\\"></th>\\n <th *ngIf=\\\"userType === 'pharmacy'\\\">Registro do Prescritor</th>\\n <th *ngIf=\\\"userType === 'patient'\\\">Médico(a)/Dentista Prescritor(a)</th>\\n <th *ngIf=\\\"userType === 'healthProfessional'\\\" nzShowSort nzSortKey=\\\"patient.name\\\">\\n Paciente\\n </th>\\n <th *ngIf=\\\"userType !== 'pharmacy'\\\">Status</th>\\n <th *ngIf=\\\"userType !== 'pharmacy'\\\">Ações</th>\\n </tr>\\n </thead>\\n <tbody>\\n <ng-template\\n ngFor\\n let-item\\n [ngForOf]=\\\"nzTable.data\\\"\\n *ngIf=\\\"userType === 'patient' || userType === 'healthProfessional'\\\"\\n >\\n <ng-container>\\n <tr>\\n <td nzShowExpand [(nzExpand)]=\\\"item.expand\\\"></td>\\n <td>{{ item.updatedAt | date: 'dd/MM/yyyy, HH:mm' }}</td>\\n <td>{{ item.code }}</td>\\n <td *ngIf=\\\"userType === 'patient'\\\">\\n {{ item.healthProfessional?.name }}\\n </td>\\n <td *ngIf=\\\"userType === 'healthProfessional'\\\" class=\\\"p-0\\\">\\n <img\\n *ngIf=\\\"item.patient?.responsible\\\"\\n src=\\\"assets/icons/hand-holding-medical.svg\\\"\\n width=\\\"22px\\\"\\n />\\n </td>\\n <td *ngIf=\\\"userType === 'healthProfessional'\\\" class=\\\"pl-0\\\">\\n {{ item.patient?.name || item.pet?.name }}\\n <span\\n class=\\\"responsible-name\\\"\\n *ngIf=\\\"item.patient?.responsible || item.pet?.responsible\\\"\\n ><br />RESPONSÃVEL:\\n {{ item.patient.responsible?.name || item.pet.responsible?.name }}\\n </span>\\n </td>\\n <td *ngIf=\\\"userType !== 'pharmacy'\\\">{{ getMaleStatus(item.status) }}</td>\\n <td>\\n <div class=\\\"row justify-content-start\\\">\\n <div class=\\\"col-2\\\">\\n <div\\n *ngIf=\\\"\\n item.status !== 'Não Assinada' ||\\n healthProfessional?.professionalType === 'veterinarian'\\n \\\"\\n (click)=\\\"downloadPrescriptionPdf(item)\\\"\\n title=\\\"Baixar documento\\\"\\n >\\n <i\\n nz-icon\\n nzType=\\\"file-pdf\\\"\\n nzTheme=\\\"twotone\\\"\\n nzTwotoneColor=\\\"#B22222\\\"\\n class=\\\"icon-pdf\\\"\\n ></i>\\n </div>\\n </div>\\n <div\\n *ngIf=\\\"userType === 'healthProfessional' && item.status === 'Não Assinada'\\\"\\n class=\\\"col-2\\\"\\n >\\n <a title=\\\"Editar documento\\\" (click)=\\\"navigateToEdit(item, 'orientation')\\\">\\n <i class=\\\"fa fa-pencil-solid\\\"></i>\\n </a>\\n </div>\\n\\n <div\\n *ngIf=\\\"userType === 'healthProfessional' && item.status !== 'Não Assinada'\\\"\\n class=\\\"col-2\\\"\\n >\\n <a title=\\\"Repetir documento\\\" (click)=\\\"navigateToNew(item, 'orientation')\\\">\\n <i class=\\\"fa fa-repeat\\\"></i>\\n </a>\\n </div>\\n\\n <div\\n class=\\\"col-2\\\"\\n *ngIf=\\\"userType === 'healthProfessional' && hasSignedItem(orientations)\\\"\\n >\\n <a\\n *ngIf=\\\"item.status === 'Assinada'\\\"\\n title=\\\"Reenviar documento\\\"\\n (click)=\\\"showModalSendDocument(item)\\\"\\n >\\n <img src=\\\"assets/icons/reenvio.png\\\" width=\\\"22px\\\" />\\n </a>\\n </div>\\n\\n <div class=\\\"col-2\\\" *ngIf=\\\"userType !== 'pharmacy' && !item.archived\\\">\\n <a title=\\\"Arquivar\\\" (click)=\\\"archiveItem(item.code)\\\">\\n <i class=\\\"fas fa-archive\\\"></i>\\n </a>\\n </div>\\n\\n <div class=\\\"col-2\\\" *ngIf=\\\"userType !== 'pharmacy' && item.archived\\\">\\n <a title=\\\"Desarquivar\\\" (click)=\\\"unarchiveItem(item.code)\\\">\\n <i class=\\\"fas fa-inbox\\\"></i>\\n </a>\\n </div>\\n\\n <div class=\\\"col-2\\\">\\n <a\\n title=\\\"Excluir documento\\\"\\n (click)=\\\"showModalCancelOrientation(item)\\\"\\n *ngIf=\\\"\\n (item.status === 'Não Assinada' || item.status === 'Assinada') &&\\n userType === 'healthProfessional'\\n \\\"\\n >\\n <i class=\\\"fa fa-trash-solid\\\"></i>\\n </a>\\n </div>\\n </div>\\n </td>\\n </tr>\\n <tr [nzExpand]=\\\"item.expand\\\">\\n <td></td>\\n <td colspan=\\\"6\\\">\\n <div class=\\\"col\\\">\\n <div class=\\\"row\\\">\\n <span class=\\\"title\\\">TÃtulo:</span\\n ><span class=\\\"break-line\\\"> {{ item.title }}</span>\\n </div>\\n <div class=\\\"row\\\">\\n <span class=\\\"title\\\">Conteúdo:</span>\\n <span *ngIf=\\\"item.orientations?.length === 1\\\" class=\\\"break-line\\\">\\n {{ item.orientations[0] }}\\n </span>\\n </div>\\n <div class=\\\"row\\\" *ngIf=\\\"item.orientations.length > 1\\\">\\n <span *ngFor=\\\"let text of item.orientations; let i = index\\\">\\n <br *ngIf=\\\"i > 0\\\" />\\n {{ text }}\\n <br />\\n </span>\\n </div>\\n </div>\\n </td>\\n </tr>\\n </ng-container>\\n </ng-template>\\n </tbody>\\n </nz-table>\\n </nz-tab>\\n\\n <nz-tab nzTitle=\\\"Receitas de terceiros\\\" *ngIf=\\\"userType === 'pharmacy'\\\">\\n <nz-table\\n #nzTable\\n [nzData]=\\\"retentionOfThirdParties\\\"\\n [nzLoading]=\\\"loading\\\"\\n [nzTotal]=\\\"paginationData[1].totalRecord\\\"\\n [nzPageSize]=\\\"pageSize\\\"\\n (nzPageIndexChange)=\\\"pageIndexChanged($event)\\\"\\n nzFrontPagination=\\\"false\\\"\\n nzNoResult=\\\"Você ainda não realizou nenhuma retenção\\\"\\n [nzScroll]=\\\"scrollConfig\\\"\\n >\\n <thead nzAlign=\\\"center\\\">\\n <tr>\\n <th></th>\\n <th>Data da Dispensação</th>\\n <th>CPF do comprador</th>\\n <th>Código da dispensação</th>\\n <th>Registro do Prescritor</th>\\n <th>Arquivo na base</th>\\n </tr>\\n </thead>\\n <tbody *ngFor=\\\"let item of nzTable.data\\\">\\n <tr>\\n <td></td>\\n <td>{{ item?.dispensationDate || item?.updatedAt | date: 'dd/MM/yyyy':'UTC' }}</td>\\n <td>{{ item?.cpfBuyer | formattedCpf }}</td>\\n <td>{{ item.dispensationCode }}</td>\\n <td>\\n {{ item.preWriterRegister?.number || item.prescriber?.regionalCouncilNumber.number }}\\n </td>\\n <td>\\n <div class=\\\"prescription d-flex align-items-center\\\">\\n <div>\\n <a title=\\\"Baixar prescrição\\\" (click)=\\\"downloadPrescriptionPdfOfThirdParties(item)\\\">\\n <i\\n nz-icon\\n nzType=\\\"file-pdf\\\"\\n nzTheme=\\\"twotone\\\"\\n nzTwotoneColor=\\\"#B22222\\\"\\n class=\\\"icon-pdf\\\"\\n ></i>\\n </a>\\n </div>\\n <div class=\\\"ml-3\\\">\\n <a title=\\\"Cancelar retenção\\\" (click)=\\\"showModalCancelRetention(item, true)\\\">\\n <i class=\\\"fa fa-trash-solid\\\"></i>\\n </a>\\n </div>\\n </div>\\n </td>\\n </tr>\\n </tbody>\\n </nz-table>\\n </nz-tab>\\n </nz-tabset>\\n </div>\\n</div>\\n<ngx-loading [show]=\\\"loadingFilter\\\" [config]=\\\"{ backdropBorderRadius: '3px' }\\\"></ngx-loading>\\n<app-modal-send-document></app-modal-send-document>\\n\";","export default \".title {\\n font-weight: bold;\\n}\\n\\n.padding-row {\\n padding-top: 10px;\\n padding-bottom: 10px;\\n}\\n\\nnz-table .break-line {\\n white-space: pre-wrap;\\n}\\n\\nnz-table .ant-table-expanded-row {\\n background: none;\\n}\\n\\n.download-pdf {\\n font-size: 40px;\\n cursor: pointer;\\n}\\n\\n.icon-pdf {\\n font-size: 30px;\\n cursor: pointer;\\n}\\n\\n.col-3 {\\n padding-left: 0;\\n}\\n\\n.responsible-name {\\n font-size: 12px;\\n}\\n\\n.responsible-name br {\\n display: block;\\n /* makes it have a width */\\n content: \\\"\\\";\\n /* clears default height */\\n margin-top: -5px;\\n /* change this to whatever height you want it */\\n}\";","import { Component, Input, ViewChild } from '@angular/core';\r\nimport { MyPieChart } from '@app/shared/models/my-pie-chart';\r\nimport { ChartOptions } from 'chart.js';\r\nimport { BaseChartDirective } from 'ng2-charts';\r\n\r\n@Component({\r\n selector: 'app-my-pie-chart',\r\n templateUrl: './my-pie-chart.component.html',\r\n styleUrls: ['./my-pie-chart.component.scss']\r\n})\r\nexport class MyPieChartComponent {\r\n @Input() title: string;\r\n\r\n @ViewChild(BaseChartDirective) baseChart: any;\r\n\r\n pieChartOptions: ChartOptions = {\r\n responsive: true,\r\n legend: {\r\n position: 'bottom',\r\n labels: {\r\n boxWidth: 12\r\n }\r\n }\r\n };\r\n\r\n private _chart: MyPieChart;\r\n\r\n constructor() {}\r\n\r\n @Input()\r\n set chart(chart: MyPieChart) {\r\n this._chart = chart;\r\n if (this.title) {\r\n let text = this.title;\r\n if (this.total) {\r\n text += ` (${this.total})`;\r\n }\r\n this.pieChartOptions.title = {\r\n text,\r\n display: true\r\n };\r\n if (this.baseChart) {\r\n this.baseChart.refresh();\r\n }\r\n }\r\n }\r\n\r\n get chart() {\r\n return this._chart;\r\n }\r\n\r\n get total() {\r\n return this.chart && this.chart.data.filter(d => !isNaN(d)).reduce((a, b) => a + b, 0);\r\n }\r\n}\r\n","export default \"<div class=\\\"chart-area\\\" *ngIf=\\\"chart\\\">\\r\\n <div class=\\\"chart\\\">\\r\\n <canvas\\r\\n baseChart\\r\\n [data]=\\\"chart.data\\\"\\r\\n [colors]=\\\"chart.pieChartColors\\\"\\r\\n [labels]=\\\"chart.pieChartLabels\\\"\\r\\n chartType=\\\"pie\\\"\\r\\n [options]=\\\"pieChartOptions\\\"\\r\\n legend=\\\"true\\\"\\r\\n >\\r\\n </canvas>\\r\\n </div>\\r\\n</div>\\r\\n\";","export default \".chart-area {\\n display: flex;\\n justify-content: center;\\n}\\n.chart-area .chart {\\n width: 50vw;\\n display: flex;\\n position: relative;\\n}\";","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\n\n@Component({\n selector: 'app-add-button',\n templateUrl: './add-button.component.html',\n styleUrls: ['./add-button.component.scss']\n})\nexport class AddButtonComponent implements OnInit {\n @Input() label: string;\n\n @Output() eventOnClick = new EventEmitter();\n\n constructor() {}\n\n ngOnInit() {}\n}\n","export default \"<button\\n class=\\\"btn btn-icon btn-success text-capitalize\\\"\\n type=\\\"button\\\"\\n theme\\n (click)=\\\"eventOnClick.emit()\\\"\\n>\\n <span class=\\\"btn-inner--text\\\">{{ label }}</span>\\n <span class=\\\"btn-inner--icon\\\"><i class=\\\"fa fa-plus\\\"></i></span>\\n</button>\\n\";","export default \"@media (max-width: 1025px) {\\n .btn-icon .btn-inner--text {\\n font-size: 14px;\\n word-break: break-word;\\n }\\n}\\nbutton {\\n display: flex;\\n padding: 0 0 0 8px;\\n height: 40px;\\n align-items: center;\\n border-radius: 10px;\\n overflow: hidden;\\n border: 0;\\n font-family: \\\"probold\\\", sans-serif;\\n background-color: var(--bg-color-secondary);\\n}\\nbutton .btn-inner--icon {\\n background-color: var(--bg-color-primary);\\n color: var(--color-white);\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n height: 40px;\\n width: 50px;\\n}\";","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { ColorSetting } from '@app/shared/models/color-setting';\nimport { typeOfDocuments } from '@app/shared/types/types';\n\n@Component({\n selector: 'app-add-type-options',\n templateUrl: './add-type-options.component.html',\n styleUrls: ['./add-type-options.component.scss']\n})\nexport class AddTypeOptionsComponent {\n @Output() onClickAddIndustrialized = new EventEmitter();\n @Output() onClickAddMedicamentFreeText = new EventEmitter();\n @Output() onClickAddDataExams = new EventEmitter();\n @Output() onClickAddTextBox = new EventEmitter();\n @Output() onClickonShowModelListFavoriteDocument = new EventEmitter();\n @Output() onClickShowCardCID = new EventEmitter<boolean>();\n @Output() onClickAddViewFormAttestation = new EventEmitter();\n @Output() onClickAddPrecriptionRenew = new EventEmitter();\n @Output() onClickAddInfusion = new EventEmitter();\n @Output() onClickAddSereneProtocol = new EventEmitter();\n @Output() onClickOrientationSerene = new EventEmitter();\n\n @Input() viewIndutrialized = false;\n @Input() viewMedicmanetFreeText = false;\n @Input() viewDataExams = false;\n @Input() viewTextBox = false;\n @Input() viewListFavoriteDocument = false;\n @Input() viewShowCardCID = false;\n @Input() viewFormAttestation = false;\n @Input() viewPrecriptionRenew = false;\n @Input() viewInfusion = false;\n @Input() viewSereneLibrary = false;\n @Input() viewOrientationSerene = false;\n\n @Input() colorSetting: ColorSetting;\n\n @Input() typeDocument: typeOfDocuments;\n\n hover = {};\n\n isVeterinarian = false;\n\n constructor(private activatedRoute: ActivatedRoute) {\n this.isVeterinarian = this.activatedRoute.snapshot.data['isVeterinarian'];\n }\n}\n","export default \"<ng-container>\\n <nz-form-item>\\n <nz-form-label>\\n <span [ngStyle]=\\\"{ color: colorSetting?.primary }\\\">\\n Adicionar:\\n </span>\\n </nz-form-label>\\n </nz-form-item>\\n\\n <div class=\\\"d-flex box-add-type-medicament\\\">\\n <div *ngIf=\\\"viewIndutrialized\\\" class=\\\"box-action\\\">\\n <button\\n nz-button\\n nzShape=\\\"circle\\\"\\n (click)=\\\"onClickAddIndustrialized.emit()\\\"\\n [ngStyle]=\\\"{\\n color: colorSetting?.primary,\\n 'background-color': colorSetting?.secondary,\\n 'border-color': hover['onClickAddIndustrialized'] ? colorSetting?.secondary : ''\\n }\\\"\\n (mouseover)=\\\"hover['onClickAddIndustrialized'] = true\\\"\\n (mouseleave)=\\\"hover['onClickAddIndustrialized'] = false\\\"\\n >\\n <i nz-icon class=\\\"fa-solid fa-pills\\\"></i>\\n </button>\\n <label [ngStyle]=\\\"{ color: colorSetting?.primary }\\\">Industrializado</label>\\n </div>\\n\\n <div *ngIf=\\\"viewMedicmanetFreeText\\\" class=\\\"box-action\\\">\\n <button\\n nz-button\\n nzShape=\\\"circle\\\"\\n (click)=\\\"onClickAddMedicamentFreeText.emit()\\\"\\n [ngStyle]=\\\"{\\n color: colorSetting?.primary,\\n 'background-color': colorSetting?.secondary,\\n 'border-color': hover['onClickAddMedicamentFreeText'] ? colorSetting?.secondary : ''\\n }\\\"\\n (mouseover)=\\\"hover['onClickAddMedicamentFreeText'] = true\\\"\\n (mouseleave)=\\\"hover['onClickAddMedicamentFreeText'] = false\\\"\\n >\\n <i nz-icon class=\\\"fa-solid fa-prescription-bottle\\\"></i>\\n </button>\\n <label [ngStyle]=\\\"{ color: colorSetting?.primary }\\\">Medicamento texto livre</label>\\n </div>\\n\\n <div *ngIf=\\\"viewPrecriptionRenew\\\" class=\\\"box-action\\\">\\n <button\\n nz-button\\n nzShape=\\\"circle\\\"\\n (click)=\\\"onClickAddPrecriptionRenew.emit()\\\"\\n [ngStyle]=\\\"{\\n color: colorSetting?.primary,\\n 'background-color': colorSetting?.secondary,\\n 'border-color': hover['onClickAddPrecriptionRenew'] ? colorSetting?.secondary : ''\\n }\\\"\\n (mouseover)=\\\"hover['onClickAddPrecriptionRenew'] = true\\\"\\n (mouseleave)=\\\"hover['onClickAddPrecriptionRenew'] = false\\\"\\n >\\n <i nz-icon class=\\\"fa-solid fa-pills\\\"></i>\\n </button>\\n <label [ngStyle]=\\\"{ color: colorSetting?.primary }\\\">Produtos Rennova</label>\\n </div>\\n\\n <div *ngIf=\\\"viewFormAttestation\\\" class=\\\"box-action\\\">\\n <button\\n nz-button\\n nzShape=\\\"circle\\\"\\n (click)=\\\"onClickAddViewFormAttestation.emit()\\\"\\n [ngStyle]=\\\"{\\n color: colorSetting?.primary,\\n 'background-color': colorSetting?.secondary,\\n 'border-color': hover['onClickAddViewFormAttestation'] ? colorSetting?.secondary : ''\\n }\\\"\\n (mouseover)=\\\"hover['onClickAddViewFormAttestation'] = true\\\"\\n (mouseleave)=\\\"hover['onClickAddViewFormAttestation'] = false\\\"\\n >\\n <i nz-icon class=\\\"fa-solid fa-pills\\\"></i>\\n </button>\\n <label [ngStyle]=\\\"{ color: colorSetting?.primary }\\\">Formulário pré-preenchido</label>\\n </div>\\n\\n <div *ngIf=\\\"viewDataExams\\\" class=\\\"box-action\\\">\\n <button\\n nz-button\\n nzShape=\\\"circle\\\"\\n (click)=\\\"onClickAddDataExams.emit()\\\"\\n [ngStyle]=\\\"{\\n color: colorSetting?.primary,\\n 'background-color': colorSetting?.secondary,\\n 'border-color': hover['onClickAddDataExams'] ? colorSetting?.secondary : ''\\n }\\\"\\n (mouseover)=\\\"hover['onClickAddDataExams'] = true\\\"\\n (mouseleave)=\\\"hover['onClickAddDataExams'] = false\\\"\\n >\\n <i nz-icon class=\\\"fa-solid fa-flask\\\"></i>\\n </button>\\n <label [ngStyle]=\\\"{ color: colorSetting?.primary }\\\">Banco de exames</label>\\n </div>\\n\\n <div *ngIf=\\\"viewTextBox\\\" class=\\\"box-action\\\">\\n <button\\n nz-button\\n nzShape=\\\"circle\\\"\\n (click)=\\\"onClickAddTextBox.emit()\\\"\\n [ngStyle]=\\\"{\\n color: colorSetting?.primary,\\n 'background-color': colorSetting?.secondary,\\n 'border-color': hover['onClickAddTextBox'] ? colorSetting?.secondary : ''\\n }\\\"\\n (mouseover)=\\\"hover['onClickAddTextBox'] = true\\\"\\n (mouseleave)=\\\"hover['onClickAddTextBox'] = false\\\"\\n >\\n <i nz-icon nzType=\\\"font-size\\\" nzTheme=\\\"outline\\\"></i>\\n </button>\\n <label [ngStyle]=\\\"{ color: colorSetting?.primary }\\\">{{\\n typeDocument === 'attestation' ? 'Caixa de texto' : 'Observações'\\n }}</label>\\n </div>\\n\\n <div *ngIf=\\\"viewShowCardCID\\\" class=\\\"box-action\\\">\\n <button\\n nz-button\\n nzShape=\\\"circle\\\"\\n (click)=\\\"onClickShowCardCID.emit(true)\\\"\\n [ngStyle]=\\\"{\\n color: colorSetting?.primary,\\n 'background-color': colorSetting?.secondary,\\n 'border-color': hover['onClickShowCardCID'] ? colorSetting?.secondary : ''\\n }\\\"\\n (mouseover)=\\\"hover['onClickShowCardCID'] = true\\\"\\n (mouseleave)=\\\"hover['onClickShowCardCID'] = false\\\"\\n >\\n <i nz-icon nzType=\\\"\\\" nzTheme=\\\"outline\\\"><span>CID</span></i>\\n </button>\\n <label [ngStyle]=\\\"{ color: colorSetting?.primary }\\\">CID 10</label>\\n </div>\\n\\n <div *ngIf=\\\"viewListFavoriteDocument\\\" class=\\\"box-action\\\">\\n <button\\n nz-button\\n nzShape=\\\"circle\\\"\\n (click)=\\\"onClickonShowModelListFavoriteDocument.emit()\\\"\\n [ngStyle]=\\\"{\\n color: colorSetting?.primary,\\n 'background-color': colorSetting?.secondary,\\n 'border-color': hover['onClickonShowModelListFavoriteDocument'] ? colorSetting?.secondary : ''\\n }\\\"\\n (mouseover)=\\\"hover['onClickonShowModelListFavoriteDocument'] = true\\\"\\n (mouseleave)=\\\"hover['onClickonShowModelListFavoriteDocument'] = false\\\"\\n >\\n <i nz-icon nzType=\\\"heart\\\" nzTheme=\\\"outline\\\"></i>\\n </button>\\n <label [ngStyle]=\\\"{ color: colorSetting?.primary }\\\">Meus modelos</label>\\n </div>\\n\\n <div *ngIf=\\\"viewInfusion\\\" class=\\\"box-action\\\">\\n <button\\n nz-button\\n nzShape=\\\"circle\\\"\\n (click)=\\\"onClickAddInfusion.emit()\\\"\\n [ngStyle]=\\\"{\\n color: colorSetting?.primary,\\n 'background-color': colorSetting?.secondary,\\n 'border-color': hover['onClickAddInfusion'] ? colorSetting?.secondary : ''\\n }\\\"\\n (mouseover)=\\\"hover['onClickAddInfusion'] = true\\\"\\n (mouseleave)=\\\"hover['onClickAddInfusion'] = false\\\"\\n >\\n <i\\n nz-icon\\n class=\\\"fa-solid fa-pills\\\"\\n [ngStyle]=\\\"{\\n color: colorSetting?.primary,\\n 'background-color': colorSetting?.secondary\\n }\\\"\\n ></i>\\n </button>\\n <label [ngStyle]=\\\"{ color: colorSetting?.primary }\\\">Adicionar protocolo</label>\\n </div>\\n\\n <div *ngIf=\\\"viewSereneLibrary\\\" class=\\\"box-action\\\">\\n <button\\n nz-button\\n nzShape=\\\"circle\\\"\\n (click)=\\\"onClickAddSereneProtocol.emit()\\\"\\n [ngStyle]=\\\"{\\n color: colorSetting?.primary,\\n 'background-color': colorSetting?.secondary,\\n 'border-color': hover['onClickAddSereneProtocol'] ? colorSetting?.secondary : ''\\n }\\\"\\n (mouseover)=\\\"hover['onClickAddSereneProtocol'] = true\\\"\\n (mouseleave)=\\\"hover['onClickAddSereneProtocol'] = false\\\"\\n >\\n <i\\n nz-icon\\n class=\\\"fa-solid fa-cannabis\\\"\\n [ngStyle]=\\\"{\\n color: colorSetting?.primary,\\n 'background-color': colorSetting?.secondary\\n }\\\"\\n ></i>\\n </button>\\n <label [ngStyle]=\\\"{ color: colorSetting?.primary }\\\">Canabidiol Serene</label>\\n </div>\\n\\n <div *ngIf=\\\"viewOrientationSerene\\\" class=\\\"box-action\\\">\\n <button\\n nz-button\\n nzShape=\\\"circle\\\"\\n (click)=\\\"onClickOrientationSerene.emit()\\\"\\n [ngStyle]=\\\"{\\n color: colorSetting?.primary,\\n 'background-color': colorSetting?.secondary,\\n 'border-color': hover['onClickAddSereneProtocol'] ? colorSetting?.secondary : ''\\n }\\\"\\n (mouseover)=\\\"hover['onClickAddSereneProtocol'] = true\\\"\\n (mouseleave)=\\\"hover['onClickAddSereneProtocol'] = false\\\"\\n >\\n <i\\n nz-icon\\n class=\\\"fa-solid fa-cannabis\\\"\\n [ngStyle]=\\\"{\\n color: colorSetting?.primary,\\n 'background-color': colorSetting?.secondary\\n }\\\"\\n ></i>\\n </button>\\n <label [ngStyle]=\\\"{ color: colorSetting?.primary }\\\">Orientacão Canabidiol Serene</label>\\n </div>\\n </div>\\n</ng-container>\\n\";","export default \".box-add-type-medicament {\\n overflow: auto;\\n}\\n.box-add-type-medicament .box-action {\\n width: 104px;\\n text-align: center;\\n margin-right: 16px;\\n display: flex;\\n flex-direction: column;\\n align-items: center;\\n}\\n.box-add-type-medicament .box-action label {\\n font-weight: 700;\\n color: #0b6054;\\n font-size: 16px;\\n margin-top: 8px;\\n}\\n.box-add-type-medicament ::ng-deep .ant-btn-circle,\\n.box-add-type-medicament ::ng-deep .ant-btn-circle-outline {\\n min-width: 50px;\\n}\\n.box-add-type-medicament ::ng-deep .ant-btn-icon-only {\\n width: 50px;\\n height: 50px;\\n background-color: var(--bg-color-secondary);\\n color: var(--bg-color-primary);\\n box-shadow: 0px 5px 7px 2px rgba(0, 0, 0, 0.15);\\n}\\n.box-add-type-medicament ::ng-deep .ant-btn .anticon {\\n font-size: 24px;\\n}\\n.box-add-type-medicament ::ng-deep .ant-btn:hover,\\n.box-add-type-medicament ::ng-deep .ant-btn:focus {\\n border-color: var(--bg-color-secondary);\\n}\";","export default \"<form [formGroup]=\\\"form\\\" theme>\\r\\n <nz-form-item *ngIf=\\\"mobile; else templateDesktop\\\">\\r\\n <label [for]=\\\"id\\\" [ngStyle]=\\\"{ color: colorSetting?.primary }\\\">{{ label }}</label>\\r\\n <div class=\\\"input-group\\\">\\r\\n <span class=\\\"input-group-btn\\\">\\r\\n <button class=\\\"btn btn-minus\\\" type=\\\"button\\\" (click)=\\\"minus()\\\">\\r\\n <span\\r\\n class=\\\"btn-inner--icon\\\"\\r\\n [ngStyle]=\\\"{\\r\\n 'background-color': colorSetting?.primary,\\r\\n 'border-color': colorSetting?.primary\\r\\n }\\\"\\r\\n ><i class=\\\"fa fa-minus\\\"></i\\r\\n ></span>\\r\\n </button>\\r\\n </span>\\r\\n <input\\r\\n [id]=\\\"id\\\"\\r\\n type=\\\"number\\\"\\r\\n class=\\\"form-control text-center\\\"\\r\\n maxlength=\\\"3\\\"\\r\\n formControlName=\\\"quantity\\\"\\r\\n [ngStyle]=\\\"{ 'background-color': colorSetting?.secondary }\\\"\\r\\n readonly\\r\\n />\\r\\n <span class=\\\"input-group-btn\\\">\\r\\n <button class=\\\"btn btn-plus\\\" type=\\\"button\\\" (click)=\\\"plus()\\\">\\r\\n <span\\r\\n class=\\\"btn-inner--icon\\\"\\r\\n [ngStyle]=\\\"{\\r\\n 'background-color': colorSetting?.primary,\\r\\n 'border-color': colorSetting?.primary\\r\\n }\\\"\\r\\n ><i class=\\\"fa fa-plus\\\"></i\\r\\n ></span>\\r\\n </button>\\r\\n </span>\\r\\n </div>\\r\\n </nz-form-item>\\r\\n <ng-template #templateDesktop>\\r\\n <nz-form-item class=\\\"input-number-item\\\">\\r\\n <nz-form-label\\r\\n class=\\\"label-input\\\"\\r\\n [nzFor]=\\\"id\\\"\\r\\n [ngStyle]=\\\"{\\r\\n 'background-color': colorSetting?.primary,\\r\\n 'border-color': colorSetting?.primary\\r\\n }\\\"\\r\\n >{{ label }}</nz-form-label\\r\\n >\\r\\n <nz-form-control>\\r\\n <nz-input-number\\r\\n [id]=\\\"id\\\"\\r\\n [nzMin]=\\\"min\\\"\\r\\n [nzMax]=\\\"max\\\"\\r\\n [nzStep]=\\\"step\\\"\\r\\n [style.width]=\\\"inputSize + 'px'\\\"\\r\\n (ngModelChange)=\\\"inputSize = $event\\\"\\r\\n formControlName=\\\"quantity\\\"\\r\\n [nzDisabled]=\\\"disabled\\\"\\r\\n [ngStyle]=\\\"{\\r\\n 'background-color': colorSetting?.secondary,\\r\\n 'border-color': colorSetting?.secondary\\r\\n }\\\"\\r\\n ></nz-input-number>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n </ng-template>\\r\\n</form>\\r\\n\";","import {\r\n AfterViewInit,\r\n ChangeDetectorRef,\r\n Component,\r\n HostListener,\r\n Inject,\r\n Input,\r\n OnInit\r\n} from '@angular/core';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport {\r\n ControlValueAccessor,\r\n FormBuilder,\r\n FormControl,\r\n FormGroup,\r\n NG_VALUE_ACCESSOR\r\n} from '@angular/forms';\r\nimport { ColorSetting } from '@app/shared/models/color-setting';\r\n\r\n@Component({\r\n selector: 'app-auto-width-input-number',\r\n templateUrl: './auto-width-input-number.component.html',\r\n styleUrls: ['./auto-width-input-number.component.scss'],\r\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: AutoWidthInputNumberComponent, multi: true }]\r\n})\r\nexport class AutoWidthInputNumberComponent implements AfterViewInit, ControlValueAccessor {\r\n @Input() id: string;\r\n @Input() min = 1;\r\n @Input() max: number;\r\n @Input() step = 1;\r\n @Input() label = 'Quantidade';\r\n @Input() disabled: boolean;\r\n @Input() colorSetting: ColorSetting;\r\n\r\n mobile = false;\r\n form: FormGroup;\r\n\r\n constructor(\r\n @Inject(DOCUMENT) private document,\r\n private cdr: ChangeDetectorRef,\r\n private fb: FormBuilder\r\n ) {\r\n this.form = this.fb.group({\r\n quantity: [null]\r\n });\r\n this.getScreenSize();\r\n }\r\n\r\n _inputSize: number;\r\n\r\n get inputSize(): number {\r\n return this._inputSize;\r\n }\r\n\r\n set inputSize($event) {\r\n this._inputSize = 26 + parseFloat(this.calculateTextWidth($event.toString()));\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.cdr.detectChanges();\r\n }\r\n\r\n @HostListener('window:resize', ['$event'])\r\n private getScreenSize(event?) {\r\n const { innerWidth: width, innerHeight: height } = window;\r\n this.mobile = width < 1025;\r\n }\r\n\r\n calculateTextWidth(value: string) {\r\n const canvas = this.document.createElement('canvas');\r\n const ctx = canvas.getContext('2d');\r\n return ctx.measureText(value).width;\r\n }\r\n\r\n @HostListener('input', ['$event.target'])\r\n public onInput($event): void {\r\n this.inputSize = $event.value;\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.form.valueChanges.subscribe(value => fn(value.quantity));\r\n }\r\n\r\n registerOnTouched(fn: any): void {}\r\n\r\n setDisabledState(isDisabled: boolean): void {}\r\n\r\n writeValue(value: any): void {\r\n if (value) {\r\n this.form.setValue({ quantity: value });\r\n }\r\n }\r\n\r\n minus() {\r\n const qty = this.form.get('quantity');\r\n if (qty.value > this.min) {\r\n qty.setValue(qty.value - 1);\r\n }\r\n }\r\n\r\n plus() {\r\n const qty = this.form.get('quantity');\r\n if (this.max && qty.value === this.max) {\r\n return;\r\n }\r\n qty.setValue(qty.value + 1);\r\n }\r\n}\r\n","export default \".input-number-item {\\n display: flex;\\n align-items: center;\\n}\\n@media (max-width: 1025px) {\\n .input-number-item .ant-input-number {\\n height: 50px;\\n width: 62px !important;\\n font-size: 20px;\\n }\\n .input-number-item .ant-form-item-label {\\n height: 50px !important;\\n text-align: left;\\n }\\n .input-number-item .ant-form-item-label label {\\n font-size: 17px;\\n margin-top: 18px;\\n margin-left: 6px;\\n }\\n .input-number-item .ant-input-number .ant-input-number-input {\\n padding-left: 18px;\\n }\\n}\\n.input-number-item .ant-form-item-label {\\n height: 22px;\\n border-radius: 5px 0 0 5px;\\n}\\n.input-number-item .ant-form-item-label ::ng-deep label {\\n margin-bottom: 0;\\n margin-right: 0;\\n text-transform: uppercase;\\n color: white;\\n padding-right: 5px;\\n padding-left: 5px;\\n font-size: 11px;\\n font-family: \\\"problack\\\", sans-serif;\\n}\\n.input-number-item ::ng-deep .ant-input-number-handler-wrap {\\n opacity: 1;\\n border-left: 0;\\n z-index: initial;\\n background: transparent;\\n}\\n.input-number-item ::ng-deep .ant-input-number-handler-wrap .ant-input-number-handler-down {\\n border-top: 0;\\n}\\n@media (max-width: 1025px) {\\n .input-number-item ::ng-deep .ant-input-number-handler-wrap {\\n width: 30px;\\n }\\n .input-number-item ::ng-deep .ant-input-number-handler-wrap:hover .ant-input-number-handler {\\n height: 50%;\\n }\\n .input-number-item ::ng-deep .ant-input-number-handler-wrap .ant-input-number-handler-up:hover {\\n height: 50% !important;\\n }\\n .input-number-item ::ng-deep .ant-input-number-handler-wrap .ant-input-number-handler .ant-input-number-handler-up-inner,\\n.input-number-item ::ng-deep .ant-input-number-handler-wrap .ant-input-number-handler .ant-input-number-handler-down-inner {\\n font-size: 28px;\\n position: relative;\\n left: -4px;\\n top: 10px;\\n }\\n}\\n.input-number-item ::ng-deep .ant-input-number {\\n display: flex;\\n align-items: center;\\n justify-content: space-between;\\n width: 36px;\\n height: 22px;\\n border: 0;\\n background-color: var(--bg-color-secondary);\\n box-shadow: none;\\n border-radius: 0 5px 5px 0;\\n color: white;\\n font-size: 11px;\\n font-family: \\\"problack\\\", sans-serif;\\n}\\n.input-number-item ::ng-deep .ant-input-number .ant-input-number-input {\\n height: 100%;\\n padding: 0 0 0 6px;\\n}\\n.label-input {\\n background: var(--bg-color-primary);\\n color: var(--on-bg-color-primary);\\n}\\nlabel {\\n font-family: \\\"probold\\\", sans-serif;\\n text-transform: uppercase;\\n font-size: 16px;\\n margin-bottom: 0;\\n}\\n.input-group {\\n width: 110px;\\n border-radius: 5px;\\n font-family: \\\"probold\\\", sans-serif;\\n}\\n.input-group input,\\n.input-group i {\\n border: 0;\\n color: white;\\n}\\n.input-group input {\\n background-color: var(--bg-color-secondary);\\n height: 30px;\\n}\\n.input-group .btn-minus {\\n border-radius: 5px 0 0 5px;\\n}\\n.input-group .btn-plus {\\n border-radius: 0 5px 5px 0;\\n}\\n.btn {\\n display: flex;\\n padding: 0;\\n height: 30px;\\n align-items: center;\\n overflow: hidden;\\n border: 0;\\n}\\n.btn .btn-inner--icon {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n height: 30px;\\n width: 35px;\\n background-color: var(--bg-color-primary);\\n border-color: var(--bg-color-primary);\\n}\";","export default \"<div class=\\\"card card-cid\\\" [formGroup]=\\\"form.get('cid')\\\" theme>\\n <div class=\\\"card-cid-header\\\">\\n <label>CID 10</label>\\n <i\\n class=\\\"fa fa-trash-solid\\\"\\n nzTooltipTitle=\\\"Excluir\\\"\\n nzTooltipPlacement=\\\"top\\\"\\n nz-tooltip\\n (click)=\\\"removeCardCid()\\\"\\n ></i>\\n </div>\\n <div class=\\\"card-cid-content\\\">\\n <div class=\\\"row\\\">\\n <div class=\\\"col-12\\\">\\n <nz-form-item>\\n <label nz-checkbox formControlName=\\\"authorizedByPatient\\\">\\n <span class=\\\"label-checkbox\\\">Mostrar dizeres: \\\"Autorizado pelo paciente\\\"</span>\\n </label>\\n </nz-form-item>\\n </div>\\n <div class=\\\"col-12\\\">\\n <nz-form-item>\\n <label nz-checkbox formControlName=\\\"showDescription\\\">\\n <span class=\\\"label-checkbox\\\">Mostrar descrição do CID</span>\\n </label>\\n </nz-form-item>\\n </div>\\n </div>\\n <div class=\\\"container-cids\\\" formArrayName=\\\"items\\\">\\n <div class=\\\"p-2\\\">\\n <div\\n class=\\\"container-cids-header mb-1\\\"\\n *ngFor=\\\"let item of formArrayItens?.controls; let i = index\\\"\\n [formGroup]=\\\"item\\\"\\n >\\n <label class=\\\"label-name-cid mr-3\\\" [ngStyle]=\\\"{ color: colorSetting?.primary }\\\">\\n CID 10: {{ item.get('code')?.value }}\\n <span *ngIf=\\\"form.get('cid').get('showDescription')?.value\\\">\\n - {{ item.get('description')?.value }}</span\\n >\\n <span *ngIf=\\\"form.get('cid').get('authorizedByPatient')?.value\\\">\\n (Autorizado pelo paciente)</span\\n >\\n </label>\\n <i\\n class=\\\"far fa-minus-circle icon-remove\\\"\\n nzTooltipTitle=\\\"Remover\\\"\\n nzTooltipPlacement=\\\"top\\\"\\n nz-tooltip\\n (click)=\\\"removeItem(i)\\\"\\n ></i>\\n </div>\\n </div>\\n </div>\\n\\n <div class=\\\"continer-input\\\">\\n <input\\n nz-input\\n placeholder=\\\"Digite o código ou nome para buscar\\\"\\n [nzAutocomplete]=\\\"autoCids\\\"\\n [formControl]=\\\"inputSearch\\\"\\n [ngStyle]=\\\"{\\n 'background-color': colorSetting?.inputBackground,\\n 'border-color': colorSetting?.inputBorder\\n }\\\"\\n />\\n <nz-autocomplete\\n #autoCids\\n class=\\\"medicationAutoComplete\\\"\\n nzBackfill\\n (selectionChange)=\\\"addCid($event.nzValue)\\\"\\n >\\n <nz-auto-option *ngIf=\\\"isLoading\\\" class=\\\"loading-container\\\">\\n <span>Carregando...</span>\\n </nz-auto-option>\\n <ng-container *ngIf=\\\"!isLoading && cids?.length > 0\\\">\\n <nz-auto-option *ngFor=\\\"let option of cids\\\" [nzLabel]=\\\"option.code\\\" [nzValue]=\\\"option\\\">\\n <span>{{ option?.code }} - {{ option?.description }}</span>\\n </nz-auto-option>\\n </ng-container>\\n </nz-autocomplete>\\n </div>\\n </div>\\n</div>\\n\";","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Cid } from '@app/shared/models/cid';\nimport { environment } from '@env/environment';\n\nexport const CID_API_URL = `${environment.apiRoot}cid`;\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CidService {\n constructor(private http: HttpClient) {}\n\n findAllByQuery(query: string) {\n return this.http.get<Cid[]>(`${CID_API_URL}?query=${query}`);\n }\n}\n","import { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\nimport { FormArray, FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';\nimport { CidService } from '@app/modules/document/services/cid.service';\nimport { Cid } from '@app/shared/models/cid';\nimport { ColorSetting } from '@app/shared/models/color-setting';\nimport { AppToastService } from '@app/shared/services/app-toast.service';\nimport { debounceTime, distinctUntilChanged, filter, switchMap, tap } from 'rxjs/operators';\n\n@Component({\n selector: 'app-cid-form',\n templateUrl: './cid-form.component.html',\n styleUrls: ['./cid-form.component.scss']\n})\nexport class CidFormComponent implements OnInit, OnDestroy {\n @Input() form: FormGroup;\n @Input() authorizedByPatient = false;\n @Input() showDescription = false;\n @Input() items = [];\n @Input() colorSetting: ColorSetting;\n\n @Output() onClickRemoveCardCid = new EventEmitter<void>();\n @Output() formEmitter: EventEmitter<FormGroup> = new EventEmitter<FormGroup>();\n\n inputSearch = new FormControl();\n isLoading = false;\n\n cids: Cid[] = [];\n\n constructor(\n private cidService: CidService,\n private notification: AppToastService,\n private fb: FormBuilder\n ) {}\n\n ngOnInit(): void {\n this.form.addControl(\n 'cid',\n this.fb.group({\n authorizedByPatient: [this.authorizedByPatient],\n showDescription: [this.showDescription],\n items: new FormArray([], Validators.required)\n })\n );\n\n if (this.items && this.items.length) {\n this.items.forEach(item => {\n this.addCid(item);\n });\n }\n\n this.listenSearchInput();\n this.formEmitter.emit(this.form);\n }\n\n ngOnDestroy(): void {\n this.form.removeControl('cid');\n this.formEmitter.emit(this.form);\n }\n\n listenSearchInput() {\n this.inputSearch.valueChanges\n .pipe(\n filter((text: string) => text && text.length >= 3),\n tap(() => {\n this.isLoading = true;\n this.cids = [];\n }),\n debounceTime(300),\n distinctUntilChanged(),\n switchMap(text => this.cidService.findAllByQuery(text))\n )\n .subscribe(cids => {\n if (cids.length > 0) {\n this.cids = cids;\n } else {\n this.notification.notify('warning', 'Não foi encontado CID com código ou nome informado!', '');\n }\n\n this.isLoading = false;\n });\n }\n\n addCid(cid: Cid) {\n const newControlCid = this.fb.group({\n id: [cid._id],\n code: [cid.code, [Validators.required]],\n description: [cid.description]\n });\n this.formArrayItens.push(newControlCid);\n this.formEmitter.emit(this.form);\n this.inputSearch = new FormControl('');\n this.listenSearchInput();\n }\n\n get formCid(): FormGroup {\n return this.form.get('cid') as FormGroup;\n }\n\n get formArrayItens(): FormArray {\n return this.form.get('cid').get('items') as FormArray;\n }\n\n removeItem(index: number) {\n this.formArrayItens.removeAt(index);\n }\n\n removeCardCid() {\n this.onClickRemoveCardCid.emit();\n }\n}\n","export default \".card-cid {\\n padding: 0.5rem;\\n}\\n.card-cid .card-cid-header {\\n display: flex;\\n justify-content: space-between;\\n align-items: center;\\n}\\n.card-cid .card-cid-header span {\\n flex: 1;\\n}\\n.card-cid .card-cid-content .continer-input {\\n display: flex;\\n align-items: center;\\n}\\n.card-cid .card-cid-content .continer-input input {\\n height: 37px;\\n}\\n.card-cid .card-cid-content .continer-input input::-moz-placeholder {\\n padding-left: 10px;\\n}\\n.card-cid .card-cid-content .continer-input input::placeholder {\\n padding-left: 10px;\\n}\\n.card-cid .card-cid-content .continer-input button {\\n padding: 5px;\\n}\\n.card-cid .container-cids .label-name-cid {\\n font-size: 1rem;\\n color: var(--bg-color-secondary);\\n font-weight: 600;\\n font-family: \\\"Segoe UI\\\", Tahoma, Geneva, Verdana, sans-serif;\\n}\\n.card-cid .container-cids .container-cids-header {\\n display: flex !important;\\n align-items: center !important;\\n justify-content: space-between !important;\\n}\\n.card-cid .card-cid-content::ng-deep .ant-checkbox-wrapper {\\n margin-top: 0;\\n margin-left: 0;\\n}\\n.card-cid .label-checkbox {\\n font-size: 14px;\\n}\\n.card-cid .icon-remove {\\n cursor: pointer;\\n color: red;\\n font-size: 20px;\\n}\";","export default \"<div class=\\\"card p-2 mb-2\\\" theme [formGroup]=\\\"form\\\">\\n <ng-container formArrayName=\\\"examList\\\">\\n <ng-container\\n *ngFor=\\\"let examListGroup of examList?.controls; let i = index\\\"\\n [formGroup]=\\\"examListGroup\\\"\\n >\\n <div\\n class=\\\"header-card-data-exam\\\"\\n [ngClass]=\\\"{ 'header-card-data-exam-flex-end': isVeterinarian }\\\"\\n >\\n <nz-form-item *ngIf=\\\"!isVeterinarian\\\">\\n <label nz-checkbox formControlName=\\\"showTuss\\\">\\n <span class=\\\"label-checkbox\\\">Mostrar código TUSS no pedido</span>\\n </label>\\n </nz-form-item>\\n <i\\n class=\\\"fa fa-trash-solid custon-icon-trash\\\"\\n nzTooltipTitle=\\\"Excluir\\\"\\n nzTooltipPlacement=\\\"top\\\"\\n nz-tooltip\\n (click)=\\\"onClickRemoveCardDataExam.emit()\\\"\\n nz-icon\\n ></i>\\n </div>\\n <div class=\\\"body-card\\\">\\n <div>\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"exam-input\\\"\\n ><span [ngStyle]=\\\"{ color: colorSetting?.primary }\\\">\\n Exame(s):\\n </span>\\n </nz-form-label>\\n <ng-container formArrayName=\\\"exams\\\">\\n <ng-container *ngIf=\\\"exams?.controls?.length > 0; else emptyTemplate\\\">\\n <div\\n *ngFor=\\\"let examGroup of exams?.controls; let i = index\\\"\\n [formGroup]=\\\"examGroup\\\"\\n class=\\\"d-flex align-itens-center mb-1\\\"\\n >\\n <span class=\\\"exam-description\\\" *ngIf=\\\"examGroup.value as exam\\\"\\n ><span [ngStyle]=\\\"{ color: colorSetting?.primary }\\\">\\n {{ exam?.name }}\\n </span>\\n <span\\n *ngIf=\\\"examListGroup.get('showTuss')?.value && exam?.tuss\\\"\\n [ngStyle]=\\\"{ color: colorSetting?.secondary }\\\"\\n >({{ exam?.tuss }})</span\\n >\\n </span>\\n <i\\n class=\\\"far fa-minus-circle icon-remove ml-3\\\"\\n nzTooltipTitle=\\\"Remover\\\"\\n nzTooltipPlacement=\\\"top\\\"\\n nz-tooltip\\n (click)=\\\"removeExam(i)\\\"\\n ></i>\\n </div>\\n </ng-container>\\n <ng-template #emptyTemplate>\\n <div>\\n <span>Nenhum exame informado.</span>\\n </div>\\n </ng-template>\\n </ng-container>\\n </nz-form-item>\\n </div>\\n\\n <div class=\\\"continer-input\\\">\\n <input\\n nz-input\\n placeholder=\\\"Digite o código ou nome para buscar e adicionar exame\\\"\\n [nzAutocomplete]=\\\"autoCids\\\"\\n [formControl]=\\\"inputSearch\\\"\\n [ngStyle]=\\\"{\\n 'background-color': colorSetting?.inputBackground,\\n 'border-color': colorSetting?.inputBorder\\n }\\\"\\n />\\n <nz-autocomplete\\n #autoCids\\n class=\\\"medicationAutoComplete\\\"\\n nzBackfill\\n (selectionChange)=\\\"addExam($event.nzValue)\\\"\\n >\\n <nz-auto-option *ngIf=\\\"isLoading\\\" class=\\\"loading-container\\\">\\n <span>Carregando...</span>\\n </nz-auto-option>\\n <ng-container *ngIf=\\\"!isLoading && examsFiltereds?.length > 0\\\">\\n <nz-auto-option *ngFor=\\\"let item of examsFiltereds\\\" [nzLabel]=\\\"item.name\\\" [nzValue]=\\\"item\\\">\\n <span\\n >{{ item?.name }}<span *ngIf=\\\"item?.tuss\\\"> - {{ item?.tuss }}</span></span\\n >\\n </nz-auto-option>\\n </ng-container>\\n </nz-autocomplete>\\n </div>\\n </div>\\n </ng-container>\\n </ng-container>\\n</div>\\n\";","import { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\nimport { FormArray, FormBuilder, FormControl, FormGroup } from '@angular/forms';\nimport { ExamService } from '@app/modules/document/services/exam.service';\nimport { ColorSetting } from '@app/shared/models/color-setting';\nimport { ExamBase } from '@app/shared/models/ExamBase';\nimport { AppToastService } from '@app/shared/services/app-toast.service';\nimport { debounceTime, distinctUntilChanged, filter, switchMap, tap } from 'rxjs/operators';\n\n@Component({\n selector: 'app-data-exam-form',\n templateUrl: './data-exam-form.component.html',\n styleUrls: ['./data-exam-form.component.scss']\n})\nexport class DataExamFormComponent implements OnInit, OnDestroy {\n @Input() form: FormGroup;\n @Input() isVeterinarian = false;\n @Input() colorSetting: ColorSetting;\n\n @Output() formEmitter = new EventEmitter<FormGroup>();\n @Output() onClickRemoveCardDataExam = new EventEmitter();\n\n inputSearch = new FormControl('');\n isLoading = false;\n\n examsFiltereds = [];\n\n constructor(\n private fb: FormBuilder,\n private examService: ExamService,\n private notification: AppToastService\n ) {}\n\n ngOnInit(): void {\n this.listenSearchInput();\n\n this.formEmitter.emit(this.form);\n }\n\n ngOnDestroy() {\n this.examList.removeAt(0);\n this.formEmitter.emit(this.form);\n }\n\n get examList(): FormArray {\n return <FormArray>this.form.get('examList');\n }\n\n get exams(): FormArray {\n return <FormArray>this.examList.at(0).get('exams');\n }\n\n listenSearchInput() {\n this.inputSearch.valueChanges\n .pipe(\n filter((text: string) => text && text.length >= 3),\n tap(() => {\n this.isLoading = true;\n this.examsFiltereds = [];\n }),\n debounceTime(300),\n distinctUntilChanged(),\n switchMap(text => this.examService.findAllByQuery(text, this.isVeterinarian))\n )\n .subscribe(\n exams => {\n if (exams.length > 0) {\n this.examsFiltereds = exams;\n } else {\n this.notification.notify('warning', 'Não foi encontado exames com nome informado', '');\n }\n\n this.isLoading = false;\n },\n () => {\n this.notification.notify('error', 'Ocorreu um erro ao buscar exames', '');\n this.examsFiltereds = [];\n this.isLoading = false;\n }\n );\n }\n\n addExam(exam: ExamBase) {\n const hasDuplicatedExam = this.hasDuplicatedExam(exam.id);\n if (hasDuplicatedExam) {\n this.notification.notify('warning', 'Exame já adicionado', '');\n this.resetInputSearch();\n return;\n }\n\n const examGroup = this.fb.group({\n id: [exam.id],\n name: [exam.name],\n tuss: [exam.tuss]\n });\n\n this.exams.push(examGroup);\n this.resetInputSearch();\n }\n\n resetInputSearch() {\n this.inputSearch = new FormControl('');\n this.listenSearchInput();\n }\n\n removeExam(index: number) {\n this.exams.removeAt(index);\n }\n\n private hasDuplicatedExam(idExam: string) {\n const exams = (<FormArray>this.form.get('examList')).at(0).get('exams').value || [];\n return exams.some(exam => exam.id === idExam);\n }\n}\n","export default \".header-card-data-exam {\\n display: flex;\\n align-items: center;\\n justify-content: space-between;\\n position: relative;\\n}\\n\\n.header-card-data-exam-flex-end {\\n justify-content: flex-end;\\n}\\n\\n.icon-remove {\\n cursor: pointer;\\n color: red;\\n font-size: 20px;\\n}\\n\\n.exam-description {\\n font-size: 1rem;\\n color: var(--bg-color-secondary);\\n font-weight: 600;\\n font-family: \\\"Segoe UI\\\", Tahoma, Geneva, Verdana, sans-serif;\\n}\\n\\n.custon-icon-trash {\\n position: absolute;\\n top: 5px;\\n right: 0;\\n}\";","import { Component, Input, OnInit } from '@angular/core';\nimport { FormGroup, Validators } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport { CepService } from '@app/modules/entry/services/cep.service';\nimport { BrazilianStates } from '@app/shared/data/Brazilian-states';\nimport { nativeAsync } from '@app/shared/decorators/nativeAsync';\nimport { BrazilState } from '@app/shared/models';\n\n@Component({\n selector: 'app-address-data-form',\n templateUrl: './address-data-form.component.html'\n})\nexport class AddressDataFormComponent implements OnInit {\n @Input() form: FormGroup;\n @Input() required = false;\n @Input() showAlertMsg = true;\n @Input() alertMsg =\n 'Ao preencher o endereço do paciente, você será capaz de emitir Receitas de Controle Especial (listas C1, C5 e adendos das listas A1, B1 e B2). Para prescrever este tipo de medicamentos, deverá ser preenchido o endereço completo (RDC 344/98).';\n\n isExternalRegister = false;\n states: BrazilState[] = BrazilianStates;\n\n constructor(private cepService: CepService, private router: Router) {}\n\n ngOnInit(): void {\n this.isExternalRegister = this.router.url === '/entry/register/patient';\n if (this.isExternalRegister) {\n this.required = true;\n this.validatorsFields();\n } else {\n this.disableFields();\n this.removeValidators();\n }\n }\n @nativeAsync\n async onKey(event: any) {\n this.required = false;\n if (event.target.value.length === 10) {\n const cep = event.target.value.replace(/[^\\d]+/g, '');\n const data = await this.cepService.consult(cep);\n if (!data.erro) {\n this.required = true;\n this.enabledFields();\n this.validatorsFields();\n this.patchValueForm(data);\n }\n } else {\n this.patchValueForm({});\n this.disableFields();\n this.removeValidators();\n }\n }\n @nativeAsync\n async onKeyExternal(event: any) {\n if (event.target.value.length === 10) {\n const cep = event.target.value.replace(/[^\\d]+/g, '');\n const data = await this.cepService.consult(cep);\n this.patchValueForm(data);\n this.enabledFields();\n } else {\n this.patchValueForm({});\n this.disableFields();\n }\n }\n\n patchValueForm(data: any) {\n this.form.patchValue({\n uf: data.uf,\n street: data.logradouro,\n neighborhood: data.bairro,\n city: data.localidade,\n number: null\n });\n }\n\n validatorsFields() {\n this.form.get('uf').setValidators([Validators.required]);\n this.form.get('street').setValidators([Validators.required]);\n this.form.get('neighborhood').setValidators([Validators.required]);\n this.form.get('city').setValidators([Validators.required]);\n this.form.get('number').setValidators([Validators.required]);\n this.form.get('cep').setValidators([Validators.required]);\n }\n\n removeValidators() {\n this.form.clearValidators();\n this.form.updateValueAndValidity();\n }\n\n disableFields() {\n this.form.get('uf').disable();\n this.form.get('street').disable();\n this.form.get('neighborhood').disable();\n this.form.get('city').disable();\n this.form.get('number').disable();\n this.form.get('complement').disable();\n }\n\n enabledFields() {\n this.form.get('uf').enable();\n this.form.get('street').enable();\n this.form.get('neighborhood').enable();\n this.form.get('city').enable();\n this.form.get('number').enable();\n this.form.get('complement').enable();\n }\n}\n","export default \"<!--Dados de Endereço-->\\n<fieldset class=\\\"w-100 mb-2\\\" [formGroup]=\\\"form\\\" theme>\\n <legend>Dados de Endereço</legend>\\n <nz-alert *ngIf=\\\"showAlertMsg\\\" class=\\\"mb-4\\\" nzType=\\\"warning\\\" [nzMessage]=\\\"alertMsg\\\"></nz-alert>\\n <div class=\\\"row\\\">\\n <div class=\\\"col-12 col-md-12 col-xl-2\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"cep\\\">CEP <span class=\\\"mandatory\\\" *ngIf=\\\"required\\\">*</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n id=\\\"cep\\\"\\n formControlName=\\\"cep\\\"\\n placeholder=\\\"00.000-000\\\"\\n mask=\\\"00.000-000\\\"\\n (keyup)=\\\"isExternalRegister ? onKeyExternal($event) : onKey($event)\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n <div class=\\\"col-lg-6 col-md-6 col-sm-12\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"logradouro\\\"\\n >Logradouro <span class=\\\"mandatory\\\" *ngIf=\\\"required\\\">*</span></nz-form-label\\n >\\n <nz-form-control nzHasFeedback>\\n <input\\n formControlName=\\\"street\\\"\\n id=\\\"street\\\"\\n nz-input\\n placeholder=\\\"Digite o logradouro\\\"\\n maxlength=\\\"128\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n <div class=\\\"col-lg-2 col-md-2 col-sm-12\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"number\\\"\\n >Número <span class=\\\"mandatory\\\" *ngIf=\\\"required\\\">*</span></nz-form-label\\n >\\n <nz-form-control nzHasFeedback>\\n <input\\n formControlName=\\\"number\\\"\\n id=\\\"number\\\"\\n nz-input\\n placeholder=\\\"Digite o número\\\"\\n maxlength=\\\"10\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n <div class=\\\"col-lg-2 col-md-2 col-sm-12\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"complement\\\">Complemento</nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n formControlName=\\\"complement\\\"\\n id=\\\"complement\\\"\\n nz-input\\n placeholder=\\\"Digite o complemento\\\"\\n maxlength=\\\"128\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n </div>\\n <div class=\\\"row\\\">\\n <div class=\\\"col-lg-4 col-md-4 col-sm-12\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"neighborhood\\\"\\n >Bairro <span class=\\\"mandatory\\\" *ngIf=\\\"required\\\">*</span></nz-form-label\\n >\\n <nz-form-control nzHasFeedback>\\n <input\\n formControlName=\\\"neighborhood\\\"\\n id=\\\"neighborhood\\\"\\n nz-input\\n placeholder=\\\"Digite o bairro\\\"\\n maxlength=\\\"128\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n <div class=\\\"col-lg-4 col-md-4 col-sm-12\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"city\\\"\\n >Cidade <span class=\\\"mandatory\\\" *ngIf=\\\"required\\\">*</span></nz-form-label\\n >\\n <nz-form-control nzHasFeedback>\\n <input\\n formControlName=\\\"city\\\"\\n id=\\\"city\\\"\\n nz-input\\n placeholder=\\\"Digite a cidade\\\"\\n maxlength=\\\"64\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n <div class=\\\"col-lg-4 col-md-4 col-sm-12\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"uf\\\">UF <span class=\\\"mandatory\\\" *ngIf=\\\"required\\\">*</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <select\\n id=\\\"uf\\\"\\n formControlName=\\\"uf\\\"\\n nz-input\\n nzAllowClear\\n nzShowSearch\\n nzPlaceHolder=\\\"Selecione\\\"\\n >\\n <option *ngFor=\\\"let state of states\\\" [value]=\\\"state?.sigla\\\">{{ state?.sigla }}</option>\\n </select>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n </div>\\n</fieldset>\\n\";","export default \"<!--Dados de Contato-->\\n<fieldset class=\\\"w-100 mb-2\\\" [formGroup]=\\\"form\\\">\\n <legend theme>Dados de Contato</legend>\\n <nz-alert\\n *ngIf=\\\"showAlertMsg\\\"\\n class=\\\"mb-4\\\"\\n nzType=\\\"warning\\\"\\n nzMessage=\\\"Ao preencher os dados de contato você poderá enviar o link de acesso aos documentos digitais de forma automática por SMS, WhatsApp e e-mail. No caso do e-mail você também facilitará o acesso do paciente ao Portal do Paciente.\\\"\\n ></nz-alert>\\n <div class=\\\"row\\\">\\n <div class=\\\"col-lg-3 col-md-3 col-sm-12\\\">\\n <nz-form-item *ngIf=\\\"form.get('cellphone') as cellphone\\\">\\n <nz-form-label nzFor=\\\"cellphone\\\"\\n >Telefone 1 <span class=\\\"mandatory\\\" *ngIf=\\\"isExternalRegister\\\"> *</span></nz-form-label\\n >\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n id=\\\"cellphone\\\"\\n [mask]=\\\"cellphone.value.length <= 10 ? '(00) 0000-00009' : '(00) 00000-0000'\\\"\\n formControlName=\\\"cellphone\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n <div class=\\\"col-lg-3 col-md-3 col-sm-12\\\">\\n <nz-form-item *ngIf=\\\"form.get('telephone') as telephone\\\">\\n <nz-form-label nzFor=\\\"telephone\\\" class=\\\"cellphone\\\">Telefone 2</nz-form-label>\\n <nz-form-control>\\n <input\\n nz-input\\n id=\\\"telephone\\\"\\n [mask]=\\\"telephone.value.length <= 10 ? '(00) 0000-00009' : '(00) 00000-0000'\\\"\\n formControlName=\\\"telephone\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n <div class=\\\"col-lg-3 col-md-3 col-sm-12\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"email\\\"\\n >E-mail de login<span class=\\\"mandatory\\\" *ngIf=\\\"isExternalRegister\\\"> *</span></nz-form-label\\n >\\n <nz-form-control nzHasFeedback *ngIf=\\\"form.get('email') as email\\\">\\n <input\\n nz-input\\n id=\\\"email\\\"\\n type=\\\"email\\\"\\n formControlName=\\\"email\\\"\\n style=\\\"text-transform: lowercase;\\\"\\n (keydown.space)=\\\"$event.preventDefault()\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n <nz-form-explain *ngIf=\\\"email.touched && email.errors\\\">\\n <ng-container *ngIf=\\\"email.hasError('exists'); else required\\\">\\n E-mail já existe, por favor escolha outro e-mail.\\n </ng-container>\\n <ng-template #required>\\n <ng-container *ngIf=\\\"email.hasError('required') && email.dirty; else invalid\\\">\\n <span class=\\\"error\\\">Campo obrigatório, por favor digite seu e-mail.</span>\\n </ng-container>\\n </ng-template>\\n <ng-template #invalid>\\n <ng-container *ngIf=\\\"email.invalid && email.value.length > 0\\\">\\n <span class=\\\"error\\\">E-mail inválido, por favor digite um e-mail válido.</span>\\n </ng-container>\\n </ng-template>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n <div class=\\\"col-lg-3 col-md-3 col-sm-12\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"emailContact\\\">E-mail de contato</nz-form-label>\\n <nz-form-control nzHasFeedback *ngIf=\\\"form.get('emailContact') as email\\\">\\n <input\\n nz-input\\n id=\\\"emailContact\\\"\\n type=\\\"email\\\"\\n formControlName=\\\"emailContact\\\"\\n style=\\\"text-transform: lowercase;\\\"\\n (keydown.space)=\\\"$event.preventDefault()\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n <nz-form-explain *ngIf=\\\"email.touched && email.errors\\\">\\n <ng-container *ngIf=\\\"email.hasError('exists'); else required\\\">\\n E-mail já existe, por favor escolha outro e-mail.\\n </ng-container>\\n <ng-template #required>\\n <ng-container *ngIf=\\\"email.hasError('required') && email.dirty; else invalid\\\">\\n <span class=\\\"error\\\">Campo obrigatório, por favor digite seu e-mail.</span>\\n </ng-container>\\n </ng-template>\\n <ng-template #invalid>\\n <ng-container *ngIf=\\\"email.invalid && email.value.length > 0\\\">\\n <span class=\\\"error\\\">E-mail inválido, por favor digite um e-mail válido.</span>\\n </ng-container>\\n </ng-template>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n </div>\\n</fieldset>\\n\";","import { Component, Input, OnInit } from '@angular/core';\nimport { FormGroup, Validators } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport { UserService } from '@app/modules/user/user.service';\nimport { environment } from '@env/environment';\nimport { of } from 'rxjs';\nimport { catchError, debounceTime, distinctUntilChanged, filter, map, switchMap } from 'rxjs/operators';\n\n@Component({\n selector: 'app-contacts-data-form',\n templateUrl: './contacts-data-form.component.html'\n})\nexport class ContactsDataFormComponent implements OnInit {\n @Input() form: FormGroup;\n @Input() showAlertMsg = true;\n\n isExternalRegister = false;\n\n constructor(private router: Router, private userService: UserService) {}\n\n ngOnInit() {\n this.isExternalRegister = this.router.url === '/entry/register/patient';\n if (this.isExternalRegister) {\n this.form.get('cellphone').setValidators([Validators.required]);\n this.form.get('email').setValidators([Validators.required]);\n }\n\n const emailControl = this.form.get('email');\n this.form\n .get('email')\n .valueChanges.pipe(\n map(email => {\n const value = email && email.toLowerCase();\n emailControl.setValue(value, { emitEvent: false });\n return value;\n }),\n distinctUntilChanged(),\n filter(_ => emailControl.valid && emailControl.value),\n debounceTime(environment.debounceTime),\n switchMap(email => this.userService.checkEmailExists(email).pipe(catchError(err => of(err))))\n )\n .subscribe(res => {\n if (res.status === 200) {\n emailControl.setErrors({ exists: true });\n } else if (res.status === 404) {\n emailControl.setErrors(null);\n } else if (res.status === 400) {\n emailControl.setErrors({ invalid: true });\n }\n });\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\n\n@Component({\n selector: 'app-personal-data-form',\n templateUrl: './personal-data-form.component.html'\n})\nexport class PersonalDataFormComponent {\n @Input() form: FormGroup;\n @Input() isResponsible = false;\n @Input() showAlertMsg = true;\n}\n","export default \"<!--Dados de Identificação ou Responsável-->\\n<fieldset class=\\\"w-100 mb-2\\\" [formGroup]=\\\"form\\\" theme>\\n <legend *ngIf=\\\"!isResponsible\\\">\\n Dados de Identificação <span class=\\\"mandatory\\\">*</span> (dados mÃnimos obrigatórios)\\n </legend>\\n <legend *ngIf=\\\"isResponsible\\\">\\n Dados do Responsável <span class=\\\"mandatory\\\">*</span> (dados mÃnimos obrigatórios)\\n </legend>\\n <ng-container *ngIf=\\\"showAlertMsg\\\">\\n <nz-alert\\n *ngIf=\\\"!isResponsible\\\"\\n class=\\\"mb-4\\\"\\n nzType=\\\"warning\\\"\\n nzMessage=\\\"Ao preencher estes dados, você será capaz de emitir Receitas Simples, Receita de Antibióticos, Atestados, Pedidos de Exames, Laudos, Relatórios, Orientações e Recibos.\\\"\\n ></nz-alert>\\n <nz-alert\\n *ngIf=\\\"isResponsible\\\"\\n class=\\\"mb-4\\\"\\n nzType=\\\"warning\\\"\\n nzMessage=\\\"Obrigatório cadastrar um responsável para pacientes menores de idade.\\\"\\n ></nz-alert>\\n </ng-container>\\n\\n <div class=\\\"row\\\">\\n <div class=\\\"col-lg-4 col-md-4 col-sm-12\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"cpf\\\">CPF<span class=\\\"mandatory\\\"> *</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n id=\\\"cpf\\\"\\n formControlName=\\\"cpf\\\"\\n placeholder=\\\"000.000.000-00\\\"\\n mask=\\\"000.000.000-00\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n <div class=\\\"col-lg-4 col-md-4 col-sm-12\\\">\\n <nz-form-item *ngIf=\\\"form.get('dateOfBirth') as ctrl\\\">\\n <nz-form-label nzFor=\\\"dateOfBirth\\\"\\n >Data de nascimento<span class=\\\"mandatory\\\"> *</span>\\n </nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n id=\\\"dateOfBirth\\\"\\n type=\\\"date\\\"\\n formControlName=\\\"dateOfBirth\\\"\\n placeholder=\\\"DD/MM/AAAA\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n <div class=\\\"col-lg-4 col-md-4 col-sm-12\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"sex\\\">Sexo<span class=\\\"mandatory\\\"> *</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <select formControlName=\\\"sex\\\" id=\\\"sex\\\" nz-input nzPlaceHolder=\\\"Selecione\\\">\\n <option value=\\\"M\\\">Masculino</option>\\n <option value=\\\"F\\\">Feminino</option>\\n </select>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n </div>\\n <div class=\\\"row\\\">\\n <div class=\\\"col-lg-6 col-md-4 col-sm-12\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"fullname\\\">Nome completo<span class=\\\"mandatory\\\"> *</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n formControlName=\\\"fullname\\\"\\n id=\\\"fullname\\\"\\n nz-input\\n placeholder=\\\"ex: João Gilberto\\\"\\n maxlength=\\\"128\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n <div class=\\\"col-lg-6 col-md-4 col-sm-12\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"name\\\"\\n >Nome de exibição/social<span class=\\\"mandatory\\\"> *</span></nz-form-label\\n >\\n <nz-form-control nzHasFeedback>\\n <input\\n formControlName=\\\"name\\\"\\n id=\\\"name\\\"\\n nz-input\\n placeholder=\\\"ex: João Gilberto\\\"\\n maxlength=\\\"128\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n </div>\\n <div class=\\\"row\\\">\\n <div class=\\\"col-lg-6 col-md-4 col-sm-12\\\" [formGroup]=\\\"form.get('membership')\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"mothersName\\\">Nome da mãe</nz-form-label>\\n\\n <nz-form-control nzHasFeedback>\\n <input\\n formControlName=\\\"mothersName\\\"\\n id=\\\"mothersName\\\"\\n nz-input\\n maxlength=\\\"128\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n </div>\\n</fieldset>\\n\";","export default \"<fieldset class=\\\"w-100 mb-2\\\" [formGroup]=\\\"form\\\" theme>\\n <legend>Paciente Pet</legend>\\n\\n <div class=\\\"row\\\">\\n <div class=\\\"col-lg-6 col-md-6 col-sm-12\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"nome\\\">Nome do Pet<span class=\\\"mandatory\\\"> *</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n placeholder=\\\"ex: Rex\\\"\\n formControlName=\\\"name\\\"\\n id=\\\"nome\\\"\\n maxlength=\\\"128\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n <nz-form-explain *ngIf=\\\"form.get('name').dirty && form.get('name').errors\\\">\\n <ng-container *ngIf=\\\"form.get('name').hasError('required')\\\">\\n Campo obrigatório, por favor digite o nome e sobrenome.\\n </ng-container>\\n <ng-container\\n *ngIf=\\\"!form.get('name').hasError('required') && form.get('name').hasError('nome')\\\"\\n >\\n Por favor digite o nome e sobrenome.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n <div class=\\\"col-lg-3 col-md-3 col-sm-12\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"species\\\">Espécie<span class=\\\"mandatory\\\"> *</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <select\\n id=\\\"species\\\"\\n nz-input\\n formControlName=\\\"species\\\"\\n class=\\\"capitalize\\\"\\n (change)=\\\"setSpecies($event.target.value)\\\"\\n >\\n <option value=\\\"\\\" selected>Selecionar</option>\\n <option *ngFor=\\\"let spec of species\\\" [value]=\\\"spec.title\\\">{{ spec.title }}</option>\\n </select>\\n <nz-form-explain *ngIf=\\\"form.get('species').dirty && form.get('species').errors\\\">\\n <ng-container *ngIf=\\\"form.get('species').hasError('required')\\\">\\n Campo obrigatório, por favor selecione a espécie.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n\\n <div class=\\\"col-lg-3 col-md-3 col-sm-12\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"race\\\">Raça <span class=\\\"mandatory\\\"> *</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <select\\n nz-input\\n id=\\\"race\\\"\\n formControlName=\\\"race\\\"\\n class=\\\"capitalize\\\"\\n *ngIf=\\\"races?.length > 0; else raceInput\\\"\\n >\\n <option value=\\\"\\\" selected>Selecionar</option>\\n <option *ngFor=\\\"let race of races\\\" [value]=\\\"race.title\\\">{{ race.title }}</option>\\n </select>\\n <ng-template #raceInput>\\n <input nz-input id=\\\"race\\\" formControlName=\\\"race\\\" autocomplete=\\\"disabled\\\" />\\n </ng-template>\\n <nz-form-explain *ngIf=\\\"form.get('race').dirty && form.get('race').errors\\\">\\n <ng-container *ngIf=\\\"form.get('race').hasError('required')\\\">\\n Campo obrigatório, por favor selecione a raça.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n </div>\\n\\n <div class=\\\"row\\\">\\n <div class=\\\"col-lg-3 col-md-3 col-sm-12\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"dateOfBirth\\\"\\n >Data de nascimento <span class=\\\"mandatory\\\"> *</span></nz-form-label\\n >\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n type=\\\"date\\\"\\n formControlName=\\\"dateOfBirth\\\"\\n placeholder=\\\"DD/MM/AAAA\\\"\\n id=\\\"dateOfBirth\\\"\\n [max]=\\\"currentDate\\\"\\n />\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n\\n <div class=\\\"col-lg-3 col-md-3 col-sm-12\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"approximateAge\\\">{{ labelAge }}</nz-form-label>\\n <nz-form-control>\\n <input nz-input id=\\\"approximateAge\\\" formControlName=\\\"approximateAgeLabel\\\" />\\n </nz-form-control>\\n </nz-form-item>\\n <label\\n nz-checkbox\\n formControlName=\\\"isApproximateAge\\\"\\n style=\\\"font-size: 16px; margin-bottom: 8px;\\\"\\n (nzCheckedChange)=\\\"checkApproximateAge($event)\\\"\\n >Idade aproximada</label\\n >\\n </div>\\n\\n <div class=\\\"col-lg-3 col-md-3 col-sm-12\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"sex\\\">Sexo <span class=\\\"mandatory\\\"> *</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <select formControlName=\\\"sex\\\" id=\\\"sex\\\" nz-input nzPlaceHolder=\\\"Selecione\\\">\\n <option value=\\\"M\\\">Macho</option>\\n <option value=\\\"F\\\">Fêmea</option>\\n </select>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n\\n <div class=\\\"col-lg-3 col-md-3 col-sm-12\\\" *ngIf=\\\"!isPatient && !isExternalRegister\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"fur\\\">Pelagem</nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <select formControlName=\\\"fur\\\" id=\\\"fur\\\" nz-input nzPlaceHolder=\\\"Selecione\\\">\\n <option *ngFor=\\\"let fur of furs\\\" [value]=\\\"fur.title\\\" class=\\\"capitalize\\\">{{\\n fur.title | capitalize\\n }}</option>\\n </select>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n </div>\\n\\n <div class=\\\"row mt-2 mb-2\\\" *ngIf=\\\"isPatient\\\">\\n <div class=\\\"col-md\\\">\\n <nz-form-label nzFor=\\\"weight\\\">Informação de preenchimento pelo profissional</nz-form-label>\\n </div>\\n </div>\\n\\n <div class=\\\"row\\\" *ngIf=\\\"!isPatient && !isExternalRegister\\\">\\n <div class=\\\"col-lg-3 col-md-3 col-sm-12\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"weight\\\">Peso (kg)</nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n type=\\\"number\\\"\\n formControlName=\\\"weight\\\"\\n placeholder=\\\"0.0\\\"\\n id=\\\"weight\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n\\n <nz-form-explain *ngIf=\\\"form.get('weight').dirty && form.get('weight').errors\\\">\\n <ng-container *ngIf=\\\"form.get('weight').hasError('required')\\\">\\n Campo obrigatório, por favor digite data de nascimento.\\n </ng-container>\\n <ng-container\\n *ngIf=\\\"!form.get('weight').hasError('required') && form.get('weight').hasError('weight')\\\"\\n >\\n Nome inválido.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n\\n <div class=\\\"col-lg-3 col-md-3 col-sm-12\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"castration\\\">Castração</nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <select formControlName=\\\"castration\\\" id=\\\"castration\\\" nz-input nzPlaceHolder=\\\"Selecione\\\">\\n <option [ngValue]=\\\"true\\\">Sim</option>\\n <option [ngValue]=\\\"false\\\">Não</option>\\n </select>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n\\n <div class=\\\"col-lg-3 col-md-3 col-sm-12\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"temperament\\\">Temperamento</nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <select formControlName=\\\"temperament\\\" id=\\\"temperament\\\" nz-input nzPlaceHolder=\\\"Selecione\\\">\\n <option value=\\\"aggressive\\\">Agressivo</option>\\n <option value=\\\"fearful\\\">Medroso</option>\\n <option value=\\\"dominant\\\">Dominante</option>\\n <option value=\\\"hyperactive\\\">Hiperativo</option>\\n <option value=\\\"alert\\\">Alerta</option>\\n <option value=\\\"docile\\\">Dócil</option>\\n </select>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n\\n <div class=\\\"col-lg-3 col-md-3 col-sm-12\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"microchipNumber\\\">Nº do Microchip</nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n formControlName=\\\"microchipNumber\\\"\\n id=\\\"microchipNumber\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n </div>\\n</fieldset>\\n\";","import { Component, HostListener, Input, OnInit } from '@angular/core';\nimport { FormGroup, Validators } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport { AuthService } from '@app/core/services/auth.service';\nimport { CoreService } from '@app/core/services/core.service';\nimport { PetPatientService } from '@app/modules/patients/services/pet-patient.service';\nimport { DateUtils } from '@app/shared/data/DateUtils';\nimport { Furs } from '@app/shared/data/Fur';\nimport { nativeAsync } from '@app/shared/decorators/nativeAsync';\nimport { Fur } from '@app/shared/models';\nimport { User } from '@app/shared/models/decodedLoginToken';\nimport { Race } from '@app/shared/models/races';\nimport { Species } from '@app/shared/models/species';\nimport { UserType } from '@app/shared/models/user-type.enum';\nimport moment from 'moment';\n\n@Component({\n selector: 'app-pet-data-form',\n templateUrl: './pet-data-form.component.html',\n styleUrls: ['./pet-data-form.component.scss']\n})\nexport class PetDataFormComponent implements OnInit {\n @Input() form: FormGroup;\n\n species: Species[];\n races: Race[];\n furs: Fur[] = Furs;\n\n labelAge = 'Idade';\n isPatient = false;\n isMobile = false;\n isExternalRegister = false;\n\n constructor(\n private petPatientService: PetPatientService,\n private authService: AuthService,\n private coreService: CoreService,\n private router: Router\n ) {\n this.onResize();\n this.isExternalRegister = this.router.url === '/entry/register/patient';\n }\n @nativeAsync\n async ngOnInit() {\n this.form.get('race').setValidators([Validators.required]);\n this.form.get('dateOfBirth').setValidators([Validators.required]);\n this.form.get('sex').setValidators([Validators.required]);\n\n this.species = await this.petPatientService.getSpecies().toPromise();\n\n this.form.get('dateOfBirth').valueChanges.subscribe(dateOfBirth => {\n if (dateOfBirth) {\n const diffBetweenDate = DateUtils.diffBetweenDate(new Date(), dateOfBirth);\n\n this.form.get('approximateAgeLabel').setValue(diffBetweenDate.result);\n }\n });\n\n this.isPatient = this.isExternalRegister || this.user.userType === UserType.PATIENT;\n }\n\n get user(): User {\n return this.authService.user();\n }\n\n @HostListener('window:resize')\n onResize() {\n this.isMobile = this.coreService.isViewPortMobile();\n }\n\n get cpf() {\n return this.form.get('responsible.cpf');\n }\n\n get currentDate() {\n return moment().format('YYYY-MM-DD');\n }\n @nativeAsync\n async setSpecies(title: any) {\n const species = this.species.find(s => s.title === title);\n await this.getRaces(species._id);\n }\n @nativeAsync\n async getRaces(speciesId: string) {\n this.form.get('race').setValue('');\n this.races = await this.petPatientService.getRaces(speciesId).toPromise();\n }\n\n checkApproximateAge(value: boolean) {\n if (value) {\n this.labelAge = 'Idade Aproximada';\n } else {\n this.labelAge = 'Idade';\n }\n }\n}\n","export default \".capitalize {\\n text-transform: capitalize;\\n}\";","export default \"<fieldset class=\\\"w-100 mb-2\\\" [formGroup]=\\\"form\\\" theme>\\n <legend>Paciente Menor de Idade</legend>\\n\\n <nz-alert\\n class=\\\"mb-4\\\"\\n nzType=\\\"warning\\\"\\n nzMessage=\\\"Ao preencher estes dados, você será capaz de emitir Receitas Simples, Receita de Antibióticos, Atestados, Pedidos de Exames, Laudos, Relatórios, Orientações e Recibos.\\\"\\n ></nz-alert>\\n\\n <div class=\\\"row\\\">\\n <div class=\\\"col-lg-2 col-md-2 col-sm-12\\\" *ngIf=\\\"!isResponsible\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"cpf\\\">CPF <span class=\\\"mandatory\\\"> *</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n id=\\\"cpf\\\"\\n formControlName=\\\"cpf\\\"\\n placeholder=\\\"000.000.000-00\\\"\\n mask=\\\"000.000.000-00\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n <div [ngClass]=\\\"!isResponsible ? 'col-lg-5 col-md-5 col-sm-12' : 'col-lg-6 col-md-6 col-sm-12'\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"nome\\\">Nome completo<span class=\\\"mandatory\\\"> *</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n placeholder=\\\"ex: João Gilberto\\\"\\n formControlName=\\\"fullname\\\"\\n id=\\\"nome\\\"\\n maxlength=\\\"128\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n <nz-form-explain *ngIf=\\\"form.get('fullname').dirty && form.get('fullname').errors\\\">\\n <ng-container *ngIf=\\\"form.get('fullname').hasError('required')\\\">\\n Campo obrigatório, por favor digite o nome e sobrenome.\\n </ng-container>\\n <ng-container\\n *ngIf=\\\"!form.get('fullname').hasError('required') && form.get('fullname').hasError('nome')\\\"\\n >\\n Por favor digite o nome e sobrenome.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n <div [ngClass]=\\\"!isResponsible ? 'col-lg-5 col-md-5 col-sm-12' : 'col-lg-6 col-md-6 col-sm-12'\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"name\\\">Nome de exibição/social</nz-form-label>\\n <nz-form-control>\\n <input nz-input formControlName=\\\"name\\\" id=\\\"name\\\" maxlength=\\\"128\\\" autocomplete=\\\"disabled\\\" />\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n </div>\\n\\n <div class=\\\"row\\\">\\n <div class=\\\"col-lg-6 col-md-6 col-sm-12\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"dateOfBirth\\\"\\n >Data de nascimento<span class=\\\"mandatory\\\"> *</span></nz-form-label\\n >\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n type=\\\"date\\\"\\n formControlName=\\\"dateOfBirth\\\"\\n placeholder=\\\"DD/MM/AAAA\\\"\\n id=\\\"dateOfBirth\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n\\n <nz-form-explain *ngIf=\\\"form.get('dateOfBirth').dirty && form.get('dateOfBirth').errors\\\">\\n <ng-container *ngIf=\\\"form.get('dateOfBirth').hasError('required')\\\">\\n Campo obrigatório, por favor digite data de nascimento.\\n </ng-container>\\n <ng-container\\n *ngIf=\\\"\\n !form.get('dateOfBirth').hasError('required') &&\\n form.get('dateOfBirth').hasError('dateOfBirth')\\n \\\"\\n >\\n Nome inválido.\\n </ng-container>\\n <ng-container\\n *ngIf=\\\"\\n !form.get('dateOfBirth').hasError('required') &&\\n form.get('dateOfBirth').hasError('isNotMinor')\\n \\\"\\n >\\n Dependente deve ser menor de idade.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n <div class=\\\"col-lg-3 col-md-3 col-sm-12\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"sex\\\">Sexo<span class=\\\"mandatory\\\"> *</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <select formControlName=\\\"sex\\\" id=\\\"sex\\\" nz-input nzPlaceHolder=\\\"Selecione\\\">\\n <option value=\\\"M\\\">Masculino</option>\\n <option value=\\\"F\\\">Feminino</option>\\n </select>\\n <nz-form-explain *ngIf=\\\"form.get('sex').dirty && form.get('sex').errors\\\">\\n <ng-container *ngIf=\\\"form.get('sex').hasError('required')\\\">\\n Campo obrigatório, por favor selecione o sexo.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n </div>\\n\\n <div class=\\\"row\\\">\\n <div class=\\\"col-lg-6 col-md-6 col-sm-12\\\" *ngIf=\\\"form.get('membership') as membership\\\">\\n <nz-form-item [formGroup]=\\\"membership\\\">\\n <nz-form-label nzFor=\\\"mothersName\\\">Nome da mãe</nz-form-label>\\n\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n placeholder=\\\"Digite o nome da mãe\\\"\\n formControlName=\\\"mothersName\\\"\\n id=\\\"mothersName\\\"\\n maxlength=\\\"128\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n </div>\\n\\n <div class=\\\"row mb-3 mt-3 align-items-center\\\" *ngIf=\\\"!isResponsible && consulted\\\">\\n <div class=\\\"col-12\\\">\\n <button class=\\\"ok-btn btn-cancel\\\" nz-button (click)=\\\"changedNewRepnsible()\\\">\\n Alterar Responsável\\n </button>\\n </div>\\n </div>\\n\\n <div class=\\\"row mb-3\\\" *ngIf=\\\"!isResponsible && !consulted\\\">\\n <div class=\\\"col 12\\\">\\n <nz-divider nzOrientation=\\\"horizontal\\\"></nz-divider>\\n </div>\\n <div class=\\\"col-12\\\" [formGroup]=\\\"form.get('responsible')\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"cpfResponsible\\\"\\n >CPF do responsável <span class=\\\"mandatory\\\">*</span></nz-form-label\\n >\\n <div class=\\\"row align-items-center\\\">\\n <div class=\\\"col-5\\\">\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n id=\\\"cpfResponsible\\\"\\n placeholder=\\\"Digite o CPF\\\"\\n mask=\\\"000.000.000-00\\\"\\n formControlName=\\\"cpf\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n </nz-form-control>\\n </div>\\n <button\\n nz-button\\n class=\\\"btn-primary\\\"\\n (click)=\\\"searchCpf()\\\"\\n [disabled]=\\\"loading || cpf.invalid || (cpf.errors && cpf.hasError('cpf'))\\\"\\n >\\n <span *ngIf=\\\"!loading\\\">OK</span>\\n <span\\n class=\\\"spinner-border spinner-border-sm\\\"\\n role=\\\"status\\\"\\n aria-hidden=\\\"true\\\"\\n *ngIf=\\\"loading\\\"\\n ></span>\\n </button>\\n </div>\\n </nz-form-item>\\n </div>\\n </div>\\n</fieldset>\\n\";","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { AuthService } from '@app/core/services/auth.service';\nimport { HealthProfessionalService } from '@app/modules/health-professional/services/health-professional.service';\nimport { PatientsService } from '@app/modules/patients/services/patients.service';\nimport { nativeAsync } from '@app/shared/decorators/nativeAsync';\nimport { User } from '@app/shared/models/decodedLoginToken';\nimport { AppToastService } from '@app/shared/services/app-toast.service';\nimport { BigboostService } from '@app/shared/services/bigboost.service';\n\n@Component({\n selector: 'app-underage-data-form',\n templateUrl: './underage-data-form.component.html'\n})\nexport class UnderageDataFormComponent implements OnInit {\n @Input() isResponsible = false;\n @Input() form: FormGroup;\n\n @Output() patchFormEvent = new EventEmitter<any>();\n @Output() changeConsultResponsibleEvent = new EventEmitter<boolean>();\n\n loading = false;\n consulted = false;\n\n constructor(\n private authService: AuthService,\n private patientService: PatientsService,\n private healthProfessionalService: HealthProfessionalService,\n private bigboostService: BigboostService,\n private notification: AppToastService\n ) {}\n\n ngOnInit() {}\n\n get cpf() {\n return this.form.get('responsible.cpf');\n }\n\n get user(): User {\n return this.authService.user();\n }\n\n @nativeAsync\n async searchCpf() {\n try {\n const cpf = this.cpf.value;\n\n this.loading = true;\n const patient = await this.getPatient(cpf);\n\n if (patient) {\n this.consulted = true;\n this.patchFormEvent.emit({\n patientExists: true,\n data: patient\n });\n } else {\n const consult = await this.consultCpf(cpf);\n if (consult.status === 1) {\n this.consulted = true;\n this.patchFormEvent.emit({\n patientExists: false,\n data: consult\n });\n } else {\n this.patchFormEvent.emit(null);\n this.notification.notify(\n 'warning',\n 'Responsável não encontrado.',\n 'CPF informado não foi encontrado em nossas bases de consulta'\n );\n }\n }\n } catch (err) {\n console.error(err);\n } finally {\n this.loading = false;\n }\n }\n @nativeAsync\n private async getPatient(cpf: string) {\n try {\n const hasPatient = this.user ? await this.hasPatient(cpf) : null;\n if (hasPatient) {\n return hasPatient;\n }\n return await this.patientService.getPatientByCpf(cpf).toPromise();\n } catch (err) {\n return null;\n }\n }\n @nativeAsync\n private async hasPatient(cpf: string) {\n const result = await this.healthProfessionalService\n .getPatientsByUserId(cpf, this.user._id)\n .toPromise();\n return result.length ? result[0] : null;\n }\n @nativeAsync\n private async consultCpf(cpf: string) {\n try {\n return await this.bigboostService.consultCpf(cpf).toPromise();\n } catch (err) {\n console.error(err);\n const consult = {\n status: -1,\n cpf,\n erroCodigo: err.status,\n erro: 'A importação de dados do cpf está com instabilidade'\n };\n return consult;\n }\n }\n\n changedNewRepnsible() {\n this.consulted = false;\n this.changeConsultResponsibleEvent.emit(false);\n this.cpf.reset();\n this.cpf.enable();\n }\n}\n","export default \"<div class=\\\"input\\\">\\r\\n <button nz-button (click)=\\\"openChooseFile()\\\"><i nz-icon nzType=\\\"upload\\\"></i>{{ textButton }}</button>\\r\\n <span>{{ filename || placeholder }}</span>\\r\\n <input #38fn57dfjek3 id=\\\"38fn57dfjek3\\\" type=\\\"file\\\" [accept]=\\\"accept\\\" (change)=\\\"onChange($event)\\\" />\\r\\n</div>\\r\\n\";","import { Component, ElementRef, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\r\nimport { ControlValueAccessor, FormControl, FormGroup, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { AppToastService } from '@app/shared/services/app-toast.service';\r\n\r\n@Component({\r\n selector: 'app-input-file',\r\n templateUrl: './input-file.component.html',\r\n styleUrls: ['./input-file.component.scss'],\r\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: InputFileComponent, multi: true }]\r\n})\r\nexport class InputFileComponent implements OnInit, ControlValueAccessor {\r\n @Input() accept = '';\r\n @Input() textButton = '';\r\n @Input() transformTo = '';\r\n @Input() maxSize: number = null;\r\n @Input() placeholder = 'Arquivo não selecionado';\r\n\r\n @Input()\r\n set file(file: any) {\r\n if (file) {\r\n this.form.get('file').setValue(file);\r\n }\r\n }\r\n\r\n @Input() filename = '';\r\n @Output() filenameChange = new EventEmitter<string>();\r\n\r\n form: FormGroup = new FormGroup({\r\n file: new FormControl('')\r\n });\r\n\r\n @ViewChild('38fn57dfjek3')\r\n input: ElementRef;\r\n\r\n constructor(private notification: AppToastService) {}\r\n\r\n ngOnInit() {}\r\n\r\n registerOnChange(fn: any): void {\r\n this.form.valueChanges.subscribe(value => fn(value.file));\r\n }\r\n\r\n registerOnTouched(fn: any): void {}\r\n\r\n setDisabledState(isDisabled: boolean): void {}\r\n\r\n writeValue(value: any): void {\r\n if (value) {\r\n this.form.setValue({ file: value });\r\n } else {\r\n this.reset();\r\n this.filename = '';\r\n }\r\n }\r\n\r\n reset() {\r\n if (this.input) {\r\n this.input.nativeElement['value'] = null;\r\n }\r\n }\r\n\r\n public onChange(event) {\r\n const files = event.target.files;\r\n if (files.length === 0) {\r\n return;\r\n }\r\n\r\n const file = files[0];\r\n this.filename = file.name;\r\n\r\n if (this.accept != null) {\r\n const accepts = this.accept.split(',');\r\n const result = accepts.filter(accept => new RegExp(accept.replace('*', '.*')).test(file.type));\r\n if (result.length === 0) {\r\n this.notification.notify(\r\n 'warning',\r\n 'Aviso',\r\n `Somente arquivo com extensão ${this.accept} é permitido`\r\n );\r\n this.filename = '';\r\n this.placeholder = '';\r\n return false;\r\n }\r\n }\r\n\r\n if (this.maxSize != null && file.size > this.maxSize) {\r\n this.notification.notify(\r\n 'warning',\r\n 'Aviso',\r\n `O arquivo não pode ser maior que ${this.maxSize} bytes`\r\n );\r\n return false;\r\n }\r\n\r\n if (this.transformTo) {\r\n const reader = new FileReader();\r\n reader.onload = e => this.form.setValue({ file: reader.result });\r\n switch (this.transformTo) {\r\n case 'base64':\r\n reader.readAsDataURL(file);\r\n break;\r\n default:\r\n reader.readAsText(file);\r\n }\r\n } else {\r\n this.form.setValue({ file });\r\n }\r\n\r\n this.filenameChange.emit(this.filename);\r\n }\r\n\r\n openChooseFile() {\r\n this.input.nativeElement.click();\r\n }\r\n}\r\n","export default \".input input {\\n display: none;\\n}\\n\\n.input span {\\n padding-left: 15px;\\n}\\n\\n#filename {\\n display: block;\\n}\";","export default \"<nz-input-group nzPrefixIcon=\\\"lock\\\" [nzSuffix]=\\\"suffixTemplate\\\" nzSize=\\\"large\\\">\\n <input\\n nz-input\\n [type]=\\\"isPasswordVisible ? 'text' : 'password'\\\"\\n [placeholder]=\\\"placeholder\\\"\\n [formControlName]=\\\"formControlName\\\"\\n [attr.id]=\\\"formControlName\\\"\\n theme\\n />\\n</nz-input-group>\\n<ng-template #suffixTemplate>\\n <i\\n nz-icon\\n [nzType]=\\\"isPasswordVisible ? 'eye-invisible' : 'eye'\\\"\\n (click)=\\\"isPasswordVisible = !isPasswordVisible\\\"\\n ></i>\\n</ng-template>\\n\";","import { Component, Input, forwardRef } from '@angular/core';\nimport {\n ControlContainer,\n FormGroupDirective,\n NG_VALUE_ACCESSOR,\n ControlValueAccessor\n} from '@angular/forms';\n\n@Component({\n selector: 'app-input-password',\n templateUrl: './input-password.component.html',\n styleUrls: ['./input-password.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: forwardRef(() => InputPasswordComponent)\n }\n ],\n viewProviders: [\n {\n provide: ControlContainer,\n useExisting: FormGroupDirective\n }\n ]\n})\nexport class InputPasswordComponent implements ControlValueAccessor {\n @Input() formControlName: string;\n @Input() placeholder: string;\n @Input() isPasswordVisible = false;\n\n constructor() {}\n\n writeValue(value: any): void {}\n registerOnChange(fn: any): void {}\n registerOnTouched(fn: any): void {}\n setDisabledState?(isDisabled: boolean): void {}\n}\n","export default \"\";","export default \"<input\\n [nzAutocomplete]=\\\"autoMedication\\\"\\n appFocus\\n focus=\\\"true\\\"\\n placeholder=\\\"Nome do medicamento ou princÃpio ativo\\\"\\n class=\\\"medicationNameInput\\\"\\n [formControl]=\\\"inputSearch\\\"\\n nz-input\\n/>\\n<nz-autocomplete\\n #autoMedication\\n class=\\\"medicationAutoComplete\\\"\\n nzBackfill\\n (selectionChange)=\\\"selectEvent($event.nzValue)\\\"\\n>\\n <nz-auto-option *ngIf=\\\"isLoading\\\" class=\\\"loading-container\\\">\\n <span>Carregando...</span>\\n </nz-auto-option>\\n <ng-container *ngIf=\\\"!isLoading && medicaments?.length > 0\\\">\\n <nz-auto-option *ngFor=\\\"let option of medicaments\\\" [nzLabel]=\\\"option.nome\\\" [nzValue]=\\\"option\\\">\\n <span>{{ option?.nome }}</span>\\n <span id=\\\"indexPresentation\\\">, {{ option.apresentacaoCustomizada }}</span>\\n <span *ngIf=\\\"option?.tipo\\\">, {{ option?.tipo }}</span>\\n </nz-auto-option>\\n </ng-container>\\n</nz-autocomplete>\\n\";","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { CrService } from '@app/modules/document/services/cr.service';\nimport { MedicationCr } from '@app/shared/models/medication-cr';\nimport { AppToastService } from '@app/shared/services/app-toast.service';\nimport { debounceTime, distinctUntilChanged, filter, switchMap, tap } from 'rxjs/operators';\n\n@Component({\n selector: 'app-input-search-medicaments',\n templateUrl: './input-search-medicaments.component.html',\n styleUrls: ['./input-search-medicaments.component.scss']\n})\nexport class InputSearchMedicamentsComponent implements OnInit {\n @Output() onMedicamentSelected = new EventEmitter<MedicationCr>();\n\n @Input() set valueInputSearch(value: string) {\n this.inputSearch.setValue(value);\n }\n\n isLoading = false;\n medicaments: MedicationCr[] = [];\n inputSearch = new FormControl();\n\n medicamentSelected: MedicationCr;\n\n constructor(private crService: CrService, private notification: AppToastService) {}\n\n ngOnInit(): void {\n this.inputSearch.valueChanges\n .pipe(\n filter((text: string) => text && text.length >= 3),\n tap(() => {\n this.isLoading = true;\n this.medicaments = [];\n }),\n debounceTime(300),\n distinctUntilChanged(),\n switchMap(text => this.crService.searchMedicament(text))\n )\n .subscribe(medicaments => {\n if (medicaments.length > 0) {\n this.medicaments = medicaments;\n } else {\n this.notification.notify(\n 'warning',\n 'Não foi encontrado medicamento com nome ou princÃpio ativo informado!',\n ''\n );\n }\n\n this.isLoading = false;\n });\n }\n\n selectEvent(medication: MedicationCr) {\n if (medication) {\n this.medicamentSelected = medication;\n this.onMedicamentSelected.next(medication);\n }\n }\n}\n","export default \".medicationNameInput {\\n background-color: transparent;\\n border-color: transparent;\\n padding: 0;\\n color: #585858 !important;\\n font-size: 20px;\\n height: 40px;\\n border-radius: 0;\\n border-bottom: 2px solid #6e6e6e;\\n}\\n.medicationNameInput::-moz-placeholder {\\n color: #f6b4af;\\n}\\n.medicationNameInput::placeholder, .medicationNameInput {\\n color: #f6b4af;\\n}\\n@media (max-width: 1025px) {\\n .medicationNameInput {\\n font-size: 15px;\\n }\\n}\\n.medicationNameInput:hover, .medicationNameInput:focus {\\n border-bottom: 2px solid #6e6e6e;\\n box-shadow: none;\\n}\\n.loading-container {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n background-color: #fff;\\n}\\n.loading-container span {\\n font-size: 16px;\\n}\";","import { AfterViewInit, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { ColorSetting } from '@app/shared/models/color-setting';\n\n@Component({\n selector: 'app-medicament-form',\n templateUrl: './medicament-form.component.html',\n styleUrls: ['./medicament-form.component.scss']\n})\nexport class MedicamentFormComponent implements AfterViewInit {\n @Input() index: number;\n @Input() form: FormGroup;\n @Input() signed = false;\n @Input() colorSetting: ColorSetting;\n\n @Output() onDelete = new EventEmitter<number>();\n @Output() onSelect = new EventEmitter<any>();\n\n unitsOfMeasurement = [\n { label: 'Embalagem(ns)', value: 'PACKING' },\n { label: 'Caixa(s)', value: 'BOX' },\n { label: 'Frasco(s)', value: 'BOTTLE' },\n { label: 'Cápsula(s)', value: 'CAPSULE' },\n { label: 'Comprimido(s)', value: 'PILL' },\n { label: 'Glóbulo(s)', value: 'BLOOD_CELL' },\n { label: 'Sachê(s)', value: 'SACHET' },\n { label: 'Bisnaga(s)', value: 'TUBE' },\n { label: 'Ampola(s)', value: 'AMPOULE' },\n { label: 'Flaconete(s)', value: 'VIAL' },\n { label: 'ML(s)', value: 'ML' },\n { label: 'MG(s)', value: 'MG' },\n { label: 'UI(s)', value: 'UI' }\n ];\n\n ngAfterViewInit(): void {\n if (this.signed) {\n this.form.disable();\n }\n }\n\n minusPrescribedQuantity() {\n const value = this.form.get('prescribedQuantity').value;\n if (value > 1) {\n this.form.get('prescribedQuantity').setValue(value - 1);\n }\n }\n\n plusPrescribedQuantity() {\n const value = this.form.get('prescribedQuantity').value;\n this.form.get('prescribedQuantity').setValue(value + 1);\n }\n\n onEditing() {\n this.form.get('editing').setValue(true);\n }\n\n cancelEditing() {\n this.form.get('editing').setValue(false);\n }\n}\n","export default \"<form [formGroup]=\\\"form\\\" class=\\\"card p-2 mb-2 h-100\\\">\\n <ng-container *ngIf=\\\"form.value as medicament\\\">\\n <div class=\\\"header-medicament\\\">\\n <ng-container *ngIf=\\\"medicament.type === 'industrialized'\\\">\\n <ng-container *ngIf=\\\"medicament.search || medicament.editing\\\">\\n <div class=\\\"input-search\\\">\\n <app-input-search-medicaments\\n (onMedicamentSelected)=\\\"onSelect.emit($event)\\\"\\n ></app-input-search-medicaments>\\n </div>\\n </ng-container>\\n <ng-container *ngIf=\\\"!medicament.search && !medicament.editing\\\">\\n <span class=\\\"title\\\" [ngStyle]=\\\"{ color: colorSetting?.primary }\\\"\\n >{{ index + 1 }}. {{ medicament.name }}</span\\n >\\n </ng-container>\\n </ng-container>\\n <ng-container *ngIf=\\\"medicament.type === 'free-text'\\\">\\n <div class=\\\"input-name\\\">\\n <span>{{ index + 1 }}.</span>\\n <textarea\\n [id]=\\\"'input-name_' + index\\\"\\n appAutoSize\\n [nzAutosize]=\\\"{ minRows: 1 }\\\"\\n appFocus\\n focus=\\\"true\\\"\\n formControlName=\\\"name\\\"\\n nz-input\\n placeholder=\\\"Digite o nome do medicamento\\\"\\n ></textarea>\\n </div>\\n </ng-container>\\n <div class=\\\"actions\\\">\\n <i\\n *ngIf=\\\"!medicament.search && medicament.editing && medicament.type === 'industrialized'\\\"\\n (click)=\\\"cancelEditing()\\\"\\n nz-icon\\n nzType=\\\"close\\\"\\n nzTheme=\\\"outline\\\"\\n class=\\\"mr-2\\\"\\n nzTooltipTitle=\\\"Cancelar\\\"\\n nzTooltipPlacement=\\\"top\\\"\\n nz-tooltip\\n ></i>\\n <i\\n class=\\\"fa fa-pen\\\"\\n (click)=\\\"onEditing()\\\"\\n *ngIf=\\\"!medicament.search && !medicament.editing && medicament.type === 'industrialized'\\\"\\n nzTooltipTitle=\\\"Editar\\\"\\n nzTooltipPlacement=\\\"top\\\"\\n nz-tooltip\\n ></i>\\n <i\\n class=\\\"fa fa-trash-solid\\\"\\n (click)=\\\"onDelete.emit(index)\\\"\\n nzTooltipTitle=\\\"Excluir\\\"\\n nzTooltipPlacement=\\\"top\\\"\\n nz-tooltip\\n ></i>\\n </div>\\n </div>\\n <div class=\\\"body-medicament\\\" *ngIf=\\\"!medicament.search || medicament.editing\\\">\\n <h2 class=\\\"body-medicament-description\\\" *ngIf=\\\"medicament.principle || medicament.description\\\">\\n {{ medicament.principle }}\\n <span *ngIf=\\\"medicament.principle && medicament.description\\\"> - </span\\n >{{ medicament.description }}\\n </h2>\\n\\n <textarea\\n [id]=\\\"'input-dosage_' + i\\\"\\n appAutoSize\\n [nzAutosize]=\\\"{ minRows: 1 }\\\"\\n appFocus\\n focus=\\\"true\\\"\\n formControlName=\\\"dosage\\\"\\n nz-input\\n placeholder=\\\"Escreva aqui a posologia...\\\"\\n ></textarea>\\n </div>\\n <div class=\\\"footer-medicament\\\" *ngIf=\\\"!medicament.search || medicament.editing\\\">\\n <div>\\n <label>Quantidade</label>\\n <div class=\\\"number\\\">\\n <span\\n class=\\\"minus\\\"\\n (click)=\\\"minusPrescribedQuantity()\\\"\\n [ngStyle]=\\\"{ 'background-color': colorSetting?.primary }\\\"\\n >\\n <i class=\\\"fa-solid fa-minus\\\"></i>\\n </span>\\n <input formControlName=\\\"prescribedQuantity\\\" type=\\\"number\\\" />\\n <span\\n class=\\\"plus\\\"\\n (click)=\\\"plusPrescribedQuantity()\\\"\\n [ngStyle]=\\\"{ 'background-color': colorSetting?.primary }\\\"\\n >\\n <i class=\\\"fa-solid fa-plus\\\"></i>\\n </span>\\n </div>\\n </div>\\n <div class=\\\"footer-embalagens\\\">\\n <select\\n formControlName=\\\"unitOfMeasurement\\\"\\n [ngClass]=\\\"{ disabled: medicament.type === 'industrialized' }\\\"\\n >\\n <option *ngFor=\\\"let item of unitsOfMeasurement\\\" [value]=\\\"item.value\\\">{{ item.label }}</option>\\n </select>\\n </div>\\n </div>\\n </ng-container>\\n</form>\\n\";","export default \".header-medicament {\\n display: flex;\\n align-items: flex-start;\\n justify-content: space-between;\\n}\\n.header-medicament span {\\n width: 30px;\\n}\\n.header-medicament .input-name {\\n flex: 1;\\n display: flex;\\n align-items: flex-start;\\n justify-content: space-between;\\n}\\n.header-medicament .input-search {\\n flex: 1;\\n}\\n.header-medicament .title {\\n flex: 1;\\n font-size: 14px;\\n font-weight: 700;\\n color: var(--bg-color-primary);\\n}\\n.header-medicament .actions {\\n display: flex !important;\\n align-items: center !important;\\n justify-content: flex-end !important;\\n width: 100% !important;\\n max-width: 55px !important;\\n margin-left: 24px !important;\\n}\\n.header-medicament .actions i {\\n margin-left: 5px !important;\\n}\\n.body-medicament {\\n margin-top: 5px;\\n}\\n.body-medicament .body-medicament-description {\\n font-family: \\\"prolight\\\", sans-serif;\\n font-size: 13px;\\n color: #4d4d4d;\\n margin: 14px 0;\\n}\\n.footer-medicament {\\n display: flex;\\n align-items: flex-end;\\n justify-content: flex-start;\\n}\\n.footer-medicament label {\\n margin-left: 10px;\\n margin-bottom: 0;\\n font-weight: 600;\\n font-size: 12px;\\n}\\n.footer-medicament span {\\n cursor: pointer;\\n}\\n.footer-medicament .minus,\\n.footer-medicament .plus {\\n width: 24px;\\n height: 24px;\\n background: #f2f2f2;\\n padding: 8px 5px 8px 5px;\\n display: inline-block;\\n vertical-align: middle;\\n text-align: center;\\n position: relative;\\n background-color: #0b6054;\\n color: white;\\n}\\n.footer-medicament .minus i,\\n.footer-medicament .plus i {\\n position: absolute;\\n top: 0;\\n left: 0;\\n}\\n.footer-medicament .minus {\\n border-radius: 4px 0 0 4px;\\n}\\n.footer-medicament .plus {\\n border-radius: 0 4px 4px 0;\\n}\\n.footer-medicament input {\\n height: 24px;\\n width: 35px;\\n text-align: center;\\n font-size: 18px;\\n border: 1px solid #ddd;\\n display: inline-block;\\n vertical-align: middle;\\n font-weight: 600;\\n}\\n.footer-medicament .footer-embalagens {\\n margin-left: 20px;\\n}\\ntextarea,\\ntextarea:disabled {\\n resize: none;\\n background-color: transparent;\\n border-color: none;\\n border: 0;\\n box-shadow: none;\\n padding: 0;\\n font-weight: 600;\\n font-size: 14px;\\n color: #585858;\\n}\\ntextarea::-moz-placeholder, textarea:disabled::-moz-placeholder {\\n color: #f6b4af;\\n}\\ntextarea::placeholder,\\ntextarea:disabled::placeholder {\\n color: #f6b4af;\\n}\\ntextarea:hover, textarea:focus,\\ntextarea:disabled:hover,\\ntextarea:disabled:focus {\\n background-color: transparent;\\n border-color: transparent;\\n box-shadow: none;\\n}\\ntextarea::-webkit-scrollbar,\\ntextarea:disabled::-webkit-scrollbar {\\n width: 0;\\n}\\n.disabled {\\n pointer-events: none;\\n opacity: 0.4;\\n -webkit-appearance: none;\\n -moz-appearance: none;\\n padding: 0 8px;\\n height: 23px;\\n text-indent: 1px;\\n}\";","export default \"<div class=\\\"toolbar\\\">\\r\\n <button (click)=\\\"open()\\\" class=\\\"btn btn-menu menu-toggler\\\" type=\\\"button\\\" theme>\\r\\n <i class=\\\"fa fa-subject\\\"></i>\\r\\n </button>\\r\\n <div class=\\\"toolbar-menu\\\">\\r\\n <div class=\\\"toolbar-tags\\\"></div>\\r\\n </div>\\r\\n</div>\\r\\n<nz-drawer\\r\\n (nzOnClose)=\\\"close()\\\"\\r\\n [nzClosable]=\\\"false\\\"\\r\\n [nzVisible]=\\\"visible\\\"\\r\\n [nzWidth]=\\\"326\\\"\\r\\n nzPlacement=\\\"left\\\"\\r\\n nzWrapClassName=\\\"menu-drawer\\\"\\r\\n [ngSwitch]=\\\"user?.userType\\\"\\r\\n theme\\r\\n>\\r\\n <div class=\\\"inner-menu\\\">\\r\\n <ul class=\\\"menu list-unstyled\\\">\\r\\n <ng-container *ngSwitchCase=\\\"'admin'\\\">\\r\\n <li>\\r\\n <a (click)=\\\"changeRoute('')\\\">\\r\\n <i class=\\\"fa fa-view-compact\\\"></i>\\r\\n Visão geral\\r\\n </a>\\r\\n </li>\\r\\n\\r\\n <li *ngIf=\\\"user.permission === Permission.MASTER\\\">\\r\\n <a (click)=\\\"changeRoute('register')\\\" style=\\\"font-size: 17px;\\\">\\r\\n <i class=\\\"fa fa-business\\\"></i>\\r\\n Cadastrar Administrador\\r\\n </a>\\r\\n </li>\\r\\n\\r\\n <li>\\r\\n <a (click)=\\\"changeRoute('patients')\\\">\\r\\n <i class=\\\"fa fa-user\\\"></i>\\r\\n Pacientes\\r\\n </a>\\r\\n <ul>\\r\\n <li class=\\\"subitem\\\" (click)=\\\"changeRoute('doctors')\\\"><a>Médicos</a></li>\\r\\n <li class=\\\"subitem\\\" (click)=\\\"changeRoute('dentists')\\\"><a>Dentistas</a></li>\\r\\n <li class=\\\"subitem\\\" (click)=\\\"changeRoute('pharmacies')\\\"><a>Farmácias</a></li>\\r\\n <li class=\\\"subitem\\\" (click)=\\\"changeRoute('pharmacists')\\\"><a>Farmacêuticos</a></li>\\r\\n <li class=\\\"subitem\\\" (click)=\\\"changeRoute('veterinarians')\\\"><a>Veterinários</a></li>\\r\\n <li class=\\\"subitem\\\" (click)=\\\"changeRoute('pets')\\\"><a>Pets</a></li>\\r\\n </ul>\\r\\n </li>\\r\\n\\r\\n <li *ngIf=\\\"user.permission === Permission.MASTER\\\">\\r\\n <a (click)=\\\"changeRoute('prescribers')\\\" style=\\\"font-size: 16px;\\\">\\r\\n <i class=\\\"fa fa-user\\\"></i>\\r\\n Atividade dos Prescritores\\r\\n </a>\\r\\n </li>\\r\\n\\r\\n <li>\\r\\n <a (click)=\\\"changeRoute('prescriptions')\\\">\\r\\n <i class=\\\"fa fa-file-medical\\\"></i>\\r\\n Prescrições\\r\\n </a>\\r\\n <ul>\\r\\n <li class=\\\"subitem\\\" (click)=\\\"changeRoute('attestations')\\\"><a>Atestados</a></li>\\r\\n <li class=\\\"subitem\\\" (click)=\\\"changeRoute('exams')\\\"><a>Exames</a></li>\\r\\n <li class=\\\"subitem\\\" (click)=\\\"changeRoute('orientations')\\\"><a>Outros documentos</a></li>\\r\\n <li\\r\\n class=\\\"subitem\\\"\\r\\n (click)=\\\"changeRoute('retentions')\\\"\\r\\n *ngIf=\\\"user.permission === Permission.MASTER\\\"\\r\\n >\\r\\n <a>Retenções</a>\\r\\n </li>\\r\\n <li\\r\\n class=\\\"subitem\\\"\\r\\n (click)=\\\"changeRoute('infusions')\\\"\\r\\n *ngIf=\\\"user.permission === Permission.MASTER\\\"\\r\\n >\\r\\n <a>Infusões</a>\\r\\n </li>\\r\\n </ul>\\r\\n </li>\\r\\n\\r\\n <li *ngIf=\\\"user.permission === Permission.MASTER\\\">\\r\\n <a (click)=\\\"changeRoute('specialties')\\\"><i class=\\\"fa fa-file-alt\\\"></i> Especialidades</a>\\r\\n <ul>\\r\\n <li class=\\\"subitem\\\" (click)=\\\"changeRoute('medicaments')\\\"><a>Medicamentos</a></li>\\r\\n <li class=\\\"subitem\\\" (click)=\\\"changeRoute('additional-features')\\\">\\r\\n <a style=\\\"font-size: 15px;\\\">Funcionalidades adicionais</a>\\r\\n </li>\\r\\n <li class=\\\"subitem\\\" (click)=\\\"changeRoute('victa')\\\">\\r\\n <a style=\\\"font-size: 16px;\\\">Sugestão de Protocolos</a>\\r\\n </li>\\r\\n </ul>\\r\\n </li>\\r\\n\\r\\n <li *ngIf=\\\"user.permission === Permission.MASTER\\\">\\r\\n <a (click)=\\\"changeRoute('tags')\\\">\\r\\n <i class=\\\"fa fa-notes-medical\\\"></i>\\r\\n Prontuário\\r\\n </a>\\r\\n <ul>\\r\\n <li class=\\\"subitem\\\" (click)=\\\"changeRoute('tags')\\\"><a>Tags</a></li>\\r\\n </ul>\\r\\n </li>\\r\\n\\r\\n <li *ngIf=\\\"user.permission === Permission.MASTER\\\">\\r\\n <a (click)=\\\"changeRoute('logs')\\\">\\r\\n <i class=\\\"fa fa-list-ul\\\"></i>\\r\\n QR Code Logs\\r\\n </a>\\r\\n <ul>\\r\\n <li class=\\\"subitem\\\" (click)=\\\"changeRoute('logs')\\\"><a>Todos</a></li>\\r\\n <li class=\\\"subitem\\\" (click)=\\\"changeRoute('logs', { groupBy: 'date' })\\\"><a>Por dia</a></li>\\r\\n <li class=\\\"subitem\\\" (click)=\\\"changeRoute('logs', { groupBy: 'month' })\\\"><a>Por mês</a></li>\\r\\n <li class=\\\"subitem\\\" (click)=\\\"changeRoute('logs', { groupBy: 'prescription' })\\\">\\r\\n <a>Por prescrição</a>\\r\\n </li>\\r\\n </ul>\\r\\n </li>\\r\\n\\r\\n <li *ngIf=\\\"user.permission === Permission.MASTER\\\">\\r\\n <a (click)=\\\"changeRoute('unsubscribe-user')\\\">\\r\\n <i class=\\\"ml-1 mr-3\\\" nz-icon nzType=\\\"user-delete\\\" nzTheme=\\\"outline\\\"></i>\\r\\n Remover usuário\\r\\n </a>\\r\\n </li>\\r\\n\\r\\n <li *ngIf=\\\"user.permission === Permission.MASTER\\\">\\r\\n <a (click)=\\\"changeRoute('domain-exams')\\\">\\r\\n Importar exames\\r\\n </a>\\r\\n </li>\\r\\n\\r\\n <li *ngIf=\\\"user.permission === Permission.MASTER\\\">\\r\\n <a (click)=\\\"changeRoute('domain-serene')\\\">\\r\\n Importar Protocolos Serene\\r\\n </a>\\r\\n </li>\\r\\n\\r\\n <li *ngIf=\\\"user.permission === Permission.MASTER\\\">\\r\\n <a (click)=\\\"changeRoute('domain-medicaments')\\\">\\r\\n Importar Medicamentos\\r\\n </a>\\r\\n </li>\\r\\n </ng-container>\\r\\n </ul>\\r\\n </div>\\r\\n <div [ngStyle]=\\\"{ color: 'white' }\\\">\\r\\n <span class=\\\"m-2\\\">F: {{ frontendVersion }}</span>\\r\\n <span class=\\\"m-2\\\">B: {{ backendVersion$ | async }}</span>\\r\\n </div>\\r\\n</nz-drawer>\\r\\n\";","import { DOCUMENT } from '@angular/common';\r\nimport { Component, Inject, OnInit, Renderer2 } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { AuthService } from '@app/core/services/auth.service';\r\nimport { CoreService } from '@app/core/services/core.service';\r\nimport { PharmacistService } from '@app/modules/pharmacist/services/pharmacist.service';\r\nimport { nativeAsync } from '@app/shared/decorators/nativeAsync';\r\nimport { ModalSearchComponent } from '@app/shared/modals/modal-search/modal-search.component';\r\nimport { Permission } from '@app/shared/models/permission.enum';\r\nimport { BsModalRef, BsModalService } from 'ngx-bootstrap/modal';\r\nimport { Observable } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'app-menu',\r\n templateUrl: './menu.component.html',\r\n styleUrls: ['./menu.component.scss', '../../../modules/document/document.component.scss']\r\n})\r\nexport class MenuComponent implements OnInit {\r\n modalRef: BsModalRef;\r\n visible = false;\r\n userId: string;\r\n userType: string;\r\n user: any;\r\n completeUser: any;\r\n functionalities = [];\r\n Permission = Permission;\r\n backendVersion$: Observable<string>;\r\n\r\n constructor(\r\n @Inject(DOCUMENT) private document: Document,\r\n private renderer: Renderer2,\r\n private router: Router,\r\n private modalService: BsModalService,\r\n private coreService: CoreService,\r\n private authService: AuthService,\r\n private pharmacistService: PharmacistService\r\n ) {\r\n this.backendVersion$ = this.coreService.getBackendVersion();\r\n }\r\n\r\n @nativeAsync\r\n async ngOnInit() {\r\n this.user = this.authService.user();\r\n this.userId = localStorage.getItem('userId');\r\n this.userType = localStorage.getItem('userType');\r\n await this.getCompleteUser(this.user);\r\n }\r\n\r\n @nativeAsync\r\n private async getCompleteUser(user) {\r\n if (user.userType === 'pharmacist') {\r\n this.getPharmacistData();\r\n }\r\n }\r\n\r\n @nativeAsync\r\n async getPharmacistData() {\r\n this.completeUser = await this.pharmacistService.getPharmacistByUserId(this.user._id).toPromise();\r\n }\r\n\r\n get frontendVersion(): string {\r\n return this.coreService.frontendVersion;\r\n }\r\n\r\n open(): void {\r\n this.visible = true;\r\n setTimeout(() => {\r\n this.renderer.setStyle(this.document.body, 'padding-right', '0px');\r\n }, 1);\r\n }\r\n\r\n close(): void {\r\n this.visible = false;\r\n }\r\n\r\n changeRoute(route: string, queryParams: any) {\r\n this.router.navigate(['/admin', route], { queryParams });\r\n }\r\n\r\n openSearch() {\r\n this.modalRef = this.modalService.show(ModalSearchComponent, {\r\n backdrop: 'static',\r\n keyboard: false\r\n });\r\n }\r\n\r\n hasAccessToManipulatedFunctionality() {\r\n return this.user && this.user.features.find(f => f.name === 'Manipulados');\r\n }\r\n}\r\n","export default \".toolbar-tags {\\n background-color: transparent !important;\\n}\\n\\na:hover {\\n color: #5ce1c2 !important;\\n}\\n\\n.submenu {\\n color: #ffffff;\\n}\\n\\n.inner-menu .menu a .fas {\\n margin-right: 25px !important;\\n}\\n\\n.menu .list-unstyled {\\n padding-top: 20px !important;\\n padding-bottom: 20px !important;\\n}\\n\\n.subitem {\\n padding: 0px !important;\\n}\\n\\nli {\\n list-style-type: none;\\n}\";","import { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport DocumentUtil from '@app/modules/document-v2/utils/Document.util';\nimport { Patient } from '@app/shared/models';\n\n@Component({\n selector: 'app-model-form-pre-preenchido',\n templateUrl: './model-form-pre-preenchido.component.html',\n styleUrls: ['./model-form-pre-preenchido.component.scss']\n})\nexport class ModelFormPrePreenchidoComponent implements OnInit {\n @Input() patient: Patient;\n @Input() form: FormGroup;\n @Input() attestationDays: string = null;\n @Input() typeOfActivity: string = null;\n\n @Output() onClickRemove = new EventEmitter<void>();\n @Output() formEmitter: EventEmitter<FormGroup> = new EventEmitter<FormGroup>();\n\n attestationsDays = DocumentUtil.getAttestationsDays();\n typesOfActivity = DocumentUtil.getTypesOfActivity();\n\n constructor(private fb: FormBuilder) {}\n\n ngOnInit(): void {\n this.form.addControl('attestationDays', this.fb.control(this.attestationDays, Validators.required));\n this.form.addControl('typeOfActivity', this.fb.control(this.typeOfActivity, Validators.required));\n this.formEmitter.emit(this.form);\n }\n\n remove() {\n this.form.removeControl('attestationDays');\n this.form.removeControl('typeOfActivity');\n this.onClickRemove.next();\n }\n\n get cpfFormatado() {\n if (this.patient) {\n return this.patient.cpf.replace(/(\\d{3})?(\\d{3})?(\\d{3})?(\\d{2})/, '$1.$2.$3-$4');\n }\n return '';\n }\n}\n","export default \"<div class=\\\"card p-2 mb-2\\\" [formGroup]=\\\"form\\\">\\n <div class=\\\"card-model-from-attestation-header\\\">\\n <i\\n class=\\\"fa fa-trash-solid\\\"\\n nzTooltipTitle=\\\"Excluir\\\"\\n nzTooltipPlacement=\\\"top\\\"\\n nz-tooltip\\n (click)=\\\"remove()\\\"\\n ></i>\\n </div>\\n <p>\\n Atesto que\\n <span *ngIf=\\\"patient; else templateIsNotPatient\\\"\\n ><span style=\\\"font-weight: bold;\\\">{{ patient?.name || patient?.fullname }}, </span>\\n <span *ngIf=\\\"patient?.cpf\\\">\\n {{ patient.sex === 'M' ? 'Portador' : 'Portadora' }} do\\n <span style=\\\"font-weight: bold;\\\">CPF {{ cpfFormatado }} </span>\\n </span></span\\n >\\n <span>necessita de</span>\\n <select\\n nz-\\n style=\\\"width: 200px; margin-left: 8px; margin-right: 8px;\\\"\\n formControlName=\\\"attestationDays\\\"\\n >\\n <option [ngValue]=\\\"null\\\">Selecione</option>\\n <option *ngFor=\\\"let item of attestationsDays\\\" [value]=\\\"item.value\\\">{{ item.label }}</option>\\n </select>\\n <span>de afastamento de suas atividades</span>\\n <select style=\\\"width: 200px; margin-left: 8px; margin-right: 8px;\\\" formControlName=\\\"typeOfActivity\\\">\\n <option [ngValue]=\\\"null\\\">Selecione</option>\\n <option *ngFor=\\\"let item of typesOfActivity\\\" [value]=\\\"item.value\\\">{{ item.label }}</option>\\n </select>\\n <span>por motivo de doença.</span>\\n </p>\\n</div>\\n\\n<ng-template #templateIsNotPatient>\\n <span\\n ><span style=\\\"font-weight: bold;\\\">[NOME DO PACIENTE]</span> Portador(a) do\\n <span style=\\\"font-weight: bold;\\\">[CPF FORMATADO]</span></span\\n >\\n</ng-template>\\n\";","export default \".card-model-from-attestation-header {\\n display: flex;\\n justify-content: flex-end;\\n}\";","import { Component, OnInit, Input } from '@angular/core';\n\n@Component({\n selector: 'app-popover-button',\n templateUrl: './popover-button.component.html',\n styleUrls: ['./popover-button.component.scss']\n})\nexport class PopoverButtonComponent implements OnInit {\n @Input() content = '';\n @Input() shape = 'circle';\n @Input() placement = 'right';\n\n constructor() {}\n\n ngOnInit() {}\n}\n","export default \"<button\\n nz-button\\n nz-popover\\n [nzShape]=\\\"shape\\\"\\n [nzPopoverPlacement]=\\\"placement\\\"\\n [nzPopoverContent]=\\\"content\\\"\\n>\\n <i class=\\\"fas fa-question-circle\\\"></i>\\n</button>\\n\";","export default \"button {\\n border: 0;\\n box-shadow: none;\\n}\\n\\nbutton:hover,\\nbutton:focus {\\n color: #0b6054;\\n background-color: transparent;\\n border-color: transparent;\\n}\";","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\n\n@Component({\n selector: 'app-rd-buttom-group-icon',\n templateUrl: './rd-buttom-group-icon.component.html',\n styleUrls: ['./rd-buttom-group-icon.component.scss']\n})\nexport class RdButtomGroupIconComponent implements OnInit {\n @Input() label: string;\n @Input() icon: string;\n\n @Output() onClick = new EventEmitter();\n\n constructor() {}\n\n ngOnInit(): void {}\n}\n","export default \"<button\\n class=\\\"btn btn-icon btn-add-outiline text-capitalize\\\"\\n type=\\\"button\\\"\\n (click)=\\\"onClick.emit()\\\"\\n theme\\n>\\n <span class=\\\"btn-inner--text\\\" theme>{{ label }}</span>\\n <span class=\\\"btn-inner--icon\\\" theme><i [class]=\\\"icon\\\"></i></span>\\n</button>\\n\";","export default \".btn-add-outiline {\\n display: flex;\\n padding: 0 0 0 8px;\\n height: 40px;\\n align-items: center;\\n border-radius: 10px;\\n overflow: hidden;\\n border: 0;\\n font-family: \\\"probold\\\", sans-serif;\\n background-color: var(--bg-color-secondary);\\n color: var(--color-white);\\n}\\n.btn-add-outiline .btn-inner--icon {\\n background-color: var(--bg-color-primary);\\n color: var(--color-white);\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n height: 40px;\\n width: 50px;\\n}\";","import {\n AfterViewInit,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges\n} from '@angular/core';\n\ninterface RdTabsComponentType {\n label: string;\n value: string;\n disabled: boolean;\n}\n\n@Component({\n selector: 'app-rd-tabs',\n templateUrl: './rd-tabs.component.html',\n styleUrls: ['./rd-tabs.component.scss']\n})\nexport class RdTabsComponent implements OnInit, OnChanges, AfterViewInit {\n @Input() tabDefault: string;\n @Input() isRennovaFeature = false;\n\n @Output() onCLickTab = new EventEmitter<string>();\n\n tabs: RdTabsComponentType[] = [];\n\n tabSelected: RdTabsComponentType;\n\n ngOnInit(): void {\n if (this.isRennovaFeature) {\n this.tabs = [{ label: 'Prescrição Rennova', value: 'Prescrição Rennova', disabled: false }];\n } else {\n this.tabs = [\n { label: 'Prescrição', value: 'Prescrição', disabled: false },\n { label: 'Exame', value: 'Exame', disabled: false },\n { label: 'Atestado', value: 'Atestado', disabled: false },\n { label: 'Outros', value: 'Outros', disabled: false }\n ];\n }\n }\n\n ngOnChanges(_: SimpleChanges): void {\n this.changeTabSelected();\n }\n\n ngAfterViewInit(): void {\n this.changeTabSelected();\n }\n\n changeTabSelected() {\n if (this.tabDefault) {\n this.tabSelected = this.tabs.find(tab => tab.value === this.tabDefault.trim());\n }\n }\n\n onChangeTab(tab: RdTabsComponentType) {\n this.tabSelected = tab;\n this.onCLickTab.emit(tab.value);\n }\n}\n","export default \"<div class=\\\"tab\\\" theme [ngClass]=\\\"isRennovaFeature ? 'tab-align-rennova' : 'tab-align-center'\\\">\\n <button\\n *ngFor=\\\"let item of tabs\\\"\\n class=\\\"tablinks\\\"\\n [ngClass]=\\\"{ active: tabSelected === item, 'width-rennova': isRennovaFeature }\\\"\\n [disabled]=\\\"item?.disabled\\\"\\n (click)=\\\"onChangeTab(item)\\\"\\n >\\n <span>\\n {{ item.label }}\\n </span>\\n </button>\\n</div>\\n\";","export default \".tab {\\n overflow: hidden;\\n background-color: var(--bg-color-primary);\\n display: flex;\\n align-items: center;\\n justify-content: space-between;\\n}\\n\\n.tab-align-center {\\n align-items: center;\\n}\\n\\n.tab-align-start {\\n align-items: flex-start;\\n}\\n\\n.tab button {\\n width: 100%;\\n background-color: inherit;\\n border: none;\\n outline: none;\\n cursor: pointer;\\n padding: 14px 16px;\\n color: var(--color-white);\\n font-weight: 500;\\n text-transform: uppercase;\\n font-size: 12px;\\n text-align: center;\\n}\\n\\n.tab button.width-rennova {\\n width: 100%;\\n}\\n\\n.tab button:hover {\\n background-color: #0d685c;\\n color: var(--color-white);\\n}\\n\\n.tab button:disabled {\\n cursor: no-drop;\\n}\\n\\n.tab button.active {\\n background-color: #0d685c;\\n font-weight: 700;\\n}\\n\\n.tab button.active span {\\n position: relative;\\n}\\n\\n.tab button.active span::before {\\n content: \\\"\\\";\\n position: absolute;\\n width: 100%;\\n font-weight: 700;\\n border-bottom: 2px solid #fff;\\n bottom: -8px;\\n}\\n\\n@media (min-width: 1025px) {\\n .tab button {\\n font-size: 18px;\\n }\\n\\n .tab button.width-rennova {\\n width: 20%;\\n }\\n}\";","import { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { distinctUntilChanged } from 'rxjs/operators';\n\n@Component({\n selector: 'app-text-box-form',\n templateUrl: './text-box-form.component.html',\n styleUrls: ['./text-box-form.component.scss']\n})\nexport class TextBoxFormComponent implements OnInit, OnDestroy {\n @Input() id: number;\n @Input() disabled = false;\n @Input() form: FormGroup;\n @Input() text: string;\n\n @Output() formEmitter: EventEmitter<FormGroup> = new EventEmitter<FormGroup>();\n @Output() onClickRemove = new EventEmitter();\n @Output() onChangeText = new EventEmitter<string[]>();\n\n constructor(private fb: FormBuilder) {}\n\n ngOnInit(): void {\n this.form.addControl('text', this.fb.control(this.text, Validators.required));\n this.listemText();\n if (this.text) {\n this.onChangeText.emit(this.text.split('\\n'));\n }\n this.formEmitter.emit(this.form);\n }\n\n ngOnDestroy(): void {\n this.form.removeControl('text');\n this.formEmitter.emit(this.form);\n }\n\n listemText() {\n this.form\n .get('text')\n .valueChanges.pipe(distinctUntilChanged())\n .subscribe((text: string) => {\n if (text && text.trim().length > 0) {\n const value = text.split('\\n');\n this.onChangeText.emit(value);\n } else {\n this.form.get('text').setValue(null);\n }\n });\n }\n}\n","export default \"<div class=\\\"card p-2 mb-2\\\" [formGroup]=\\\"form\\\">\\n <div class=\\\"header-card\\\">\\n <span class=\\\"header-card-title\\\"></span>\\n <div class=\\\"header-card-actions\\\">\\n <span (click)=\\\"onClickRemove.emit()\\\" class=\\\"cursor-pointer\\\"\\n ><i class=\\\"fa fa-trash-solid icon-trash\\\"></i\\n ></span>\\n </div>\\n </div>\\n <textarea\\n [id]=\\\"id\\\"\\n appAutoSize\\n [nzAutosize]=\\\"{ minRows: 1 }\\\"\\n appFocus\\n focus=\\\"true\\\"\\n formControlName=\\\"text\\\"\\n nz-input\\n placeholder=\\\"Escreva o texto...\\\"\\n class=\\\"textNameInput\\\"\\n [disabled]=\\\"disabled\\\"\\n ></textarea>\\n</div>\\n\";","export default \".header-card {\\n display: flex;\\n justify-content: space-between;\\n align-items: center;\\n}\\n.header-card .header-card-title {\\n flex: 1;\\n font-size: 14px;\\n font-weight: 700;\\n color: var(--bg-color-primary);\\n}\\n.header-card .header-card-actions {\\n display: flex;\\n justify-content: space-between;\\n align-items: center;\\n position: relative;\\n}\\n.header-card .header-card-actions span {\\n cursor: pointer;\\n}\\n.header-card .header-card-actions span.cancel-editing {\\n position: absolute;\\n top: -4px;\\n left: -24px;\\n font-size: 18px;\\n}\\n.header-card .container-input-search-editing {\\n width: 97%;\\n}\\n@media (max-width: 1025px) {\\n .header-card .container-input-search-editing {\\n width: 90%;\\n }\\n}\\n.textNameInput {\\n background-color: transparent;\\n border-color: transparent;\\n padding: 0;\\n color: #585858 !important;\\n}\\n.textNameInput::-moz-placeholder {\\n color: #f6b4af;\\n}\\n.textNameInput::placeholder, .textNameInput {\\n color: #f6b4af;\\n}\\n.textNameInput {\\n font-size: 15px;\\n font-weight: 600;\\n}\\n@media (max-width: 1025px) {\\n .textNameInput {\\n font-size: 12px;\\n }\\n}\\ntextarea {\\n resize: none;\\n background-color: transparent;\\n border: 0;\\n border-radius: 0;\\n box-shadow: none;\\n padding-left: 12px;\\n color: #4d4d4d;\\n font-size: 18px;\\n}\\ntextarea:hover, textarea:focus {\\n border-color: transparent;\\n box-shadow: none;\\n}\\ntextarea::-webkit-scrollbar {\\n width: 0;\\n}\";","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { RouterModule } from '@angular/router';\r\nimport { ThemeModule, themeMrd, themeReceitaDigital } from '@app/theme';\r\nimport { environment } from '@env/environment';\r\nimport { NzIconModule } from 'ng-zorro-antd/icon';\r\nimport { NzInputModule } from 'ng-zorro-antd/input';\r\nimport { ChartsModule } from 'ng2-charts';\r\nimport { NgxLoadingModule } from 'ngx-loading';\r\nimport { NgxMaskModule } from 'ngx-mask';\r\nimport { MyPieChartComponent } from '../charts/my-pie-chart/my-pie-chart.component';\r\nimport { PipesModule } from '../pipes';\r\nimport { AppVersionComponent } from './AppVersion/AppVersion.component';\r\nimport { AddButtonComponent } from './add-button/add-button.component';\r\nimport { AddTypeOptionsComponent } from './add-type-options/add-type-options.component';\r\nimport { AutoWidthInputNumberComponent } from './auto-width-input-number/auto-width-input-number.component';\r\nimport { CidFormComponent } from './cid-form/cid-form.component';\r\nimport { DataExamFormComponent } from './data-exam-form/data-exam-form.component';\r\nimport { DialogModalComponent } from './dialog-modal/dialog-modal.component';\r\nimport { AddressDataFormComponent } from './form-data/address-data-form/address-data-form.component';\r\nimport { ContactsDataFormComponent } from './form-data/contacts-data-form/contacts-data-form.component';\r\nimport { PersonalDataFormComponent } from './form-data/personal-data-form/personal-data-form.component';\r\nimport { PetDataFormComponent } from './form-data/pet-data-form/pet-data-form.component';\r\nimport { UnderageDataFormComponent } from './form-data/underage-data-form/underage-data-form.component';\r\nimport { InputFileComponent } from './input-file/input-file.component';\r\nimport { InputPasswordComponent } from './input-password/input-password.component';\r\nimport { InputSearchMedicamentsComponent } from './input-search-medicaments/input-search-medicaments.component';\r\nimport { MedicamentFormComponent } from './medicament-form/medicament-form.component';\r\nimport { MenuComponent } from './menu/menu.component';\r\nimport { ModalActivateAccountComponent } from './modal-activate-account/modal-activate-account.component';\r\nimport { ModalResendDocumentoEmptyComponent } from './modal-resend-documento-empty/modal-resend-documento-empty.component';\r\nimport { ModalSendDocumentComponent } from './modal-send-document/modal-send-document.component';\r\nimport { ModalSucessSendDocumentComponent } from './modal-sucess-send-document/modal-sucess-send-document.component';\r\nimport { ModelFormPrePreenchidoComponent } from './model-form-pre-preenchido/model-form-pre-preenchido.component';\r\nimport { PopoverButtonComponent } from './popover-button/popover-button.component';\r\nimport { RdButtomGroupIconComponent } from './rd-buttom-group-icon/rd-buttom-group-icon.component';\r\nimport { RdTabsComponent } from './rd-tabs/rd-tabs.component';\r\nimport { TextBoxFormComponent } from './text-box-form/text-box-form.component';\r\n\r\nimport { NzAlertModule } from 'ng-zorro-antd/alert';\r\nimport { NzAutocompleteModule } from 'ng-zorro-antd/auto-complete';\r\nimport { NzButtonModule } from 'ng-zorro-antd/button';\r\nimport { NzCardModule } from 'ng-zorro-antd/card';\r\nimport { NzCarouselModule } from 'ng-zorro-antd/carousel';\r\nimport { NzCheckboxModule } from 'ng-zorro-antd/checkbox';\r\nimport { NzCollapseModule } from 'ng-zorro-antd/collapse';\r\nimport { NzDividerModule } from 'ng-zorro-antd/divider';\r\nimport { NzDrawerModule } from 'ng-zorro-antd/drawer';\r\nimport { NzDropDownModule } from 'ng-zorro-antd/dropdown';\r\nimport { NzFormModule } from 'ng-zorro-antd/form';\r\nimport { NzListModule } from 'ng-zorro-antd/list';\r\nimport { NzMessageModule } from 'ng-zorro-antd/message';\r\nimport { NzModalModule } from 'ng-zorro-antd/modal';\r\nimport { NzNotificationModule } from 'ng-zorro-antd/notification';\r\nimport { NzPopoverModule } from 'ng-zorro-antd/popover';\r\nimport { NzProgressModule } from 'ng-zorro-antd/progress';\r\nimport { NzRadioModule } from 'ng-zorro-antd/radio';\r\nimport { NzSelectModule } from 'ng-zorro-antd/select';\r\nimport { NzStepsModule } from 'ng-zorro-antd/steps';\r\nimport { NzSwitchModule } from 'ng-zorro-antd/switch';\r\nimport { NzTableModule } from 'ng-zorro-antd/table';\r\nimport { NzTabsModule } from 'ng-zorro-antd/tabs';\r\nimport { NzToolTipModule } from 'ng-zorro-antd/tooltip';\r\nimport { NzInputNumberModule, NzTreeModule } from 'ng-zorro-antd';\r\nimport { NzPaginationModule } from 'ng-zorro-antd/pagination';\r\nimport { NzSpinModule } from 'ng-zorro-antd/spin';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n PipesModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n ChartsModule,\r\n RouterModule,\r\n NzInputModule,\r\n NgxLoadingModule,\r\n NgxMaskModule.forRoot(),\r\n ThemeModule.forRoot({\r\n themes: [themeReceitaDigital, themeMrd],\r\n active: environment.template\r\n }),\r\n\r\n NzCollapseModule,\r\n NzInputModule,\r\n NzButtonModule,\r\n NzSelectModule,\r\n NzAutocompleteModule,\r\n NzFormModule,\r\n NzNotificationModule,\r\n NzDropDownModule,\r\n NzStepsModule,\r\n NzCheckboxModule,\r\n NzRadioModule,\r\n NzCardModule,\r\n NzCarouselModule,\r\n NzListModule,\r\n NzPopoverModule,\r\n NzTableModule,\r\n NzTabsModule,\r\n NzToolTipModule,\r\n NzAlertModule,\r\n NzDrawerModule,\r\n NzMessageModule,\r\n NzModalModule,\r\n NzProgressModule,\r\n NzDividerModule,\r\n NzIconModule,\r\n NzSwitchModule,\r\n NzInputNumberModule,\r\n NzPaginationModule,\r\n NzSpinModule,\r\n NzTreeModule\r\n ],\r\n declarations: [\r\n AutoWidthInputNumberComponent,\r\n MenuComponent,\r\n MyPieChartComponent,\r\n DialogModalComponent,\r\n InputFileComponent,\r\n ModalActivateAccountComponent,\r\n ModalSendDocumentComponent,\r\n ModalSucessSendDocumentComponent,\r\n InputPasswordComponent,\r\n AddButtonComponent,\r\n PopoverButtonComponent,\r\n AddressDataFormComponent,\r\n ContactsDataFormComponent,\r\n PersonalDataFormComponent,\r\n UnderageDataFormComponent,\r\n RdButtomGroupIconComponent,\r\n RdTabsComponent,\r\n PetDataFormComponent,\r\n AddTypeOptionsComponent,\r\n InputSearchMedicamentsComponent,\r\n CidFormComponent,\r\n DataExamFormComponent,\r\n TextBoxFormComponent,\r\n ModelFormPrePreenchidoComponent,\r\n MedicamentFormComponent,\r\n ModalResendDocumentoEmptyComponent,\r\n AppVersionComponent\r\n ],\r\n exports: [\r\n AutoWidthInputNumberComponent,\r\n MenuComponent,\r\n MyPieChartComponent,\r\n DialogModalComponent,\r\n InputFileComponent,\r\n ModalActivateAccountComponent,\r\n ModalSendDocumentComponent,\r\n ModalSucessSendDocumentComponent,\r\n InputPasswordComponent,\r\n AddButtonComponent,\r\n PopoverButtonComponent,\r\n AddressDataFormComponent,\r\n ContactsDataFormComponent,\r\n PersonalDataFormComponent,\r\n UnderageDataFormComponent,\r\n RdButtomGroupIconComponent,\r\n RdTabsComponent,\r\n PetDataFormComponent,\r\n AddTypeOptionsComponent,\r\n InputSearchMedicamentsComponent,\r\n CidFormComponent,\r\n DataExamFormComponent,\r\n TextBoxFormComponent,\r\n ModelFormPrePreenchidoComponent,\r\n MedicamentFormComponent,\r\n AppVersionComponent,\r\n\r\n NzCollapseModule,\r\n NzInputModule,\r\n NzButtonModule,\r\n NzSelectModule,\r\n NzAutocompleteModule,\r\n NzFormModule,\r\n NzNotificationModule,\r\n NzDropDownModule,\r\n NzStepsModule,\r\n NzCheckboxModule,\r\n NzRadioModule,\r\n NzCardModule,\r\n NzCarouselModule,\r\n NzListModule,\r\n NzPopoverModule,\r\n NzTableModule,\r\n NzTabsModule,\r\n NzToolTipModule,\r\n NzAlertModule,\r\n NzDrawerModule,\r\n NzMessageModule,\r\n NzModalModule,\r\n NzProgressModule,\r\n NzDividerModule,\r\n NzIconModule,\r\n NzSwitchModule,\r\n NzInputNumberModule,\r\n NzPaginationModule,\r\n NzSpinModule,\r\n NzTreeModule\r\n ]\r\n})\r\nexport class ComponentsModule {}\r\n","export const numeroEspecial = (numero: string): boolean => {\r\n if (!!numero) {\r\n return (\r\n numero.startsWith('0300') ||\r\n numero.startsWith('0500') ||\r\n numero.startsWith('0800') ||\r\n numero.startsWith('0900') ||\r\n numero.startsWith('3003') ||\r\n numero.startsWith('4003') ||\r\n numero.startsWith('4004')\r\n );\r\n }\r\n return false;\r\n};\r\n","export enum UserType {\n PATIENT = 'patient',\n PHARMACY = 'pharmacy',\n PHARMACIST = 'pharmacist',\n ADMIN = 'admin',\n HEALTH_PROFESSIONAL = 'healthProfessional'\n}\n","import { map, switchMap, distinctUntilChanged } from 'rxjs/operators';\nimport { Component, EventEmitter, Input, OnInit, Output, ChangeDetectorRef } from '@angular/core';\nimport {\n AbstractControl,\n FormBuilder,\n FormControl,\n FormGroup,\n FormGroupDirective,\n NgForm,\n Validators\n} from '@angular/forms';\nimport { ValidationService } from '@app/core/services/validation.service';\nimport { BuyerService } from '@app/modules/document/services/buyer.service';\nimport { CepService } from '@app/modules/entry/services/cep.service';\nimport { PatientsService } from '@app/modules/patients/services/patients.service';\nimport { BrazilianStates } from '@app/shared/data/Brazilian-states';\nimport { nativeAsync } from '@app/shared/decorators/nativeAsync';\nimport { BrazilState } from '@app/shared/models';\nimport { Patient } from '@app/shared/models/patient';\nimport { AppToastService } from '@app/shared/services/app-toast.service';\nimport { BigboostService } from '@app/shared/services/bigboost.service';\nimport { markFormGroup } from '@app/utils/markFormGroup';\nimport { NzModalRef } from 'ng-zorro-antd/modal';\nimport { of, pipe } from 'rxjs';\nimport { HttpErrorResponse } from '@angular/common/http';\n\n@Component({\n selector: 'app-modal-buyer-data',\n templateUrl: './modal-buyer-data.component.html',\n styleUrls: ['./modal-buyer-data.component.scss']\n})\nexport class ModalBuyerDataComponent implements OnInit {\n @Input() patient: Patient;\n @Input() okText = 'Salvar';\n @Output() saveRetention = new EventEmitter();\n\n cpfSearched = false;\n states: BrazilState[] = BrazilianStates;\n loading = false;\n form: FormGroup;\n CEL_TEL: string;\n\n constructor(\n private fb: FormBuilder,\n private cepService: CepService,\n private bigboostService: BigboostService,\n private notification: AppToastService,\n private buyerService: BuyerService,\n private modelRef: NzModalRef,\n private patientService: PatientsService\n ) {\n this.buildForm();\n }\n ngOnInit(): void {\n this.listnerFieldCpf();\n this.form\n .get('cellphone')\n .valueChanges.pipe(distinctUntilChanged())\n .subscribe((value: string) => {\n this.setMaskTelephone(value);\n });\n\n this.form.get('cellphone').statusChanges.subscribe(status => {\n if (status === 'VALID') {\n this.form.get('telephone').enable();\n } else {\n this.form.get('telephone').setValue('');\n this.form.get('telephone').disable();\n }\n });\n\n this.form\n .get('telephone')\n .valueChanges.pipe(distinctUntilChanged())\n .subscribe((value: string) => {\n this.setMaskTelephone(value);\n });\n }\n\n get isPatientBuyer() {\n return this.form.get('isPatientBuyer').value;\n }\n\n set isPatientBuyer(value: boolean) {\n this.form.get('isPatientBuyer').setValue(value);\n }\n\n get cpfControl(): AbstractControl {\n return this.form.get('cpf');\n }\n\n buildForm() {\n this.form = this.fb.group({\n isPatientBuyer: this.fb.control(false),\n name: this.fb.control('', [Validators.required]),\n cpf: this.fb.control('', [Validators.required, ValidationService.cpfValidator]),\n identity: this.fb.control(''),\n cellphone: this.fb.control('', Validators.required),\n telephone: this.fb.control(''),\n address: this.fb.group({\n uf: this.fb.control('', [Validators.required, Validators.minLength(2)]),\n city: this.fb.control('', [Validators.required, Validators.minLength(2)]),\n complement: this.fb.control(''),\n number: this.fb.control('', [Validators.required]),\n street: this.fb.control('', [Validators.required, Validators.minLength(2)]),\n neighborhood: this.fb.control('', [Validators.required, Validators.minLength(2)]),\n cep: this.fb.control(\n '',\n Validators.compose([\n Validators.required,\n ValidationService.cepValidator,\n Validators.minLength(2)\n ])\n )\n })\n });\n }\n\n setMaskTelephone(value: string) {\n if (value) {\n const CEL = '(00) 0 0000-0000';\n const TEL = '(00) 0000-00009';\n this.CEL_TEL = value.length == 11 ? CEL : TEL;\n }\n }\n\n listnerFieldCpf() {\n this.cpfControl.statusChanges.pipe(distinctUntilChanged()).subscribe(status => {\n const valueCpf = this.cpfControl.value;\n const valueIsPatientBuyer = this.isPatientBuyer;\n if (status === 'VALID' && !this.isPatientBuyer) {\n this.searchData(valueCpf);\n } else {\n this.cpfSearched = false;\n this.form.reset({ cpf: valueCpf, isPatientBuyer: valueIsPatientBuyer });\n }\n });\n }\n\n @nativeAsync\n async onKeyFindCep(event: any) {\n if (this.cpfSearched) {\n if (event.target.value.length === 10) {\n const cep = event.target.value.replace(/[^\\d]+/g, '');\n const data = await this.cepService.consult(cep);\n if (!data.erro) {\n this.form.controls['address'].patchValue({\n uf: data.uf,\n street: data.logradouro,\n neighborhood: data.bairro,\n city: data.localidade,\n number: null,\n cep: data.cep\n });\n }\n }\n }\n }\n\n searchData(cpfBuyer: string) {\n const cpf = cpfBuyer.replace(/[^\\d]+/g, '');\n this.loading = true;\n this.buyerService.getBuyerByCpf(cpf).subscribe(\n buyer => {\n if (buyer) {\n this.setDataForm(buyer);\n } else {\n this.findInfoPatientByCpf(cpf);\n }\n },\n err => {\n this.loading = false;\n console.error(err);\n this.notification.notify('error', 'Error ao consultar comprador');\n }\n );\n }\n\n setDataPatient(isPatientBuyer: boolean) {\n if (isPatientBuyer) {\n if (this.patient._id) {\n const data = !!this.patient.responsible ? this.patient.responsible : this.patient;\n this.setDataForm(data);\n }\n } else {\n this.cpfSearched = false;\n this.form.reset();\n }\n }\n\n setDataForm(data: Patient) {\n this.form.patchValue(data);\n this.form.get('name').setValue(data.name);\n this.loading = false;\n this.cpfSearched = true;\n }\n\n save() {\n markFormGroup(this.form);\n if (this.form.valid && !this.loading) {\n this.loading = true;\n this.buyerService.save(this.form.value).subscribe(\n buyer => {\n if (buyer) {\n this.saveRetention.emit(buyer.cpf);\n this.modelRef.destroy();\n }\n },\n err => {\n this.notification.notify('error', 'Erro ao tentar salvar comprador', err.error.message);\n },\n () => {\n this.loading = false;\n }\n );\n }\n }\n\n close() {\n this.modelRef.close();\n }\n\n private findInfoPatientByCpf(cpf: string) {\n this.patientService\n .existsPatient(cpf)\n .pipe(\n switchMap(exists => {\n if (exists) {\n return this.patientService.getPatientByCpf(cpf);\n }\n return of(null);\n })\n )\n .subscribe(\n (patient: Patient | null) => {\n if (patient) {\n const data = !!patient.responsible ? patient.responsible : patient;\n this.setDataForm(data);\n } else {\n this.consultCpfByCpf(cpf);\n }\n },\n err => {\n this.loading = false;\n console.error(err);\n this.notification.notify('error', 'Error ao consultar paciente');\n }\n );\n }\n\n private consultCpfByCpf(cpf: string) {\n this.bigboostService.consultCpf(cpf).subscribe(\n data => {\n if (data) {\n if (data.menorIdade) {\n this.notification.notify(\n 'warning',\n 'Não é permitido cadastrar compradores menores de idade'\n );\n } else {\n this.setDataForm({ name: data.nome });\n }\n this.loading = false;\n }\n },\n (error: HttpErrorResponse) => {\n console.error(error);\n this.loading = false;\n if (error.status === 404) {\n this.notification.notify(\n 'error',\n 'Error ao consultar CPF',\n 'CPF não localizado na Receita Federal. Verifique as informações digitadas e tente novamente. Em caso de dúvidas, entre em contato com nosso atendimento',\n 8000\n );\n return;\n } else {\n this.notification.notify('error', 'Error ao consultar CPF');\n }\n }\n );\n }\n}\n","export default \"<div theme>\\n <header>\\n <span class=\\\"title\\\">\\n DADOS DO COMPRADOR\\n </span>\\n </header>\\n\\n <div class=\\\"subtitle\\\">\\n <h5>\\n Para concluir a dispensação, informe os dados do comprador.\\n </h5>\\n <span>(Não é permitido cadastrar compradores menores de idade)</span>\\n </div>\\n\\n <div class=\\\"modal-body\\\">\\n <form nz-form [formGroup]=\\\"form\\\">\\n <div class=\\\"row\\\">\\n <div class=\\\"col-md-3 d-flex align-items-center\\\">\\n <nz-form-item>\\n <label\\n nz-checkbox\\n (nzCheckedChange)=\\\"setDataPatient($event)\\\"\\n formControlName=\\\"isPatientBuyer\\\"\\n >O comprador é o paciente</label\\n >\\n </nz-form-item>\\n </div>\\n\\n <div class=\\\"col-md\\\">\\n <nz-form-item *ngIf=\\\"form.get('cpf') as cpf\\\">\\n <nz-form-label nzFor=\\\"cpf\\\">CPF do comprador<span class=\\\"mandatory\\\"> *</span></nz-form-label>\\n <nz-form-control nzHasFeedback [nzErrorTip]=\\\"errorTpl\\\">\\n <input\\n nz-input\\n id=\\\"cpf\\\"\\n name=\\\"cpf\\\"\\n formControlName=\\\"cpf\\\"\\n mask=\\\"000.000.000-00\\\"\\n placeholder=\\\"Digite o CPF do comprador\\\"\\n />\\n <ng-template #errorTpl let-control>\\n <ng-container *ngIf=\\\"cpf.dirty && cpf.hasError('required')\\\">\\n Campo obrigatório, por favor digite seu CPF.\\n </ng-container>\\n <ng-container *ngIf=\\\"!cpf.hasError('required') && cpf.hasError('cpf')\\\">\\n CPF inválido.\\n </ng-container>\\n </ng-template>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n <div class=\\\"col-md-4\\\">\\n <nz-form-item *ngIf=\\\"form.get('identity') as identity\\\">\\n <nz-form-label nzFor=\\\"identity\\\">Identidade</nz-form-label>\\n <nz-form-control>\\n <input\\n nz-input\\n formControlName=\\\"identity\\\"\\n placeholder=\\\"Digite a identidade do comprador\\\"\\n name=\\\"identity\\\"\\n id=\\\"identity\\\"\\n maxlength=\\\"12\\\"\\n [ngClass]=\\\"{ disabled: !cpfSearched }\\\"\\n />\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n </div>\\n\\n <div class=\\\"row\\\">\\n <div class=\\\"col-md-5\\\">\\n <nz-form-item *ngIf=\\\"form.get('name') as name\\\">\\n <nz-form-label nzFor=\\\"name\\\"\\n >Nome do comprador<span class=\\\"mandatory\\\"> *</span></nz-form-label\\n >\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n id=\\\"name\\\"\\n formControlName=\\\"name\\\"\\n placeholder=\\\"Digite o nome\\\"\\n name=\\\"name\\\"\\n maxlength=\\\"128\\\"\\n [ngClass]=\\\"{ disabled: !cpfSearched }\\\"\\n />\\n <nz-form-explain *ngIf=\\\"name.dirty && name.errors\\\">\\n <ng-container *ngIf=\\\"name.hasError('required')\\\">\\n Campo obrigatório, por favor digite o nome e sobrenome do comprador.\\n </ng-container>\\n <ng-container *ngIf=\\\"!name.hasError('required') && name.hasError('nome')\\\">\\n Por favor digite o nome e sobrenome do comprador.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n <div class=\\\"col-md\\\">\\n <nz-form-item *ngIf=\\\"form.get('cellphone') as cellphone\\\">\\n <nz-form-label nzFor=\\\"cellphone\\\">Telefone 1 <span class=\\\"mandatory\\\">*</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n type=\\\"text\\\"\\n id=\\\"cellphone\\\"\\n name=\\\"cellphone\\\"\\n formControlName=\\\"cellphone\\\"\\n placeholder=\\\"Digite o Telefone\\\"\\n [mask]=\\\"CEL_TEL\\\"\\n [ngClass]=\\\"{ disabled: !cpfSearched }\\\"\\n />\\n <nz-form-explain *ngIf=\\\"cellphone.dirty && cellphone.errors\\\">\\n <ng-container *ngIf=\\\"cellphone.hasError('required')\\\">\\n Campo obrigatório, por favor digite o telefone do comprador.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n <div class=\\\"col-md\\\">\\n <nz-form-item *ngIf=\\\"form.get('telephone') as telephone\\\">\\n <nz-form-label nzFor=\\\"telephone\\\">Telefone 2</nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n id=\\\"telephone\\\"\\n name=\\\"telephone\\\"\\n formControlName=\\\"telephone\\\"\\n placeholder=\\\"Digite o Telefone\\\"\\n [mask]=\\\"telephone.value?.length <= 10 ? '(00) 0000-00009' : '(00) 00000-0000'\\\"\\n [ngClass]=\\\"{ disabled: !cpfSearched }\\\"\\n />\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n </div>\\n\\n <div class=\\\"row\\\" [formGroup]=\\\"form.get('address')\\\">\\n <div class=\\\"col-md-3\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"cep\\\">CEP<span class=\\\"mandatory\\\"> *</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n type=\\\"text\\\"\\n mask=\\\"00.000-000\\\"\\n id=\\\"cep\\\"\\n formControlName=\\\"cep\\\"\\n placeholder=\\\"ex: 27.244-333\\\"\\n name=\\\"cep\\\"\\n (keyup)=\\\"onKeyFindCep($event)\\\"\\n [ngClass]=\\\"{ disabled: !cpfSearched }\\\"\\n />\\n <nz-form-explain *ngIf=\\\"form.get('address.cep').dirty && form.get('address.cep').errors\\\">\\n <ng-container *ngIf=\\\"form.get('address.cep').hasError('required')\\\">\\n Campo obrigatório, por favor digite seu CEP.\\n </ng-container>\\n <ng-container\\n *ngIf=\\\"\\n !form.get('address.cep').hasError('required') &&\\n form.get('address.cep').hasError('address.cep')\\n \\\"\\n >\\n CEP inválido, por favor digite um CEP válido.\\n </ng-container>\\n <ng-container *ngIf=\\\"form.get('address.cep').hasError('minlength')\\\">\\n É necessário ter pelo menos\\n {{ form.get('address.cep').errors?.minlength?.requiredLength }} caracteres.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n <div class=\\\"col-md\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"street\\\">Logradouro<span class=\\\"mandatory\\\"> *</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n placeholder=\\\"Digite o logradouro\\\"\\n formControlName=\\\"street\\\"\\n type=\\\"text\\\"\\n name=\\\"street\\\"\\n maxlength=\\\"128\\\"\\n id=\\\"street\\\"\\n [ngClass]=\\\"{ disabled: !cpfSearched }\\\"\\n />\\n <nz-form-explain\\n *ngIf=\\\"form.get('address.street').dirty && form.get('address.street').errors\\\"\\n >\\n <ng-container *ngIf=\\\"form.get('address.street').hasError('required')\\\">\\n Campo obrigatório, por favor digite o logradouro.\\n </ng-container>\\n <ng-container *ngIf=\\\"form.get('address.street').hasError('minlength')\\\">\\n É necessário ter pelo menos\\n {{ form.get('address.street').errors?.minlength?.requiredLength }} caracteres.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n <div class=\\\"col-md-3\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"number\\\">Número<span class=\\\"mandatory\\\"> *</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n type=\\\"number\\\"\\n formControlName=\\\"number\\\"\\n placeholder=\\\"Digite o número\\\"\\n name=\\\"number\\\"\\n id=\\\"number\\\"\\n maxlength=\\\"10\\\"\\n [ngClass]=\\\"{ disabled: !cpfSearched }\\\"\\n />\\n <nz-form-explain\\n *ngIf=\\\"form.get('address.number').dirty && form.get('address.number').errors\\\"\\n >\\n <ng-container *ngIf=\\\"form.get('address.number').hasError('required')\\\">\\n Campo obrigatório, por favor digite o número.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n </div>\\n\\n <div class=\\\"row\\\" [formGroup]=\\\"form.get('address')\\\">\\n <div class=\\\"col-md\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"complement\\\">Complemento</nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n formControlName=\\\"complement\\\"\\n id=\\\"complement\\\"\\n nz-input\\n placeholder=\\\"Digite o complemento\\\"\\n maxlength=\\\"128\\\"\\n [ngClass]=\\\"{ disabled: !cpfSearched }\\\"\\n />\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n\\n <div class=\\\"col-md\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"neighborhood\\\">Bairro<span class=\\\"mandatory\\\"> *</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n formControlName=\\\"neighborhood\\\"\\n id=\\\"neighborhood\\\"\\n nz-input\\n placeholder=\\\"Digite o bairro\\\"\\n maxlength=\\\"128\\\"\\n [ngClass]=\\\"{ disabled: !cpfSearched }\\\"\\n />\\n <nz-form-explain\\n *ngIf=\\\"form.get('address.neighborhood').dirty && form.get('address.neighborhood').errors\\\"\\n >\\n <ng-container *ngIf=\\\"form.get('address.neighborhood').hasError('required')\\\">\\n Campo obrigatório, por favor digite o bairro.\\n </ng-container>\\n <ng-container *ngIf=\\\"form.get('address.neighborhood').hasError('minlength')\\\">\\n É necessário ter pelo menos\\n {{ form.get('address.neighborhood').errors?.minlength?.requiredLength }} caracteres.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n </div>\\n\\n <div class=\\\"row\\\" [formGroup]=\\\"form.get('address')\\\">\\n <div class=\\\"col-md\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"city\\\">Cidade<span class=\\\"mandatory\\\"> *</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n formControlName=\\\"city\\\"\\n id=\\\"city\\\"\\n name=\\\"city\\\"\\n nz-input\\n placeholder=\\\"Digite a cidade\\\"\\n maxlength=\\\"64\\\"\\n [ngClass]=\\\"{ disabled: !cpfSearched }\\\"\\n />\\n <nz-form-explain *ngIf=\\\"form.get('address.city').dirty && form.get('address.city').errors\\\">\\n <ng-container *ngIf=\\\"form.get('address.city').hasError('required')\\\">\\n Campo obrigatório, por favor digite a cidade.\\n </ng-container>\\n <ng-container *ngIf=\\\"form.get('address.city').hasError('minlength')\\\">\\n É necessário ter pelo menos\\n {{ form.get('address.city').errors?.minlength?.requiredLength }} caracteres.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n\\n <div class=\\\"col-md\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"uf\\\">UF<span class=\\\"mandatory\\\"> *</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <nz-select\\n formControlName=\\\"uf\\\"\\n id=\\\"uf\\\"\\n name=\\\"uf\\\"\\n nzAllowClear\\n nzShowSearch\\n nzDropdownClassName=\\\"account-select\\\"\\n nzPlaceHolder=\\\"Selecione\\\"\\n [nzDisabled]=\\\"!cpfSearched\\\"\\n >\\n <nz-option\\n *ngFor=\\\"let state of states\\\"\\n [nzLabel]=\\\"state?.sigla\\\"\\n [nzValue]=\\\"state?.sigla\\\"\\n >\\n </nz-option>\\n </nz-select>\\n <nz-form-explain *ngIf=\\\"form.get('address.uf').dirty && form.get('address.uf').errors\\\">\\n <ng-container *ngIf=\\\"form.get('address.uf').hasError('required')\\\">\\n Campo obrigatório, por favor selecione o UF.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n </div>\\n </form>\\n </div>\\n <nz-divider nzOrientation=\\\"left\\\" style=\\\"margin: 16px 0;\\\"></nz-divider>\\n <div class=\\\"row\\\">\\n <div class=\\\"col-md-6\\\">\\n <div *ngIf=\\\"loading\\\">\\n <ng-template #indicatorTemplate><i nz-icon nzType=\\\"loading\\\"></i></ng-template>\\n <nz-spin nzSimple [nzIndicator]=\\\"indicatorTemplate\\\"></nz-spin>\\n </div>\\n </div>\\n <div class=\\\"col-md-6 d-flex justify-content-end\\\" theme>\\n <button nz-button class=\\\"btn-cancel mr-3\\\" (click)=\\\"close()\\\">Cancelar</button>\\n <button nz-button class=\\\"btn-ok\\\" (click)=\\\"save()\\\" [ngClass]=\\\"{ disabled: !cpfSearched }\\\">\\n {{ okText }}\\n </button>\\n </div>\\n </div>\\n</div>\\n\\n<ngx-loading [show]=\\\"loading\\\" [config]=\\\"{ backdropBorderRadius: '3px' }\\\"></ngx-loading>\\n\";","export default \"header {\\n width: 100%;\\n padding: 16px 24px;\\n border-bottom: 1px solid #e8e8e8;\\n border-radius: 4px 4px 0 0;\\n position: absolute;\\n top: 0;\\n left: 0;\\n background-color: var(--bg-modal-header);\\n color: var(--color-white);\\n}\\nheader .title {\\n margin: 0;\\n font-weight: 500;\\n color: var(--color-white);\\n font-size: 16px;\\n line-height: 22px;\\n word-wrap: break-word;\\n}\\nh4 {\\n margin: 35px 0 8px 0;\\n text-align: center;\\n}\\n.modal-body {\\n height: 100%;\\n max-height: 55vh;\\n margin-top: 8px;\\n padding: 8px;\\n}\\n.modal-body input {\\n border-radius: 10px;\\n}\\n.modal-body button {\\n float: right;\\n}\\ni {\\n font-size: 24px;\\n}\\ninput::-webkit-input-placeholder {\\n color: #bdc2c7;\\n}\\n.mandatory {\\n color: red;\\n}\\n.btn-ok {\\n color: white;\\n background-color: var(--bg-color-primary);\\n border-color: var(--bg-color-primary);\\n}\\n.subtitle {\\n display: flex;\\n flex-direction: column;\\n align-items: center;\\n justify-content: center;\\n margin-top: 35px;\\n}\\n.subtitle h5 {\\n font-size: 24px;\\n}\\n.subtitle span {\\n font-size: 18px;\\n}\\n.disabled {\\n color: rgba(0, 0, 0, 0.25);\\n background-color: #f5f5f5;\\n cursor: not-allowed;\\n opacity: 1;\\n}\";","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { CrService } from '@app/modules/document/services/cr.service';\nimport { ColorSetting } from '@app/shared/models/color-setting';\nimport { Library, Protocol } from '@app/shared/models/library';\nimport { LibraryService } from '@app/shared/services/library.service';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\n\n@Component({\n selector: 'app-modal-protocols-library',\n templateUrl: './modal-protocols-library.component.html',\n styleUrls: ['./modal-protocols-library.component.scss']\n})\nexport class ModalProtocolsLibraryComponent implements OnInit {\n @Input() colorSetting: ColorSetting;\n\n @Output() onAddProtocol = new EventEmitter<Protocol>();\n\n loadingLibraries = false;\n libraries: Library[] = [];\n\n constructor(\n private modalRef: BsModalRef,\n private libraryService: LibraryService,\n private crService: CrService\n ) {}\n\n ngOnInit(): void {\n this.findAllLibraries();\n }\n\n findAllLibraries() {\n this.loadingLibraries = true;\n this.libraryService.search().subscribe(libraries => {\n this.libraries = libraries;\n this.loadingLibraries = false;\n });\n }\n\n async expandedProtocol(protocol: Protocol) {\n protocol.expanded = !protocol.expanded;\n if (!protocol.medicamentCR) {\n await this.loadMedicamentCR(protocol);\n }\n }\n\n async loadMedicamentCR(protocol: Protocol) {\n protocol.loadingMedicament = true;\n const medicamentsCR = await this.crService.searchMedicament(protocol.ean).toPromise();\n if (medicamentsCR.length > 0) {\n const medicamentCR = medicamentsCR[0];\n protocol.medicamentCR = {\n nome: medicamentCR.nome,\n prescriptionTypeId: medicamentCR.prescriptionTypeId,\n typeCr: medicamentCR.typeCr,\n type: 'industrialized',\n laboratorio: medicamentCR.laboratorio,\n apresentacaoCustomizada: medicamentCR.apresentacaoCustomizada,\n principio: medicamentCR.principio\n };\n protocol.loadingMedicament = false;\n }\n }\n\n async addProtocol(protocol: Protocol) {\n if (!protocol.medicamentCR) {\n await this.loadMedicamentCR(protocol);\n }\n this.onAddProtocol.emit(protocol);\n }\n\n get categories() {\n if (this.libraries.length > 0) {\n return this.libraries[0].categories;\n }\n return [];\n }\n\n close() {\n this.modalRef.hide();\n }\n}\n","export default \"<div class=\\\"modal-container\\\" theme>\\n <div\\n class=\\\"modal-header\\\"\\n #modalHeader\\n [ngStyle]=\\\"{\\n 'background-color': colorSetting?.primary,\\n 'border-color': colorSetting?.primary\\n }\\\"\\n >\\n <h4 class=\\\"modal-title pull-left text-white\\\">Sugestão de Protocolos</h4>\\n <button type=\\\"button\\\" class=\\\"close pull-right\\\" aria-label=\\\"Close\\\" (click)=\\\"close()\\\">\\n <span aria-hidden=\\\"true\\\">×</span>\\n </button>\\n </div>\\n\\n <div class=\\\"modal-content\\\" theme>\\n <ng-container *ngIf=\\\"!loadingLibraries && libraries.length > 0; else templateLoading\\\">\\n <div *ngFor=\\\"let category of categories\\\" class=\\\"modal-content-category\\\">\\n <div class=\\\"modal-content-category-item\\\">\\n <i\\n nz-icon\\n [nzType]=\\\"category.expanded ? 'down' : 'right'\\\"\\n nzTheme=\\\"outline\\\"\\n (click)=\\\"category.expanded = !category.expanded\\\"\\n ></i>\\n <span>{{ category.name }}</span>\\n </div>\\n <div *ngIf=\\\"category.expanded\\\" class=\\\"ml-16\\\">\\n <div *ngFor=\\\"let subcategory of category.subcategories\\\">\\n <div class=\\\"modal-content-subcategory-item\\\">\\n <i\\n nz-icon\\n [nzType]=\\\"subcategory.expanded ? 'down' : 'right'\\\"\\n nzTheme=\\\"outline\\\"\\n (click)=\\\"subcategory.expanded = !subcategory.expanded\\\"\\n ></i>\\n <span>{{ subcategory.name }}</span>\\n </div>\\n <div *ngIf=\\\"subcategory.expanded\\\" class=\\\"ml-16\\\">\\n <div *ngFor=\\\"let protocol of subcategory.protocols; let i = index\\\">\\n <div>\\n <div class=\\\"modal-container-protocol\\\">\\n <div class=\\\"modal-content-protocol-item\\\">\\n <i\\n nz-icon\\n [nzType]=\\\"protocol.expanded ? 'down' : 'right'\\\"\\n nzTheme=\\\"outline\\\"\\n (click)=\\\"expandedProtocol(protocol)\\\"\\n ></i>\\n <span>{{ i + 1 }} - {{ protocol.title }}</span>\\n </div>\\n <button\\n theme\\n class=\\\"ok-btn btn-adicionar\\\"\\n nz-button\\n [ngStyle]=\\\"{\\n 'background-color': colorSetting?.primary,\\n 'border-color': colorSetting?.primary\\n }\\\"\\n (click)=\\\"addProtocol(protocol)\\\"\\n >\\n <nz-spin\\n nzSimple\\n *ngIf=\\\"protocol?.loadingMedicament && !protocol.expanded; else templateButton\\\"\\n ></nz-spin>\\n <ng-template #templateButton>\\n <span>Adicionar</span>\\n </ng-template>\\n </button>\\n </div>\\n <div\\n *ngIf=\\\"protocol.expanded\\\"\\n style=\\\"display: flex; flex-direction: column; gap: 8px; margin: 8px 0;\\\"\\n >\\n <nz-alert nzBanner [nzMessage]=\\\"protocol.comments\\\" [nzShowIcon]=\\\"false\\\"></nz-alert>\\n <div style=\\\"display: flex; justify-content: center;\\\">\\n <nz-spin nzSimple *ngIf=\\\"protocol?.loadingMedicament\\\"></nz-spin>\\n </div>\\n <div *ngIf=\\\"protocol?.medicamentCR\\\">\\n <span style=\\\"font-size: 16px; font-weight: bold;\\\">{{\\n protocol?.medicamentCR.nome\\n }}</span>\\n <h2\\n class=\\\"description-medicament-cr\\\"\\n *ngIf=\\\"\\n protocol?.medicamentCR.principio ||\\n protocol?.medicamentCR.apresentacaoCustomizada\\n \\\"\\n >\\n {{ protocol?.medicamentCR.principio }}\\n <span\\n *ngIf=\\\"\\n protocol?.medicamentCR.principio &&\\n protocol?.medicamentCR.apresentacaoCustomizada\\n \\\"\\n >\\n - </span\\n >{{ protocol?.medicamentCR.apresentacaoCustomizada }}\\n </h2>\\n </div>\\n <p *ngFor=\\\"let description of protocol.dosage\\\">\\n {{ description }}\\n </p>\\n </div>\\n </div>\\n </div>\\n </div>\\n </div>\\n </div>\\n </div>\\n </ng-container>\\n </div>\\n</div>\\n\\n<ng-template #templateLoading>\\n <div style=\\\"padding: 8px;\\\" *ngIf=\\\"loadingLibraries\\\">\\n <nz-spin nzSimple></nz-spin>\\n </div>\\n</ng-template>\\n\";","export default \".modal-container .modal-header {\\n font-family: \\\"probold\\\";\\n width: 100% !important;\\n}\\n@media (min-width: 960px) {\\n .modal-container .modal-header {\\n width: 900px;\\n }\\n}\\n.modal-container .modal-content {\\n width: 100% !important;\\n}\\n@media (min-width: 960px) {\\n .modal-container .modal-content {\\n min-width: 900px;\\n max-height: 700px;\\n overflow: auto;\\n }\\n}\\n.modal-container .modal-content .modal-content-category {\\n width: 100%;\\n padding: 4px;\\n}\\n.modal-container .modal-content .modal-content-category .modal-content-category-item {\\n display: flex;\\n align-items: center;\\n gap: 8px;\\n background-color: var(--bg-modal-header);\\n}\\n.modal-container .modal-content .modal-content-category .modal-content-category-item i {\\n cursor: pointer;\\n background-color: var(--bg-color-primary);\\n color: white;\\n padding: 8px;\\n}\\n.modal-container .modal-content .modal-content-category .modal-content-category-item span {\\n font-weight: bold;\\n color: var(--bg-color-primary);\\n}\\n.modal-container .modal-content .modal-content-category .modal-content-subcategory-item {\\n display: flex;\\n align-items: center;\\n gap: 8px;\\n margin-top: 4px;\\n background-color: var(--bg-color-primary);\\n color: white;\\n padding: 4px;\\n font-weight: 500;\\n}\\n.modal-container .modal-content .modal-content-category .modal-content-subcategory-item i {\\n cursor: pointer;\\n}\\n.modal-container .modal-content .modal-content-category .modal-container-protocol {\\n display: flex;\\n align-items: center;\\n justify-content: space-between;\\n margin-top: 4px;\\n background: #ebebeb;\\n padding: 3px;\\n color: #000;\\n font-weight: bold;\\n}\\n.modal-container .modal-content .modal-content-category .modal-container-protocol .modal-content-protocol-item {\\n display: flex;\\n align-items: center;\\n gap: 8px;\\n}\\n.modal-container .modal-content .modal-content-category .modal-container-protocol .modal-content-protocol-item i {\\n cursor: pointer;\\n}\\n.modal-container .modal-content .btn-adicionar {\\n color: var(--color-white);\\n background-color: var(--bg-color-primary);\\n border-color: var(--bg-color-primary);\\n box-shadow: 0 4px 6px rgba(50, 50, 93, 0.11), 0 1px 3px rgba(0, 0, 0, 0.08);\\n}\\n.modal-container .modal-content .btn-adicionar::-moz-selection {\\n color: var(--color-white);\\n background-color: var(--bg-color-secondary);\\n border-color: var(--bg-color-secondary);\\n}\\n.modal-container .modal-content .btn-adicionar:hover,\\n.modal-container .modal-content .btn-adicionar:active,\\n.modal-container .modal-content .btn-adicionar::selection {\\n color: var(--color-white);\\n background-color: var(--bg-color-secondary);\\n border-color: var(--bg-color-secondary);\\n}\\n.modal-container .modal-content .description-medicament-cr {\\n font-family: \\\"prolight\\\", sans-serif;\\n font-size: 13px;\\n color: #4d4d4d;\\n margin: 14px 0;\\n}\\n.ml-16 {\\n margin-left: 16px;\\n}\\n::ng-deep .ant-collapse {\\n width: 100%;\\n}\\n::ng-deep .ant-spin-dot-item {\\n background-color: var(--bg-color-secondary);\\n}\";","import { EventEmitter, Inject, Injectable } from '@angular/core';\nimport { CoreService } from '@app/core/services/core.service';\nimport { environment } from '@env/environment';\nimport { ACTIVE_THEME, THEMES, Theme } from './symbols';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ThemeService {\n themeChange = new EventEmitter<Theme>();\n\n constructor(\n @Inject(THEMES) public themes: Theme[],\n @Inject(ACTIVE_THEME) public theme: string,\n private coreService: CoreService\n ) {\n if (this.coreService.isMrd) {\n this.setTheme('theme-mrd');\n } else {\n this.setTheme('theme-receita-digital');\n }\n }\n\n getTheme(name: string): Theme {\n const theme = this.themes.find(t => t.name === name);\n if (!theme) {\n throw new Error(`Theme not found: '${name}'`);\n }\n return theme;\n }\n\n getActiveTheme() {\n return this.getTheme(this.theme);\n }\n\n getProperty(propName: string) {\n return this.getActiveTheme().properties[propName];\n }\n\n setTheme(name: string) {\n this.theme = name;\n this.themeChange.emit(this.getActiveTheme());\n }\n\n registerTheme(theme: Theme) {\n this.themes.push(theme);\n }\n\n updateTheme(name: string, properties: { [key: string]: string }) {\n const theme = this.getTheme(name);\n theme.properties = {\n ...theme.properties,\n ...properties\n };\n\n if (name === this.theme) {\n this.themeChange.emit(theme);\n }\n }\n}\n","import { FormArray, FormControl, FormGroup } from '@angular/forms';\r\n\r\nexport function markFormGroup(\r\n formGroup: FormGroup,\r\n option: 'markAsTouched' | 'markAsDirty' = 'markAsDirty'\r\n) {\r\n if (formGroup.controls) {\r\n Object.keys(formGroup.controls).forEach(key => {\r\n const control = formGroup.controls[key];\r\n if (control instanceof FormControl) {\r\n control[option]();\r\n control.updateValueAndValidity();\r\n } else if (control instanceof FormGroup) {\r\n markFormGroup(control);\r\n } else if (control instanceof FormArray) {\r\n control.controls.forEach((ctrl: FormGroup) => markFormGroup(ctrl));\r\n }\r\n });\r\n }\r\n}\r\n","import { Patient } from '@app/shared/models/patient';\nimport { HealthProfessional } from './health-professional';\nimport { PetPatient } from './pet-patient';\nimport { ProductRennova } from './product-rennova';\n\nexport interface Medicamento {\n precos: string;\n principiosAtivos: string;\n frequencia: string;\n apresentacao: string;\n nome: string;\n id: string;\n quantidade: number;\n posologia: string;\n valid: boolean;\n}\n\nexport interface Subreceita {\n pdf: string;\n numero: number;\n xml: string;\n hash: string;\n}\n\nexport interface Documentos {\n pdf: string;\n xml: string;\n subreceitas: Subreceita[];\n hash: string;\n}\n\nexport class Prescription {\n _id: string;\n code: string;\n createdAt: Date;\n status: string;\n type: string;\n patient?: Patient;\n pet?: PetPatient;\n healthProfessional: HealthProfessional;\n medicaments: any[];\n productsRennova: ProductRennova[];\n retention: any[];\n amountOfMedicines: number;\n local: any;\n}\n","export default \"@media (max-width: 1025px) {\\n .dashboard h5 {\\n font-size: 20px !important;\\n }\\n .dashboard .date {\\n font-size: 17px !important;\\n line-height: 20px;\\n margin-top: 10px;\\n }\\n}\\n\\n.ngx-photo-editor-icons-container svg {\\n fill: black;\\n}\\n\\n.ngx-photo-editor-custom-modal-footer {\\n background: transparent !important;\\n}\\n\\n.container-dashboard {\\n background: var(--color-white);\\n background: linear-gradient(180deg, white 49%, var(--background-section) 49%, var(--background-section) 100%);\\n height: calc(100vh - 130px);\\n overflow-y: auto;\\n}\\n\\n.container-dashboard .section-profile {\\n display: flex;\\n padding-top: 10px;\\n}\\n\\n.container-dashboard .section-profile img {\\n width: 100px;\\n height: 100px;\\n}\\n\\n.container-dashboard .section-profile h5 {\\n font-size: 50px;\\n font-family: \\\"probold\\\", sans-serif;\\n margin: 0;\\n line-height: 1;\\n}\\n\\n.container-dashboard .section-profile p {\\n color: #6f6f6f;\\n margin-bottom: 0;\\n}\\n\\n.container-dashboard .section-profile p.date {\\n font-family: \\\"prolight\\\", sans-serif;\\n font-size: 20px;\\n}\\n\\n.container-dashboard .section-profile p.crm {\\n font-size: 15px;\\n font-family: \\\"prosemibold\\\", sans-serif;\\n margin-bottom: 32px;\\n}\\n\\n.tile-container {\\n padding: 0px;\\n}\\n\\n.tile-container .option-title {\\n text-align: center !important;\\n}\\n\\n.section {\\n position: initial;\\n padding-top: 6rem !important;\\n}\\n\\n.avatar-container {\\n transition: all 0.4s;\\n}\\n\\n.avatar-container:hover {\\n transition: all 0.4s;\\n}\\n\\n.avatar-container:hover .avatar-placeholder {\\n transition: all 0.4s;\\n display: block !important;\\n}\\n\\n.page-header {\\n height: 44.9vh;\\n}\\n\\n.media img {\\n width: 100px;\\n height: 100px;\\n}\\n\\n.media #avatar-input {\\n display: none;\\n}\\n\\n.media .media-body h5 {\\n font-size: 50px;\\n font-family: \\\"probold\\\", sans-serif;\\n margin: 0;\\n line-height: 1;\\n}\\n\\n.media .media-body p {\\n color: #6f6f6f;\\n margin-bottom: 0;\\n}\\n\\n.media .media-body p.date {\\n font-family: \\\"prolight\\\", sans-serif;\\n font-size: 20px;\\n}\\n\\n.media .media-body p.crm {\\n font-size: 15px;\\n font-family: \\\"prosemibold\\\", sans-serif;\\n}\\n\\n@media (max-width: 720px) {\\n .media .media-body h5 {\\n font-size: 40px;\\n }\\n}\\n\\n.raised {\\n margin-top: -27.3vh;\\n padding-right: 20px;\\n background-color: transparent;\\n min-height: 376px;\\n}\\n\\n.raised.menu-tiles {\\n padding: 0;\\n}\\n\\n.menu-tiles [class^=col-]:not(:first-child):not(:last-child):not(:nth-child(5)),\\n.menu-tiles [class*=\\\" col-\\\"]:not(:first-child):not(:last-child):not(:nth-child(5)) {\\n padding: 0;\\n}\\n\\n.menu-tiles [class^=col-]:last-child,\\n.menu-tiles [class*=\\\" col-\\\"]:last-child {\\n padding-left: 0;\\n padding-right: 0;\\n}\\n\\n.menu-tiles [class^=col-]:first-child, .menu-tiles [class^=col-]:nth-child(5), .menu-tiles [class^=col-]:nth-child(8),\\n.menu-tiles [class*=\\\" col-\\\"]:first-child,\\n.menu-tiles [class*=\\\" col-\\\"]:nth-child(5),\\n.menu-tiles [class*=\\\" col-\\\"]:nth-child(8) {\\n padding-right: 0;\\n}\\n\\n.menu-tiles .row {\\n justify-content: center;\\n}\\n\\n.tiles {\\n height: 220px;\\n box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16);\\n text-transform: uppercase;\\n font-size: 20px;\\n color: white;\\n font-family: \\\"problack\\\", sans-serif;\\n transition: all 300ms ease;\\n}\\n\\n.tiles.card-nova-prescricao {\\n background-color: var(--background-card-prescricao);\\n}\\n\\n.tiles.card-modelo-favorito {\\n background-color: var(--background-card-modelo-favorito);\\n}\\n\\n.tiles.card-historico-prescricao {\\n background-color: var(--background-card-historico);\\n}\\n\\n.tiles.card-pacientes {\\n background-color: var(--background-card-pacientes);\\n color: var(--color-card-pacientes);\\n}\\n\\n.tiles.card-meus-dados {\\n background-color: var(--background-card-meus-dados);\\n}\\n\\n.tiles.card-tele-consulta {\\n background-color: var(--background-card-tele-consulta);\\n}\\n\\n.tiles.card-agenda-virtual {\\n background-color: var(--backgorund-card-agenda-virtual);\\n}\\n\\n.tiles.card-prescricao-renova {\\n background-color: #1c3f3b;\\n text-align: center;\\n color: var(--color-white);\\n}\\n\\n.tiles.card-prescricao-renova i {\\n font-size: 30px;\\n}\\n\\n.tiles.card-prescricao-renova a {\\n color: var(--color-white) !important;\\n}\\n\\n.tiles.card-prescricao-renova a :hover {\\n color: var(--color-white) !important;\\n}\\n\\n.tiles.card-new-prescription {\\n position: relative;\\n background-color: #43c7dd;\\n text-align: center;\\n color: var(--color-white);\\n z-index: 1;\\n /* top left*/\\n}\\n\\n.tiles.card-new-prescription :hover {\\n color: var(--color-white);\\n}\\n\\n.tiles.card-new-prescription i {\\n font-size: 30px;\\n}\\n\\n.tiles.card-new-prescription .ribbon {\\n width: 150px;\\n height: 150px;\\n overflow: hidden;\\n position: absolute;\\n}\\n\\n.tiles.card-new-prescription .ribbon::before,\\n.tiles.card-new-prescription .ribbon::after {\\n position: absolute;\\n z-index: -1;\\n content: \\\"\\\";\\n display: block;\\n border: 5px solid #2980b9;\\n}\\n\\n.tiles.card-new-prescription .ribbon span {\\n position: absolute;\\n display: block;\\n width: 225px;\\n padding: 15px 0;\\n background-color: #3498db;\\n box-shadow: 0 5px 10px rgba(0, 0, 0, 0.1);\\n color: #fff;\\n font: 700 18px/1 \\\"Lato\\\", sans-serif;\\n text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);\\n text-transform: uppercase;\\n text-align: center;\\n}\\n\\n.tiles.card-new-prescription .ribbon-top-left {\\n top: -10px;\\n left: -10px;\\n}\\n\\n.tiles.card-new-prescription .ribbon-top-left::before,\\n.tiles.card-new-prescription .ribbon-top-left::after {\\n border-top-color: transparent;\\n border-left-color: transparent;\\n}\\n\\n.tiles.card-new-prescription .ribbon-top-left::before {\\n top: 0;\\n right: 38px;\\n}\\n\\n.tiles.card-new-prescription .ribbon-top-left::after {\\n bottom: 39px;\\n left: 0;\\n}\\n\\n.tiles.card-new-prescription .ribbon-top-left span {\\n right: -4px;\\n top: 12px;\\n transform: rotate(-45deg);\\n}\\n\\n.tiles:hover {\\n transform: translateY(-1px);\\n z-index: 1;\\n}\\n\\n.pointer {\\n cursor: pointer;\\n}\\n\\n@media (max-width: 500px) {\\n .container-dashboard {\\n overflow-y: scroll;\\n }\\n .container-dashboard .section-profile {\\n padding-top: 30px;\\n }\\n .container-dashboard .section-profile img {\\n width: 60px;\\n height: 60px;\\n }\\n .container-dashboard .section-profile h5 {\\n font-size: 25px;\\n }\\n .container-dashboard .section-profile p.date {\\n font-size: 15px;\\n }\\n .container-dashboard .section-profile p.crm {\\n margin-bottom: 25px;\\n }\\n}\\n\\np {\\n text-align: justify;\\n}\\n\\n.col {\\n text-align: center;\\n}\\n\\n.card-title {\\n margin-bottom: 1.25rem;\\n font-weight: bold;\\n text-align: center;\\n color: var(--color-icon-menu);\\n font-size: 20px;\\n}\\n\\n.card {\\n border: rgba(0, 0, 0, 0.16) 1px solid;\\n border-radius: 5px;\\n height: 215px;\\n}\\n\\n.search-card {\\n background-color: var(--bg-input-text);\\n}\\n\\n.search-card input {\\n height: 30px;\\n background-color: var(--color-input-border-hover);\\n border-radius: 5px;\\n border: var(--bg-color-btn-success) 1px solid !important;\\n}\\n\\n.search-card i {\\n cursor: pointer;\\n}\\n\\n.dispensation-card {\\n background-color: var(--background-card-pacientes);\\n text-align: center;\\n}\\n\\n.dispensation-card app-input-file {\\n text-align: center;\\n}\\n\\n.dispensation-card .btn-send {\\n background-color: white;\\n border-color: #d9d9d9;\\n color: rgba(0, 0, 0, 0.65);\\n}\\n\\napp-input-file ::ng-deep .ant-btn:hover,\\napp-input-file ::ng-deep .ant-btn:focus {\\n background-color: white;\\n border-color: #d9d9d9;\\n color: rgba(0, 0, 0, 0.65);\\n}\";","import { Component, EventEmitter, OnInit, Output } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\n\n@Component({\n selector: 'app-modal-resend-documento-empty',\n templateUrl: './modal-resend-documento-empty.component.html',\n styleUrls: ['./modal-resend-documento-empty.component.scss']\n})\nexport class ModalResendDocumentoEmptyComponent implements OnInit {\n @Output() afterInit = new EventEmitter<any>();\n @Output() goBack = new EventEmitter<any>();\n\n code: string;\n\n constructor(private modalref: BsModalRef, private activateRouter: ActivatedRoute) {}\n\n ngOnInit() {\n this.afterInit.emit();\n }\n\n back() {\n this.goBack.emit();\n this.close();\n }\n\n close() {\n this.modalref.hide();\n }\n\n get isVeterinarian(): boolean {\n const prefixCode = this.code.substring(0, 4);\n return (\n prefixCode === 'VETP' || prefixCode === 'VETA' || prefixCode === 'VETE' || prefixCode === 'VETO'\n );\n }\n\n get title() {\n if (this.isVeterinarian) {\n return this.getTitlePet();\n } else {\n switch (this.code[0]) {\n case 'A':\n return 'Atestado não reenviado';\n case 'E':\n return 'Pedido de Exame não reenviado';\n case 'O':\n return 'Documento não reenviado';\n default:\n return 'Receita não reenviada';\n }\n }\n }\n\n getTitlePet() {\n const prefixCode = this.code.substring(0, 4);\n switch (prefixCode) {\n case 'VETA':\n return 'Atestado não reenviado';\n case 'VETE':\n return 'Pedido de Exame não reenviado';\n case 'VETO':\n return 'Documento não reenviado';\n default:\n return 'Receita não reenviada';\n }\n }\n}\n","export default \"<div class=\\\"modal-body\\\" theme>\\n <h4 class=\\\"title\\\">\\n {{ title }}\\n </h4>\\n <p class=\\\"codigo\\\">Código do documento: {{ code }}</p>\\n\\n <p style=\\\"font-size: 20px;\\\">Nenhuma forma de reenvio foi selecionada ou os dados são inválidos.</p>\\n\\n <span\\n >Clique em <strong>voltar</strong> para selecionar uma forma válida de reenvio ou finalize o\\n processo.</span\\n >\\n</div>\\n\\n<div class=\\\"modal-footer\\\" theme>\\n <button (click)=\\\"back()\\\" class=\\\"btn btn-back\\\">Voltar</button>\\n <button (click)=\\\"close()\\\" class=\\\"btn\\\" theme>\\n Finalizar\\n </button>\\n</div>\\n\";","export default \".modal-body {\\n text-align: center;\\n}\\n.modal-body .title {\\n text-transform: none;\\n font-size: 36px;\\n line-height: normal;\\n}\\n@media (max-width: 1025px) {\\n .modal-body .title {\\n font-size: 22px;\\n line-height: 24px;\\n }\\n}\\n.modal-body .codigo {\\n font-weight: 600;\\n font-size: 22px;\\n}\\n.modal-footer {\\n background-color: var(--bg-color-secondary);\\n padding: 8px;\\n display: flex;\\n justify-content: space-between;\\n}\\n.modal-footer .btn {\\n font-size: 12px;\\n color: #ebebeb;\\n text-decoration: none;\\n background-color: var(--bg-color-primary);\\n border-color: var(--bg-color-primary);\\n}\\n.modal-footer .btn.btn-primary {\\n background-color: #1b403a;\\n border-color: #1b403a;\\n}\\n.modal-footer .btn.btn-back {\\n background-color: #d4d4d4;\\n border-color: #d4d4d4;\\n color: #414141;\\n}\";","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot } from '@angular/router';\nimport { AuthService } from '@app/core/services/auth.service';\nimport { PharmacistService } from '../pharmacist/services/pharmacist.service';\nimport { nativeAsync } from '@app/shared/decorators/nativeAsync';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DashboardGuard implements CanActivate {\n constructor(\n private authService: AuthService,\n private pharmacistService: PharmacistService,\n private router: Router\n ) {}\n\n @nativeAsync\n async canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Promise<boolean> {\n const user = this.authService.user();\n const selectedPharmacy = localStorage.getItem('extra_data');\n if (user.userType === 'pharmacist' && !selectedPharmacy) {\n const pharmacies = await this.pharmacistService.getPharmacies(user._id).toPromise();\n if (pharmacies.length === 1) {\n const pharmacy = pharmacies[0];\n localStorage.setItem(\n 'extra_data',\n JSON.stringify({ pharmacyUserId: pharmacy.userId, pharmacyId: pharmacy._id })\n );\n } else {\n this.router.navigate(['/entry/pharmacy-options'], { state: { pharmacies } });\n }\n }\n return true;\n }\n}\n","export default \"<app-alternative-navbar title=\\\"Meu Painel\\\" titleIcon=\\\"fa-view-compact\\\"></app-alternative-navbar>\\n<app-sidebar-menu></app-sidebar-menu>\\n<app-float-button *ngIf=\\\"hasPatientRecordFeature\\\"></app-float-button>\\n\\n<ng-container *ngIf=\\\"hasCipFeature; then templateNew; else templateOld\\\"></ng-container>\\n\\n<ng-template #templateNew>\\n <div class=\\\"container\\\">\\n <div class=\\\"row justify-content-around pt-4\\\">\\n <div class=\\\"col-1\\\"></div>\\n <div class=\\\"col-md-4\\\">\\n <p class=\\\"card-title\\\">RECEITA DIGITAL</p>\\n <nz-card class=\\\"card search-card\\\">\\n <form (submit)=\\\"search(param.value)\\\">\\n <p>\\n Digite abaixo o CPF do paciente (somente números) ou o código da receita para validar e\\n registrar a dispensação.\\n </p>\\n\\n <nz-input-group [nzSuffix]=\\\"suffixIconSearch\\\">\\n <input nz-input #param />\\n </nz-input-group>\\n <ng-template #suffixIconSearch>\\n <i nz-icon nzType=\\\"search\\\" (click)=\\\"search(param.value)\\\"></i>\\n </ng-template>\\n </form>\\n </nz-card>\\n </div>\\n\\n <div class=\\\"col-md-4\\\">\\n <p class=\\\"card-title\\\">OUTRAS RECEITAS</p>\\n <nz-card class=\\\"card dispensation-card\\\">\\n <p>\\n Faça upload do PDF de receitas que não foram feitas na Receita Digital para validar e\\n registar a dispensação\\n </p>\\n\\n <app-input-file\\n [(ngModel)]=\\\"pdf\\\"\\n accept=\\\".pdf\\\"\\n textButton=\\\"Selecione uma receita\\\"\\n placeholder=\\\"\\\"\\n maxSize=\\\"3145728\\\"\\n name=\\\"pdf\\\"\\n [(filename)]=\\\"filename\\\"\\n ></app-input-file>\\n <button *ngIf=\\\"pdf\\\" nz-button class=\\\"btn-send mt-2\\\" nzType=\\\"primary\\\" (click)=\\\"sendPdf()\\\">\\n Enviar\\n </button>\\n </nz-card>\\n </div>\\n <div class=\\\"col-1\\\"></div>\\n </div>\\n </div>\\n</ng-template>\\n\\n<!-- ************************************************************************************************************** -->\\n<ng-template #templateOld>\\n <div *ngIf=\\\"completeUser\\\" class=\\\"container-dashboard\\\">\\n <div class=\\\"container\\\">\\n <section class=\\\"section-profile\\\">\\n <div class=\\\"avatar-container\\\" *ngIf=\\\"avatarB64\\\" title=\\\"Meus Dados\\\">\\n <a routerLink=\\\"/profile\\\"><img class=\\\"mr-3 avatar\\\" [src]=\\\"avatarB64\\\"/></a>\\n </div>\\n\\n <img\\n class=\\\"mr-3 avatar\\\"\\n src=\\\"assets/img/default-avatar.png\\\"\\n alt=\\\"Generic placeholder image\\\"\\n *ngIf=\\\"!avatarB64 && completeUser.sex !== 'F'\\\"\\n />\\n\\n <img\\n class=\\\"mr-3 avatar\\\"\\n src=\\\"assets/img/default-avatar.F.png\\\"\\n alt=\\\"Generic placeholder image\\\"\\n *ngIf=\\\"!avatarB64 && completeUser.sex === 'F'\\\"\\n />\\n\\n <div>\\n <ng-container [ngSwitch]=\\\"user?.userType\\\">\\n <h5 class=\\\"mt-0 user-name\\\" *ngSwitchCase=\\\"'healthProfessional'\\\">Olá, {{ doctorName }}</h5>\\n <h5 class=\\\"mt-0 user-name\\\" *ngSwitchCase=\\\"'patient'\\\">Olá, {{ completeUser?.name }}</h5>\\n <h5 class=\\\"mt-0 user-name\\\" *ngSwitchCase=\\\"'pharmacist'\\\">Olá, {{ completeUser?.name }}</h5>\\n <h5 class=\\\"mt-0 user-name\\\" *ngSwitchCase=\\\"'pharmacy'\\\">\\n Olá, {{ completeUser?.fantasyName }}\\n </h5>\\n </ng-container>\\n <p class=\\\"date\\\">{{ today | date: 'fullDate' }} | {{ today | date: 'HH:mm' }}</p>\\n <p class=\\\"crm\\\" *ngIf=\\\"user?.userType === 'healthProfessional'\\\">\\n {{ completeUser?.regionalCouncilNumber?.label }}:\\n {{ completeUser?.regionalCouncilNumber?.number }}/{{\\n completeUser?.regionalCouncilNumber?.uf\\n }}\\n </p>\\n </div>\\n </section>\\n <section\\n [ngSwitch]=\\\"user?.userType\\\"\\n [ngStyle]=\\\"user?.userType !== 'healthProfessional' ? { 'margin-top': '30px' } : {}\\\"\\n >\\n <ng-container *ngSwitchCase=\\\"'healthProfessional'\\\">\\n <div class=\\\"row flex-wrap justify-content-md-center\\\">\\n <div\\n class=\\\"col-md-3 tile-container\\\"\\n *ngIf=\\\"!isVeterinarian && !authService.hasAccessNewModulePrescription\\\"\\n >\\n <div\\n (click)=\\\"redirectDocumentNew(false)\\\"\\n class=\\\"tiles card-new-prescription d-flex align-items-center flex-column justify-content-center pointer\\\"\\n >\\n <div class=\\\"ribbon ribbon-top-left\\\"><span>BETA</span></div>\\n <span class=\\\"w-75\\\">\\n Experimente um novo jeito de prescrever!\\n </span>\\n <i class=\\\"fa-solid fa-pills\\\"></i>\\n </div>\\n </div>\\n <div class=\\\"col-md-3 tile-container\\\">\\n <a\\n [routerLink]=\\\"\\n isVeterinarian || authService.hasAccessNewModulePrescription\\n ? ['/document/new']\\n : ['/prescription/new']\\n \\\"\\n class=\\\"tiles card-nova-prescricao d-flex align-items-center flex-column justify-content-center\\\"\\n >\\n Nova Prescrição\\n <i class=\\\"fa fa-plus\\\"></i>\\n </a>\\n </div>\\n <div class=\\\"col-md-3 tile-container\\\">\\n <a\\n routerLink=\\\"/favorites\\\"\\n class=\\\"tiles card-modelo-favorito d-flex align-items-center flex-column justify-content-center\\\"\\n >\\n Modelos Favoritos\\n <i class=\\\"fa fa-heart\\\"></i>\\n </a>\\n </div>\\n <div class=\\\"col-md-3 tile-container\\\">\\n <a\\n routerLink=\\\"/historic\\\"\\n class=\\\"tiles card-historico-prescricao d-flex align-items-center flex-column justify-content-center pointer\\\"\\n >\\n <span class=\\\"option-title w-75\\\">\\n Histórico de Documentos\\n </span>\\n <i class=\\\"fas fa-history\\\"></i>\\n </a>\\n </div>\\n <div class=\\\"col-md-3 tile-container\\\">\\n <a\\n routerLink=\\\"/patients\\\"\\n class=\\\"tiles card-pacientes d-flex align-items-center flex-column justify-content-center pointer\\\"\\n >\\n <span>\\n Pacientes\\n </span>\\n <i class=\\\"fa-assignment\\\"></i>\\n </a>\\n </div>\\n <div class=\\\"col-md-3 tile-container\\\" *ngIf=\\\"hasRennovaFeature\\\">\\n <div\\n (click)=\\\"redirectDocumentNew(true)\\\"\\n class=\\\"tiles card-prescricao-renova d-flex align-items-center flex-column justify-content-center pointer\\\"\\n >\\n <span class=\\\"w-75\\\">\\n Prescrição Rennova\\n </span>\\n <i class=\\\"fa fa-syringe\\\"></i>\\n </div>\\n </div>\\n <div class=\\\"col-md-3 tile-container\\\" *ngIf=\\\"!hasAccessToManipulatedFunctionality()\\\">\\n <a\\n routerLink=\\\"/profile\\\"\\n class=\\\"tiles card-meus-dados d-flex align-items-center flex-column justify-content-center\\\"\\n >\\n Meus Dados\\n <i class=\\\"fa fa-account-box\\\"></i>\\n </a>\\n </div>\\n </div>\\n <div\\n class=\\\"row flex-wrap justify-content-md-center\\\"\\n *ngIf=\\\"hasAccessToManipulatedFunctionality()\\\"\\n >\\n <div class=\\\"col-md-3 tile-container\\\">\\n <a\\n routerLink=\\\"/profile\\\"\\n class=\\\"tiles card-meus-dados d-flex align-items-center flex-column justify-content-center\\\"\\n >\\n Meus Dados\\n <i class=\\\"fa fa-account-box\\\"></i>\\n </a>\\n </div>\\n\\n <div class=\\\"col-md-3 tile-container\\\" *ngIf=\\\"hasAccessToManipulatedFunctionality()\\\">\\n <a\\n routerLink=\\\"/personalized-medications\\\"\\n class=\\\"tiles dark d-flex align-items-center flex-column justify-content-center\\\"\\n >\\n <span class=\\\"option-title\\\">\\n Personalizar Tratamento\\n </span>\\n <i nz-icon nzType=\\\"profile\\\" nzTheme=\\\"outline\\\"></i>\\n </a>\\n </div>\\n </div>\\n </ng-container>\\n\\n <ng-container *ngSwitchCase=\\\"'patient'\\\">\\n <div class=\\\"row flex-wrap justify-content-md-center\\\">\\n <div class=\\\"col-md-3 tile-container\\\">\\n <a\\n routerLink=\\\"/historic\\\"\\n class=\\\"tiles card-historico-prescricao d-flex align-items-center flex-column justify-content-center pointer\\\"\\n >\\n Minhas Prescrições\\n <i class=\\\"fa fa-account-box\\\"></i>\\n </a>\\n </div>\\n\\n <div class=\\\"col-md-3 tile-container\\\">\\n <a\\n routerLink=\\\"/profile\\\"\\n class=\\\"tiles card-meus-dados d-flex align-items-center flex-column justify-content-center\\\"\\n >\\n <span class=\\\"option-title\\\">\\n Meus Dados\\n </span>\\n <i class=\\\"fas fa-history\\\"></i>\\n </a>\\n </div>\\n </div>\\n </ng-container>\\n\\n <ng-container *ngSwitchCase=\\\"'pharmacy'\\\">\\n <div class=\\\"row flex-wrap justify-content-md-center\\\" style=\\\"text-align: center;\\\">\\n <div class=\\\"col-md-3 tile-container\\\">\\n <a>\\n <div\\n (click)=\\\"open()\\\"\\n class=\\\"tiles card-nova-prescricao d-flex align-items-center flex-column justify-content-center\\\"\\n >\\n Buscar Receitas\\n <i class=\\\"fas fa-search\\\"></i>\\n </div>\\n </a>\\n </div>\\n <div class=\\\"col-md-3 tile-container\\\" *ngIf=\\\"!hasFarmaRennovaFeature\\\">\\n <a\\n routerLink=\\\"/pharmacy/recipe\\\"\\n class=\\\"tiles card-pacientes d-flex align-items-center flex-column justify-content-center pointer\\\"\\n >\\n <span>\\n Receita de Terceiros\\n </span>\\n <i class=\\\"fas fa-clipboard-list\\\"></i>\\n </a>\\n </div>\\n\\n <div class=\\\"col-md-3 tile-container\\\">\\n <a\\n routerLink=\\\"/pharmacist\\\"\\n class=\\\"tiles card-meus-dados d-flex align-items-center flex-column justify-content-center\\\"\\n >\\n Farmacêuticos\\n <i nz-icon nzType=\\\"team\\\" nzTheme=\\\"outline\\\"></i>\\n </a>\\n </div>\\n </div>\\n\\n <div class=\\\"row flex-wrap justify-content-md-center\\\">\\n <div class=\\\"col-md-3 tile-container\\\">\\n <a\\n routerLink=\\\"/historic\\\"\\n class=\\\"tiles card-historico-prescricao d-flex align-items-center flex-column justify-content-center pointer\\\"\\n >\\n <span>\\n Histórico de Retenções\\n </span>\\n <i class=\\\"fas fa-history\\\"></i>\\n </a>\\n </div>\\n <div class=\\\"col-md-3 tile-container\\\">\\n <a\\n routerLink=\\\"/profile\\\"\\n class=\\\"tiles card-meus-dados d-flex align-items-center flex-column justify-content-center\\\"\\n >\\n Meus dados\\n <i class=\\\"fa fa-account-box\\\"></i>\\n </a>\\n </div>\\n <div class=\\\"col-md-3 tile-container\\\" *ngIf=\\\"hasAccessToManipulatedFunctionality()\\\">\\n <a\\n routerLink=\\\"/personalized-medications\\\"\\n class=\\\"tiles card-nova-prescricao d-flex align-items-center flex-column justify-content-center\\\"\\n >\\n Manipulados\\n <i nz-icon nzType=\\\"medicine-box\\\" nzTheme=\\\"outline\\\"></i>\\n </a>\\n </div>\\n </div>\\n </ng-container>\\n\\n <ng-container *ngSwitchCase=\\\"'pharmacist'\\\">\\n <div class=\\\"row flex-wrap justify-content-md-center\\\">\\n <div class=\\\"col-md-3 tile-container\\\">\\n <div\\n (click)=\\\"open()\\\"\\n class=\\\"tiles card-nova-prescricao d-flex align-items-center flex-column justify-content-center\\\"\\n >\\n Buscar Receitas\\n <i class=\\\"fas fa-search\\\"></i>\\n </div>\\n </div>\\n <div class=\\\"col-md-3 tile-container\\\">\\n <a\\n routerLink=\\\"/pharmacy/recipe\\\"\\n class=\\\"tiles card-pacientes d-flex align-items-center flex-column justify-content-center pointer\\\"\\n >\\n Receita de Terceiros\\n <i class=\\\"fas fa-clipboard-list\\\"></i>\\n </a>\\n </div>\\n <div class=\\\"col-md-3 tile-container\\\">\\n <a\\n routerLink=\\\"/profile\\\"\\n class=\\\"tiles card-meus-dados d-flex align-items-center flex-column justify-content-center\\\"\\n >\\n Meus Dados\\n <i class=\\\"fa fa-account-box\\\"></i>\\n </a>\\n </div>\\n <div class=\\\"col-md-3 tile-container\\\" *ngIf=\\\"hasAccessToManipulatedFunctionality()\\\">\\n <a\\n routerLink=\\\"/personalized-medications\\\"\\n class=\\\"tiles card-pacientes d-flex align-items-center flex-column justify-content-center pointer\\\"\\n >\\n Manipulados\\n <i nz-icon nzType=\\\"medicine-box\\\" nzTheme=\\\"outline\\\"></i>\\n </a>\\n </div>\\n </div>\\n </ng-container>\\n </section>\\n </div>\\n </div>\\n</ng-template>\\n<ngx-loading [show]=\\\"loading\\\" [config]=\\\"{ backdropBorderRadius: '3px' }\\\"></ngx-loading>\\n<app-modal-cip-acceptance\\n [(isVisible)]=\\\"isModalCipVisible\\\"\\n [code]=\\\"this.cipFeature?.code\\\"\\n></app-modal-cip-acceptance>\\n<app-modal-rqe-warning\\n *ngIf=\\\"completeUser\\\"\\n [(isVisible)]=\\\"isModalRqeVisible\\\"\\n [healthProfessional]=\\\"completeUser\\\"\\n>\\n</app-modal-rqe-warning>\\n<app-modal-womens-month *ngIf=\\\"completeUser\\\" [(isVisible)]=\\\"isModalWomanVisible\\\">\\n</app-modal-womens-month>\\n\";","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { PharmacyService } from '@app/modules/pharmacy/services/pharmacy.service';\nimport { nativeAsync } from '@app/shared/decorators/nativeAsync';\nimport { AppToastService } from '@app/shared/services/app-toast.service';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\n\n@Component({\n selector: 'app-modal-covid',\n templateUrl: './modal-covid.component.html',\n styleUrls: ['./modal-covid.component.scss']\n})\nexport class ModalCovidComponent implements OnInit {\n @Output() searchEvent = new EventEmitter();\n @Input() pharmacy;\n public covidForm: FormGroup;\n\n constructor(\n private pharmacyService: PharmacyService,\n private fb: FormBuilder,\n private modalRef: BsModalRef,\n private notification: AppToastService\n ) {\n this.covidForm = this.fb.group({\n covid: this.fb.control('', Validators.required)\n });\n }\n\n ngOnInit() {\n const valCovidDB = this.pharmacy.covid;\n this.covidForm.controls.covid.setValue(valCovidDB);\n this.covidForm.patchValue(this.covidForm.controls.covid);\n }\n\n handleClick() {\n this.modalRef.hide();\n }\n\n @nativeAsync\n async save(param) {\n if (param === '') {\n this.notification.notify('warning', 'Atenção', 'Valor do teste Covid não informado');\n } else {\n const pharmacyId = this.pharmacy._id;\n this.pharmacy.covid = this.covidForm.get('covid').value;\n const pharmacy = await this.pharmacyService.update(pharmacyId, this.pharmacy).toPromise();\n this.modalRef.hide();\n this.notification.notify('success', 'Informação atualizada com sucesso .', null);\n }\n }\n}\n","export default \"<div>\\n <div class=\\\"modal-header\\\">\\n <img src=\\\"assets/icons/Covid-19 arte.png\\\" class=\\\"gfg\\\" />\\n <h4 class=\\\"modal-title pull-left text-white\\\">MOVIMENTO COVID-19 : Teste Rápido</h4>\\n <button type=\\\"button\\\" class=\\\"close pull-right\\\" aria-label=\\\"Close\\\">\\n <span aria-hidden=\\\"true\\\">×</span>\\n </button>\\n </div>\\n <div class=\\\"container\\\">\\n <form form class=\\\"row justify-content-center\\\" [formGroup]=\\\"covidForm\\\">\\n <p>\\n Com o objetivo de ajudar no combate ao Covid-19, estamos mapeando as farmácias e drogarias que\\n oferecem o teste rápido em suas lojas.\\n </p>\\n <h5>Sua farmácia realiza o Teste COVID-19?</h5>\\n <div>\\n <div class=\\\"form-input\\\">\\n <nz-form-label nzFor=\\\"covid\\\" theme></nz-form-label>\\n <nz-radio-group id=\\\"covid\\\" formControlName=\\\"covid\\\" theme>\\n <h4>\\n <label nz-radio nzValue=\\\"1\\\" (click)=\\\"save(1)\\\">Sim, realizo</label>\\n <label nz-radio nzValue=\\\"2\\\" (click)=\\\"save(2)\\\">Não realizo</label>\\n <label nz-radio nzValue=\\\"3\\\" (click)=\\\"save(3)\\\">Não realizo, mas gostaria de ter</label>\\n </h4>\\n </nz-radio-group>\\n </div>\\n </div>\\n </form>\\n </div>\\n</div>\\n\";","export default \".modal-header {\\n background-color: #4cbca3;\\n font-family: \\\"probold\\\";\\n}\\n\\n.gfg {\\n width: auto;\\n text-align: center;\\n padding: 20px;\\n}\\n\\nimg {\\n max-width: 100%;\\n height: auto;\\n}\\n\\n.modal-body {\\n padding: 0px;\\n height: 170px;\\n display: flex;\\n align-items: center;\\n flex-direction: column;\\n justify-content: center;\\n}\\n\\n.modal-body input {\\n width: 265px;\\n height: 35px;\\n font-family: \\\"prolight\\\";\\n font-size: 12px;\\n}\\n\\n.modal-body label {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n position: relative;\\n z-index: 1;\\n right: -118px;\\n top: -28px;\\n font-size: 15px;\\n margin: 0px;\\n width: 30px;\\n}\\n\\n.modal-body label i {\\n cursor: pointer;\\n}\\n\\np {\\n color: #363636;\\n font-size: 20px;\\n font-family: \\\"prolight\\\";\\n text-align: center;\\n}\";","import { Component, EventEmitter, OnInit, Output } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { PatientsService } from '@app/modules/patients/services/patients.service';\nimport { AppToastService } from '@app/shared/services/app-toast.service';\nimport { markFormGroup } from '@app/utils';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { Patient } from './../../../shared/models/patient';\nimport { nativeAsync } from '@app/shared/decorators/nativeAsync';\n\n@Component({\n selector: 'app-modal-complement-info-patient',\n templateUrl: './modal-complement-info-patient.component.html',\n styleUrls: ['./modal-complement-info-patient.component.scss']\n})\nexport class ModalComplementInfoPatientComponent implements OnInit {\n patientId: string;\n patient: Patient;\n @Output() updateCompleteUser = new EventEmitter();\n\n form: FormGroup;\n\n constructor(\n private patientsService: PatientsService,\n private modalRef: BsModalRef,\n private notification: AppToastService,\n private fb: FormBuilder\n ) {}\n\n ngOnInit() {\n this.form = this.fb.group({\n identity: [this.patient.identity],\n cellphone: [this.patient.cellphone, Validators.required],\n address: this.fb.group({\n complement: [''],\n city: [this.patient.address ? this.patient.address.city : '', Validators.required],\n number: [this.patient.address ? this.patient.address.number : '', Validators.required],\n street: [this.patient.address ? this.patient.address.street : '', Validators.required],\n neighborhood: [\n this.patient.address ? this.patient.address.neighborhood : '',\n Validators.required\n ],\n cep: [this.patient.address ? this.patient.address.cep : '', Validators.required],\n uf: [this.patient.address ? this.patient.address.uf : '', Validators.required]\n })\n });\n }\n\n @nativeAsync\n async save() {\n markFormGroup(this.form);\n if (this.form.valid) {\n try {\n const data = {\n ...this.patient,\n identity: this.form.get('identity').value,\n cellphone: this.form.get('cellphone').value,\n address: {\n ...this.form.get('address').value\n }\n } as Patient;\n\n const patient = await this.patientsService.update(this.patientId, data).toPromise();\n this.updateCompleteUser.emit(patient);\n this.notification.notify('success', 'Dados atualizados com sucesso!', null);\n this.modalRef.hide();\n } catch (error) {\n console.error(error);\n this.notification.notify(\n 'error',\n 'Ocorreu um erro ao tentar atualizar os dados cadastrais',\n null\n );\n }\n }\n }\n\n viewAddress() {\n return (\n !this.patient.address ||\n (this.patient.address &&\n !this.patient.address.cep &&\n !this.patient.address.street &&\n !this.patient.address.number &&\n !this.patient.address.neighborhood &&\n !this.patient.address.city &&\n !this.patient.address.uf)\n );\n }\n}\n","export default \"<div class=\\\"modal-header\\\" theme>\\n <h4 class=\\\"modal-title pull-left text-white\\\">Atualizar dados cadastrais</h4>\\n</div>\\n<div class=\\\"modal-body\\\" [ngClass]=\\\"{ 'modal-body-width': !viewAddress() }\\\">\\n <nz-alert\\n class=\\\"mb-4 w-100\\\"\\n nzType=\\\"warning\\\"\\n nzMessage=\\\"Para continuar acessando o sistema, preencha os campos obrigatórios\\\"\\n ></nz-alert>\\n <form nz-form [formGroup]=\\\"form\\\">\\n <fieldset class=\\\"w-100 mb-2\\\" *ngIf=\\\"!patient.identity || !patient.cellphone\\\">\\n <legend theme>Dados Complementares</legend>\\n <div class=\\\"row\\\">\\n <div class=\\\"col-sm-12 col-md-6 col-lg-6\\\" *ngIf=\\\"!patient.identity\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"identity\\\">Identidade</nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n formControlName=\\\"identity\\\"\\n id=\\\"identity\\\"\\n nz-input\\n placeholder=\\\"Digite sua identidade (somente números)\\\"\\n type=\\\"number\\\"\\n theme\\n />\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n <div class=\\\"col-sm-12 col-md-6 col-lg-6\\\" *ngIf=\\\"!patient.cellphone\\\">\\n <nz-form-item *ngIf=\\\"form.get('cellphone') as cellphone\\\">\\n <nz-form-label nzFor=\\\"cellphone\\\">Telefone <span class=\\\"mandatory\\\">*</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n id=\\\"cellphone\\\"\\n [mask]=\\\"cellphone.value.length <= 10 ? '(00) 0000-00009' : '(00) 00000-0000'\\\"\\n placeholder=\\\"(21) 92222-2222\\\"\\n formControlName=\\\"cellphone\\\"\\n theme\\n />\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n </div>\\n </fieldset>\\n <app-address-data-form\\n *ngIf=\\\"viewAddress()\\\"\\n [form]=\\\"form.get('address')\\\"\\n [required]=\\\"true\\\"\\n alertMsg=\\\"Para receber Receitas de Controle Especial (listas C1, C5 e adendos das listas A1, B1 e B2), deverá ser preenchido o endereço completo (RDC 344/98).\\\"\\n ></app-address-data-form>\\n </form>\\n</div>\\n<div class=\\\"modal-footer\\\">\\n <button class=\\\"ok-btn btn-salvar\\\" nz-button theme (click)=\\\"save()\\\">Salvar <i class=\\\"fa\\\"></i></button>\\n</div>\\n\";","export default \".modal-body input {\\n border-radius: 10px;\\n}\\n.modal-body .btn-save {\\n float: right;\\n padding-top: 7px;\\n padding-bottom: 7px;\\n margin-top: 13px;\\n margin-bottom: 5px;\\n}\\n.modal-body i {\\n font-size: 24px;\\n}\\n.modal-body .mandatory {\\n color: red;\\n}\\n.modal-body input::-webkit-input-placeholder {\\n color: #bdc2c7;\\n}\\n::ng-deep .ant-select-selection {\\n height: 100%;\\n}\\n.modal-header {\\n margin: 0;\\n font-family: \\\"probold\\\";\\n}\\n.modal-body {\\n flex: 1;\\n min-height: 29vh;\\n max-height: 72vh;\\n overflow-y: auto;\\n overflow-x: hidden;\\n}\\n.modal-body-width {\\n width: 950px;\\n}\\n.modal-footer {\\n margin: 0;\\n}\\n.btn-salvar,\\n.btn-salvar:hover {\\n color: var(--color-white);\\n background-color: var(--bg-color-primary);\\n border-color: var(--bg-color-primary);\\n}\\np {\\n color: #363636;\\n font-size: 20px;\\n font-family: \\\"prolight\\\";\\n}\\n@media screen and (max-width: 500px) {\\n .modal-body-width {\\n width: 410px;\\n }\\n}\";","import { Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { AuthService } from '@app/core/services/auth.service';\r\nimport { ModalEditPharmacyTechnicianComponent } from '@app/modules/dashboard/modal-edit-pharmacy-technician/modal-edit-pharmacy-technician.component';\r\nimport { PrescriptionService } from '@app/modules/document/services/prescription.service';\r\nimport { HealthProfessionalService } from '@app/modules/health-professional/services/health-professional.service';\r\nimport { PatientsService } from '@app/modules/patients/services/patients.service';\r\nimport { PharmacistService } from '@app/modules/pharmacist/services/pharmacist.service';\r\nimport { PharmacyService } from '@app/modules/pharmacy/services/pharmacy.service';\r\nimport { UserService } from '@app/modules/user/user.service';\r\nimport { ModalSearchComponent } from '@app/shared/modals/modal-search/modal-search.component';\r\nimport { AdditionalFeatureAccept, HealthProfessional } from '@app/shared/models';\r\nimport { User } from '@app/shared/models/decodedLoginToken';\r\nimport { ProfessionalType } from '@app/shared/models/professional-type.enum';\r\nimport { UserType } from '@app/shared/models/user-type.enum';\r\nimport { AppToastService } from '@app/shared/services/app-toast.service';\r\nimport { StateService } from '@app/shared/services/state.service';\r\nimport * as moment from 'moment';\r\nimport { NzModalService } from 'ng-zorro-antd/modal';\r\nimport { BsModalRef, BsModalService } from 'ngx-bootstrap/modal';\r\nimport { CroppedEvent } from 'ngx-photo-editor';\r\nimport { ReplaySubject } from 'rxjs';\r\nimport { ModalCovidComponent } from '../../modal-covid/modal-covid.component';\r\nimport { ModalNewPortalDigitalSignaturesComponent } from './../../../../shared/modals/modal-new-portal-digital-signatures/modal-new-portal-digital-signatures.component';\r\nimport { ModalComplementInfoPatientComponent } from './../../modal-complement-info-patient/modal-complement-info-patient.component';\r\nimport { nativeAsync } from '@app/shared/decorators/nativeAsync';\r\n\r\n@Component({\r\n selector: 'app-index',\r\n templateUrl: './index.component.html',\r\n styleUrls: ['./index.component.scss']\r\n})\r\nexport class IndexComponent implements OnInit, OnDestroy {\r\n loading = true;\r\n completeUser: any;\r\n userId: string;\r\n crm: string;\r\n modalRef: BsModalRef;\r\n pharmacy: any;\r\n functionalities = [];\r\n imageChangedEvent: any;\r\n avatarB64: any;\r\n pdf: any;\r\n filename: string;\r\n\r\n isModalCipVisible = false;\r\n isModalRqeVisible = false;\r\n isModalWomanVisible = false;\r\n\r\n private destroyed$: ReplaySubject<boolean> = new ReplaySubject();\r\n\r\n constructor(\r\n public authService: AuthService,\r\n private healthProfessionalService: HealthProfessionalService,\r\n private modalService: BsModalService,\r\n private patientService: PatientsService,\r\n private router: Router,\r\n private userService: UserService,\r\n private pharmacyService: PharmacyService,\r\n private pharmacistService: PharmacistService,\r\n private prescriptionService: PrescriptionService,\r\n private notification: AppToastService,\r\n private nzModalService: NzModalService,\r\n private stateService: StateService\r\n ) {}\r\n\r\n @nativeAsync\r\n async ngOnInit() {\r\n try {\r\n this.userService.getAvatar().subscribe(avatar => (this.avatarB64 = avatar));\r\n this.completeUser = await this.getCompleteUser();\r\n\r\n if (\r\n this.user.userType === UserType.PATIENT &&\r\n this.patientWithoutMandatoryInformationRegistered()\r\n ) {\r\n this.showModalComplementInfoPatient();\r\n } else {\r\n if (this.user.userType === UserType.PHARMACY) {\r\n if (!this.completeUser.technicalResponsible || !this.completeUser.technicalResponsible.cpf) {\r\n this.showModalEditPharmacyThechnical(this.completeUser);\r\n } else {\r\n this.openModalCovid();\r\n }\r\n }\r\n }\r\n\r\n this.checkCipAcceptance();\r\n if (this.completeUser.professionalType === 'doctor') {\r\n this.checkRQE();\r\n }\r\n\r\n if (this.completeUser.sex === 'F' && this.womensMonth && !this.hideWomensModal) {\r\n this.isModalWomanVisible = false;\r\n }\r\n } catch (err) {\r\n console.error(err);\r\n }\r\n this.loading = false;\r\n }\r\n\r\n @nativeAsync\r\n private async showAgainModalNewPortalDigitalSignatures() {\r\n if (this.user.userType === UserType.PHARMACY) {\r\n const {\r\n doNotShowAgainModalNewPortalDigitalSignatures\r\n } = await this.userService.getControllerUserUi(this.user._id).toPromise();\r\n if (!doNotShowAgainModalNewPortalDigitalSignatures) {\r\n this.modalService.show(ModalNewPortalDigitalSignaturesComponent, {\r\n backdrop: 'static',\r\n keyboard: false,\r\n class: 'modal-md'\r\n });\r\n }\r\n }\r\n }\r\n\r\n private patientWithoutMandatoryInformationRegistered() {\r\n return (\r\n !this.completeUser.cellphone ||\r\n !this.completeUser.address ||\r\n (this.completeUser.address &&\r\n !this.completeUser.address.cep &&\r\n !this.completeUser.address.street &&\r\n !this.completeUser.address.number &&\r\n !this.completeUser.address.neighborhood &&\r\n !this.completeUser.address.city &&\r\n !this.completeUser.address.uf)\r\n );\r\n }\r\n\r\n private openModalCovid() {\r\n if (!this.completeUser.covid) {\r\n this.showModalCovid(this.completeUser);\r\n }\r\n }\r\n\r\n get user(): User {\r\n return this.authService.user();\r\n }\r\n\r\n private get hideWomensModal() {\r\n return localStorage.getItem('hideWomensModal');\r\n }\r\n\r\n private get womensMonth(): boolean {\r\n return moment().month() === 2 && moment().year() === 2022;\r\n }\r\n\r\n private getCompleteUser() {\r\n switch (this.user.userType) {\r\n case 'patient':\r\n return this.patientService.getPatientByUserId(this.user._id).toPromise();\r\n case 'healthProfessional':\r\n return this.healthProfessionalService.getHealthProfessional(this.user._id).toPromise();\r\n case 'pharmacist':\r\n return this.getPharmacistData();\r\n case 'admin':\r\n this.router.navigate(['/admin']);\r\n break;\r\n default:\r\n return this.pharmacyService.getPharmacyByUserId(this.user._id).toPromise();\r\n }\r\n }\r\n\r\n get today() {\r\n return new Date();\r\n }\r\n\r\n get cipFeature() {\r\n return this.user && this.user.features.find(f => f.name === 'CIP');\r\n }\r\n\r\n get hasCipFeature() {\r\n return this.cipFeature && this.cipFeature.accept === AdditionalFeatureAccept.YES;\r\n }\r\n\r\n get hasPatientRecordFeature() {\r\n return this.user && this.user.features.find(f => f.name === 'Prontuário');\r\n }\r\n\r\n get hasRennovaFeature(): boolean {\r\n return this.user && this.user.features.some(f => f.name === 'Rennova');\r\n }\r\n\r\n get hasFarmaRennovaFeature(): boolean {\r\n return this.user && this.user.features.some(f => f.name === 'Farma Rennova');\r\n }\r\n\r\n private checkCipAcceptance() {\r\n const cipFeature = this.user.features.find(f => f.name === 'CIP');\r\n if (\r\n cipFeature &&\r\n cipFeature.accept !== AdditionalFeatureAccept.YES &&\r\n cipFeature.accept !== AdditionalFeatureAccept.NO\r\n ) {\r\n this.isModalCipVisible = true;\r\n }\r\n }\r\n\r\n private checkRQE() {\r\n const healthProfessional = <HealthProfessional>this.completeUser;\r\n const showModal = healthProfessional.specialties.some(s => s.notExists === undefined);\r\n if (showModal) {\r\n this.isModalRqeVisible = true;\r\n }\r\n }\r\n\r\n search(param: string) {\r\n param = param && param.replace(/[^a-z0-9]+/gi, '');\r\n if (param) {\r\n if (param.length === 11 || param.length === 15) {\r\n if (param.length === 15 && !this.hasFarmaRennovaFeature && param.substring(0, 3) === 'REN') {\r\n this.notification.notify('warning', 'Atenção', 'Código informado inválido');\r\n } else {\r\n this.requests(param);\r\n }\r\n } else {\r\n this.notification.notify('warning', 'Atenção', 'CPF ou código inválido');\r\n }\r\n }\r\n }\r\n @nativeAsync\r\n private async requests(param: string) {\r\n try {\r\n const prescriptions = await this.prescriptionService.getPrescriptionsPatient(param).toPromise();\r\n\r\n if (param.length === 11) {\r\n if (prescriptions.length === 0) {\r\n this.notification.notify(\r\n 'warning',\r\n 'Atenção',\r\n 'Não existe prescrições com medicamentos a serem dispensados para o CPF informado'\r\n );\r\n return;\r\n }\r\n this.router.navigate(['/document/listing-prescriptions/', param], {\r\n state: { prescriptions: prescriptions }\r\n });\r\n } else {\r\n this.router.navigate(['/document/confirmation', param], {\r\n state: { prescription: prescriptions }\r\n });\r\n }\r\n } catch (error) {\r\n if (error.status === 404) {\r\n this.notification.notify('warning', 'Atenção', error.error.message);\r\n }\r\n }\r\n }\r\n\r\n get doctorName() {\r\n if (this.completeUser) {\r\n return `Dr${this.completeUser.sex === 'F' ? 'a' : ''}. ${this.completeUser.name}`;\r\n }\r\n return '';\r\n }\r\n @nativeAsync\r\n async getPharmacistData() {\r\n return await this.pharmacistService.getPharmacistByUserId(this.user._id).toPromise();\r\n }\r\n\r\n hasAccessToManipulatedFunctionality() {\r\n return false && this.functionalities.filter(i => i.code === 710588).length > 0;\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroyed$.next(true);\r\n this.destroyed$.complete();\r\n }\r\n\r\n open() {\r\n this.modalRef = this.modalService.show(ModalSearchComponent, {\r\n backdrop: 'static',\r\n keyboard: false\r\n });\r\n }\r\n\r\n get isDermatologist() {\r\n return (\r\n this.completeUser.specialties.filter(specialty => specialty.title === 'Dermatologia').length === 1\r\n );\r\n }\r\n\r\n get isVeterinarian() {\r\n return this.completeUser.professionalType == ProfessionalType.VETERINARIAN;\r\n }\r\n\r\n showModalComplementInfoPatient() {\r\n const initialState = {\r\n patientId: this.completeUser._id,\r\n patient: this.completeUser\r\n };\r\n\r\n const modal = this.modalService.show(ModalComplementInfoPatientComponent, {\r\n class: 'modal-lg',\r\n initialState,\r\n backdrop: 'static',\r\n keyboard: false\r\n });\r\n modal.content.updateCompleteUser.subscribe(patient => (this.completeUser = patient));\r\n }\r\n\r\n public showModalEditPharmacyThechnical(completeUser) {\r\n const modal = this.nzModalService.create({\r\n nzContent: ModalEditPharmacyTechnicianComponent,\r\n nzComponentParams: {\r\n completeUser,\r\n userType: this.user.userType\r\n },\r\n nzClosable: false,\r\n nzMaskClosable: false,\r\n nzFooter: null\r\n });\r\n\r\n modal.afterClose.subscribe(() => this.openModalCovid());\r\n }\r\n\r\n showModalCovid(completeUser: any) {\r\n const config = {\r\n backdrop: false,\r\n keyboard: false,\r\n ignoreBackdropClick: true\r\n };\r\n\r\n const initialState = {\r\n pharmacy: completeUser\r\n };\r\n this.modalService.show(ModalCovidComponent, {\r\n ...config,\r\n initialState,\r\n backdrop: 'static',\r\n keyboard: false\r\n });\r\n }\r\n\r\n fileChangeEvent(event: any) {\r\n this.imageChangedEvent = event;\r\n }\r\n\r\n imageCropped(event: CroppedEvent) {\r\n this.avatarB64 = event.base64;\r\n }\r\n @nativeAsync\r\n async sendPdf() {\r\n try {\r\n if (this.pdf) {\r\n this.loading = true;\r\n const response = await this.prescriptionService.getPrescriptionByPdf(this.pdf);\r\n if (!response.thirdParties) {\r\n this.router.navigate(['/dispensation/consult']);\r\n } else {\r\n this.router.navigate(['/dispensation/consult-empty']);\r\n }\r\n }\r\n } catch (err) {\r\n console.error(err);\r\n if (err.status === 404) {\r\n const base64 = await this.prescriptionService.blobToBase64(this.pdf);\r\n this.prescriptionService.pdfBase64 = base64;\r\n this.prescriptionService.filename = this.filename;\r\n this.prescriptionService.prescription = {\r\n thirdParties: true,\r\n medicaments: [\r\n {\r\n hidden: true,\r\n checked: true\r\n }\r\n ]\r\n };\r\n this.router.navigate(['/dispensation/consult-not-found']);\r\n }\r\n }\r\n this.loading = false;\r\n }\r\n\r\n redirectDocumentNew(isRennova: boolean) {\r\n this.stateService.data = { isRennova };\r\n this.router.navigateByUrl('/document/new');\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { RouterModule, Routes } from '@angular/router';\r\nimport { DashboardGuard } from './dashboard.guard';\r\nimport { IndexComponent } from './pages/index/index.component';\r\n\r\nconst routes: Routes = [{ path: '', component: IndexComponent, canActivate: [DashboardGuard] }];\r\n\r\n@NgModule({\r\n imports: [RouterModule.forChild(routes)],\r\n exports: [RouterModule]\r\n})\r\nexport class DashboardRoutingModule {}\r\n","export default \"<nz-modal\\n theme\\n class=\\\"modal-cip\\\"\\n [nzTitle]=\\\"title\\\"\\n [(nzVisible)]=\\\"isVisible\\\"\\n [nzContent]=\\\"modalContent\\\"\\n [nzFooter]=\\\"modalFooter\\\"\\n [nzStyle]=\\\"{ top: '20px' }\\\"\\n nzWidth=\\\"800\\\"\\n nzKeyboard=\\\"false\\\"\\n nzMaskClosable=\\\"false\\\"\\n nzClosable=\\\"false\\\"\\n>\\n <ng-template #modalContent>\\n <p class=\\\"bold\\\">RESUMO</p>\\n <p>\\n O Projeto Piloto SERP tem o objetivo de centralizar a troca de informações de Prescrições e\\n Dispensações Digitais.\\n </p>\\n <p>\\n Para isso precisamos da sua autorização para compartilhar seus dados de identificação com as\\n instituições que estão participando deste projeto.\\n </p>\\n <br />\\n <p class=\\\"bold\\\">Quais dados vamos compartilhar?</p>\\n <ol>\\n <li>Nome</li>\\n <li>CPF</li>\\n <li>CRF/UF</li>\\n </ol>\\n <br />\\n <p class=\\\"bold\\\">Com quais instituições vamos compartilhar?</p>\\n <ul>\\n <li>CIP (A centralizadora)</li>\\n <li>Prontmed (plataforma de prontuários eletrônicos)</li>\\n </ul>\\n\\n <p>Confira abaixo o Termo de Consentimento <span class=\\\"bold\\\">na Ãntegra!</span></p>\\n\\n <hr />\\n\\n <h4 class=\\\"title\\\">Termo de Consentimento para Tratamento de Dados</h4>\\n <h5 class=\\\"subtitle\\\">- Projeto Piloto para emissão da Receita Digital -</h5>\\n\\n <p class=\\\"bold\\\">Olá, seja bem-vindo!</p>\\n <p>\\n A <span class=\\\"bold\\\">Receita Digital</span> é uma empresa inovadora, que transforma o\\n relacionamento entre médicos, dentistas, pacientes e farmácias em um processo simples, prático e\\n ágil, através de tecnologia.\\n </p>\\n <p>\\n Nossa Plataforma é estruturada para oferecer a melhor solução em prescrição, gestão e dispensação\\n de receitas digitais no mercado.\\n </p>\\n <p>\\n Para que possamos desenvolver e continuar estruturando melhorias em nossa Plataforma, convidamos\\n você, farmacêutico, para participar do nosso projeto piloto de registro centralizado de prescrições\\n médicas e odontológicas e venda de medicamentos.\\n </p>\\n <p>\\n Ao aceitar os termos desse documento, você concordará que a RECEITA DIGITAL realize o tratamento de\\n seus dados pessoais, no que se referem a coleta, produção, recepção, classificação, utilização,\\n acesso, reprodução, transmissão, distribuição, processamento, arquivamento, armazenamento,\\n eliminação, avaliação ou controle da informação, modificação, comunicação, transferência, difusão\\n ou extração.\\n </p>\\n <p>\\n Por isso, pedimos que leia atentamente este documento e, em caso de dúvida, contate-nos através do\\n e-mail privacidade@receitadigital.com ou consulte nossa PolÃtica de Privacidade.\\n </p>\\n <p>\\n Salientamos que a participação do projeto não é obrigatória, mas será um prazer imenso contar com\\n você na nossa jornada para promover a dispensação de medicamentos de forma ainda mais prática e\\n segura!\\n </p>\\n\\n <h5 class=\\\"subtitle\\\">- Termos Gerais -</h5>\\n\\n <p class=\\\"bold\\\">1. Sobre o que se trata o projeto?</p>\\n <p>\\n 1.1. A Receita Digital disponibilizará na sua farmácia uma interface inovadora, onde será possÃvel\\n que você, farmacêutico responsável pelo atendimento, tenha acesso à prescrição de medicamentos de\\n forma online (ou seja, sem a necessidade de qualquer documento fÃsico ou preenchimento de\\n formulários), com poucos cliques.\\n </p>\\n <p>Como vai funcionar?</p>\\n <p>\\n 1.2. O médico irá emitir a receita médica do paciente, em formato digital, através do sistema do\\n parceiro Prontmed, que é uma plataforma especializada em prontuários médicos, e encaminhará este\\n arquivo digital à CIP (Câmara Interbancária de Pagamentos), que centralizará e armazenará os dados\\n e arquivos desta prescrição eletrônica.\\n </p>\\n <p>\\n 1.3. Você, farmacêutico, realizará a validação e autenticação das informações desta receita, de\\n acordo com a legislação vigente. Caso efetue a venda de algum medicamento, você coletará e validará\\n os dados do comprador, através de apresentação do documento de identificação apresentado, e\\n registrará as informações de dispensação do medicamento em nosso sistema.\\n </p>\\n <p>\\n 1.4. A Receita Digital, para isso, informará à CIP quando houver registro de compra de\\n medicamentos, para que outros estabelecimentos, acessem seu histórico de dispensação e tomem a\\n melhor decisão de acordo com a legislação vigente e melhores práticas de atendimento farmacêutico.\\n A CIP, por sua vez, irá informar a Prontmed (e, com isso, o médico responsável), que o paciente\\n adquiriu o medicamento, auxiliando no acompanhamento do tratamento.\\n </p>\\n <p>\\n 1.5. Ou seja, trata-se de uma operação que trará um maior controle na dispensação de medicamentos,\\n pois você terá mais segurança de que a prescrição expedida está sendo corretamente utilizada pelo\\n Usuário solicitante, bem como dispensará o uso de receitas médicas em papel, evitando o extravio,\\n vazamento e perda das informações. Você, profissional, terá muitos benefÃcios!\\n </p>\\n <p>\\n 1.6. Para que seja possÃvel a realização do projeto, portanto, será necessária a coleta e\\n armazenamento de dados pessoais, nos termos abaixo explicitados.\\n </p>\\n <p class=\\\"bold\\\">2. Tipos de Dados Pessoais Coletados:</p>\\n <p>\\n 2.1. Ao concordar com esse termo, você autorizará que a Receita Digital utilize os seguintes dados\\n pessoais:\\n </p>\\n <ol>\\n <li>Nome completo;</li>\\n <li>CPF;</li>\\n <li>Data de nascimento;</li>\\n <li>Sexo;</li>\\n <li>Filiação;</li>\\n <li>E-mail;</li>\\n <li>CRF;</li>\\n <li>Informações sobre os estabelecimentos ao qual está vinculado.</li>\\n </ol>\\n <p class=\\\"bold\\\">3. Finalidades do Tratamento dos Dados</p>\\n <p>3.1. O tratamento dos dados pessoais será realizado considerando as seguintes finalidades:</p>\\n <ul>\\n <li>Registrar atendimentos;</li>\\n <li>Dispensar medicamentos;</li>\\n <li>\\n Impossibilitar a utilização da prescrição médica em prazo maior do que permitido pela legislação\\n vigente ou em quantidades incompatÃveis com o tratamento prescrito;\\n </li>\\n <li>Cumprimento de exigências legais pelos órgãos reguladores;</li>\\n <li>Validar e autenticar o acesso.</li>\\n </ul>\\n <p>\\n 3.2. Os dados tratados não serão utilizados pela Receita Digital ou por seus parceiros para outras\\n finalidades que não seja a descrita no item 3.1., tampouco compartilhar dados desnecessários para\\n essa finalidade.\\n </p>\\n\\n <p class=\\\"bold\\\">4. Compartilhamento de Dados Pessoais</p>\\n <p>\\n 4.1. Ao concordar com os termos do termo, você autoriza a Receita Digital a compartilhar os dados\\n pessoais com os agentes de tratamento descritos acima, os seguintes dados pessoais:\\n <span class=\\\"bold\\\">(I)</span> Nome completo; <span class=\\\"bold\\\">(II)</span> C.P.F.;\\n <span class=\\\"bold\\\">(III)</span> Número do Registro no Conselho Regional de Farmácia. Os demais\\n dados permanecerão apenas no Banco de Dados da Receita Digital.\\n </p>\\n <p>\\n 4.2. No que se refere à análise das informações sobre como seus dados trafegaram pelo processo\\n descrito no item 1, seus dados serão tratados por:\\n </p>\\n <table style=\\\"width:100%\\\">\\n <tr>\\n <th>Nome da Empresa</th>\\n <th>CNPJ</th>\\n <th>Endereço</th>\\n <th>Contato</th>\\n </tr>\\n <tr>\\n <td>Prontmed</td>\\n <td></td>\\n <td></td>\\n <td></td>\\n </tr>\\n <tr>\\n <td>CIP</td>\\n <td></td>\\n <td></td>\\n <td></td>\\n </tr>\\n <tr>\\n <td>Receita Digital</td>\\n <td>34.307.169/0001-00</td>\\n <td>Rua Mem de Sá, 167, IcaraÃ, Niterói/RJ</td>\\n <td></td>\\n </tr>\\n </table>\\n\\n <p class=\\\"bold\\\">5. Segurança dos Dados</p>\\n <p>\\n 5.1. A Receita Digital e os parceiros do projeto, se responsabilizam pela manutenção de medidas de\\n segurança, técnicas e administrativas aptas a proteger os dados pessoais de acessos não autorizados\\n e de situações acidentais ou ilÃcitas de destruição, perda, alteração, comunicação ou qualquer\\n forma de tratamento inadequado ou ilÃcito.\\n </p>\\n <p class=\\\"bold\\\">6. Término do Tratamento dos Dados -</p>\\n <p>\\n 6.1. O titular está ciente que os Controladores dados poderão manter e tratar os dados pessoais do\\n Titular durante todo o perÃodo em que forem pertinentes para o projeto, de acordo com as\\n finalidades listadas, da seguinte forma:\\n </p>\\n\\n <table style=\\\"width:100%;\\\">\\n <tr>\\n <th>Nome da Empresa</th>\\n <th>PerÃodo de Retenção</th>\\n </tr>\\n <tr>\\n <td>Prontmed</td>\\n <td>Enquanto houver a prestação de serviços ao médico conveniado.</td>\\n </tr>\\n <tr>\\n <td>CIP</td>\\n <td>Até o encerramento do projeto piloto.</td>\\n </tr>\\n <tr>\\n <td>Receita Digital</td>\\n <td>Por até 5 anos, de acordo com a legislação vigente.</td>\\n </tr>\\n </table>\\n\\n <p>\\n 6.2. Dados pessoais anonimizados, sem possibilidade de associação ao indivÃduo, poderão ser\\n mantidos por perÃodo indefinido.\\n </p>\\n <p>\\n 6.3. Você poderá solicitar através do e-mail privacidade@receitadigital.com a qualquer momento, que\\n sejam eliminados os dados pessoais não anonimizados, desde que não haja base legal para retenção\\n dos dados pessoais.\\n </p>\\n <p class=\\\"bold\\\">7. Direitos do Titular</p>\\n <p>\\n 7.1. O Titular tem direito a obter da Controladora, em relação aos dados por ele tratados, a\\n qualquer momento e mediante requisição, através do e-mail privacidade@receitadigital.com, os\\n direitos previstos no artigo 18 da Lei Geral de Proteção de Dados, a saber: I - confirmação da\\n existência de tratamento; II - acesso aos dados; III - correção de dados incompletos, inexatos ou\\n desatualizados; IV - anonimização, bloqueio ou eliminação de dados desnecessários, excessivos ou\\n tratados em desconformidade com o disposto na Lei nº 13.709; V - portabilidade dos dados a outro\\n fornecedor de serviço ou produto, mediante requisição expressa e observados os segredos comercial e\\n industrial, de acordo com a regulamentação do órgão controlador; V - portabilidade dos dados a\\n outro fornecedor de serviço ou produto, mediante requisição expressa, de acordo com a\\n regulamentação da autoridade nacional, observados os segredos comercial e industrial; VI -\\n eliminação dos dados pessoais tratados com o consentimento do titular, exceto nas hipóteses\\n previstas no art. 16 da Lei nº 13.709; VII - informação das entidades públicas e privadas com as\\n quais o controlador realizou uso compartilhado de dados; VIII - informação sobre a possibilidade de\\n não fornecer consentimento e sobre as consequências da negativa; IX - revogação do consentimento,\\n nos termos do § 5º do art. 8º da Lei nº 13.709.\\n </p>\\n <p class=\\\"bold\\\">8. Direito de Revogação do Consentimento</p>\\n <p>\\n 8.1. Este consentimento poderá ser revogado pelo Titular, a qualquer momento, mediante solicitação\\n via e-mail ao encarregado de proteção de dados.\\n </p>\\n <p>Rio de Janeiro, 04 de novembro de 2021.</p>\\n </ng-template>\\n\\n <ng-template #modalFooter>\\n <button nz-button nzType=\\\"default\\\" (click)=\\\"close()\\\">\\n <span *ngIf=\\\"!isAnswered\\\">Agora não</span>\\n <span *ngIf=\\\"isAnswered\\\">Cancelar</span>\\n </button>\\n <button\\n nz-button\\n nzType=\\\"danger\\\"\\n (click)=\\\"refuse()\\\"\\n [nzLoading]=\\\"refuseLoading\\\"\\n [disabled]=\\\"acceptLoading\\\"\\n >\\n <span *ngIf=\\\"!isAnswered\\\">Recusar</span>\\n <span *ngIf=\\\"isAnswered\\\">Revogar</span>\\n </button>\\n <button\\n nz-button\\n nzType=\\\"primary\\\"\\n (click)=\\\"accept()\\\"\\n [nzLoading]=\\\"acceptLoading\\\"\\n [disabled]=\\\"refuseLoading\\\"\\n >\\n Aceitar\\n </button>\\n </ng-template>\\n</nz-modal>\\n\";","import { Component, EventEmitter, HostListener, Input, OnInit, Output } from '@angular/core';\nimport { AuthService } from '@app/core/services/auth.service';\nimport { AdditionalFeatureService } from '@app/modules/admin/listing/features-listing/additional-feature.service';\nimport { nativeAsync } from '@app/shared/decorators/nativeAsync';\nimport { AdditionalFeatureAccept } from '@app/shared/models';\nimport { User } from '@app/shared/models/decodedLoginToken';\nimport { AppToastService } from '@app/shared/services/app-toast.service';\n\n@Component({\n selector: 'app-modal-cip-acceptance',\n templateUrl: './modal-cip-acceptance.component.html',\n styleUrls: ['./modal-cip-acceptance.component.scss']\n})\nexport class ModalCipAcceptanceComponent implements OnInit {\n @Input() code: number;\n @Input() isVisible = false;\n @Output() isVisibleChange = new EventEmitter<boolean>();\n @Output() userChange = new EventEmitter<User>();\n\n title =\n 'Termo de Consentimento para Tratamento de Dados <br> Projeto Piloto - Sistema Eletrônico de Registro de Prescrições';\n refuseLoading = false;\n acceptLoading = false;\n\n constructor(\n private authService: AuthService,\n private additionalFeatureService: AdditionalFeatureService,\n private notification: AppToastService\n ) {}\n\n ngOnInit() {\n this.setHeight(window.innerHeight);\n }\n\n get user(): User {\n return this.authService.user();\n }\n\n @HostListener('window:resize', ['$event'])\n onResize(event) {\n this.setHeight(window.innerHeight);\n }\n\n setHeight(height: number) {\n const heightValue = `${height * 0.6}px`;\n document.documentElement.style.setProperty('--modal-height', heightValue);\n }\n\n get isAnswered() {\n return (\n this.user &&\n this.user.features.find(f => f.code === this.code).accept !== AdditionalFeatureAccept.NONE\n );\n }\n\n close() {\n this.isVisibleChange.emit(false);\n }\n\n @nativeAsync\n async refuse() {\n try {\n this.refuseLoading = true;\n await this.additionalFeatureService.refuseFeature(this.code);\n await this.authService.refreshToken().toPromise();\n this.userChange.emit(this.user);\n this.close();\n if (this.isAnswered) {\n this.notification.notify('error', 'Termo revogado', '');\n } else {\n this.notification.notify(\n 'error',\n 'Termo rejeitado',\n 'Para alterar sua resposta acesse \"Meus Dados\"'\n );\n }\n } catch (err) {\n this.notification.notify('error', 'Erro', 'Ocorreu um erro, tente novamente');\n }\n this.refuseLoading = false;\n }\n\n @nativeAsync\n async accept() {\n try {\n this.acceptLoading = true;\n await this.additionalFeatureService.acceptFeature(this.code);\n await this.authService.refreshToken().toPromise();\n this.userChange.emit(this.user);\n this.close();\n if (this.isAnswered) {\n this.notification.notify('success', 'Termo aceito', '');\n } else {\n this.notification.notify(\n 'success',\n 'Termo aceito com sucesso',\n 'Para alterar sua resposta acesse \"Meus Dados\"'\n );\n }\n } catch (err) {\n this.notification.notify('error', 'Erro', 'Ocorreu um erro, tente novamente');\n }\n this.acceptLoading = false;\n }\n}\n","export default \"::ng-deep .modal-cip .ant-modal-header {\\n background-color: var(--bg-modal-header);\\n}\\n::ng-deep .modal-cip .ant-modal-header .ant-modal-title {\\n color: white;\\n font-family: \\\"probold\\\";\\n font-size: 20px;\\n}\\n::ng-deep .modal-cip .ant-modal-body {\\n max-height: var(--modal-height);\\n overflow: auto;\\n}\\n::ng-deep .modal-cip .ant-modal-body .title {\\n font-family: \\\"probold\\\";\\n text-align: center;\\n color: rgba(0, 0, 0, 0.65);\\n}\\n::ng-deep .modal-cip .ant-modal-body .subtitle {\\n font-family: \\\"probold\\\";\\n text-align: center;\\n color: rgba(0, 0, 0, 0.65);\\n}\\n::ng-deep .modal-cip .ant-modal-body .bold {\\n font-family: \\\"probold\\\";\\n}\\n::ng-deep .modal-cip .ant-modal-body p {\\n font-family: \\\"proregular\\\";\\n line-height: 1.1;\\n text-align: justify;\\n}\\n::ng-deep .modal-cip .ant-modal-body ol {\\n counter-reset: list;\\n margin: 0;\\n}\\n::ng-deep .modal-cip .ant-modal-body ol > li {\\n list-style: none;\\n position: relative;\\n}\\n::ng-deep .modal-cip .ant-modal-body ol > li:before {\\n counter-increment: list;\\n content: counter(list, lower-alpha) \\\") \\\";\\n position: absolute;\\n left: -1.4em;\\n}\\n::ng-deep .modal-cip .ant-modal-body li:last-child {\\n margin-bottom: 10px;\\n}\\n::ng-deep .modal-cip .ant-modal-body table,\\n::ng-deep .modal-cip .ant-modal-body th,\\n::ng-deep .modal-cip .ant-modal-body td {\\n border: 1px solid black;\\n border-collapse: collapse;\\n margin-bottom: 15px;\\n}\\n::ng-deep .modal-cip .ant-modal-body th {\\n text-align: center;\\n}\\n::ng-deep .modal-cip .ant-modal-body td {\\n padding-left: 5px;\\n}\\n::ng-deep .modal-cip .ant-modal-footer {\\n background-color: var(--bg-modal-header);\\n}\\n::ng-deep .modal-cip .ant-btn-default:hover {\\n color: var(--bg-color-primary);\\n border-color: var(--bg-color-primary);\\n}\\n::ng-deep .modal-cip .ant-btn-default:focus {\\n color: rgba(0, 0, 0, 0.65);\\n border-color: #d9d9d9;\\n}\\n::ng-deep .modal-cip .ant-btn-primary {\\n color: white;\\n background-color: var(--bg-color-primary);\\n border-color: var(--bg-color-primary);\\n}\\n::ng-deep .modal-cip .ant-btn-primary:hover {\\n background-color: var(--bg-color-primary);\\n border-color: var(--bg-color-primary);\\n}\";","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { HealthProfessionalService } from '@app/modules/health-professional/services/health-professional.service';\nimport { nativeAsync } from '@app/shared/decorators/nativeAsync';\nimport { HealthProfessional } from '@app/shared/models';\nimport { AppToastService } from '@app/shared/services/app-toast.service';\n\n@Component({\n selector: 'app-modal-rqe-warning',\n templateUrl: './modal-rqe-warning.component.html',\n styleUrls: ['./modal-rqe-warning.component.scss']\n})\nexport class ModalRqeWarningComponent {\n @Input() isVisible = false;\n @Input() healthProfessional: HealthProfessional;\n @Output() isVisibleChange = new EventEmitter<boolean>();\n @Input() healthProfessionalChange = new EventEmitter<HealthProfessional>();\n\n refuseLoading = false;\n\n constructor(\n private router: Router,\n private healthProfessionalService: HealthProfessionalService,\n private notification: AppToastService\n ) {}\n\n submit(value: boolean) {\n if (!value) {\n this.refuseRqe();\n } else {\n this.router.navigate(['/profile'], { state: { showModalPersonalData: true } });\n this.close();\n }\n }\n\n @nativeAsync\n private async refuseRqe() {\n try {\n this.refuseLoading = true;\n this.healthProfessional.specialties.forEach(s => {\n if (s.notExists === undefined) {\n s.notExists = true;\n }\n });\n\n const saved = await this.healthProfessionalService\n .update(this.healthProfessional.userId, this.healthProfessional)\n .toPromise();\n\n this.close();\n this.healthProfessionalChange.emit(saved);\n this.notification.notify('success', 'Sucesso', 'Registro atualizado');\n } catch (error) {\n console.error(error);\n }\n this.refuseLoading = false;\n }\n\n private close() {\n this.isVisibleChange.emit(false);\n }\n}\n","export default \"<nz-modal\\n theme\\n class=\\\"modal-rqe\\\"\\n [(nzVisible)]=\\\"isVisible\\\"\\n [nzContent]=\\\"modalContent\\\"\\n [nzFooter]=\\\"modalFooter\\\"\\n [nzStyle]=\\\"{ top: '20px' }\\\"\\n nzWidth=\\\"600\\\"\\n nzKeyboard=\\\"false\\\"\\n nzMaskClosable=\\\"false\\\"\\n nzClosable=\\\"false\\\"\\n>\\n <ng-template #modalContent>\\n <h2 class=\\\"title\\\">\\n <img src=\\\"assets/img/news.svg\\\" alt=\\\"News\\\" class=\\\"news-logo\\\" />\\n Doutor<span *ngIf=\\\"healthProfessional.sex === 'F'\\\">a</span>, precisamos da sua atenção!\\n </h2>\\n <p>\\n Para atender as exigências do Art 2º da Resolução nº 2299/2021 do CFM, em vigor desde o dia\\n 25/12/21, solicitamos que preencha os dados do seu RQE - Registro de Qualificação de Especialidsta\\n no campo <i>\\\"especialidades\\\"</i> do seu cadastro. Caso não tenha uma especialidade registrada no\\n CFM, favor marcar a opção <span class=\\\"bold\\\">\\\"Não possuo RQE\\\"</span>. Neste caso, não poderemos\\n exibir a informação no cabeçalho dos documentos gerados dentro da plataforma.\\n </p>\\n <p style=\\\"font-size: 13px\\\">\\n Para conhecer a Resolução nº 2299-21 do CFM,\\n <a href=\\\"https://sistemas.cfm.org.br/normas/visualizar/resolucoes/BR/2021/2299\\\" target=\\\"_blank\\\"\\n >clique aqui</a\\n >.\\n </p>\\n </ng-template>\\n\\n <ng-template #modalFooter>\\n <button nz-button nzType=\\\"default\\\" (click)=\\\"submit(false)\\\" [nzLoading]=\\\"refuseLoading\\\">\\n Não possuo RQE\\n </button>\\n <button nz-button nzType=\\\"primary\\\" (click)=\\\"submit(true)\\\">\\n Preencher RQE\\n </button>\\n </ng-template>\\n</nz-modal>\\n\";","export default \"::ng-deep .modal-rqe .title {\\n font-family: \\\"probold\\\";\\n text-align: center;\\n color: var(--color-title);\\n font-size: 30px;\\n}\\n::ng-deep .modal-rqe .news-logo {\\n width: 65px;\\n}\\n::ng-deep .modal-rqe .bold {\\n font-family: \\\"probold\\\";\\n}\\n::ng-deep .modal-rqe p {\\n font-family: \\\"proregular\\\";\\n line-height: 1.3;\\n text-align: justify;\\n}\\n::ng-deep .modal-rqe .ant-modal-footer {\\n background-color: var(--bg-modal-header);\\n}\\n::ng-deep .modal-rqe .ant-btn-default:hover {\\n color: var(--bg-color-primary);\\n border-color: var(--bg-color-primary);\\n}\\n::ng-deep .modal-rqe .ant-btn-default:focus {\\n color: rgba(0, 0, 0, 0.65);\\n border-color: #d9d9d9;\\n}\\n::ng-deep .modal-rqe .ant-btn-primary {\\n color: white;\\n background-color: var(--bg-color-primary);\\n border-color: var(--bg-color-primary);\\n}\\n::ng-deep .modal-rqe .ant-btn-primary:hover {\\n background-color: var(--bg-color-primary);\\n border-color: var(--bg-color-primary);\\n}\";","import { Component, Input, OnInit, Output, EventEmitter } from '@angular/core';\nimport { FormGroup, FormBuilder, Validators } from '@angular/forms';\n\n@Component({\n selector: 'app-file-step',\n templateUrl: './file-step.component.html',\n styleUrls: ['./file-step.component.scss']\n})\nexport class FileStepComponent implements OnInit {\n @Output() formChange = new EventEmitter<any>();\n\n private _form: FormGroup;\n\n constructor(private fb: FormBuilder) {\n this._form = this.fb.group({\n filename: this.fb.control(''),\n documentFile: this.fb.control('', Validators.required)\n });\n }\n\n ngOnInit() {\n this._form.valueChanges.subscribe(value => this.formChange.emit(value));\n }\n\n @Input()\n set form(form: any) {\n if (form) {\n this._form.setValue(form);\n }\n }\n\n get form() {\n return this._form;\n }\n\n get file() {\n return this._form.get('documentFile').value;\n }\n\n get filename() {\n return this._form.get('filename').value;\n }\n\n set filename(value: string) {\n this._form.get('filename').setValue(value);\n }\n\n get invalid() {\n return this._form.invalid;\n }\n\n get errorMessage() {\n return 'Você precisa selecionar uma foto da sua carteira profissional para upload';\n }\n}\n","export default \"<p class=\\\"bold\\\">Contratação do plano de Teleconsulta Receita Digital</p>\\n<p>\\n A partir de agora você está contratando o plano mensal de Teleconsulta da Receita Digital!\\n</p>\\n<p>\\n Você já viu na tela anterior como funciona, mas pode conferir o contrato clicando nesse link abaixo:\\n</p>\\n<a href=\\\"\\\">link</a>\\n<p>\\n São 3 passos simples para contratar, e você ainda tem 15 dias grátis para experimentar.\\n</p>\\n<p>\\n Para começar, precisamos ter certeza de que você é um profissional habilitado para fazer consultas. Por\\n isso, precisamos que você clique no botão abaixo e anexe uma foto da sua carteira profissional.\\n</p>\\n\\n<form nz-form [formGroup]=\\\"form\\\" class=\\\"p-3 mb-2\\\">\\n <nz-form-label nzFor=\\\"documentFile\\\">Upload CRM ou CRO</nz-form-label>\\n <app-input-file\\n accept=\\\"image/*,.pdf\\\"\\n formControlName=\\\"documentFile\\\"\\n name=\\\"documentFile\\\"\\n textButton=\\\"Selecione uma foto\\\"\\n transformTo=\\\"base64\\\"\\n maxSize=\\\"3145728\\\"\\n [file]=\\\"file\\\"\\n [(filename)]=\\\"filename\\\"\\n >\\n </app-input-file>\\n</form>\\n\\n<p>Agora é só clicar no botão ao lado, para ir para a próxima etapa.</p>\\n\";","export default \"\";","export default \"<nz-progress [nzPercent]=\\\"(100.0 / 3) * step\\\" [nzShowInfo]=\\\"false\\\" nzStrokeColor=\\\"#0b6054\\\"></nz-progress>\\n\\n<div class=\\\"register-body\\\">\\n <app-file-step *ngIf=\\\"step === 1\\\" [(form)]=\\\"fileForm\\\"></app-file-step>\\n\\n <app-subaccount-step\\n *ngIf=\\\"step === 2\\\"\\n [(form)]=\\\"subaccountForm\\\"\\n [(profile)]=\\\"profile\\\"\\n ></app-subaccount-step>\\n\\n <app-subscription-step *ngIf=\\\"step === 3\\\" [(form)]=\\\"subscriptionForm\\\"></app-subscription-step>\\n\\n <div class=\\\"steps-btn\\\">\\n <button nz-button class=\\\"btn btn-primary\\\" type=\\\"button\\\" nzType=\\\"primary\\\" (click)=\\\"changeStep(false)\\\">\\n <div>\\n <i class=\\\"fas fa-arrow-left\\\"></i>\\n <span>VOLTAR</span>\\n </div>\\n </button>\\n\\n <button nz-button class=\\\"btn btn-primary\\\" type=\\\"button\\\" nzType=\\\"primary\\\" (click)=\\\"changeStep(true)\\\">\\n <div>\\n <span>{{ step < 3 ? 'PRÓXIMO' : 'CONCLUIR' }}</span>\\n <i class=\\\"fas fa-arrow-right\\\"></i>\\n </div>\\n </button>\\n </div>\\n</div>\\n\";","export default \"::ng-deep .modal-backdrop {\\n z-index: 10;\\n}\\n::ng-deep .modal {\\n z-index: 10;\\n}\\n::ng-deep .modal-body {\\n background-color: white;\\n padding: 0px;\\n}\\n::ng-deep .modal-body .register-body {\\n padding-left: 20px;\\n padding-right: 20px;\\n padding-bottom: 60px;\\n}\\n::ng-deep .modal-header {\\n min-width: 36vw;\\n width: 100%;\\n}\\n::ng-deep .modal-header .btn-cancel {\\n display: flex;\\n justify-content: space-evenly;\\n}\\n::ng-deep .modal-dialog {\\n display: flex;\\n justify-content: center;\\n}\\n.modal-video-conf {\\n overflow: auto;\\n max-height: 48vw;\\n min-width: 36vw;\\n width: 100%;\\n}\\n.modal-video-conf .modal-header {\\n background-color: #4cbca3;\\n font-family: \\\"probold\\\";\\n display: flex;\\n align-items: center;\\n position: sticky;\\n top: 0;\\n z-index: 999;\\n}\\n.modal-video-conf .modal-header .title {\\n display: flex;\\n justify-items: center;\\n align-items: center;\\n}\\n.modal-video-conf .modal-header .title h4 {\\n margin-left: 5px;\\n color: #363636 !important;\\n}\\n@media (max-width: 1025px) {\\n .modal-video-conf .modal-header .title h4 {\\n font-size: 15px;\\n }\\n}\\n.modal-video-conf .modal-header .hire-btn {\\n border: none;\\n height: 35px;\\n width: 120px;\\n border-radius: 3px;\\n}\\np {\\n color: #363636;\\n font-size: 16px;\\n font-family: \\\"proregular\\\";\\n}\\n.steps-btn {\\n margin: 0.5rem !important;\\n float: right;\\n}\\n.steps-btn .btn {\\n color: white;\\n background-color: #4cbca3;\\n border-color: #4cbca3;\\n border-radius: 0px;\\n font-size: 12px;\\n font-weight: bold;\\n margin-left: 10px;\\n min-height: 38px;\\n}\\n.anexar {\\n background-color: #0b6054;\\n color: white;\\n padding: 0.5rem;\\n font-family: \\\"probold\\\";\\n border-radius: 0.3rem;\\n cursor: pointer;\\n margin-top: 1rem;\\n}\\n.mandatory {\\n color: red;\\n}\\n::ng-deep .ant-tabs {\\n min-height: 350px;\\n}\\n::ng-deep .ant-tabs-tabpane {\\n padding: 17px 30px 20px;\\n}\\n::ng-deep .ant-tabs-nav {\\n width: 100%;\\n}\\n::ng-deep .ant-tabs-tab {\\n width: 12.34%;\\n}\\n::ng-deep .ant-tabs-nav .ant-tabs-tab {\\n margin: 0 1px 0 0;\\n min-width: 54px;\\n text-align: center;\\n}\\n::ng-deep .ant-tabs-tab:nth-child(1) {\\n background-color: #00d3b2;\\n}\\n::ng-deep .ant-tabs-tab:nth-child(2) {\\n background-color: #17c6ac;\\n}\\n::ng-deep .ant-tabs-tab:nth-child(3) {\\n background-color: #0b6054;\\n}\\n::ng-deep .ant-tabs-tab:nth-child(4) {\\n background-color: #1b403a;\\n}\\n::ng-deep .ant-tabs-tab:nth-child(5) {\\n background-color: #ebebeb;\\n}\\n::ng-deep .ant-tabs-tab:nth-child(6) {\\n background-color: #4d4d4d;\\n}\\n::ng-deep .ant-tabs-tab:nth-child(7) {\\n background-color: #363636;\\n}\\n::ng-deep .ant-tabs-tab:nth-child(8) {\\n background-color: #1e1e1e;\\n}\\n::ng-deep .ant-tabs-tab-active {\\n transform: translateY(-1px);\\n box-shadow: 0px 15px 15px 10px #000000ad;\\n}\\n::ng-deep .ant-progress {\\n top: -11px;\\n}\\n::ng-deep img {\\n min-width: 22px;\\n height: 20px;\\n}\\n.white {\\n filter: invert(1);\\n}\\n::ng-deep .cdk-overlay-pane {\\n width: 55vw !important;\\n}\";","import { BrazilBanks } from '../models/brazil-banks';\n\nexport const BrazilianBanks: BrazilBanks[] = [\n {\n code: '001',\n name: 'BANCO DO BRASIL',\n document: '00.000.000/0001-91',\n createdAt: '2017-04-19 15:52:42.400',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '341',\n name: 'ITAÚ',\n createdAt: '2017-04-19 15:53:59.107',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '104',\n name: 'CAIXA ECONÔMICA FEDERAL',\n createdAt: '2017-04-19 15:54:41.200',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '033',\n name: 'BANCO SANTANDER S.A.',\n createdAt: '2017-04-19 15:55:59.197',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '070',\n name: 'BRB - BANCO DE BRASÃLIA',\n createdAt: '2017-04-19 15:58:17.387',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '077',\n name: 'BANCO INTER',\n document: '00.416.968/0001-01',\n createdAt: '2017-04-19 15:58:39.887',\n updatedAt: '2020-04-29 11:08:00.000',\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '237',\n name: 'BRADESCO',\n createdAt: '2017-04-19 16:00:31.407',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '745',\n name: 'CITIBANK',\n createdAt: '2017-04-19 16:01:50.353',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '422',\n name: 'BANCO SAFRA',\n createdAt: '2017-04-19 16:04:20.790',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '399',\n name: 'BANCO HSBC',\n createdAt: '2017-04-19 16:05:20.353',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '756',\n name: 'BANCOOB',\n createdAt: '2017-08-01 22:29:11.827',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '212',\n name: 'BANCO ORIGINAL',\n createdAt: '2017-10-11 20:33:06.803',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '002',\n name: 'BANCO CENTRAL DO BRASIL',\n createdAt: '2018-01-29 15:12:24.270',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '003',\n name: 'BANCO DA AMAZONIA S.A',\n createdAt: '2018-01-29 15:12:24.270',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '004',\n name: 'BANCO DO NORDESTE DO BRASIL S.A',\n createdAt: '2018-01-29 15:12:24.270',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '007',\n name: 'BANCO NAC DESENV. ECO. SOCIAL S.A',\n createdAt: '2018-01-29 15:12:24.270',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '008',\n name: 'BANCO MERIDIONAL DO BRASIL',\n createdAt: '2018-01-29 15:12:24.270',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '020',\n name: 'BANCO DO ESTADO DE ALAGOAS S.A',\n createdAt: '2018-01-29 15:12:24.270',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '021',\n name: 'BANCO DO ESTADO DO ESPIRITO SANTO S.A',\n createdAt: '2018-01-29 15:12:24.270',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '022',\n name: 'BANCO DE CREDITO REAL DE MINAS GERAIS SA',\n createdAt: '2018-01-29 15:12:24.273',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '024',\n name: 'BANCO DO ESTADO DE PERNAMBUCO',\n createdAt: '2018-01-29 15:12:24.273',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '025',\n name: 'BANCO ALFA S/A',\n createdAt: '2018-01-29 15:12:24.273',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '026',\n name: 'BANCO DO ESTADO DO ACRE S.A',\n createdAt: '2018-01-29 15:12:24.273',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '027',\n name: 'BANCO DO ESTADO DE SANTA CATARINA S.A',\n createdAt: '2018-01-29 15:12:24.273',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '028',\n name: 'BANCO DO ESTADO DA BAHIA S.A',\n createdAt: '2018-01-29 15:12:24.277',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '029',\n name: 'BANCO DO ESTADO DO RIO DE JANEIRO S.A',\n createdAt: '2018-01-29 15:12:24.277',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '030',\n name: 'BANCO DO ESTADO DA PARAIBA S.A',\n createdAt: '2018-01-29 15:12:24.277',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '031',\n name: 'BANCO DO ESTADO DE GOIAS S.A',\n createdAt: '2018-01-29 15:12:24.277',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '032',\n name: 'BANCO DO ESTADO DO MATO GROSSO S.A.',\n createdAt: '2018-01-29 15:12:24.277',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '034',\n name: 'BANCO DO ESADO DO AMAZONAS S.A',\n createdAt: '2018-01-29 15:12:24.280',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '035',\n name: 'BANCO DO ESTADO DO CEARA S.A',\n createdAt: '2018-01-29 15:12:24.280',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '036',\n name: 'BANCO DO ESTADO DO MARANHAO S.A',\n createdAt: '2018-01-29 15:12:24.280',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '037',\n name: 'BANCO DO ESTADO DO PARA S.A',\n createdAt: '2018-01-29 15:12:24.280',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '038',\n name: 'BANCO DO ESTADO DO PARANA S.A',\n createdAt: '2018-01-29 15:12:24.280',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '039',\n name: 'BANCO DO ESTADO DO PIAUI S.A',\n createdAt: '2018-01-29 15:12:24.280',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '041',\n name: 'BANCO DO ESTADO DO RIO GRANDE DO SUL S.A',\n createdAt: '2018-01-29 15:12:24.283',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '047',\n name: 'BANCO DO ESTADO DE SERGIPE S.A',\n createdAt: '2018-01-29 15:12:24.283',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '048',\n name: 'BANCO DO ESTADO DE MINAS GERAIS S.A',\n createdAt: '2018-01-29 15:12:24.283',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '059',\n name: 'BANCO DO ESTADO DE RONDONIA S.A',\n createdAt: '2018-01-29 15:12:24.283',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '106',\n name: 'BANCO ITABANCO S.A.',\n createdAt: '2018-01-29 15:12:24.287',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '107',\n name: 'BANCO BBM S.A',\n createdAt: '2018-01-29 15:12:24.287',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '109',\n name: 'BANCO CREDIBANCO S.A',\n createdAt: '2018-01-29 15:12:24.290',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '116',\n name: 'BANCO B.N.L DO BRASIL S.A',\n createdAt: '2018-01-29 15:12:24.290',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '148',\n name: 'MULTI BANCO S.A',\n createdAt: '2018-01-29 15:12:24.290',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '151',\n name: 'CAIXA ECONOMICA DO ESTADO DE SAO PAULO',\n createdAt: '2018-01-29 15:12:24.290',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '153',\n name: 'CAIXA ECONOMICA DO ESTADO DO R.G.SUL',\n createdAt: '2018-01-29 15:12:24.290',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '165',\n name: 'BANCO NORCHEM S.A',\n createdAt: '2018-01-29 15:12:24.290',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '166',\n name: 'BANCO INTER-ATLANTICO S.A',\n createdAt: '2018-01-29 15:12:24.293',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '168',\n name: 'BANCO C.C.F. BRASIL S.A',\n createdAt: '2018-01-29 15:12:24.293',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '175',\n name: 'CONTINENTAL BANCO S.A',\n createdAt: '2018-01-29 15:12:24.293',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '184',\n name: 'BBA - CREDITANSTALT S.A',\n createdAt: '2018-01-29 15:12:24.293',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '199',\n name: 'BANCO FINANCIAL PORTUGUES',\n createdAt: '2018-01-29 15:12:24.293',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '200',\n name: 'BANCO FRICRISA AXELRUD S.A',\n createdAt: '2018-01-29 15:12:24.297',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '201',\n name: 'BANCO AUGUSTA INDUSTRIA E COMERCIAL S.A',\n createdAt: '2018-01-29 15:12:24.297',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '204',\n name: 'BANCO S.R.L S.A',\n createdAt: '2018-01-29 15:12:24.297',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '205',\n name: 'BANCO SUL AMERICA S.A',\n createdAt: '2018-01-29 15:12:24.297',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '206',\n name: 'BANCO MARTINELLI S.A',\n createdAt: '2018-01-29 15:12:24.297',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '208',\n name: 'BANCO PACTUAL S.A',\n createdAt: '2018-01-29 15:12:24.300',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '210',\n name: 'DEUTSCH SUDAMERIKANICHE BANK AG',\n createdAt: '2018-01-29 15:12:24.300',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '211',\n name: 'BANCO SISTEMA S.A',\n createdAt: '2018-01-29 15:12:24.300',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '213',\n name: 'BANCO ARBI S.A',\n createdAt: '2018-01-29 15:12:24.300',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '214',\n name: 'BANCO DIBENS S.A',\n createdAt: '2018-01-29 15:12:24.303',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '215',\n name: 'BANCO AMERICA DO SUL S.A',\n createdAt: '2018-01-29 15:12:24.303',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '216',\n name: 'BANCO REGIONAL MALCON S.A',\n createdAt: '2018-01-29 15:12:24.303',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '217',\n name: 'BANCO AGROINVEST S.A',\n createdAt: '2018-01-29 15:12:24.303',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '218',\n name: 'BS2',\n document: '71.027.866/0001-34',\n createdAt: '2018-01-29 15:12:24.303',\n updatedAt: '2019-05-21 08:14:51.000',\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '219',\n name: 'BANCO DE CREDITO DE SAO PAULO S.A',\n createdAt: '2018-01-29 15:12:24.307',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '220',\n name: 'BANCO CREFISUL',\n createdAt: '2018-01-29 15:12:24.307',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '221',\n name: 'BANCO GRAPHUS S.A',\n createdAt: '2018-01-29 15:12:24.307',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '222',\n name: 'BANCO AGF BRASIL S. A.',\n createdAt: '2018-01-29 15:12:24.307',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '223',\n name: 'BANCO INTERUNION S.A',\n createdAt: '2018-01-29 15:12:24.307',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '224',\n name: 'BANCO FIBRA S.A',\n createdAt: '2018-01-29 15:12:24.307',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '225',\n name: 'BANCO BRASCAN S.A',\n createdAt: '2018-01-29 15:12:24.310',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '228',\n name: 'BANCO ICATU S.A',\n createdAt: '2018-01-29 15:12:24.310',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '229',\n name: 'BANCO CRUZEIRO S.A',\n createdAt: '2018-01-29 15:12:24.310',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '230',\n name: 'BANCO BANDEIRANTES S.A',\n createdAt: '2018-01-29 15:12:24.310',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '231',\n name: 'BANCO BOAVISTA S.A',\n createdAt: '2018-01-29 15:12:24.310',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '232',\n name: 'BANCO INTERPART S.A',\n createdAt: '2018-01-29 15:12:24.310',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '233',\n name: 'BANCO MAPPIN S.A',\n createdAt: '2018-01-29 15:12:24.313',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '234',\n name: 'BANCO LAVRA S.A.',\n createdAt: '2018-01-29 15:12:24.313',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '235',\n name: 'BANCO LIBERAL S.A',\n createdAt: '2018-01-29 15:12:24.313',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '236',\n name: 'BANCO CAMBIAL S.A',\n createdAt: '2018-01-29 15:12:24.313',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '239',\n name: 'BANCO BANCRED S.A',\n createdAt: '2018-01-29 15:12:24.317',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '240',\n name: 'BANCO DE CREDITO REAL DE MINAS GERAIS S.',\n createdAt: '2018-01-29 15:12:24.317',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '241',\n name: 'BANCO CLASSICO S.A',\n createdAt: '2018-01-29 15:12:24.317',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '242',\n name: 'BANCO EUROINVEST S.A',\n createdAt: '2018-01-29 15:12:24.317',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '243',\n name: 'BANCO MÃXIMA S.A',\n document: '33.923.798/0001-00',\n createdAt: '2018-01-29 15:12:24.317',\n updatedAt: '2020-03-20 17:00:00.000',\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '244',\n name: 'BANCO CIDADE S.A',\n createdAt: '2018-01-29 15:12:24.320',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '245',\n name: 'BANCO EMPRESARIAL S.A',\n createdAt: '2018-01-29 15:12:24.320',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '246',\n name: 'BANCO ABC ROMA S.A',\n createdAt: '2018-01-29 15:12:24.320',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '247',\n name: 'BANCO OMEGA S.A',\n createdAt: '2018-01-29 15:12:24.320',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '249',\n name: 'BANCO INVESTCRED S.A',\n createdAt: '2018-01-29 15:12:24.320',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '250',\n name: 'BANCO SCHAHIN CURY S.A',\n createdAt: '2018-01-29 15:12:24.320',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '251',\n name: 'BANCO SAO JORGE S.A.',\n createdAt: '2018-01-29 15:12:24.323',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '252',\n name: 'BANCO FININVEST S.A',\n createdAt: '2018-01-29 15:12:24.323',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '254',\n name: 'BANCO PARANA BANCO S.A',\n createdAt: '2018-01-29 15:12:24.323',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '255',\n name: 'MILBANCO S.A.',\n createdAt: '2018-01-29 15:12:24.323',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '256',\n name: 'BANCO GULVINVEST S.A',\n createdAt: '2018-01-29 15:12:24.323',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '258',\n name: 'BANCO INDUSCRED S.A',\n createdAt: '2018-01-29 15:12:24.327',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '261',\n name: 'BANCO VARIG S.A',\n createdAt: '2018-01-29 15:12:24.327',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '262',\n name: 'BANCO BOREAL S.A',\n createdAt: '2018-01-29 15:12:24.327',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '263',\n name: 'BANCO CACIQUE',\n createdAt: '2018-01-29 15:12:24.327',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '264',\n name: 'BANCO PERFORMANCE S.A',\n createdAt: '2018-01-29 15:12:24.330',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '265',\n name: 'BANCO FATOR S.A',\n createdAt: '2018-01-29 15:12:24.330',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '266',\n name: 'BANCO CEDULA S.A',\n createdAt: '2018-01-29 15:12:24.330',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '267',\n name: 'BANCO BBM-COM.C.IMOB.CFI S.A.',\n createdAt: '2018-01-29 15:12:24.330',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '275',\n name: 'BANCO REAL S.A',\n createdAt: '2018-01-29 15:12:24.330',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '277',\n name: 'BANCO PLANIBANC S.A',\n createdAt: '2018-01-29 15:12:24.330',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '282',\n name: 'BANCO BRASILEIRO COMERCIAL',\n createdAt: '2018-01-29 15:12:24.330',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '291',\n name: 'BANCO DE CREDITO NACIONAL S.A',\n createdAt: '2018-01-29 15:12:24.333',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '294',\n name: 'BCR - BANCO DE CREDITO REAL S.A',\n createdAt: '2018-01-29 15:12:24.333',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '295',\n name: 'BANCO CREDIPLAN S.A',\n createdAt: '2018-01-29 15:12:24.333',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '300',\n name: 'BANCO DE LA NACION ARGENTINA S.A',\n createdAt: '2018-01-29 15:12:24.333',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '302',\n name: 'BANCO DO PROGRESSO S.A',\n createdAt: '2018-01-29 15:12:24.337',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '303',\n name: 'BANCO HNF S.A.',\n createdAt: '2018-01-29 15:12:24.337',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '304',\n name: 'BANCO PONTUAL S.A',\n createdAt: '2018-01-29 15:12:24.337',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '308',\n name: 'BANCO COMERCIAL BANCESA S.A.',\n createdAt: '2018-01-29 15:12:24.337',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '318',\n name: 'BANCO B.M.G. S.A',\n createdAt: '2018-01-29 15:12:24.337',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '320',\n name: 'BANCO INDUSTRIAL E COMERCIAL',\n createdAt: '2018-01-29 15:12:24.340',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '346',\n name: 'BANCO FRANCES E BRASILEIRO S.A',\n createdAt: '2018-01-29 15:12:24.340',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '347',\n name: 'BANCO SUDAMERIS BRASIL S.A',\n createdAt: '2018-01-29 15:12:24.340',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '351',\n name: 'BANCO BOZANO SIMONSEN S.A',\n createdAt: '2018-01-29 15:12:24.340',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '353',\n name: 'BANCO GERAL DO COMERCIO S.A',\n createdAt: '2018-01-29 15:12:24.340',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '356',\n name: 'ABN AMRO S.A',\n createdAt: '2018-01-29 15:12:24.340',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '366',\n name: 'BANCO SOGERAL S.A',\n createdAt: '2018-01-29 15:12:24.343',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '369',\n name: 'PONTUAL',\n createdAt: '2018-01-29 15:12:24.343',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '370',\n name: 'BEAL - BANCO EUROPEU PARA AMERICA LATINA',\n createdAt: '2018-01-29 15:12:24.343',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '372',\n name: 'BANCO ITAMARATI S.A',\n createdAt: '2018-01-29 15:12:24.347',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '375',\n name: 'BANCO FENICIA S.A',\n createdAt: '2018-01-29 15:12:24.347',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '376',\n name: 'CHASE MANHATTAN BANK S.A',\n createdAt: '2018-01-29 15:12:24.347',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '388',\n name: 'BANCO MERCANTIL DE DESCONTOS S/A',\n createdAt: '2018-01-29 15:12:24.347',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '389',\n name: 'BANCO MERCANTIL DO BRASIL S.A',\n createdAt: '2018-01-29 15:12:24.347',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '392',\n name: 'BANCO MERCANTIL DE SAO PAULO S.A',\n createdAt: '2018-01-29 15:12:24.350',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '394',\n name: 'BANCO B.M.C. S.A',\n createdAt: '2018-01-29 15:12:24.350',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '409',\n name: 'UNIBANCO - UNIAO DOS BANCOS BRASILEIROS',\n createdAt: '2018-01-29 15:12:24.350',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '412',\n name: 'BANCO NACIONAL DA BAHIA S.A',\n createdAt: '2018-01-29 15:12:24.350',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '415',\n name: 'BANCO NACIONAL S.A',\n createdAt: '2018-01-29 15:12:24.350',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '420',\n name: 'BANCO NACIONAL DO NORTE S.A',\n createdAt: '2018-01-29 15:12:24.350',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '424',\n name: 'BANCO NOROESTE S.A',\n createdAt: '2018-01-29 15:12:24.353',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '434',\n name: 'BANCO FORTALEZA S.A',\n createdAt: '2018-01-29 15:12:24.353',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '453',\n name: 'BANCO RURAL S.A',\n createdAt: '2018-01-29 15:12:24.353',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '456',\n name: 'BANCO TOKIO S.A',\n createdAt: '2018-01-29 15:12:24.353',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '464',\n name: 'BANCO SUMITOMO BRASILEIRO S.A',\n createdAt: '2018-01-29 15:12:24.357',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '466',\n name: 'BANCO MITSUBISHI BRASILEIRO S.A',\n createdAt: '2018-01-29 15:12:24.357',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '472',\n name: 'LLOYDS BANK PLC',\n createdAt: '2018-01-29 15:12:24.357',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '473',\n name: 'BANCO FINANCIAL PORTUGUES S.A',\n createdAt: '2018-01-29 15:12:24.357',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '477',\n name: 'CITIBANK N.A',\n createdAt: '2018-01-29 15:12:24.357',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '479',\n name: 'BANCO DE BOSTON S.A',\n createdAt: '2018-01-29 15:12:24.360',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '480',\n name: 'BANCO PORTUGUES DO ATLANTICO-BRASIL S.A',\n createdAt: '2018-01-29 15:12:24.360',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '483',\n name: 'BANCO AGRIMISA S.A.',\n createdAt: '2018-01-29 15:12:24.360',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '487',\n name: 'DEUTSCHE BANK S.A - BANCO ALEMAO',\n createdAt: '2018-01-29 15:12:24.360',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '488',\n name: 'BANCO J. P. MORGAN S.A',\n createdAt: '2018-01-29 15:12:24.360',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '489',\n name: 'BANESTO BANCO URUGAUAY S.A',\n createdAt: '2018-01-29 15:12:24.360',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '492',\n name: 'INTERNATIONALE NEDERLANDEN BANK N.V.',\n createdAt: '2018-01-29 15:12:24.363',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '493',\n name: 'BANCO UNION S.A.C.A',\n createdAt: '2018-01-29 15:12:24.363',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '494',\n name: 'BANCO LA REP. ORIENTAL DEL URUGUAY',\n createdAt: '2018-01-29 15:12:24.363',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '495',\n name: 'BANCO LA PROVINCIA DE BUENOS AIRES',\n createdAt: '2018-01-29 15:12:24.363',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '496',\n name: 'BANCO EXTERIOR DE ESPANA S.A',\n createdAt: '2018-01-29 15:12:24.363',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '498',\n name: 'CENTRO HISPANO BANCO',\n createdAt: '2018-01-29 15:12:24.367',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '499',\n name: 'BANCO IOCHPE S.A',\n createdAt: '2018-01-29 15:12:24.367',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '501',\n name: 'BANCO BRASILEIRO IRAQUIANO S.A.',\n createdAt: '2018-01-29 15:12:24.367',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '502',\n name: 'BANCO SANTANDER DE NEGOCIOS S.A',\n createdAt: '2018-01-29 15:12:24.367',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '504',\n name: 'BANCO MULTIPLIC S.A',\n createdAt: '2018-01-29 15:12:24.367',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '505',\n name: 'BANCO GARANTIA S.A',\n createdAt: '2018-01-29 15:12:24.370',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '600',\n name: 'BANCO LUSO BRASILEIRO S.A',\n createdAt: '2018-01-29 15:12:24.370',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '601',\n name: 'BFC BANCO S.A.',\n createdAt: '2018-01-29 15:12:24.370',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '602',\n name: 'BANCO PATENTE S.A',\n createdAt: '2018-01-29 15:12:24.370',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '604',\n name: 'BANCO INDUSTRIAL DO BRASIL S.A',\n createdAt: '2018-01-29 15:12:24.370',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '607',\n name: 'BANCO SANTOS NEVES S.A',\n createdAt: '2018-01-29 15:12:24.373',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '608',\n name: 'BANCO OPEN S.A',\n createdAt: '2018-01-29 15:12:24.373',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '610',\n name: 'BANCO V.R. S.A',\n createdAt: '2018-01-29 15:12:24.373',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '611',\n name: 'BANCO PAULISTA S.A',\n createdAt: '2018-01-29 15:12:24.373',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '612',\n name: 'BANCO GUANABARA S.A',\n createdAt: '2018-01-29 15:12:24.377',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '613',\n name: 'BANCO PECUNIA S.A',\n createdAt: '2018-01-29 15:12:24.377',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '616',\n name: 'BANCO INTERPACIFICO S.A',\n createdAt: '2018-01-29 15:12:24.377',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '617',\n name: 'BANCO INVESTOR S.A.',\n createdAt: '2018-01-29 15:12:24.377',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '618',\n name: 'BANCO TENDENCIA S.A',\n createdAt: '2018-01-29 15:12:24.377',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '621',\n name: 'BANCO APLICAP S.A.',\n createdAt: '2018-01-29 15:12:24.380',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '622',\n name: 'BANCO DRACMA S.A',\n createdAt: '2018-01-29 15:12:24.380',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '623',\n name: 'BANCO PAnameRICANO S.A',\n createdAt: '2018-01-29 15:12:24.380',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '624',\n name: 'BANCO GENERAL MOTORS S.A',\n createdAt: '2018-01-29 15:12:24.380',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '625',\n name: 'BANCO ARAUCARIA S.A',\n createdAt: '2018-01-29 15:12:24.380',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '626',\n name: 'BANCO FICSA S.A',\n createdAt: '2018-01-29 15:12:24.380',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '627',\n name: 'BANCO DESTAK S.A',\n createdAt: '2018-01-29 15:12:24.383',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '628',\n name: 'BANCO CRITERIUM S.A',\n createdAt: '2018-01-29 15:12:24.383',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '629',\n name: 'BANCORP BANCO COML. E. DE INVESTMENTO',\n createdAt: '2018-01-29 15:12:24.383',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '630',\n name: 'BANCO INTERCAP S.A',\n createdAt: '2018-01-29 15:12:24.383',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '633',\n name: 'BANCO REDIMENTO S.A',\n createdAt: '2018-01-29 15:12:24.383',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '634',\n name: 'BANCO TRIANGULO S.A',\n createdAt: '2018-01-29 15:12:24.387',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '635',\n name: 'BANCO DO ESTADO DO AMAPA S.A',\n createdAt: '2018-01-29 15:12:24.387',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '637',\n name: 'BANCO SOFISA S.A',\n createdAt: '2018-01-29 15:12:24.387',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '638',\n name: 'BANCO PROSPER S.A',\n createdAt: '2018-01-29 15:12:24.387',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '639',\n name: 'BIG S.A. - BANCO IRMAOS GUIMARAES',\n createdAt: '2018-01-29 15:12:24.387',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '640',\n name: 'BANCO DE CREDITO METROPOLITANO S.A',\n createdAt: '2018-01-29 15:12:24.390',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '641',\n name: 'BANCO EXCEL ECONOMICO S/A',\n createdAt: '2018-01-29 15:12:24.390',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '643',\n name: 'BANCO SEGMENTO S.A',\n createdAt: '2018-01-29 15:12:24.390',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '645',\n name: 'BANCO DO ESTADO DE RORAIMA S.A',\n createdAt: '2018-01-29 15:12:24.390',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '647',\n name: 'BANCO MARKA S.A',\n createdAt: '2018-01-29 15:12:24.390',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '648',\n name: 'BANCO ATLANTIS S.A',\n createdAt: '2018-01-29 15:12:24.390',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '649',\n name: 'BANCO DIMENSAO S.A',\n createdAt: '2018-01-29 15:12:24.390',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '650',\n name: 'BANCO PEBB S.A',\n createdAt: '2018-01-29 15:12:24.393',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '652',\n name: 'BANCO FRANCES E BRASILEIRO SA',\n createdAt: '2018-01-29 15:12:24.393',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '653',\n name: 'BANCO INDUSVAL S.A',\n createdAt: '2018-01-29 15:12:24.393',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '654',\n name: 'BANCO A. J. RENNER S.A',\n createdAt: '2018-01-29 15:12:24.393',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '655',\n name: 'BANCO VOTORANTIM S.A.',\n createdAt: '2018-01-29 15:12:24.393',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '656',\n name: 'BANCO MATRIX S.A',\n createdAt: '2018-01-29 15:12:24.397',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '657',\n name: 'BANCO TECNICORP S.A',\n createdAt: '2018-01-29 15:12:24.397',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '658',\n name: 'BANCO PORTO REAL S.A',\n createdAt: '2018-01-29 15:12:24.397',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '702',\n name: 'BANCO SANTOS S.A',\n createdAt: '2018-01-29 15:12:24.397',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '705',\n name: 'BANCO INVESTCORP S.A.',\n createdAt: '2018-01-29 15:12:24.400',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '707',\n name: 'BANCO DAYCOVAL S.A',\n createdAt: '2018-01-29 15:12:24.400',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '711',\n name: 'BANCO VETOR S.A.',\n createdAt: '2018-01-29 15:12:24.400',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '713',\n name: 'BANCO CINDAM S.A',\n createdAt: '2018-01-29 15:12:24.400',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '715',\n name: 'BANCO VEGA S.A',\n createdAt: '2018-01-29 15:12:24.400',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '718',\n name: 'BANCO OPERADOR S.A',\n createdAt: '2018-01-29 15:12:24.400',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '719',\n name: 'BANCO PRIMUS S.A',\n createdAt: '2018-01-29 15:12:24.400',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '720',\n name: 'BANCO MAXINVEST S.A',\n createdAt: '2018-01-29 15:12:24.403',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '721',\n name: 'BANCO CREDIBEL S.A',\n createdAt: '2018-01-29 15:12:24.403',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '722',\n name: 'BANCO INTERIOR DE SAO PAULO S.A',\n createdAt: '2018-01-29 15:12:24.403',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '724',\n name: 'BANCO PORTO SEGURO S.A',\n createdAt: '2018-01-29 15:12:24.403',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '725',\n name: 'BANCO FINABANCO S.A',\n createdAt: '2018-01-29 15:12:24.407',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '726',\n name: 'BANCO UNIVERSAL S.A',\n createdAt: '2018-01-29 15:12:24.407',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '728',\n name: 'BANCO FITAL S.A',\n createdAt: '2018-01-29 15:12:24.407',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '729',\n name: 'BANCO FONTE S.A',\n createdAt: '2018-01-29 15:12:24.407',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '730',\n name: 'BANCO COMERCIAL PARAGUAYO S.A',\n createdAt: '2018-01-29 15:12:24.407',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '731',\n name: 'BANCO GNPP S.A.',\n createdAt: '2018-01-29 15:12:24.410',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '732',\n name: 'BANCO PREMIER S.A.',\n createdAt: '2018-01-29 15:12:24.410',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '733',\n name: 'BANCO NACOES S.A.',\n createdAt: '2018-01-29 15:12:24.410',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '734',\n name: 'BANCO GERDAU S.A',\n createdAt: '2018-01-29 15:12:24.410',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '735',\n name: 'BANCO NEON',\n createdAt: '2018-01-29 15:12:24.410',\n updatedAt: '2019-11-12 19:15:00.000',\n deletedAt: '2019-11-12 19:15:00.000',\n isDeleted: true\n },\n {\n code: '736',\n name: 'BANCO UNITED S.A',\n createdAt: '2018-01-29 15:12:24.410',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '737',\n name: 'THECA',\n createdAt: '2018-01-29 15:12:24.413',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '738',\n name: 'MARADA',\n createdAt: '2018-01-29 15:12:24.413',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '739',\n name: 'BGN',\n createdAt: '2018-01-29 15:12:24.413',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '740',\n name: 'BCN BARCLAYS',\n createdAt: '2018-01-29 15:12:24.413',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '741',\n name: 'BRP',\n createdAt: '2018-01-29 15:12:24.413',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '742',\n name: 'EQUATORIAL',\n createdAt: '2018-01-29 15:12:24.417',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '743',\n name: 'BANCO EMBLEMA S.A',\n createdAt: '2018-01-29 15:12:24.417',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '744',\n name: 'THE FIRST NATIONAL BANK OF BOSTON',\n createdAt: '2018-01-29 15:12:24.417',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '746',\n name: 'MODAL S.A.',\n createdAt: '2018-01-29 15:12:24.417',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '747',\n name: 'RABOBANK DO BRASIL',\n document: '01.023.570/0001-60',\n createdAt: '2018-01-29 15:12:24.420',\n updatedAt: '2020-04-23 22:00:00.000',\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '748',\n name: 'SICREDI',\n createdAt: '2018-01-29 15:12:24.420',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '749',\n name: 'BRMSANTIL SA',\n createdAt: '2018-01-29 15:12:24.420',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '750',\n name: 'BANCO REPUBLIC NATIONAL OF NEW YORK (BRA',\n createdAt: '2018-01-29 15:12:24.420',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '751',\n name: 'DRESDNER BANK LATEInameRIKA-BRASIL S/A',\n createdAt: '2018-01-29 15:12:24.420',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '752',\n name: 'BANCO BANQUE NATIONALE DE PARIS BRASIL S',\n createdAt: '2018-01-29 15:12:24.420',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '753',\n name: 'BANCO COMERCIAL URUGUAI S.A.',\n createdAt: '2018-01-29 15:12:24.423',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '755',\n name: 'BANCO MERRILL LYNCH S.A',\n createdAt: '2018-01-29 15:12:24.423',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '757',\n name: 'BANCO KEB DO BRASIL S.A.',\n createdAt: '2018-01-29 15:12:24.423',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '260',\n name: 'Nu Pagamentos S.A',\n document: '18.236.120/0001-58',\n createdAt: '2018-01-29 16:47:35.153',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '102',\n name: 'XP INVESTIMENTOS',\n createdAt: '2018-01-29 16:47:35.210',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '336',\n name: 'BANCO C6 S.A.',\n document: '31.872.495/0001-72',\n createdAt: '2019-08-02 13:11:00.000',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '290',\n name: 'PagSeguro Internet S.A.',\n document: '08.561.701/0001-01',\n createdAt: '2019-08-21 12:48:00.000',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '323',\n name: 'MercadoPago.com Representações Ltda.',\n document: '10.573.521/0001-91',\n createdAt: '2019-09-13 15:23:00.000',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '332',\n name: 'Acesso Soluções de Pagamento S.A.',\n document: '13.140.088/0001-99',\n createdAt: '2019-12-26 15:00:00.000',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '325',\n name: 'Órama DTVM S.A.',\n document: '13.293.225/0001-25',\n createdAt: '2020-01-15 19:27:00.000',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '085',\n name: 'COOPERATIVA CENTRAL DE CREDITO - AILOS',\n document: '05.463.212/0001-29',\n createdAt: '2020-03-20 18:04:00.000',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '125',\n name: 'PLURAL S.A. BANCO MULTIPLO',\n document: '45.246.410/0001-55',\n createdAt: '2020-03-20 18:13:00.000',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '197',\n name: 'STONE PAGAMENTOS S.A.',\n document: '16.501.555/0002-38',\n createdAt: '2020-04-24 12:58:00.000',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '380',\n name: 'PICPAY SERVIÇOS S.A.',\n document: '22.896.431/0001-10',\n createdAt: '2021-01-06 08:36:00.000',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n },\n {\n code: '335',\n name: 'BANCO DIGIO S.A.',\n document: '27.098.060/0001-45',\n createdAt: '2021-01-20 08:26:00.000',\n updatedAt: null,\n deletedAt: null,\n isDeleted: false\n }\n];\n","import { Component, ElementRef, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { AuthService } from '@app/core/services/auth.service';\nimport { CepService } from '@app/modules/entry/services/cep.service';\nimport { HealthProfessionalService } from '@app/modules/health-professional/services/health-professional.service';\nimport { BrazilianBanks } from '@app/shared/data/Brazilian-banks';\nimport { BrazilianStates } from '@app/shared/data/Brazilian-states';\nimport { nativeAsync } from '@app/shared/decorators/nativeAsync';\nimport { BrazilState, HealthProfessional } from '@app/shared/models';\nimport { BrazilBanks } from '@app/shared/models/brazil-banks';\nimport { User } from '@app/shared/models/decodedLoginToken';\nimport { markFormGroup } from '@app/utils/markFormGroup';\n\n@Component({\n selector: 'app-subaccount-step',\n templateUrl: './subaccount-step.component.html',\n styleUrls: ['./subaccount-step.component.scss', '../../modal-telemedicine-contract.component.scss']\n})\nexport class SubaccountStepComponent implements OnInit {\n @Input() profile: string;\n @Output() profileChange = new EventEmitter<string>();\n @Output() formChange = new EventEmitter<any>();\n\n @ViewChild('numero')\n numeroRef: ElementRef;\n\n states: BrazilState[] = BrazilianStates;\n banks: BrazilBanks[] = BrazilianBanks;\n\n private _form: FormGroup;\n private lastCep: string;\n private healthProfessional: HealthProfessional;\n private personalForm: any;\n private companyForm: any;\n\n constructor(\n private fb: FormBuilder,\n private cepService: CepService,\n private authService: AuthService,\n private healthProfessionalService: HealthProfessionalService\n ) {\n this._form = this.fb.group({\n name: this.fb.control('', Validators.required),\n commercialName: this.fb.control(null),\n identity: this.fb.control('', [Validators.minLength(11)]),\n responsibleName: this.fb.control(null),\n responsibleIdentity: this.fb.control(null),\n email: this.fb.control('', Validators.compose([Validators.required, Validators.email])),\n techName: this.fb.control(null),\n techIdentity: this.fb.control(null),\n techEmail: this.fb.control(null),\n bankData: this.fb.group({\n bank: this.fb.group({\n code: this.fb.control('', Validators.required)\n }),\n accountType: this.fb.group({\n code: this.fb.control('', Validators.required)\n }),\n bankAgency: this.fb.control('', Validators.required),\n bankAgencyDigit: this.fb.control('', Validators.required),\n bankAccount: this.fb.control('', Validators.required),\n bankAccountDigit: this.fb.control('', Validators.required)\n }),\n address: this.fb.group({\n zipCode: this.fb.control('', Validators.required),\n street: this.fb.control('', Validators.required),\n number: this.fb.control('', Validators.required),\n complement: this.fb.control(''),\n district: this.fb.control('', Validators.required),\n cityName: this.fb.control('', Validators.required),\n stateInitials: this.fb.control('', Validators.required),\n countryName: this.fb.control('', Validators.required)\n })\n });\n }\n\n ngOnInit() {\n this._form.valueChanges.subscribe(value => {\n this.formChange.emit(value);\n if (value.name) {\n if (this.profile === 'pf') {\n this.personalForm = value;\n } else if (this.profile === 'pj') {\n this.companyForm = value;\n }\n }\n });\n }\n\n get user(): User {\n return this.authService.user();\n }\n\n @Input()\n set form(form: any) {\n if (form) {\n this._form.setValue(form);\n }\n }\n\n get form() {\n return this._form;\n }\n\n @nativeAsync\n async onChangeProfile(profile: string) {\n this.profileChange.emit(profile);\n this._form.reset();\n\n if (profile === 'pf') {\n this._form.get('commercialName').setValidators([]);\n this._form.get('responsibleName').setValidators([]);\n this._form.get('responsibleIdentity').setValidators([]);\n\n if (!this.healthProfessional) {\n const healthProfessional = await this.healthProfessionalService\n .getHealthProfessional(this.user._id)\n .toPromise();\n this.healthProfessional = healthProfessional;\n }\n\n if (this.personalForm) {\n this._form.setValue(this.personalForm);\n } else {\n this._form.patchValue({\n identity: this.healthProfessional.cpf,\n name: this.healthProfessional.name,\n email: this.user.email\n });\n\n const { commercialData } = this.healthProfessional;\n const { address } = commercialData && commercialData[0];\n if (address) {\n this._form.get('address').patchValue({\n ...address,\n zipCode: address.cep,\n district: address.neighborhood,\n cityName: address.city,\n stateInitials: address.uf,\n countryName: 'Brasil'\n });\n }\n }\n } else {\n this._form.get('responsibleName').setValidators([Validators.required]);\n this._form.get('responsibleIdentity').setValidators([Validators.required]);\n\n if (this.companyForm) {\n this._form.setValue(this.companyForm);\n }\n }\n }\n\n @nativeAsync\n async consultCep(value: string) {\n const cep = value.replace(/[^\\d]+/g, '');\n if (cep.length === 8 && this.lastCep !== cep) {\n this.lastCep = cep;\n const data = await this.cepService.consult(cep);\n if (!data.erro) {\n this._form.get('address').patchValue({\n street: data.logradouro,\n number: null,\n district: data.bairro,\n zipCode: data.cep,\n cityName: data.localidade,\n stateInitials: data.uf,\n countryName: 'Brasil'\n });\n if (data.logradouro) {\n this.numeroRef.nativeElement.focus();\n }\n }\n }\n }\n\n get invalid() {\n markFormGroup(this._form);\n return this._form.invalid;\n }\n\n get errorMessage() {\n return 'Você precisa preencher todos os campos obrigatórios';\n }\n}\n","export default \"<p class=\\\"bold\\\">Dados bancários para recebimento do valor das consultas.</p>\\n\\n<p>\\n Você pode usar a Teleconsulta Receita Digital para atender seus próprios pacientes e também para\\n atender novos pacientes que procuram nossa plataforma em busca de atedimento médico.\\n</p>\\n\\n<p>\\n Assim, o paciente faz o pagamento online direto no nosso site, e nós encaminhamos o pagamento para\\n você! Para isso, precisaremos dos seus dados bancários para encaminhar o valor das consultas pagar\\n online.\\n</p>\\n\\n<p>\\n Fique tranquilo, está informação não será divulgada em lugar nenhum, e servirá exclusivamente para\\n encaminhar o valor das suas consultas! Se você usa um CNPJ para receber pelas suas consultas, basta\\n escolher a opção \\\"Pessoa JurÃdica\\\" no campo PERFIL DA CONTA. Estes serão os dados utilizados para\\n emissão da Nota Fiscal das consultas pagas através da nossa plataforma.\\n</p>\\n\\n<p>Se tiver alguma dúvida, é só clicar no link abaixo e falar com a gente pelo chat!</p>\\n<a href=\\\"\\\">link</a>\\n\\n<!-- Tipo de perfil -->\\n<nz-divider nzText=\\\"Perfil da conta\\\" nzOrientation=\\\"left\\\"></nz-divider>\\n<nz-select\\n [(ngModel)]=\\\"profile\\\"\\n (ngModelChange)=\\\"onChangeProfile($event)\\\"\\n nzPlaceHolder=\\\"Selecione o perfil\\\"\\n class=\\\"col-sm-6\\\"\\n>\\n <nz-option nzValue=\\\"pf\\\" nzLabel=\\\"PESSOA FÃSICA\\\"></nz-option>\\n <nz-option nzValue=\\\"pj\\\" nzLabel=\\\"PESSOA JURÃDICA\\\"></nz-option>\\n</nz-select>\\n\\n<form nz-form [formGroup]=\\\"form\\\" *ngIf=\\\"profile\\\">\\n <div *ngIf=\\\"profile === 'pj'\\\">\\n <div class=\\\"row\\\">\\n <nz-divider nzText=\\\"Dados da empresa\\\" nzOrientation=\\\"left\\\"></nz-divider>\\n <nz-form-item class=\\\"col-4\\\">\\n <nz-form-label>CNPJ<span class=\\\"mandatory\\\">*</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input nz-input formControlName=\\\"identity\\\" mask=\\\"00.000.000/0000-00\\\" />\\n </nz-form-control>\\n </nz-form-item>\\n\\n <nz-form-item class=\\\"col-4\\\">\\n <nz-form-label>Razão Social<span class=\\\"mandatory\\\">*</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input nz-input formControlName=\\\"name\\\" />\\n </nz-form-control>\\n </nz-form-item>\\n\\n <nz-form-item class=\\\"col-4\\\">\\n <nz-form-label>Nome Fantasia</nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input nz-input formControlName=\\\"commercialName\\\" />\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n\\n <div formGroupName=\\\"address\\\">\\n <nz-divider nzText=\\\"Endereço\\\" nzOrientation=\\\"left\\\"></nz-divider>\\n <div class=\\\"row\\\">\\n <nz-form-item class=\\\"col-sm-4\\\">\\n <nz-form-label>CEP<span class=\\\"mandatory\\\">*</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n (keyup)=\\\"consultCep($event.target.value)\\\"\\n mask=\\\"00000-000\\\"\\n formControlName=\\\"zipCode\\\"\\n />\\n </nz-form-control>\\n </nz-form-item>\\n\\n <nz-form-item class=\\\"col-sm-5\\\">\\n <nz-form-label>Logradouro<span class=\\\"mandatory\\\">*</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input nz-input formControlName=\\\"street\\\" />\\n </nz-form-control>\\n </nz-form-item>\\n\\n <nz-form-item class=\\\"col-sm-3\\\">\\n <nz-form-label>Número<span class=\\\"mandatory\\\">*</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input nz-input formControlName=\\\"number\\\" type=\\\"number\\\" #numero />\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n\\n <div class=\\\"row\\\">\\n <nz-form-item class=\\\"col-sm-6\\\">\\n <nz-form-label>Complemento</nz-form-label>\\n <input nz-input formControlName=\\\"complement\\\" />\\n </nz-form-item>\\n\\n <nz-form-item class=\\\"col-sm-6\\\">\\n <nz-form-label>Bairro<span class=\\\"mandatory\\\">*</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input nz-input formControlName=\\\"district\\\" />\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n\\n <div class=\\\"row\\\">\\n <nz-form-item class=\\\"col-sm-8\\\">\\n <nz-form-label>Cidade<span class=\\\"mandatory\\\">*</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input nz-input formControlName=\\\"cityName\\\" />\\n </nz-form-control>\\n </nz-form-item>\\n\\n <nz-form-item class=\\\"col-sm-4\\\">\\n <nz-form-label>UF<span class=\\\"mandatory\\\">*</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <nz-select nzShowSearch nzPlaceHolder=\\\"Selecione\\\" formControlName=\\\"stateInitials\\\">\\n <nz-option\\n *ngFor=\\\"let state of states\\\"\\n [nzLabel]=\\\"state?.sigla\\\"\\n [nzValue]=\\\"state?.sigla\\\"\\n ></nz-option>\\n </nz-select>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n </div>\\n\\n <nz-divider nzText=\\\"Responsável Legal\\\" nzOrientation=\\\"left\\\"></nz-divider>\\n <div class=\\\"row\\\">\\n <nz-form-item class=\\\"col-4\\\">\\n <nz-form-label>Nome<span class=\\\"mandatory\\\">*</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input nz-input formControlName=\\\"responsibleName\\\" />\\n </nz-form-control>\\n </nz-form-item>\\n\\n <nz-form-item class=\\\"col-4\\\">\\n <nz-form-label>CPF<span class=\\\"mandatory\\\">*</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input nz-input appPatientSearch formControlName=\\\"responsibleIdentity\\\" mask=\\\"000.000.000-99\\\" />\\n </nz-form-control>\\n </nz-form-item>\\n\\n <nz-form-item class=\\\"col-4\\\">\\n <nz-form-label>E-mail<span class=\\\"mandatory\\\">*</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input nz-input formControlName=\\\"email\\\" />\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n </div>\\n\\n <!-- dados bancarios -->\\n <div formGroupName=\\\"bankData\\\">\\n <nz-divider nzText=\\\"Dados bancários\\\" nzOrientation=\\\"left\\\"></nz-divider>\\n\\n <div class=\\\"row\\\">\\n <nz-form-item class=\\\"col-sm-7\\\" formGroupName=\\\"bank\\\">\\n <nz-form-label>Banco<span class=\\\"mandatory\\\">*</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <nz-select nzShowSearch nzPlaceHolder=\\\"Selecione o banco\\\" formControlName=\\\"code\\\">\\n <nz-option\\n *ngFor=\\\"let bank of banks\\\"\\n [nzLabel]=\\\"bank?.code + ' - ' + bank?.name\\\"\\n [nzValue]=\\\"bank?.code\\\"\\n ></nz-option>\\n </nz-select>\\n </nz-form-control>\\n </nz-form-item>\\n\\n <nz-form-item class=\\\"col-sm-5\\\" formGroupName=\\\"accountType\\\">\\n <nz-form-label>Tipo de Conta<span class=\\\"mandatory\\\">*</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <nz-select nzPlaceHolder=\\\"Selecione o tipo de conta\\\" formControlName=\\\"code\\\">\\n <nz-option nzValue=\\\"CC\\\" nzLabel=\\\"Conta Corrente\\\"></nz-option>\\n <nz-option nzValue=\\\"PP\\\" nzLabel=\\\"Conta Poupança\\\"></nz-option>\\n </nz-select>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n\\n <div class=\\\"row\\\">\\n <nz-form-item class=\\\"col-sm-4\\\">\\n <nz-form-label>Agência<span class=\\\"mandatory\\\">*</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input nz-input formControlName=\\\"bankAgency\\\" type=\\\"tel\\\" maxlength=\\\"5\\\" pattern=\\\"\\\\d{1,5}\\\" />\\n </nz-form-control>\\n </nz-form-item>\\n\\n <nz-form-item class=\\\"col-sm-2\\\">\\n <nz-form-label>DÃgito<span class=\\\"mandatory\\\">*</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input nz-input formControlName=\\\"bankAgencyDigit\\\" type=\\\"tel\\\" maxlength=\\\"2\\\" pattern=\\\"\\\\d{1,2}\\\" />\\n </nz-form-control>\\n </nz-form-item>\\n\\n <nz-form-item class=\\\"col-sm-4\\\">\\n <nz-form-label>Conta<span class=\\\"mandatory\\\">*</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input nz-input formControlName=\\\"bankAccount\\\" type=\\\"tel\\\" maxlength=\\\"12\\\" pattern=\\\"\\\\d{1,12}\\\" />\\n </nz-form-control>\\n </nz-form-item>\\n\\n <nz-form-item class=\\\"col-sm-2\\\">\\n <nz-form-label>DÃgito<span class=\\\"mandatory\\\">*</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n formControlName=\\\"bankAccountDigit\\\"\\n type=\\\"tel\\\"\\n maxlength=\\\"2\\\"\\n pattern=\\\"\\\\d{1,2}\\\"\\n />\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n </div>\\n</form>\\n\";","export default \"\";","import { Component, ElementRef, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { CepService } from '@app/modules/entry/services/cep.service';\nimport { BrazilianStates } from '@app/shared/data/Brazilian-states';\nimport { nativeAsync } from '@app/shared/decorators/nativeAsync';\nimport { BrazilState } from '@app/shared/models';\nimport { markFormGroup } from '@app/utils';\nimport { CreditCardValidators } from 'angular-cc-library';\n\n@Component({\n selector: 'app-subscription-step',\n templateUrl: './subscription-step.component.html',\n styleUrls: ['./subscription-step.component.scss', '../../modal-telemedicine-contract.component.scss']\n})\nexport class SubscriptionStepComponent implements OnInit {\n @Output() formChange = new EventEmitter<any>();\n\n @ViewChild('numberInput')\n numberInputRef: ElementRef;\n\n states: BrazilState[] = BrazilianStates;\n\n private _form: FormGroup;\n private lastCep: string;\n\n constructor(private fb: FormBuilder, private cepService: CepService) {\n this._form = this.fb.group({\n customer: this.fb.group({\n name: ['', Validators.required],\n identity: [''],\n phone: ['', Validators.required],\n email: ['', [Validators.required, Validators.email]],\n address: this.fb.group({\n street: ['', Validators.required],\n number: ['', Validators.required],\n district: ['', Validators.required],\n zipCode: ['', Validators.required],\n cityName: ['', Validators.required],\n stateInitials: ['', Validators.required],\n countryName: ['', Validators.required]\n })\n }),\n creditCard: this.fb.group({\n holder: ['', Validators.required],\n cardNumber: ['', CreditCardValidators.validateCCNumber],\n expirationDate: ['', CreditCardValidators.validateExpDate],\n securityCode: ['', [Validators.required, Validators.minLength(3), Validators.maxLength(4)]]\n })\n });\n }\n\n ngOnInit() {\n this._form.valueChanges.subscribe(value => this.formChange.emit(value));\n }\n\n @Input()\n set form(form: any) {\n if (form) {\n this._form.setValue(form);\n }\n }\n\n get form() {\n return this._form;\n }\n\n get billingDate() {\n const now = new Date();\n now.setDate(now.getDate() + 16);\n return now;\n }\n\n @nativeAsync\n async consultCep(value: string) {\n const cep = value.replace(/[^\\d]+/g, '');\n if (cep.length === 8 && this.lastCep !== cep) {\n this.lastCep = cep;\n const data = await this.cepService.consult(cep);\n if (!data.erro) {\n const customer = this._form.get('customer');\n customer.get('address').patchValue({\n street: data.logradouro,\n number: null,\n district: data.bairro,\n zipCode: data.cep,\n cityName: data.localidade,\n stateInitials: data.uf,\n countryName: 'Brasil'\n });\n if (data.logradouro) {\n this.numberInputRef.nativeElement.focus();\n }\n }\n }\n }\n\n get invalid() {\n markFormGroup(this._form);\n return this._form.invalid;\n }\n\n get errorMessage() {\n return 'Você precisa preencher todos os campos obrigatórios';\n }\n\n public goToNextCreditCardField(controlName: string, nextField: HTMLInputElement) {\n const ctrl = this._form.get('creditCard').get(controlName);\n if (ctrl && ctrl.valid) {\n nextField.focus();\n }\n }\n}\n","export default \"<p>Pagamento do plano</p>\\n\\n<p>Para concluir a contratação do plano, preencha os dados para pagamento da mensalidade.</p>\\n\\n<p>\\n A data da primeira cobrança será dia {{ billingDate | date: 'dd/MM/yyyy' }}. A liberação do seu acesso\\n acontecerá em até 24h, após validarmos sua habilitação junto ao seu Conselho de Classe.\\n</p>\\n\\n<p>Caso desista da contratação nesse perÃodo</p>\\n\\n<!-- <p>CRIAR ADESÃO AO PLANO DA RECEITA DIGITAL</p> -->\\n\\n<form [formGroup]=\\\"form\\\" autocomplete=\\\"on\\\">\\n <div formGroupName=\\\"customer\\\">\\n <nz-divider nzText=\\\"Dados pessoais do dono do cartão\\\" nzOrientation=\\\"left\\\"></nz-divider>\\n <div class=\\\"row\\\">\\n <nz-form-item class=\\\"col-sm\\\">\\n <nz-form-label>Nome Completo<span class=\\\"mandatory\\\">*</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input nz-input formControlName=\\\"name\\\" autocomplete=\\\"name\\\" />\\n </nz-form-control>\\n </nz-form-item>\\n\\n <nz-form-item class=\\\"col-sm\\\">\\n <nz-form-label>CPF/CNPJ<span class=\\\"mandatory\\\">*</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input nz-input formControlName=\\\"identity\\\" mask=\\\"CPF_CNPJ\\\" autocomplete=\\\"cpf\\\" />\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n <div class=\\\"row\\\">\\n <nz-form-item class=\\\"col-sm\\\">\\n <nz-form-label>Telefone<span class=\\\"mandatory\\\">*</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input nz-input formControlName=\\\"phone\\\" mask=\\\"(00) 00000-0000\\\" autocomplete=\\\"tel\\\" />\\n </nz-form-control>\\n </nz-form-item>\\n\\n <nz-form-item class=\\\"col-sm\\\">\\n <nz-form-label>E-mail<span class=\\\"mandatory\\\">*</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input nz-input formControlName=\\\"email\\\" autocomplete=\\\"email\\\" />\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n\\n <div formGroupName=\\\"address\\\">\\n <nz-divider nzText=\\\"Endereço do dono do cartão\\\" nzOrientation=\\\"left\\\"></nz-divider>\\n <div class=\\\"row\\\">\\n <nz-form-item class=\\\"col-sm-4\\\">\\n <nz-form-label>CEP<span class=\\\"mandatory\\\">*</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n (keyup)=\\\"consultCep($event.target.value)\\\"\\n mask=\\\"00000-000\\\"\\n formControlName=\\\"zipCode\\\"\\n autocomplete=\\\"postal-code\\\"\\n />\\n </nz-form-control>\\n </nz-form-item>\\n\\n <nz-form-item class=\\\"col-sm-5\\\">\\n <nz-form-label>Logradouro<span class=\\\"mandatory\\\">*</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input nz-input formControlName=\\\"street\\\" autocomplete=\\\"street-address\\\" />\\n </nz-form-control>\\n </nz-form-item>\\n\\n <nz-form-item class=\\\"col-sm-3\\\">\\n <nz-form-label>Número<span class=\\\"mandatory\\\">*</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input nz-input formControlName=\\\"number\\\" type=\\\"number\\\" #numberInput autocomplete=\\\"off\\\" />\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n\\n <div class=\\\"row\\\">\\n <nz-form-item class=\\\"col-sm-4\\\">\\n <nz-form-label>Bairro<span class=\\\"mandatory\\\">*</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input nz-input formControlName=\\\"district\\\" autocomplete=\\\"address-level2\\\" />\\n </nz-form-control>\\n </nz-form-item>\\n\\n <nz-form-item class=\\\"col-sm-5\\\">\\n <nz-form-label>Cidade<span class=\\\"mandatory\\\">*</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input nz-input formControlName=\\\"cityName\\\" autocomplete=\\\"address-level1\\\" />\\n </nz-form-control>\\n </nz-form-item>\\n\\n <nz-form-item class=\\\"col-sm-3\\\">\\n <nz-form-label>UF<span class=\\\"mandatory\\\">*</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <nz-select nzShowSearch nzPlaceHolder=\\\"Selecione\\\" formControlName=\\\"stateInitials\\\">\\n <nz-option\\n *ngFor=\\\"let state of states\\\"\\n [nzLabel]=\\\"state?.sigla\\\"\\n [nzValue]=\\\"state?.sigla\\\"\\n ></nz-option>\\n </nz-select>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n </div>\\n </div>\\n\\n <div formGroupName=\\\"creditCard\\\">\\n <nz-divider nzText=\\\"Dados do Cartão\\\" nzOrientation=\\\"left\\\"></nz-divider>\\n\\n <div class=\\\"row\\\">\\n <nz-form-item class=\\\"col-sm\\\">\\n <nz-form-label>Número do cartão<span class=\\\"mandatory\\\">*</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n type=\\\"tel\\\"\\n autocomplete=\\\"cc-number\\\"\\n formControlName=\\\"cardNumber\\\"\\n placeholder=\\\"•••• •••• •••• ••••\\\"\\n ccNumber\\n />\\n </nz-form-control>\\n </nz-form-item>\\n\\n <nz-form-item class=\\\"col-sm\\\">\\n <nz-form-label>Nome impresso no cartão<span class=\\\"mandatory\\\">*</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input nz-input formControlName=\\\"holder\\\" autocomplete=\\\"cc-name\\\" />\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n\\n <div class=\\\"row\\\">\\n <nz-form-item class=\\\"col-sm\\\">\\n <nz-form-label>Data de vencimento<span class=\\\"mandatory\\\">*</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n #expireInput\\n nz-input\\n type=\\\"tel\\\"\\n autocomplete=\\\"cc-exp\\\"\\n formControlName=\\\"expirationDate\\\"\\n placeholder=\\\"••/••••\\\"\\n mask=\\\"00/0000\\\"\\n appDate\\n ccExp\\n />\\n </nz-form-control>\\n </nz-form-item>\\n\\n <nz-form-item class=\\\"col-sm\\\">\\n <nz-form-label>Código de segurança<span class=\\\"mandatory\\\">*</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n #cvcInput\\n nz-input\\n formControlName=\\\"securityCode\\\"\\n type=\\\"tel\\\"\\n autocomplete=\\\"cc-csc\\\"\\n placeholder=\\\"•••\\\"\\n required\\n ccCVC\\n />\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n </div>\\n</form>\\n\";","export default \"\";","import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\nimport { AppToastService } from '@app/shared/services/app-toast.service';\nimport { FileStepComponent } from './file-step/file-step.component';\nimport { SubaccountStepComponent } from './subaccount-step/subaccount-step.component';\nimport { SubscriptionStepComponent } from './subscription-step/subscription-step.component';\n\n@Component({\n selector: 'app-form-steps',\n templateUrl: './form-steps.component.html',\n styleUrls: ['./form-steps.component.scss', '../modal-telemedicine-contract.component.scss']\n})\nexport class FormStepsComponent implements OnInit {\n @Input() userType: string;\n @Output() title = new EventEmitter<string>();\n @Output() cancel = new EventEmitter<any>();\n @Output() submitForm = new EventEmitter<any>();\n\n @ViewChild(FileStepComponent)\n fileStepComponent: FileStepComponent;\n\n @ViewChild(SubaccountStepComponent)\n subaccountStepComponent: SubaccountStepComponent;\n\n @ViewChild(SubscriptionStepComponent)\n subscriptionStepComponent: SubscriptionStepComponent;\n\n step = 1;\n profile: string;\n\n fileForm: any;\n subaccountForm: any;\n subscriptionForm: any;\n\n constructor(private notification: AppToastService) {}\n\n ngOnInit() {\n this.emitTitle(this.step);\n }\n\n changeStep(advance: boolean) {\n if (advance) {\n this.advanceStep();\n } else {\n this.backStep();\n }\n }\n\n private advanceStep() {\n if (this.step === 1 && this.fileStepComponent.invalid) {\n this.showWarning(this.fileStepComponent.errorMessage);\n } else if (this.step === 2 && this.subaccountStepComponent.invalid) {\n this.showWarning(this.subaccountStepComponent.errorMessage);\n } else if (this.step === 3) {\n if (this.subscriptionStepComponent.invalid) {\n this.showWarning(this.subscriptionStepComponent.errorMessage);\n } else {\n this.submit();\n }\n } else {\n this.step += 1;\n this.emitTitle(this.step);\n }\n }\n\n private backStep() {\n if (this.step === 1) {\n this.title.emit(null);\n this.cancel.emit();\n } else {\n this.step -= 1;\n this.emitTitle(this.step);\n }\n }\n\n private showWarning(message: string) {\n this.notification.notify('warning', 'Aviso', message);\n }\n\n private emitTitle(step: number) {\n if (step === 1) {\n this.title.emit('Documento');\n } else if (step === 2) {\n this.title.emit('Dados bancários');\n } else if (step === 3) {\n this.title.emit('Pagamento');\n }\n }\n\n private submit() {\n this.submitForm.emit({\n subaccount: this.subaccountForm,\n subscription: {\n ...this.subscriptionForm,\n emails: [this.subaccountForm.email]\n },\n document: this.fileForm.documentFile\n });\n }\n}\n","export default \"\";","import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n selector: 'app-intro',\n templateUrl: './intro.component.html',\n styleUrls: ['./intro.component.scss', '../modal-telemedicine-contract.component.scss']\n})\nexport class IntroComponent implements OnInit {\n @Input() userType: string;\n\n constructor() {}\n\n ngOnInit() {}\n}\n","export default \"<nz-tabset>\\n <nz-tab [nzTitle]=\\\"tab01\\\">\\n <ng-template #tab01>\\n <img src=\\\"assets/icons/door-open-solid.svg\\\" />\\n </ng-template>\\n <ng-container *ngIf=\\\"userType == 'healthProfessional'\\\">\\n <p class=\\\"bold\\\">Bem vindo à Teleconsulta Receita Digital</p>\\n <p>\\n Esta é uma das ferramentas que fazem parte do plano pago da plataforma Receita Digital.\\n </p>\\n <p>\\n Para saber como funciona, basta clicar nos botões acima e conhecer todos os detalhes desta nova\\n ferramenta.\\n </p>\\n <p>\\n Gostou do que viu? Clique no botão CONTRATAR acima.\\n </p>\\n </ng-container>\\n\\n <ng-container *ngIf=\\\"userType == 'patient'\\\">\\n <p class=\\\"bold\\\">Bem vindo à Teleconsulta Receita Digital</p>\\n <p>\\n Aqui você encontra diversos médicos que atendem online, via teleconsulta e estão prontos para\\n fazer sua Receita Digital.\\n </p>\\n <p>\\n Para saber como funciona, navegue pelos botões acima e tire suas principais dúvidas sobre a\\n consulta, formas de pagamento, como receber sua receita, polÃticas de cancelamento, e mais!\\n </p>\\n </ng-container>\\n </nz-tab>\\n\\n <nz-tab [nzTitle]=\\\"tab02\\\">\\n <ng-template #tab02>\\n <img\\n src=\\\"{{\\n userType == 'healthProfessional'\\n ? 'assets/icons/dollar-sign-solid.svg'\\n : 'assets/icons/ambulance-solid.svg'\\n }}\\\"\\n />\\n </ng-template>\\n <ng-container *ngIf=\\\"userType == 'healthProfessional'\\\">\\n <p class=\\\"bold\\\">Quanto custa?</p>\\n <p>\\n Esta é uma das ferramentas que fazem parte do plano pago da plataforma Receita Digital.\\n </p>\\n <p>\\n Pagando apenas R$139,90 por mês você usa nossa plataforma para fazer quantas consultas quiser.\\n </p>\\n <p>\\n Você pode usar a Teleconsulta Receita Digital para atender seus próprios pacientes e também para\\n atender novos pacientes que procuram nossa plataforma em busca de atendimento médico.\\n </p>\\n <p>\\n Cancele quando quiser, a fidelidade que acreditamos é aquela em que o cliente gosta do produto,\\n pode isso decide ficar!\\n </p>\\n </ng-container>\\n\\n <ng-container *ngIf=\\\"userType == 'patient'\\\">\\n <p class=\\\"bold\\\">É uma emergência?</p>\\n\\n <p>Se você está se sentindo mal, considere procurar a emergência mais próxima!</p>\\n\\n <p>Até mesmo as consultas do plantão podem demorar mais do que é seguro esperar!</p>\\n </ng-container>\\n </nz-tab>\\n\\n <nz-tab [nzTitle]=\\\"tab03\\\">\\n <ng-template #tab03>\\n <img\\n src=\\\"{{\\n userType == 'healthProfessional'\\n ? 'assets/icons/tools-solid.svg'\\n : 'assets/icons/video-solid.svg'\\n }}\\\"\\n />\\n <!-- <img src=\\\"assets/icons/video-solid.svg\\\" *ngIf=\\\"userType == 'patient'\\\" /> -->\\n </ng-template>\\n <ng-container *ngIf=\\\"userType == 'healthProfessional'\\\">\\n <p class=\\\"bold\\\">Quais as ferramentas terei acesso?</p>\\n <p>\\n Ao contratar a Teleconsulta Receita Digital você terá acesso a todas as ferramentas da plataforma\\n que você já usa e mais:\\n </p>\\n <br />\\n <p>\\n Agenda para marcar as consultas dos seus pacientes e receber agendamento de novos pacientes\\n </p>\\n <p>\\n Ferramenta de videoconferência com criptografia ponta a ponta, e segurança adequada para\\n atendimentos médicos.\\n </p>\\n <p>\\n Ferramenta para anotações durante as consultas, que já ficam salvas no perfil do seu paciente.\\n </p>\\n </ng-container>\\n\\n <ng-container *ngIf=\\\"userType == 'patient'\\\">\\n <p class=\\\"bold\\\">Às vezes você precisa mais do que uma teleconsulta...</p>\\n <p>\\n A teleconsulta possui limitações pela distância médico-paciente, portanto nem sempre é possÃvel\\n fazer um diagnóstico.\\n </p>\\n <p>\\n Dê prefereência a consultas com médicos próximos de você, caso seja necessária uma consulta\\n complementar presencial.\\n </p>\\n <p>Está em dúvida? Converse com um dos nossos atendentes!</p>\\n </ng-container>\\n </nz-tab>\\n\\n <nz-tab [nzTitle]=\\\"tab04\\\">\\n <ng-template #tab04>\\n <img\\n src=\\\"{{\\n userType == 'healthProfessional'\\n ? 'assets/icons/video-solid.svg'\\n : 'assets/icons/stethoscope-solid.svg'\\n }}\\\"\\n />\\n <!-- <img src=\\\"assets/icons/stethoscope-solid.svg\\\" *ngIf=\\\"userType == 'patient'\\\" /> -->\\n </ng-template>\\n <ng-container *ngIf=\\\"userType == 'healthProfessional'\\\">\\n <p class=\\\"bold\\\">Como funciona?</p>\\n <p>\\n Esta é uma das ferramentas que fazem parte do plano pago da plataforma Receita Digital. Veja como\\n funciona:\\n </p>\\n </ng-container>\\n\\n <ng-container *ngIf=\\\"userType == 'patient'\\\">\\n <p class=\\\"bold\\\">Não interferimos na conduta do profissional!</p>\\n <p>O médico é soberano para decidir qual a melhor conduta a se adotar;</p>\\n <p>\\n Se você não gostar do desfecho da consulta, você pode buscar uma segunda opinião, mas não será\\n possÃvel solicitar reembolso da consulta.\\n </p>\\n </ng-container>\\n </nz-tab>\\n\\n <nz-tab [nzTitle]=\\\"tab05\\\">\\n <ng-template #tab05>\\n <img\\n src=\\\"{{\\n userType == 'healthProfessional'\\n ? 'assets/icons/calendar-alt-solid.svg'\\n : 'assets/icons/dot-circle-regular.svg'\\n }}\\\"\\n />\\n <!-- <img src=\\\"assets/icons/dot-circle-regular.svg\\\" *ngIf=\\\"userType == 'patient'\\\" /> -->\\n </ng-template>\\n\\n <ng-container *ngIf=\\\"userType == 'healthProfessional'\\\">\\n <p class=\\\"bold\\\">Agendamento de consulta</p>\\n <p>\\n Esta é uma das ferramentas que fazem parte do plano pago da plataforma Receita Digital. Veja como\\n funciona:\\n </p>\\n </ng-container>\\n\\n <ng-container *ngIf=\\\"userType == 'patient'\\\">\\n <p class=\\\"bold\\\">É proibido gravar!</p>\\n <p>Médicos e pacientes são proibidos de gravar a consulta sem o consentimento do outro!</p>\\n <p>Também é proibido \\\"printar\\\" a tela sem autorização!</p>\\n <p>\\n Se por algum motivo você acha que precisa gravar a consulta ou \\\"printar\\\" a tela, informe o\\n profissional que está lhe atendendo e solicite sua autorização!\\n </p>\\n </ng-container>\\n </nz-tab>\\n\\n <nz-tab [nzTitle]=\\\"tab06\\\">\\n <ng-template #tab06>\\n <img\\n class=\\\"white\\\"\\n src=\\\"{{\\n userType == 'healthProfessional'\\n ? 'assets/icons/credit-card-solid.svg'\\n : 'assets/icons/capsules-solid.svg'\\n }}\\\"\\n />\\n <!-- <img\\n class=\\\"white\\\"\\n src=\\\"\\\"\\n *ngIf=\\\"userType == 'patient'\\\"\\n /> -->\\n </ng-template>\\n <ng-container *ngIf=\\\"userType == 'healthProfessional'\\\">\\n <p>Receba pelas consultas com pagamento online</p>\\n <p>\\n Esta é uma das ferramentas que fazem parte do plano pago da plataforma Receita Digital. Veja como\\n funciona:\\n </p>\\n <p>Usamos a ferramenta de pagamento Safe2Pay, da Safeweb, segurança...</p>\\n </ng-container>\\n\\n <ng-container *ngIf=\\\"userType == 'patient'\\\">\\n <p class=\\\"bold\\\">Pagar por uma consulta não lhe garante uma receita médica!</p>\\n <p>\\n Nem toda consulta gera uma receita médica e o médico não é obrigado a prescrever um medicamento,\\n um pedido de exames ou atestado médico, mesmo que você tenha solicitado.\\n </p>\\n <p>Assim como acontece nas consultas presenciais.</p>\\n </ng-container>\\n </nz-tab>\\n\\n <nz-tab [nzTitle]=\\\"tab07\\\">\\n <ng-template #tab07>\\n <img\\n class=\\\"white\\\"\\n src=\\\"{{\\n userType == 'healthProfessional'\\n ? 'assets/icons/users-solid.svg'\\n : 'assets/icons/dollar-sign-solid.svg'\\n }}\\\"\\n />\\n <!-- <img\\n class=\\\"white\\\"\\n src=\\\"assets/icons/dollar-sign-solid.svg\\\"\\n *ngIf=\\\"userType == 'patient'\\\"\\n /> -->\\n </ng-template>\\n <ng-container *ngIf=\\\"userType == 'healthProfessional'\\\">\\n <p class=\\\"bold\\\">Atenda seus pacientes e novos pacientes</p>\\n <p>\\n Esta é uma das ferramentas que fazem parte do plano pago da plataforma Receita Digital. Veja como\\n funciona:\\n </p>\\n </ng-container>\\n\\n <ng-container *ngIf=\\\"userType == 'patient'\\\">\\n <p class=\\\"bold\\\">Quanto vou pagar? Como vou pagar?</p>\\n <p>\\n Cada médico decide quanto cobrar pela consulta. Você poderá consultar este valor nas informações\\n dos médicos disponÃveis. Também será possÃvel definir um filtro com o valor máximo que você\\n deseja pagar.\\n </p>\\n <p>\\n Para consultas agendadas com 48h de antecedência, você pode pagar com cartão de crédito, débito e\\n boleto bancário. Para as consultas de emergências, com menos de 48h de antecedência, somente com\\n cartões de crédito e débito.\\n </p>\\n </ng-container>\\n </nz-tab>\\n\\n <nz-tab [nzTitle]=\\\"tab08\\\">\\n <ng-template #tab08>\\n <!-- assets/icons/notes-medical-solid.svg -->\\n <img\\n class=\\\"white\\\"\\n src=\\\"{{\\n userType == 'healthProfessional'\\n ? 'assets/icons/notes-medical-solid.svg'\\n : 'assets/icons/times-circle-solid.svg'\\n }}\\\"\\n />\\n <!-- <img\\n class=\\\"white\\\"\\n src=\\\"\\\"\\n *ngIf=\\\"userType == 'patient'\\\"\\n /> -->\\n </ng-template>\\n <ng-container *ngIf=\\\"userType == 'healthProfessional'\\\">\\n <p class=\\\"bold\\\">Atenda seus pacientes e novos pacientes</p>\\n <p>\\n Esta é uma das ferramentas que fazem parte do plano pago da plataforma Receita Digital. Veja como\\n funciona:\\n </p>\\n </ng-container>\\n\\n <ng-container *ngIf=\\\"userType == 'patient'\\\">\\n <p class=\\\"bold\\\">E se precisar cancelar ou reagendar uma consulta?</p>\\n <p>\\n Você poderá solicitar a alteração da consulta previamente marcada, escolhendo um novo horário com\\n o mesmo profissional ou usando o valor pago como crédito para escolher outro profissional.\\n </p>\\n <p>\\n Se desejar cancelar a consulta e solicitar o reembolso do valor pago, será cobrado o valor de 5%\\n para cobrir as despesas da operadora financeira.\\n </p>\\n <p>\\n Caso o profissional não compareça no horário marcado, você poderá solicitar o reembolso integral\\n do valor pago, e nós nos responsabilizamos pelo pagamento das despesas da operadora.\\n </p>\\n </ng-container>\\n </nz-tab>\\n</nz-tabset>\\n\";","export default \".bold {\\n font-family: \\\"probold\\\";\\n}\";","export default \"<div class=\\\"modal-video-conf\\\">\\n <div class=\\\"modal-header\\\">\\n <div class=\\\"title\\\">\\n <img src=\\\"assets/icons/video-solid.svg\\\" />\\n <h4 class=\\\"modal-title pull-left text-white\\\">TELECONSULTA {{ title ? ' - ' + title : '' }}</h4>\\n </div>\\n <!-- <button type=\\\"button\\\" class=\\\"close pull-right\\\" aria-label=\\\"Close\\\" (click)=\\\"modalRef.hide()\\\">\\n <span aria-hidden=\\\"true\\\">×</span>\\n </button> -->\\n\\n <button\\n class=\\\"hire-btn\\\"\\n type=\\\"button\\\"\\n *ngIf=\\\"!hire && user?.userType === 'healthProfessional'\\\"\\n (click)=\\\"hire = true\\\"\\n >\\n <span aria-hidden=\\\"true\\\">Contratar</span>\\n </button>\\n\\n <button class=\\\"hire-btn\\\" type=\\\"button\\\" *ngIf=\\\"!hire && user?.userType === 'patient'\\\">\\n <span aria-hidden=\\\"true\\\">Começar</span>\\n </button>\\n\\n <button class=\\\"hire-btn\\\" type=\\\"button\\\" *ngIf=\\\"hire\\\" (click)=\\\"closeModal()\\\">\\n <div class=\\\"btn-cancel\\\">\\n <span aria-hidden=\\\"true\\\">Cancelar</span>\\n </div>\\n </button>\\n </div>\\n\\n <div class=\\\"modal-body\\\">\\n <app-intro *ngIf=\\\"!hire\\\" [userType]=\\\"user?.userType\\\"></app-intro>\\n <app-form-steps\\n *ngIf=\\\"hire\\\"\\n (title)=\\\"title = $event\\\"\\n [userType]=\\\"user?.userType\\\"\\n (cancel)=\\\"hire = false\\\"\\n (submitForm)=\\\"submitForm($event)\\\"\\n ></app-form-steps>\\n </div>\\n</div>\\n\";","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { environment } from '@env/environment';\n\nconst USER_TELEMEDICINE = 'user-telemedicine';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class VideoConferenceService {\n constructor(private http: HttpClient) {}\n\n getById(id: string) {\n return this.http.get<any>(`${environment.apiRoot}${USER_TELEMEDICINE}/${id}`);\n }\n\n create(form: any) {\n return this.http.post<any>(`${environment.apiRoot}${USER_TELEMEDICINE}`, form);\n }\n\n uploadDocument(base64: string) {\n return this.http.post<any>(`${environment.apiRoot}${USER_TELEMEDICINE}/upload-document`, { base64 });\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { AuthService } from '@app/core/services/auth.service';\nimport { User } from '@app/shared/models/decodedLoginToken';\nimport { AppToastService } from '@app/shared/services/app-toast.service';\nimport { NzModalService } from 'ng-zorro-antd/modal';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { VideoConferenceService } from './user-telemedicine.service';\nimport { nativeAsync } from '@app/shared/decorators/nativeAsync';\n\n@Component({\n selector: 'app-modal-telemedicine-contract',\n templateUrl: './modal-telemedicine-contract.component.html',\n styleUrls: ['./modal-telemedicine-contract.component.scss']\n})\nexport class ModalTelemedicineContractComponent implements OnInit {\n title: string;\n hire: boolean;\n\n constructor(\n protected modalRef: BsModalRef,\n private authService: AuthService,\n private nzModalService: NzModalService,\n private notification: AppToastService,\n private videoConferenceService: VideoConferenceService\n ) {}\n\n ngOnInit() {}\n\n get user(): User {\n return this.authService.user();\n }\n\n @nativeAsync\n submitForm(data: any) {\n this.nzModalService.confirm({\n nzTitle: 'Atenção',\n nzContent: 'Tem certeza que deseja submeter seus dados?',\n nzOnOk: async () => {\n try {\n await this.videoConferenceService.create(data).toPromise();\n this.notification.notify(\n 'success',\n 'Cadastro realizado com sucesso.',\n 'Aguarde 24 horas que retornaremos a análise dos seus dados'\n );\n this.closeModal();\n } catch (err) {\n console.error(err);\n if (err.error.message) {\n this.notification.notify('error', 'Alerta', err.error.message);\n } else {\n this.notification.notify(\n 'error',\n 'Erro',\n 'Ocorreu um erro na solicitação. Entre em contato conosco'\n );\n }\n }\n }\n });\n }\n\n closeModal() {\n this.modalRef.hide();\n this.modalRef = null;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { SharedModule } from '@app/shared';\nimport { CreditCardDirectivesModule } from 'angular-cc-library';\nimport { NgxMaskModule } from 'ngx-mask';\nimport { FileStepComponent } from './form-steps/file-step/file-step.component';\nimport { FormStepsComponent } from './form-steps/form-steps.component';\nimport { SubaccountStepComponent } from './form-steps/subaccount-step/subaccount-step.component';\nimport { SubscriptionStepComponent } from './form-steps/subscription-step/subscription-step.component';\nimport { IntroComponent } from './intro/intro.component';\nimport { ModalTelemedicineContractComponent } from './modal-telemedicine-contract.component';\n\n@NgModule({\n declarations: [\n ModalTelemedicineContractComponent,\n IntroComponent,\n FormStepsComponent,\n FileStepComponent,\n SubaccountStepComponent,\n SubscriptionStepComponent\n ],\n imports: [SharedModule, NgxMaskModule.forRoot(), CreditCardDirectivesModule],\n exports: [ModalTelemedicineContractComponent]\n})\nexport class ModalTelemedicineContractModule {}\n","import { UserService } from '@app/modules/user/user.service';\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n selector: 'app-modal-womens-month',\n templateUrl: './modal-womens-month.component.html',\n styleUrls: ['./modal-womens-month.component.scss']\n})\nexport class ModalWomensMonthComponent {\n @Input() isVisible = false;\n @Output() isVisibleChange = new EventEmitter<boolean>();\n\n constructor(private userService: UserService) {}\n\n later() {\n localStorage.setItem('hideWomensModal', 'true');\n this.close();\n }\n\n open() {\n window.open('https://consultaremedios.com.br', '_blank');\n this.close();\n this.userService.checkWomensMonth().subscribe(_ => localStorage.setItem('hideWomensModal', 'true'));\n }\n\n private close() {\n this.isVisibleChange.emit(false);\n }\n}\n","export default \"<nz-modal\\n theme\\n class=\\\"modal-women\\\"\\n [(nzVisible)]=\\\"isVisible\\\"\\n [nzContent]=\\\"modalContent\\\"\\n [nzFooter]=\\\"modalFooter\\\"\\n [nzStyle]=\\\"{ top: '100px' }\\\"\\n nzWidth=\\\"400\\\"\\n>\\n <ng-template #modalContent>\\n <div class=\\\"row\\\">\\n <div class=\\\"col-3 align-self-center\\\">\\n <img src=\\\"assets/icons/batom.png\\\" alt=\\\"Batom\\\" class=\\\"logo\\\" />\\n </div>\\n <div class=\\\"col\\\">\\n <h2 class=\\\"title\\\">\\n Parabéns, Mulher!\\n </h2>\\n <p>\\n Que tal comemorar aproveitando descontos especiais, frete grátis e kits exclusivos do\\n <span class=\\\"bold\\\">mês da mulher CR</span>? Clique e aproveite.\\n </p>\\n </div>\\n </div>\\n </ng-template>\\n\\n <ng-template #modalFooter>\\n <button nz-button nzType=\\\"default\\\" (click)=\\\"later()\\\">\\n Ver depois\\n </button>\\n <button nz-button nzType=\\\"primary\\\" (click)=\\\"open()\\\">\\n Quero ver\\n </button>\\n </ng-template>\\n</nz-modal>\\n\";","export default \"::ng-deep .modal-women .title {\\n font-family: \\\"probold\\\";\\n text-align: start;\\n color: var(--color-title);\\n font-size: 30px;\\n}\\n::ng-deep .modal-women .logo {\\n width: 100px;\\n}\\n::ng-deep .modal-women .bold {\\n font-family: \\\"probold\\\";\\n}\\n::ng-deep .modal-women p {\\n font-family: \\\"proregular\\\";\\n line-height: 1.3;\\n text-align: justify;\\n}\\n::ng-deep .modal-women .ant-modal-footer {\\n background-color: var(--bg-modal-header);\\n}\\n::ng-deep .modal-women .ant-btn-default:hover {\\n color: var(--bg-color-primary);\\n border-color: var(--bg-color-primary);\\n}\\n::ng-deep .modal-women .ant-btn-default:focus {\\n color: rgba(0, 0, 0, 0.65);\\n border-color: #d9d9d9;\\n}\\n::ng-deep .modal-women .ant-btn-primary {\\n color: white;\\n background-color: var(--bg-color-primary);\\n border-color: var(--bg-color-primary);\\n}\\n::ng-deep .modal-women .ant-btn-primary:hover {\\n background-color: var(--bg-color-primary);\\n border-color: var(--bg-color-primary);\\n}\";","import { CUSTOM_ELEMENTS_SCHEMA, NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { ModalEditPharmacyTechnicianComponent } from '@app/modules/dashboard/modal-edit-pharmacy-technician/modal-edit-pharmacy-technician.component';\r\nimport { SharedModule } from '@app/shared';\r\nimport { ThemeModule, themeMrd, themeReceitaDigital } from '@app/theme';\r\nimport { environment } from '@env/environment';\r\nimport { ModalModule } from 'ngx-bootstrap/modal';\r\nimport { NgxLoadingModule } from 'ngx-loading';\r\nimport { NgxPhotoEditorModule } from 'ngx-photo-editor';\r\nimport { PatientsModule } from '../patients/patients.module';\r\nimport { DashboardRoutingModule } from './dashboard-routing.module';\r\nimport { ModalCipAcceptanceComponent } from './modal-cip-acceptance/modal-cip-acceptance.component';\r\nimport { ModalComplementInfoPatientComponent } from './modal-complement-info-patient/modal-complement-info-patient.component';\r\nimport { ModalCovidComponent } from './modal-covid/modal-covid.component';\r\nimport { ModalPetFormComponent } from './modal-pet-form/modal-pet-form.component';\r\nimport { ModalRqeWarningComponent } from './modal-rqe-warning/modal-rqe-warning.component';\r\nimport { ModalTelemedicineContractModule } from './modal-telemedicine-contract/modal-telemedicine-contract.module';\r\nimport { ModalWomensMonthComponent } from './modal-womens-month/modal-womens-month.component';\r\nimport { IndexComponent } from './pages/index/index.component';\r\n\r\n@NgModule({\r\n imports: [\r\n SharedModule,\r\n DashboardRoutingModule,\r\n NgxLoadingModule.forRoot({}),\r\n ModalModule.forRoot(),\r\n ModalTelemedicineContractModule,\r\n PatientsModule,\r\n NgxPhotoEditorModule,\r\n ThemeModule.forRoot({ themes: [themeReceitaDigital, themeMrd], active: environment.template })\r\n ],\r\n declarations: [\r\n IndexComponent,\r\n ModalCovidComponent,\r\n ModalCipAcceptanceComponent,\r\n ModalRqeWarningComponent,\r\n ModalWomensMonthComponent,\r\n ModalEditPharmacyTechnicianComponent,\r\n ModalComplementInfoPatientComponent,\r\n ModalPetFormComponent\r\n ],\r\n exports: [ModalCipAcceptanceComponent],\r\n schemas: [CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA]\r\n})\r\nexport class DashboardModule {}\r\n","export * from './markFormGroup';\r\n","import { Fur } from '@app/shared/models';\n\nexport const Furs: Fur[] = [\n { title: 'abricot' },\n { title: 'amarelo' },\n { title: 'arlequim' },\n { title: 'azul aço' },\n { title: 'azul roão' },\n { title: 'bege' },\n { title: 'black and tan' },\n { title: 'boston' },\n { title: 'branca' },\n { title: 'branco e bege' },\n { title: 'branco e cinza' },\n { title: 'branco e marrom' },\n { title: 'branco e preto' },\n { title: 'branco e vermelho' },\n { title: 'bronze' },\n { title: 'caramelo' },\n { title: 'champagne' },\n { title: 'cinza' },\n { title: 'dourado' },\n { title: 'fulvo' },\n { title: 'indefinida' },\n { title: 'manto negro' },\n { title: 'marrom' },\n { title: 'pelo duro (arame)' },\n { title: 'pintado' },\n { title: 'preta' },\n { title: 'preta e amarelo' },\n { title: 'preto e vermelho' },\n { title: 'preto, branco e marrom' },\n { title: 'sal e pimenta' },\n { title: 'tigrado' },\n { title: 'tricolor' },\n { title: 'vermelho' },\n { title: 'vermelho e branco' }\n];\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Patient } from '@app/shared/models';\nimport { environment } from '@env/environment';\nimport { Observable, of } from 'rxjs';\n\nexport const PATIENT_URL = 'patient';\n\n@Injectable({ providedIn: 'root' })\nexport class PatientsService {\n constructor(private http: HttpClient) {}\n\n save(patient: Patient): Observable<Patient> {\n return this.http.post<Patient>(`${environment.apiRoot}${PATIENT_URL}`, patient);\n }\n\n getPatient(id: string): Observable<Patient> {\n return this.http.get<Patient>(`${environment.apiRoot}${PATIENT_URL}`, { params: { id } });\n }\n\n getPatientByCpf(cpf: string): Observable<Patient & Patient[]> {\n return this.http.get<Patient & Patient[]>(`${environment.apiRoot}${PATIENT_URL}`, {\n params: { cpf }\n });\n }\n\n getPatientByEmail(email: string): Observable<Patient[]> {\n return this.http.get<Patient[]>(`${environment.apiRoot}${PATIENT_URL}/?email=${email}`);\n }\n\n getPatients(): Observable<Patient[]> {\n return this.http.get<Patient[]>(`${environment.apiRoot}${PATIENT_URL}`);\n }\n\n getPatientByUserId(userId: string): Observable<Patient> {\n return this.http.get<Patient>(`${environment.apiRoot}${PATIENT_URL}/user/${userId}`);\n }\n\n update(id: string, data: any): Observable<Patient> {\n return this.http.put<Patient>(`${environment.apiRoot}${PATIENT_URL}/${id}`, data);\n }\n\n consultCpf(cpf: string): Observable<any> {\n return this.http.get<any>(`${environment.apiRoot}${PATIENT_URL}/consult/${cpf}`);\n }\n\n getPatientsByFilter(filter: any): Observable<{ patients: Patient[]; totalRecord: number }> {\n return this.http.get<any>(`${environment.apiRoot}${PATIENT_URL}/filter`, { params: filter });\n }\n\n resolvePending() {\n return this.http.post(`${environment.apiRoot}${PATIENT_URL}/pendency`, {});\n }\n\n sendDocument(data) {\n return this.http.post(`${environment.apiRoot}${PATIENT_URL}/send-document`, data);\n }\n\n exportData() {\n return this.http.get(`${environment.apiRoot}${PATIENT_URL}/export`).subscribe((response: any) => {\n const blob = new Blob([response.data], { type: 'text/csv' });\n const a = document.createElement('a');\n a.href = URL.createObjectURL(blob);\n a.download = 'pacientes.csv';\n a.click();\n });\n }\n\n unsubscribePatient(id: string) {\n return this.http.delete(`${environment.apiRoot}${PATIENT_URL}/${id}`);\n }\n\n existsPatient(cpf: string) {\n return this.http.get(`${environment.apiRoot}${PATIENT_URL}/cpf/${cpf}/exists`);\n }\n\n switchReponsible(id: string, cpfNewReponsible: string) {\n return this.http.put(\n `${environment.apiRoot}${PATIENT_URL}/${id}/responsible/${cpfNewReponsible}`,\n {}\n );\n }\n}\n","import { Component, OnInit, TemplateRef, ViewChild } from '@angular/core';\nimport { NzModalRef, NzModalService } from 'ng-zorro-antd/modal';\n\n@Component({\n selector: 'app-unsigned-prescription-modal',\n templateUrl: './unsigned-prescription-modal.component.html',\n styleUrls: ['./unsigned-prescription-modal.component.scss']\n})\nexport class UnsignedPrescriptionModalComponent implements OnInit {\n tplModal: NzModalRef;\n\n @ViewChild('tplTitle')\n tplTitle: TemplateRef<{}>;\n\n @ViewChild('tplContent', { static: true })\n tplContent: TemplateRef<{}>;\n\n @ViewChild('tplFooter', { static: true })\n tplFooter: TemplateRef<{}>;\n\n title: string;\n code: string;\n\n constructor(private modalService: NzModalService) {}\n\n ngOnInit() {}\n\n createTplModal(code: string) {\n this.code = code;\n switch (code[0]) {\n case 'P':\n case 'I':\n this.title = 'Receita salva com sucesso!';\n break;\n case 'A':\n this.title = 'Atestado salvo com sucesso!';\n break;\n case 'E':\n this.title = 'Exame salvo com sucesso!';\n break;\n case 'O':\n this.title = 'Orientação salva com sucesso!';\n break;\n default:\n this.title = 'Documento salvo com sucesso!';\n }\n\n this.tplModal = this.modalService.create({\n nzContent: this.tplContent,\n nzFooter: this.tplFooter,\n nzClosable: false,\n nzWidth: 650,\n nzMaskClosable: false,\n nzOnCancel: () => {},\n nzWrapClassName: 'modal-unsigned-prescription',\n nzOnOk: () => console.log('Click ok')\n });\n }\n\n close(): void {\n this.tplModal.destroy();\n }\n}\n","export default \"<ng-template #tplContent>\\n <div class=\\\"container\\\">\\n <h4 class=\\\"title text-primary\\\">\\n {{ title }}\\n </h4>\\n <p>Código do documento: {{ code }}</p>\\n <br />\\n </div>\\n</ng-template>\\n<ng-template #tplFooter>\\n <div class=\\\"container d-flex align-items-end flex-column modal-footer\\\" theme>\\n <div class=\\\"row\\\">\\n <button (click)=\\\"close()\\\" class=\\\"btn btn-ok\\\" theme>\\n Ok\\n </button>\\n </div>\\n </div>\\n</ng-template>\\n\";","export default \".title {\\n text-transform: none;\\n font-size: 50px;\\n line-height: normal;\\n}\\n\\np {\\n color: #363636;\\n font-size: 20px;\\n font-family: \\\"prolight\\\";\\n}\\n\\n.print-without-sign {\\n font-size: 12px;\\n color: #1b403a;\\n margin-bottom: 0;\\n}\\n\\n.print-without-sign a:not(.btn) {\\n font-family: \\\"problack\\\";\\n text-decoration: underline;\\n}\\n\\n.modal-footer {\\n padding: 10px 32px;\\n background-color: var(--bg-modal-header);\\n}\\n\\n.modal-footer .btn {\\n font-size: 12px;\\n}\\n\\n::ng-deep .ant-modal-body {\\n text-align: center;\\n padding-bottom: 0;\\n}\\n\\n::ng-deep .ant-modal-content {\\n border-radius: 10px;\\n box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16);\\n}\\n\\n::ng-deep .ant-modal-footer {\\n border-radius: 0 0 10px 10px;\\n border-top: 0;\\n padding: 0 !important;\\n}\";","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Buyer } from '@app/shared/models/buyer';\nimport { environment } from '@env/environment';\nimport { Observable, throwError, pipe } from 'rxjs';\n\nconst BUYER_URL = 'buyer';\n\n@Injectable({ providedIn: 'root' })\nexport class BuyerService {\n constructor(private http: HttpClient) {}\n\n public getBuyerByCpf(cpf: string): Observable<Buyer> {\n return this.http.get<Buyer>(`${environment.apiRoot}${BUYER_URL}/${cpf}`);\n }\n\n save(buyer: Buyer): Observable<Buyer> {\n return this.http.post<Buyer>(`${environment.apiRoot}${BUYER_URL}`, buyer);\n }\n\n handleError(error) {\n let errorMessage = '';\n if (error.error instanceof ErrorEvent) {\n // client-side error\n errorMessage = `Error: ${error.error.message}`;\n } else {\n // server-side error\n errorMessage = `Error Code: ${error.status}\\nMessage: ${error.message}`;\n }\n window.alert(errorMessage);\n\n return throwError(errorMessage);\n }\n}\n","import { HttpErrorResponse } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\n\nimport Swal, { SweetAlertIcon, SweetAlertResult } from 'sweetalert2';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SweetalertService {\n notificarSucesso(msg: string): void {\n Swal.fire({\n position: 'center',\n icon: 'success',\n title: msg,\n showConfirmButton: false,\n timer: 1500\n });\n }\n\n notificarWarning(msg: string): void {\n Swal.fire({\n icon: 'warning',\n title: 'Atenção',\n text: msg\n });\n }\n\n notificarWarningComOnClose(msg: string, onClose: (isConfirmed: boolean) => void): void {\n Swal.fire({\n icon: 'warning',\n title: 'Atenção',\n text: msg,\n confirmButtonColor: '#0B6054',\n allowOutsideClick: false\n }).then(result => {\n if (result) {\n onClose(result.isConfirmed);\n }\n });\n }\n\n confirmDialog(title: string, msg: string, icon: SweetAlertIcon = 'info'): Promise<SweetAlertResult> {\n return Swal.fire({\n title,\n text: msg,\n icon,\n showCancelButton: true,\n confirmButtonColor: '#0B6054',\n cancelButtonColor: '#EBEBEB',\n confirmButtonText: 'Sim',\n cancelButtonText: 'Não',\n allowOutsideClick: true\n });\n }\n\n notificarError(\n titulo: string,\n detalhe: string,\n erro: HttpErrorResponse,\n icon: string = 'error'\n ): void {\n const htmlTitle = `<p class='mt-10'>${titulo}</p>`;\n\n let title = 'Ocorreu um erro';\n\n let footer;\n\n let isAlerta: boolean;\n\n if (erro && [400, 401, 402, 403, 404].includes(erro.status)) {\n icon = 'warning';\n title = 'Atenção!';\n isAlerta = true;\n }\n\n if (detalhe) {\n const htmlDetail = `\n <div class='box-log'>\n <div class='box-log-description'>\n ${detalhe}\n </div>\n </div>\n `;\n footer = htmlDetail;\n } else if (isAlerta && erro && erro.error && erro.error.detail) {\n const detail = erro.error.detail;\n const htmlDetail = `\n <div class='box-log'>\n <div class='box-log-description'>\n (${erro.error.status}) - ${detail}\n </div>\n </div>\n `;\n footer = htmlDetail;\n }\n\n const options: any = {\n icon,\n title,\n html: htmlTitle,\n customClass: {\n container: 'box-class-modal-sweetalert',\n confirmButton: 'sweetalert-btn sweetalert-btn-confirm',\n cancelButton: 'sweetalert-btn sweetalert-btn-info'\n },\n buttonsStyling: false,\n showCancelButton: true,\n confirmButtonText: '<i class=\"fa fa-check-circle\"></i> OK',\n cancelButtonText: '<i class=\"fa fa-info-circle\"></i>',\n footer\n };\n Swal.fire(options).then((res: any) => {\n if (res && res.dismiss === 'cancel') {\n const logErroElemento: HTMLElement = document.getElementById('log-erro-menu');\n setTimeout(() => {\n if (logErroElemento) {\n logErroElemento.click();\n }\n }, 500);\n }\n });\n }\n}\n","function webpackEmptyAsyncContext(req) {\n\t// Here Promise.resolve().then() is used instead of new Promise() to prevent\n\t// uncaught exception popping up in devtools\n\treturn Promise.resolve().then(function() {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t});\n}\nwebpackEmptyAsyncContext.keys = function() { return []; };\nwebpackEmptyAsyncContext.resolve = webpackEmptyAsyncContext;\nmodule.exports = webpackEmptyAsyncContext;\nwebpackEmptyAsyncContext.id = \"crnd\";","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Specialty } from '@app/shared/models';\nimport { environment } from '@env/environment';\nimport { Observable } from 'rxjs';\n\nconst SPECIALTY_URL = 'specialty';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SpecialtiesService {\n constructor(private http: HttpClient) {}\n\n getSpecialtiesByType(type: string): Observable<Specialty[]> {\n return this.http.get<any>(`${environment.apiRoot}${SPECIALTY_URL}/${type}`);\n }\n\n save(specialty: Specialty): Observable<Specialty> {\n return this.http.post<Specialty>(`${environment.apiRoot}${SPECIALTY_URL}`, specialty);\n }\n\n update(code, specialty: Specialty): Observable<Specialty> {\n return this.http.put<Specialty>(`${environment.apiRoot}${SPECIALTY_URL}/${code}`, specialty);\n }\n\n delete(specialty: Specialty): Observable<Specialty> {\n return this.http.delete<Specialty>(`${environment.apiRoot}${SPECIALTY_URL}/${specialty._id}`);\n }\n\n getSpecialties(filter: any): Observable<Specialty[]> {\n return this.http.get<Specialty[]>(`${environment.apiRoot}${SPECIALTY_URL}`, {\n params: filter\n });\n }\n}\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { User } from '@app/shared/models/decodedLoginToken';\r\nimport { DataBigboostConsult } from '@app/shared/models/paciente';\r\nimport { environment } from '@env/environment';\r\nimport { CroppedEvent } from 'ngx-photo-editor';\r\nimport { Observable, of } from 'rxjs';\r\nimport { catchError, map, shareReplay } from 'rxjs/operators';\r\nexport const USER_URL = 'user';\r\nconst ACCEPT_MANIPULATED_ACCEPTANCE_TERM = 'user/accept-manipulated-acceptance-term';\r\nconst ACCEPTED_MANIPULATED_TERM = 'user/accepted-manipulated-term';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UserService {\r\n constructor(private http: HttpClient) {}\r\n\r\n private profileAvatar$: Observable<string>;\r\n\r\n /*\r\n * ------------------------\r\n * Cache da Imagem de Perfil\r\n * ------------------------\r\n */\r\n\r\n getAvatar(): Observable<string> {\r\n if (!this.profileAvatar$) {\r\n this.profileAvatar$ = this.http.get<any>(`${environment.apiRoot}${USER_URL}/avatar`).pipe(\r\n shareReplay(1),\r\n map(({ avatar }) => `data:image/jpeg;base64,` + avatar),\r\n catchError(_ => {\r\n return of('');\r\n })\r\n );\r\n }\r\n return this.profileAvatar$;\r\n }\r\n\r\n updateAvatar({ file, base64 }: CroppedEvent): Observable<any> {\r\n const data = new FormData();\r\n\r\n data.append('avatar', file);\r\n return this.http.put<any>(`${environment.apiRoot}${USER_URL}/avatar`, data).pipe(\r\n map(res => {\r\n this.profileAvatar$ = of(base64);\r\n })\r\n ); // on success\r\n }\r\n\r\n clearAvatar(): void {\r\n this.profileAvatar$ = null;\r\n }\r\n\r\n getQuantityUsers(tenantId: string): Observable<any> {\r\n return this.http.get<any>(`${environment.apiRoot}${USER_URL}/quantities`, { params: { tenantId } });\r\n }\r\n\r\n async acceptedManipulatedTerm(userId) {\r\n const response = await this.http\r\n .get<any>(`${environment.apiRoot}${ACCEPTED_MANIPULATED_TERM}/${userId}`)\r\n .toPromise();\r\n return response.manipulatedAccepranceTerm;\r\n }\r\n\r\n update(userId, data): Observable<any> {\r\n return this.http.put<any>(`${environment.apiRoot}${USER_URL}/${userId}`, data);\r\n }\r\n\r\n acceptManipulatedAcceptanceTerm(userId): Observable<any> {\r\n return this.http.put<any>(\r\n `${environment.apiRoot}${ACCEPT_MANIPULATED_ACCEPTANCE_TERM}/${userId}`,\r\n {}\r\n );\r\n }\r\n\r\n getUser(params: any): Observable<any> {\r\n return this.http.get<any>(`${environment.apiRoot}${USER_URL}`, { params });\r\n }\r\n\r\n checkEmailExists(email: string, tenantId?: string): Observable<any> {\r\n const params = { email };\r\n if (tenantId) {\r\n params['tenantId'] = tenantId;\r\n }\r\n return this.http.get<any>(`${environment.apiRoot}${USER_URL}/exists`, { params });\r\n }\r\n\r\n checkWomensMonth(): Observable<any> {\r\n return this.http.put<any>(`${environment.apiRoot}${USER_URL}/women`, {});\r\n }\r\n\r\n checkUi({\r\n doNotShowAgainModalSuccessPrescription,\r\n doNotShowAgainModalNewPortalDigitalSignatures\r\n }: any): Observable<any> {\r\n return this.http.patch<any>(`${environment.apiRoot}${USER_URL}/ui`, {\r\n doNotShowAgainModalSuccessPrescription,\r\n doNotShowAgainModalNewPortalDigitalSignatures\r\n });\r\n }\r\n\r\n getControllerUserUi(id: string): Observable<any> {\r\n return this.http.get<any>(`${environment.apiRoot}${USER_URL}/${id}/ui`);\r\n }\r\n\r\n revalidateCpf({ id, userType }) {\r\n return this.http.post<{ user: User; consult: DataBigboostConsult }>(\r\n `${environment.apiRoot}revalidate/cpf`,\r\n { id, userType }\r\n );\r\n }\r\n}\r\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { PdfData } from '@app/shared/models/pdf-data';\nimport { PdfRequest } from '@app/shared/models/pdf-request';\nimport { environment } from '@env/environment';\nexport const PDF_URL = 'pdf';\n\ninterface UploadResponse {\n message: string;\n url: string;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PdfService {\n private _endpoint = `${environment.apiRoot}${PDF_URL}`;\n\n constructor(private http: HttpClient) {}\n\n get endpoint(): string {\n return this._endpoint;\n }\n\n useV1Endpoint(): void {\n this._endpoint = `${environment.apiV1}/${PDF_URL}`;\n }\n\n generatePdf(code: string, theme: string): Promise<PdfData> {\n const params = { theme };\n return this.http.get<PdfData>(`${this._endpoint}/${code}/generate`, { params }).toPromise();\n }\n\n generateAndSavePdf({ code, draft = false, layout = {} }: PdfRequest): Promise<PdfData> {\n const options = {\n params: {\n ...layout,\n draft: draft.toString(),\n showPrescriberCpf: layout.showPrescriberCpf && layout.showPrescriberCpf.toString()\n }\n };\n return this.http.put<PdfData>(`${this._endpoint}/${code}/save`, {}, options).toPromise();\n }\n\n downloadPdfDocument(code: string, _secretCode = '') {\n const params = _secretCode ? { params: { _secretCode } } : {};\n return this.http.get<PdfData>(`${this._endpoint}/${code}`, params).toPromise();\n }\n\n postFilePdf(file: Blob, code: string): Promise<string> {\n return new Promise(async resolve => {\n const reader = new FileReader();\n reader.onloadend = async event => {\n const base64 = reader.result;\n const res = await this.http\n .post<UploadResponse>(`${this._endpoint}/upload`, { base64, code })\n .toPromise();\n\n resolve(res.url);\n };\n reader.readAsDataURL(file);\n });\n }\n\n openPdf(pdf: PdfData) {\n const pdfBase64 = pdf.data;\n const binary = atob(pdfBase64.split(',')[1].replace(/\\s/g, ''));\n const len = binary.length;\n const buffer = new ArrayBuffer(len);\n const view = new Uint8Array(buffer);\n\n for (let i = 0; i < len; i += 1) {\n view[i] = binary.charCodeAt(i);\n }\n\n const blob = new Blob([view], { type: 'application/pdf' });\n const url = URL.createObjectURL(blob);\n\n const a = document.createElement('a');\n document.body.appendChild(a);\n a.href = url;\n a.download = pdf.filename;\n a.target = '_blank';\n a.click();\n a.remove();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { JwtHelperService } from '@auth0/angular-jwt';\n\nconst KEY = 'token';\n\n@Injectable({ providedIn: 'root' })\nexport class TokenService {\n readonly jwtHelper = new JwtHelperService();\n\n hasToken(): boolean {\n return this.getToken() !== null;\n }\n\n setToken(token: string): void {\n window.localStorage.setItem(KEY, token);\n }\n\n getToken(): string | null {\n return window.localStorage.getItem(KEY);\n }\n\n removeToken(): void {\n window.localStorage.removeItem(KEY);\n }\n\n tokenEstaExpirado() {\n return this.hasToken() && this.jwtHelper.isTokenExpired(this.getToken());\n }\n}\n","import { ActivatedRoute, Router } from '@angular/router';\nimport { Component, OnDestroy, OnInit } from '@angular/core';\n\nimport * as moment from 'moment';\nimport { AuthService } from '../services/auth.service';\nimport { TokenService } from '../security/token/token.service';\nimport { SweetalertService } from '@app/shared/services/sweetalert.service';\nimport { environment } from '@env/environment';\n\n@Component({\n selector: 'app-usuario-inativo',\n template: ``\n})\nexport class UsuarioInativoComponent implements OnInit, OnDestroy {\n readonly validadeSessao = '_validadeSessao';\n readonly quinzeSegundos = 15000;\n readonly intervaloDeTempoParaVerificarSeUsuarioEstaAtivo = this.quinzeSegundos;\n private _validandoSessao = false;\n private _intervalId: any;\n private _tempoDeValidadeDaSessao = environment.tempoDeValidadeDaSessao;\n\n constructor(\n private _authService: AuthService,\n private _tokenService: TokenService,\n private _sweetalertService: SweetalertService,\n private _router: Router\n ) {}\n\n ngOnInit(): void {\n console.info(`tempo de sessão configurado: ${this._tempoDeValidadeDaSessao} minutos`);\n this.renovarTempoDeSessao();\n this.monitorarAtividadeDoUsuario();\n this.monitorarSeUsuarioEstaAtivo();\n }\n\n ngOnDestroy(): void {\n clearInterval(this._intervalId);\n }\n\n renovarTempoDeSessao() {\n const validade = moment()\n .add(this._tempoDeValidadeDaSessao, 'minutes')\n .unix();\n localStorage.setItem(this.validadeSessao, validade.toString());\n this._validandoSessao = false;\n }\n\n monitorarAtividadeDoUsuario() {\n if (!this._authService.isLoggedIn) {\n return;\n }\n\n window.addEventListener('mousemove', this.verificarValidadeDoToken.bind(this), true);\n window.addEventListener('scroll', this.verificarValidadeDoToken.bind(this), true);\n window.addEventListener('keydown', this.verificarValidadeDoToken.bind(this), true);\n }\n\n monitorarSeUsuarioEstaAtivo() {\n this._intervalId = setInterval(() => {\n this.usuarioEstaAtivo();\n }, this.intervaloDeTempoParaVerificarSeUsuarioEstaAtivo);\n }\n\n usuarioEstaAtivo() {\n if (!this._validandoSessao && this._authService.isLoggedIn) {\n this._validandoSessao = true;\n const validadeSessao = parseInt(localStorage.getItem(this.validadeSessao), 10);\n const now = moment().unix();\n if (validadeSessao < now) {\n this.deslogarUsuarioComNotificacao();\n\n this._validandoSessao = false;\n } else {\n this._validandoSessao = false;\n }\n }\n }\n\n verificarValidadeDoToken() {\n if (this._validandoSessao) {\n return;\n }\n\n this._validandoSessao = true;\n const tokenExpirado = this._tokenService.tokenEstaExpirado();\n\n tokenExpirado ? this.deslogarUsuarioComNotificacao() : this.renovarTempoDeSessao();\n }\n\n deslogarUsuarioComNotificacao() {\n this._validandoSessao = false;\n clearInterval(this._intervalId);\n const timeText = environment.tempoDeValidadeDaSessao > 60 ? '4 horas' : '1 hora';\n this._sweetalertService.notificarWarningComOnClose(\n `Tempo de inatividade acima de ${timeText}. É preciso realizar login novamente`,\n () => {\n this._tokenService.removeToken();\n this.pararMonitoramentoDeUsuarioInativo();\n }\n );\n }\n\n pararMonitoramentoDeUsuarioInativo() {\n clearInterval(this._intervalId);\n window.location.href = 'entry/login';\n window.removeEventListener('mousemove', this.verificarValidadeDoToken.bind(this), true);\n window.removeEventListener('scroll', this.verificarValidadeDoToken.bind(this), true);\n window.removeEventListener('keydown', this.verificarValidadeDoToken.bind(this), true);\n }\n}\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { UsuarioInativoComponent } from './usuario-inativo/usuario-inativo.component';\r\n\r\n@NgModule({\r\n imports: [CommonModule],\r\n declarations: [UsuarioInativoComponent],\r\n exports: [UsuarioInativoComponent]\r\n})\r\nexport class CoreModule {}\r\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { AdditionalFeature } from '@app/shared/models';\nimport { environment } from '@env/environment';\nimport { Observable } from 'rxjs';\n\nconst ADDITIONAL_FEATURE_URL = 'additional-feature';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AdditionalFeatureService {\n constructor(private http: HttpClient) {}\n\n save(additionalFeature: AdditionalFeature): Observable<AdditionalFeature> {\n return this.http.post<AdditionalFeature>(\n `${environment.apiRoot}${ADDITIONAL_FEATURE_URL}`,\n additionalFeature\n );\n }\n\n update(code, additionalFeature: AdditionalFeature): Observable<AdditionalFeature> {\n return this.http.put<AdditionalFeature>(\n `${environment.apiRoot}${ADDITIONAL_FEATURE_URL}/${code}`,\n additionalFeature\n );\n }\n\n associateFunctionalities(userId, data: any): Observable<any> {\n return this.http.post<AdditionalFeature>(\n `${environment.apiRoot}${ADDITIONAL_FEATURE_URL}/user/${userId}`,\n data\n );\n }\n\n disassociateFunctionality(userId, featureId) {\n return this.http.delete<AdditionalFeature>(\n `${environment.apiRoot}${ADDITIONAL_FEATURE_URL}/user/disassociate-functionality/${userId}/${featureId}`\n );\n }\n\n getAdditionalFeatures(filter: any): Observable<AdditionalFeature[]> {\n return this.http.get<AdditionalFeature[]>(`${environment.apiRoot}${ADDITIONAL_FEATURE_URL}`, {\n params: filter\n });\n }\n\n getAdditionalFeaturesByUser(userId, filter: any): Observable<any> {\n return this.http.get<any>(`${environment.apiRoot}${ADDITIONAL_FEATURE_URL}/user/${userId}`, {\n params: filter\n });\n }\n\n acceptFeature(code: number) {\n return this.http\n .put<any>(`${environment.apiRoot}${ADDITIONAL_FEATURE_URL}/${code}/accept`, {})\n .toPromise();\n }\n\n refuseFeature(code: number) {\n return this.http\n .delete(`${environment.apiRoot}${ADDITIONAL_FEATURE_URL}/${code}/accept`)\n .toPromise();\n }\n}\n","import { Injectable, Pipe, PipeTransform } from '@angular/core';\r\nimport { OnlyNumbersPipe } from '@app/shared/pipes/only-numbers.pipe';\r\nimport { numeroEspecial } from './helpers';\r\n\r\n@Pipe({\r\n name: 'formattedTel'\r\n})\r\n@Injectable()\r\nexport class FormattedTelPipe implements PipeTransform {\r\n transform(value): string {\r\n if (value && value !== '') {\r\n let tel;\r\n const receivedValue = value ? new OnlyNumbersPipe().transform(value) : value;\r\n if (numeroEspecial(receivedValue) && receivedValue.length === 8) {\r\n tel = receivedValue.substring(0, 3) + '-' + receivedValue.substring(3, receivedValue.length - 3);\r\n } else if (numeroEspecial(receivedValue) && receivedValue.length > 8) {\r\n tel =\r\n receivedValue.substring(0, 3) +\r\n '-' +\r\n receivedValue.substring(4, receivedValue.length - 4) +\r\n '-' +\r\n receivedValue.substring(receivedValue.length - 3, receivedValue.length);\r\n } else if (receivedValue.length > 2 && receivedValue.length <= 7) {\r\n tel = `(${receivedValue.substring(0, 2)}) ${receivedValue.substring(2)}`;\r\n } else if (receivedValue.length <= 2) {\r\n tel = receivedValue.substring(0, 7);\r\n } else if (receivedValue.length === 11) {\r\n tel = `(${receivedValue.substring(0, 2)}) ${receivedValue.substring(\r\n 2,\r\n 7\r\n )}-${receivedValue.substring(7, receivedValue.length)}`;\r\n } else {\r\n tel = `(${receivedValue.substring(0, 2)}) ${receivedValue.substring(\r\n 2,\r\n 6\r\n )}-${receivedValue.substring(6, receivedValue.length)}`;\r\n }\r\n return tel;\r\n }\r\n }\r\n}\r\n","import { HttpClient } from '@angular/common/http';\nimport { HostListener, Injectable } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { OrientationService } from '@app/modules/document/pages/orientation/orientation.service';\nimport { HealthProfessional, Orientation } from '@app/shared/models';\nimport { md5 } from '@app/utils/md5';\nimport { environment } from '@env/environment';\nimport { AttestationService } from './../pages/attestation/attestation.service';\nimport { ExamService } from './exam.service';\nimport { InfusionService } from './infusion.service';\nimport { PdfService } from './pdf.service';\nimport { PrescriptionService } from './prescription.service';\nimport { nativeAsync } from '@app/shared/decorators/nativeAsync';\nimport { Prescription } from '@app/shared/models/prescription';\nimport { Exam } from '@app/shared/models/exam';\nimport { Attestation } from '@app/shared/models/attestation';\n\ninterface PdfSignParams {\n code: string;\n version?: string;\n prescriber: HealthProfessional;\n patientId: string;\n token?: string;\n layout?: any;\n payload?: string;\n callbackUrl?: string;\n showSendDocumentOnCallback?: boolean;\n victaFeature?: boolean;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DocumentService {\n private _model: any;\n private _patientForm: FormGroup;\n private _documentTypeSelected: string;\n private _plusGApp: string;\n private _sharedKey: string;\n\n constructor(\n private prescriptionService: PrescriptionService,\n private attestationService: AttestationService,\n private examService: ExamService,\n private orientationService: OrientationService,\n private infusionService: InfusionService,\n private pdfService: PdfService,\n private http: HttpClient\n ) {}\n\n get model() {\n return this._model;\n }\n\n set model(model: any) {\n this._model = model;\n }\n\n get patientForm() {\n return this._patientForm;\n }\n\n set patientForm(patientForm: FormGroup) {\n this._patientForm = patientForm;\n }\n\n get documentTypeSelected() {\n return this._documentTypeSelected;\n }\n\n set documentTypeSelected(documentType: string) {\n this._documentTypeSelected = documentType;\n }\n\n usePdfV1Endpoint() {\n this.pdfService.useV1Endpoint();\n }\n\n @nativeAsync\n async getDocument(code: string, type?: string): Promise<any> {\n let document = null;\n if (code[0] === 'A' || code.substring(0, 4) === 'VETA' || type === 'attestation') {\n document = await this.attestationService.getAttestation(code).toPromise();\n document.type = 'Atestado';\n } else if (code[0] === 'E' || code.substring(0, 4) === 'VETE' || type === 'exam') {\n document = await this.examService.getExam(code).toPromise();\n document.type = 'Exame';\n } else if (code[0] === 'O' || code.substring(0, 4) === 'VETO' || type === 'orientation') {\n document = await this.orientationService.getOrientation(code).toPromise();\n document.type = 'Outros';\n } else if (code[0] === 'I' || type === 'infusion') {\n document = await this.infusionService.getInfusion(code).toPromise();\n document.type = 'Infusão';\n } else if (code[0] === 'P' || code[0] === 'V' || type === 'prescription' || !type) {\n document = await this.prescriptionService.getPrescriptionbyCode(code).toPromise();\n document.type = 'Prescrição';\n } else if (code.substring(0, 3) === 'REN' || type === 'prescription-renew') {\n document = await this.prescriptionService.getPrescriptionbyCode(code).toPromise();\n document.type = 'Prescrição Rennova';\n }\n\n return document;\n }\n\n archive(code: string) {\n return this.http.put(`${environment.apiRoot}documents/${code}/archive`, {});\n }\n\n unarchive(code: string) {\n return this.http.delete(`${environment.apiRoot}documents/${code}/archive`);\n }\n\n getTotals(tenantId: string) {\n return this.http.get<any>(`${environment.apiRoot}documents/totals`, { params: { tenantId } });\n }\n\n @nativeAsync\n async generateAndOpenPdf(code: string, layout = {}) {\n const pdf = await this.pdfService.generateAndSavePdf({ code, draft: true, layout });\n const link = document.createElement('a');\n link.target = '_blank';\n link.href = pdf.url;\n link.download = pdf.filename;\n link.click();\n link.remove();\n }\n\n @nativeAsync\n async getUrlToSignDocument({\n code,\n version,\n prescriber,\n patientId,\n token,\n layout,\n payload,\n callbackUrl,\n showSendDocumentOnCallback = true,\n victaFeature\n }: PdfSignParams): Promise<string> {\n if (victaFeature) {\n this._plusGApp = `${environment.plusGApp}/institutodosoro`;\n this._sharedKey = environment.envPlusSecretKeyIS;\n } else {\n this._plusGApp = `${environment.plusGApp}/receitadigital`;\n this._sharedKey = environment.envPlusSecretKey;\n }\n\n try {\n const { filename, url: pdfUrl } = await this.pdfService.generateAndSavePdf({ code, layout });\n if (!pdfUrl) {\n throw Error('Erro ao gerar PDF');\n }\n\n return this.buildSignPdfPayload({\n filename,\n pdfUrl,\n prescriber,\n patientId,\n code,\n version,\n token,\n payload,\n callbackUrl,\n showSendDocumentOnCallback\n });\n } catch (err) {\n throw err;\n }\n }\n\n private buildSignPdfPayload({\n filename,\n pdfUrl,\n prescriber,\n patientId,\n code,\n version,\n token,\n payload: payloadB64,\n callbackUrl,\n showSendDocumentOnCallback\n }): string {\n const isBeta = version === 'BETA';\n const path = isBeta ? 'document/new' : 'prescription/new';\n let route = path;\n if (token) {\n if (isBeta) {\n route = `recipe-v2/new/${token}`;\n } else {\n route = `recipe/new/${token}`;\n }\n }\n\n let url = `${window.location.origin}/${route}`;\n\n const params: any = { code };\n if (payloadB64) {\n params.payload = payloadB64;\n }\n\n if (prescriber.professionalType === 'veterinarian') {\n params.petId = patientId;\n } else {\n params.patientId = patientId;\n }\n\n if (callbackUrl) {\n if (showSendDocumentOnCallback) {\n params.callbackUrl = callbackUrl;\n } else {\n url = callbackUrl;\n }\n }\n\n const urlParams = new URLSearchParams(params).toString();\n const host = `${window.location.protocol}//${window.location.hostname}`;\n\n const payload: any = {\n callbackUrl: `${url}?${urlParams}&response=`,\n webhookUrl: `${environment.apiRoot}pdf/upload-signed?code=${code}`,\n ui: {\n username: prescriber.cpf,\n preferPreview: 'description'\n },\n security: {\n allowAddNewDocument: false,\n allowDocumentType: false,\n payloadCallbackUrl: true,\n allowChangeUsername: !environment.production\n },\n files: [\n {\n name: filename,\n description: this.getContent(host),\n src: pdfUrl,\n signatureSetting: {\n id: code,\n type: 'DOC-pdf',\n visibleSignatureField: 'Assinatura',\n visibleSignatureDateFormat: 'd/m/Y\\nH:i:s|TZ|America/Sao_Paulo',\n visibleSignatureCustomTemplateSrc: `${host}/assets/templates/signature.html`\n }\n }\n ]\n };\n\n if (environment.production) {\n payload.certificates = {\n filters: [\n {\n validity: 'now',\n 'issuer=>organizationName': 'ICP-Brasil',\n 'subjectAltName=>otherName=>2.16.76.1.3.1': `********${prescriber.cpf}**************************`\n }\n ]\n };\n }\n\n return this.computeHmacUrl(JSON.stringify(payload).replace(/\\//g, '\\\\/'));\n }\n\n private computeHmacUrl(payloadJson: string): string {\n // Payload\n const payloadEncoded = btoa(payloadJson);\n console.log('payloadEncoded: ', payloadEncoded);\n\n // Compute HMAC\n const time = Math.round(new Date().getTime() / 1000);\n const rand = Math.floor(Math.random() * 9999);\n const nonce = `${time}${rand}`;\n const token = `${nonce}-${md5(`${nonce}${this._sharedKey}${md5(payloadEncoded)}`)}`;\n\n // URL\n return `${this._plusGApp}/${token}/embed?payload=${encodeURIComponent(payloadEncoded)}`;\n }\n\n private getContent(host: string) {\n return `\n <div class=\"d-flex justify-content-center\">\n <img\n class=\"border\"\n src=\"${host}/assets/public/RECEITA_BORRADA_RD_480w.png\"\n alt=\"Receita Borrada Sem efeitos Legais\"\n />\n </div>\n `;\n }\n}\n","import { Injectable } from '@angular/core';\r\nimport { AdminService } from '@app/modules/admin/admin.service';\r\nimport { HealthProfessionalService } from '@app/modules/health-professional/services/health-professional.service';\r\nimport { PatientsService } from '@app/modules/patients/services/patients.service';\r\nimport { PharmacyService } from '@app/modules/pharmacy/services/pharmacy.service';\r\nimport { HealthProfessional, Patient, Pharmacy } from '@app/shared/models';\r\nimport { Administrator } from '@app/shared/models/admin';\r\nimport { Observable } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class RegisterService {\r\n constructor(\r\n private healthProfessionalService: HealthProfessionalService,\r\n private patientService: PatientsService,\r\n private pharmacyService: PharmacyService,\r\n private adminService: AdminService\r\n ) {}\r\n\r\n register(\r\n registerType: string,\r\n data: any\r\n ): Observable<HealthProfessional | Patient | Pharmacy | Administrator> {\r\n data.originHost = window.location.origin;\r\n\r\n switch (registerType) {\r\n case 'doctor':\r\n case 'dentist':\r\n case 'veterinarian':\r\n return this.healthProfessionalService.save(data);\r\n case 'pharmacy':\r\n return this.pharmacyService.save(data);\r\n case 'admin':\r\n return this.adminService.save(data);\r\n default:\r\n return this.patientService.save(data);\r\n }\r\n }\r\n}\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport { HealthProfessionalService } from '@app/modules/health-professional/services/health-professional.service';\nimport { DateUtils } from '@app/shared/data/DateUtils';\nimport { DataBigboostConsult } from '@app/shared/models/paciente';\nimport { Patient } from '@app/shared/models/patient';\nimport { ProfessionalType } from '@app/shared/models/professional-type.enum';\nimport { AppToastService } from '@app/shared/services/app-toast.service';\nimport { logInvalidForm } from '@app/utils/logInvalidForm';\nimport { markFormGroup } from '@app/utils/markFormGroup';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { PatientsService } from '../../services/patients.service';\nimport { PetPatientService } from '../../services/pet-patient.service';\nimport { nativeAsync } from '@app/shared/decorators/nativeAsync';\n\n@Component({\n selector: 'app-modal-add-patient',\n templateUrl: './modal-add-patient.component.html',\n styleUrls: ['./modal-add-patient.component.scss']\n})\nexport class ModalAddPatientComponent {\n @Input() prescriber: any;\n @Input() patient: DataBigboostConsult & Patient;\n @Input() isPet = false;\n @Input() isResponsible = false;\n @Input() existingPatient = false;\n @Input() registeredByResponsible = false;\n @Output() updateListPatientEvent = new EventEmitter<any>();\n\n loading = false;\n form: FormGroup;\n\n constructor(\n private router: Router,\n public modalRef: BsModalRef,\n private patientService: PatientsService,\n private petPatientService: PetPatientService,\n private healthProfessionalService: HealthProfessionalService,\n private notification: AppToastService\n ) {}\n\n get hasPendency() {\n return !this.patient || this.patient.status !== 1;\n }\n\n get isUnderAge() {\n // the pet's age doesn't matter\n if (this.isVeterinarian) {\n return true;\n }\n\n if (!this.hasPendency) {\n const nascimento = this.patient.nascimento;\n return DateUtils.isUnderAge(nascimento, 'DD/MM/YYYY');\n }\n return this.patient.menorIdade;\n }\n\n get isVeterinarian(): boolean {\n return (\n this.isPet ||\n (this.prescriber && this.prescriber.professionalType === ProfessionalType.VETERINARIAN)\n );\n }\n\n @nativeAsync\n async submit() {\n markFormGroup(this.form);\n\n const form = this.form.getRawValue();\n if (!form.pendency && this.patient.status === -1) {\n form.pendency = this.patient;\n }\n\n if (this.form.valid) {\n try {\n this.loading = true;\n markFormGroup(this.form);\n const { responsible } = form;\n if (responsible) {\n const responsibleSaved = responsible._id\n ? await this.updateResponsible(responsible._id, responsible)\n : await this.saveResponsible(responsible);\n form.responsible = responsibleSaved._id;\n }\n\n const msg =\n !form.email && this.isPet\n ? 'O Tutor/Responsável deverá ativar sua conta na plataforma para acessar seu perfil.'\n : 'Acesse seu e-mail e ative sua conta!';\n\n if (!this.registeredByResponsible) {\n const patientSaved = await this.saveAddPatient(form);\n this.notification.notify('success', 'Paciente cadastrado com sucesso!', msg);\n this.updateListPatientEvent.emit(patientSaved);\n } else {\n await this.savePatient(form);\n this.notification.notify('success', 'Parabéns! Cadastro realizado com sucesso.', msg);\n this.router.navigate(['entry/login']);\n }\n this.modalRef.hide();\n } catch (err) {\n console.error(err);\n const msg = err.error ? err.error.message : 'Erro ao salvar paciente';\n if (err.status === 400) {\n this.notification.notify('warning', 'Atenção', msg);\n } else {\n this.notification.notify('error', 'Erro', msg);\n if (msg === 'E-mail já cadastrado') {\n if (this.isVeterinarian) {\n this.form.get('responsible.email').setErrors({ alreadyExists: true });\n } else {\n this.form.get('email').setErrors({ alreadyExists: true });\n }\n } else {\n if (this.isVeterinarian) {\n this.form.get('responsible.email').setErrors(null);\n } else {\n this.form.get('email').setErrors(null);\n }\n }\n }\n } finally {\n this.loading = false;\n }\n } else {\n logInvalidForm(this.form);\n }\n }\n\n private savePatient(patient: any) {\n patient.originHost = window.location.origin;\n if (this.isVeterinarian && this.isPet) {\n return this.petPatientService.save(patient).toPromise();\n }\n return this.patientService.save(patient).toPromise();\n }\n\n private saveResponsible(patient: any) {\n patient.originHost = window.location.origin;\n return this.patientService.save(patient).toPromise();\n }\n\n private updateResponsible(responsibleId, patient: any) {\n patient.originHost = window.location.origin;\n return this.patientService.update(responsibleId, patient).toPromise();\n }\n\n private saveAddPatient(patient: any) {\n patient.originHost = window.location.origin;\n if (this.isVeterinarian) {\n return this.healthProfessionalService.savePetPatient(patient).toPromise();\n }\n\n return this.healthProfessionalService.savePatient(this.prescriber._id, patient).toPromise();\n }\n\n private addPatient(patientId: string) {\n return this.healthProfessionalService.addPatient(this.prescriber._id, patientId).toPromise();\n }\n\n close() {\n this.modalRef.hide();\n }\n}\n","export default \"<div class=\\\"modal-header\\\" theme>\\n <h4 class=\\\"modal-title pull-left text-white\\\">Novo paciente</h4>\\n <button type=\\\"button\\\" class=\\\"close pull-right\\\" aria-label=\\\"Close\\\" (click)=\\\"close()\\\">\\n <span aria-hidden=\\\"true\\\">×</span>\\n </button>\\n</div>\\n<div class=\\\"modal-body\\\">\\n <app-simplified-patient-form\\n *ngIf=\\\"!isUnderAge && !isResponsible && !isVeterinarian\\\"\\n [patient]=\\\"patient\\\"\\n (formChange)=\\\"form = $event\\\"\\n ></app-simplified-patient-form>\\n <app-simplified-underage-patient-form\\n *ngIf=\\\"(isUnderAge || isResponsible) && !isVeterinarian\\\"\\n [patient]=\\\"patient\\\"\\n [isResponsible]=\\\"isResponsible\\\"\\n [existingPatient]=\\\"existingPatient\\\"\\n (formChange)=\\\"form = $event\\\"\\n ></app-simplified-underage-patient-form>\\n <app-simplified-pet-patient-form\\n *ngIf=\\\"isVeterinarian\\\"\\n [responsible]=\\\"patient\\\"\\n [responsibleExists]=\\\"existingPatient\\\"\\n (formChange)=\\\"form = $event\\\"\\n ></app-simplified-pet-patient-form>\\n</div>\\n<div class=\\\"modal-footer\\\">\\n <button class=\\\"ok-btn btn-cancel\\\" nz-button (click)=\\\"close()\\\" theme>\\n Cancelar\\n </button>\\n <button class=\\\"ok-btn btn-salvar\\\" nz-button (click)=\\\"submit()\\\" theme>Salvar <i class=\\\"fa\\\"></i></button>\\n</div>\\n<ngx-loading [show]=\\\"loading\\\" [config]=\\\"{ backdropBorderRadius: '3px' }\\\"></ngx-loading>\\n\";","export default \".modal-body {\\n padding: 30px;\\n}\\n.modal-body input {\\n border-radius: 10px;\\n}\\n.modal-body .btn-save {\\n float: right;\\n padding-top: 7px;\\n padding-bottom: 7px;\\n margin-top: 13px;\\n margin-bottom: 5px;\\n}\\n.modal-body i {\\n font-size: 24px;\\n}\\n.modal-body .mandatory {\\n color: red;\\n}\\n.modal-body input::-webkit-input-placeholder {\\n color: #bdc2c7;\\n}\\n::ng-deep .ant-select-selection {\\n height: 100%;\\n}\\n.modal-header {\\n margin: 0;\\n font-family: \\\"probold\\\";\\n}\\n.modal-body {\\n max-height: 68vh;\\n overflow-y: auto;\\n}\\n.modal-footer {\\n margin: 0;\\n}\\n.btn-salvar,\\n.btn-salvar:hover {\\n color: var(--color-white);\\n background-color: var(--bg-color-primary);\\n border-color: var(--bg-color-primary);\\n}\";","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { environment } from '@env/environment';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\n@Injectable({ providedIn: 'root' })\nexport class CrService {\n constructor(private http: HttpClient) {}\n\n searchMedicament(name: string): Observable<any[]> {\n return this.http\n .get<any>(`${environment.apiRoot}medicaments/search`, { params: { q: name } })\n .pipe(\n map(items =>\n items.map(item => ({\n nome: item.productName,\n apresentacaoCustomizada: item.name,\n tipo: this.translateClassification(item.classification),\n classification: item.classification,\n principio: item.substance,\n laboratorio: item.factory,\n ean: `${item.sku}`,\n typeCr: item.type,\n prescriptionTypeId: item.prescription_type ? item.prescription_type.id : null\n }))\n )\n );\n }\n\n private translateClassification(classification: string) {\n switch (classification) {\n case 'generic':\n return 'Genérico';\n case 'similar':\n return 'Similar';\n case 'reference':\n return 'Referência';\n case 'biologic':\n return 'Biológico';\n case 'interchangeable':\n return 'Similar Intercambiável';\n case 'new':\n return 'Novo';\n case 'specific':\n return 'EspecÃfico';\n case 'other':\n return 'Outro';\n case 'radiofarmac':\n return 'Radiofármaco';\n default:\n return classification;\n }\n }\n}\n","import { FormArray, FormControl, FormGroup } from '@angular/forms';\n\nexport function removeFormGroupValidators(formGroup: FormGroup) {\n if (formGroup.controls) {\n Object.keys(formGroup.controls).forEach(key => {\n const control = formGroup.controls[key];\n if (control instanceof FormControl) {\n control.setValidators(null);\n control.updateValueAndValidity();\n } else if (control instanceof FormGroup) {\n removeFormGroupValidators(control);\n } else if (control instanceof FormArray) {\n control.controls.forEach((ctrl: FormGroup) => removeFormGroupValidators(ctrl));\n }\n });\n }\n}\n","import { animate, group, state, style, transition, trigger } from '@angular/animations';\nimport { Component, EventEmitter, HostListener, Input, OnInit, Output } from '@angular/core';\nimport { FormArray, FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';\nimport { ValidationService } from '@app/core/services/validation.service';\nimport { SpecialtiesService } from '@app/modules/admin/listing/features-listing/specialties.service';\nimport { HealthProfessionalService } from '@app/modules/health-professional/services/health-professional.service';\nimport { PatientsService } from '@app/modules/patients/services/patients.service';\nimport { PharmacistService } from '@app/modules/pharmacist/services/pharmacist.service';\nimport { PharmacyService } from '@app/modules/pharmacy/services/pharmacy.service';\nimport { UserService } from '@app/modules/user/user.service';\nimport { BrazilianStates } from '@app/shared/data/Brazilian-states';\nimport { nativeAsync } from '@app/shared/decorators/nativeAsync';\nimport { BrazilState, Specialty } from '@app/shared/models';\nimport { User } from '@app/shared/models/decodedLoginToken';\nimport { AppToastService } from '@app/shared/services/app-toast.service';\nimport { ThemeService } from '@app/theme';\nimport { markFormGroup } from '@app/utils/markFormGroup';\nimport { removeFormGroupValidators } from '@app/utils/removeFormGroupValidators';\nimport * as moment from 'moment';\nimport { NzModalRef } from 'ng-zorro-antd/modal';\nimport { of } from 'rxjs';\nimport { catchError, debounceTime, distinctUntilChanged, filter, map, switchMap } from 'rxjs/operators';\n\n@Component({\n selector: 'app-modal-edit-personal-data',\n templateUrl: './modal-edit-personal-data.component.html',\n styleUrls: ['./modal-edit-personal-data.component.scss'],\n animations: [\n trigger('slideInOut', [\n state('in', style({ height: '*', opacity: 0 })),\n transition(':leave', [\n style({ height: '*', opacity: 1 }),\n group([animate(300, style({ height: 0 })), animate('400ms ease-in-out', style({ opacity: 0 }))])\n ]),\n transition(':enter', [\n style({ height: 0, opacity: 0 }),\n group([\n animate(300, style({ height: '*' })),\n animate('400ms ease-in-out', style({ opacity: 1 }))\n ])\n ])\n ])\n ]\n})\nexport class ModalEditPersonalDataComponent implements OnInit {\n @Input() user: User;\n @Input() completeUser: any;\n @Input() userTypeLogged: string;\n @Input() touched = false;\n form: FormGroup;\n patientForm: FormGroup;\n pharmacyForm: FormGroup;\n loading = false;\n states: BrazilState[] = BrazilianStates;\n specialtiesOptions: Specialty[] = [];\n selectedSpecialties: string[] = [];\n currentDate = new Date();\n isMobile = false;\n\n @Output() updateUserEvent = new EventEmitter<User>();\n\n constructor(\n private fb: FormBuilder,\n private userService: UserService,\n private healthProfessionalService: HealthProfessionalService,\n private pharmacyService: PharmacyService,\n private pharmacistService: PharmacistService,\n private patientService: PatientsService,\n private nzModalRef: NzModalRef,\n private specialtyService: SpecialtiesService,\n private notification: AppToastService,\n private themeService: ThemeService\n ) {}\n\n ngOnInit() {\n if (this.user.userType === 'patient') {\n this.buildPatientForm();\n } else if (this.user.userType === 'healthProfessional') {\n this.getSpecialties();\n this.buildHealthProfessionalForm();\n } else if (this.user.userType === 'pharmacist') {\n this.buildPharmacistForm();\n } else {\n this.buildPharmacyForm();\n }\n\n if (this.isAdmin) {\n removeFormGroupValidators(this.form);\n } else {\n this.disableFields();\n }\n\n if (this.emailForm) {\n this.emailForm.valueChanges\n .pipe(\n map(email => {\n const value = email && email.toLowerCase();\n this.emailForm.setValue(value, { emitEvent: false });\n return value;\n }),\n filter(_ => this.emailForm.valid),\n debounceTime(400),\n distinctUntilChanged(),\n switchMap(email =>\n email\n ? this.userService\n .checkEmailExists(email, this.completeUser.tenantId)\n .pipe(catchError(err => of(err)))\n : of()\n )\n )\n .subscribe(res => {\n if (res.status === 200) {\n const exists = this.user.email !== res.email;\n this.emailForm.setErrors(exists ? { exists } : null);\n } else if (res.status === 404) {\n this.emailForm.setErrors(null);\n } else if (res.status === 400) {\n this.emailForm.setErrors({ invalid: true });\n }\n });\n }\n this.getScreenSize();\n\n if (this.touched) {\n markFormGroup(this.form);\n }\n }\n\n @HostListener('window:resize', ['$event'])\n private getScreenSize(event?) {\n const { innerWidth: width, innerHeight: height } = window;\n this.isMobile = width < 1025;\n }\n\n get hasAccount() {\n return this.user && !this.user.activationToken && this.user.email;\n }\n\n get isAdmin() {\n return this.userTypeLogged === 'admin';\n }\n\n get emailForm() {\n return this.form.get('email');\n }\n\n get isDentist() {\n return this.completeUser.professionalType === 'dentist';\n }\n\n get isVeterinarian(): boolean {\n return this.completeUser.professionalType === 'veterinarian';\n }\n\n get specialtiesForm() {\n return <FormArray>this.form.get('specialties');\n }\n\n private disableFields() {\n if (this.form.get('cpf') && this.form.value.cpf) {\n this.form.get('cpf').disable();\n }\n\n if (this.form.get('dateOfBirth') && this.form.value.dateOfBirth) {\n this.form.get('dateOfBirth').disable();\n }\n\n if (this.form.get('cnpj')) {\n this.form.get('cnpj').disable();\n }\n\n if (this.themeService.getActiveTheme().name === 'theme-mrd') {\n this.form.get('email').disable();\n }\n }\n\n get popoverContent() {\n return this.user.userType === 'patient'\n ? 'Será utilizado para receber suas receitas e demais documentos via WhatsApp e SMS'\n : 'Será exibido no cabeçalho dos documentos emitidos na plataforma';\n }\n\n private getSpecialties() {\n this.specialtyService\n .getSpecialtiesByType(this.completeUser.professionalType)\n .subscribe(specialties => {\n specialties.forEach(function(item, i) {\n if (item.code === 1) {\n specialties.splice(i, 1);\n specialties.unshift(item);\n }\n });\n this.specialtiesOptions = specialties;\n });\n }\n\n private buildPatientForm() {\n const dateOfBirth =\n this.completeUser.dateOfBirth && this.getDateOfBirth(new Date(this.completeUser.dateOfBirth));\n const email = this.completeUser.user ? this.completeUser.user.email : this.user.email;\n const emailContact = this.completeUser.user\n ? this.completeUser.user.emailContact\n : this.user.emailContact;\n\n this.form = this.fb.group({\n tenantId: [this.completeUser.tenantId],\n fullname: [this.completeUser.fullname, Validators.required],\n name: [this.completeUser.name, Validators.required],\n cellphone: [this.completeUser.cellphone, Validators.required],\n telephone: [this.completeUser.telephone],\n identity: [this.completeUser.identity],\n sex: [this.completeUser.sex, Validators.required],\n cpf: [this.completeUser.cpf, ValidationService.cpfValidator],\n email: [email, Validators.email],\n emailContact: [emailContact, Validators.email],\n dateOfBirth: [dateOfBirth, Validators.required]\n });\n }\n\n private buildPharmacistForm() {\n const dateOfBirth = this.getDateOfBirth(this.completeUser.dateOfBirth);\n const email = this.completeUser.user ? this.completeUser.user.email : this.user.email;\n const emailContact = this.completeUser.user\n ? this.completeUser.user.emailContact || this.completeUser.user.email\n : this.user.email;\n\n this.form = this.fb.group({\n name: [this.completeUser.name, Validators.required],\n cellphone: [this.completeUser.cellphone],\n telephone: [this.completeUser.telephone],\n identity: [this.completeUser.identity],\n cpf: [this.completeUser.cpf],\n email: [email, Validators.email],\n emailContact: [emailContact, Validators.email],\n dateOfBirth: [dateOfBirth, Validators.required]\n });\n }\n\n private buildPharmacyForm() {\n const email = this.completeUser.user ? this.completeUser.user.email : this.user.email;\n this.form = this.fb.group({\n telephone: [this.completeUser.telephone, Validators.required],\n cellphone: [this.completeUser.cellphone],\n fantasyName: [this.completeUser.fantasyName],\n cnpj: [this.completeUser.cnpj, Validators.required],\n email: [email, Validators.email]\n });\n }\n\n private buildHealthProfessionalForm() {\n const dateOfBirth =\n this.completeUser.dateOfBirth && this.getDateOfBirth(this.completeUser.dateOfBirth);\n\n const completeUser = this.completeUser;\n const email = completeUser.user ? completeUser.user.email : this.user.email;\n const emailContact = this.completeUser.user\n ? this.completeUser.user.emailContact || this.completeUser.user.email\n : this.user.email;\n\n this.form = this.fb.group({\n tenantId: [this.completeUser.tenantId],\n fullname: [this.completeUser.fullname, Validators.required],\n name: [completeUser.name],\n sex: [completeUser.sex, Validators.required],\n professionalType: [completeUser.professionalType],\n cellphone: [completeUser.cellphone, Validators.required],\n telephone: [completeUser.telephone],\n regionalCouncilNumber: this.fb.group({\n number: [completeUser.regionalCouncilNumber.number, Validators.required],\n uf: [completeUser.regionalCouncilNumber.uf, Validators.required]\n }),\n cpf: [completeUser.cpf, Validators.required],\n specialties: this.fb.array([], Validators.required),\n email: [email, [Validators.required, Validators.email]],\n emailContact: [emailContact, [Validators.required, Validators.email]],\n dateOfBirth: [dateOfBirth, Validators.required]\n });\n\n if (this.isVeterinarian) {\n this.form.setControl('mapaSipeagro', new FormControl(this.completeUser.mapaSipeagro));\n }\n\n completeUser.specialties.forEach(specialty => {\n const formGroup = this.buildSpecialtyForm(specialty);\n this.specialtiesForm.push(formGroup);\n if (!this.isVeterinarian) {\n const rqeCtrl = <FormGroup>formGroup.controls.rqe;\n if (specialty.notExists !== undefined) {\n this.checkRQE(rqeCtrl, specialty.notExists);\n }\n }\n });\n if (this.isDentist) {\n this.selectedSpecialties = this.specialtiesForm.value.map(({ specialty }) => specialty);\n this.addSpecialties();\n }\n }\n\n private getDateOfBirth(date: Date): string {\n return moment(date)\n .utcOffset(0)\n .format('YYYY-MM-DD');\n }\n\n addSpecialties() {\n if (this.selectedSpecialties.length <= 3) {\n const specialtiesArray = this.selectedSpecialties.map(_id => this.buildSpecialtyForm({ _id }));\n this.form.setControl(\n 'specialties',\n this.fb.array(specialtiesArray, ValidationService.minLengthArray(1))\n );\n } else if (this.selectedSpecialties.length > 3) {\n this.selectedSpecialties.pop();\n this.notification.notify('warning', 'Aviso', 'Você pode escolher no máximo 3 especialidades');\n }\n }\n\n checkRQE(rqeForm: FormGroup, disable: boolean) {\n if (disable) {\n rqeForm.setValidators(null);\n rqeForm.setValue(null);\n rqeForm.disable();\n } else {\n rqeForm.setValidators(Validators.required);\n rqeForm.markAsPristine();\n rqeForm.enable();\n }\n }\n\n addSpecialty() {\n this.specialtiesForm.push(this.buildSpecialtyForm());\n }\n\n private buildSpecialtyForm({ _id = null, rqe = null, notExists = null } = {}) {\n return this.fb.group({\n specialty: [_id, Validators.required],\n rqe: [rqe, this.isDentist || this.isVeterinarian ? null : Validators.required],\n notExists: [notExists]\n });\n }\n\n trackById(index, specialty: Specialty) {\n return specialty ? specialty.code : null;\n }\n\n @nativeAsync\n async submitForm() {\n markFormGroup(this.form);\n if (this.form.invalid) return;\n\n try {\n if (this.form.value.specialties && this.form.value.specialties.length === 0) {\n this.notification.notify(\n 'warning',\n 'Atenção',\n 'Você precisa escolher ao menos uma especialidade.'\n );\n return;\n }\n\n if (this.form.valid) {\n this.loading = true;\n if (this.user.userType === 'patient') {\n this.completeUser = await this.patientService\n .update(this.completeUser._id, this.form.value)\n .toPromise();\n } else if (this.user.userType === 'pharmacist') {\n this.completeUser = await this.pharmacistService\n .update(this.completeUser._id, this.form.value)\n .toPromise();\n } else if (this.user.userType === 'healthProfessional') {\n this.completeUser = await this.healthProfessionalService\n .update(this.completeUser.userId, this.form.value)\n .toPromise();\n } else {\n this.completeUser = await this.pharmacyService\n .update(this.completeUser._id, this.form.value)\n .toPromise();\n }\n this.form.enable();\n this.updateUserEvent.emit(this.completeUser);\n this.loading = false;\n this.nzModalRef.destroy();\n this.notification.notify('success', 'Sucesso', 'Dados salvos com sucesso');\n } else {\n ValidationService.printInvalidFields(this.form);\n }\n } catch (err) {\n this.loading = false;\n console.error(err);\n this.notification.notify('error', 'Erro', 'Não foi possÃvel salvar os dados');\n }\n }\n\n repeatEmailLoginForContact(value: boolean) {\n if (value) {\n const valueEmail = this.form.get('email').value;\n if (valueEmail) {\n this.form.get('emailContact').setValue(valueEmail);\n } else {\n this.form.get('emailContact').setValue(this.user.email);\n }\n } else {\n this.form.get('emailContact').setValue('');\n }\n }\n}\n","export default \"<div theme>\\r\\n <header>\\r\\n <span class=\\\"title\\\">\\r\\n DADOS PESSOAIS\\r\\n </span>\\r\\n </header>\\r\\n <div class=\\\"modal-body\\\">\\r\\n <form nz-form [formGroup]=\\\"form\\\">\\r\\n <div\\r\\n class=\\\"row\\\"\\r\\n *ngIf=\\\"isAdmin && user?.userType !== 'pharmacy' && user?.userType !== 'pharmacist'\\\"\\r\\n >\\r\\n <nz-form-item class=\\\"col-md\\\">\\r\\n <nz-form-label nzFor=\\\"fullname\\\">Nome Completo <span class=\\\"mandatory\\\">*</span></nz-form-label>\\r\\n <nz-form-control>\\r\\n <nz-input-group>\\r\\n <input\\r\\n id=\\\"fullname\\\"\\r\\n type=\\\"text\\\"\\r\\n nz-input\\r\\n formControlName=\\\"fullname\\\"\\r\\n maxlength=\\\"128\\\"\\r\\n autocomplete=\\\"disabled\\\"\\r\\n />\\r\\n </nz-input-group>\\r\\n <nz-form-explain *ngIf=\\\"form.get('fullname').dirty && form.get('fullname').errors\\\">\\r\\n <ng-container *ngIf=\\\"form.get('fullname').hasError('required')\\\">\\r\\n Campo obrigatório, por favor digite o seu nome e sobrenome.\\r\\n </ng-container>\\r\\n </nz-form-explain>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n </div>\\r\\n <div class=\\\"row\\\" *ngIf=\\\"user?.userType !== 'pharmacy'\\\">\\r\\n <nz-form-item class=\\\"col-md\\\">\\r\\n <nz-form-label nzFor=\\\"name\\\"\\r\\n >Nome de exibição/social <span *ngIf=\\\"!isAdmin\\\" class=\\\"mandatory\\\">*</span></nz-form-label\\r\\n >\\r\\n <nz-form-control>\\r\\n <nz-input-group>\\r\\n <input\\r\\n id=\\\"name\\\"\\r\\n type=\\\"text\\\"\\r\\n nz-input\\r\\n formControlName=\\\"name\\\"\\r\\n maxlength=\\\"128\\\"\\r\\n autocomplete=\\\"disabled\\\"\\r\\n />\\r\\n </nz-input-group>\\r\\n <nz-form-explain *ngIf=\\\"form.get('name').dirty && form.get('name').errors\\\">\\r\\n <ng-container *ngIf=\\\"form.get('name').hasError('required')\\\">\\r\\n Campo obrigatório, por favor digite o seu nome e sobrenome.\\r\\n </ng-container>\\r\\n </nz-form-explain>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n\\r\\n <nz-form-item class=\\\"col-md-6\\\" *ngIf=\\\"user.userType === 'healthProfessional'\\\">\\r\\n <nz-form-label nzFor=\\\"sex\\\"\\r\\n >Sexo <span *ngIf=\\\"!isAdmin\\\" class=\\\"mandatory\\\">*</span></nz-form-label\\r\\n >\\r\\n <nz-form-control nzHasFeedback>\\r\\n <select nz-input id=\\\"sex\\\" formControlName=\\\"sex\\\" nzPlaceHolder=\\\"Selecione\\\">\\r\\n <option value=\\\"M\\\">Masculino</option>\\r\\n <option value=\\\"F\\\">Feminino</option>\\r\\n </select>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n </div>\\r\\n <div class=\\\"row\\\">\\r\\n <div class=\\\"col-6\\\">\\r\\n <nz-form-item *ngIf=\\\"form.get('cellphone') as cellphone\\\">\\r\\n <nz-form-label nzFor=\\\"cellphone\\\"\\r\\n >Telefone 1 <span *ngIf=\\\"!isAdmin\\\" class=\\\"mandatory\\\">*</span>\\r\\n <app-popover-button\\r\\n *ngIf=\\\"user.userType === 'healthProfessional' || user.userType === 'patient'\\\"\\r\\n [content]=\\\"popoverContent\\\"\\r\\n ></app-popover-button>\\r\\n </nz-form-label>\\r\\n <nz-form-control>\\r\\n <nz-input-group>\\r\\n <input\\r\\n id=\\\"cellphone\\\"\\r\\n type=\\\"text\\\"\\r\\n nz-input\\r\\n formControlName=\\\"cellphone\\\"\\r\\n placeholder=\\\"(21) 92222-2222\\\"\\r\\n [mask]=\\\"cellphone.value?.length <= 10 ? '(00) 0000-00009' : '(00) 00000-0000'\\\"\\r\\n mask=\\\"(00) 0000-0000\\\"\\r\\n autocomplete=\\\"disabled\\\"\\r\\n />\\r\\n </nz-input-group>\\r\\n <nz-form-explain *ngIf=\\\"cellphone.dirty && cellphone.errors\\\">\\r\\n <ng-container *ngIf=\\\"cellphone.hasError('required')\\\">\\r\\n Campo obrigatório, por favor digite seu telefone para contato.\\r\\n </ng-container>\\r\\n </nz-form-explain>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n </div>\\r\\n <div class=\\\"col-6\\\">\\r\\n <nz-form-item *ngIf=\\\"form.get('telephone') as telephone\\\">\\r\\n <nz-form-label\\r\\n nzFor=\\\"telephone\\\"\\r\\n [ngClass]=\\\"\\r\\n user.userType === 'healthProfessional' || user.userType === 'patient' ? 'cellphone' : ''\\r\\n \\\"\\r\\n >Telefone 2\\r\\n </nz-form-label>\\r\\n\\r\\n <nz-form-control>\\r\\n <nz-input-group>\\r\\n <input\\r\\n id=\\\"telephone\\\"\\r\\n type=\\\"text\\\"\\r\\n nz-input\\r\\n formControlName=\\\"telephone\\\"\\r\\n placeholder=\\\"(21) 2222-2222\\\"\\r\\n [mask]=\\\"telephone.value?.length <= 10 ? '(00) 0000-00009' : '(00) 00000-0000'\\\"\\r\\n autocomplete=\\\"disabled\\\"\\r\\n />\\r\\n </nz-input-group>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n </div>\\r\\n\\r\\n <div class=\\\"col-12\\\" *ngIf=\\\"user.userType === 'healthProfessional' && isVeterinarian\\\">\\r\\n <nz-form-item nzFor=\\\"mapaSipeagro\\\">\\r\\n <nz-form-label>MAPA Sipeagro </nz-form-label>\\r\\n\\r\\n <nz-form-control>\\r\\n <nz-input-group>\\r\\n <input\\r\\n id=\\\"mapaSipeagro\\\"\\r\\n type=\\\"text\\\"\\r\\n nz-input\\r\\n formControlName=\\\"mapaSipeagro\\\"\\r\\n placeholder=\\\"XXXXX/YYYY\\\"\\r\\n autocomplete=\\\"disabled\\\"\\r\\n />\\r\\n </nz-input-group>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n </div>\\r\\n </div>\\r\\n\\r\\n <div\\r\\n class=\\\"row\\\"\\r\\n *ngIf=\\\"user.userType === 'healthProfessional' && form.get('regionalCouncilNumber') as rcn\\\"\\r\\n [formGroup]=\\\"form.get('regionalCouncilNumber')\\\"\\r\\n >\\r\\n <div class=\\\"col-6\\\">\\r\\n <nz-form-item>\\r\\n <nz-form-label nzFor=\\\"number\\\"\\r\\n >{{ rcn.value.label }}<span *ngIf=\\\"!isAdmin\\\" class=\\\"mandatory\\\"> *</span>\\r\\n </nz-form-label>\\r\\n <nz-form-control nzHasFeedback>\\r\\n <nz-input-group>\\r\\n <input\\r\\n id=\\\"number\\\"\\r\\n nz-input\\r\\n type=\\\"text\\\"\\r\\n formControlName=\\\"number\\\"\\r\\n autocomplete=\\\"disabled\\\"\\r\\n inputmode=\\\"numeric\\\"\\r\\n pattern=\\\"[0-9]*\\\"\\r\\n maxlength=\\\"10\\\"\\r\\n digitOnly\\r\\n />\\r\\n </nz-input-group>\\r\\n <nz-form-explain *ngIf=\\\"rcn.get('number').dirty && rcn.get('number').errors\\\">\\r\\n <ng-container *ngIf=\\\"rcn.get('number').hasError('required')\\\">\\r\\n Campo obrigatório, por favor digite seu {{ rcn.value.label }}.\\r\\n </ng-container>\\r\\n </nz-form-explain>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n </div>\\r\\n\\r\\n <div class=\\\"col-6\\\">\\r\\n <nz-form-item>\\r\\n <nz-form-label nzFor=\\\"uf\\\"\\r\\n >UF<span *ngIf=\\\"!isAdmin\\\" class=\\\"mandatory\\\"> *</span></nz-form-label\\r\\n >\\r\\n <nz-form-control nzHasFeedback>\\r\\n <nz-select\\r\\n formControlName=\\\"uf\\\"\\r\\n id=\\\"uf\\\"\\r\\n nzShowSearch\\r\\n nzAllowClear\\r\\n nzDropdownClassName=\\\"account-select\\\"\\r\\n nzPlaceHolder=\\\"Selecione\\\"\\r\\n >\\r\\n <nz-option\\r\\n *ngFor=\\\"let state of states\\\"\\r\\n [nzLabel]=\\\"state?.sigla\\\"\\r\\n [nzValue]=\\\"state?.sigla\\\"\\r\\n >\\r\\n </nz-option>\\r\\n </nz-select>\\r\\n <nz-form-explain\\r\\n *ngIf=\\\"\\r\\n form.get('regionalCouncilNumber.uf').dirty &&\\r\\n form.get('regionalCouncilNumber.uf').errors\\r\\n \\\"\\r\\n >\\r\\n <ng-container *ngIf=\\\"form.get('regionalCouncilNumber.uf').hasError('required')\\\">\\r\\n Campo obrigatório, por favor selecione o UF do {{ rcn.value.label }}.\\r\\n </ng-container>\\r\\n </nz-form-explain>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n </div>\\r\\n\\r\\n <div class=\\\"col-12\\\" *ngIf=\\\"isDentist; else doctorSpecialties\\\">\\r\\n <nz-form-item>\\r\\n <nz-form-label nzFor=\\\"specialties\\\"\\r\\n >Especialidades <span style=\\\"font-size: 10px;\\\">no máximo 3 opções</span\\r\\n ><span *ngIf=\\\"!isAdmin\\\" class=\\\"mandatory\\\"> *</span></nz-form-label\\r\\n >\\r\\n <nz-form-control>\\r\\n <nz-select\\r\\n id=\\\"specialties\\\"\\r\\n nzSize=\\\"large\\\"\\r\\n nzMode=\\\"multiple\\\"\\r\\n nzDropdownClassName=\\\"account-select\\\"\\r\\n nzPlaceHolder=\\\"Selecione a sua especialidade\\\"\\r\\n [(ngModel)]=\\\"selectedSpecialties\\\"\\r\\n (ngModelChange)=\\\"addSpecialties()\\\"\\r\\n [ngModelOptions]=\\\"{ standalone: true }\\\"\\r\\n nzAllowClear\\r\\n nzShowSearch\\r\\n >\\r\\n <nz-option\\r\\n *ngFor=\\\"let specialty of specialtiesOptions; trackBy: trackById\\\"\\r\\n [nzLabel]=\\\"specialty?.description\\\"\\r\\n [nzValue]=\\\"specialty?._id\\\"\\r\\n >\\r\\n </nz-option>\\r\\n </nz-select>\\r\\n <nz-form-explain *ngIf=\\\"specialtiesForm.dirty && specialtiesForm.errors\\\">\\r\\n <ng-container *ngIf=\\\"specialtiesForm.hasError('minLengthArray')\\\">\\r\\n Campo obrigatório, por favor selecione uma especialidade.\\r\\n </ng-container>\\r\\n </nz-form-explain>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n </div>\\r\\n\\r\\n <ng-template #doctorSpecialties>\\r\\n <div\\r\\n class=\\\"col-12\\\"\\r\\n *ngFor=\\\"let specialty of specialtiesForm.controls; let i = index\\\"\\r\\n [@slideInOut]\\r\\n [formGroup]=\\\"specialty\\\"\\r\\n >\\r\\n <div class=\\\"row justify-content-between\\\">\\r\\n <div [ngClass]=\\\"specialtiesForm.length > 1 ? 'col-11' : 'col-12'\\\">\\r\\n <nz-divider nzOrientation=\\\"left\\\"></nz-divider>\\r\\n </div>\\r\\n <div\\r\\n class=\\\"col-1 pl-0 d-flex align-items-center justify-content-center\\\"\\r\\n *ngIf=\\\"specialtiesForm.length > 1\\\"\\r\\n >\\r\\n <a\\r\\n (click)=\\\"$event.preventDefault()\\\"\\r\\n [nzContent]=\\\"contentTemplateSpecialty\\\"\\r\\n class=\\\"popover-trigger\\\"\\r\\n nz-popover\\r\\n nzPlacement=\\\"right\\\"\\r\\n >\\r\\n <i class=\\\"fa fa-ellipsis-solid\\\"></i>\\r\\n </a>\\r\\n <ng-template #contentTemplateSpecialty>\\r\\n <a (click)=\\\"specialtiesForm.removeAt(i)\\\"><i class=\\\"fa fa-trash-solid\\\"></i></a>\\r\\n </ng-template>\\r\\n </div>\\r\\n </div>\\r\\n <div class=\\\"row\\\">\\r\\n <div [ngClass]=\\\"isVeterinarian ? 'col-12' : 'col-7'\\\">\\r\\n <nz-form-item>\\r\\n <nz-form-label [nzFor]=\\\"'specialty_' + i\\\"\\r\\n >Especialidade <span *ngIf=\\\"specialtiesForm.length > 1\\\">{{ i + 1 }}</span>\\r\\n <span *ngIf=\\\"!isAdmin\\\" class=\\\"mandatory\\\"> *</span></nz-form-label\\r\\n >\\r\\n <nz-form-control nzHasFeedback *ngIf=\\\"specialty.get('specialty') as specialtyId\\\">\\r\\n <nz-select\\r\\n [id]=\\\"'specialty_' + i\\\"\\r\\n formControlName=\\\"specialty\\\"\\r\\n nzSize=\\\"large\\\"\\r\\n nzDropdownClassName=\\\"account-select\\\"\\r\\n nzPlaceHolder=\\\"Selecione uma especialidade\\\"\\r\\n nzAllowClear\\r\\n nzShowSearch\\r\\n >\\r\\n <nz-option\\r\\n *ngFor=\\\"let specialty of specialtiesOptions; trackBy: trackById\\\"\\r\\n class=\\\"disableClick\\\"\\r\\n [nzLabel]=\\\"specialty?.title\\\"\\r\\n [nzValue]=\\\"specialty?._id\\\"\\r\\n >\\r\\n </nz-option>\\r\\n </nz-select>\\r\\n <nz-form-explain *ngIf=\\\"specialtyId.dirty && specialtyId.errors\\\">\\r\\n <ng-container *ngIf=\\\"specialtyId.hasError('required')\\\">\\r\\n Campo obrigatório, por favor selecione uma especialidade.\\r\\n </ng-container>\\r\\n </nz-form-explain>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n </div>\\r\\n <div class=\\\"col-5\\\" *ngIf=\\\"!isVeterinarian\\\">\\r\\n <nz-form-item *ngIf=\\\"specialty.get('rqe') as rqe\\\">\\r\\n <label\\r\\n *ngIf=\\\"isMobile\\\"\\r\\n nz-checkbox\\r\\n formControlName=\\\"notExists\\\"\\r\\n (nzCheckedChange)=\\\"checkRQE(rqe, $event)\\\"\\r\\n style=\\\"font-size: 14px;\\\"\\r\\n >Não possuo RQE</label\\r\\n >\\r\\n <div class=\\\"row\\\" *ngIf=\\\"!isMobile\\\">\\r\\n <div class=\\\"col-5 pr-0\\\">\\r\\n <nz-form-label [nzFor]=\\\"'rqe_' + i\\\"\\r\\n >RQE <span *ngIf=\\\"!isAdmin\\\" class=\\\"mandatory\\\">*</span></nz-form-label\\r\\n >\\r\\n </div>\\r\\n <div class=\\\"col pl-0\\\">\\r\\n <label\\r\\n nz-checkbox\\r\\n formControlName=\\\"notExists\\\"\\r\\n (nzCheckedChange)=\\\"checkRQE(rqe, $event)\\\"\\r\\n style=\\\"font-size: 14px;\\\"\\r\\n >Não possuo</label\\r\\n >\\r\\n </div>\\r\\n </div>\\r\\n <nz-form-control nzHasFeedback>\\r\\n <input nz-input [id]=\\\"'rqe_' + i\\\" formControlName=\\\"rqe\\\" maxlength=\\\"20\\\" onlyNumbers />\\r\\n <nz-form-explain *ngIf=\\\"rqe.dirty && rqe.errors\\\">\\r\\n <ng-container *ngIf=\\\"rqe.hasError('required')\\\">\\r\\n Campo obrigatório, por favor informe o RQE da especialidade.\\r\\n </ng-container>\\r\\n </nz-form-explain>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n </div>\\r\\n </div>\\r\\n </div>\\r\\n <div class=\\\"col-12\\\">\\r\\n <button\\r\\n *ngIf=\\\"specialtiesForm.length < 3\\\"\\r\\n (click)=\\\"addSpecialty()\\\"\\r\\n class=\\\"btn btn-icon btn-success btn-add text-capitalize\\\"\\r\\n type=\\\"button\\\"\\r\\n >\\r\\n <span class=\\\"btn-inner--text\\\">Adicionar Outra Especialidade</span>\\r\\n <span class=\\\"btn-inner--icon\\\"><i class=\\\"fa fa-plus\\\"></i></span>\\r\\n </button>\\r\\n </div>\\r\\n </ng-template>\\r\\n </div>\\r\\n\\r\\n <div\\r\\n class=\\\"row\\\"\\r\\n *ngIf=\\\"\\r\\n (user.userType === 'patient' || user.userType === 'pharmacist') &&\\r\\n (userTypeLogged === 'patient' || userTypeLogged === 'pharmacy' || isAdmin)\\r\\n \\\"\\r\\n >\\r\\n <nz-form-item\\r\\n [ngClass]=\\\"user.userType === 'patient' && userTypeLogged === 'patient' ? 'col-6' : 'col'\\\"\\r\\n >\\r\\n <nz-form-label nzFor=\\\"identity\\\">Identidade</nz-form-label>\\r\\n <nz-form-control nzErrorTip=\\\"Campo obrigatório, por favor digite a sua identidade\\\">\\r\\n <nz-input-group>\\r\\n <input\\r\\n id=\\\"identity\\\"\\r\\n type=\\\"text\\\"\\r\\n nz-input\\r\\n formControlName=\\\"identity\\\"\\r\\n placeholder=\\\"ex: 18.040.818-5\\\"\\r\\n maxlength=\\\"12\\\"\\r\\n autocomplete=\\\"disabled\\\"\\r\\n />\\r\\n </nz-input-group>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n\\r\\n <nz-form-item [class.col-6]=\\\"user.userType === 'patient'\\\" *ngIf=\\\"user.userType === 'patient'\\\">\\r\\n <nz-form-label nzFor=\\\"sex\\\"\\r\\n >Sexo<span *ngIf=\\\"!isAdmin\\\" class=\\\"mandatory\\\"> *</span></nz-form-label\\r\\n >\\r\\n <nz-form-control nzHasFeedback>\\r\\n <select formControlName=\\\"sex\\\" id=\\\"sex\\\" nz-input nzPlaceHolder=\\\"Selecione\\\">\\r\\n <option value=\\\"M\\\">Masculino</option>\\r\\n <option value=\\\"F\\\">Feminino</option>\\r\\n </select>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n </div>\\r\\n\\r\\n <ng-container *ngIf=\\\"user.userType == 'pharmacy'\\\">\\r\\n <nz-form-item>\\r\\n <nz-form-label nzFor=\\\"cnpj\\\"\\r\\n >CNPJ <span *ngIf=\\\"!isAdmin\\\" class=\\\"mandatory\\\">*</span></nz-form-label\\r\\n >\\r\\n <nz-form-control nzErrorTip=\\\"Campo obrigatório, por favor digite o seu CNPJ\\\">\\r\\n <nz-input-group>\\r\\n <input\\r\\n id=\\\"cnpj\\\"\\r\\n type=\\\"text\\\"\\r\\n nz-input\\r\\n formControlName=\\\"cnpj\\\"\\r\\n placeholder=\\\"20.259.798/0001-06\\\"\\r\\n mask=\\\"00.000.000/0000-00\\\"\\r\\n autocomplete=\\\"disabled\\\"\\r\\n />\\r\\n </nz-input-group>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n\\r\\n <nz-form-item>\\r\\n <nz-form-label nzFor=\\\"nomeFantasia\\\">Nome Fantasia</nz-form-label>\\r\\n\\r\\n <nz-input-group>\\r\\n <input\\r\\n [attr.id]=\\\"'nomeFantasia'\\\"\\r\\n formControlName=\\\"fantasyName\\\"\\r\\n nz-input\\r\\n formControlName=\\\"fantasyName\\\"\\r\\n placeholder=\\\"ex: Farmácia Dona Santa\\\"\\r\\n autocomplete=\\\"disabled\\\"\\r\\n />\\r\\n </nz-input-group>\\r\\n </nz-form-item>\\r\\n\\r\\n <nz-form-item>\\r\\n <nz-form-label nzFor=\\\"email\\\"\\r\\n >E-mail\\r\\n <span *ngIf=\\\"user.userType === userTypeLogged\\\" class=\\\"mandatory\\\">*</span></nz-form-label\\r\\n >\\r\\n <nz-form-control nzHasFeedback>\\r\\n <nz-input-group>\\r\\n <input\\r\\n id=\\\"email\\\"\\r\\n type=\\\"text\\\"\\r\\n nz-input\\r\\n formControlName=\\\"email\\\"\\r\\n style=\\\"text-transform: lowercase;\\\"\\r\\n (keydown.space)=\\\"$event.preventDefault()\\\"\\r\\n autocomplete=\\\"disabled\\\"\\r\\n />\\r\\n </nz-input-group>\\r\\n <nz-form-explain>\\r\\n <ng-container *ngIf=\\\"emailForm.hasError('exists'); else required\\\">\\r\\n E-mail já existe, por favor escolha outro e-mail.\\r\\n </ng-container>\\r\\n <ng-template #required>\\r\\n <ng-container *ngIf=\\\"emailForm.hasError('required') && emailForm.dirty; else invalid\\\">\\r\\n <span class=\\\"error\\\">Campo obrigatório, por favor digite seu e-mail.</span>\\r\\n </ng-container>\\r\\n </ng-template>\\r\\n <ng-template #invalid>\\r\\n <ng-container *ngIf=\\\"emailForm.invalid && emailForm.value.length > 0\\\">\\r\\n <span class=\\\"error\\\">E-mail inválido, por favor digite um e-mail válido.</span>\\r\\n </ng-container>\\r\\n </ng-template>\\r\\n </nz-form-explain>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n </ng-container>\\r\\n\\r\\n <ng-container *ngIf=\\\"user.userType !== 'pharmacy'\\\">\\r\\n <nz-divider nzOrientation=\\\"left\\\"></nz-divider>\\r\\n\\r\\n <div class=\\\"row\\\">\\r\\n <div class=\\\"col-md-6\\\">\\r\\n <nz-form-item>\\r\\n <div class=\\\"row\\\">\\r\\n <div class=\\\"col-6\\\">\\r\\n <nz-form-label nzFor=\\\"email\\\"\\r\\n >E-mail de login\\r\\n <span class=\\\"mandatory\\\" *ngIf=\\\"user.userType === userTypeLogged\\\"\\r\\n >*</span\\r\\n ></nz-form-label\\r\\n >\\r\\n </div>\\r\\n <div class=\\\"col-6\\\">\\r\\n <label\\r\\n nz-checkbox\\r\\n style=\\\"font-size: 14px;\\\"\\r\\n (nzCheckedChange)=\\\"repeatEmailLoginForContact($event)\\\"\\r\\n >Repetir</label\\r\\n >\\r\\n </div>\\r\\n </div>\\r\\n\\r\\n <nz-form-control nzHasFeedback>\\r\\n <nz-input-group>\\r\\n <input\\r\\n id=\\\"email\\\"\\r\\n type=\\\"text\\\"\\r\\n nz-input\\r\\n formControlName=\\\"email\\\"\\r\\n style=\\\"text-transform: lowercase;\\\"\\r\\n (keydown.space)=\\\"$event.preventDefault()\\\"\\r\\n autocomplete=\\\"disabled\\\"\\r\\n />\\r\\n </nz-input-group>\\r\\n <nz-form-explain *ngIf=\\\"hasAccount\\\">\\r\\n Paciente com conta ativada\\r\\n </nz-form-explain>\\r\\n\\r\\n <nz-form-explain *ngIf=\\\"emailForm.dirty && emailForm.errors\\\">\\r\\n <ng-container *ngIf=\\\"emailForm.hasError('exists')\\\">\\r\\n E-mail já existe, por favor escolha outro e-mail.\\r\\n </ng-container>\\r\\n <ng-container *ngIf=\\\"!emailForm.hasError('exists')\\\">\\r\\n E-mail inválido, por favor digite um e-mail válido.\\r\\n </ng-container>\\r\\n </nz-form-explain>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n </div>\\r\\n\\r\\n <div class=\\\"col-md-6\\\">\\r\\n <nz-form-item *ngIf=\\\"form.get('emailContact') as emailContact\\\">\\r\\n <nz-form-label nzFor=\\\"emailContact\\\"\\r\\n >E-mail de contato\\r\\n <span class=\\\"mandatory\\\" *ngIf=\\\"user.userType === userTypeLogged\\\">*</span></nz-form-label\\r\\n >\\r\\n <nz-form-control nzHasFeedback>\\r\\n <nz-input-group>\\r\\n <input\\r\\n id=\\\"emailContact\\\"\\r\\n type=\\\"text\\\"\\r\\n nz-input\\r\\n formControlName=\\\"emailContact\\\"\\r\\n style=\\\"text-transform: lowercase;\\\"\\r\\n (keydown.space)=\\\"$event.preventDefault()\\\"\\r\\n autocomplete=\\\"disabled\\\"\\r\\n />\\r\\n </nz-input-group>\\r\\n <nz-form-explain *ngIf=\\\"emailContact.dirty && emailContact.errors\\\">\\r\\n <ng-container *ngIf=\\\"emailContact.errors\\\">\\r\\n E-mail inválido, por favor digite um e-mail válido.\\r\\n </ng-container>\\r\\n </nz-form-explain>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n </div>\\r\\n </div>\\r\\n\\r\\n <div class=\\\"row\\\">\\r\\n <nz-form-item\\r\\n *ngIf=\\\"userTypeLogged !== 'pharmacy'\\\"\\r\\n [ngClass]=\\\"user.userType === 'patient' ? 'col-md-6' : 'col-md'\\\"\\r\\n >\\r\\n <nz-form-label nzFor=\\\"cpf\\\"\\r\\n >CPF <span *ngIf=\\\"!isAdmin\\\" class=\\\"mandatory\\\">*</span></nz-form-label\\r\\n >\\r\\n <nz-form-control nzHasFeedback>\\r\\n <nz-input-group>\\r\\n <input\\r\\n id=\\\"cpf\\\"\\r\\n type=\\\"text\\\"\\r\\n nz-input\\r\\n formControlName=\\\"cpf\\\"\\r\\n mask=\\\"000.000.000-00\\\"\\r\\n autocomplete=\\\"disabled\\\"\\r\\n />\\r\\n </nz-input-group>\\r\\n <nz-form-explain *ngIf=\\\"form.get('cpf').dirty && form.get('cpf').errors\\\">\\r\\n <ng-container *ngIf=\\\"form.get('cpf').hasError('required')\\\">\\r\\n O CPF é obrigatório\\r\\n </ng-container>\\r\\n <ng-container\\r\\n *ngIf=\\\"!form.get('cpf').hasError('required') && form.get('cpf').hasError('cpf')\\\"\\r\\n >\\r\\n CPF inválido, por favor digite um CPF válido.\\r\\n </ng-container>\\r\\n </nz-form-explain>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n\\r\\n <nz-form-item\\r\\n *ngIf=\\\"userTypeLogged !== 'pharmacy' && form.get('dateOfBirth') as dateOfBirth\\\"\\r\\n class=\\\"col-md\\\"\\r\\n >\\r\\n <nz-form-label nzFor=\\\"dateOfBirth\\\"\\r\\n >Data de nascimento <span *ngIf=\\\"!isAdmin\\\" class=\\\"mandatory\\\">*</span>\\r\\n </nz-form-label>\\r\\n <nz-form-control nzHasFeedback>\\r\\n <input\\r\\n nz-input\\r\\n id=\\\"dateOfBirth\\\"\\r\\n type=\\\"date\\\"\\r\\n formControlName=\\\"dateOfBirth\\\"\\r\\n [max]=\\\"currentDate\\\"\\r\\n autocomplete=\\\"disabled\\\"\\r\\n />\\r\\n\\r\\n <nz-form-explain *ngIf=\\\"dateOfBirth.dirty && dateOfBirth.errors\\\">\\r\\n <ng-container *ngIf=\\\"dateOfBirth.hasError('required')\\\">\\r\\n Campo obrigatório, por favor digite sua data de nascimento.\\r\\n </ng-container>\\r\\n <ng-container\\r\\n *ngIf=\\\"!dateOfBirth.hasError('required') && dateOfBirth.hasError('dateOfBirth')\\\"\\r\\n >\\r\\n Data de nascimento inválida.\\r\\n </ng-container>\\r\\n </nz-form-explain>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n </div>\\r\\n </ng-container>\\r\\n </form>\\r\\n\\r\\n <div class=\\\"row\\\">\\r\\n <div class=\\\"col-8\\\"></div>\\r\\n\\r\\n <div class=\\\"col-4\\\">\\r\\n <button\\r\\n nz-button\\r\\n type=\\\"button\\\"\\r\\n class=\\\"btn btn-icon btn-ok text-capitalize\\\"\\r\\n (click)=\\\"submitForm()\\\"\\r\\n [disabled]=\\\"!form.valid\\\"\\r\\n [nzLoading]=\\\"loading\\\"\\r\\n >\\r\\n <span class=\\\"btn-inner--text\\\">Salvar</span>\\r\\n </button>\\r\\n </div>\\r\\n </div>\\r\\n </div>\\r\\n</div>\\r\\n\";","export default \"header {\\n width: 100%;\\n padding: 16px 24px;\\n border-bottom: 1px solid #e8e8e8;\\n border-radius: 4px 4px 0 0;\\n position: absolute;\\n top: 0;\\n left: 0;\\n background-color: var(--bg-modal-header);\\n color: var(--color-white);\\n}\\nheader .title {\\n margin: 0;\\n color: var(--color-white);\\n font-weight: 500;\\n font-size: 16px;\\n line-height: 22px;\\n word-wrap: break-word;\\n}\\n.cellphone {\\n padding-bottom: 6px;\\n padding-top: 8px;\\n}\\n.mandatory {\\n color: red;\\n}\\n.modal-body {\\n padding-bottom: 40px;\\n margin-top: 37px;\\n height: 50vh;\\n overflow-y: scroll;\\n}\\n.modal-body input {\\n border-radius: 10px;\\n}\\n.modal-body input::-webkit-input-placeholder {\\n color: #bdc2c7;\\n}\\n@media (max-width: 978px) {\\n .modal-body {\\n padding: 0;\\n }\\n}\\n::ng-deep .ant-select-selection {\\n height: 100%;\\n}\\n.btn {\\n float: right;\\n padding-top: 7px;\\n padding-bottom: 7px;\\n margin-top: 13px;\\n margin-bottom: 5px;\\n font-size: 12px;\\n}\\n.btn-add {\\n display: flex;\\n padding: 0 0 0 1.25rem;\\n height: 40px;\\n align-items: center;\\n border-radius: 10px;\\n overflow: hidden;\\n border: 0;\\n font-family: \\\"probold\\\", sans-serif;\\n background-color: var(--bg-color-secondary);\\n}\\n.btn-add .btn-inner--icon {\\n background-color: var(--bg-color-primary);\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n height: 40px;\\n width: 50px;\\n}\";","import { Injectable } from '@angular/core';\nimport { NzNotificationService } from 'ng-zorro-antd/notification';\n\ntype TypeToast = 'success' | 'info' | 'warning' | 'error';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AppToastService {\n constructor(private notification: NzNotificationService) {}\n\n public notify(type: TypeToast, title: string, subtitle?: string, duration?: number) {\n this.notification.create(type, title, subtitle, {\n nzStyle: {\n 'z-index': 1000000\n },\n nzDuration: !!duration ? duration : 5000\n });\n }\n}\n","export default class DocumentUtil {\n static getAttestationsDays() {\n return [\n { value: 'UM', label: '1 (hum) dia' },\n { value: 'DOIS', label: '2 (dois) dias' },\n { value: 'TRES', label: '3 (três) dias' },\n { value: 'QUATRO', label: '4 (quatro) dias' },\n { value: 'CINCO', label: '5 (cinco) dias' },\n { value: 'SEIS', label: '6 (seis) dias' },\n { value: 'SETE', label: '7 (sete) dias' },\n { value: 'OITO', label: '8 (oito) dias' },\n { value: 'NOVE', label: '9 (nove) dias' },\n { value: 'DEZ', label: '10 (dez) dias' },\n { value: 'ONZE', label: '11 (onze) dias' },\n { value: 'DOZE', label: '12 (doze) dias' },\n { value: 'TREZE', label: '13 (treze) dias' },\n { value: 'QUATORZE', label: '14 (quatorze) dias' },\n { value: 'QUINZE', label: '15 (quinze) dias' },\n { value: 'TRINTA', label: '30 (trinta) dias' },\n { value: 'QUARENTA_CINCO', label: '45 (quarenta e cinco) dias' },\n { value: 'SESSENTA', label: '60 (sessenta) dias' },\n { value: 'NOVENTA', label: '90 (noventa) dias' },\n { value: 'CENTO_OITENTA', label: '180 (cento e oitenta) dias' }\n ];\n }\n\n static getTypesOfActivity() {\n return [\n { value: 'LABORAL', label: 'Laborais' },\n { value: 'ESCOLAR', label: 'Escolares' },\n { value: 'LABORAL_ESCOLAR', label: 'Laborais e Escolares' }\n ];\n }\n}\n","import { BsModalRef } from 'ngx-bootstrap/modal';\nimport {\n Component,\n OnInit,\n Input,\n Output,\n EventEmitter,\n ViewChild,\n AfterViewInit,\n ViewEncapsulation\n} from '@angular/core';\nimport { ColorSetting } from '@app/shared/models/color-setting';\nimport { DocumentModel } from '@app/shared/models/documet-model';\nimport { CrService } from '../../services/cr.service';\nimport { AppToastService } from '@app/shared/services/app-toast.service';\n\n@Component({\n selector: 'app-model-list-favorite-prescription',\n templateUrl: './model-list-favorite-document.component.html',\n styleUrls: ['./model-list-favorite-document.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class ModelListFavoriteDocumentComponent {\n @Input() documentsTemplate: DocumentModel[];\n @Input() documentType: string;\n @Input() colorSetting: ColorSetting;\n @Input() hideEdit = false;\n @Output() selectEvent = new EventEmitter<DocumentModel>();\n @Output() editEvent = new EventEmitter<DocumentModel>();\n @Output() deleteEvent = new EventEmitter<string>();\n\n @ViewChild('modalHeader') modalHeader: HTMLDivElement;\n\n typesOfDocuments = ['Prescrição', 'Exame', 'Atestado', 'Outros'];\n\n loadingSearchMedicament = false;\n\n constructor(\n public modalRef: BsModalRef,\n private crService: CrService,\n private toast: AppToastService\n ) {}\n\n activeChange(item: DocumentModel) {\n item.active = !item.active;\n }\n\n async onSelect(item: DocumentModel) {\n if (item.document === 'prescription') {\n await this.updateMedicaments(item);\n }\n this.selectEvent.emit(item);\n this.modalRef.hide();\n }\n\n async onEdit(item: DocumentModel) {\n if (item.document === 'prescription') {\n await this.updateMedicaments(item);\n }\n this.editEvent.emit(item);\n this.modalRef.hide();\n }\n\n onDelete(item: DocumentModel) {\n this.deleteEvent.emit(item.id);\n }\n\n getText(arrayText: any[]) {\n return arrayText.reduce((acc, val) => (acc ? `${acc}\\n${val}` : val), '');\n }\n\n async updateMedicaments(prescription: DocumentModel) {\n for await (const medicament of prescription.medicaments) {\n if (!!medicament.ean) {\n this.loadingSearchMedicament = true;\n try {\n const medicamentsCR = await this.crService.searchMedicament(medicament.ean).toPromise();\n if (medicamentsCR.length > 0) {\n const medicamentCR = medicamentsCR[0];\n medicament.name = medicamentCR.nome;\n medicament.prescriptionTypeId = medicamentCR.prescriptionTypeId;\n medicament.typeCr = medicamentCR.typeCr;\n medicament.type = 'industrialized';\n medicament.laboratory = medicamentCR.laboratorio;\n medicament.description = medicamentCR.apresentacaoCustomizada;\n medicament.medicamentId = medicamentCR.id;\n medicament.principle = medicamentCR.principio;\n }\n } catch (error) {\n console.log(error);\n this.toast.notify('error', 'Erro ao consultar dados do medicamento.');\n } finally {\n this.loadingSearchMedicament = false;\n }\n } else {\n medicament.type = 'free-text';\n }\n }\n }\n}\n","export default \"<div class=\\\"favorite-document-modal\\\" theme>\\n <div\\n class=\\\"modal-header\\\"\\n #modalHeader\\n [ngStyle]=\\\"{\\n 'background-color': colorSetting?.primary,\\n 'border-color': colorSetting?.primary\\n }\\\"\\n >\\n <h4 class=\\\"modal-title pull-left text-white\\\">Modelos de {{ documentType }}</h4>\\n <button type=\\\"button\\\" class=\\\"close pull-right\\\" aria-label=\\\"Close\\\" (click)=\\\"modalRef.hide()\\\">\\n <span aria-hidden=\\\"true\\\">×</span>\\n </button>\\n </div>\\n <div class=\\\"body prescription\\\">\\n <nz-list nzBordered>\\n <nz-list-item *ngFor=\\\"let item of documentsTemplate\\\">\\n <div>\\n <div class=\\\"row header prescription align-items-center\\\">\\n <div class=\\\"col-1\\\" (click)=\\\"activeChange(item)\\\">\\n <i nz-icon nzType=\\\"right\\\" *ngIf=\\\"!item.active\\\" nzTheme=\\\"outline\\\"></i>\\n <i nz-icon nzType=\\\"down\\\" *ngIf=\\\"item.active\\\" nzTheme=\\\"outline\\\"></i>\\n </div>\\n\\n <div class=\\\"col pt-2\\\" (click)=\\\"activeChange(item)\\\">\\n <h6>{{ item.title }}</h6>\\n </div>\\n\\n <div class=\\\"p-1\\\">\\n <button\\n class=\\\"ok-btn btn-selecionar\\\"\\n nz-button\\n (click)=\\\"onSelect(item)\\\"\\n [ngStyle]=\\\"{\\n 'background-color': colorSetting?.secondary,\\n 'border-color': colorSetting?.secondary\\n }\\\"\\n >\\n Adicionar\\n </button>\\n </div>\\n\\n <div class=\\\"pl-0\\\">\\n <button (click)=\\\"onDelete(item)\\\" title=\\\"Excluir\\\" class=\\\"btn btn-trash\\\">\\n <span class=\\\"btn-inner--icon\\\"><i class=\\\"fa fa-trash-solid position-inherit\\\"></i></span>\\n </button>\\n </div>\\n </div>\\n\\n <div *ngIf=\\\"item.active && documentType === typesOfDocuments[0]\\\">\\n <div *ngFor=\\\"let medicament of item.medicaments\\\">\\n <br />\\n <p><span class=\\\"bold\\\">Nome:</span> {{ medicament.name }}</p>\\n <p><span class=\\\"bold\\\">PrincÃpio ativo:</span> {{ medicament.principle }}</p>\\n <p><span class=\\\"bold\\\">Descrição:</span> {{ medicament.description }}</p>\\n <p><span class=\\\"bold\\\">Quantidade:</span> {{ medicament.prescribedQuantity }}</p>\\n <p><span class=\\\"bold\\\">Posologia:</span> {{ medicament.dosage }}</p>\\n </div>\\n </div>\\n <div *ngIf=\\\"item.active && documentType === typesOfDocuments[1]\\\">\\n <div *ngFor=\\\"let row of item.examList\\\">\\n Material: {{ row.material }}\\n <div>\\n Exames:\\n <ul>\\n <p *ngFor=\\\"let exam of row.exams\\\">{{ exam.name }}</p>\\n </ul>\\n </div>\\n <div *ngIf=\\\"getText(item.justification)\\\">\\n <p class=\\\"mt-4 mb-0\\\">Justificativa:</p>\\n <ul>\\n <p *ngFor=\\\"let j of item.justification\\\">{{ j }}</p>\\n </ul>\\n </div>\\n </div>\\n </div>\\n <div *ngIf=\\\"item.active && documentType === typesOfDocuments[2]\\\">\\n <div>\\n <br />\\n <p>{{ getText(item.description) }}</p>\\n </div>\\n </div>\\n <div *ngIf=\\\"item.active && documentType === typesOfDocuments[3]\\\">\\n <div>\\n <br />\\n <p>{{ getText(item.orientations) }}</p>\\n </div>\\n </div>\\n </div>\\n </nz-list-item>\\n </nz-list>\\n <br />\\n </div>\\n</div>\\n\\n<ngx-loading\\n *ngIf=\\\"loadingSearchMedicament\\\"\\n [show]=\\\"loading\\\"\\n [config]=\\\"{ backdropBorderRadius: '3px' }\\\"\\n></ngx-loading>\\n\";","export default \".favorite-document-modal .modal-header {\\n font-family: \\\"probold\\\";\\n width: 500px;\\n}\\n.favorite-document-modal .header {\\n border-bottom: 1px solid #dcdcdc;\\n background-color: #dcdcdc;\\n width: 480px;\\n min-height: 40px;\\n}\\n.favorite-document-modal .header i {\\n cursor: pointer;\\n}\\n.favorite-document-modal .bold {\\n font-weight: bold;\\n}\\n.favorite-document-modal p {\\n font-size: 14px;\\n margin: 0;\\n}\\n.favorite-document-modal .col {\\n align-self: center;\\n}\\n@media (max-width: 575px) {\\n .favorite-document-modal .body.prescription .ant-spin-container,\\n.favorite-document-modal .body.prescription .ant-list-item,\\n.favorite-document-modal .body.prescription .ng-star-inserted {\\n width: 100%;\\n }\\n .favorite-document-modal .col-1 {\\n display: none;\\n }\\n .favorite-document-modal .header.prescription {\\n position: relative;\\n width: 100% !important;\\n margin: 0;\\n height: auto;\\n min-height: 42px;\\n }\\n .favorite-document-modal .header.prescription h6 {\\n margin-right: 20px;\\n }\\n}\\n.favorite-document-modal .action-buttons {\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n}\\n.favorite-document-modal .position-inherit {\\n position: inherit !important;\\n}\\n.favorite-document-modal textarea {\\n box-sizing: border-box;\\n width: 100%;\\n}\\n.favorite-document-modal .btn-selecionar {\\n color: var(--color-white);\\n background-color: var(--bg-color-primary);\\n border-color: var(--bg-color-primary);\\n box-shadow: 0 4px 6px rgba(50, 50, 93, 0.11), 0 1px 3px rgba(0, 0, 0, 0.08);\\n}\\n.favorite-document-modal .btn-selecionar::-moz-selection {\\n color: var(--color-white);\\n background-color: var(--bg-color-secondary);\\n border-color: var(--bg-color-secondary);\\n}\\n.favorite-document-modal .btn-selecionar:hover,\\n.favorite-document-modal .btn-selecionar:active,\\n.favorite-document-modal .btn-selecionar::selection {\\n color: var(--color-white);\\n background-color: var(--bg-color-secondary);\\n border-color: var(--bg-color-secondary);\\n}\\n.favorite-document-modal .btn-edit,\\n.favorite-document-modal .btn-trash {\\n padding: 8px;\\n}\";","import { Directive, OnInit, OnDestroy, ElementRef } from '@angular/core';\nimport { ThemeService } from './theme.service';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { Theme } from './symbols';\n\n@Directive({\n selector: '[theme]'\n})\nexport class ThemeDirective implements OnInit, OnDestroy {\n private _destroy$ = new Subject();\n\n constructor(private _elementRef: ElementRef, private _themeService: ThemeService) {}\n\n ngOnInit() {\n const active = this._themeService.getActiveTheme();\n if (active) {\n this.updateTheme(active);\n }\n\n this._themeService.themeChange\n .pipe(takeUntil(this._destroy$))\n .subscribe((theme: Theme) => this.updateTheme(theme));\n }\n\n ngOnDestroy() {\n this._destroy$.next();\n this._destroy$.complete();\n }\n\n updateTheme(theme: Theme) {\n // project properties onto the element\n for (const key in theme.properties) {\n this._elementRef.nativeElement.style.setProperty(key, theme.properties[key]);\n }\n\n // remove old theme\n for (const name of this._themeService.theme) {\n this._elementRef.nativeElement.classList.remove(`${name}-theme`);\n }\n\n // alias element with theme name\n this._elementRef.nativeElement.classList.add(`${theme.name}-theme`);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\nimport { ACTIVE_THEME, ThemeOptions, THEMES } from './symbols';\nimport { ThemeDirective } from './theme.directive';\n\n@NgModule({\n imports: [CommonModule],\n declarations: [ThemeDirective],\n exports: [ThemeDirective]\n})\nexport class ThemeModule {\n static forRoot(options: ThemeOptions): ModuleWithProviders<ThemeModule> {\n return {\n ngModule: ThemeModule,\n providers: [\n {\n provide: THEMES,\n useValue: options.themes\n },\n {\n provide: ACTIVE_THEME,\n useValue: options.active\n }\n ]\n };\n }\n}\n","import { Theme } from './symbols';\n\nexport const themeReceitaDigital: Theme = {\n title: 'Receita Digital',\n name: 'theme-receita-digital',\n favicon: 'assets/icons/favicon.ico',\n properties: {\n '--color-white': '#FFFFFF',\n '--color-black': '#000000',\n '--color-alert': '#e94a3c',\n '--color-icon-menu': '#0B6054',\n '--color-title': '#1b403a',\n '--color-hover-item-menu': '#5ce1c2',\n '--bg-color-primary': '#0B6054',\n '--on-bg-color-primary': '#FFFFFF',\n '--bg-color-secondary': '#17C6AC',\n '--on-bg-color-secondary': '#0B6054',\n '--bg-color-cinza-escuro': '#494949',\n '--on-bg-color-cinza-escuro': '#FFFFFF',\n '--bg-color-cinza-intermediario': '#797979',\n '--on-bg-color-cinza-intermediario': '#FFFFFF',\n '--bg-color-cinza-claro': '#EBEBEB',\n '--on-bg-color-cinza-claro': '#4B4945',\n '--bg-footer': '#0B6054',\n\n '--background-header': '#17C6AC',\n '--on-background-header': '#0B6054',\n '--background-section': '#0B6054',\n '--background-card-prescricao': '#17C6AC',\n '--background-card-historico': '#4D4D4D',\n '--background-card-pacientes': '#EBEBEB',\n '--color-card-pacientes': '#4d4d4d',\n '--background-card-meus-dados': '#363636',\n '--background-card-tele-consulta': '#363636',\n '--backgorund-card-agenda-virtual': '#17C6AC',\n '--background-card-modelo-favorito': '#5ce1c2',\n\n '--color-label-input': '#0b6054',\n '--color-input-border-hover': '#bcfdec',\n '--bg-input-text': '#f1fffc',\n\n '--bg-color-btn-success': '#00d3b2',\n '--bd-color-btn-success': '#00d3b2',\n '--color-btn-success': '#FFF',\n '--bg-color-btn-save': '#17C6AC',\n\n '--bg-select': 'rgba(101, 242, 218, 0.5)',\n '--bd-select': '#17c6ac',\n '--color-select-placeholder': '#0b6054',\n\n '--bg-btn-menu': '#0B6054',\n\n '--bg-data-profile': '#5ce1c2',\n '--bg-sub-header-pacientes': '#5ce1c2',\n\n '--bg-modal-header': '#4cbca3',\n\n '--color-primary': '#4cbca3'\n }\n};\n","import { Theme } from './symbols';\n\nexport const themeMrd: Theme = {\n title: 'Meu Receituário',\n name: 'theme-mrd',\n favicon: 'assets/img/mrd/logo-03.png',\n properties: {\n '--color-white': '#FFFFFF',\n '--color-black': '#000000',\n '--color-alert': '#FFFF00',\n '--color-icon-menu': '#FFFFFF',\n '--color-title': '#494949',\n '--color-hover-item-menu': '#ccc',\n '--bg-color-primary': '#EB5E54',\n '--on-bg-color-primary': '#FFFFFF',\n '--bg-color-secondary': '#F69487',\n '--on-bg-color-secondary': '#FFFFFF',\n '--bg-color-cinza-escuro': '#494949',\n '--on-bg-color-cinza-escuro': '#FFFFFF',\n '--bg-color-cinza-intermediario': '#797979',\n '--on-bg-color-cinza-intermediario': '#FFFFFF',\n '--bg-color-cinza-claro': '#EBEBEB',\n '--on-bg-color-cinza-claro': '#4B4945',\n '--bg-footer': '#494949',\n\n '--background-header': '#494949',\n '--on-background-header': '#FFF',\n '--background-section': '#797979',\n '--background-card-prescricao': '#F59487',\n '--background-card-historico': '#494949',\n '--background-card-pacientes': '#EBEBEB',\n '--color-card-pacientes': '#494949',\n '--background-card-meus-dados': '#EB5E53',\n '--background-card-tele-consulta': '#EBEBEB',\n '--backgorund-card-agenda-virtual': '#17C6A6',\n '--background-card-modelo-favorito': '#acacac',\n\n '--color-label-input': '#494949',\n '--color-input-border-hover': '#ccc',\n '--bg-input-text': '#fdece9',\n\n '--bg-color-btn-success': '#797979',\n '--bd-color-btn-success': '#494949',\n '--color-btn-success': '#FFF',\n '--bg-color-btn-save': '#EB5E54',\n\n '--bg-select': '#e5e5e5',\n '--bd-select': '#494949',\n '--color-select-placeholder': '#000',\n\n '--bg-btn-menu': '#d72a12',\n\n '--bg-data-profile': '#EB5E53',\n '--bg-sub-header-pacientes': '#acacac',\n\n '--bg-modal-header': '#F59487',\n\n '--color-primary': '#d72a12'\n }\n};\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { AuthService } from '@app/core/services/auth.service';\nimport { PdfService } from '@app/modules/document/services/pdf.service';\nimport { PATIENT_URL } from '@app/modules/patients/services/patients.service';\nimport { nativeAsync } from '@app/shared/decorators/nativeAsync';\nimport { Patient } from '@app/shared/models';\nimport { User } from '@app/shared/models/decodedLoginToken';\nimport { PdfData } from '@app/shared/models/pdf-data';\nimport { Prescription } from '@app/shared/models/prescription';\nimport { StateService } from '@app/shared/services/state.service';\nimport { ThemeService } from '@app/theme';\nimport { environment } from '@env/environment';\nimport { Observable } from 'rxjs';\nimport { tap } from 'rxjs/operators';\n\nexport const PRESCRIPTION_URL = `prescription`;\nexport const PRESCRIPTION_PATIENT_URL = `prescription/patient`;\nexport const PRESCRIPTION_PRESCRIBER_URL = `prescription/prescriber`;\nexport const MEDICAMENT_URL = 'medicament';\n\n@Injectable({ providedIn: 'root' })\nexport class PrescriptionService {\n private savedPatient = false;\n\n medicamentsRetained = [];\n prescription: any;\n pdfBase64: any;\n filename: string;\n\n constructor(\n private http: HttpClient,\n private pdfService: PdfService,\n private themeService: ThemeService,\n private authService: AuthService,\n private stateService: StateService\n ) {}\n\n private get theme() {\n return this.themeService.getActiveTheme().name;\n }\n\n private get rennovaFeature(): boolean {\n const user: User = this.authService.user();\n return (\n user &&\n user.features.some(f => f.name === 'Rennova') &&\n this.stateService.data &&\n this.stateService.data.isRennova\n );\n }\n\n save(prescription: any) {\n if (prescription.code) {\n return this.http.put(\n `${environment.apiRoot}${PRESCRIPTION_URL}/${prescription.code}`,\n prescription\n );\n }\n return this.http.post(`${environment.apiRoot}${PRESCRIPTION_URL}`, prescription);\n }\n\n getMedicationsPrescription(prescriptionCode) {\n return this.http\n .get(`${environment.apiRoot}${PRESCRIPTION_URL}/${prescriptionCode}/medicamentsAfterRetetion`)\n .toPromise()\n .then((res: any) => {\n return res.map(m => ({ ...m, valid: false }));\n });\n }\n\n getPrescriptionsPatient(param: string): Observable<Prescription[]> {\n return this.http.get<Prescription[]>(`${environment.apiRoot}${PRESCRIPTION_URL}/find/${param}`);\n }\n\n getPrescriptionsByPatientId(patientId: string, filter: any): Observable<any> {\n return this.http.get<any>(`${environment.apiRoot}${PRESCRIPTION_PATIENT_URL}/${patientId}`, {\n params: filter\n });\n }\n\n getPrescriptionsByPrescriberUserId(prescriber: string, filter: any): Observable<any> {\n return this.http.get<any>(`${environment.apiRoot}${PRESCRIPTION_PRESCRIBER_URL}/${prescriber}`, {\n params: filter\n });\n }\n\n getPrescription(prescriptionCode): Observable<Prescription> {\n return this.http.get<Prescription>(`${environment.apiRoot}${PRESCRIPTION_URL}/${prescriptionCode}`);\n }\n\n getPrescriptionbyCode(prescriptionCode): Observable<Prescription> {\n return this.http\n .get<Prescription>(`${environment.apiRoot}${PRESCRIPTION_URL}/code/${prescriptionCode}`)\n .pipe(\n tap(prescription => {\n if (prescription.pet) {\n prescription.patient = prescription.pet as any;\n }\n })\n );\n }\n\n getPrescriptions(): Observable<Prescription[]> {\n return this.http.get<Prescription[]>(`${environment.apiRoot}${PRESCRIPTION_URL}`);\n }\n\n getPrescriptionsByFilter(filter: any): Promise<Prescription[]> {\n return this.http\n .get<Prescription[]>(`${environment.apiRoot}${PRESCRIPTION_URL}/filter`, {\n params: filter\n })\n .toPromise();\n }\n\n getPatientPrescription(prescriptionCode): Observable<Patient> {\n return this.http.get<Patient>(\n `${environment.apiRoot}${PRESCRIPTION_URL}/${prescriptionCode}/patient`\n );\n }\n\n getPatients(payload: string): Observable<Patient[]> {\n payload = this.unMask(payload);\n const prefix = this.onlyNumbers(payload) ? 'cpf/' : 'name/';\n return this.http.get<Patient[]>(`${environment.apiRoot}${PATIENT_URL}/${prefix}${payload}`);\n }\n\n getPrescriptionByPdf(pdf: Blob) {\n const formData = new FormData();\n formData.append('pdf', pdf);\n return this.http\n .post<any>(`${environment.apiRoot}bundle`, formData)\n .pipe(\n tap(prescription => {\n this.prescription = prescription;\n this.blobToBase64(pdf).then(base64 => (this.pdfBase64 = base64));\n })\n )\n .toPromise();\n }\n\n postDispensation(dispensation: any) {\n return this.http.post(`${environment.apiRoot}bundle/dispensation`, dispensation).toPromise();\n }\n\n private unMask(value: string): string {\n return value.replace(/[\\.\\-]+/g, '');\n }\n\n private onlyNumbers(value: String): Boolean {\n return value.match(/^[0-9]+$/) != null;\n }\n\n confirm(retention, pharmacyId, code) {\n localStorage.setItem('medicamentsRetained', JSON.stringify(retention.medicamentsRetained));\n const headers = new HttpHeaders().set('Content-Type', 'application/json');\n return this.http\n .put(\n `${environment.apiRoot}${PRESCRIPTION_URL}/${code}/retain`,\n { retention, pharmacyId },\n { headers }\n )\n .toPromise()\n .then(res => {\n return res;\n });\n }\n\n setSavedPatient(): void {\n this.savedPatient = true;\n }\n\n getSavedPatient(): boolean {\n return this.savedPatient;\n }\n\n setMedicamentsRetained(medicaments): void {\n this.medicamentsRetained = medicaments;\n }\n\n getMedicamentsRetained() {\n return this.medicamentsRetained;\n }\n\n @nativeAsync\n async downloadPrescriptionPdf(code: string, secretCode = '') {\n const pdf = await this.pdfService.downloadPdfDocument(code, secretCode);\n this.pdfService.openPdf(pdf);\n return pdf;\n }\n\n @nativeAsync\n async generatePdf(code: string) {\n const param = this.rennovaFeature ? 'rennova' : this.theme;\n\n const pdf = await this.pdfService.generatePdf(code, param);\n this.pdfService.openPdf(pdf);\n }\n\n @nativeAsync\n async downloadOrGeneratePdf(code: string) {\n let pdf: PdfData;\n try {\n pdf = await this.pdfService.downloadPdfDocument(code);\n } catch (err) {\n const param = this.rennovaFeature ? 'rennova' : this.theme;\n pdf = await this.pdfService.generatePdf(code, param);\n }\n\n this.pdfService.openPdf(pdf);\n }\n\n delete(prescriptionId: number): Observable<any> {\n return this.http.delete(`${environment.apiRoot}${PRESCRIPTION_URL}/${prescriptionId}`);\n }\n\n blobToBase64(blob: Blob): Promise<any> {\n return new Promise((resolve, _) => {\n const reader = new FileReader();\n reader.onloadend = () => resolve(reader.result);\n reader.readAsDataURL(blob);\n });\n }\n}\n","import { HttpClient, HttpParams } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { PetPatient } from '@app/shared/models/pet-patient';\nimport { Race } from '@app/shared/models/races';\nimport { Species } from '@app/shared/models/species';\nimport { environment } from '@env/environment';\nimport { Observable } from 'rxjs';\n\nexport const PET_PATIENT_URL = 'pets';\n\nexport type FilterSearch = {\n name?: string;\n responsibleCpf?: string;\n responsibleName?: string;\n};\n\nexport type FilterPaginate = {\n page: number;\n limit: number;\n orderBy?: string;\n sortOrder?: string;\n};\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PetPatientService {\n constructor(private http: HttpClient) {}\n\n getPetsByResponsibleCpf(cpf: string): Observable<PetPatient[]> {\n return this.http.get<PetPatient[]>(`${environment.apiRoot}${PET_PATIENT_URL}`, {\n params: { cpf }\n });\n }\n\n getSpecies(): Observable<Species[]> {\n return this.http.get<Species[]>(`${environment.apiRoot}${PET_PATIENT_URL}/species`);\n }\n\n getRaces(speciesId: string): Observable<Race[]> {\n return this.http.get<Race[]>(`${environment.apiRoot}${PET_PATIENT_URL}/${speciesId}/races`);\n }\n\n save(patient: PetPatient): Observable<PetPatient> {\n return this.http.post<PetPatient>(`${environment.apiRoot}${PET_PATIENT_URL}`, patient);\n }\n\n getPetById(id: string): Observable<PetPatient> {\n return this.http.get<PetPatient>(`${environment.apiRoot}${PET_PATIENT_URL}/${id}`);\n }\n\n update(id: string, data: any, healthProfessionalId?: string): Observable<PetPatient> {\n let params = new HttpParams();\n if (healthProfessionalId) {\n params = params.set('healthProfessional', healthProfessionalId);\n }\n return this.http.put<PetPatient>(`${environment.apiRoot}${PET_PATIENT_URL}/${id}`, data, {\n params\n });\n }\n\n searchPaginate(params: FilterSearch) {\n let httpParams = new HttpParams();\n if (params) {\n Object.keys(params)\n .filter(key => params[key])\n .forEach(k => {\n httpParams = httpParams.set(k, params[k]);\n });\n }\n\n return this.http.get<{ list: PetPatient[]; totalRecord: number }>(\n `${environment.apiRoot}${PET_PATIENT_URL}/search-paginate`,\n { params: httpParams }\n );\n }\n\n switchReponsible(id: string, cpfNewReponsible: string) {\n return this.http.put(\n `${environment.apiRoot}${PET_PATIENT_URL}/${id}/responsible/${cpfNewReponsible}`,\n {}\n );\n }\n}\n","import { FormGroup, FormArray, AbstractControl } from '@angular/forms';\n\nexport function logInvalidForm(form: AbstractControl): void {\n Object.entries((form as FormGroup | FormArray).controls)\n .filter(([_, ctrl]) => ctrl.invalid)\n .forEach(([key, ctrl]) => {\n if (ctrl instanceof FormArray) {\n logInvalidForm(ctrl);\n } else {\n console.log(key, ctrl.errors);\n }\n });\n}\n","import { PetPatient } from '@app/shared/models/pet-patient';\nimport { Address } from './address';\nimport { User } from './decodedLoginToken';\nimport { Membership } from './membership';\nimport { Pendency } from './pendency';\n\nexport class Patient {\n _id?: string;\n id?: string;\n userId?: string;\n name?: string;\n fullname?: string;\n cpf?: string;\n identity?: string;\n telephone?: string;\n cellphone?: string;\n email?: string;\n sex?: string;\n dateOfBirth?: Date | string;\n membership?: Membership;\n address?: Address;\n user?: User;\n img?: string;\n pendency?: Pendency;\n responsible?: Patient;\n dependents?: Patient[];\n pets?: PetPatient[];\n tenantId?: string;\n exists?: boolean;\n emailContact?: string;\n womenOver40?: boolean;\n\n loadingRevalidate?: boolean;\n loadingTenant?: boolean;\n}\n","import { Component, EventEmitter, Input, Output, TemplateRef, ViewChild } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { ColorSetting } from '@app/shared/models/color-setting';\nimport { markFormGroup } from '@app/utils/markFormGroup';\nimport { NzModalRef, NzModalService } from 'ng-zorro-antd/modal';\n\n@Component({\n selector: 'app-modal-select-layout',\n templateUrl: './modal-select-layout.component.html',\n styleUrls: ['./modal-select-layout.component.scss']\n})\nexport class ModalSelectLayoutComponent {\n @Input() colorSetting: ColorSetting;\n @Output() selectLayout = new EventEmitter<any>();\n\n tplModal: NzModalRef;\n\n @ViewChild('tplContent', { static: true })\n tplContent: TemplateRef<{}>;\n\n @ViewChild('tplFooter', { static: true })\n tplFooter: TemplateRef<{}>;\n\n form: FormGroup;\n layout = 'simple';\n showPrescriberCpf = false;\n patientDoesNotHaveAddress = false;\n\n constructor(private modalService: NzModalService, private fb: FormBuilder) {}\n\n createTplModal(patientDoesNotHaveAddress = false) {\n this.patientDoesNotHaveAddress = patientDoesNotHaveAddress;\n\n this.tplModal = this.modalService.create({\n nzContent: this.tplContent,\n nzFooter: this.tplFooter,\n nzClosable: false,\n nzWidth: 600,\n nzMaskClosable: false,\n nzClassName: 'modal-select-layout',\n nzOnOk: () => {},\n nzOnCancel: () => {}\n });\n\n if (patientDoesNotHaveAddress) {\n this.form = this.fb.group({\n uf: ['', Validators.required],\n city: ['', Validators.required],\n complement: [''],\n number: ['', Validators.required],\n street: ['', Validators.required],\n neighborhood: ['', Validators.required],\n cep: ['', Validators.required]\n });\n }\n\n this.tplModal.afterOpen.subscribe(() => {\n this.setBackgroundColorFooter();\n });\n }\n\n get showAddressForm(): boolean {\n return this.patientDoesNotHaveAddress && this.layout === 'special';\n }\n\n setBackgroundColorFooter() {\n const elements = document.getElementsByClassName('ant-modal-footer');\n if (elements) {\n if (this.colorSetting) {\n elements[0].setAttribute('style', `background-color: ${this.colorSetting.footer}`);\n } else {\n elements[0].setAttribute('style', `background-color: var(--bg-modal-header)`);\n }\n }\n }\n\n changeLayout() {\n if (this.showAddressForm) {\n this.tplModal.getInstance().nzWidth = 800;\n } else {\n this.tplModal.getInstance().nzWidth = 600;\n }\n }\n\n submit() {\n if (this.layout === 'special' && this.showAddressForm) {\n markFormGroup(this.form);\n if (this.form.valid) {\n this.emitEventAndCloseModal();\n }\n } else {\n this.emitEventAndCloseModal();\n }\n }\n\n emitEventAndCloseModal() {\n this.selectLayout.emit({\n layout: this.layout,\n addressValue: this.form ? this.form.value : null\n });\n this.close();\n }\n\n close() {\n this.tplModal.close();\n this.tplModal.destroy();\n }\n}\n","export default \"<ng-template #tplContent>\\n <div class=\\\"container send-document\\\" theme>\\n <h1 class=\\\"title\\\" [ngStyle]=\\\"{ color: colorSetting?.primary }\\\">\\n Selecione o layout da prescrição\\n </h1>\\n\\n <nz-radio-group [(ngModel)]=\\\"layout\\\" (ngModelChange)=\\\"changeLayout()\\\">\\n <label nz-radio nzValue=\\\"simple\\\">Receita Simples</label>\\n <label nz-radio nzValue=\\\"antimicrobial\\\">Receita de Antibiótico</label>\\n <label nz-radio nzValue=\\\"special\\\">Receita de Controle Especial</label>\\n </nz-radio-group>\\n\\n <div *ngIf=\\\"showAddressForm\\\" style=\\\"margin-top: 1rem; position: relative; width: 100%;\\\">\\n <form nz-form [formGroup]=\\\"form\\\" theme>\\n <app-address-data-form\\n [form]=\\\"form\\\"\\n alertMsg=\\\"Para prosseguir, complete os dados obrigatórios de endereço do paciente, conforme RDC 344/98 (Anvisa)\\\"\\n [required]=\\\"true\\\"\\n ></app-address-data-form>\\n </form>\\n </div>\\n </div>\\n</ng-template>\\n<ng-template #tplFooter>\\n <div\\n class=\\\"d-flex align-items-end flex-column modal-footer\\\"\\n theme\\n [ngStyle]=\\\"\\n colorSetting && {\\n 'background-color': colorSetting.secondary,\\n 'border-color': colorSetting.secondary\\n }\\n \\\"\\n >\\n <div class=\\\"row\\\">\\n <button\\n (click)=\\\"close()\\\"\\n class=\\\"btn btn-black\\\"\\n [ngStyle]=\\\"colorSetting && { color: colorSetting.primary }\\\"\\n >\\n Cancelar\\n </button>\\n <button\\n (click)=\\\"submit()\\\"\\n class=\\\"btn btn-ok\\\"\\n [ngStyle]=\\\"\\n colorSetting && {\\n 'background-color': colorSetting?.primary,\\n 'border-color': colorSetting?.primary\\n }\\n \\\"\\n >\\n OK\\n </button>\\n </div>\\n </div>\\n</ng-template>\\n\";","export default \".title {\\n text-transform: none;\\n font-size: 35px;\\n line-height: normal;\\n}\\n\\n.modal-footer {\\n padding: 10px 32px;\\n background-color: var(--bg-modal-header);\\n}\\n\\n.modal-footer .btn {\\n font-size: 12px;\\n}\\n\\n::ng-deep .modal-select-layout .ant-modal-content {\\n border-radius: 10px;\\n box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16);\\n}\\n\\n::ng-deep .modal-select-layout .ant-modal-confirm .ant-modal-confirm-btns {\\n float: none;\\n}\\n\\n::ng-deep .modal-select-layout .ant-input-group-addon {\\n width: 93px;\\n}\\n\\n::ng-deep .modal-select-layout .ant-modal-footer {\\n border-radius: 0 0 10px 10px;\\n border-top: 0;\\n padding: 0 !important;\\n}\\n\\n::ng-deep .modal-select-layout .ant-radio-checked .ant-radio-inner,\\n::ng-deep .modal-select-layout .ant-radio-checked .ant-radio-inner:hover {\\n border-color: var(--bg-color-primary);\\n}\\n\\n::ng-deep .modal-select-layout .ant-radio-inner::after {\\n background-color: var(--bg-color-primary);\\n}\\n\\n@media (max-width: 1025px) {\\n .container.send-document {\\n padding: 0;\\n }\\n .container.send-document .title {\\n font-size: 22px;\\n line-height: 24px;\\n }\\n .container.send-document .sub-title {\\n font-size: 18px;\\n line-height: 18px;\\n }\\n\\n .inputs.responsive {\\n padding: 0;\\n }\\n .inputs.responsive .ant-form-item label {\\n margin-top: 0px;\\n font-size: 14px !important;\\n }\\n}\\n\\n[nz-radio] {\\n display: block;\\n height: 32px;\\n line-height: 32px;\\n text-align: left;\\n font-size: 16px;\\n}\\n\\ninput {\\n width: 100px;\\n margin-left: 10px;\\n}\\n\\n.column {\\n flex-direction: column;\\n}\\n\\n.item {\\n margin: 0;\\n}\\n\\n.horm {\\n font-style: italic;\\n font-size: 12px;\\n}\\n\\n.btn {\\n font-size: 12px;\\n}\";","export class Base64Utils {\n static decode<T>(base64: string): T {\n return JSON.parse(atob(decodeURIComponent(base64))) as T;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot } from '@angular/router';\nimport { AuthService } from './../../../core/services/auth.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DocumentGuard implements CanActivate {\n constructor(private router: Router, private authService: AuthService) {}\n\n canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {\n const user = this.authService.user();\n const isPrescriber = user.userType === 'healthProfessional';\n if (!isPrescriber) {\n this.router.navigate(['']);\n }\n return isPrescriber;\n }\n}\n","export default \"<app-alternative-navbar\\n title=\\\"Informações da Receita\\\"\\n titleIcon=\\\"fa-assignment\\\"\\n></app-alternative-navbar>\\n<app-sidebar-menu></app-sidebar-menu>\\n\\n<div class=\\\"section pt-0 container-fluid d-flex flex-column overflow-hidden\\\">\\n <div class=\\\"row\\\">\\n <div class=\\\"col-md-6 p-0\\\">\\n <div class=\\\"toolbar bg-green flex-column\\\">\\n <h4 class=\\\"title text-white\\\">\\n Dados do Paciente\\n </h4>\\n </div>\\n <section class=\\\"p-50 pl-80 patient\\\">\\n <div class=\\\"row\\\">\\n <div class=\\\"col-md-12\\\">\\n <div class=\\\"label\\\">\\n <ng-container *ngIf=\\\"prescription.patient as patient\\\">\\n <div class=\\\"label\\\">\\n Nome: <span class=\\\"regular\\\">{{ patient.name }}</span>\\n </div>\\n <div class=\\\"label mt-15\\\">\\n CPF: <span class=\\\"regular\\\">{{ patient.cpf | mask: '000.000.000-00' }}</span>\\n </div>\\n </ng-container>\\n </div>\\n <ng-container *ngIf=\\\"prescription.healthProfessional as healthProfessional\\\">\\n <div class=\\\"label mt-38\\\">\\n {{ getProfessionalTypeName() }}:\\n <span class=\\\"regular\\\">{{ healthProfessional.name }}</span>\\n </div>\\n <div class=\\\"label mt-15\\\">\\n {{ healthProfessional.regionalCouncilNumber?.label }}:\\n <span class=\\\"regular\\\"\\n >{{ healthProfessional.regionalCouncilNumber?.number }}/{{\\n healthProfessional.regionalCouncilNumber?.uf\\n }}</span\\n >\\n </div>\\n <div class=\\\"label mt-15\\\">\\n Especialidade:\\n <span class=\\\"regular\\\">{{ getSpecialties() }}</span>\\n </div>\\n </ng-container>\\n </div>\\n </div>\\n </section>\\n </div>\\n <div class=\\\"col-md-6 p-0\\\">\\n <div class=\\\"toolbar bg-gray-black flex-column\\\">\\n <h4 class=\\\"title text-white\\\">\\n Dados da Receita\\n </h4>\\n </div>\\n <section class=\\\"bg-secondary prescription\\\">\\n <div class=\\\"row\\\">\\n <div class=\\\"col-md-12\\\">\\n <div class=\\\"row\\\">\\n <div class=\\\"col-md-6\\\">\\n <span class=\\\"code\\\">Código:</span>\\n <span class=\\\"font-xl-36 font-light ml-1\\\">{{ prescription.code }}</span>\\n </div>\\n <div class=\\\"col-md-6\\\">\\n <div class=\\\"download-pdf\\\" (click)=\\\"downloadPrescriptionPdf(prescription)\\\">\\n <i\\n nz-icon\\n nzType=\\\"file-pdf\\\"\\n nzTheme=\\\"twotone\\\"\\n nzTwotoneColor=\\\"#B22222\\\"\\n class=\\\"icon-pdf\\\"\\n ></i\\n ><br />\\n <span>Clique para baixar o documento assinado</span>\\n </div>\\n </div>\\n </div>\\n\\n <h4 class=\\\"subtitle mt-38\\\">\\n Selecione abaixo as unidades de medicamentos que deseja vender. Ao confirmar a venda os\\n medicamentos selecionados serão retidos no sistema.\\n </h4>\\n <label\\n (ngModelChange)=\\\"checkAll($event)\\\"\\n [(ngModel)]=\\\"allChecked\\\"\\n [nzIndeterminate]=\\\"indeterminate\\\"\\n class=\\\"custom-check select-all\\\"\\n nz-checkbox\\n >SELECIONAR TODOS</label\\n >\\n </div>\\n </div>\\n\\n <div class=\\\"row\\\">\\n <div class=\\\"col-md-12\\\">\\n <ng-container *ngFor=\\\"let medicament of prescription.medicaments; let i = index\\\">\\n <div class=\\\"medication-container d-flex align-items-center\\\">\\n <label\\n [(ngModel)]=\\\"medicament.valid\\\"\\n (nzCheckedChange)=\\\"refreshStatus()\\\"\\n class=\\\"custom-check mr-1 align-self-start\\\"\\n [nzDisabled]=\\\"medicament?.availableQuantity === 0\\\"\\n nz-checkbox\\n ></label>\\n <div class=\\\"medication\\\">\\n <pre><h4 class=\\\"title mb-0\\\">{{ i + 1 }} - {{ medicament?.name }}</h4></pre>\\n <pre\\n *ngIf=\\\"medicament?.description\\\"\\n ><p class=\\\"mb-0 description\\\">{{ medicament?.description }}</p></pre>\\n <pre>Posologia: {{ medicament?.dosage }}</pre>\\n <app-auto-width-input-number\\n [(ngModel)]=\\\"medicament.availableQuantity\\\"\\n [id]=\\\"'quantidade_' + i\\\"\\n [max]=\\\"quantities[i]\\\"\\n [disabled]=\\\"medicament?.availableQuantity === 0\\\"\\n >\\n </app-auto-width-input-number>\\n </div>\\n </div>\\n </ng-container>\\n </div>\\n </div>\\n </section>\\n </div>\\n </div>\\n\\n <div class=\\\"footer bg-dark d-flex align-items-center fixed-bottom justify-content-end\\\">\\n <button type=\\\"button\\\" class=\\\"btn btn-success\\\" (click)=\\\"changeRoute()\\\" theme>\\n Voltar\\n <i class=\\\"fa fa-undo\\\"></i>\\n </button>\\n <button type=\\\"button\\\" class=\\\"btn btn-success\\\" (click)=\\\"openModalBuyerData()\\\" theme>\\n VALIDAR SELEÇÃO {{ checkedNumber ? '(' + checkedNumber + ')' : '' }}\\n <i class=\\\"fa fa-arrow-right\\\"></i>\\n </button>\\n </div>\\n</div>\\n\";","import { distinctUntilChanged } from 'rxjs/operators';\nimport { Component, NgZone, OnInit, TemplateRef } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { AuthService } from '@app/core/services/auth.service';\nimport { PharmacyService } from '@app/modules/pharmacy/services/pharmacy.service';\nimport { ModalBuyerDataComponent } from '@app/shared/modals/modal-buyer-data/modal-buyer-data.component';\nimport { HealthProfessional } from '@app/shared/models';\nimport { User } from '@app/shared/models/decodedLoginToken';\nimport { Prescription } from '@app/shared/models/prescription';\nimport { Retention } from '@app/shared/models/retention';\nimport { AppToastService } from '@app/shared/services/app-toast.service';\nimport { NzModalService } from 'ng-zorro-antd/modal';\nimport { PrescriptionService } from '../../services/prescription.service';\nimport { nativeAsync } from '@app/shared/decorators/nativeAsync';\nimport { CrService } from '../../services/cr.service';\n\n@Component({\n selector: 'app-confirmation',\n templateUrl: './confirmation.component.html',\n styleUrls: ['./confirmation.component.scss']\n})\nexport class ConfirmationComponent implements OnInit {\n quantidade = 1;\n allChecked = false;\n indeterminate = false;\n prescription: Prescription = new Prescription();\n prescriptionCode;\n medications;\n quantities = [];\n checkedNumber: number;\n loading = false;\n completeUser: any;\n pharmacyId: any;\n\n constructor(\n private router: Router,\n private route: ActivatedRoute,\n private authService: AuthService,\n private prescriptionService: PrescriptionService,\n private notification: AppToastService,\n private pharmacyService: PharmacyService,\n private modalService: NzModalService,\n private ngZone: NgZone,\n private crService: CrService,\n private toast: AppToastService\n ) {\n const state = this.router.getCurrentNavigation().extras.state;\n if (state) {\n this.prescription = state.prescription;\n this.prescriptionCode = this.prescription.code;\n }\n }\n\n @nativeAsync\n async ngOnInit() {\n this.loading = true;\n\n this.route.params.subscribe(params => {\n this.prescriptionCode = params['param'];\n });\n await this.getCompleteUser();\n\n this.prescription = await this.prescriptionService\n .getPrescriptionbyCode(this.prescriptionCode)\n .toPromise();\n\n this.updateMedicaments();\n\n this.quantities = this.prescription.medicaments.map(m => m.availableQuantity);\n this.loading = false;\n }\n\n get user(): User {\n return this.authService.user();\n }\n\n refreshStatus(): void {\n const allChecked = this.prescription.medicaments.every(value => value.valid === true);\n const allUnChecked = this.prescription.medicaments.every(value => !value.valid);\n this.allChecked = allChecked;\n this.indeterminate = !allChecked && !allUnChecked;\n this.checkedNumber = this.prescription.medicaments.filter(value => value.valid).length;\n }\n\n @nativeAsync\n private async getCompleteUser() {\n try {\n this.loading = true;\n const userType = this.user.userType;\n\n switch (userType) {\n case 'pharmacy':\n this.completeUser = await this.pharmacyService.getPharmacyByUserId(this.user._id).toPromise();\n this.pharmacyId = this.completeUser._id;\n break;\n default:\n const extraData = JSON.parse(localStorage.getItem('extra_data'));\n this.pharmacyId = extraData.pharmacyId;\n }\n\n this.loading = false;\n } catch (error) {\n this.loading = false;\n console.log(error);\n }\n }\n\n checkAll(value: boolean): void {\n this.prescription.medicaments.forEach(data => {\n if (data.availableQuantity > 0) {\n data.valid = value;\n }\n });\n this.refreshStatus();\n }\n\n getSpecialties() {\n return this.prescription.healthProfessional.specialties.map(s => s.title).join(', ');\n }\n\n openModalBuyerData() {\n const medicinesRetained = this.prescription.medicaments.filter(m => m.valid);\n if (medicinesRetained.length === 0) {\n this.notification.notify('warning', 'Aviso', 'Selecione um medicamento');\n } else {\n const modal = this.modalService.create({\n nzContent: ModalBuyerDataComponent,\n nzComponentParams: {\n patient: this.prescription.patient\n },\n nzTitle: null,\n nzFooter: null,\n nzWidth: 900\n });\n this.ngZone.run(() => {\n modal.afterOpen.pipe(distinctUntilChanged()).subscribe(() => {\n const instance = modal.getContentComponent();\n if (instance) {\n instance.saveRetention.subscribe(cpf => {\n this.saveRetentionFeedback(cpf, medicinesRetained);\n modal.close();\n });\n }\n });\n });\n }\n }\n\n @nativeAsync\n async saveRetentionFeedback(cpfBuyer: string, medicinesRetained: any[]) {\n const cpf = cpfBuyer.replace(/[^\\d]+/g, '');\n await this.confirm(cpf, medicinesRetained);\n }\n\n @nativeAsync\n async confirm(cpfBuyer: string, medicinesRetained: any[]) {\n const retention = {\n cpfBuyer,\n medicinesRetained\n };\n\n this.prescriptionService\n .confirm(retention, this.pharmacyId, this.prescriptionCode)\n .then((res: Retention) => {\n this.router.navigate([`prescription/confirmation/successful/${res.dispensationCode}`]);\n });\n }\n\n changeRoute() {\n window.location.href = '/dashboard';\n }\n\n downloadPrescriptionPdf(prescription) {\n this.prescriptionService.downloadPrescriptionPdf(prescription.code);\n }\n\n getProfessionalTypeName() {\n return HealthProfessional.getProfessionalTypeName(\n this.prescription.healthProfessional.professionalType\n );\n }\n\n async updateMedicaments() {\n for await (const medicament of this.prescription.medicaments) {\n if (!!medicament.ean) {\n try {\n const medicamentsCR = await this.crService.searchMedicament(medicament.ean).toPromise();\n if (medicamentsCR.length > 0) {\n const medicamentCR = medicamentsCR[0];\n medicament.name = medicamentCR.nome;\n medicament.prescriptionTypeId = medicamentCR.prescriptionTypeId;\n medicament.typeCr = medicamentCR.typeCr;\n medicament.type = 'industrialized';\n medicament.laboratory = medicamentCR.laboratorio;\n medicament.description = medicamentCR.apresentacaoCustomizada;\n medicament.medicamentId = medicamentCR.id;\n medicament.principle = medicamentCR.principio;\n }\n } catch (error) {\n console.log(error);\n this.toast.notify('error', 'Erro ao consultar dados do medicamento.');\n }\n } else {\n medicament.type = 'free-text';\n }\n }\n }\n}\n","export default \".toolbar {\\n height: 10.94rem;\\n display: flex;\\n}\\n.toolbar .title {\\n font-size: 50px;\\n margin-bottom: 32px;\\n padding: 40px 15px 15px 35px;\\n text-align: center;\\n}\\n.footer {\\n padding: 0;\\n border: 0;\\n z-index: 1;\\n}\\n.footer .btn {\\n box-shadow: none;\\n border-radius: 0;\\n height: 100%;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n padding-top: 0.725rem;\\n}\\n.footer .btn i {\\n margin-left: 10px;\\n}\\n.footer .btn i:before {\\n font-size: 16px;\\n}\\n.prescription {\\n padding: 50px 50px 50px 30px;\\n}\\n.prescription .label,\\n.prescription .subtitle {\\n color: #4d4d4d;\\n font-family: \\\"prolight\\\", sans-serif;\\n font-size: 18px;\\n padding-left: 0px;\\n}\\n.prescription .code {\\n font-family: \\\"probold\\\";\\n}\\n.prescription .prescription-code {\\n line-height: 1;\\n}\\n.patient {\\n padding-top: 5.5rem !important;\\n}\\n.patient .label,\\n.patient .subtitle {\\n color: #6f6f6f;\\n font-family: \\\"probold\\\";\\n font-size: 18px;\\n padding-left: 0px;\\n}\\n.patient .regular {\\n font-family: \\\"proregular\\\";\\n text-transform: none;\\n}\\n.label {\\n font-size: 18px;\\n text-transform: uppercase;\\n}\\n.barcode img:last-of-type {\\n margin-top: -10px;\\n}\\n.custom-check {\\n font-size: 14px;\\n font-family: \\\"probold\\\";\\n color: #0b6054;\\n}\\n.custom-check.select-all ::ng-deep:not(.ant-checkbox-indeterminate) .ant-checkbox-inner {\\n background-color: #0b6054;\\n}\\n.custom-check.select-all ::ng-deep.ant-checkbox-indeterminate .ant-checkbox-inner:after {\\n background-color: #0b6054;\\n}\\n.custom-check.select-all ::ng-deep .ant-checkbox-checked .ant-checkbox-inner {\\n border-color: #0b6054;\\n}\\n.custom-check ::ng-deep .ant-checkbox-inner {\\n background-color: #fff;\\n border: 2px solid #0b6054;\\n}\\n.custom-check ::ng-deep .ant-checkbox-checked .ant-checkbox-inner {\\n background-color: #0b6054;\\n}\\n.medication-container {\\n padding-left: 0;\\n}\\n.medication-container .custom-check {\\n margin-top: 4px;\\n}\\n.medication-container:hover {\\n background-color: transparent;\\n}\\n.uppercase {\\n text-transform: uppercase !important;\\n}\\n.download-pdf {\\n font-size: 40px;\\n cursor: pointer;\\n}\\n.download-pdf span {\\n font-size: 12px;\\n text-transform: none !important;\\n color: #000000;\\n font-weight: bolder;\\n}\\n.icon-pdf {\\n font-size: 40px;\\n margin-left: 80px;\\n cursor: pointer;\\n}\";","export default \"<div class=\\\"page-content\\\">\\n <app-navigation [brandBackGround]=\\\"false\\\" navbarBackGround=\\\"bg-primary\\\" title=\\\"Informações da Receita\\\">\\n </app-navigation>\\n <section class=\\\"container-fluid\\\">\\n <div class=\\\"row\\\">\\n <div class=\\\"col sucessfull bg-green full-height\\\">\\n <h4 class=\\\"title text-white\\\">\\n Venda/retenção confirmada com sucesso!\\n </h4>\\n <div class=\\\"code text-white\\\">\\n <span class=\\\"title-2\\\">CÓDIGO DE DISPENSAÇÃO</span>\\n <span class=\\\"codeNumber\\\">{{ retention?.dispensationCode }}</span>\\n </div>\\n <br />\\n <div class=\\\"code text-white\\\">\\n <span class=\\\"title-2\\\">CÓDIGO DA RECEITA</span>\\n <span class=\\\"codeNumber\\\">{{ retention?.prescription?.code }}</span>\\n </div>\\n </div>\\n\\n <div class=\\\"col data-col\\\">\\n <div class=\\\"toolbar bg-gray-black data-height text-white title\\\">\\n <span>DADOS PARA EXPORTAÇÃO SNGPC:</span>\\n <br />\\n <div class=\\\"row\\\">\\n <div class=\\\"col\\\">\\n <span>PACIENTE</span>\\n <br />\\n <div class=\\\"data\\\">\\n <span>{{ retention?.prescription?.patient?.name }}</span\\n ><br />\\n <span>\\n {{ retention?.prescription?.patient?.address.street }}, nº\\n {{ retention?.prescription?.patient?.address.number }}\\n {{ retention?.prescription?.patient?.address.complement }},\\n {{ retention?.prescription?.patient?.address.city }}/\\n {{ retention?.prescription?.patient?.address.uf }} </span\\n ><br />\\n <span>{{ getAgePatient() }} Anos</span> <br />\\n <span\\n >Gênero:\\n {{ retention?.prescription?.patient?.sex === 'M' ? 'Masculino' : 'Feminino' }}</span\\n >\\n <br />\\n </div>\\n </div>\\n <div class=\\\"col\\\">\\n <span>COMPRADOR</span>\\n <br />\\n <div class=\\\"data\\\">\\n <span>{{ buyer?.name }}</span\\n ><br />\\n <span>\\n {{ buyer?.address?.street }}, nº {{ buyer?.address?.number }}\\n {{ buyer?.address?.complement }}, {{ buyer?.address?.city }}/\\n {{ buyer?.address?.uf }} </span\\n ><br />\\n <span *ngIf=\\\"buyer?.telephone\\\">Tel: {{ buyer?.telephone | formattedTel }}<br /></span>\\n <span *ngIf=\\\"buyer?.cellphone\\\">Cel: {{ buyer?.cellphone | formattedCel }}<br /></span>\\n <span>RG {{ buyer?.identity }}</span>\\n </div>\\n </div>\\n </div>\\n <br />\\n\\n <span>PRESCRITOR</span>\\n <br />\\n <div class=\\\"data\\\">\\n <span>{{ getPreWriterInfo(retention?.prescription)?.name }}</span\\n ><br />\\n <span\\n >{{ getPreWriterInfo(retention?.prescription)?.regionalCouncil.label }}:\\n {{ getPreWriterInfo(retention?.prescription)?.regionalCouncil.number }}/{{\\n getPreWriterInfo(retention?.prescription)?.regionalCouncil.uf\\n }} </span\\n ><br />\\n <span>\\n {{ retention?.prescription?.local?.address.street }}, nº\\n {{ retention?.prescription?.local?.address.number }}\\n {{ retention?.prescription?.local?.address.complement }},\\n {{ retention?.prescription?.local?.address.city }}/\\n {{ retention?.prescription?.local?.address.uf }} </span\\n ><br />\\n <span *ngIf=\\\"retention?.prescription?.healthProfessional.telephone\\\"\\n >Tel: {{ retention?.prescription?.healthProfessional.telephone | formattedTel }}</span\\n ><br />\\n <span *ngIf=\\\"retention?.prescription?.healthProfessional.cellphone\\\"\\n >Cel: {{ retention?.prescription?.healthProfessional.cellphone | formattedCel }}</span\\n >\\n </div>\\n <br />\\n </div>\\n\\n <div class=\\\"listing\\\">\\n <div class=\\\"text-black medicaments\\\">MEDICAMENTOS</div>\\n <div class=\\\"text-black medicaments\\\" *ngFor=\\\"let medicament of retention?.medicaments\\\">\\n <span class=\\\"title-2 name\\\">{{ medicament.name }} - {{ medicament.principle }}</span>\\n <span class=\\\"title-2 name\\\">Posologia: {{ medicament.dosage }}</span>\\n <div class=\\\"quantity text-white\\\">\\n <span class=\\\"title\\\">QUANTIDADE</span>\\n <span class=\\\"number\\\">{{ medicament.quantityRetained }}</span>\\n </div>\\n </div>\\n </div>\\n\\n <div class=\\\"btns\\\">\\n <div class=\\\"btn-medicament\\\" *ngIf=\\\"retention?.prescription?.amountOfMedicines\\\">\\n <button class=\\\"btn btn-primary btn-md register-btn other-medicament\\\" (click)=\\\"retainAgain()\\\">\\n SELECIONAR OUTRO MEDICAMENTO\\n </button>\\n </div>\\n <div class=\\\"btn-prescription\\\">\\n <button class=\\\"btn btn-primary btn-md register-btn other-prescription\\\" (click)=\\\"openModal()\\\">\\n SELECIONAR OUTRA RECEITA\\n </button>\\n </div>\\n <div class=\\\"btn-prescription\\\">\\n <button\\n class=\\\"btn btn-primary btn-md register-btn other-prescription\\\"\\n (click)=\\\"changeRoute('dashboard')\\\"\\n >\\n FINALIZAR\\n </button>\\n </div>\\n </div>\\n </div>\\n </div>\\n </section>\\n <app-footer></app-footer>\\n</div>\\n\";","import { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { ModalSearchComponent } from '@app/shared/modals/modal-search/modal-search.component';\nimport { Buyer, HealthProfessional } from '@app/shared/models';\nimport { Retention } from '@app/shared/models/retention';\nimport { BsModalRef, BsModalService } from 'ngx-bootstrap/modal';\nimport { BuyerService } from '../../services/buyer.service';\nimport { RetentionService } from '../../services/retention.service';\n\n@Component({\n selector: 'app-retention-confirmation',\n templateUrl: './retention-confirmation.component.html',\n styleUrls: ['./retention-confirmation.component.scss']\n})\nexport class RetentionConfirmationComponent implements OnInit {\n retention: Retention;\n buyer: Buyer;\n medicamentsRetained;\n modalRef: BsModalRef;\n\n constructor(\n private router: Router,\n private route: ActivatedRoute,\n private modalService: BsModalService,\n private retentionService: RetentionService,\n private buyerService: BuyerService\n ) {}\n\n ngOnInit() {\n this.route.params.subscribe(async params => {\n const dispensationCode = params['dispensationCode'];\n this.retention = await this.retentionService.getRetentionByCode(dispensationCode).toPromise();\n this.setInfoInMedicamentsRetained();\n if (this.retention.prescription.patient.cpf === this.retention.cpfBuyer) {\n this.buyer = new Buyer();\n this.buyer.name = this.retention.prescription.patient.name;\n this.buyer.cpf = this.retention.prescription.patient.cpf;\n this.buyer.address = this.retention.prescription.patient.address;\n this.buyer.telephone = this.retention.prescription.patient.telephone;\n this.buyer.cellphone = this.retention.prescription.patient.cellphone;\n this.buyer.identity = this.retention.prescription.patient.identity;\n } else {\n this.buyer = await this.buyerService.getBuyerByCpf(this.retention.cpfBuyer).toPromise();\n }\n });\n }\n\n setInfoInMedicamentsRetained() {\n for (const medicamentRetained of this.retention.medicaments) {\n const medicament = this.retention.prescription.medicaments.filter(\n m => m.ean === medicamentRetained.ean\n )[0];\n medicamentRetained.name = medicament.name;\n medicamentRetained.principle = medicament.principle;\n medicamentRetained.dosage = medicament.dosage;\n }\n }\n\n getPreWriterInfo(prescription) {\n const preWriter = {\n name: '',\n cpf: '',\n label: '',\n regionalCouncil: { label: '', number: 0, uf: '' },\n specialties: '',\n contact: ''\n };\n\n if (prescription) {\n preWriter.label = HealthProfessional.getProfessionalTypeName(\n prescription.healthProfessional.professionalType\n );\n preWriter.name = prescription.healthProfessional.name;\n preWriter.cpf = prescription.healthProfessional.cpf;\n preWriter.regionalCouncil.label = HealthProfessional.getRegionalCouncilLabel(\n prescription.healthProfessional.professionalType\n );\n preWriter.regionalCouncil.number = prescription.healthProfessional.regionalCouncilNumber.number;\n preWriter.regionalCouncil.uf = prescription.healthProfessional.regionalCouncilNumber.uf;\n }\n\n return preWriter;\n }\n\n getAgePatient() {\n if (\n this.retention !== undefined &&\n this.retention.prescription.patient &&\n this.retention.prescription.patient.dateOfBirth\n ) {\n const nascimento = new Date(this.retention.prescription.patient.dateOfBirth);\n const hoje = new Date();\n let diferencaAnos = hoje.getFullYear() - nascimento.getFullYear();\n if (\n new Date(hoje.getFullYear(), hoje.getMonth(), hoje.getDate()) <\n new Date(hoje.getFullYear(), nascimento.getMonth(), nascimento.getDate())\n ) {\n diferencaAnos--;\n }\n return diferencaAnos;\n }\n return 0;\n }\n\n retainAgain() {\n this.router.navigate([`prescription/confirmation/${this.retention.prescription.code}`]);\n }\n\n validatePrescription() {\n this.modalRef.hide();\n const prescriptionCode = (<HTMLInputElement>document.getElementById('prescriptionCode')).value;\n localStorage.setItem('prescriptionCode', prescriptionCode);\n this.router.navigate([`/prescription/confirmation/${prescriptionCode}`]);\n }\n\n getMedicamentsRetained(prescription) {\n const medicaments = prescription.medicaments;\n const retention = prescription.retention;\n }\n\n openModal() {\n this.modalRef = this.modalService.show(ModalSearchComponent, {\n backdrop: 'static',\n keyboard: false\n });\n }\n\n async changeRoute(route: string) {\n this.router.navigate([`/${route}`]);\n }\n}\n","export default \".full-height {\\n min-height: calc(95.3vh - 100px);\\n}\\n\\n.data-height {\\n min-height: calc(120vh - 465px);\\n}\\n\\n.sucessfull {\\n padding-left: 0px;\\n padding-right: 0px;\\n padding: 40px 0px 0px 35px;\\n}\\n\\n.sucessfull .title {\\n font-size: 50px;\\n margin-bottom: 100px;\\n}\\n\\n.sucessfull .code {\\n display: grid;\\n}\\n\\n.sucessfull .code .codeNumber {\\n font-size: 42px;\\n font-family: \\\"prolight\\\";\\n}\\n\\n.text-white .export-data {\\n font-family: \\\"probold\\\";\\n font-size: 18px;\\n}\\n\\n.text-white .patient,\\n.text-white .prescriber {\\n font-family: \\\"probold\\\";\\n}\\n\\n.title-2 {\\n font-size: 15px;\\n font-family: \\\"probold\\\";\\n}\\n\\n.data-col {\\n padding-left: 0px;\\n padding-right: 0px;\\n}\\n\\n.data-col .toolbar {\\n padding-left: 15px;\\n padding-top: 35px;\\n}\\n\\n.data-col .toolbar .data {\\n font-family: \\\"prolight\\\";\\n}\\n\\n.data-col .listing {\\n overflow: overlay;\\n height: 18vh;\\n}\\n\\n.data-col .listing .medicaments {\\n display: grid;\\n padding-left: 15px;\\n padding-top: 13px;\\n}\\n\\n.data-col .listing .medicaments .name {\\n font-size: 14px;\\n color: #363636;\\n}\\n\\n.data-col .listing .medicaments .description {\\n font-size: 11px;\\n color: #363636c4;\\n}\\n\\n.data-col .listing .medicaments .quantity {\\n font-size: 10px;\\n font-family: \\\"probold\\\";\\n}\\n\\n.data-col .listing .medicaments .quantity .title {\\n padding: 2px 13px;\\n background-color: #363636b3;\\n}\\n\\n.data-col .listing .medicaments .quantity .number {\\n padding: 2px 6px;\\n background-color: #36363659;\\n}\\n\\n.data-col .btns {\\n padding-top: 0px;\\n background-color: #80808030;\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n height: 52px;\\n font-size: 10px;\\n position: absolute;\\n width: 100%;\\n bottom: 0px;\\n}\\n\\n.data-col .btns .btn-medicament {\\n margin-right: 10px;\\n}\\n\\n.data-col .btns .btn-medicament .other-medicament {\\n background-color: #363636;\\n font-family: \\\"probold\\\";\\n font-size: 10.5px;\\n}\\n\\n.data-col .btns .btn-prescription {\\n margin-left: 10px;\\n}\\n\\n.data-col .btns .btn-prescription .other-prescription {\\n background-color: #5ce1c2;\\n border-color: #5ce1c2;\\n font-family: \\\"probold\\\";\\n font-size: 10.5px;\\n color: #363636;\\n}\\n\\n.page-content {\\n overflow: hidden;\\n padding-bottom: 0px;\\n}\\n\\n.select-model {\\n display: flex;\\n border: solid 4px blue;\\n}\\n\\n.modal-header {\\n background-color: #4cbca3;\\n font-family: \\\"probold\\\";\\n}\\n\\n.modal-body {\\n padding: 0px;\\n height: 170px;\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n}\\n\\n.modal-body input {\\n width: 320px;\\n height: 35px;\\n font-family: \\\"prolight\\\";\\n font-size: 12px;\\n}\\n\\n.modal-body label {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n position: relative;\\n z-index: 1;\\n right: 33px;\\n top: 2px;\\n font-size: 15px;\\n margin: 0px;\\n width: 30px;\\n}\\n\\n.modal-body label i {\\n cursor: pointer;\\n}\";","export default \"<app-alternative-navbar title=\\\"Receitas\\\" titleIcon=\\\"fas fa-list-ul\\\"></app-alternative-navbar>\\n<app-sidebar-menu></app-sidebar-menu>\\n\\n<div class=\\\"container\\\">\\n <div class=\\\"listing\\\">\\n <nz-card *ngFor=\\\"let prescription of prescriptions\\\" [nzBordered]=\\\"false\\\" theme>\\n <nz-tabset [nzTabBarExtraContent]=\\\"cardPrescription\\\">\\n <nz-tab nzTitle=\\\"Receita\\\">\\n <p><span class=\\\"bold\\\">Código da receita: </span>{{ prescription.code }}</p>\\n <p>\\n <span class=\\\"bold\\\">Data de emissão: </span\\n >{{ prescription.createdAt | date: 'dd/MM/yyyy, HH:mm' }}\\n </p>\\n <p>\\n <span class=\\\"bold\\\">Quantidade de medicamentos: </span>\\n {{ prescription?.amountOfMedicines }}\\n </p>\\n </nz-tab>\\n <nz-tab\\n *ngIf=\\\"prescription.healthProfessional as healthProfessional\\\"\\n [nzTitle]=\\\"getProfessionalTypeName(healthProfessional.professionalType)\\\"\\n >\\n <p><span class=\\\"bold\\\">Nome: </span>{{ healthProfessional.name }}</p>\\n <p>\\n <span class=\\\"bold\\\">{{ healthProfessional.regionalCouncilNumber.label }}: </span\\n >{{ healthProfessional.regionalCouncilNumber?.number }} -\\n {{ healthProfessional.regionalCouncilNumber?.uf }}\\n </p>\\n <p *ngIf=\\\"prescription.local as local\\\">\\n <span class=\\\"bold\\\">Endereço: </span>{{ local.name }} - {{ local.address?.city }} /\\n {{ local.address?.uf }}\\n </p>\\n </nz-tab>\\n <nz-tab *ngIf=\\\"prescription.patient as patient\\\" nzTitle=\\\"Paciente\\\">\\n <p><span class=\\\"bold\\\">Nome: </span>{{ patient.name }}</p>\\n <p><span class=\\\"bold\\\">CPF: </span>{{ patient.cpf }}</p>\\n <p>\\n <span class=\\\"bold\\\">Endereço: </span>{{ patient.address?.city }} -\\n {{ patient.address?.uf }}\\n </p>\\n </nz-tab>\\n </nz-tabset>\\n\\n <ng-template #cardPrescription>\\n <button (click)=\\\"changeRoute(prescription.code)\\\" class=\\\"btn btn-success\\\" theme>\\n Abrir receita\\n </button>\\n </ng-template>\\n </nz-card>\\n </div>\\n</div>\\n<div class=\\\"bg-dark-green\\\"></div>\\n\";","import { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { HealthProfessional } from '@app/shared/models/health-professional';\nimport { Prescription } from '@app/shared/models/prescription';\nimport { AppToastService } from '@app/shared/services/app-toast.service';\nimport { PrescriptionService } from '../../services/prescription.service';\nimport { nativeAsync } from '@app/shared/decorators/nativeAsync';\n\n@Component({\n selector: 'app-listing',\n templateUrl: './listing.component.html',\n styleUrls: ['./listing.component.scss']\n})\nexport class ListingComponent implements OnInit {\n initLoading = true;\n loadingMore = false;\n prescriptions: Prescription[];\n showPrescriptionTab: Boolean = true;\n showDoctorTab: Boolean = false;\n showPatientTab: Boolean = false;\n\n constructor(\n private router: Router,\n private route: ActivatedRoute,\n private prescriptionService: PrescriptionService,\n private notification: AppToastService\n ) {\n const state = this.router.getCurrentNavigation().extras.state;\n if (state) {\n this.prescriptions = state.prescriptions;\n }\n }\n\n ngOnInit() {\n if (!this.prescriptions) {\n this.route.params.subscribe(params => {\n const param = params['param'];\n this.requests(param);\n });\n }\n }\n\n @nativeAsync\n private async requests(param: string) {\n this.prescriptions = await this.prescriptionService.getPrescriptionsPatient(param).toPromise();\n }\n\n changeRoute(prescriptionCode) {\n this.router.navigate(['/prescription/confirmation', prescriptionCode]);\n this.notification.notify(\n 'warning',\n 'Atenção',\n 'Esta prescrição só é válida mediante o registro da dispensação.'\n );\n }\n\n getProfessionalTypeName(professionalType: string) {\n return HealthProfessional.getProfessionalTypeName(professionalType);\n }\n}\n","export default \".container {\\n display: flex;\\n justify-content: center;\\n}\\n\\n.listing {\\n z-index: 4;\\n overflow: overlay;\\n width: 500px;\\n height: 500px;\\n margin-top: 30px;\\n}\\n\\n.bg-dark-green {\\n background-color: #0b6054;\\n height: 280px;\\n position: absolute;\\n width: 100%;\\n bottom: 0px;\\n}\\n\\nnz-card {\\n border: solid;\\n border-color: #e8e8e8;\\n border-width: 1px;\\n margin-bottom: 10px;\\n}\\n\\nnz-card p {\\n margin-bottom: 0px;\\n}\\n\\nnz-card p .bold {\\n font-weight: 600;\\n}\\n\\nnz-tabset .ant-tabs-tab {\\n color: red;\\n}\\n\\n.btn {\\n height: 32px;\\n font-size: 13px;\\n padding-top: 2px;\\n padding-bottom: 2px;\\n}\";","export default \"<div class=\\\"page-content\\\">\\n <app-navigation></app-navigation>\\n <app-sidebar-menu></app-sidebar-menu>\\n <div class=\\\"upload-content\\\">\\n <img class=\\\"download-icon\\\" src=\\\"assets/icons/download-solid.svg\\\" />\\n <span>O download da sua receita foi realizado com sucesso.</span>\\n <span>\\n Agora você precisa assinar digitalmente o PDF da receita e depois salvá-la dentro da plataforma.\\n </span>\\n <br /><br />\\n <span\\n >Obs.: Caso tenha duvidas,\\n <a target=\\\"_blank\\\" href=\\\"/assets/file/tutorial_sign.pdf\\\">clique aqui</a> para verificar o passo a\\n passo de como assinar a Receita</span\\n >\\n <br />\\n <span>Salvar o PDF da Receita Assinado</span>\\n <br />\\n <input\\n class=\\\"btn btn-primary text-white mt-50\\\"\\n type=\\\"file\\\"\\n (change)=\\\"uploadFile($event)\\\"\\n placeholder=\\\"Upload file\\\"\\n accept=\\\".pdf\\\"\\n />\\n </div>\\n</div>\\n\\n<app-unsigned-prescription-modal></app-unsigned-prescription-modal>\\n\";","import { Component, ViewChild } from '@angular/core';\nimport { PdfService } from '@app/modules/document/services/pdf.service';\nimport { UnsignedPrescriptionModalComponent } from '@app/modules/document/pages/prescription/unsigned-prescription-modal.component';\nimport { ActivatedRoute } from '@angular/router';\n\n@Component({\n selector: 'app-upload-pdf',\n templateUrl: './upload-pdf.component.html',\n styleUrls: ['./upload-pdf.component.scss']\n})\nexport class UploadPdfComponent {\n constructor(private pdfService: PdfService, private router: ActivatedRoute) {}\n\n @ViewChild(UnsignedPrescriptionModalComponent, { static: true })\n unsignedPrescriptionModal: UnsignedPrescriptionModalComponent;\n\n uploadFile(event) {\n const fileList: FileList = event.target.files;\n this.router.params.subscribe(async params => {\n const code = params['code'];\n if (fileList.length > 0) {\n const file: File = fileList[0];\n await this.pdfService.postFilePdf(file, code);\n this.unsignedPrescriptionModal.createTplModal(code);\n }\n });\n }\n}\n","export default \".upload-content {\\n height: 100vh;\\n display: flex;\\n flex-direction: column;\\n justify-content: center;\\n align-items: center;\\n color: #3c3c3c;\\n}\\n.upload-content a {\\n color: #1ae0c2;\\n}\\n.upload-content .download-icon {\\n height: 4rem;\\n}\\n.btn-upload {\\n border: none;\\n box-sizing: border-box;\\n background-color: #fff;\\n}\";","export default \"<div class=\\\"page-content\\\">\\n <app-alternative-navbar></app-alternative-navbar>\\n <app-sidebar-menu></app-sidebar-menu>\\n <app-float-button *ngIf=\\\"patientRecordFeature\\\"></app-float-button>\\n\\n <section class=\\\"section container-fluid prescription d-flex flex-column\\\">\\n <div class=\\\"row _p-20\\\">\\n <div class=\\\"hospital-brand doc-type\\\">\\n <nz-dropdown *ngIf=\\\"!document?.code && !modelId\\\" nzTrigger=\\\"click\\\">\\n <a nz-dropdown><i class=\\\"fa fa-caret-circle-solid\\\"></i></a>\\n <ul nz-menu nzSelectable>\\n <div *ngFor=\\\"let docType of typesOfDocumentsOptions\\\">\\n <li nz-menu-item (click)=\\\"changeDocumentType(docType)\\\">\\n <a>{{ docType }}</a>\\n </li>\\n </div>\\n </ul>\\n </nz-dropdown>\\n <h4 class=\\\"hospital-name\\\"><span *ngIf=\\\"modelId\\\">Editar modelo de </span>{{ documentType }}</h4>\\n </div>\\n\\n <div class=\\\"hospital-brand\\\" *ngIf=\\\"!modelId\\\">\\n <nz-dropdown nzTrigger=\\\"click\\\">\\n <a nz-dropdown><i class=\\\"fa fa-caret-circle-solid\\\"></i></a>\\n <ul nz-menu nzSelectable>\\n <div *ngFor=\\\"let address of prescriber?.commercialData\\\">\\n <li nz-menu-item (click)=\\\"changeLocal(address)\\\">\\n <a>{{ address.name }}</a>\\n </li>\\n </div>\\n </ul>\\n </nz-dropdown>\\n <h4 class=\\\"hospital-name\\\">{{ local?.name }}</h4>\\n </div>\\n\\n <div class=\\\"hospital-brand\\\">\\n <div class=\\\"add-prescription add-patient\\\" *ngIf=\\\"!signed && !modelId\\\">\\n <button\\n class=\\\"btn btn-icon btn-add-outiline text-capitalize\\\"\\n type=\\\"button\\\"\\n (click)=\\\"showModalSearch()\\\"\\n >\\n <span class=\\\"btn-inner--text\\\">Novo paciente</span>\\n <span class=\\\"btn-inner--icon\\\"><i class=\\\"fa fa-plus\\\"></i></span>\\n </button>\\n </div>\\n </div>\\n </div>\\n\\n <form [formGroup]=\\\"patientForm\\\">\\n <ng-container [formGroup]=\\\"patientForm\\\" *ngIf=\\\"!patient\\\">\\n <nz-form-item>\\n <nz-form-control>\\n <input\\n id=\\\"cpfPatient\\\"\\n [nzAutocomplete]=\\\"autoName\\\"\\n appPatientSearch\\n class=\\\"input-name\\\"\\n formControlName=\\\"name\\\"\\n maxlength=\\\"128\\\"\\n nz-input\\n [placeholder]=\\\"\\n isVeterinarian\\n ? 'Digite o CPF do responsável para buscar'\\n : 'Digite o CPF ou nome completo do paciente para buscar'\\n \\\"\\n [disabled]=\\\"signed\\\"\\n />\\n <nz-autocomplete #autoName nzBackfill (selectionChange)=\\\"onChangePatient($event.nzValue)\\\">\\n <nz-auto-option\\n *ngFor=\\\"let option of patients\\\"\\n [nzLabel]=\\\"option.cpf !== '-1' ? option?.name || option?.fullname : ''\\\"\\n [nzValue]=\\\"option\\\"\\n class=\\\"mao\\\"\\n >\\n {{ option?.name || option?.fullname }}\\n {{ option?.cpf !== '-1' ? (option?.cpf | formattedCpf) : '' }}\\n <span *ngIf=\\\"option?.responsible\\\"\\n > ({{ option.responsible.name || option.responsible.fullname }}\\n {{ option.responsible.cpf | formattedCpf }})</span\\n >\\n </nz-auto-option>\\n </nz-autocomplete>\\n </nz-form-control>\\n </nz-form-item>\\n </ng-container>\\n\\n <ng-container *ngIf=\\\"patient\\\">\\n <div\\n style=\\\"display: flex;align-items: center; justify-content: space-between; gap: 24px; margin-bottom: 8px;\\\"\\n >\\n <nz-form-label>\\n <span class=\\\"label-name-patient\\\">{{ patient?.name }}</span>\\n </nz-form-label>\\n <i\\n nz-icon\\n nzType=\\\"close\\\"\\n nzTheme=\\\"outline\\\"\\n class=\\\"label-name-patient__icon\\\"\\n nz-tooltip=\\\"Remover paciente\\\"\\n (click)=\\\"clearSelectionPatient()\\\"\\n ></i>\\n </div>\\n </ng-container>\\n\\n <ng-container\\n [formGroup]=\\\"documentForm\\\"\\n *ngIf=\\\"modelId && documentForm.value.title != undefined && documentType != typesOfDocuments[3]\\\"\\n >\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"title\\\">TÃtulo<span class=\\\"mandatory\\\"> *</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input nz-input formControlName=\\\"title\\\" [attr.id]=\\\"'title'\\\" />\\n <nz-form-explain\\n *ngIf=\\\"documentForm?.get('title').dirty && documentForm?.get('title').errors\\\"\\n >\\n <ng-container *ngIf=\\\"documentForm?.get('title').hasError('required')\\\">\\n Campo obrigatório, por favor digite o tÃtulo.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </ng-container>\\n\\n <app-infusion-protocol\\n *ngIf=\\\"documentType === 'Infusão' && victaFeature\\\"\\n [infusion]=\\\"document\\\"\\n [protocolSelected]=\\\"selectedDocumentModel\\\"\\n (formEmitter)=\\\"documentForm = $event\\\"\\n ></app-infusion-protocol>\\n\\n <app-prescription\\n *ngIf=\\\"documentType === typesOfDocuments[0] && !victaFeature && adding\\\"\\n [manipulatedProfile]=\\\"manipulatedProfile\\\"\\n [prescription]=\\\"document\\\"\\n [prescriptionModel]=\\\"selectedDocumentModel\\\"\\n [editMode]=\\\"!!modelId\\\"\\n [patient]=\\\"patient\\\"\\n [isVeterinarian]=\\\"isVeterinarian\\\"\\n (formEmitter)=\\\"documentForm = $event\\\"\\n ></app-prescription>\\n\\n <app-exam\\n *ngIf=\\\"documentType === typesOfDocuments[1] && adding\\\"\\n [exam]=\\\"document\\\"\\n [patient]=\\\"patient\\\"\\n [isVeterinarian]=\\\"isVeterinarian\\\"\\n [examModel]=\\\"selectedDocumentModel\\\"\\n (formEmitter)=\\\"documentForm = $event\\\"\\n ></app-exam>\\n\\n <app-attestation\\n *ngIf=\\\"documentType === typesOfDocuments[2] && adding\\\"\\n [patient]=\\\"patient\\\"\\n [attestationModel]=\\\"selectedDocumentModel\\\"\\n [attestation]=\\\"document\\\"\\n [isVeterinarian]=\\\"isVeterinarian\\\"\\n (formEmitter)=\\\"documentForm = $event\\\"\\n ></app-attestation>\\n\\n <app-orientation\\n *ngIf=\\\"documentType === typesOfDocuments[3] && adding\\\"\\n [orientation]=\\\"document\\\"\\n [orientationModel]=\\\"selectedDocumentModel\\\"\\n [editMode]=\\\"!!modelId\\\"\\n [patient]=\\\"patient\\\"\\n [isVeterinarian]=\\\"isVeterinarian\\\"\\n (formEmitter)=\\\"documentForm = $event\\\"\\n ></app-orientation>\\n\\n <div class=\\\"add-prescription\\\" *ngIf=\\\"!signed && !modelId\\\">\\n <button\\n (click)=\\\"showVictaProtocols()\\\"\\n *ngIf=\\\"victaFeature && documentType === 'Infusão'\\\"\\n class=\\\"btn btn-icon btn-add-outiline text-capitalize\\\"\\n type=\\\"button\\\"\\n >\\n <span class=\\\"btn-inner--text\\\">Sugestão de Protocolos</span>\\n <span class=\\\"btn-inner--icon\\\"><i class=\\\"fa fa-plus\\\"></i></span>\\n </button>\\n <button\\n *ngIf=\\\"documentType !== 'Infusão'\\\"\\n (click)=\\\"showModelListFavoriteDocument()\\\"\\n class=\\\"btn btn-icon btn-add-outiline text-capitalize\\\"\\n type=\\\"button\\\"\\n [disabled]=\\\"!prescriber\\\"\\n >\\n <span class=\\\"btn-inner--text\\\">Selecionar modelo de {{ documentType }}</span>\\n <span class=\\\"btn-inner--icon\\\"><i class=\\\"fa fa-plus\\\"></i></span>\\n </button>\\n <button\\n (click)=\\\"showModalAddFavoriteDocument()\\\"\\n *ngIf=\\\"adding\\\"\\n class=\\\"btn btn-icon btn-add-outiline text-capitalize\\\"\\n type=\\\"button\\\"\\n >\\n <span class=\\\"btn-inner--text\\\">Salvar em favoritos</span>\\n <span class=\\\"btn-inner--icon\\\"><i class=\\\"fa fa-plus\\\"></i></span>\\n </button>\\n <button\\n (click)=\\\"toggleAdding()\\\"\\n *ngIf=\\\"!adding && documentType !== 'Infusão'\\\"\\n class=\\\"btn btn-icon btn-add-outiline text-capitalize\\\"\\n type=\\\"button\\\"\\n >\\n <span class=\\\"btn-inner--text\\\" *ngIf=\\\"!adding || documentType === 'Prescrição'\\\"\\n >Adicionar {{ documentType }}</span\\n >\\n <span class=\\\"btn-inner--icon\\\"><i class=\\\"fa fa-plus\\\"></i></span>\\n </button>\\n </div>\\n <div class=\\\"add-prescription\\\" *ngIf=\\\"modelId\\\">\\n <button\\n (click)=\\\"updateDocumentModel(documentForm.value, modelId)\\\"\\n class=\\\"btn btn-icon btn-add-outiline text-capitalize\\\"\\n type=\\\"button\\\"\\n >\\n <span class=\\\"btn-inner--text\\\">Salvar modelo</span>\\n <span class=\\\"btn-inner--icon\\\"><i class=\\\"fa fa-check\\\"></i></span>\\n </button>\\n <button\\n (click)=\\\"cancelEditModel()\\\"\\n class=\\\"btn btn-icon btn-add-outiline text-capitalize\\\"\\n type=\\\"button\\\"\\n >\\n <span class=\\\"btn-inner--text\\\">Cancelar</span>\\n <span class=\\\"btn-inner--icon\\\"><i class=\\\"fa fa-times\\\"></i></span>\\n </button>\\n </div>\\n </form>\\n </section>\\n</div>\\n\\n<div class=\\\"footer d-flex align-items-center fixed-bottom justify-content-between\\\">\\n <div class=\\\"col\\\">\\n <div class=\\\"d-flex align-self-center flex-column\\\" *ngIf=\\\"!isMobile\\\">\\n <div *ngIf=\\\"isThemeActiveReceitaDigital()\\\">\\n <div class=\\\"d-flex flex-fill justify-content-end\\\">\\n <a class=\\\"mr-3 helpContainer\\\" href=\\\"https://ajuda.receitadigital.com\\\"\\n ><i class=\\\"fa fa-comments mr-1\\\"></i>Fale Conosco.</a\\n >\\n </div>\\n </div>\\n </div>\\n </div>\\n <!-- <button\\n class=\\\"btn\\\"\\n type=\\\"button\\\"\\n (click)=\\\"saveAndPreviewPdf()\\\"\\n [ngClass]=\\\"{ disabled: invalidForm }\\\"\\n [disabled]=\\\"invalidForm\\\"\\n >\\n Salvar e visualizar impressão <i class=\\\"fa fa-arrow-right\\\"></i>\\n </button> -->\\n <button\\n class=\\\"btn disabled\\\"\\n type=\\\"button\\\"\\n (click)=\\\"saveAndSignPdf()\\\"\\n [ngClass]=\\\"{ disabled: invalidForm }\\\"\\n [disabled]=\\\"invalidForm\\\"\\n >\\n Salvar e assinar <i class=\\\"fa fa-arrow-right\\\"></i>\\n </button>\\n</div>\\n<ngx-loading [show]=\\\"loading\\\" [config]=\\\"{ backdropBorderRadius: '3px' }\\\"></ngx-loading>\\n<app-modal-send-document></app-modal-send-document>\\n<app-modal-select-layout></app-modal-select-layout>\\n\";","import { Component, OnInit } from '@angular/core';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { Subject } from 'rxjs';\n\n@Component({\n selector: 'app-modal-iframe',\n templateUrl: './modal-iframe.component.html',\n styleUrls: ['./modal-iframe.component.scss']\n})\nexport class ModalIframeComponent implements OnInit {\n public onLoad: Subject<string>;\n\n src: string;\n height: number;\n width: number;\n\n constructor(public modalRef: BsModalRef) {\n this.onLoad = new Subject();\n }\n\n ngOnInit() {}\n\n onload(iframe: any) {\n try {\n const url = iframe.contentWindow.location.href;\n this.onLoad.next(url);\n } catch (e) {\n this.onLoad.next();\n }\n }\n}\n","export default \"<div [style.width.px]=\\\"width\\\">\\n <div class=\\\"modal-header\\\">\\n <button type=\\\"button\\\" class=\\\"close pull-right\\\" aria-label=\\\"Close\\\" (click)=\\\"modalRef.hide()\\\">\\n <span aria-hidden=\\\"true\\\">×</span>\\n </button>\\n </div>\\n <div class=\\\"modal-body\\\">\\n <iframe\\n #iframe\\n title=\\\"Assinatura Digital\\\"\\n [src]=\\\"src | safe\\\"\\n [height]=\\\"height\\\"\\n [width]=\\\"width\\\"\\n (load)=\\\"onload(iframe)\\\"\\n ></iframe>\\n </div>\\n</div>\\n\";","export default \".modal-header {\\n background-color: #f5f7fa;\\n padding: 0px;\\n}\\n\\n.modal-body {\\n padding: 0px;\\n display: flex;\\n align-items: center;\\n flex-direction: column;\\n justify-content: center;\\n}\\n\\n.modal-content {\\n align-items: center !important;\\n}\";","import {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n HostListener,\n OnDestroy,\n OnInit,\n ViewChild\n} from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { AuthService } from '@app/core/services/auth.service';\nimport { CoreService } from '@app/core/services/core.service';\nimport { PrescriptionService } from '@app/modules/document/services/prescription.service';\nimport { HealthProfessionalService } from '@app/modules/health-professional/services/health-professional.service';\nimport { PatientsService } from '@app/modules/patients/services/patients.service';\nimport { ManipulatedProfileService } from '@app/modules/personalized-medications/services/manipulated-profile.service';\nimport { ModalSendDocumentComponent } from '@app/shared/components/modal-send-document/modal-send-document.component';\nimport { DateUtils } from '@app/shared/data/DateUtils';\nimport { Comercial, HealthProfessional, Patient } from '@app/shared/models';\nimport { User } from '@app/shared/models/decodedLoginToken';\nimport { ProfessionalType } from '@app/shared/models/professional-type.enum';\nimport { OnlyNumbersPipe } from '@app/shared/pipes';\nimport { AppToastService } from '@app/shared/services/app-toast.service';\nimport { ThemeService } from '@app/theme';\nimport { environment } from '@env/environment';\nimport { NzModalService } from 'ng-zorro-antd/modal';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { Observable, ReplaySubject, of } from 'rxjs';\nimport {\n catchError,\n debounceTime,\n distinctUntilChanged,\n map,\n startWith,\n switchMap,\n take,\n takeUntil,\n tap\n} from 'rxjs/operators';\nimport { ModalSelectPetComponent } from '../patients/pages/modal-select-pet/modal-select-pet.component';\nimport { PetPatientService } from '../patients/services/pet-patient.service';\nimport { ModalAddPatientComponent } from './../patients/pages/modal-add-patient/modal-add-patient.component';\nimport { ModalSearchComponent } from './../patients/pages/modal-search/modal-search.component';\nimport { AttestationService } from './pages/attestation/attestation.service';\nimport { ModalIframeComponent } from './pages/modal-iframe/modal-iframe.component';\nimport { ModalListVictaProtocolComponent } from './pages/modal-list-victa-protocol/modal-list-victa-protocol.component';\nimport { ModalSelectLayoutComponent } from './pages/modal-select-layout/modal-select-layout.component';\nimport { ModelAddFavoriteDocumentComponent } from './pages/model-add-favorite-document/model-add-favorite-document.component';\nimport { ModelListFavoriteDocumentComponent } from './pages/model-list-favorite-document/model-list-favorite-document.component';\nimport { OrientationService } from './pages/orientation/orientation.service';\nimport { AttestationModelService } from './services/attestation-model.service';\nimport { DocumentService } from './services/document.service';\nimport { ExamModelService } from './services/exam-model.service';\nimport { ExamService } from './services/exam.service';\nimport { InfusionService } from './services/infusion.service';\nimport { OrientationModelService } from './services/orientation-model.service';\nimport { PrescriptionModelService } from './services/prescription-model.service';\nimport { VictaProtocolService } from './services/victa-protocol.service';\nimport { nativeAsync } from '@app/shared/decorators/nativeAsync';\nimport { Prescription } from '@app/shared/models/prescription';\nimport { CrService } from './services/cr.service';\nimport { Base64Utils } from '@app/shared/utils/base64.utils';\n\ntype ReponsePlusDocuments = {\n id: number;\n downloadLink: string;\n};\n\ntype ReponsePlus = {\n message: string;\n documents: ReponsePlusDocuments[];\n};\n\n@Component({\n selector: 'app-document',\n templateUrl: './document.component.html',\n styleUrls: ['./document.component.scss']\n})\nexport class DocumentComponent implements OnInit, OnDestroy, AfterViewInit {\n actualDate = new Date();\n nzBackfill = false;\n isPatientNotFound = false;\n private patientCpf = '';\n local: Comercial;\n search = true;\n loading = false;\n signed = false;\n\n prescriber: HealthProfessional;\n patient: Patient;\n patients: Patient[];\n\n documentForm: FormGroup;\n patientForm: FormGroup;\n document: any;\n manipulatedProfile: any;\n selectedDocumentModel: any;\n modelId: any;\n\n adding = false;\n typesOfDocuments = ['Prescrição', 'Exame', 'Atestado', 'Outros'];\n typesOfDocumentsOptions = this.typesOfDocuments;\n documentTypes: any = {\n prescription: 'Prescrição',\n exam: 'Exame',\n attestation: 'Atestado',\n orientation: 'Outros'\n };\n documentType: string;\n backendVersion$: Observable<string>;\n isMobile = false;\n\n @ViewChild('addPatient')\n addPatient: any;\n\n @ViewChild(ModalSendDocumentComponent, { static: true })\n modalSendDocumentComponent: ModalSendDocumentComponent;\n\n @ViewChild(ModalSelectLayoutComponent, { static: true })\n modalSelectLayout: ModalSelectLayoutComponent;\n\n @ViewChild(ModalIframeComponent, { static: true })\n modalIframe: ModalIframeComponent;\n\n private destroyed$: ReplaySubject<boolean> = new ReplaySubject<boolean>();\n\n @HostListener('window:resize', ['$event'])\n onResize(event) {\n this.isMobile = this.coreService.isViewPortMobile();\n }\n\n constructor(\n private router: Router,\n private route: ActivatedRoute,\n private fb: FormBuilder,\n private healthProfessionalService: HealthProfessionalService,\n private patientService: PatientsService,\n private petService: PetPatientService,\n private prescriptionService: PrescriptionService,\n private attestationService: AttestationService,\n private examService: ExamService,\n private orientationService: OrientationService,\n private infusionService: InfusionService,\n private prescriptionModelService: PrescriptionModelService,\n private attestationModelService: AttestationModelService,\n private examModelService: ExamModelService,\n private orientationModelService: OrientationModelService,\n private victaProtocolService: VictaProtocolService,\n private notification: AppToastService,\n private authService: AuthService,\n private documentService: DocumentService,\n private manipulatedProfileService: ManipulatedProfileService,\n private modalService: BsModalService,\n private nzModalService: NzModalService,\n private themeService: ThemeService,\n private coreService: CoreService,\n private cdr: ChangeDetectorRef,\n private crService: CrService\n ) {\n this.documentType = this.typesOfDocuments[0];\n\n this.documentForm = this.fb.group({});\n this.patientForm = this.fb.group({\n _id: [null],\n cpf: [null],\n name: ['', [Validators.required]]\n });\n this.backendVersion$ = this.coreService.getBackendVersion();\n\n if (this.victaFeature) {\n this.typesOfDocuments.push('Infusão');\n this.documentTypes.infusion = 'Infusão';\n this.documentType = 'Infusão';\n }\n }\n ngAfterViewInit(): void {\n this.cdr.detectChanges();\n }\n\n @nativeAsync\n async ngOnInit() {\n this.loading = true;\n await this.requests(this.user._id);\n\n const {\n code,\n response,\n documentType,\n profileId,\n patientId,\n petId\n } = this.route.snapshot.queryParams;\n if (code && response && (patientId || petId)) {\n const responsePlus = Base64Utils.decode<ReponsePlus>(response);\n if (responsePlus.message === 'Signed OK' || responsePlus.message === 'Signed local OK') {\n this.modalSendDocumentComponent.createTplModal(code, patientId || petId, { isPet: !!petId });\n } else {\n this.notification.notify('error', 'Erro ao assinar documento!');\n console.log(response);\n this.router.navigate(['/prescription', code, 'edit']);\n }\n }\n\n if (profileId) {\n await this.getManipulatedProfile(profileId);\n }\n\n const id = this.route.snapshot.params.id || (!response && code);\n if (id) {\n try {\n const document = await this.documentService.getDocument(id, documentType);\n if (document.document === 'prescription') {\n await this.updateMedicaments(document);\n }\n this.fillForm(document);\n } catch (err) {\n console.error(err);\n this.router.navigate(['/prescription/new']);\n }\n }\n\n this.onChange();\n this.modelId = this.route.snapshot.params.modelId;\n const type = this.route.snapshot.params.documentType;\n\n if (this.modelId) {\n this.adding = true;\n this.documentType = this.documentTypes[type];\n this.selectedDocumentModel = await this.getDocumentModel();\n } else if (this.documentService.patientForm) {\n this.adding = true;\n this.patientForm = this.documentService.patientForm;\n this.documentService.patientForm = null;\n }\n\n this.loading = false;\n }\n\n get user(): User {\n return this.authService.user();\n }\n\n get patientRecordFeature(): boolean {\n return this.user && !!this.user.features.find(f => f.name === 'Prontuário');\n }\n\n get victaFeature(): boolean {\n return this.user && !!this.user.features.find(f => f.name === 'Victa');\n }\n\n get frontendVersion(): string {\n return this.coreService.frontendVersion;\n }\n\n get isVeterinarian(): boolean {\n return this.prescriber && this.prescriber.professionalType === ProfessionalType.VETERINARIAN;\n }\n\n get showCpfText() {\n return this.patient && !this.patient.cpf ? 'Mostrar CPF do Responsável' : 'Mostrar CPF do Paciente';\n }\n\n @nativeAsync\n private async getManipulatedProfile(profileId) {\n const manipulatedProfile = await this.manipulatedProfileService\n .getManipulatedProfileById(profileId)\n .toPromise();\n this.patientForm.patchValue({ ...manipulatedProfile.patient });\n this.manipulatedProfile = manipulatedProfile;\n this.typesOfDocumentsOptions = [this.typesOfDocuments[0]];\n this.adding = true;\n this.patientForm.disable();\n }\n @nativeAsync\n private async getDocumentModel() {\n let documentsModel: any;\n\n switch (this.documentType) {\n case this.typesOfDocuments[0]:\n documentsModel = await this.prescriptionModelService.getById(this.modelId);\n break;\n case this.typesOfDocuments[1]:\n documentsModel = await this.examModelService.getById(this.modelId);\n break;\n case this.typesOfDocuments[2]:\n documentsModel = await this.attestationModelService.getById(this.modelId);\n break;\n case this.typesOfDocuments[3]:\n documentsModel = await this.orientationModelService.getById(this.modelId);\n break;\n }\n return documentsModel;\n }\n\n get examList(): void {\n if (this.selectedDocumentModel) {\n return this.selectedDocumentModel.examList;\n }\n return this.document && this.document.examList;\n }\n\n private fillForm(document: any) {\n this.documentType = document.type;\n this.local = document.local;\n\n this.patientForm.patchValue(document.patient || document.pet);\n this.patient = document.patient || document.pet;\n\n this.document = document;\n if (this.route.snapshot.routeConfig.path === ':id/edit') {\n this.signed = document.status === 'Assinada';\n if (document.manipulatedprofile) {\n this.typesOfDocumentsOptions = [this.typesOfDocuments[0]];\n this.patientForm.disable();\n }\n } else {\n delete document.code;\n delete document.status;\n }\n\n this.toggleAdding();\n }\n @nativeAsync\n private async requests(userId: string) {\n const patient = JSON.parse(localStorage.getItem('patient'));\n if (patient) {\n this.patientForm.patchValue(patient);\n this.patient = patient;\n localStorage.removeItem('patient');\n }\n await this.getPrescriberData(userId);\n }\n @nativeAsync\n private async getPrescriberData(userId: string) {\n this.prescriber = await this.healthProfessionalService.getHealthProfessional(userId).toPromise();\n this.local = this.prescriber && this.prescriber.commercialData[0];\n }\n\n showModalSearch(cpf?: string) {\n const initialState = {\n user: this.user,\n prescriber: this.prescriber,\n addPatient: true,\n cpf\n };\n const modal = this.modalService.show(ModalSearchComponent, {\n initialState,\n backdrop: 'static',\n keyboard: false\n });\n\n modal.content.updateListPatientEvent.subscribe(patient => {\n this.patientForm.patchValue(patient);\n this.onChangePatient(patient);\n this.patient = patient;\n });\n modal.content.openModalAddPatientEvent.subscribe(consult => this.showModalAddPatient(consult));\n modal.content.openModalSelectPetEvent.subscribe(consult => this.showModalSelectPet(consult));\n modal.content.loadingSpinnerEvent.subscribe(loading => (this.loading = loading));\n }\n\n private showModalAddPatient(consult) {\n const initialState = {\n prescriber: this.prescriber,\n patient: consult.patient,\n isResponsible: consult.isResponsible,\n existingPatient: consult.existingPatient\n };\n const modal = this.modalService.show(ModalAddPatientComponent, {\n class: 'modal-lg',\n initialState,\n backdrop: 'static',\n keyboard: false\n });\n modal.content.updateListPatientEvent.subscribe(patient => {\n this.patientForm.patchValue(patient);\n this.onChangePatient(patient);\n this.patient = patient;\n });\n }\n\n private showModalSelectPet(consult) {\n const initialState = {\n prescriber: this.prescriber,\n pets: consult.patient.pets,\n responsible: consult.patient\n };\n const modal = this.modalService.show(ModalSelectPetComponent, {\n initialState,\n backdrop: 'static',\n keyboard: false\n });\n\n modal.content.submit.subscribe(patient => {\n this.patientForm.patchValue(patient);\n this.onChangePatient(patient);\n this.patient = patient;\n });\n }\n\n toggleAdding() {\n if (this.patientForm.get('_id').value === null) {\n this.notification.notify('warning', 'Aviso', 'Você precisa selecionar um paciente para iniciar');\n } else {\n this.adding = !this.adding;\n }\n }\n\n onChangePatient(patient: Patient): void {\n if (patient._id === undefined && this.onlyNumbers(this.patientCpf)) {\n this.showModalSearch(this.patientCpf);\n } else {\n this.patient = patient;\n this.patientForm.get('_id').setValue(patient._id);\n this.adding = true;\n }\n }\n\n handleCancel() {\n this.patients = [];\n this.patientForm\n .get('name')\n .setValue(this.patientForm.get('name').value.replace(/(Adicionar paciente )/gim, ''));\n }\n\n onChange(): void {\n let inputValue = '';\n\n this.patientForm\n .get('name')\n .valueChanges.pipe(\n debounceTime(environment.debounceTime),\n distinctUntilChanged(),\n tap(value => (inputValue = value)),\n switchMap(value => this.getPatients(value)),\n map((res: any) => {\n if (res) {\n if (this.isVeterinarian) {\n const { pets, patients } = res;\n if (pets) {\n // get pet by cpf\n if (pets._id) {\n return [pets];\n }\n\n // get pets by name\n if (pets.length > 0) {\n return pets;\n }\n }\n\n // no pets but patients (responsible) may have been found\n return this.handleResponse(inputValue, !!patients);\n }\n\n // get patient by cpf\n if (res._id) {\n return [res];\n }\n\n // get patients by name\n if (res.length > 0) {\n return res;\n }\n\n // no patients\n return this.handleResponse(inputValue);\n } else {\n this.patientForm.get('_id').setValue(null);\n }\n }),\n takeUntil(this.destroyed$),\n catchError((err, source) => {\n let arr = [];\n if (err.status === 404) {\n arr = this.handleResponse(inputValue);\n }\n return source.pipe(startWith(arr));\n })\n )\n .subscribe(patients => (this.patients = patients));\n }\n\n private onlyNumbers(value: String): Boolean {\n return value.match(/^[0-9]+$/) != null;\n }\n\n private getPatients(value: string) {\n if (!value || value.length < 3) {\n return of(null);\n }\n\n if (!value || value.length < 3) {\n return of(null);\n }\n\n const valueWithoutCharacters = new OnlyNumbersPipe().transform(value);\n const onlyNumbers = this.onlyNumbers(valueWithoutCharacters);\n\n const fullCpf = onlyNumbers && valueWithoutCharacters.length === 11;\n\n if (this.isVeterinarian) {\n if (fullCpf) {\n // get pet by cpf\n return this.petService.getPetsByResponsibleCpf(valueWithoutCharacters).pipe(\n map(res => ({ pets: res })),\n switchMap(res => {\n if (res.pets.length) {\n return of(res);\n }\n // if there are no pets, then try to get some patient by cpf\n return this.patientService\n .getPatientByCpf(valueWithoutCharacters)\n .pipe(map(res1 => ({ patients: res1 })));\n })\n );\n }\n\n // get pets by name\n return this.healthProfessionalService.getPets(value).pipe(map(res => ({ pets: res })));\n }\n\n if (fullCpf) {\n return this.patientService.getPatientByCpf(valueWithoutCharacters);\n }\n\n return this.healthProfessionalService.getPatientsByUserId(value, this.user._id);\n }\n\n private handleResponse(patientInfo: string, responsibleExists = false) {\n const cpf = new OnlyNumbersPipe().transform(patientInfo);\n const isOnlyNumbers = this.onlyNumbers(cpf);\n\n if (!isOnlyNumbers) {\n if (this.isVeterinarian) {\n return [\n {\n cpf: '-1',\n fullname:\n 'Você não possui esse paciente em sua lista de pacientes. ' +\n 'Digite o CPF completo para prescrever uma receita e o adicionaremos automaticamente à sua lista.'\n }\n ];\n }\n return [\n {\n cpf: '-1',\n fullname:\n 'Você não possui esse paciente em sua lista de pacientes. ' +\n 'Digite o CPF completo para prescrever uma receita e o adicionaremos automaticamente à sua lista.'\n }\n ];\n }\n\n if (isOnlyNumbers && cpf.length === 11) {\n this.patientCpf = cpf;\n let fullname = `Paciente com CPF ${patientInfo} não localizado na base. Deseja adicionar paciente?`;\n if (this.isVeterinarian) {\n if (responsibleExists) {\n fullname = `Responsável/Tutor com CPF ${patientInfo} já é cadastrado na base. Deseja adicionar?`;\n } else {\n fullname = `Responsável/Tutor com CPF ${patientInfo} não cadastrado na base. Deseja adicionar?`;\n }\n }\n\n return [{ cpf: '-1', fullname }];\n }\n }\n\n setSearch(search: boolean) {\n this.search = search;\n }\n @nativeAsync\n private async saveDocument() {\n try {\n const doc = this.documentForm.getRawValue();\n const patient = this.patientForm.value;\n if (this.isVeterinarian) {\n doc.pet = patient;\n } else {\n doc.patient = patient;\n }\n doc.local = this.local;\n doc.code = this.document && this.document.code;\n let documentSaved: any;\n switch (this.documentType) {\n case 'Prescrição':\n documentSaved = await this.prescriptionService\n .save({ prescriber: this.user._id, ...doc })\n .pipe(take(1))\n .toPromise();\n documentSaved.type = 'prescription';\n break;\n case 'Atestado':\n documentSaved = await this.attestationService\n .save({ prescriber: this.user._id, ...doc })\n .toPromise();\n documentSaved.type = 'attestation';\n break;\n case 'Exame':\n const message = this.hasDuplicatedMaterials(this.documentForm.value.examList);\n if (message) {\n this.notification.notify('warning', 'Aviso', message);\n this.loading = false;\n return null;\n }\n\n if (!this.documentForm.valid) {\n this.notification.notify(\n 'warning',\n 'Aviso',\n 'Você adicionou um novo campo mas não o preencheu.'\n );\n this.loading = false;\n return null;\n }\n\n documentSaved = await this.examService.save({ prescriber: this.user._id, ...doc }).toPromise();\n documentSaved.type = 'exam';\n\n break;\n case 'Outros':\n if (!this.documentForm.valid) {\n this.notification.notify('warning', 'Aviso', 'Orientações não pode ficar em branco');\n this.loading = false;\n return null;\n }\n documentSaved = await this.orientationService\n .save({ prescriber: this.user._id, ...doc })\n .toPromise();\n documentSaved.type = 'orientation';\n break;\n case 'Infusão':\n documentSaved = await this.infusionService\n .save({ prescriber: this.prescriber.userId, ...doc })\n .pipe(take(1))\n .toPromise();\n documentSaved.type = 'infusion';\n break;\n default:\n console.warn('Document type unknown: ', this.documentType);\n this.loading = false;\n return null;\n }\n return documentSaved;\n } catch (err) {\n if (err.status === 400) {\n this.notification.notify(\n 'error',\n 'Erro ao salvar documento',\n err.error.error && err.error.error.message\n );\n } else {\n this.notification.notify(\n 'error',\n 'Erro',\n `Erro ao salvar um documento do tipo ${this.documentType}`\n );\n }\n throw err;\n }\n }\n\n private hasDuplicatedMaterials(examList: any[]) {\n const duplicatedMaterials = this.findDuplicatedMaterials(examList);\n\n const duplicatedExams = examList\n .map(element => this.findDuplicatedExams(element.exams))\n .filter(arr => arr.length);\n\n if (duplicatedMaterials.length > 0) {\n return `Prescrição não pode conter materiais repetidos: ${duplicatedMaterials.join(', ')}.`;\n }\n if (duplicatedExams.length > 0) {\n return `Prescrição não pode conter exames repetidos: ${duplicatedExams.join(', ')}.`;\n }\n return '';\n }\n\n private findDuplicatedMaterials(arr) {\n return this.findDuplicatedItems(arr, 'material');\n }\n\n private findDuplicatedExams(arr) {\n return this.findDuplicatedItems(arr, 'name');\n }\n\n private findDuplicatedItems(arr, field) {\n const sorted_arr = arr.sort((a, b) => (a[field] > b[field] ? 1 : -1));\n const results = [];\n for (let i = 0; i < sorted_arr.length - 1; i++) {\n if (sorted_arr[i + 1][field] === sorted_arr[i][field]) {\n results.push(sorted_arr[i][field]);\n }\n }\n return results;\n }\n @nativeAsync\n async saveAndPreviewPdf() {\n if (this.documentType === this.documentTypes.prescription) {\n this.selectPrescriptionLayout('preview');\n } else {\n try {\n this.loading = true;\n const documentSaved = await this.saveDocument();\n await this.previewPdf(documentSaved);\n } catch (err) {\n console.error(err);\n }\n this.loading = false;\n }\n }\n @nativeAsync\n private async previewPdf(documentSaved: any, layout = {}) {\n try {\n this.loading = true;\n layout['theme'] = this.themeService.getActiveTheme().name;\n await this.documentService.generateAndOpenPdf(documentSaved.code, layout);\n this.router.navigate(['/prescription', documentSaved.code, 'edit']);\n } catch (err) {\n console.error(err);\n }\n this.loading = false;\n }\n @nativeAsync\n async saveAndSignPdf() {\n if (this.documentType === this.documentTypes.prescription) {\n this.selectPrescriptionLayout('sign');\n } else {\n try {\n this.loading = true;\n const documentSaved = await this.saveDocument();\n await this.signPdf(documentSaved.code);\n } catch (err) {\n console.error(err);\n }\n this.loading = false;\n }\n }\n @nativeAsync\n private async signPdf(code: string, layout = {}) {\n layout['theme'] = this.themeService.getActiveTheme().name;\n const url = await this.documentService.getUrlToSignDocument({\n code,\n prescriber: this.prescriber,\n patientId: this.patientForm.value._id,\n layout,\n victaFeature: this.victaFeature\n });\n window.location.href = url;\n // this.showSignatureModal(url);\n }\n\n private selectPrescriptionLayout(method: string) {\n let patientDoesNotHaveAddress = false;\n\n // TODO: verificar a questão de paciente menor de idade quando fica maior de idade o que ocorre com o responsável\n if (this.patient && this.patient.responsible) {\n patientDoesNotHaveAddress = this.responsibleDoesNotHaveAddress();\n } else {\n patientDoesNotHaveAddress = this.patientDoesNotHaveAddress();\n }\n\n this.modalSelectLayout.createTplModal(patientDoesNotHaveAddress);\n\n this.modalSelectLayout.selectLayout.pipe(take(1)).subscribe(async data => {\n this.loading = true;\n try {\n const { layout, addressValue } = data;\n if (layout === 'special' && patientDoesNotHaveAddress) {\n const updatedPatient = await this.updatePatientAddress(addressValue);\n if (this.patient.responsible) {\n this.patient.responsible = updatedPatient;\n } else {\n this.patient = updatedPatient;\n }\n }\n delete data.addressValue;\n await this.savedDocumentAndPreviewPdfOrSignPdf(method, data);\n } catch (err) {\n console.error(err);\n this.loading = false;\n }\n });\n }\n\n get isUnderAge() {\n if (this.patient.dateOfBirth) {\n return DateUtils.isUnderAge(this.patient.dateOfBirth);\n }\n return false;\n }\n\n private patientDoesNotHaveAddress() {\n return (\n !this.patient.address ||\n (this.patient.address &&\n !this.patient.address.cep &&\n !this.patient.address.street &&\n !this.patient.address.number &&\n !this.patient.address.neighborhood &&\n !this.patient.address.city &&\n !this.patient.address.uf)\n );\n }\n\n private responsibleDoesNotHaveAddress() {\n return (\n !this.patient.responsible ||\n !this.patient.responsible.address ||\n (this.patient.responsible.address &&\n !this.patient.responsible.address.cep &&\n !this.patient.responsible.address.street &&\n !this.patient.responsible.address.number &&\n !this.patient.responsible.address.neighborhood &&\n !this.patient.responsible.address.city &&\n !this.patient.responsible.address.uf)\n );\n }\n\n updatePatientAddress(address: any): Promise<Patient> {\n return new Promise(async (resolve, reject) => {\n try {\n const isUpdateAddressPatient = !this.patient.responsible;\n const restData = isUpdateAddressPatient ? this.patient : this.patient.responsible;\n const dataPatient = { ...restData, address };\n const patient = await this.patientService.update(restData._id, dataPatient).toPromise();\n resolve(patient);\n } catch (error) {\n this.notification.notify(\n 'error',\n 'Error',\n 'Ocorreu um erro ao tentar atualizar endereço do paciente!'\n );\n this.loading = false;\n reject(error);\n }\n });\n }\n\n @nativeAsync\n async savedDocumentAndPreviewPdfOrSignPdf(method: string, data: {}) {\n const documentSaved = await this.saveDocument();\n if (method === 'preview') {\n await this.previewPdf(documentSaved, data);\n } else {\n await this.signPdf(documentSaved.code, data);\n }\n }\n\n ngOnDestroy(): void {\n this.destroyed$.next(true);\n this.destroyed$.complete();\n }\n\n changeLocal(address) {\n this.local = address;\n }\n\n changeDocumentType(documentType) {\n this.documentType = documentType;\n }\n\n get invalidForm(): boolean {\n const obj = this.documentForm.value;\n return (\n !this.patientForm.value._id ||\n !this.patientForm.value.name ||\n !this.documentForm.valid ||\n (Object.keys(obj).length === 0 && obj.constructor === Object) ||\n this.signed ||\n !!this.modelId\n );\n }\n\n private resetForm() {\n this.patientForm.reset();\n this.documentForm.reset();\n this.selectedDocumentModel = null;\n this.adding = false;\n }\n\n @nativeAsync\n async showVictaProtocols() {\n try {\n this.loading = true;\n const groups = await this.victaProtocolService.getProtocols(this.prescriber.professionalType);\n this.loading = false;\n\n const modal = this.modalService.show(ModalListVictaProtocolComponent, {\n initialState: { groups },\n backdrop: 'static'\n });\n\n modal.content.selectEvent.subscribe(protocol => {\n this.selectedDocumentModel = protocol;\n this.adding = true;\n });\n } catch (err) {\n this.loading = false;\n this.notification.notify('warning', 'Aviso', 'Não foi possÃvel recuperar protocolos');\n }\n }\n\n @nativeAsync\n async showModelListFavoriteDocument() {\n try {\n this.loading = true;\n const documentsTemplate = await this.getListDocumentsTemplates();\n this.loading = false;\n\n if (documentsTemplate.length) {\n const initialState = {\n documentType: this.documentType,\n documentsTemplate\n };\n this.showFavoritePrescriptionsModel(initialState);\n } else {\n this.notification.notify(\n 'warning',\n 'Aviso',\n `Você ainda não possui modelos de ${this.documentType} cadastrados. Salve um modelo em Favoritos.`\n );\n }\n } catch (err) {\n this.loading = false;\n this.notification.notify('warning', 'Aviso', 'Não foi possÃvel recuperar a lista de modelos');\n }\n }\n\n private showFavoritePrescriptionsModel(initialState: any) {\n const modal = this.modalService.show(ModelListFavoriteDocumentComponent, {\n initialState,\n backdrop: 'static'\n });\n modal.content.selectEvent.subscribe(model => {\n this.selectedDocumentModel = model;\n this.adding = true;\n });\n\n modal.content.editEvent.subscribe(model => {\n this.documentService.patientForm = this.patientForm;\n model.document = model.document || 'prescription';\n this.router.navigate(['/prescription/model', model._id, model.document, 'edit']);\n });\n\n modal.content.deleteEvent.subscribe((modelId: string) => {\n modal.hide();\n this.nzModalService.confirm({\n nzTitle: 'Atenção',\n nzContent: `Tem certeza que deseja excluir este modelo de ${this.documentType} da sua lista?`,\n nzOnOk: async () => {\n try {\n await this.deleteDocumentModel(modelId);\n this.notification.notify('success', 'Sucesso', 'Modelo excluÃdo com sucesso');\n } catch (err) {\n this.notification.notify('warning', 'Aviso', 'Não foi possÃvel excluir este item');\n }\n },\n nzOnCancel: () => this.showFavoritePrescriptionsModel(initialState)\n });\n });\n }\n\n @nativeAsync\n private async deleteDocumentModel(modelId) {\n switch (this.documentType) {\n case this.typesOfDocuments[0]:\n await this.prescriptionModelService.deleteById(modelId);\n break;\n case this.typesOfDocuments[1]:\n await this.examModelService.deleteById(modelId);\n break;\n case this.typesOfDocuments[2]:\n await this.attestationModelService.deleteById(modelId);\n break;\n case this.typesOfDocuments[3]:\n await this.orientationModelService.deleteById(modelId);\n break;\n }\n }\n\n @nativeAsync\n private async getListDocumentsTemplates() {\n let documentsTemplate = [];\n switch (this.documentType) {\n case this.typesOfDocuments[0]:\n documentsTemplate = await this.prescriptionModelService.getListByPrescriberId(\n this.prescriber.userId\n );\n break;\n case this.typesOfDocuments[1]:\n documentsTemplate = await this.examModelService.getListByPrescriberId(this.prescriber.userId);\n break;\n case this.typesOfDocuments[2]:\n documentsTemplate = await this.attestationModelService.getListByPrescriberId(\n this.prescriber.userId\n );\n break;\n case this.typesOfDocuments[3]:\n documentsTemplate = await this.orientationModelService.getListByPrescriberId(\n this.prescriber.userId\n );\n break;\n }\n\n return documentsTemplate.filter(documentTemplate => documentTemplate.version !== 'BETA');\n }\n\n showModalAddFavoriteDocument() {\n if (this.documentForm.valid) {\n this.documentForm.value.prescriber = this.prescriber.userId;\n const initialState = {\n documentModel: this.documentForm.value,\n documentType: this.documentType\n };\n this.modalService.show(ModelAddFavoriteDocumentComponent, {\n class: 'modal-lg',\n initialState,\n backdrop: 'static',\n keyboard: false\n });\n } else {\n const msg = this.getFormError(this.documentType);\n this.notification.notify('warning', 'Aviso', msg);\n }\n }\n\n @nativeAsync\n async updateDocumentModel(model: any, modelId: string) {\n try {\n let modelSaved = null;\n\n switch (this.documentType) {\n case this.typesOfDocuments[3]:\n modelSaved = await this.orientationModelService.update(model, modelId);\n break;\n case this.typesOfDocuments[2]:\n modelSaved = await this.attestationModelService.update(model, modelId);\n break;\n case this.typesOfDocuments[1]:\n modelSaved = await this.examModelService.update(model, modelId);\n break;\n\n default:\n modelSaved = await this.prescriptionModelService.update(model, modelId);\n }\n\n this.selectedDocumentModel = undefined;\n this.modelId = undefined;\n\n this.notification.notify('success', 'Sucesso', 'Modelo salvo com sucesso');\n this.router.navigate(['/prescription/new']);\n } catch (err) {\n console.error(err);\n this.notification.notify('error', 'Aviso', 'Erro ao atualizar modelo');\n }\n }\n\n cancelEditModel() {\n this.router.navigate(['/prescription/new']);\n }\n\n isThemeActiveReceitaDigital() {\n const active = this.themeService.getActiveTheme();\n return active.name === 'theme-receita-digital';\n }\n\n async updateMedicaments(prescription: Prescription) {\n for await (const medicament of prescription.medicaments) {\n if (!!medicament.ean) {\n try {\n const medicamentsCR = await this.crService.searchMedicament(medicament.ean).toPromise();\n if (medicamentsCR.length > 0) {\n const medicamentCR = medicamentsCR[0];\n medicament.name = medicamentCR.nome;\n medicament.prescriptionTypeId = medicamentCR.prescriptionTypeId;\n medicament.typeCr = medicamentCR.typeCr;\n medicament.type = 'industrialized';\n medicament.laboratory = medicamentCR.laboratorio;\n medicament.description = medicamentCR.apresentacaoCustomizada;\n medicament.medicamentId = medicamentCR.id;\n medicament.principle = medicamentCR.principio;\n }\n } catch (error) {\n console.log(error);\n this.notification.notify('error', 'Erro ao consultar dados do medicamento.');\n }\n } else {\n medicament.type = 'free-text';\n }\n }\n }\n\n private getFormError(documentType: string): string {\n switch (documentType) {\n case 'Prescrição':\n return 'Selecione e preencha dados do medicamento ou digite um texto livre';\n case 'Exame':\n return 'Selecione um material e um exame para cada material';\n default:\n return 'Preencha os campos obrigatórios';\n }\n }\n\n clearSelectionPatient() {\n this.patient = null;\n this.patientForm.reset();\n }\n}\n","import { DocumentGuard } from './guards/document.guard';\nimport { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\nimport { ConfirmationComponent } from './pages/confirmation/confirmation.component';\nimport { RetentionConfirmationComponent } from './pages/retention-confirmation/retention-confirmation.component';\nimport { ListingComponent } from './pages/listing/listing.component';\nimport { UploadPdfComponent } from './pages/prescription/upload-pdf.component';\nimport { DocumentComponent } from './document.component';\n\nconst routes: Routes = [\n { path: 'new', component: DocumentComponent, canActivate: [DocumentGuard] },\n { path: ':id/new', component: DocumentComponent, canActivate: [DocumentGuard] },\n { path: ':id/edit', component: DocumentComponent, canActivate: [DocumentGuard] },\n {\n path: 'model/:modelId/:documentType/edit',\n component: DocumentComponent,\n canActivate: [DocumentGuard]\n },\n { path: 'confirmation/:param', component: ConfirmationComponent },\n { path: 'confirmation/successful/:dispensationCode', component: RetentionConfirmationComponent },\n { path: 'listing-prescriptions/:param', component: ListingComponent },\n { path: 'upload/:code/:id', component: UploadPdfComponent }\n];\n\n@NgModule({\n imports: [RouterModule.forChild(routes)],\n exports: [RouterModule]\n})\nexport class DocumentRoutingModule {}\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { Attestation } from '@app/shared/models/attestation';\nimport { Patient } from '@app/shared/models/patient';\nimport { ColorSetting } from '@app/shared/models/color-setting';\n\n@Component({\n selector: 'app-attestation',\n templateUrl: './attestation.component.html',\n styleUrls: ['./attestation.component.scss']\n})\nexport class AttestationComponent implements OnInit {\n @Input() patient: Patient;\n @Input() isVeterinarian: boolean;\n @Input() colorSetting: ColorSetting;\n @Output() formEmitter: EventEmitter<FormGroup> = new EventEmitter<FormGroup>();\n\n attestationForm: FormGroup;\n\n constructor(private fb: FormBuilder) {\n this.attestationForm = this.fb.group({\n showPatientCpf: [false],\n showPrescriberCpf: [false],\n text: this.fb.control('', Validators.required),\n description: this.fb.control('')\n });\n }\n\n ngOnInit() {\n this.onChangeValue();\n this.formEmitter.emit(this.attestationForm);\n }\n\n get showCpfText() {\n return this.patient && !this.patient.cpf ? 'Mostrar CPF do Responsável' : 'Mostrar CPF do Paciente';\n }\n\n @Input()\n set attestation(attestation: Attestation) {\n if (attestation) {\n const value = attestation.description.reduce(\n (accumulator, currentValue) => accumulator + '\\n' + currentValue\n );\n this.attestationForm.get('text').setValue(value);\n this.attestationForm.get('description').setValue(attestation.description);\n }\n\n this.onChangeValue();\n }\n\n @Input()\n set attestationModel(attestationModel: any) {\n if (attestationModel) {\n this.attestationForm.addControl('title', this.fb.control('', Validators.required));\n\n const value = attestationModel.description.reduce(\n (accumulator, currentValue) => accumulator + '\\n' + currentValue\n );\n this.attestationForm.get('title').setValue(attestationModel.title);\n this.attestationForm.get('text').setValue(value);\n this.attestationForm.get('description').setValue(attestationModel.description);\n }\n\n this.onChangeValue();\n }\n\n onChangeValue() {\n this.attestationForm.get('text').valueChanges.subscribe(val => {\n if (val) {\n const value = val.split('\\n');\n this.attestationForm.get('description').setValue(value);\n }\n });\n this.formEmitter.emit(this.attestationForm);\n }\n}\n","export default \"<div class=\\\"attestation\\\" [formGroup]=\\\"attestationForm\\\">\\n <nz-form-item *ngIf=\\\"patient\\\">\\n <label nz-checkbox formControlName=\\\"showPatientCpf\\\">\\n <span>\\n {{ showCpfText }}\\n </span>\\n </label>\\n\\n <label nz-checkbox formControlName=\\\"showPrescriberCpf\\\">\\n <span>\\n Mostrar CPF do Prescritor\\n </span>\\n </label>\\n </nz-form-item>\\n\\n <label for=\\\"material\\\" theme>Digite aqui o conteúdo do atestado</label>\\n <textarea\\n rows=\\\"6\\\"\\n nz-input\\n formControlName=\\\"text\\\"\\n [ngStyle]=\\\"{\\n 'background-color': colorSetting?.inputBackground,\\n 'border-color': colorSetting?.inputBorder\\n }\\\"\\n ></textarea>\\n</div>\\n\";","export default \".attestation {\\n color: black;\\n}\\n.attestation .font {\\n font-size: 24px !important;\\n}\\n.attestation .underlined {\\n text-decoration: underline;\\n}\\n.attestation .info-ipt {\\n text-align: center;\\n width: 135px;\\n border: 0;\\n border-bottom: solid 2px;\\n outline: none;\\n}\\n.attestation .info-ipt::-webkit-input-placeholder {\\n color: #bdc2c7;\\n}\\n.attestation .ant-select {\\n width: 165px;\\n}\\n.attestation textarea {\\n line-height: 2;\\n}\";","import { Component, EventEmitter, Input, OnInit, Output, ViewEncapsulation } from '@angular/core';\nimport { FormArray, FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { ExamType, Patient } from '@app/shared/models';\nimport { ColorSetting } from '@app/shared/models/color-setting';\nimport { Exam, ExamItem, ExamList } from '@app/shared/models/exam';\nimport { AppToastService } from '@app/shared/services/app-toast.service';\nimport { ExamService } from '../../services/exam.service';\n\n@Component({\n selector: 'app-exam',\n templateUrl: './exam.component.html',\n styleUrls: ['./exam.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class ExamComponent implements OnInit {\n @Input() colorSetting: ColorSetting;\n @Input() patient: Patient;\n @Input() isVeterinarian: boolean;\n @Output() formEmitter: EventEmitter<FormGroup> = new EventEmitter<FormGroup>();\n position: number;\n adding: boolean;\n materialSelected: string;\n materials: string[];\n examTypes: ExamType[];\n hasForm = false;\n showJustification = false;\n\n examForm: FormGroup;\n\n constructor(\n private fb: FormBuilder,\n private examService: ExamService,\n private notification: AppToastService\n ) {}\n\n ngOnInit() {\n this.position = 0;\n this.buildForm();\n this.examService.getMaterials().subscribe(materials => {\n this.materials = materials;\n });\n }\n\n get showCpfText() {\n return this.patient && !this.patient.cpf ? 'Mostrar CPF do Responsável' : 'Mostrar CPF do Paciente';\n }\n\n private buildForm(exam?: Exam) {\n if (!this.examForm) {\n this.examForm = this.fb.group({\n showPatientCpf: [false],\n showPrescriberCpf: [false],\n examList: this.fb.array([], Validators.required),\n justification: this.fb.control([]),\n text: this.fb.control('')\n });\n this.examListForm.push(this.formExamList());\n }\n\n if (exam && exam.document === 'exam') {\n if (exam.title) {\n this.examForm.addControl('title', this.fb.control('', Validators.required));\n this.examForm.get('title').setValue(exam.title);\n }\n\n this.examListForm.clear();\n exam.examList.forEach(ex => this.addMaterial(ex));\n this.examForm.get('justification').setValue(exam.justification);\n if (exam.justification) {\n const value = exam.justification.reduce((acc, val) => `${acc}\\n${val}`, '');\n this.examForm.get('text').setValue(value);\n this.showJustification = !!value;\n }\n }\n this.formEmitter.emit(this.examForm);\n }\n\n @Input()\n set exam(exam: Exam) {\n if (exam) {\n this.buildForm(exam);\n }\n }\n\n @Input()\n set examModel(examModel: Exam) {\n if (examModel) {\n this.buildForm(examModel);\n }\n }\n\n private formExamList(examList: ExamList = null) {\n const group = this.fb.group({\n material: this.fb.control('', Validators.required),\n exams: this.fb.array([])\n });\n\n const examsForm = <FormArray>group.get('exams');\n if (examList) {\n const materialForm = group.get('material');\n\n const { material, exams } = examList;\n materialForm.setValue(material);\n exams.forEach(exam => examsForm.push(this.formExamItem(exam)));\n } else {\n examsForm.push(this.formExamItem());\n }\n\n return group;\n }\n\n private formExamItem(exam: ExamItem = null) {\n return this.fb.group({\n name: this.fb.control(exam ? exam.name : '', Validators.required),\n tuss: this.fb.control(exam ? exam.tuss : ''),\n position: this.fb.control(this.position++)\n });\n }\n\n get examListForm(): FormArray {\n return <FormArray>this.examForm.get('examList');\n }\n\n private getExam(examListIndex: number) {\n return this.examListForm.at(examListIndex);\n }\n\n onChangeExamType(examType: string, examListIndex: number) {\n this.adding = true;\n const examList: ExamList = this.getExam(examListIndex).value;\n const filterExists = examList.exams.map(itemExists => itemExists.name);\n this.examService.getExamTypes(examList.material, examType).subscribe(res => {\n const resFiltered = res.filter(itemRes => !filterExists.includes(itemRes.exam));\n this.examTypes = resFiltered;\n this.adding = false;\n });\n }\n\n onChangeJustification(text: string) {\n const value = text.split('\\n');\n this.examForm.get('justification').setValue(value);\n }\n\n selectExamType(exam: ExamType, index: number) {\n this.examListForm.value[index] = exam._id;\n }\n\n addNewExam(examListIndex: number): void {\n const exam: FormArray = <FormArray>this.getExam(examListIndex).get('exams');\n if (exam.valid) {\n exam.push(this.formExamItem());\n } else {\n this.notification.notify('warning', 'Aviso', 'Você precisa selecionar um exame.');\n }\n }\n\n addMaterial(examList: ExamList = null): void {\n const list = this.examListForm.value;\n const filterExists = list.map(itemExists => itemExists.material);\n\n this.examService.getMaterials().subscribe(materials => {\n const resFiltered = materials.filter(itemRes => !filterExists.includes(itemRes));\n this.materials = resFiltered;\n });\n if (list.length === 0 || list[list.length - 1].material) {\n this.examListForm.push(this.formExamList(examList));\n }\n }\n\n addJustification(): void {\n if (this.examListForm.value.length) {\n this.showJustification = true;\n }\n }\n\n removeJustification(): void {\n this.onChangeJustification('');\n this.showJustification = false;\n }\n\n removeMaterialAt(index: number): void {\n if (this.examListForm.length > 1) {\n this.examListForm.removeAt(index);\n } else if (this.examListForm.length === 1) {\n this.examListForm.at(index).reset();\n }\n }\n\n removeExamAt(examListIndex: number, examIndex: number): void {\n const exams: FormArray = <FormArray>this.examListForm.at(examListIndex).get('exams');\n if (exams.length > 1) {\n exams.removeAt(examIndex);\n } else if (exams.length === 1) {\n exams.at(examIndex).reset();\n }\n }\n\n hasMaterial(examListIndex: number) {\n return !!(<FormArray>this.examListForm.at(examListIndex).value.material);\n }\n}\n","export default \"<ng-container [formGroup]=\\\"examForm\\\">\\n <div class=\\\"exam row\\\">\\n <div class=\\\"col-12\\\" *ngIf=\\\"patient\\\">\\n <nz-form-item>\\n <label nz-checkbox formControlName=\\\"showPatientCpf\\\">\\n <span>\\n {{ showCpfText }}\\n </span>\\n </label>\\n\\n <label nz-checkbox formControlName=\\\"showPrescriberCpf\\\">\\n <span>\\n Mostrar CPF do Prescritor\\n </span>\\n </label>\\n </nz-form-item>\\n </div>\\n </div>\\n <div class=\\\"exam row\\\">\\n <div\\n class=\\\"col-md-6 col-12\\\"\\n *ngFor=\\\"let examList of examListForm['controls']; index as examListIndex\\\"\\n formArrayName=\\\"examList\\\"\\n >\\n <div class=\\\"form-area\\\" formGroupName=\\\"{{ examListIndex }}\\\">\\n <label for=\\\"material\\\">Material</label>\\n <div class=\\\"col-md-11 col-12 input-area\\\">\\n <nz-select\\n *ngIf=\\\"\\n colorSetting && (colorSetting.inputBackground || colorSetting.inputBorder);\\n else selectTheme\\n \\\"\\n id=\\\"specialties\\\"\\n nzDropdownClassName=\\\"account-select\\\"\\n nzPlaceHolder=\\\"Selecione o material\\\"\\n formControlName=\\\"material\\\"\\n nzAllowClear\\n nzShowSearch\\n [ngStyle]=\\\"{\\n 'background-color': colorSetting?.inputBackground,\\n 'border-color': colorSetting?.inputBorder,\\n border: colorSetting?.inputBorder && '1px ' + colorSetting.inputBorder + ' solid',\\n 'border-radius': colorSetting?.inputBorder && '10px'\\n }\\\"\\n >\\n <nz-option *ngFor=\\\"let material of materials\\\" [nzLabel]=\\\"material\\\" [nzValue]=\\\"material\\\">\\n </nz-option>\\n </nz-select>\\n <ng-template #selectTheme>\\n <nz-select\\n id=\\\"specialties\\\"\\n nzDropdownClassName=\\\"account-select\\\"\\n nzPlaceHolder=\\\"Selecione o material\\\"\\n formControlName=\\\"material\\\"\\n nzAllowClear\\n nzShowSearch\\n >\\n <nz-option *ngFor=\\\"let material of materials\\\" [nzLabel]=\\\"material\\\" [nzValue]=\\\"material\\\">\\n </nz-option>\\n </nz-select>\\n </ng-template>\\n\\n <a class=\\\"remove-icon\\\" (click)=\\\"removeMaterialAt(examListIndex)\\\"\\n ><i class=\\\"fa fa-trash-solid\\\"></i\\n ></a>\\n </div>\\n\\n <div class=\\\"exam-type-area ml-5\\\" *ngIf=\\\"hasMaterial(examListIndex)\\\" formArrayName=\\\"exams\\\">\\n <label for=\\\"examName\\\">Exame</label>\\n <div\\n class=\\\"exams-area col-md-11 col-12\\\"\\n *ngFor=\\\"\\n let exam of examList['controls'].exams['controls'];\\n index as examIndex;\\n let last = last\\n \\\"\\n >\\n <div class=\\\"input-area-exam\\\" formGroupName=\\\"{{ examIndex }}\\\">\\n <input type=\\\"hidden\\\" formControlName=\\\"position\\\" name=\\\"position\\\" value=\\\"{{ examIndex }}\\\" />\\n\\n <input\\n id=\\\"examName\\\"\\n formControlName=\\\"name\\\"\\n (input)=\\\"onChangeExamType($event.target.value, examListIndex)\\\"\\n [nzAutocomplete]=\\\"autoName\\\"\\n nz-input\\n placeholder=\\\"Tipo de exame\\\"\\n [ngStyle]=\\\"{\\n 'background-color': colorSetting?.inputBackground,\\n 'border-color': colorSetting?.inputBorder\\n }\\\"\\n />\\n\\n <nz-autocomplete #autoName nzBackfill>\\n <nz-auto-option\\n *ngFor=\\\"let option of examTypes\\\"\\n [nzLabel]=\\\"option.exam\\\"\\n [nzValue]=\\\"option.exam\\\"\\n class=\\\"mao\\\"\\n >\\n {{ option.exam }}\\n </nz-auto-option>\\n </nz-autocomplete>\\n\\n <a class=\\\"remove-icon\\\" (click)=\\\"removeExamAt(examListIndex, examIndex)\\\"\\n ><i class=\\\"fa fa-trash-solid\\\"></i\\n ></a>\\n\\n <button\\n *ngIf=\\\"last; else divVazia\\\"\\n nz-button\\n class=\\\"btn btn-icon btn-add-outiline text-capitalize btn-exam\\\"\\n type=\\\"button\\\"\\n (click)=\\\"addNewExam(examListIndex)\\\"\\n [ngStyle]=\\\"{\\n 'background-color': colorSetting?.secondary,\\n 'border-color': colorSetting?.secondary\\n }\\\"\\n >\\n <i class=\\\"fas fa-plus\\\"></i>\\n </button>\\n <ng-template #divVazia>\\n <div> </div>\\n </ng-template>\\n </div>\\n </div>\\n </div>\\n </div>\\n </div>\\n <div class=\\\"col-12\\\">\\n <div class=\\\"add-button btn-material mb-2\\\">\\n <button\\n nz-button\\n class=\\\"btn btn-add-outiline text-capitalize\\\"\\n type=\\\"button\\\"\\n (click)=\\\"addMaterial()\\\"\\n [ngStyle]=\\\"{\\n 'background-color': colorSetting?.secondary,\\n 'border-color': colorSetting?.secondary\\n }\\\"\\n >\\n <span>Adicionar Material</span>\\n </button>\\n <button\\n *ngIf=\\\"!showJustification\\\"\\n nz-button\\n class=\\\"btn btn-icon btn-add-outiline text-capitalize\\\"\\n type=\\\"button\\\"\\n (click)=\\\"addJustification()\\\"\\n [ngStyle]=\\\"{\\n 'background-color': colorSetting?.secondary,\\n 'border-color': colorSetting?.secondary\\n }\\\"\\n >\\n <span>Inserir Justificativa</span>\\n </button>\\n <button\\n *ngIf=\\\"showJustification\\\"\\n nz-button\\n class=\\\"btn btn-icon btn-add-outiline text-capitalize\\\"\\n type=\\\"button\\\"\\n (click)=\\\"removeJustification()\\\"\\n [ngStyle]=\\\"{\\n 'background-color': colorSetting?.secondary,\\n 'border-color': colorSetting?.secondary\\n }\\\"\\n >\\n <span>Remover Justificativa</span>\\n </button>\\n </div>\\n <div *ngIf=\\\"showJustification\\\" class=\\\"mt-2\\\">\\n <label for=\\\"material\\\">Justificativa:</label>\\n <textarea\\n rows=\\\"4\\\"\\n nz-input\\n formControlName=\\\"text\\\"\\n (input)=\\\"onChangeJustification($event.target.value)\\\"\\n placeholder=\\\"Texto livre\\\"\\n ></textarea>\\n </div>\\n </div>\\n </div>\\n</ng-container>\\n\";","export default \".exam {\\n justify-content: center;\\n}\\n.exam ::ng-deep .ng-star-inserted {\\n margin-bottom: 15px;\\n}\\n.exam .form-area {\\n margin-bottom: 25px;\\n}\\n.exam .form-area .input-area {\\n display: flex;\\n align-items: center;\\n gap: 8px;\\n}\\n.exam .form-area .input-area .remove-icon:hover {\\n color: red;\\n}\\n.exam .form-area .exam-type-area {\\n display: flex;\\n flex-direction: column;\\n gap: 8px;\\n margin-left: 50px;\\n}\\n.exam .form-area .exam-type-area .exams-area {\\n width: 100%;\\n}\\n.exam .input-area-exam {\\n display: flex;\\n align-items: center;\\n gap: 8px;\\n}\\n.exam .btn {\\n padding: 0px 20px;\\n}\\n.exam .add-button {\\n display: flex;\\n justify-content: center;\\n}\\n.exam textarea {\\n line-height: 2;\\n}\\n.btn-exam {\\n padding: 0px 20px;\\n float: right;\\n}\\n.btn-material {\\n margin-top: 70px;\\n}\\n.exam .form-area .exam-type-area {\\n margin-left: 0;\\n}\\n.btn-add-outiline {\\n display: flex;\\n padding: 0 0 0 8px;\\n height: 40px;\\n align-items: center;\\n border-radius: 10px;\\n overflow: hidden;\\n border: 0;\\n font-family: \\\"probold\\\", sans-serif;\\n background-color: var(--bg-color-secondary);\\n color: var(--color-white);\\n}\\n.btn-add-outiline:focus {\\n background-color: var(--bg-color-secondary);\\n color: var(--color-white);\\n}\\n.btn-add-outiline:hover {\\n background-color: var(--bg-color-primary);\\n}\";","import { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\nimport { FormArray, FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { ColorSetting } from '@app/shared/models/color-setting';\nimport { Infusion } from '@app/shared/models/infusion';\nimport { Protocol } from '@app/shared/models/protocol';\n\n@Component({\n selector: 'app-infusion-protocol',\n templateUrl: './infusion-protocol.component.html',\n styleUrls: ['./infusion-protocol.component.scss']\n})\nexport class InfusionProtocolComponent implements OnInit, OnChanges {\n @Input() colorSetting: ColorSetting;\n @Input() protocolSelected: any;\n\n @Output() formEmitter: EventEmitter<FormGroup> = new EventEmitter<FormGroup>();\n\n form: FormGroup;\n constructor(private readonly fb: FormBuilder) {\n this.form = this.fb.group({\n protocols: this.fb.array([], Validators.required)\n });\n }\n\n ngOnInit() {\n this.formEmitter.emit(this.form);\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['protocolSelected']) {\n const protocolSelected: Protocol = changes['protocolSelected'].currentValue;\n if (protocolSelected) {\n this.addProtocol(protocolSelected);\n }\n }\n }\n\n @Input()\n set infusion(infusion: Infusion) {\n if (infusion) {\n infusion.protocols.forEach(protocol => this.addProtocol(protocol));\n }\n }\n\n get protocols() {\n return this.form.controls['protocols'] as FormArray;\n }\n\n addProtocol(protocol: Protocol) {\n const phasesGroups = protocol.phases.map((phase: any) =>\n this.fb.group({\n name: [phase.name],\n dosage: [phase.dosage, Validators.required],\n observation: [phase.observation]\n })\n );\n\n const protocolGroup = this.fb.group({\n name: [protocol.name],\n code: [protocol.code],\n phases: this.fb.array([...phasesGroups])\n });\n\n this.protocols.push(protocolGroup);\n }\n\n deleteProtocol(protocolIndex: number) {\n this.protocols.removeAt(protocolIndex);\n }\n}\n","export default \"<form [formGroup]=\\\"form\\\">\\n <ng-container formArrayName=\\\"protocols\\\">\\n <div\\n *ngFor=\\\"let protocolFormGroup of protocols.controls; let i = index\\\"\\n [formGroup]=\\\"protocolFormGroup\\\"\\n class=\\\"container-protocol\\\"\\n >\\n <div class=\\\"protocol-inputs\\\">\\n <div *ngIf=\\\"protocolFormGroup.value as protocol\\\">\\n <h4 class=\\\"title\\\">{{ i + 1 }}. {{ protocol.name }}</h4>\\n <div\\n *ngFor=\\\"let phaseFormGroup of protocolFormGroup.get('phases')['controls']; let j = index\\\"\\n [formGroup]=\\\"phaseFormGroup\\\"\\n >\\n <div *ngIf=\\\"phaseFormGroup.value as phase\\\">\\n <div *ngIf=\\\"j\\\" class=\\\"mt-4\\\"></div>\\n <h6 *ngIf=\\\"phase.name\\\" class=\\\"title\\\">{{ phase.name }}</h6>\\n <nz-form-item>\\n <nz-form-control>\\n <textarea\\n [ngStyle]=\\\"{ color: colorSetting?.primary }\\\"\\n [id]=\\\"'dosage_' + j\\\"\\n appAutoSize\\n appFocus\\n nz-input\\n [value]=\\\"phase.dosage\\\"\\n disabled\\n class=\\\"dosage\\\"\\n ></textarea>\\n </nz-form-control>\\n </nz-form-item>\\n <nz-form-item>\\n <label [ngStyle]=\\\"{ color: colorSetting?.primary, 'font-weight': 'bold' }\\\"\\n >Observação</label\\n >\\n <nz-form-control>\\n <textarea\\n [ngStyle]=\\\"{ color: colorSetting?.primary, 'border-color': colorSetting?.primary }\\\"\\n appFocus\\n appAutoSize\\n focus=\\\"true\\\"\\n placeholder=\\\"Digite uma observação\\\"\\n formControlName=\\\"observation\\\"\\n nz-input\\n class=\\\"medicationNameInput\\\"\\n ></textarea>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n </div>\\n </div>\\n </div>\\n <div class=\\\"protocol-btn-remove\\\">\\n <span class=\\\"btn-inner--icon p-5\\\" style=\\\"cursor: pointer;\\\" (click)=\\\"deleteProtocol(i)\\\"\\n ><i class=\\\"fa fa-trash-solid\\\"></i\\n ></span>\\n </div>\\n </div>\\n </ng-container>\\n</form>\\n\";","export default \".container-protocol {\\n display: flex;\\n align-items: center;\\n padding: 20px;\\n position: relative;\\n}\\n@media (max-width: 1025px) {\\n .container-protocol {\\n padding: 0;\\n }\\n}\\n.dosage {\\n height: 100%;\\n box-shadow: none;\\n}\\n.container-protocol .protocol-inputs {\\n flex: 1;\\n}\\n.protocol-btn-remove {\\n max-width: 6.25rem;\\n width: 100%;\\n}\";","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { Orientation, Patient } from '@app/shared/models';\nimport { ColorSetting } from '@app/shared/models/color-setting';\n\n@Component({\n selector: 'app-orientation',\n templateUrl: './orientation.component.html',\n styleUrls: ['./orientation.component.scss']\n})\nexport class OrientationComponent implements OnInit {\n @Input() patient: Patient;\n @Input() orientation: Orientation;\n @Input() editMode = false;\n @Input() colorSetting: ColorSetting;\n @Input() isVeterinarian: boolean;\n @Output() formEmitter = new EventEmitter<FormGroup>();\n\n orientations: string;\n orientationForm: FormGroup;\n\n constructor(private fb: FormBuilder) {\n this.orientationForm = this.fb.group({\n title: ['', Validators.required],\n text: ['', Validators.required],\n orientations: [''],\n showPatientCpf: [false],\n showPrescriberCpf: [false]\n });\n }\n\n ngOnInit() {\n if (this.orientation) {\n this.orientationForm.get('title').setValue(this.orientation.title);\n const value = this.orientation.orientations.reduce(\n (accumulator, currentValue) => accumulator + '\\n' + currentValue\n );\n this.orientationForm.get('text').setValue(value);\n this.orientationForm.get('orientations').setValue(this.orientation.orientations);\n }\n\n this.orientationForm.get('text').valueChanges.subscribe(val => {\n if (val) {\n const value = val.split('\\n');\n this.orientationForm.get('orientations').setValue(value);\n }\n });\n this.formEmitter.emit(this.orientationForm);\n }\n\n @Input()\n set orientationModel(orientationModel: any) {\n if (orientationModel) {\n const value = orientationModel.orientations.reduce((acc, val) => acc + '\\n' + val);\n this.orientationForm.get('text').setValue(value);\n this.orientationForm.get('title').setValue(orientationModel.title);\n this.orientationForm.get('orientations').setValue(orientationModel.orientations);\n }\n }\n\n get showCpfText() {\n return this.patient && !this.patient.cpf ? 'Mostrar CPF do Responsável' : 'Mostrar CPF do Paciente';\n }\n}\n","export default \"<div class=\\\"orientation\\\" [formGroup]=\\\"orientationForm\\\">\\n <nz-form-item *ngIf=\\\"patient\\\">\\n <label nz-checkbox formControlName=\\\"showPatientCpf\\\">\\n <span> {{ showCpfText }} </span>\\n </label>\\n <label nz-checkbox formControlName=\\\"showPrescriberCpf\\\">\\n <span> Mostrar CPF do Prescritor </span>\\n </label>\\n </nz-form-item>\\n <label for=\\\"material\\\">TÃtulo</label>\\n <input\\n id=\\\"title\\\"\\n class=\\\"input-name\\\"\\n formControlName=\\\"title\\\"\\n nz-input\\n placeholder=\\\"Digite o tÃtulo do documento\\\"\\n [ngStyle]=\\\"{\\n 'background-color': colorSetting?.inputBackground,\\n 'border-color': colorSetting?.inputBorder\\n }\\\"\\n />\\n <label for=\\\"material\\\">Escreva o conteúdo do documento:</label>\\n <textarea\\n rows=\\\"4\\\"\\n nz-input\\n formControlName=\\\"text\\\"\\n [ngStyle]=\\\"{\\n 'background-color': colorSetting?.inputBackground,\\n 'border-color': colorSetting?.inputBorder\\n }\\\"\\n ></textarea>\\n</div>\\n\";","export default \"textarea {\\n padding: 20px;\\n}\";","import { Component, Input, OnInit } from '@angular/core';\nimport { AuthService } from '@app/core/services/auth.service';\nimport { ThemeService } from '@app/theme';\n\n@Component({\n selector: 'app-navigation',\n template: `\n <nav class=\"navbar navbar-expand-lg navbar-light\" theme>\n <a class=\"navbar-brand\">\n <img\n [src]=\"isThemeActiveReceitaDigital() ? 'assets/img/logo-03.png' : 'assets/img/mrd/logo-03.png'\"\n [alt]=\"isThemeActiveReceitaDigital() ? 'Logo Receita Digital' : 'Logo MRD'\"\n />\n </a>\n <div class=\"brand-bg bg-primary\" *ngIf=\"brandBackGround\">\n <h4 class=\"title-semi-bold\">{{ title }}</h4>\n </div>\n <div class=\"navbar-text\" *ngIf=\"!brandBackGround\">\n <h4 class=\"title-semi-bold\">{{ title }}</h4>\n </div>\n <div class=\"container-fluid\">\n <button\n class=\"navbar-toggler\"\n type=\"button\"\n data-toggle=\"collapse\"\n data-target=\"#navbar-default\"\n aria-controls=\"navbar-default\"\n aria-expanded=\"false\"\n aria-label=\"Toggle navigation\"\n >\n <span class=\"navbar-toggler-icon\"></span>\n </button>\n <div class=\"collapse navbar-collapse\" id=\"navbar-default\">\n <div class=\"navbar-header\"></div>\n <div class=\"navbar-collapse-header\">\n <div class=\"row\">\n <div class=\"col-6 collapse-brand\">\n <a href=\"#\">\n <img src=\"assets/img/logo-03.png\" />\n </a>\n </div>\n <div class=\"col-6 collapse-close\">\n <button\n type=\"button\"\n class=\"navbar-toggler\"\n data-toggle=\"collapse\"\n data-target=\"#navbar-default\"\n aria-controls=\"navbar-default\"\n aria-expanded=\"false\"\n aria-label=\"Toggle navigation\"\n >\n <span></span>\n <span></span>\n </button>\n </div>\n </div>\n </div>\n\n <ul class=\"navbar-nav ml-lg-auto align-items-center\">\n <ng-container *ngIf=\"isLoggedOut\">\n <li class=\"nav-item\">\n <a\n class=\"btn btn-md register-btn\"\n [ngClass]=\"navbarBackGround === 'bg-primary' ? 'btn-info' : 'btn-primary'\"\n routerLink=\"/entry/account-type\"\n >\n Cadastre-se\n </a>\n </li>\n <li class=\"nav-item\">\n <a\n routerLink=\"/login\"\n class=\"btn btn-icon btn-circle\"\n [ngClass]=\"navbarBackGround === 'bg-primary' ? 'btn-info' : 'btn-alt-black'\"\n >\n <span class=\"btn-inner--icon\"><i class=\"fa fa-user-solid\"></i></span>\n </a>\n </li>\n </ng-container>\n\n <ng-container *ngIf=\"isLoggedIn\">\n <li class=\"nav-item\">\n <button (click)=\"toggle()\" *ngIf=\"false\">Mudar Tema</button>\n </li>\n <li class=\"nav-item\">\n <a href=\"#\" class=\"nav-link\" (click)=\"$event.preventDefault()\">\n <div class=\"photo\">\n <img\n *ngIf=\"user as u\"\n [alt]=\"u.name\"\n class=\"img-fluid\"\n src=\"/assets/img/default-avatar.png\"\n />\n </div>\n </a>\n </li>\n <li class=\"nav-item\" *ngIf=\"!disableNavigation\">\n <a\n routerLink=\"/entry/login\"\n (click)=\"logout()\"\n class=\"nav-link nav-link-icon logoutIcon\"\n >\n <i class=\"fa fa-exit\" id=\"logout-confirmation\"></i>\n </a>\n </li>\n </ng-container>\n </ul>\n </div>\n </div>\n </nav>\n `,\n styleUrls: ['./navigation.component.scss']\n})\nexport class NavigationComponent implements OnInit {\n @Input() title: string;\n @Input() navbarBackGround = 'bg-green';\n @Input() brandBackGround = false;\n @Input() disableNavigation = false;\n\n constructor(private authService: AuthService, private themeService: ThemeService) {}\n\n ngOnInit() {}\n\n get user() {\n return this.authService.user();\n }\n\n logout() {\n this.authService.logout();\n }\n\n get isLoggedIn() {\n return this.authService.isLoggedIn;\n }\n\n get isLoggedOut() {\n return this.authService.isLoggedOut;\n }\n\n isThemeActiveReceitaDigital() {\n const active = this.themeService.getActiveTheme();\n return active.name === 'theme-receita-digital';\n }\n\n toggle() {\n if (this.isThemeActiveReceitaDigital()) {\n this.themeService.setTheme('theme-mrd');\n } else {\n this.themeService.setTheme('theme-receita-digital');\n }\n }\n}\n","export default \".navbar {\\n padding-top: 0;\\n padding-bottom: 0;\\n padding-left: 0;\\n height: 80px;\\n}\\n.navbar .btn {\\n text-transform: uppercase;\\n font-family: \\\"problack\\\", sans-serif;\\n color: white;\\n}\\n.navbar .btn.register-btn {\\n height: 40px;\\n display: flex;\\n align-items: center;\\n}\\n.navbar-brand {\\n height: 100%;\\n width: 80px;\\n flex: 0 0 80px;\\n justify-content: center;\\n display: flex;\\n align-items: center;\\n background-color: white;\\n margin: 0 60px 0 0;\\n}\\n.brand-bg {\\n width: 184px;\\n height: 66px;\\n align-self: baseline;\\n padding: 0 10px;\\n}\\n.brand-bg .title-semi-bold {\\n color: white;\\n font-size: 20px;\\n margin-bottom: 0;\\n}\\n.navbar-text {\\n width: 30%;\\n padding-bottom: 0;\\n padding-top: 0;\\n}\\n.navbar-text .title-semi-bold {\\n margin-bottom: 0;\\n color: white;\\n font-size: 25px;\\n}\\n#logout-confirmation {\\n color: white;\\n}\\n#logout-confirmation:hover {\\n color: rgba(248, 248, 248, 0.7);\\n}\";","export default \"<div class=\\\"prescription\\\" [formGroup]=\\\"prescriptionForm\\\">\\n <nz-form-item *ngIf=\\\"patient\\\">\\n <label nz-checkbox formControlName=\\\"showPatientCpf\\\">\\n <span>\\n {{ showCpfText }}\\n </span>\\n </label>\\n\\n <label nz-checkbox formControlName=\\\"showPrescriberCpf\\\">\\n <span>\\n Mostrar CPF do Prescritor\\n </span>\\n </label>\\n </nz-form-item>\\n <ng-container formArrayName=\\\"medicaments\\\">\\n <ng-container\\n *ngFor=\\\"let medicamentFormGroup of prescriptionForm.get('medicaments')['controls']; let i = index\\\"\\n [formGroup]=\\\"medicamentFormGroup\\\"\\n >\\n <div class=\\\"medication-container\\\" *ngIf=\\\"medicamentFormGroup.value as medicament\\\">\\n <div class=\\\"add-prescription d-flex\\\" *ngIf=\\\"medicament.chooseMedicament\\\">\\n <ng-container>\\n <textarea\\n [ngStyle]=\\\"{ color: colorSetting?.primary }\\\"\\n [nzAutocomplete]=\\\"autoMedication\\\"\\n appFocus\\n focus=\\\"true\\\"\\n placeholder=\\\"Nome do medicamento ou princÃpio ativo\\\"\\n class=\\\"medicationNameInput\\\"\\n formControlName=\\\"medication\\\"\\n nz-input\\n ></textarea>\\n <button\\n class=\\\"btn btn-add-name\\\"\\n nz-button\\n [disabled]=\\\"!medicamentFormGroup.get('medication')?.value\\\"\\n (click)=\\\"addManual(medicamentFormGroup)\\\"\\n [ngStyle]=\\\"{\\n 'background-color': colorSetting?.secondary,\\n 'border-color': colorSetting?.secondary\\n }\\\"\\n >\\n <i class=\\\"fas fa-arrow-right\\\"></i>\\n </button>\\n <nz-autocomplete #autoMedication class=\\\"medicationAutoComplete\\\" nzBackfill>\\n <div *ngIf=\\\"search\\\">\\n <ng-container *ngFor=\\\"let option of medications$ | async\\\">\\n <nz-auto-option\\n (click)=\\\"selectMedicament(medicamentFormGroup, option)\\\"\\n [nzLabel]=\\\"option.nome\\\"\\n [nzValue]=\\\"option\\\"\\n >\\n <span>{{ option?.nome }}</span>\\n <span id=\\\"indexPresentation\\\">, {{ option.apresentacaoCustomizada }}</span>\\n <span *ngIf=\\\"option?.tipo\\\">, {{ option?.tipo }}</span>\\n </nz-auto-option>\\n </ng-container>\\n <nz-auto-option\\n (click)=\\\"addManual(medicamentFormGroup)\\\"\\n *ngIf=\\\"medicament.medication\\\"\\n [nzValue]=\\\"medicament.medication\\\"\\n class=\\\"text-center\\\"\\n >\\n <p\\n class=\\\"text-underline title-semi-bold mb-0 flex-grow-1\\\"\\n [ngStyle]=\\\"{ color: colorSetting?.secondary }\\\"\\n >\\n Adicionar texto livre\\n </p>\\n </nz-auto-option>\\n </div>\\n </nz-autocomplete>\\n </ng-container>\\n </div>\\n\\n <div *ngIf=\\\"medicament.addedMedication\\\">\\n <div *ngIf=\\\"medicament.medicamentId\\\">\\n <h4 class=\\\"title\\\" *ngIf=\\\"!medicament.chooseMedicament\\\">\\n {{ i + 1 }}. {{ medicament.name }}\\n </h4>\\n\\n <h2 class=\\\"activePrinciples\\\">{{ medicament.principle }} - {{ medicament.description }}</h2>\\n </div>\\n\\n <div\\n *ngIf=\\\"!medicament.medicamentId && !medicament.chooseMedicament\\\"\\n class=\\\"free-prescription\\\"\\n >\\n <h4 class=\\\"title\\\">{{ i + 1 }}. {{ medicament.name }}</h4>\\n </div>\\n <h2 class=\\\"activePrinciples\\\" *ngIf=\\\"medicament.principle || medicament.description\\\">\\n {{ medicament.principle }}\\n <span *ngIf=\\\"medicament.principle && medicament.description\\\"> - </span\\n >{{ medicament.description }}\\n </h2>\\n\\n <nz-form-item>\\n <nz-form-label [nzFor]=\\\"'dosage_' + i\\\" class=\\\"sr-only\\\">Posologia</nz-form-label>\\n <nz-form-control>\\n <textarea\\n [focus]=\\\"!adding\\\"\\n [id]=\\\"'dosage_' + i\\\"\\n appAutoSize\\n appFocus\\n formControlName=\\\"dosage\\\"\\n nz-input\\n placeholder=\\\"Escreva aqui a posologia...\\\"\\n [disabled]=\\\"signed || medicament.disabled\\\"\\n ></textarea>\\n </nz-form-control>\\n </nz-form-item>\\n <app-auto-width-input-number\\n [id]=\\\"'quantidade' + i\\\"\\n formControlName=\\\"prescribedQuantity\\\"\\n [disabled]=\\\"signed || medicament.disabled\\\"\\n [colorSetting]=\\\"colorSetting\\\"\\n >\\n </app-auto-width-input-number>\\n\\n <div\\n class=\\\"buttons-edit-prescription\\\"\\n *ngIf=\\\"!signed && !medicament.chooseMedicament && !medicament.manipuled\\\"\\n >\\n <button\\n *ngIf=\\\"!medicament.disabled\\\"\\n (click)=\\\"editMedicament(medicamentFormGroup)\\\"\\n title=\\\"Alterar medicamento\\\"\\n class=\\\"btn btn-icon btn-simple\\\"\\n type=\\\"button\\\"\\n >\\n <span class=\\\"btn-inner--icon\\\"><i class=\\\"fa fa-pencil-solid\\\"></i></span>\\n </button>\\n <button\\n (click)=\\\"deletePrescription(i)\\\"\\n title=\\\"Remover medicamento\\\"\\n class=\\\"btn btn-icon btn-simple\\\"\\n type=\\\"button\\\"\\n >\\n <span class=\\\"btn-inner--icon\\\"><i class=\\\"fa fa-trash-solid\\\"></i></span>\\n </button>\\n </div>\\n </div>\\n </div>\\n </ng-container>\\n </ng-container>\\n\\n <div class=\\\"add-prescription\\\" *ngIf=\\\"!signed\\\">\\n <button\\n (click)=\\\"addRow()\\\"\\n *ngIf=\\\"!adding\\\"\\n class=\\\"btn btn-icon btn-add-outiline text-capitalize\\\"\\n type=\\\"button\\\"\\n [ngStyle]=\\\"{\\n 'background-color': colorSetting?.secondary,\\n 'border-color': colorSetting?.secondary\\n }\\\"\\n >\\n <span class=\\\"btn-inner--text\\\">Adicionar Medicamento</span>\\n <span\\n class=\\\"btn-inner--icon\\\"\\n [ngStyle]=\\\"{\\n 'background-color': colorSetting?.primary,\\n 'border-color': colorSetting?.primary\\n }\\\"\\n ><i class=\\\"fa fa-plus\\\"></i\\n ></span>\\n </button>\\n </div>\\n</div>\\n\";","import { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\nimport { FormArray, FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';\nimport { CrService } from '@app/modules/document/services/cr.service';\nimport { Patient } from '@app/shared/models';\nimport { ColorSetting } from '@app/shared/models/color-setting';\nimport { Observable, ReplaySubject, timer } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, filter, take, takeUntil } from 'rxjs/operators';\n\n@Component({\n selector: 'app-prescription',\n templateUrl: './prescription.component.html',\n styleUrls: ['./prescription.component.scss']\n})\nexport class PrescriptionComponent implements OnInit, OnDestroy {\n @Input() patient: Patient;\n @Input() editMode: boolean;\n @Input() colorSetting: ColorSetting;\n @Input() isVeterinarian: boolean;\n @Output() formEmitter: EventEmitter<FormGroup> = new EventEmitter<FormGroup>();\n\n public adding = true;\n public search = true;\n signed = false;\n public medications$: Observable<any[]>;\n private destroyed$: ReplaySubject<boolean> = new ReplaySubject<boolean>();\n\n prescriptionForm = this.fb.group({\n code: [''],\n manipulatedprofile: [undefined],\n showPatientCpf: [false],\n showPrescriberCpf: [false],\n medication: [''],\n medicaments: this.fb.array([], Validators.required),\n local: [''],\n version: ['PRODUCTION']\n });\n\n constructor(private crService: CrService, private fb: FormBuilder) {\n this.addRow();\n }\n\n ngOnInit() {\n this.formEmitter.emit(this.prescriptionForm);\n }\n\n ngOnDestroy(): void {\n this.destroyed$.next(true);\n this.destroyed$.complete();\n }\n\n @Input()\n set prescription(prescription: any) {\n if (prescription) {\n this.medicamentsFormCtrl.removeAt(0);\n this.signed = prescription.status === 'Assinada';\n this.prescriptionForm.patchValue(prescription);\n prescription.medicaments.forEach(m => {\n this.addPrescription({\n ...m,\n nome: m.name,\n id: m.medicamentId,\n principio: m.principle,\n laboratorio: m.laboratory,\n ean: m.ean,\n apresentacaoCustomizada: m.description,\n quantity: m.prescribedQuantity,\n chooseMedicament: false,\n addedMedication: true,\n manipuled: m.manipuled,\n prescriptionTypeId: m.prescriptionTypeId,\n typeCr: m.type\n });\n });\n\n timer(100)\n .pipe(take(1))\n .subscribe(() => (this.adding = false));\n }\n }\n\n @Input()\n set prescriptionModel(prescriptionModel: any) {\n if (prescriptionModel) {\n this.removeEmptyMedicaments(this.medicamentsFormCtrl);\n prescriptionModel.medicaments.forEach(m => {\n this.addMedicament({\n ...m,\n quantity: m.prescribedQuantity,\n chooseMedicament: false,\n addedMedication: true\n });\n });\n\n timer(100)\n .pipe(take(1))\n .subscribe(() => (this.adding = false));\n }\n }\n\n private removeEmptyMedicaments(medicamentsFormCtrl: FormArray): void {\n for (let i = medicamentsFormCtrl.controls.length - 1; i >= 0; i--) {\n const medicament = medicamentsFormCtrl.controls[i].value;\n if (!medicament.name) {\n medicamentsFormCtrl.removeAt(i);\n }\n }\n }\n\n @Input()\n set manipulatedProfile(manipulatedProfile: any) {\n if (manipulatedProfile) {\n this.prescriptionForm.get('manipulatedprofile').setValue(manipulatedProfile._id);\n this.medicamentsFormCtrl.removeAt(0);\n manipulatedProfile.medicaments.forEach(m => {\n this.addPrescription({\n ...m,\n nome: m.name,\n chooseMedicament: false,\n addedMedication: true,\n manipuled: true\n });\n });\n timer(100)\n .pipe(take(1))\n .subscribe(() => (this.adding = false));\n }\n }\n\n get showCpfText() {\n return this.patient && !this.patient.cpf ? 'Mostrar CPF do Responsável' : 'Mostrar CPF do Paciente';\n }\n\n formMedicaments({\n name,\n medicamentId,\n principle,\n laboratory,\n ean,\n quantity,\n description,\n dosage,\n medication,\n chooseMedicament,\n addedMedication,\n manipuled,\n disabled = false,\n prescriptionTypeId,\n typeCr\n }): FormGroup {\n const formGroup = new FormGroup({\n name: new FormControl(name),\n medicamentId: new FormControl(medicamentId),\n prescribedQuantity: new FormControl(quantity),\n dosage: new FormControl(dosage, Validators.required),\n description: new FormControl(description),\n principle: new FormControl(principle),\n laboratory: new FormControl(laboratory),\n ean: new FormControl(ean),\n medication: new FormControl(medication),\n quantity: new FormControl(quantity),\n chooseMedicament: new FormControl(chooseMedicament),\n addedMedication: new FormControl(addedMedication),\n manipuled: new FormControl(manipuled),\n disabled: new FormControl(disabled),\n prescriptionTypeId: new FormControl(prescriptionTypeId),\n typeCr: new FormControl(typeCr)\n });\n formGroup\n .get('medication')\n .valueChanges.pipe(\n filter(value => value && value.length >= 3 && this.search),\n debounceTime(300),\n distinctUntilChanged(),\n takeUntil(this.destroyed$)\n )\n .subscribe(text => {\n this.medications$ = this.crService.searchMedicament(text);\n });\n\n if (disabled) {\n formGroup.disable();\n }\n\n return formGroup;\n }\n\n editMedicament(medicament) {\n medicament.get('chooseMedicament').setValue(true);\n medicament.get('medication').setValue(medicament.get('name').value);\n this.search = true;\n }\n\n selectMedicament(medicament: FormGroup, selectedMedicament: any) {\n this.search = false;\n this.adding = false;\n medicament.get('name').setValue(selectedMedicament.nome);\n medicament.get('principle').setValue(selectedMedicament.principio);\n medicament.get('laboratory').setValue(selectedMedicament.laboratorio);\n medicament.get('ean').setValue(selectedMedicament.ean);\n medicament.get('description').setValue(selectedMedicament.apresentacaoCustomizada);\n medicament.get('prescribedQuantity').setValue(1);\n medicament.get('medication').setValue(null);\n medicament.get('chooseMedicament').setValue(false);\n medicament.get('addedMedication').setValue(true);\n medicament.get('medicamentId').setValue(selectedMedicament.id);\n medicament.get('prescriptionTypeId').setValue(selectedMedicament.prescriptionTypeId);\n medicament.get('typeCr').setValue(selectedMedicament.typeCr);\n this.medications$ = undefined;\n }\n\n get medicamentsFormCtrl(): FormArray {\n return <FormArray>this.prescriptionForm.get('medicaments');\n }\n\n public addRow() {\n this.addPrescription({\n nome: '',\n id: '',\n principio: '',\n laboratorio: '',\n ean: '',\n apresentacaoCustomizada: '',\n quantity: 0,\n medication: null,\n chooseMedicament: true,\n addedMedication: false,\n manipuled: false,\n prescriptionTypeId: '',\n typeCr: ''\n });\n this.search = true;\n }\n\n public toggleAdding() {\n this.adding = !this.adding;\n }\n\n private addPrescription({\n nome,\n id,\n principio,\n laboratorio,\n ean,\n apresentacaoCustomizada,\n dosage = '',\n quantity = 1,\n medication,\n chooseMedicament,\n addedMedication,\n manipuled,\n disabled = false,\n prescriptionTypeId,\n typeCr\n }): void {\n this.medicamentsFormCtrl.push(\n this.formMedicaments({\n name: nome,\n medicamentId: id,\n principle: principio,\n laboratory: laboratorio,\n ean: ean,\n description: apresentacaoCustomizada,\n dosage,\n quantity,\n medication,\n chooseMedicament,\n addedMedication,\n manipuled,\n disabled,\n prescriptionTypeId,\n typeCr\n })\n );\n // this.handleMedicationAutoBlur();\n this.medications$ = undefined;\n this.search = true;\n }\n\n private addMedicament(medicament: any): void {\n this.medicamentsFormCtrl.push(this.formMedicaments(medicament));\n }\n\n public deletePrescription(index: number): void {\n this.medicamentsFormCtrl.removeAt(index);\n if (this.medicamentsFormCtrl.value.length) {\n this.adding = false;\n } else {\n this.addRow();\n }\n }\n\n public setSearch(search) {\n this.search = search;\n }\n\n public addManual(medicamentFormGroup: FormGroup) {\n const name = medicamentFormGroup.get('medication').value;\n medicamentFormGroup.get('chooseMedicament').setValue(false);\n medicamentFormGroup.get('addedMedication').setValue(true);\n medicamentFormGroup.get('prescribedQuantity').setValue(1);\n medicamentFormGroup.get('name').setValue(name);\n medicamentFormGroup.get('medication').setValue(null);\n medicamentFormGroup.get('description').setValue(undefined);\n medicamentFormGroup.get('principle').setValue(undefined);\n medicamentFormGroup.get('ean').setValue(undefined);\n medicamentFormGroup.get('medicamentId').setValue(undefined);\n medicamentFormGroup.get('prescriptionTypeId').setValue(null);\n medicamentFormGroup.get('typeCr').setValue(null);\n this.search = false;\n this.adding = false;\n }\n}\n","export default \".prescription ::ng-deep .ant-drawer-left.ant-drawer-open .ant-drawer-content-wrapper {\\n box-shadow: 0 9px 18px rgba(0, 0, 0, 0.18);\\n}\\n.prescription ::ng-deep .ant-drawer.ant-drawer-open .ant-drawer-mask {\\n opacity: 0.11;\\n}\\n.prescription ::ng-deep .ant-drawer-body {\\n padding-top: 0;\\n height: 90vh;\\n overflow: auto;\\n}\\n.prescription ::ng-deep .ant-drawer-open {\\n top: 80px;\\n}\\n.prescription ::ng-deep .menu-drawer {\\n top: 80px;\\n background-color: #007260;\\n border: 1px solid #007260;\\n}\\n.prescription ::ng-deep .menu-drawer .ant-drawer-content {\\n background-color: transparent;\\n}\\n.prescription ::ng-deep .inner-menu {\\n display: flex;\\n flex-direction: column;\\n}\\n.prescription ::ng-deep .inner-menu .menu-icon {\\n align-self: flex-end;\\n margin: 20px 0;\\n}\\n.prescription ::ng-deep .inner-menu .menu-icon .fa {\\n font-size: 20px;\\n color: white;\\n}\\n.prescription ::ng-deep .inner-menu .menu li {\\n padding: 20px 0;\\n}\\n.prescription ::ng-deep .inner-menu .menu a {\\n color: white;\\n font-family: \\\"problack\\\";\\n font-size: 18px;\\n text-transform: uppercase;\\n}\\n.prescription ::ng-deep .inner-menu .menu a:focus {\\n text-decoration: none;\\n}\\n.prescription ::ng-deep .inner-menu .menu a .fa {\\n margin-right: 10px;\\n}\\n.prescription ::ng-deep .medicationAutoComplete {\\n margin-top: 17px;\\n}\\n.prescription .toolbar {\\n display: flex;\\n}\\n.prescription .toolbar .menu-toggler {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n padding: 0;\\n border-radius: 0;\\n width: 80px;\\n filter: drop-shadow(0px 3px 6px rgba(0, 0, 0, 0.16));\\n margin: 0;\\n}\\n.prescription .toolbar .menu-toggler .fa:before {\\n font-size: 22px;\\n}\\n.prescription .toolbar .menu-toggler,\\n.prescription .toolbar .toolbar-options {\\n height: 80px;\\n}\\n.prescription .toolbar .toolbar-menu {\\n flex: 1;\\n}\\n.prescription .toolbar .toolbar-menu .toolbar-options {\\n background-color: #f5f5f5;\\n display: flex;\\n align-items: center;\\n justify-content: flex-end;\\n padding-right: 40px;\\n padding-left: 60px;\\n}\\n.prescription .toolbar .toolbar-menu .toolbar-options .btn {\\n font-family: \\\"problack\\\", sans-serif;\\n}\\n.prescription .toolbar .toolbar-menu .toolbar-options .btn-green {\\n background-color: #87ebe1;\\n border-color: #87ebe1;\\n color: #1b403a;\\n}\\n.prescription .toolbar .toolbar-menu .toolbar-options .btn-default {\\n background-color: #afafaf;\\n border-color: #afafaf;\\n color: white;\\n}\\n.prescription .toolbar .toolbar-menu .toolbar-tags {\\n background-color: #ebebeb;\\n height: 40px;\\n border-radius: 0 0 10px 10px;\\n}\\n.prescription .add-prescription {\\n padding: 20px 0;\\n border-top: 1px solid #f5f5f5;\\n min-height: 81px;\\n display: flex;\\n justify-content: center;\\n}\\n.prescription .add-prescription.adding-bg {\\n background-color: #f5f5f5;\\n border-top: 1px solid transparent;\\n}\\n.prescription .add-prescription .btn-add-name {\\n background-color: var(--bg-color-primary);\\n border: 1px solid var(--bg-color-primary);\\n color: var(--color-white);\\n padding: 0px 10px;\\n margin: 10px;\\n}\\n.prescription .add-prescription .btn-add {\\n display: flex;\\n padding: 0 0 0 1.25rem;\\n height: 40px;\\n align-items: center;\\n border-radius: 10px;\\n overflow: hidden;\\n border: 0;\\n font-family: \\\"probold\\\", sans-serif;\\n background-color: var(--bg-color-secondary);\\n}\\n.prescription .add-prescription .btn-add .btn-inner--icon {\\n background-color: var(--bg-color-primary);\\n color: var(--color-white);\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n height: 40px;\\n width: 50px;\\n}\\n.prescription .btn-add-name {\\n padding: 0px 10px;\\n margin: 10px;\\n}\\n.prescription .medicationNameInput {\\n background-color: transparent;\\n border-color: transparent;\\n height: 100%;\\n box-shadow: none;\\n}\\n.prescription .free-prescription {\\n display: flex;\\n}\\n.prescription .free-prescription .break-line {\\n margin-left: 7px;\\n white-space: pre-wrap;\\n}\\n.prescription textarea {\\n resize: none;\\n background-color: transparent;\\n border: 0;\\n border-radius: 0;\\n box-shadow: none;\\n padding-left: 12px;\\n color: #4d4d4d;\\n font-size: 18px;\\n}\\n.prescription textarea:hover, .prescription textarea:focus {\\n border-color: transparent;\\n box-shadow: none;\\n}\\n.btn-add-outiline {\\n display: flex;\\n padding: 0 0 0 8px;\\n height: 40px;\\n align-items: center;\\n border-radius: 10px;\\n overflow: hidden;\\n border: 0;\\n font-family: \\\"probold\\\", sans-serif;\\n background-color: var(--bg-color-secondary);\\n color: var(--color-white);\\n}\\n.btn-add-outiline .btn-inner--icon {\\n background-color: var(--bg-color-primary);\\n color: var(--color-white);\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n height: 40px;\\n width: 50px;\\n}\";","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { SharedModule } from '@app/shared';\nimport { ComponentsModule } from '@app/shared/components/components.module';\nimport { NzCardModule } from 'ng-zorro-antd/card';\nimport { NzCarouselModule } from 'ng-zorro-antd/carousel';\nimport { NzDropDownModule } from 'ng-zorro-antd/dropdown';\nimport { NzIconModule } from 'ng-zorro-antd/icon';\nimport { NzPopoverModule } from 'ng-zorro-antd/popover';\nimport { NzProgressModule } from 'ng-zorro-antd/progress';\nimport { NzUploadModule } from 'ng-zorro-antd/upload';\nimport { ModalModule } from 'ngx-bootstrap/modal';\nimport { NgxLoadingModule } from 'ngx-loading';\nimport { NgxMaskModule } from 'ngx-mask';\nimport { PatientsModule } from '../patients/patients.module';\nimport { DocumentRoutingModule } from './document-routing.module';\nimport { DocumentComponent } from './document.component';\nimport { DocumentGuard } from './guards/document.guard';\nimport { AttestationComponent } from './pages/attestation/attestation.component';\nimport { ConfirmationComponent } from './pages/confirmation/confirmation.component';\nimport { ExamComponent } from './pages/exam/exam.component';\nimport { InfusionProtocolComponent } from './pages/infusion-protocol/infusion-protocol.component';\nimport { ListingComponent } from './pages/listing/listing.component';\nimport { ModalIframeComponent } from './pages/modal-iframe/modal-iframe.component';\nimport { ModalListVictaProtocolComponent } from './pages/modal-list-victa-protocol/modal-list-victa-protocol.component';\nimport { ModalSelectLayoutComponent } from './pages/modal-select-layout/modal-select-layout.component';\nimport { ModelAddFavoriteDocumentComponent } from './pages/model-add-favorite-document/model-add-favorite-document.component';\nimport { ModelListFavoriteDocumentComponent } from './pages/model-list-favorite-document/model-list-favorite-document.component';\nimport { OrientationComponent } from './pages/orientation/orientation.component';\nimport { NavigationComponent } from './pages/prescription/navigation.component';\nimport { PrescriptionComponent } from './pages/prescription/prescription.component';\nimport { UnsignedPrescriptionModalComponent } from './pages/prescription/unsigned-prescription-modal.component';\nimport { UploadPdfComponent } from './pages/prescription/upload-pdf.component';\nimport { RetentionConfirmationComponent } from './pages/retention-confirmation/retention-confirmation.component';\n\n@NgModule({\n declarations: [\n PrescriptionComponent,\n InfusionProtocolComponent,\n NavigationComponent,\n ConfirmationComponent,\n UnsignedPrescriptionModalComponent,\n RetentionConfirmationComponent,\n ListingComponent,\n UploadPdfComponent,\n AttestationComponent,\n ExamComponent,\n DocumentComponent,\n ModalIframeComponent,\n OrientationComponent,\n ModelAddFavoriteDocumentComponent,\n ModelListFavoriteDocumentComponent,\n ModalSelectLayoutComponent,\n ModalListVictaProtocolComponent\n ],\n exports: [\n PrescriptionComponent,\n InfusionProtocolComponent,\n NavigationComponent,\n ConfirmationComponent,\n UnsignedPrescriptionModalComponent,\n RetentionConfirmationComponent,\n ListingComponent,\n UploadPdfComponent,\n AttestationComponent,\n ExamComponent,\n DocumentComponent,\n ModalIframeComponent,\n OrientationComponent,\n ModelAddFavoriteDocumentComponent,\n ModelListFavoriteDocumentComponent,\n ModalSelectLayoutComponent,\n ModalListVictaProtocolComponent\n ],\n imports: [\n CommonModule,\n SharedModule,\n DocumentRoutingModule,\n PatientsModule,\n ComponentsModule,\n NgxLoadingModule.forRoot({}),\n NzDropDownModule,\n NzCardModule,\n NzCarouselModule,\n NzIconModule,\n NgxMaskModule.forRoot(),\n NzPopoverModule,\n ModalModule.forRoot(),\n NzProgressModule,\n NzUploadModule\n ],\n providers: [DocumentGuard]\n})\nexport class DocumentModule {}\n","import { tap } from 'rxjs/operators';\nimport { HttpClient } from '@angular/common/http';\nimport { environment } from '@env/environment';\nimport { Injectable } from '@angular/core';\n\nexport const LOG_URL = 'qrcodelogs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LogsService {\n constructor(private http: HttpClient) {}\n\n getLogsByFilter(filter: any) {\n return this.http.get<any>(`${environment.apiRoot}${LOG_URL}`, { params: filter }).pipe(\n tap(res => {\n if (res.groupBy) {\n res.list\n .sort((a, b) => {\n if (a._id < b._id) {\n return -1;\n }\n if (a._id > b._id) {\n return 1;\n }\n return 0;\n })\n .forEach(item => {\n item.key = item._id;\n });\n }\n })\n );\n }\n}\n","import { Injectable, Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'onlyNumbers'\r\n})\r\n@Injectable()\r\nexport class OnlyNumbersPipe implements PipeTransform {\r\n transform(value = '') {\r\n return value ? value.toString().replace(/[^\\d]+/g, '') : '';\r\n }\r\n}\r\n","import { Component } from '@angular/core';\nimport { AuthService } from '@app/core/services/auth.service';\nimport { UserService } from '@app/modules/user/user.service';\nimport { nativeAsync } from '@app/shared/decorators/nativeAsync';\nimport { User } from '@app/shared/models/decodedLoginToken';\nimport { AppToastService } from '@app/shared/services/app-toast.service';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\n\n@Component({\n selector: 'app-modal-new-portal-digital-signatures',\n templateUrl: './modal-new-portal-digital-signatures.component.html',\n styleUrls: ['./modal-new-portal-digital-signatures.component.scss']\n})\nexport class ModalNewPortalDigitalSignaturesComponent {\n doNotShowAgain = false;\n constructor(\n private modalRef: BsModalRef,\n private appToastService: AppToastService,\n private userService: UserService,\n private authService: AuthService\n ) {}\n\n get user(): User {\n return this.authService.user();\n }\n @nativeAsync\n async onClose() {\n try {\n await this.userService\n .checkUi({\n ...this.user.ui,\n doNotShowAgainModalNewPortalDigitalSignatures: this.doNotShowAgain\n })\n .toPromise();\n\n this.modalRef.hide();\n } catch (error) {\n this.appToastService.notify('error', 'Erro ao marcar não mostrar novamente');\n }\n }\n}\n","export default \"<div class=\\\"modal-header\\\">\\n <h6>ITI lança novo portal para validar assinaturas digitais</h6>\\n</div>\\n\\n<div class=\\\"modal-body\\\">\\n <p>\\n A partir de 06/03 todos os documentos digitais serão validados em um único portal:\\n <span style=\\\"font-weight: bold;\\\">VALIDAR</span>\\n </p>\\n <p><a href=\\\"https://validar.iti.gov.br\\\" target=\\\"_blank\\\">https://validar.iti.gov.br/</a></p>\\n <p>\\n Todos os documentos emitidos na Receita Digital continuam válidos e são compatÃveis com o novo\\n portal, mesmo que a informação no rodapé da receita ainda tenha o endereço dos portais antigos. Mas\\n não se preocupe! As receitas que você vê aqui no seu perfil farmácia já foram validadas pela Receita\\n Digital! Ficou com alguma dúvida? Entre em contato com nosso atendimento em\\n <a href=\\\"https://receitadigital.com/\\\" target=\\\"_blank\\\">receitadigital.com</a>\\n </p>\\n <label nz-checkbox [(ngModel)]=\\\"doNotShowAgain\\\" style=\\\"font-size: 16px; margin-bottom: 8px;\\\"\\n >Estou ciente, não mostrar novamente.</label\\n >\\n</div>\\n\\n<div class=\\\"modal-footer\\\">\\n <button class=\\\"ok-btn\\\" nz-button class=\\\"btn-primary\\\" (click)=\\\"onClose()\\\">\\n Fechar\\n </button>\\n</div>\\n\";","export default \".modal-header {\\n width: 500px;\\n background-color: #4cbca3;\\n font-family: \\\"probold\\\";\\n}\\n\\n.modal-body p {\\n text-align: justify;\\n}\";","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { UserService } from '@app/modules/user/user.service';\nimport { AppToastService } from '@app/shared/services/app-toast.service';\nimport { environment } from '@env/environment';\nimport moment from 'moment';\nimport { of } from 'rxjs';\nimport { catchError, debounceTime, filter, map, switchMap } from 'rxjs/operators';\nimport { DataBigboostConsult } from './../../../../shared/models/paciente';\n\n@Component({\n selector: 'app-simplified-patient-form',\n templateUrl: './simplified-patient-form.component.html'\n})\nexport class SimplifiedPatientFormComponent implements OnInit {\n @Input() patient: DataBigboostConsult;\n @Input() isRegisteredByPatient = true;\n\n @Output() submit = new EventEmitter<FormGroup>();\n @Output() formChange = new EventEmitter<FormGroup>();\n\n form: FormGroup;\n\n constructor(\n private fb: FormBuilder,\n private notification: AppToastService,\n private userService: UserService\n ) {}\n\n ngOnInit() {\n this.buildForm();\n if (this.patient) {\n this.handleConsultCpf(this.patient);\n }\n\n this.formChange.emit(this.form);\n\n const emailForm = this.form.get('email');\n emailForm.valueChanges\n .pipe(\n map(email => {\n const value = email && email.toLowerCase();\n emailForm.setValue(value, { emitEvent: false });\n return value;\n }),\n filter(_ => emailForm.valid && emailForm.value),\n debounceTime(environment.debounceTime),\n switchMap(email => this.userService.checkEmailExists(email).pipe(catchError(err => of(err))))\n )\n .subscribe(res => {\n if (res.status === 200) {\n emailForm.setErrors({ exists: true });\n } else if (res.status === 404) {\n emailForm.setErrors(null);\n } else if (res.status === 400) {\n emailForm.setErrors({ invalid: true });\n }\n });\n\n this.form.get('emailContact').valueChanges.subscribe(email => {\n this.form.get('emailContact').setValue(email && email.toLowerCase(), { emitEvent: false });\n });\n }\n\n buildForm() {\n this.form = this.fb.group({\n fullname: ['', Validators.required],\n name: [''],\n cpf: ['', Validators.required],\n sex: ['', Validators.required],\n dateOfBirth: ['', Validators.required],\n cellphone: [''],\n telephone: [''],\n email: ['', Validators.email],\n emailContact: ['', Validators.email],\n membership: this.fb.group({\n mothersName: ['']\n }),\n address: this.fb.group({\n city: [''],\n complement: [''],\n number: [''],\n street: [''],\n neighborhood: [''],\n cep: [''],\n uf: ['']\n }),\n pendency: [null]\n });\n }\n\n private handleConsultCpf(consult: DataBigboostConsult) {\n this.form.get('name').reset();\n this.form.get('name').enable();\n this.form.get('cpf').setValue(consult.cpf);\n if (consult.status === 1) {\n this.setForm(consult);\n } else {\n this.form.get('fullname').enable();\n this.form.get('pendency').setValue(consult);\n this.resetForm();\n if (consult.erro) {\n this.notification.notify(\n 'warning',\n 'Aviso',\n 'A importação de dados do CPF está com instabilidade, mas você poderá se cadastrar preenchendo os campos manualmente.'\n );\n }\n }\n }\n\n private setForm(consult: DataBigboostConsult) {\n const nascimento = moment(consult.nascimento, 'DD/MM/YYYY');\n this.form.get('cpf').setValue(consult.cpf);\n this.form.get('fullname').setValue(consult.nome);\n this.form.get('name').setValue(consult.nome);\n this.form.get('dateOfBirth').setValue(nascimento.format('YYYY-MM-DD'));\n\n this.form.get('cpf').disable();\n this.form.get('fullname').disable();\n this.form.get('dateOfBirth').disable();\n }\n\n private resetForm() {\n this.form.get('fullname').reset();\n }\n}\n","export default \"<form nz-form [formGroup]=\\\"form\\\" theme>\\n <div class=\\\"row\\\">\\n <nz-alert\\n class=\\\"mb-4\\\"\\n nzType=\\\"warning\\\"\\n nzMessage=\\\"Para agilizar seu cadastro, buscaremos dados complementares no site da Receita Federal.\\nEste é um procedimento seguro e o sigilo dos seus dados é garantido pela nossa plataforma\\\"\\n ></nz-alert>\\n </div>\\n <app-personal-data-form [form]=\\\"form\\\"></app-personal-data-form>\\n <app-contacts-data-form [form]=\\\"form\\\"></app-contacts-data-form>\\n <app-address-data-form [form]=\\\"form.get('address')\\\"></app-address-data-form>\\n</form>\\n\";","export default \"<form nz-form [formGroup]=\\\"form\\\" theme>\\n <div class=\\\"row\\\">\\n <nz-alert\\n class=\\\"mb-4\\\"\\n nzType=\\\"warning\\\"\\n nzMessage=\\\"Para agilizar seu cadastro, buscaremos dados complementares no site da Receita Federal.\\n Este é um procedimento seguro e o sigilo dos seus dados é garantido pela nossa plataforma\\\"\\n ></nz-alert>\\n </div>\\n <app-pet-data-form [form]=\\\"form\\\"></app-pet-data-form>\\n <app-personal-data-form\\n [form]=\\\"formResponsible\\\"\\n [isResponsible]=\\\"true\\\"\\n [showAlertMsg]=\\\"false\\\"\\n ></app-personal-data-form>\\n <app-contacts-data-form [form]=\\\"formResponsible\\\" [showAlertMsg]=\\\"false\\\"></app-contacts-data-form>\\n <app-address-data-form\\n [form]=\\\"formResponsible.get('address')\\\"\\n [showAlertMsg]=\\\"false\\\"\\n ></app-address-data-form>\\n</form>\\n\";","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { ValidationService } from '@app/core/services/validation.service';\nimport { UserService } from '@app/modules/user/user.service';\nimport { Patient } from '@app/shared/models';\nimport { DataBigboostConsult } from '@app/shared/models/paciente';\nimport { environment } from '@env/environment';\nimport moment from 'moment';\nimport { of } from 'rxjs';\nimport { catchError, debounceTime, filter, map, switchMap } from 'rxjs/operators';\n\n@Component({\n selector: 'app-simplified-pet-patient-form',\n templateUrl: './simplified-pet-patient-form.component.html',\n styleUrls: ['./simplified-pet-patient-form.component.scss']\n})\nexport class SimplifiedPetPatientFormComponent implements OnInit {\n @Input() responsible: DataBigboostConsult & Patient;\n @Input() responsibleExists = false;\n @Output() formChange = new EventEmitter<FormGroup>();\n\n form: FormGroup;\n\n constructor(private fb: FormBuilder, private userService: UserService) {\n this.buildForm();\n }\n\n private buildForm() {\n this.form = this.fb.group({\n _id: [null],\n name: ['', Validators.required],\n species: ['', Validators.required],\n sex: [''],\n race: [''],\n isApproximateAge: [],\n approximateAgeLabel: [\n {\n value: '',\n disabled: true\n }\n ],\n dateOfBirth: [''],\n weight: [null],\n fur: [''],\n castration: [false, Validators.required],\n temperament: [''],\n microchipNumber: [''],\n responsible: this.fb.group({\n _id: [null],\n cpf: ['', [Validators.required, ValidationService.cpfValidator]],\n fullname: ['', Validators.required],\n name: ['', Validators.required],\n sex: ['', Validators.required],\n dateOfBirth: ['', Validators.required],\n membership: this.fb.group({\n mothersName: ['']\n }),\n cellphone: [''],\n telephone: [''],\n email: ['', Validators.email],\n emailContact: ['', Validators.email],\n address: this.fb.group({\n uf: [''],\n city: [''],\n complement: [''],\n number: [''],\n street: [''],\n neighborhood: [''],\n cep: ['']\n }),\n pendency: [null]\n })\n });\n }\n\n ngOnInit(): void {\n if (this.responsibleExists) {\n this.patchResponsibleExists(this.responsible);\n this.disableFields();\n } else {\n this.patchResponsibleNotExists(this.responsible);\n this.formResponsible.get('cpf').disable();\n }\n\n const emailForm = this.form.get('responsible.email');\n emailForm.valueChanges\n .pipe(\n map(email => {\n const value = email && email.toLowerCase();\n emailForm.setValue(value, { emitEvent: false });\n return value;\n }),\n filter(\n _ =>\n emailForm.valid &&\n emailForm.value &&\n (!this.responsibleExists || emailForm.value !== this.responsible.user.email)\n ),\n debounceTime(environment.debounceTime),\n switchMap(email => this.userService.checkEmailExists(email).pipe(catchError(err => of(err))))\n )\n .subscribe(res => {\n if (res.status === 200) {\n emailForm.setErrors({ exists: true });\n } else if (res.status === 404) {\n emailForm.setErrors(null);\n } else if (res.status === 400) {\n emailForm.setErrors({ invalid: true });\n }\n });\n\n this.form.get('responsible.emailContact').valueChanges.subscribe(email => {\n this.form\n .get('responsible.emailContact')\n .setValue(email && email.toLowerCase(), { emitEvent: false });\n });\n\n this.formChange.emit(this.form);\n }\n\n get formResponsible(): FormGroup {\n return <FormGroup>this.form.get('responsible');\n }\n\n private patchResponsibleExists(responsible: Patient) {\n this.formResponsible.patchValue(responsible);\n if (responsible.dateOfBirth) {\n const dateStr = responsible.dateOfBirth.toString().split('T')[0];\n const dateOfBirth = moment(dateStr).format('YYYY-MM-DD');\n this.formResponsible.get('dateOfBirth').setValue(dateOfBirth);\n }\n if (responsible.user && responsible.user.email) {\n this.formResponsible.get('email').setValue(responsible.user.email);\n }\n }\n\n private patchResponsibleNotExists(responsible: DataBigboostConsult) {\n const nascimento = moment(responsible.nascimento, 'DD/MM/YYYY');\n this.formResponsible.patchValue({\n cpf: responsible.cpf,\n fullname: responsible.nome,\n name: responsible.nome,\n sex: responsible.genero,\n dateOfBirth: nascimento.format('YYYY-MM-DD'),\n membership: {\n mothersName: responsible.mae\n }\n });\n }\n\n private disableFields() {\n this.formResponsible.get('cpf').disable();\n this.formResponsible.get('fullname').disable();\n this.formResponsible.get('dateOfBirth').disable();\n }\n}\n","export default \"\";","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { ValidationService } from '@app/core/services/validation.service';\nimport { UserService } from '@app/modules/user/user.service';\nimport { Patient } from '@app/shared/models';\nimport { DataBigboostConsult } from '@app/shared/models/paciente';\nimport moment from 'moment';\n\n@Component({\n selector: 'app-simplified-underage-patient-form',\n templateUrl: './simplified-underage-patient-form.component.html'\n})\nexport class SimplifiedUnderagePatientFormComponent implements OnInit {\n @Input() patient: DataBigboostConsult | Patient;\n @Input() isResponsible = false;\n @Input() existingPatient = false;\n\n @Output() formChange = new EventEmitter<FormGroup>();\n\n form: FormGroup;\n consultResponsible = false;\n\n constructor(private fb: FormBuilder, private userService: UserService) {}\n\n ngOnInit() {\n this.buildForm();\n if (this.existingPatient && this.isResponsible) {\n this.patchFormResponsible({\n patientExists: true,\n data: this.patient\n });\n } else {\n this.patchValueForm(this.patient);\n this.disabledFields(this.patient);\n }\n\n this.form.get('responsible.emailContact').valueChanges.subscribe(email => {\n this.form\n .get('responsible.emailContact')\n .setValue(email && email.toLowerCase(), { emitEvent: false });\n });\n\n this.formChange.emit(this.form);\n }\n\n get formResponsible(): FormGroup {\n return <FormGroup>this.form.get('responsible');\n }\n\n buildForm() {\n this.form = this.fb.group({\n _id: [null],\n cpf: ['', [ValidationService.cpfValidator]],\n fullname: ['', Validators.required],\n name: [''],\n sex: ['', Validators.required],\n dateOfBirth: ['', Validators.required],\n membership: this.fb.group({\n mothersName: ['']\n }),\n responsible: this.fb.group({\n _id: [null],\n cpf: ['', [Validators.required, ValidationService.cpfValidator]],\n fullname: ['', Validators.required],\n name: ['', Validators.required],\n sex: ['', Validators.required],\n dateOfBirth: ['', Validators.required],\n membership: this.fb.group({\n mothersName: ['']\n }),\n cellphone: [''],\n telephone: [''],\n email: ['', Validators.email],\n emailContact: ['', Validators.email],\n address: this.fb.group({\n uf: [''],\n city: [''],\n complement: [''],\n number: [''],\n street: [''],\n neighborhood: [''],\n cep: ['']\n }),\n pendency: [null]\n })\n });\n }\n\n patchValueForm(patient: DataBigboostConsult) {\n if (patient.status === 1 || patient.status === 200) {\n const nascimento = moment(patient.nascimento, 'DD/MM/YYYY');\n\n const valuesDisableds = {\n _id: patient.id,\n cpf: patient.cpf,\n fullname: patient.nome,\n name: patient.nome,\n dateOfBirth: nascimento.format('YYYY-MM-DD')\n };\n\n if (this.isResponsible) {\n this.formResponsible.patchValue(valuesDisableds);\n } else {\n this.form.patchValue(valuesDisableds);\n }\n }\n }\n\n patchFormResponsible({ patientExists, data }) {\n if (data) {\n if (patientExists) {\n this.patchFormResponsiblePatientExists(data);\n } else {\n this.patchFormResponsibleNotPatientExists(data);\n }\n\n this.consultResponsible = true;\n this.disabledFieldsForm(patientExists);\n this.formResponsible.get('cpf').disable();\n }\n }\n\n private patchFormResponsiblePatientExists(data: Patient) {\n this.formResponsible.patchValue(data);\n if (data.dateOfBirth) {\n const dateStr = String(data.dateOfBirth);\n const dateOfBirth = moment(dateStr.substring(0, 10)).format('YYYY-MM-DD');\n this.formResponsible.get('dateOfBirth').setValue(dateOfBirth);\n }\n\n if (data && data.user && data.user.email) {\n this.formResponsible.get('email').setValue(data.user.email);\n }\n }\n\n private patchFormResponsibleNotPatientExists(data: DataBigboostConsult) {\n const nascimento = moment(data.nascimento, 'DD/MM/YYYY');\n const patientValues = {\n cpf: data.cpf,\n fullname: data.nome,\n name: data.nome,\n dateOfBirth: nascimento.format('YYYY-MM-DD')\n };\n this.formResponsible.patchValue(patientValues);\n }\n\n disabledFields(patient: DataBigboostConsult) {\n if (patient.status === 1 || patient.status === 200) {\n this.disabledFieldsForm(patient);\n }\n }\n\n disabledFieldsForm(patient: DataBigboostConsult) {\n if (!this.isResponsible) {\n this.form.get('cpf').disable();\n this.form.get('dateOfBirth').disable();\n if (patient.status === 1) {\n this.form.get('fullname').disable();\n }\n }\n this.formResponsible.get('fullname').disable();\n this.formResponsible.get('dateOfBirth').disable();\n }\n}\n","export default \"<form nz-form [formGroup]=\\\"form\\\" theme>\\n <div class=\\\"row\\\">\\n <nz-alert\\n class=\\\"mb-4\\\"\\n nzType=\\\"warning\\\"\\n nzMessage=\\\"Para agilizar seu cadastro, buscaremos dados complementares no site da Receita Federal.\\nEste é um procedimento seguro e o sigilo dos seus dados é garantido pela nossa plataforma\\\"\\n ></nz-alert>\\n </div>\\n <app-underage-data-form\\n [form]=\\\"form\\\"\\n [isResponsible]=\\\"isResponsible\\\"\\n (patchFormEvent)=\\\"patchFormResponsible($event)\\\"\\n (changeConsultResponsibleEvent)=\\\"consultResponsible = $event\\\"\\n ></app-underage-data-form>\\n <app-personal-data-form\\n *ngIf=\\\"isResponsible || consultResponsible\\\"\\n [form]=\\\"formResponsible\\\"\\n [isResponsible]=\\\"isResponsible || consultResponsible\\\"\\n ></app-personal-data-form>\\n <app-contacts-data-form\\n [form]=\\\"formResponsible\\\"\\n *ngIf=\\\"isResponsible || consultResponsible\\\"\\n ></app-contacts-data-form>\\n <app-address-data-form\\n [form]=\\\"formResponsible.get('address')\\\"\\n *ngIf=\\\"isResponsible || consultResponsible\\\"\\n ></app-address-data-form>\\n</form>\\n\";","export default \"<app-alternative-navbar title=\\\"Pacientes\\\" titleIcon=\\\"fa-assignment\\\"></app-alternative-navbar>\\r\\n<app-sidebar-menu></app-sidebar-menu>\\r\\n\\r\\n<section theme>\\r\\n <header>\\r\\n <div class=\\\"container-filter\\\">\\r\\n <form [formGroup]=\\\"searchForm\\\">\\r\\n <nz-input-group [nzSuffix]=\\\"suffixIcon\\\" [nzPrefix]=\\\"prefixIcon\\\">\\r\\n <input type=\\\"text\\\" nz-input placeholder=\\\"Pesquisar\\\" formControlName=\\\"query\\\" #inputSearch />\\r\\n </nz-input-group>\\r\\n <ng-template #prefixIcon><i nz-icon nzType=\\\"search\\\" nzTheme=\\\"outline\\\"></i></ng-template>\\r\\n <ng-template #suffixIcon>\\r\\n <i nz-icon nzType=\\\"close\\\" nzTheme=\\\"outline\\\"></i>\\r\\n </ng-template>\\r\\n </form>\\r\\n <div class=\\\"fast-filter\\\" *ngIf=\\\"!isVeterinarian\\\">\\r\\n <span>\\r\\n Filtros Rápidos:\\r\\n </span>\\r\\n <button\\r\\n *ngIf=\\\"pinkOctoberCampaignEnabled\\\"\\r\\n nz-button\\r\\n nzType=\\\"default\\\"\\r\\n nzShape=\\\"round\\\"\\r\\n [ngClass]=\\\"filtersFast.womenOver40 ? 'active' : ''\\\"\\r\\n (click)=\\\"toggleFiltersFast('womenOver40')\\\"\\r\\n >\\r\\n Mulheres 40+\\r\\n </button>\\r\\n <button\\r\\n nz-button\\r\\n nzType=\\\"default\\\"\\r\\n nzShape=\\\"round\\\"\\r\\n [ngClass]=\\\"filtersFast.minors ? 'active' : ''\\\"\\r\\n (click)=\\\"toggleFiltersFast('minors')\\\"\\r\\n >\\r\\n Menores de idade\\r\\n </button>\\r\\n\\r\\n <button\\r\\n nz-button\\r\\n nzType=\\\"default\\\"\\r\\n nzShape=\\\"round\\\"\\r\\n [ngClass]=\\\"filtersFast.adults ? 'active' : ''\\\"\\r\\n (click)=\\\"toggleFiltersFast('adults')\\\"\\r\\n >\\r\\n Adultos\\r\\n </button>\\r\\n </div>\\r\\n </div>\\r\\n <div class=\\\"container-new-patient\\\">\\r\\n <div class=\\\"container-qdt-patient\\\">\\r\\n <i class=\\\"fa-solid fa-users\\\"></i>\\r\\n <span>\\r\\n {{ isVeterinarian ? 'Pets' : 'Pacientes' }}\\r\\n <span *ngIf=\\\"dataSet.length > 0\\\">({{ totalRecord }})</span>\\r\\n </span>\\r\\n </div>\\r\\n <app-add-button label=\\\"Novo Paciente\\\" (eventOnClick)=\\\"showModalSearch()\\\"></app-add-button>\\r\\n </div>\\r\\n </header>\\r\\n <ng-container>\\r\\n <ng-container class=\\\"container-table\\\" *ngIf=\\\"!loading; else templateLoading\\\">\\r\\n <ng-container *ngIf=\\\"dataSet.length > 0; else templateEmpty\\\">\\r\\n <nz-table\\r\\n *ngIf=\\\"!isMobile; else templateMobile\\\"\\r\\n #listingTable\\r\\n [nzData]=\\\"dataSet\\\"\\r\\n (nzPageIndexChange)=\\\"pageIndexChanged($event)\\\"\\r\\n [nzTotal]=\\\"totalRecord\\\"\\r\\n [nzPageSize]=\\\"pageSize\\\"\\r\\n [nzPageIndex]=\\\"pageIndex\\\"\\r\\n nzShowPagination\\r\\n [nzScroll]=\\\"scrollConfig\\\"\\r\\n style=\\\"overflow-x: auto;\\\"\\r\\n nzFrontPagination=\\\"false\\\"\\r\\n >\\r\\n <thead>\\r\\n <tr>\\r\\n <th nzWidth=\\\"450px\\\"><strong>Nome</strong></th>\\r\\n <th nzWidth=\\\"320px\\\"><strong>Email</strong></th>\\r\\n <th nzWidth=\\\"250px\\\"><strong>CPF</strong></th>\\r\\n <th><strong>Telefone</strong></th>\\r\\n <th></th>\\r\\n </tr>\\r\\n </thead>\\r\\n\\r\\n <tbody>\\r\\n <tr *ngFor=\\\"let patient of listingTable.data\\\">\\r\\n <td>\\r\\n <div class=\\\"container-patient-name\\\">\\r\\n <div>\\r\\n <i *ngIf=\\\"patient.responsible\\\" class=\\\"fa-solid fa-hand-holding-heart\\\"></i>\\r\\n <i\\r\\n *ngIf=\\\"pinkOctoberCampaignEnabled && patient.womenOver40\\\"\\r\\n class=\\\"fa-solid fa-ribbon\\\"\\r\\n style=\\\"color: #FC5E8B\\\"\\r\\n ></i>\\r\\n </div>\\r\\n <div>\\r\\n <span\\r\\n class=\\\"patient-name\\\"\\r\\n [ngStyle]=\\\"\\r\\n pinkOctoberCampaignEnabled && patient.womenOver40 && { color: '#FC5E8B' }\\r\\n \\\"\\r\\n >\\r\\n {{ patient.name }}</span\\r\\n >\\r\\n <span class=\\\"responsible-name\\\" *ngIf=\\\"patient.responsible\\\"\\r\\n ><br />RESPONSÃVEL: {{ patient.responsible.name }}</span\\r\\n >\\r\\n </div>\\r\\n </div>\\r\\n </td>\\r\\n <td class=\\\"font-size-td\\\">\\r\\n <span *ngIf=\\\"patient.user as user\\\">\\r\\n <span *ngIf=\\\"user.email || user.emailContact\\\"\\r\\n ><strong>Email: </strong>{{ user.email || user.emailContact }}</span\\r\\n >\\r\\n <span *ngIf=\\\"!user.email && !user.emailContact\\\"> - </span>\\r\\n </span>\\r\\n </td>\\r\\n <td class=\\\"font-size-td\\\">{{ patient.cpf | formattedCpf }}</td>\\r\\n <td class=\\\"font-size-td\\\">\\r\\n <span *ngIf=\\\"patient?.cellphone || patient?.telephone\\\">{{\\r\\n patient.cellphone || patient?.telephone | formattedTel\\r\\n }}</span>\\r\\n <span *ngIf=\\\"!patient?.cellphone && !patient?.telephone\\\"> - </span>\\r\\n </td>\\r\\n <td class=\\\"font-size-td\\\">\\r\\n <div class=\\\"actions\\\" style=\\\"display: flex;gap: 12px;align-items: center;\\\">\\r\\n <a (click)=\\\"redirectToNewPrescription(patient)\\\" title=\\\"Nova Prescrição\\\">\\r\\n <i class=\\\"fa fa-file-medical\\\"></i>\\r\\n </a>\\r\\n <a\\r\\n *ngIf=\\\"patient.responsible\\\"\\r\\n (click)=\\\"showModalSwitchResponsible(patient)\\\"\\r\\n title=\\\"Alterar Responsável\\\"\\r\\n >\\r\\n <img\\r\\n src=\\\"assets/icons/people-arrows-solid.svg\\\"\\r\\n style=\\\"width: 18px;margin-top: -2px;\\\"\\r\\n />\\r\\n </a>\\r\\n <a (click)=\\\"redirectToPatientPrescriptions(patient._id)\\\" title=\\\"Histórico\\\"\\r\\n ><i class=\\\"fas fa-history\\\"></i\\r\\n ></a>\\r\\n <a title=\\\"Informações\\\" (click)=\\\"togglePatientModalDetails($event, patient)\\\">\\r\\n <i class=\\\"fa fa-address-card\\\"></i\\r\\n ></a>\\r\\n <a title=\\\"Desvincular Paciente\\\" (click)=\\\"showModalRemovePatient(patient._id)\\\">\\r\\n <i class=\\\"fa fa-trash-solid\\\"></i>\\r\\n </a>\\r\\n </div>\\r\\n </td>\\r\\n </tr>\\r\\n </tbody>\\r\\n </nz-table>\\r\\n </ng-container>\\r\\n </ng-container>\\r\\n </ng-container>\\r\\n\\r\\n <ng-template #templateMobile>\\r\\n <div class=\\\"container-mobile\\\">\\r\\n <div class=\\\"card p-2 mt-2\\\" *ngFor=\\\"let item of dataSet\\\">\\r\\n <div class=\\\"content-cart\\\">\\r\\n <div class=\\\"content-cart-info\\\">\\r\\n <div class=\\\"content-cart-info-name\\\">\\r\\n <i *ngIf=\\\"item.responsible\\\" class=\\\"fa-solid fa-hand-holding-heart\\\"></i>\\r\\n <i\\r\\n *ngIf=\\\"pinkOctoberCampaignEnabled && item.womenOver40\\\"\\r\\n class=\\\"fa-solid fa-ribbon\\\"\\r\\n style=\\\"color: #FC5E8B\\\"\\r\\n ></i>\\r\\n <span\\r\\n class=\\\"patient-name\\\"\\r\\n [ngStyle]=\\\"pinkOctoberCampaignEnabled && item.womenOver40 && { color: '#FC5E8B' }\\\"\\r\\n >\\r\\n {{ item.name }}\\r\\n </span>\\r\\n </div>\\r\\n <div class=\\\"content-cart-info-responsible-name\\\" *ngIf=\\\"item.responsible\\\">\\r\\n <span><strong>RESPONSÃVEL: </strong> {{ item.responsible.name }}</span>\\r\\n </div>\\r\\n <div class=\\\"content-cart-info-email\\\" *ngIf=\\\"item.user as user\\\">\\r\\n <span *ngIf=\\\"user.email || user.emailContact\\\"\\r\\n ><strong>Email: </strong>{{ user.email || user.emailContact }}</span\\r\\n >\\r\\n </div>\\r\\n\\r\\n <div class=\\\"content-cart-info-cpf-telefone\\\">\\r\\n <span><strong>CPF: </strong>{{ item.cpf | formattedCpf }}</span>\\r\\n <span *ngIf=\\\"item?.cellphone || item?.telephone\\\"\\r\\n ><strong>Telefone: </strong>{{ item.cellphone || item?.telephone | formattedTel }}</span\\r\\n >\\r\\n </div>\\r\\n </div>\\r\\n <a nz-dropdown [nzDropdownMenu]=\\\"options\\\" nzTrigger=\\\"click\\\">\\r\\n <i class=\\\"fa-solid fa-ellipsis-v\\\"></i>\\r\\n </a>\\r\\n <nz-dropdown-menu #options=\\\"nzDropdownMenu\\\">\\r\\n <ul nz-menu class=\\\"dropdown-menu-ul\\\">\\r\\n <li nz-menu-item (click)=\\\"redirectToNewPrescription(item)\\\">\\r\\n <i class=\\\"fa fa-file-medical\\\"></i> <span>Novo Documento</span>\\r\\n </li>\\r\\n <li nz-menu-item (click)=\\\"redirectToPatientPrescriptions(item._id)\\\">\\r\\n <i class=\\\"fas fa-history\\\"></i> <span>Historico</span>\\r\\n </li>\\r\\n <li nz-menu-item (click)=\\\"togglePatientModalDetails($event, item)\\\">\\r\\n <i class=\\\"fa fa-address-card\\\"></i> <span>Perfil</span>\\r\\n </li>\\r\\n <li nz-menu-item (click)=\\\"showModalRemovePatient(item._id)\\\">\\r\\n <i class=\\\"fa fa-trash-solid\\\"></i> <span>Remover Paciente</span>\\r\\n </li>\\r\\n </ul>\\r\\n </nz-dropdown-menu>\\r\\n </div>\\r\\n </div>\\r\\n\\r\\n <div style=\\\"margin-top: 16px;display: flex;align-items: center;justify-content: flex-end;\\\">\\r\\n <nz-pagination\\r\\n (nzPageIndexChange)=\\\"pageIndexChanged($event)\\\"\\r\\n [nzTotal]=\\\"totalRecord\\\"\\r\\n [nzPageSize]=\\\"pageSize\\\"\\r\\n [nzPageIndex]=\\\"pageIndex\\\"\\r\\n nzShowPagination\\r\\n ></nz-pagination>\\r\\n </div>\\r\\n </div>\\r\\n </ng-template>\\r\\n</section>\\r\\n\\r\\n<ng-template #templateLoading>\\r\\n <div class=\\\"container-center\\\" theme>\\r\\n <nz-spin nzSimple theme></nz-spin>\\r\\n </div>\\r\\n</ng-template>\\r\\n\\r\\n<ng-template #templateEmpty>\\r\\n <div class=\\\"container-center\\\" theme>\\r\\n <h5>Não possui pacientes cadastrados.</h5>\\r\\n </div>\\r\\n</ng-template>\\r\\n\\r\\n<app-patient-details #modalPatient></app-patient-details>\\r\\n<ngx-loading [show]=\\\"loadingSpinner\\\" [config]=\\\"{ backdropBorderRadius: '3px' }\\\"></ngx-loading>\\r\\n\";","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { ValidationService } from '@app/core/services/validation.service';\nimport { CepService } from '@app/modules/entry/services/cep.service';\nimport { UserService } from '@app/modules/user/user.service';\nimport { BrazilianStates } from '@app/shared/data/Brazilian-states';\nimport { DateUtils } from '@app/shared/data/DateUtils';\nimport { nativeAsync } from '@app/shared/decorators/nativeAsync';\nimport { BrazilState, Patient } from '@app/shared/models';\nimport { markFormGroup } from '@app/utils/markFormGroup';\nimport { environment } from '@env/environment';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { of } from 'rxjs';\nimport { catchError, debounceTime, filter, map, switchMap } from 'rxjs/operators';\n\n@Component({\n selector: 'app-modal-edit-patient',\n templateUrl: './modal-edit-patient.component.html',\n styleUrls: ['./modal-edit-patient.component.scss']\n})\nexport class ModalEditPatientComponent implements OnInit {\n @Input() patient: Patient;\n @Input() isVeterinarian: boolean;\n @Output() submit = new EventEmitter<Patient>();\n\n states: BrazilState[] = BrazilianStates;\n loading = false;\n\n form: FormGroup;\n\n constructor(\n private modalRef: BsModalRef,\n private fb: FormBuilder,\n private cepService: CepService,\n private userService: UserService\n ) {\n this.form = this.fb.group({\n _id: [null, Validators.required],\n name: ['', [Validators.required, ValidationService.nomeValidator]],\n fullname: ['', [Validators.required, ValidationService.nomeValidator]],\n cpf: [undefined],\n sex: ['', Validators.required],\n dateOfBirth: [null, Validators.required],\n telephone: [''],\n cellphone: [''],\n email: ['', Validators.email],\n emailContact: ['', Validators.email],\n membership: this.fb.group({\n mothersName: ['']\n }),\n responsible: [null],\n address: this.fb.group({\n uf: [''],\n city: [''],\n complement: [''],\n number: [''],\n street: [''],\n neighborhood: [''],\n cep: ['', [ValidationService.cepValidator]]\n })\n });\n }\n\n ngOnInit() {\n this.patchForm();\n this.disableInputs();\n\n const emailForm = this.form.get('email');\n emailForm.valueChanges\n .pipe(\n map(email => {\n const value = email && email.toLowerCase();\n emailForm.setValue(value, { emitEvent: false });\n return value;\n }),\n filter(_ => emailForm.valid && emailForm.value),\n debounceTime(environment.debounceTime),\n switchMap(email =>\n this.userService\n .checkEmailExists(email, this.patient.tenantId)\n .pipe(catchError(err => of(err)))\n )\n )\n .subscribe(res => {\n if (res.status === 200) {\n const exists = this.patient.user.email !== res.email;\n emailForm.setErrors(exists ? { exists } : null);\n } else if (res.status === 404) {\n emailForm.setErrors(null);\n } else if (res.status === 400) {\n emailForm.setErrors({ invalid: true });\n }\n });\n\n this.form.get('emailContact').valueChanges.subscribe(email => {\n this.form.get('emailContact').setValue(email && email.toLowerCase(), { emitEvent: false });\n });\n }\n\n private patchForm() {\n this.form.patchValue(this.patient);\n if (this.patient.user) {\n this.form.get('email').setValue(this.patient.user.email);\n this.form.get('emailContact').setValue(this.patient.user.emailContact);\n }\n const date = new Date(this.patient.dateOfBirth);\n this.form.get('dateOfBirth').setValue(date.toISOString().substring(0, 10));\n\n if (this.isDependent) {\n this.form.get('responsible').setValue(this.patient.responsible._id);\n this.form.removeControl('address');\n this.form.removeControl('cellphone');\n this.form.removeControl('telephone');\n } else {\n this.form.get('cpf').setValidators([Validators.required, ValidationService.cpfValidator]);\n if (this.hasAccount) {\n this.form.get('email').setValidators([Validators.required, Validators.email]);\n } else {\n this.form.get('email').setValidators(Validators.email);\n }\n }\n }\n\n private disableInputs() {\n if (!DateUtils.isUnderThirteenTearsOfAge(this.form.get('dateOfBirth').value)) {\n this.form.get('cpf').disable();\n this.form.get('dateOfBirth').disable();\n\n if (this.form.get('fullname').value) {\n this.form.get('fullname').disable();\n }\n }\n\n if (this.hasAccount) {\n this.form.get('email').disable();\n this.form.get('sex').disable();\n this.form.get('membership.mothersName').disable();\n }\n }\n\n get cpfCtrl() {\n return this.form.get('cpf');\n }\n\n get dateCtrl() {\n return this.form.get('dateOfBirth');\n }\n\n get currentDate() {\n const now = new Date();\n const dd = String(now.getDate()).padStart(2, '0');\n const mm = String(now.getMonth() + 1).padStart(2, '0');\n const yyyy = now.getFullYear();\n return `${yyyy}-${mm}-${dd}`;\n }\n\n get hasAccount() {\n return this.patient.user && !this.patient.user.activationToken && this.patient.user.email;\n }\n\n get isDependent() {\n return !!this.patient.responsible;\n }\n\n checkRepeatName(value: boolean) {\n if (value) {\n this.form.get('name').setValue(this.form.get('fullname').value);\n this.form.get('name').disable();\n } else {\n this.form.get('name').enable();\n }\n }\n\n @nativeAsync\n async onKey(event: any) {\n if (event.target.value.length === 10) {\n const cep = event.target.value.replace(/[^\\d]+/g, '');\n const data = await this.cepService.consult(cep);\n if (!data.erro) {\n this.form.controls['address'].patchValue({\n uf: data.uf,\n street: data.logradouro,\n neighborhood: data.bairro,\n city: data.localidade,\n number: null,\n cep: data.cep\n });\n }\n }\n }\n\n submitForm() {\n markFormGroup(this.form);\n const form = this.form.getRawValue();\n\n if (this.form.valid) {\n this.submit.emit(form);\n this.close();\n }\n }\n\n close() {\n this.modalRef.hide();\n }\n}\n","export default \"<div class=\\\"modal-header\\\" theme>\\n <h4 class=\\\"modal-title pull-left text-white\\\">\\n {{ isVeterinarian ? 'Editar responsável' : 'Editar paciente' }}\\n </h4>\\n <button type=\\\"button\\\" class=\\\"close pull-right\\\" aria-label=\\\"Close\\\" (click)=\\\"close()\\\">\\n <span aria-hidden=\\\"true\\\">×</span>\\n </button>\\n</div>\\n\\n<div class=\\\"modal-body\\\" theme>\\n <form nz-form [formGroup]=\\\"form\\\">\\n <div class=\\\"row justify-content-between\\\">\\n <div [ngClass]=\\\"isDependent ? 'col-md-12' : 'col-md-6'\\\">\\n <div class=\\\"row align-items-center\\\">\\n <div class=\\\"col-md\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"cpf\\\">CPF <span class=\\\"mandatory\\\">*</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n id=\\\"cpf\\\"\\n formControlName=\\\"cpf\\\"\\n placeholder=\\\"000.000.000-00\\\"\\n mask=\\\"000.000.000-00\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n <nz-form-explain *ngIf=\\\"cpfCtrl.dirty && cpfCtrl.errors\\\">\\n <ng-container *ngIf=\\\"cpfCtrl.hasError('required')\\\">\\n Campo obrigatório, por favor digite seu CPF.\\n </ng-container>\\n <ng-container *ngIf=\\\"!cpfCtrl.hasError('required') && cpfCtrl.hasError('cpf')\\\">\\n CPF inválido, por favor digite um CPF válido.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n\\n <div class=\\\"col-md\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"dateOfBirth\\\"\\n >Data de nascimento<span class=\\\"mandatory\\\"> *</span></nz-form-label\\n >\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n id=\\\"dateOfBirth\\\"\\n type=\\\"date\\\"\\n formControlName=\\\"dateOfBirth\\\"\\n placeholder=\\\"DD/MM/AAAA\\\"\\n [max]=\\\"currentDate\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n\\n <nz-form-explain *ngIf=\\\"dateCtrl.dirty && dateCtrl.errors\\\">\\n <ng-container *ngIf=\\\"dateCtrl.hasError('required')\\\">\\n Campo obrigatório, por favor digite sua data de nascimento.\\n </ng-container>\\n <ng-container\\n *ngIf=\\\"!dateCtrl.hasError('required') && dateCtrl.hasError('dateOfBirth')\\\"\\n >\\n Nome inválido.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n\\n <div class=\\\"col-md\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"sex\\\">Sexo <span class=\\\"mandatory\\\">*</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <select formControlName=\\\"sex\\\" id=\\\"sex\\\" nz-input nzPlaceHolder=\\\"Selecione\\\">\\n <option value=\\\"M\\\">Masculino</option>\\n <option value=\\\"F\\\">Feminino</option>\\n </select>\\n <nz-form-explain *ngIf=\\\"form.get('sex').dirty && form.get('sex').errors\\\">\\n <ng-container *ngIf=\\\"form.get('sex').hasError('required')\\\">\\n Campo obrigatório, por favor selecione o sexo.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n\\n <div class=\\\"col-12\\\">\\n <nz-form-item *ngIf=\\\"form.get('fullname') as fullname\\\">\\n <nz-form-label nzFor=\\\"fullname\\\"\\n >Nome completo <span class=\\\"mandatory\\\">*</span></nz-form-label\\n >\\n <nz-form-control nzHasFeedback>\\n <input\\n formControlName=\\\"fullname\\\"\\n id=\\\"fullname\\\"\\n nz-input\\n placeholder=\\\"ex: João Gilberto\\\"\\n [disabled]=\\\"!!fullname.value\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n <nz-form-explain *ngIf=\\\"fullname.dirty && fullname.errors\\\">\\n <ng-container *ngIf=\\\"fullname.hasError('required')\\\">\\n Campo obrigatório, por favor digite o seu nome e sobrenome.\\n </ng-container>\\n <ng-container *ngIf=\\\"!fullname.hasError('required') && fullname.hasError('fullname')\\\">\\n Por favor digite o seu nome e sobrenome.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n <div class=\\\"col-12\\\">\\n <nz-form-item>\\n <div class=\\\"row\\\">\\n <div class=\\\"col-md-6\\\">\\n <nz-form-label nzFor=\\\"name\\\"\\n >Nome de exibição/social <span class=\\\"mandatory\\\">*</span></nz-form-label\\n >\\n </div>\\n <div class=\\\"col\\\">\\n <label\\n #repeatName\\n nz-checkbox\\n (nzCheckedChange)=\\\"checkRepeatName($event)\\\"\\n [nzDisabled]=\\\"!form.get('fullname').value\\\"\\n style=\\\"font-size: 13px; margin-right: -11px;\\\"\\n >Repetir nome completo</label\\n >\\n </div>\\n </div>\\n <nz-form-control nzHasFeedback>\\n <input\\n formControlName=\\\"name\\\"\\n id=\\\"name\\\"\\n nz-input\\n placeholder=\\\"ex: João Gilberto\\\"\\n maxlength=\\\"128\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n <nz-form-explain *ngIf=\\\"form.get('name').dirty && form.get('name').errors\\\">\\n <ng-container *ngIf=\\\"form.get('name').hasError('required')\\\">\\n Campo obrigatório, por favor digite um nome de exibição.\\n </ng-container>\\n <ng-container\\n *ngIf=\\\"!form.get('name').hasError('required') && form.get('name').hasError('name')\\\"\\n >\\n Por favor digite um nome de exibição.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n\\n <div class=\\\"col-12\\\" [formGroup]=\\\"form.get('membership')\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"mothersName\\\"\\n >Nome da mãe<span class=\\\"mandatory\\\"> *</span></nz-form-label\\n >\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n placeholder=\\\"Digite o nome da mãe\\\"\\n formControlName=\\\"mothersName\\\"\\n id=\\\"mothersName\\\"\\n maxlength=\\\"128\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n <nz-form-explain\\n *ngIf=\\\"\\n form.get('membership.mothersName').dirty && form.get('membership.mothersName').errors\\n \\\"\\n >\\n <ng-container *ngIf=\\\"form.get('membership.mothersName').hasError('required')\\\">\\n Campo obrigatório, por favor digite o nome da mãe.\\n </ng-container>\\n <ng-container\\n *ngIf=\\\"\\n !form.get('membership.mothersName').hasError('required') &&\\n form.get('membership.mothersName').hasError('membership.mothersName')\\n \\\"\\n >\\n Nome inválido.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n </div>\\n </div>\\n\\n <div class=\\\"col-md-5\\\" *ngIf=\\\"!isDependent\\\">\\n <nz-form-item *ngIf=\\\"form.get('cellphone') as cellphone\\\">\\n <nz-form-label nzFor=\\\"cellphone\\\">Telefone 1</nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n id=\\\"cellphone\\\"\\n [mask]=\\\"cellphone.value.length <= 10 ? '(00) 0000-00009' : '(00) 00000-0000'\\\"\\n placeholder=\\\"(21) 92222-2222\\\"\\n formControlName=\\\"cellphone\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n <nz-form-explain *ngIf=\\\"cellphone.dirty && cellphone.errors\\\">\\n <ng-container *ngIf=\\\"cellphone.hasError('required')\\\">\\n Campo obrigatório, por favor digite seu telefone para contato.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n\\n <nz-form-item *ngIf=\\\"form.get('telephone') as telephone\\\">\\n <nz-form-label nzFor=\\\"telephone\\\">Telefone 2</nz-form-label>\\n <nz-form-control>\\n <input\\n nz-input\\n id=\\\"telephone\\\"\\n [mask]=\\\"telephone.value.length <= 10 ? '(00) 0000-00009' : '(00) 00000-0000'\\\"\\n formControlName=\\\"telephone\\\"\\n placeholder=\\\"(21) 2222-2222\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n <nz-form-explain *ngIf=\\\"telephone.dirty && telephone.errors\\\">\\n <ng-container *ngIf=\\\"telephone.hasError('telephone')\\\">\\n Telefone inválido, por favor digite um número válido.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n\\n <nz-form-item>\\n <div class=\\\"row\\\">\\n <div [ngClass]=\\\"hasAccount ? 'col-4' : 'col-5'\\\">\\n <nz-form-label nzFor=\\\"email\\\"\\n >E-mail de login <span class=\\\"mandatory\\\" *ngIf=\\\"hasAccount\\\">*</span></nz-form-label\\n >\\n </div>\\n <div class=\\\"col\\\">\\n <label *ngIf=\\\"hasAccount\\\" class=\\\"has-account\\\"> Paciente com conta ativada</label>\\n </div>\\n </div>\\n <nz-form-control nzHasFeedback *ngIf=\\\"form.get('email') as email\\\">\\n <input\\n nz-input\\n id=\\\"email\\\"\\n type=\\\"email\\\"\\n formControlName=\\\"email\\\"\\n style=\\\"text-transform: lowercase;\\\"\\n (keydown.space)=\\\"$event.preventDefault()\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n <nz-form-explain *ngIf=\\\"email.touched && email.errors\\\">\\n <ng-container *ngIf=\\\"email.hasError('exists'); else required\\\">\\n E-mail já existe, por favor escolha outro e-mail.\\n </ng-container>\\n <ng-template #required>\\n <ng-container *ngIf=\\\"email.hasError('required') && email.dirty; else invalid\\\">\\n <span class=\\\"error\\\">Campo obrigatório, por favor digite seu e-mail.</span>\\n </ng-container>\\n </ng-template>\\n <ng-template #invalid>\\n <ng-container *ngIf=\\\"email.invalid && email.value.length > 0\\\">\\n <span class=\\\"error\\\">E-mail inválido, por favor digite um e-mail válido.</span>\\n </ng-container>\\n </ng-template>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"emailContact\\\">E-mail de contato</nz-form-label>\\n <nz-form-control nzHasFeedback *ngIf=\\\"form.get('emailContact') as email\\\">\\n <input\\n nz-input\\n id=\\\"emailContact\\\"\\n type=\\\"email\\\"\\n formControlName=\\\"emailContact\\\"\\n style=\\\"text-transform: lowercase;\\\"\\n (keydown.space)=\\\"$event.preventDefault()\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n <nz-form-explain *ngIf=\\\"email.touched && email.errors\\\">\\n <ng-container *ngIf=\\\"email.hasError('exists'); else required\\\">\\n E-mail já existe, por favor escolha outro e-mail.\\n </ng-container>\\n <ng-template #required>\\n <ng-container *ngIf=\\\"email.hasError('required') && email.dirty; else invalid\\\">\\n <span class=\\\"error\\\">Campo obrigatório, por favor digite seu e-mail.</span>\\n </ng-container>\\n </ng-template>\\n <ng-template #invalid>\\n <ng-container *ngIf=\\\"email.invalid && email.value.length > 0\\\">\\n <span class=\\\"error\\\">E-mail inválido, por favor digite um e-mail válido.</span>\\n </ng-container>\\n </ng-template>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n\\n <nz-divider nzOrientation=\\\"left\\\" nzText=\\\"Endereço\\\" *ngIf=\\\"!isDependent\\\"></nz-divider>\\n\\n <div class=\\\"col-md-12\\\" *ngIf=\\\"form.get('address') as address\\\">\\n <div class=\\\"row\\\" [formGroup]=\\\"address\\\">\\n <div class=\\\"col-md-3\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"cep\\\">CEP</nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n (keyup)=\\\"onKey($event)\\\"\\n mask=\\\"00.000-000\\\"\\n formControlName=\\\"cep\\\"\\n id=\\\"cep\\\"\\n nz-input\\n placeholder=\\\"00.000-000\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n <nz-form-explain *ngIf=\\\"form.get('address.cep').dirty && form.get('address.cep').errors\\\">\\n <ng-container *ngIf=\\\"form.get('address.cep').hasError('required')\\\">\\n Campo obrigatório, por favor digite seu CEP.\\n </ng-container>\\n <ng-container\\n *ngIf=\\\"\\n !form.get('address.cep').hasError('required') &&\\n form.get('address.cep').hasError('address.cep')\\n \\\"\\n >\\n CEP inválido, por favor digite um CEP válido.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n\\n <div class=\\\"col-md-6\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"logradouro\\\">Logradouro</nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n formControlName=\\\"street\\\"\\n id=\\\"street\\\"\\n nz-input\\n placeholder=\\\"Digite o logradouro\\\"\\n maxlength=\\\"128\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n <nz-form-explain\\n *ngIf=\\\"form.get('address.street').dirty && form.get('address.street').errors\\\"\\n >\\n <ng-container *ngIf=\\\"form.get('address.street').hasError('required')\\\">\\n Campo obrigatório, por favor digite o logradouro.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n\\n <div class=\\\"col-12 col-md-3\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"number\\\">Número</nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n formControlName=\\\"number\\\"\\n id=\\\"number\\\"\\n nz-input\\n placeholder=\\\"Digite o número\\\"\\n maxlength=\\\"10\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n <nz-form-explain\\n *ngIf=\\\"form.get('address.number').dirty && form.get('address.number').errors\\\"\\n >\\n <ng-container *ngIf=\\\"form.get('address.number').hasError('required')\\\">\\n Campo obrigatório, por favor digite o número.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n\\n <div class=\\\"col-12 col-md-3\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"complement\\\">Complemento</nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n formControlName=\\\"complement\\\"\\n id=\\\"complement\\\"\\n nz-input\\n placeholder=\\\"Digite o complemento\\\"\\n maxlength=\\\"128\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n\\n <div class=\\\"col-12 col-md-3\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"neighborhood\\\">Bairro</nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n formControlName=\\\"neighborhood\\\"\\n id=\\\"neighborhood\\\"\\n nz-input\\n placeholder=\\\"Digite o bairro\\\"\\n maxlength=\\\"128\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n <nz-form-explain\\n *ngIf=\\\"\\n form.get('address.neighborhood').dirty && form.get('address.neighborhood').errors\\n \\\"\\n >\\n <ng-container *ngIf=\\\"form.get('address.neighborhood').hasError('required')\\\">\\n Campo obrigatório, por favor digite o bairro.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n\\n <div class=\\\"col-12 col-md-4\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"city\\\">Cidade</nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n formControlName=\\\"city\\\"\\n id=\\\"city\\\"\\n nz-input\\n placeholder=\\\"Digite a cidade\\\"\\n maxlength=\\\"64\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n <nz-form-explain\\n *ngIf=\\\"form.get('address.city').dirty && form.get('address.city').errors\\\"\\n >\\n <ng-container *ngIf=\\\"form.get('address.city').hasError('required')\\\">\\n Campo obrigatório, por favor digite a cidade.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n\\n <div class=\\\"col-12 col-md-2\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"uf\\\">UF</nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <nz-select\\n formControlName=\\\"uf\\\"\\n id=\\\"uf\\\"\\n nzAllowClear\\n nzShowSearch\\n nzPlaceHolder=\\\"Selecione\\\"\\n >\\n <nz-option\\n *ngFor=\\\"let state of states\\\"\\n [nzLabel]=\\\"state?.sigla\\\"\\n [nzValue]=\\\"state?.sigla\\\"\\n ></nz-option>\\n </nz-select>\\n <nz-form-explain *ngIf=\\\"form.get('address.uf').dirty && form.get('address.uf').errors\\\">\\n <ng-container *ngIf=\\\"form.get('address.uf').hasError('required')\\\">\\n Campo obrigatório, por favor selecione o UF.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n </div>\\n </div>\\n </div>\\n </form>\\n</div>\\n\\n<div class=\\\"modal-footer\\\" theme>\\n <button class=\\\"ok-btn\\\" nz-button class=\\\"btn-primary\\\" (click)=\\\"close()\\\">\\n Cancelar\\n </button>\\n <button class=\\\"ok-btn\\\" nz-button class=\\\"btn-primary\\\" (click)=\\\"submitForm()\\\">\\n Salvar <i class=\\\"fa\\\"></i>\\n </button>\\n</div>\\n<ngx-loading [show]=\\\"loading\\\" [config]=\\\"{ backdropBorderRadius: '3px' }\\\"></ngx-loading>\\n\";","export default \".modal-body {\\n padding: 30px;\\n}\\n.modal-body input {\\n border-radius: 10px;\\n}\\n.modal-body .btn-save {\\n float: right;\\n padding-top: 7px;\\n padding-bottom: 7px;\\n margin-top: 13px;\\n margin-bottom: 5px;\\n}\\n.modal-body .mandatory {\\n color: red;\\n}\\n.modal-body input::-webkit-input-placeholder {\\n color: #bdc2c7;\\n}\\n::ng-deep .ant-select-selection {\\n height: 100%;\\n}\\n.modal-header {\\n margin: 0;\\n font-family: \\\"probold\\\";\\n}\\n.modal-footer {\\n margin: 0;\\n}\\n.ant-btn {\\n background-color: var(--bg-color-primary);\\n border-color: var(--bg-color-primary);\\n}\\n.ant-btn:hover,\\n.ant-btn:focus {\\n background-color: var(--bg-color-secondary);\\n border-color: var(--bg-color-secondary);\\n}\\n.has-account {\\n font-size: 14px;\\n color: orangered;\\n}\";","import {\r\n Component,\r\n EventEmitter,\r\n HostListener,\r\n OnInit,\r\n Output,\r\n TemplateRef,\r\n ViewChild\r\n} from '@angular/core';\r\nimport { AuthService } from '@app/core/services/auth.service';\r\nimport { HealthProfessionalService } from '@app/modules/health-professional/services/health-professional.service';\r\nimport { HealthProfessional, Patient } from '@app/shared/models';\r\nimport { User } from '@app/shared/models/decodedLoginToken';\r\nimport { PetPatient } from '@app/shared/models/pet-patient';\r\nimport { ProfessionalType } from '@app/shared/models/professional-type.enum';\r\nimport { AppToastService } from '@app/shared/services/app-toast.service';\r\nimport { NzModalRef, NzModalService } from 'ng-zorro-antd/modal';\r\nimport { BsModalService } from 'ngx-bootstrap/modal';\r\nimport { PatientsService } from '../../services/patients.service';\r\nimport { PetPatientService } from '../../services/pet-patient.service';\r\nimport { ModalEditPatientComponent } from '../modal-edit-patient/modal-edit-patient.component';\r\nimport { ModalEditPetComponent } from '../modal-edit-pet/modal-edit-pet.component';\r\nimport { nativeAsync } from '@app/shared/decorators/nativeAsync';\r\n\r\n@Component({\r\n selector: 'app-patient-details',\r\n templateUrl: './patient-details.component.html',\r\n styleUrls: ['./patient-details.component.scss']\r\n})\r\nexport class PatientDetailsComponent implements OnInit {\r\n @Output() close = new EventEmitter<boolean>();\r\n @Output() update = new EventEmitter<Patient | PetPatient>();\r\n\r\n tplModal: NzModalRef;\r\n\r\n @ViewChild('tplTitle', { static: true })\r\n tplTitle: TemplateRef<{}>;\r\n\r\n @ViewChild('tplContent', { static: true })\r\n tplContent: TemplateRef<{}>;\r\n\r\n @ViewChild('tplFooter', { static: true })\r\n tplFooter: TemplateRef<{}>;\r\n\r\n patient: Patient;\r\n pet: PetPatient;\r\n responsiblePets: PetPatient[] = [];\r\n prescriber: HealthProfessional;\r\n\r\n private patientsCache = new Map<string, boolean>();\r\n private petsCache = new Map<string, boolean>();\r\n patientRecordStyle = {\r\n recordsArea: { height: '25vh' },\r\n input: { height: '95px', 'border-radius': '12px' }\r\n };\r\n\r\n loading = false;\r\n\r\n constructor(\r\n private modalService: NzModalService,\r\n private bsModalService: BsModalService,\r\n private notification: AppToastService,\r\n private authService: AuthService,\r\n private patientsService: PatientsService,\r\n private petPatientService: PetPatientService,\r\n private healthProfessionalService: HealthProfessionalService\r\n ) {}\r\n\r\n ngOnInit() {}\r\n\r\n get user(): User {\r\n return this.authService.user();\r\n }\r\n\r\n get isVeterinarian(): boolean {\r\n return this.prescriber.professionalType === ProfessionalType.VETERINARIAN;\r\n }\r\n\r\n @nativeAsync\r\n async createTplModal(patient: any, prescriber: HealthProfessional) {\r\n if (prescriber.professionalType === ProfessionalType.VETERINARIAN) {\r\n this.pet = patient;\r\n } else {\r\n this.patient = patient;\r\n }\r\n\r\n this.prescriber = prescriber;\r\n\r\n this.tplModal = this.modalService.create({\r\n nzTitle: this.tplTitle,\r\n nzContent: this.tplContent,\r\n nzFooter: null,\r\n nzClosable: true,\r\n nzWidth: 828,\r\n nzMaskClosable: true,\r\n nzOnCancel: () => (this.patient = null),\r\n nzWrapClassName: 'vertical-center-modal',\r\n nzOnOk: () => console.log('Click ok')\r\n });\r\n\r\n if (this.isVeterinarian) {\r\n this.responsiblePets = await this.petPatientService\r\n .getPetsByResponsibleCpf(this.pet.responsible.cpf)\r\n .toPromise();\r\n\r\n if (this.responsiblePets) {\r\n this.responsiblePets.forEach(({ _id: id }) => {\r\n this.hasPet(id);\r\n });\r\n }\r\n } else {\r\n if (this.patient.dependents) {\r\n this.patient.dependents.forEach(({ _id: id }) => {\r\n this.hasPatient(id);\r\n });\r\n }\r\n }\r\n }\r\n\r\n private hasPatient(id: string) {\r\n this.healthProfessionalService.getPatientsById(id, this.user._id).subscribe(\r\n p => this.patientsCache.set(id, true),\r\n err => {\r\n if (err.status === 404) {\r\n this.patientsCache.set(id, false);\r\n } else {\r\n console.error(err);\r\n }\r\n }\r\n );\r\n }\r\n\r\n private hasPet(id: string) {\r\n this.healthProfessionalService.getPetsById(id, this.user._id).subscribe(\r\n p => {\r\n this.petsCache.set(id, true);\r\n },\r\n err => {\r\n if (err.status === 404) {\r\n this.petsCache.set(id, false);\r\n } else {\r\n console.error(err);\r\n }\r\n }\r\n );\r\n }\r\n\r\n get hasPatientRecordFeature() {\r\n return this.user && this.user.features.find(f => f.name === 'Prontuário');\r\n }\r\n\r\n destroyTplModal(): void {\r\n this.tplModal.destroy();\r\n }\r\n\r\n @HostListener('document:keydown.escape', ['$event'])\r\n onKeydownHandler(event: KeyboardEvent) {\r\n this.destroyTplModal();\r\n }\r\n\r\n get hasAccount() {\r\n return (\r\n this.patient && this.patient.user && !this.patient.user.activationToken && this.patient.user.email\r\n );\r\n }\r\n\r\n get popoverContent() {\r\n return this.hasAccount\r\n ? 'O(a) paciente já ativou a conta na plataforma! Apenas algumas informações poderão ser alteradas por você. ' +\r\n 'Se precisar de ajuda, entre em contato com nosso atendimento em receitadigital.com'\r\n : 'Clique no lápis para alterar os dados do paciente. ' +\r\n 'Esta ação só será possÃvel se o paciente ainda não tiver ativado a conta na plataforma.';\r\n }\r\n\r\n getAddress() {\r\n let address = null;\r\n if (this.patient && this.patient.address) {\r\n address = this.patient.address;\r\n } else if (this.patient && this.patient.responsible.address) {\r\n address = this.patient.responsible.address;\r\n } else if (this.pet.responsible.address) {\r\n address = this.pet.responsible.address;\r\n }\r\n\r\n if (!address) {\r\n return '';\r\n }\r\n const addr = [address.street, address.number, address.complement, address.neighborhood, address.city]\r\n .filter(a => a)\r\n .join(', ');\r\n\r\n return addr + (address.uf ? (address.city ? '-' : ', ') + address.uf : '');\r\n }\r\n\r\n hasAddress() {\r\n return (\r\n (this.patient && (this.patient.address || this.patient.responsible.address)) ||\r\n (this.pet && this.pet.responsible.address)\r\n );\r\n }\r\n\r\n hasDependent(patient: Patient) {\r\n return this.patientsCache.get(patient._id);\r\n }\r\n\r\n hasPetDependent(pet: PetPatient) {\r\n return this.petsCache.get(pet._id);\r\n }\r\n\r\n addPatient(patient: Patient) {\r\n this.healthProfessionalService.addPatient(this.prescriber._id, patient._id).subscribe(_ => {\r\n this.hasPatient(patient._id);\r\n this.update.emit();\r\n });\r\n }\r\n\r\n removePatient(patient: Patient) {\r\n this.healthProfessionalService.removePatient(this.prescriber._id, patient._id).subscribe(_ => {\r\n this.hasPatient(patient._id);\r\n this.update.emit();\r\n });\r\n }\r\n\r\n showEditPet(pet: PetPatient, isResponsible = false) {\r\n const initialState = { pet, isVeterinarian: this.isVeterinarian };\r\n\r\n const modal = this.bsModalService.show(ModalEditPetComponent, {\r\n initialState,\r\n backdrop: 'static',\r\n keyboard: false\r\n });\r\n modal.content.submit.subscribe(async (p: PetPatient) => {\r\n this.loading = true;\r\n const saved = await this.submitPetForm(p);\r\n this.patient = Object.assign(new Patient(), saved);\r\n this.loading = false;\r\n });\r\n }\r\n\r\n @nativeAsync\r\n private async submitPetForm(patient: PetPatient) {\r\n try {\r\n const saved = await this.petPatientService.update(patient._id, patient).toPromise();\r\n this.update.emit(saved);\r\n this.notification.notify('success', 'Sucesso', 'Paciente salvo com sucesso');\r\n return saved;\r\n } catch (err) {\r\n console.error(err);\r\n this.notification.notify('error', 'Erro', 'Erro ao salvar paciente');\r\n return null;\r\n }\r\n }\r\n\r\n showEditPatient(isResponsible = false) {\r\n let patient = this.patient || this.pet;\r\n if (isResponsible) {\r\n if (this.patient) {\r\n patient = this.patient.responsible;\r\n } else {\r\n patient = this.pet.responsible;\r\n }\r\n }\r\n\r\n const initialState = { patient, isVeterinarian: this.isVeterinarian };\r\n\r\n const classModal = this.isDependent && !isResponsible ? '' : 'modal-lg';\r\n\r\n const modal = this.bsModalService.show(ModalEditPatientComponent, {\r\n initialState,\r\n class: classModal,\r\n backdrop: 'static',\r\n keyboard: false\r\n });\r\n modal.content.submit.subscribe(async (p: Patient) => {\r\n this.loading = true;\r\n const saved = await this.submitForm(p);\r\n if (isResponsible) {\r\n if (this.patient) {\r\n this.patient.responsible = saved;\r\n } else {\r\n this.pet.responsible = saved;\r\n }\r\n } else {\r\n this.patient = saved;\r\n }\r\n this.loading = false;\r\n });\r\n }\r\n\r\n get isDependent() {\r\n return Boolean((this.patient && this.patient.responsible) || (this.pet && this.pet.responsible));\r\n }\r\n\r\n @nativeAsync\r\n async addPetPatient(pet: PetPatient) {\r\n try {\r\n await this.healthProfessionalService.addPetPatient(pet._id).toPromise();\r\n this.hasPet(pet._id);\r\n this.update.emit();\r\n } catch (err) {\r\n console.error(err);\r\n }\r\n }\r\n\r\n @nativeAsync\r\n private async submitForm(patient: Patient) {\r\n try {\r\n const saved = await this.patientsService.update(patient._id, patient).toPromise();\r\n this.update.emit(saved);\r\n this.notification.notify('success', 'Sucesso', 'Paciente salvo com sucesso');\r\n return saved;\r\n } catch (err) {\r\n console.error(err);\r\n this.notification.notify('error', 'Erro', 'Erro ao salvar paciente');\r\n return null;\r\n }\r\n }\r\n}\r\n","export default \"<ng-template #tplTitle>\\r\\n <header class=\\\"modal-header\\\" *ngIf=\\\"patient || pet\\\" theme>\\r\\n <img *ngIf=\\\"patient?.img\\\" class=\\\"mr-4 img\\\" [src]=\\\"'assets/img/' + patient.img\\\" />\\r\\n <img\\r\\n *ngIf=\\\"(!patient?.img && patient?.responsible) || pet?.responsible\\\"\\r\\n src=\\\"assets/icons/hand-holding-medical.svg\\\"\\r\\n class=\\\"mr-4 img\\\"\\r\\n />\\r\\n <div class=\\\"texto-header\\\">\\r\\n <h5 class=\\\"mt-0 title\\\" theme>{{ patient?.name || pet?.name }}</h5>\\r\\n <p class=\\\"document\\\" *ngIf=\\\"patient?.cpf\\\" theme>CPF: {{ patient.cpf | formattedCpf }}</p>\\r\\n <p class=\\\"document red\\\" *ngIf=\\\"!patient?.cpf\\\">\\r\\n <span *ngIf=\\\"patient?.responsible\\\">MENOR SEM CPF</span>\\r\\n </p>\\r\\n <p *ngIf=\\\"pet\\\">\\r\\n <span>Responsável: {{ pet.responsible.name }}</span>\\r\\n </p>\\r\\n </div>\\r\\n </header>\\r\\n</ng-template>\\r\\n<ng-template #tplContent>\\r\\n <div class=\\\"container\\\" *ngIf=\\\"patient || pet\\\">\\r\\n <h4 class=\\\"title\\\">\\r\\n DADOS BÃSICOS\\r\\n <button\\r\\n (click)=\\\"isVeterinarian ? showEditPet(pet) : showEditPatient()\\\"\\r\\n title=\\\"Editar\\\"\\r\\n class=\\\"btn btn-icon\\\"\\r\\n >\\r\\n <span class=\\\"btn-inner--icon\\\"><i class=\\\"fa fa-pencil-solid\\\"></i></span>\\r\\n </button>\\r\\n <app-popover-button class=\\\"m-0\\\" [content]=\\\"popoverContent\\\"> </app-popover-button>\\r\\n </h4>\\r\\n <h4 *ngIf=\\\"hasAccount\\\" class=\\\"has-account\\\">\\r\\n Paciente com conta ativada\\r\\n </h4>\\r\\n <ng-container *ngIf=\\\"isVeterinarian\\\">\\r\\n <ul class=\\\"list-unstyled\\\">\\r\\n <li class=\\\"list-item-icon\\\" *ngIf=\\\"pet.species\\\">Espécie: {{ pet.species | titlecase }}</li>\\r\\n <li class=\\\"list-item-icon\\\" *ngIf=\\\"pet.race\\\">Raça: {{ pet.race | titlecase }}</li>\\r\\n <li class=\\\"list-item-icon\\\" *ngIf=\\\"pet.sex\\\">Sexo: {{ pet.sex == 'F' ? 'Fêmea' : 'Macho' }}</li>\\r\\n </ul>\\r\\n </ng-container>\\r\\n\\r\\n <ng-container *ngIf=\\\"!isVeterinarian\\\">\\r\\n <ul class=\\\"list-unstyled\\\">\\r\\n <li class=\\\"list-item-icon\\\" *ngIf=\\\"patient.cellphone\\\">\\r\\n <i class=\\\"fa fa-phone-alt-solid\\\"></i> {{ patient.cellphone | formattedCel }}\\r\\n </li>\\r\\n <li class=\\\"list-item-icon\\\" title=\\\"E-mail de login\\\" *ngIf=\\\"patient.user?.email\\\">\\r\\n <i class=\\\"fa fa-envelop-solid\\\"></i> {{ patient.user.email }}\\r\\n </li>\\r\\n <li\\r\\n class=\\\"list-item-icon\\\"\\r\\n title=\\\"E-mail de contato\\\"\\r\\n *ngIf=\\\"patient.user?.emailContact && patient.user?.emailContact !== patient.user?.email\\\"\\r\\n >\\r\\n <i class=\\\"fa fa-envelop-solid\\\"></i> {{ patient.user.emailContact }}\\r\\n </li>\\r\\n <li class=\\\"list-item-icon\\\" *ngIf=\\\"patient.dateOfBirth\\\">\\r\\n <i class=\\\"fa fa-birthday-cake-solid\\\"></i> {{ patient.dateOfBirth | date: 'dd/MM/yyyy':'GMT' }}\\r\\n </li>\\r\\n <li class=\\\"list-item-icon\\\" *ngIf=\\\"hasAddress()\\\">\\r\\n <i class=\\\"fa fa-map-marker-alt-solid\\\"></i>{{ getAddress(patient.address) }}\\r\\n </li>\\r\\n <li class=\\\"list-item-icon\\\" *ngIf=\\\"patient.address?.cep\\\">\\r\\n <i class=\\\"fa fa-map-marker-alt-solid\\\"></i>CEP: {{ patient.address.cep | mask: '00.000-000' }}\\r\\n </li>\\r\\n </ul>\\r\\n </ng-container>\\r\\n <div *ngIf=\\\"patient?.responsible || pet?.responsible\\\">\\r\\n <h4 class=\\\"title\\\">\\r\\n DADOS DO RESPONSÃVEL\\r\\n <button (click)=\\\"showEditPatient(true)\\\" title=\\\"Editar\\\" class=\\\"btn btn-icon\\\">\\r\\n <span class=\\\"btn-inner--icon\\\"><i class=\\\"fa fa-pencil-solid\\\"></i></span>\\r\\n </button>\\r\\n <app-popover-button class=\\\"m-0\\\" [content]=\\\"popoverContent\\\"> </app-popover-button>\\r\\n </h4>\\r\\n <h4 *ngIf=\\\"hasAccount\\\" class=\\\"has-account\\\">\\r\\n Paciente com conta ativada\\r\\n </h4>\\r\\n <ul class=\\\"list-unstyled\\\">\\r\\n <li class=\\\"list-item-icon\\\">\\r\\n <i class=\\\"fa fa-user-solid\\\" *ngIf=\\\"patient?.responsible.name || pet\\\"></i>\\r\\n {{ patient?.responsible.name || pet?.responsible.name }}\\r\\n </li>\\r\\n <li class=\\\"list-item-icon\\\">\\r\\n <i class=\\\"fa fa-address-card\\\" *ngIf=\\\"patient?.responsible.cpf || pet?.responsible.cpf\\\"></i>\\r\\n {{ patient?.responsible.cpf || pet?.responsible.cpf | formattedCpf }}\\r\\n </li>\\r\\n <li class=\\\"list-item-icon\\\">\\r\\n <i\\r\\n class=\\\"fa fa-phone-alt-solid\\\"\\r\\n *ngIf=\\\"patient?.responsible.cellphone || pet?.responsible.cellphone\\\"\\r\\n ></i>\\r\\n {{ patient?.responsible.cellphone || pet?.responsible.cellphone | formattedCel }}\\r\\n </li>\\r\\n <li class=\\\"list-item-icon\\\">\\r\\n <i\\r\\n class=\\\"fa fa-envelop-solid\\\"\\r\\n *ngIf=\\\"patient?.responsible.user?.email || pet?.responsible.user?.email\\\"\\r\\n ></i>\\r\\n {{ patient?.responsible.user?.email || pet?.responsible.user?.email }}\\r\\n </li>\\r\\n <li class=\\\"list-item-icon\\\">\\r\\n <i\\r\\n class=\\\"fa fa-birthday-cake-solid\\\"\\r\\n *ngIf=\\\"patient?.responsible.dateOfBirth || pet?.responsible.dateOfBirth\\\"\\r\\n ></i>\\r\\n {{\\r\\n patient?.responsible.dateOfBirth || pet?.responsible.dateOfBirth | date: 'dd/MM/yyyy':'GMT'\\r\\n }}\\r\\n </li>\\r\\n <li class=\\\"list-item-icon\\\" *ngIf=\\\"getAddress()\\\">\\r\\n <i class=\\\"fa fa-map-marker-alt-solid\\\"></i> {{ getAddress() }}\\r\\n </li>\\r\\n </ul>\\r\\n </div>\\r\\n <div *ngIf=\\\"patient?.dependents?.length || responsiblePets?.length\\\">\\r\\n <h4 class=\\\"title\\\">DEPENDENTES</h4>\\r\\n <div style=\\\"max-height: 250px; overflow: auto;\\\">\\r\\n <ul *ngIf=\\\"!isVeterinarian\\\" class=\\\"list-unstyled\\\">\\r\\n <li *ngFor=\\\"let dependent of patient.dependents\\\" class=\\\"list-item-icon\\\">\\r\\n {{ dependent.name }}\\r\\n <button\\r\\n *ngIf=\\\"!hasDependent(dependent)\\\"\\r\\n (click)=\\\"addPatient(dependent)\\\"\\r\\n title=\\\"Vincular paciente\\\"\\r\\n class=\\\"btn-icon mr-0 p-0\\\"\\r\\n >\\r\\n <i class=\\\"fa fa-plus\\\"></i>\\r\\n </button>\\r\\n <button\\r\\n *ngIf=\\\"hasDependent(dependent)\\\"\\r\\n (click)=\\\"removePatient(dependent)\\\"\\r\\n title=\\\"Desvincular paciente\\\"\\r\\n class=\\\"btn-icon mr-0 p-0\\\"\\r\\n >\\r\\n <i class=\\\"fa fa-trash-solid\\\"></i>\\r\\n </button>\\r\\n </li>\\r\\n </ul>\\r\\n\\r\\n <ul *ngIf=\\\"isVeterinarian\\\" class=\\\"list-unstyled\\\">\\r\\n <li *ngFor=\\\"let pet of responsiblePets\\\" class=\\\"list-item-icon\\\">\\r\\n {{ pet.name }}\\r\\n <button\\r\\n *ngIf=\\\"!hasPetDependent(pet)\\\"\\r\\n (click)=\\\"addPetPatient(pet)\\\"\\r\\n title=\\\"Vincular paciente\\\"\\r\\n class=\\\"btn-icon mr-0 p-0\\\"\\r\\n >\\r\\n <i class=\\\"fa fa-plus\\\"></i>\\r\\n </button>\\r\\n <button *ngIf=\\\"hasPetDependent(pet)\\\" class=\\\"btn-icon mr-0 p-0\\\" title=\\\"Paciente vinculado\\\">\\r\\n <i class=\\\"fa-solid fa-check\\\"></i>\\r\\n </button>\\r\\n </li>\\r\\n </ul>\\r\\n </div>\\r\\n </div>\\r\\n </div>\\r\\n <app-patient-record\\r\\n *ngIf=\\\"hasPatientRecordFeature\\\"\\r\\n [patient]=\\\"patient\\\"\\r\\n [customStyle]=\\\"patientRecordStyle\\\"\\r\\n ></app-patient-record>\\r\\n</ng-template>\\r\\n<ngx-loading [show]=\\\"loading\\\" [config]=\\\"{ backdropBorderRadius: '3px' }\\\"></ngx-loading>\\r\\n\";","export default \".modal-header {\\n background-color: var(--bg-modal-header);\\n color: var(--color-white);\\n border-bottom: none;\\n display: flex;\\n align-items: center;\\n}\\n.modal-header .img {\\n width: 65px;\\n height: 65px;\\n}\\n.texto-header {\\n display: flex;\\n flex-direction: column;\\n justify-content: flex-end;\\n flex: 1;\\n}\\n.texto-header .title {\\n color: var(--color-white);\\n font-size: 40px;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n overflow: hidden;\\n width: calc(100% - 70px);\\n line-height: normal;\\n margin-bottom: -12px;\\n text-transform: none;\\n}\\n@media (max-width: 575px) {\\n .texto-header .title {\\n font-size: 20px;\\n width: calc(100% - 70px);\\n }\\n}\\n.texto-header p {\\n font-size: 22px;\\n}\\n::ng-deep .vertical-center-modal {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n}\\n::ng-deep .vertical-center-modal .ant-modal {\\n top: 0;\\n font-family: \\\"prolight\\\";\\n font-size: 18px;\\n}\\n::ng-deep .vertical-center-modal .ant-modal .ant-modal-header {\\n background-color: transparent;\\n padding: 0;\\n width: 100%;\\n}\\n::ng-deep .vertical-center-modal .ant-modal .ant-modal-content,\\n::ng-deep .vertical-center-modal .ant-modal .ant-modal-footer,\\n::ng-deep .vertical-center-modal .ant-modal .ant-modal-header {\\n border-radius: none;\\n}\\n::ng-deep .vertical-center-modal .ant-modal .media {\\n align-items: center;\\n}\\n::ng-deep .vertical-center-modal .ant-modal .media img {\\n width: 60px;\\n}\\n::ng-deep .vertical-center-modal .ant-modal .media .media-header a {\\n color: #8e8e8e;\\n font-size: 18px;\\n}\\n::ng-deep .vertical-center-modal .ant-modal .media .media-header a:not(:last-child) {\\n margin-right: 8px;\\n}\\n::ng-deep .vertical-center-modal .ant-modal .media .document {\\n font-size: 20px;\\n color: var(--color-white);\\n font-family: \\\"proregular\\\";\\n}\\n::ng-deep .vertical-center-modal .ant-modal .media p {\\n margin-bottom: 0;\\n}\\n::ng-deep .vertical-center-modal .ant-modal .media ul li {\\n font-family: \\\"prolight\\\";\\n font-size: 15px;\\n margin-right: 0;\\n}\\n::ng-deep .vertical-center-modal .ant-modal .media ul li .ant-divider {\\n background: #838383;\\n}\\n::ng-deep .vertical-center-modal .ant-modal .media ul li .ant-divider-vertical {\\n margin: 0 20px;\\n height: 20px;\\n}\\n::ng-deep .vertical-center-modal .ant-modal .media .red {\\n color: red;\\n}\\n::ng-deep .vertical-center-modal .ant-modal .title {\\n margin: 0;\\n font-size: 12px;\\n}\\n::ng-deep .vertical-center-modal .ant-modal .empty-list,\\n::ng-deep .vertical-center-modal .ant-modal .list-item-icon {\\n font-size: 18px;\\n}\\n::ng-deep .vertical-center-modal .ant-modal .list-item-icon .fa {\\n margin-right: 15px;\\n}\\n.btn-icon {\\n padding: 5px;\\n margin: 0 0 5px 5px;\\n border: 0;\\n box-shadow: none;\\n background-color: transparent;\\n}\\n.has-account {\\n font-size: 14px;\\n color: orangered;\\n}\\n::ng-deep .ant-popover-content {\\n max-width: 50%;\\n}\";","import { HttpErrorResponse } from '@angular/common/http';\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { Patient } from '@app/shared/models';\nimport { AppToastService } from '@app/shared/services/app-toast.service';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { PatientsService } from '../../services/patients.service';\nimport { PetPatientService } from '../../services/pet-patient.service';\nimport { PetPatient } from '@app/shared/models/pet-patient';\nimport { BigboostService } from '@app/shared/services/bigboost.service';\nimport { DataBigboostConsult } from '@app/shared/models/paciente';\n\n@Component({\n selector: 'app-modal-switch-responsible',\n templateUrl: './modal-switch-responsible.component.html',\n styleUrls: ['./modal-switch-responsible.component.scss']\n})\nexport class ModalSwitchResponsibleComponent implements OnInit {\n @Input() patient: Patient | PetPatient;\n @Input() isVeterinarian = false;\n\n @Output() sucess = new EventEmitter<Patient>();\n @Output() newPatientRegister = new EventEmitter<DataBigboostConsult>();\n\n cpf = new FormControl('');\n loadindSearch = false;\n loadindConfirm = false;\n loadindConfirmRegister = false;\n\n newResponsible: Patient;\n newResponsibleNotFound = false;\n\n constructor(\n public modalRef: BsModalRef,\n private notification: AppToastService,\n private patientService: PatientsService,\n private petPatientService: PetPatientService,\n private bigboostService: BigboostService\n ) {}\n\n ngOnInit(): void {}\n\n searchResponsiblePatient() {\n this.resetLoadings();\n this.loadindSearch = true;\n this.newResponsible = null;\n this.newResponsibleNotFound = null;\n\n const cpf = this.cpf.value;\n\n this.patientService\n .getPatientByCpf(cpf)\n .subscribe(\n newReponsible => {\n if (newReponsible.responsible) {\n this.notification.notify('warning', 'Outro menor não pode ser resposável por outro.');\n return;\n }\n this.newResponsible = newReponsible;\n this.cpf.reset();\n },\n (httpError: HttpErrorResponse) => {\n if (httpError.status === 404) {\n this.newResponsibleNotFound = true;\n } else {\n this.notification.notify(\n 'error',\n 'Ocorreu um erro ao buscar os dados do responsável. Favor entrar em contato com administradores!'\n );\n }\n }\n )\n .add(() => {\n this.loadindSearch = false;\n });\n }\n\n confirmSwitchReponsible() {\n this.resetLoadings();\n this.loadindConfirm = true;\n if (this.isVeterinarian) {\n this.switchReponsiblePet();\n } else {\n this.switchReponsiblePatient();\n }\n }\n\n confirmRegisterNewPatient() {\n this.resetLoadings();\n const cpf = this.cpf.value;\n this.loadindConfirmRegister = true;\n this.bigboostService\n .consultCpf(cpf, '')\n .subscribe(\n (response: DataBigboostConsult) => {\n this.newPatientRegister.emit(response);\n this.modalRef.hide();\n },\n (error: HttpErrorResponse) => {\n if (error.status === 401) {\n this.notification.notify(\n 'warning',\n 'Aviso',\n 'A data de nascimento não pertence a este CPF. Favor digitar novamente.'\n );\n return;\n }\n if (error.status === 404) {\n this.notification.notify(\n 'error',\n 'Error ao consultar CPF',\n 'CPF não localizado na Receita Federal. Verifique as informações digitadas e tente novamente. Em caso de dúvidas, entre em contato com nosso atendimento',\n 8000\n );\n return;\n }\n }\n )\n .add(this.resetLoadings);\n }\n\n cancel() {\n this.newResponsible = null;\n this.modalRef.hide();\n }\n\n private switchReponsiblePatient() {\n this.patientService\n .switchReponsible(this.patient._id, this.newResponsible.cpf)\n .subscribe(\n () => {\n this.sucess.emit(this.newResponsible);\n this.modalRef.hide();\n },\n () => {\n this.notification.notify(\n 'error',\n 'Ocorreu um erro ao alterar o responsável do paciente. Favor entrar em contato com administradores!'\n );\n }\n )\n .add(this.resetLoadings);\n }\n\n private switchReponsiblePet() {\n this.petPatientService\n .switchReponsible(this.patient._id, this.newResponsible.cpf)\n .subscribe(\n () => {\n this.sucess.emit(this.newResponsible);\n this.modalRef.hide();\n },\n () => {\n this.notification.notify(\n 'error',\n 'Ocorreu um erro ao alterar o responsável do PET. Favor entrar em contato com administradores!'\n );\n }\n )\n .add(this.resetLoadings);\n }\n\n private resetLoadings() {\n this.loadindSearch = false;\n this.loadindConfirm = false;\n this.loadindConfirmRegister = false;\n }\n}\n","export default \"<div class=\\\"modal-header\\\" theme>\\n <h4 class=\\\"modal-title pull-left text-white\\\">\\n Alterar Responsável\\n </h4>\\n <button type=\\\"button\\\" class=\\\"close pull-right\\\" aria-label=\\\"Close\\\" (click)=\\\"modalRef.hide()\\\">\\n <span aria-hidden=\\\"true\\\">×</span>\\n </button>\\n</div>\\n\\n<p>\\n Digite abaixo o CPF do Responsável.\\n</p>\\n\\n<div class=\\\"search-body\\\" theme>\\n <div class=\\\"d-flex flex-column\\\">\\n <nz-form-item>\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n id=\\\"cpf\\\"\\n [formControl]=\\\"cpf\\\"\\n placeholder=\\\"000.000.000-00\\\"\\n mask=\\\"000.000.000-00\\\"\\n autocomplete=\\\"disabled\\\"\\n />\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n <button\\n class=\\\"ok-btn btn-salvar btn-color-primary\\\"\\n nz-button\\n type=\\\"submit\\\"\\n theme\\n *ngIf=\\\"!loadindSearch\\\"\\n (click)=\\\"searchResponsiblePatient()\\\"\\n >\\n Pesquisar <i class=\\\"fa fa-search\\\"></i>\\n </button>\\n</div>\\n\\n<div *ngIf=\\\"loadindSearch || newResponsible\\\">\\n <nz-divider></nz-divider>\\n <nz-spin\\n style=\\\"display: flex; justify-content: center;\\\"\\n nzSimple\\n theme\\n *ngIf=\\\"loadindSearch\\\"\\n ></nz-spin>\\n\\n <ng-container *ngIf=\\\"newResponsible\\\">\\n <h5>Informações do Novo Responsável</h5>\\n <div style=\\\"padding: 8px 20px; display: flex; flex-direction: column; gap: 8px;\\\">\\n <span style=\\\"font-size: 18px;\\\">\\n <i class=\\\"fa fa-user-solid mr-2\\\"></i>\\n <strong>Nome: </strong>{{ newResponsible?.name }}\\n </span>\\n <span style=\\\"font-size: 18px;\\\">\\n <i class=\\\"fa fa-address-card mr-2\\\"></i>\\n <strong>CPF: </strong>{{ newResponsible?.cpf | formattedCpf }}\\n </span>\\n <span style=\\\"font-size: 18px;\\\">\\n <i class=\\\"fa fa-envelop-solid mr-2\\\"></i>\\n <strong>Data de Nascimento: </strong>{{ newResponsible?.dateOfBirth | date: 'dd/MM/yyyy' }}\\n </span>\\n <span style=\\\"font-size: 18px;\\\">\\n <i class=\\\"fa fa-phone-alt-solid mr-2\\\"></i>\\n <strong>Telefone: </strong\\n >{{ newResponsible?.cellphone || newResponsible?.telephone | formattedCel }}\\n </span>\\n </div>\\n <div style=\\\"padding: 16px; display: flex; align-items: center; justify-content: center; gap: 8px;\\\">\\n <button nz-button type=\\\"button\\\" theme (click)=\\\"cancel()\\\" *ngIf=\\\"!loadindConfirm\\\">\\n Cancelar\\n </button>\\n <button\\n class=\\\"ok-btn btn-color-primary\\\"\\n nz-button\\n type=\\\"submit\\\"\\n theme\\n *ngIf=\\\"!loadindConfirm\\\"\\n (click)=\\\"confirmSwitchReponsible()\\\"\\n >\\n Confirmar <i class=\\\"fa fa-check\\\" aria-hidden=\\\"true\\\"></i>\\n </button>\\n <nz-spin\\n style=\\\"display: flex; justify-content: center;\\\"\\n nzSimple\\n theme\\n *ngIf=\\\"loadindConfirm\\\"\\n ></nz-spin>\\n </div>\\n </ng-container>\\n</div>\\n\\n<ng-container *ngIf=\\\"newResponsibleNotFound\\\">\\n <nz-divider></nz-divider>\\n <div style=\\\"padding: 8px 20px;\\\">\\n <span style=\\\"text-align: justify;\\\">\\n Responsável não encontrado para o cpf informado. Deseja realizar o cadastro?\\n </span>\\n <div style=\\\"padding: 16px; display: flex; align-items: center; justify-content: center; gap: 8px;\\\">\\n <button nz-button type=\\\"button\\\" theme (click)=\\\"cancel()\\\" *ngIf=\\\"!loadindConfirmRegister\\\">\\n Cancelar\\n </button>\\n <button\\n class=\\\"ok-btn btn-color-primary\\\"\\n nz-button\\n type=\\\"submit\\\"\\n theme\\n *ngIf=\\\"!loadindConfirmRegister\\\"\\n (click)=\\\"confirmRegisterNewPatient()\\\"\\n >\\n Confirmar <i class=\\\"fa fa-check\\\" aria-hidden=\\\"true\\\"></i>\\n </button>\\n <nz-spin\\n style=\\\"display: flex; justify-content: center;\\\"\\n nzSimple\\n theme\\n *ngIf=\\\"loadindConfirmRegister\\\"\\n ></nz-spin>\\n </div>\\n </div>\\n</ng-container>\\n\";","export default \".modal-header {\\n width: 381px;\\n font-family: \\\"probold\\\";\\n}\\n\\np {\\n color: #363636;\\n font-size: 20px;\\n font-family: \\\"prolight\\\";\\n text-align: center;\\n margin-bottom: 8px;\\n}\\n\\nh5 {\\n color: #363636;\\n font-family: \\\"prolight\\\";\\n text-align: center;\\n}\\n\\n.search-body {\\n width: 100% !important;\\n padding: 0px;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n gap: 16px;\\n}\\n\\n.search-body input {\\n height: 40px;\\n}\\n\\n.search-body .submit {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n position: relative;\\n z-index: 1;\\n right: -118px;\\n top: -28px;\\n font-size: 15px;\\n margin: 0px;\\n width: 30px;\\n}\\n\\n.search-body .submit i {\\n cursor: pointer;\\n}\\n\\n.btn-salvar,\\n.btn-salvar:hover {\\n margin-top: -12px;\\n}\\n\\n.btn-color-primary {\\n color: var(--color-white);\\n background-color: var(--bg-color-primary);\\n border-color: var(--bg-color-primary);\\n}\\n\\n.ant-divider-horizontal {\\n margin: 15px 0 !important;\\n}\";","import {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ElementRef,\n HostListener,\n OnInit,\n ViewChild\n} from '@angular/core';\nimport { FormBuilder, FormGroup } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport { AuthService } from '@app/core/services/auth.service';\nimport { CoreService } from '@app/core/services/core.service';\nimport { HealthProfessionalService } from '@app/modules/health-professional/services/health-professional.service';\nimport { ModalAddPatientComponent } from '@app/modules/patients/pages/modal-add-patient/modal-add-patient.component';\nimport { ModalSearchComponent } from '@app/modules/patients/pages/modal-search/modal-search.component';\nimport { PatientDetailsComponent } from '@app/modules/patients/pages/patient-details/patient-details.component';\nimport { nativeAsync } from '@app/shared/decorators/nativeAsync';\nimport { HealthProfessional, Patient } from '@app/shared/models';\nimport { User } from '@app/shared/models/decodedLoginToken';\nimport moment from 'moment';\nimport { NzModalService } from 'ng-zorro-antd/modal';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\nimport { ModalSelectPetComponent } from '../modal-select-pet/modal-select-pet.component';\nimport { ModalSwitchResponsibleComponent } from '../modal-switch-responsible/modal-switch-responsible.component';\nimport { PetPatient } from '@app/shared/models/pet-patient';\nimport { DataBigboostConsult } from '@app/shared/models/paciente';\nimport { PatientsService } from '../../services/patients.service';\nimport { PetPatientService } from '../../services/pet-patient.service';\nimport { AppToastService } from '@app/shared/services/app-toast.service';\n\nconst NUMBER_MONTH_OCTOBER = 10;\n\n@Component({\n selector: 'app-index',\n templateUrl: './index.component.html',\n styleUrls: ['./index.component.scss']\n})\nexport class IndexComponent implements OnInit, AfterViewInit {\n userId: string;\n allChecked = false;\n disabledButton = true;\n checkedNumber = 0;\n displayData: Array<{ name: string; age: number; address: string; checked: boolean }> = [];\n operating = false;\n dataSet: Patient[] = [];\n patient: Patient[];\n prescriber: HealthProfessional;\n loading: boolean = false;\n loadingSpinner: boolean = false;\n searchForm: FormGroup;\n indeterminate = false;\n totalRecord = 0;\n pageSize = 10;\n skip = 0;\n query: string = null;\n\n @ViewChild(PatientDetailsComponent, { static: true })\n modalPatient: PatientDetailsComponent;\n\n @ViewChild('inputSearch', { static: true }) inputSearch: ElementRef<HTMLInputElement>;\n\n scrollConfig = { y: '510px' };\n pageIndex = 1;\n\n filtersFast = {\n womenOver40: false,\n minors: false,\n adults: false\n };\n\n isMobile = false;\n\n @HostListener('window:resize', ['$event'])\n onResize() {\n this.isMobile = this.coreService.isViewPortMobile();\n }\n\n constructor(\n private router: Router,\n private healthProfessionalService: HealthProfessionalService,\n private authService: AuthService,\n private fb: FormBuilder,\n private modalService: BsModalService,\n private nzModalService: NzModalService,\n public coreService: CoreService,\n private cdr: ChangeDetectorRef,\n private patientService: PatientsService,\n private petPatientService: PetPatientService,\n private notification: AppToastService\n ) {\n this.onResize();\n }\n\n @nativeAsync\n async ngOnInit() {\n this.initForm();\n this.userId = this.user._id;\n await this.getHealthProfessionalData(this.user._id);\n }\n\n ngAfterViewInit(): void {\n setTimeout(() => {\n this.inputSearch.nativeElement.focus();\n }, 0);\n this.cdr.detectChanges();\n }\n\n get pinkOctoberCampaignEnabled() {\n return moment().month() + 1 === NUMBER_MONTH_OCTOBER;\n }\n\n get user(): User {\n return this.authService.user();\n }\n\n get isVeterinarian(): boolean {\n return this.prescriber && this.prescriber.professionalType === 'veterinarian';\n }\n\n @nativeAsync\n async getHealthProfessionalData(userId: string) {\n this.loading = true;\n this.prescriber = await this.healthProfessionalService.getHealthProfessional(userId).toPromise();\n\n this.getPatients(this.query);\n }\n\n requestPatients() {\n this.loading = true;\n this.healthProfessionalService\n .getPatientsByUserIdWithPagination(\n this.query,\n this.user._id,\n this.pageSize,\n this.skip,\n this.filtersFast\n )\n .subscribe(\n data => {\n this.dataSet = data.patients;\n this.totalRecord = data.totalRecord;\n this.loading = false;\n },\n err => {\n console.error(err);\n this.loading = false;\n }\n );\n }\n\n requestPetPatients() {\n this.loading = true;\n this.healthProfessionalService.getPetsWithPagination(this.query, this.pageSize, this.skip).subscribe(\n data => {\n this.dataSet = data.pets;\n this.totalRecord = data.totalRecord;\n this.loading = false;\n setTimeout(() => {\n this.inputSearch.nativeElement.focus();\n }, 0);\n },\n err => {\n console.error(err);\n this.loading = false;\n }\n );\n }\n\n @nativeAsync\n async showModalRemovePatient(patientId: string) {\n this.nzModalService.confirm({\n nzTitle: 'Alerta',\n nzContent: 'Tem certeza que deseja remover este paciente da sua lista',\n nzOnOk: async () => {\n if (this.isVeterinarian) {\n await this.healthProfessionalService\n .removePetPatient(this.prescriber._id, patientId)\n .toPromise();\n } else {\n await this.healthProfessionalService.removePatient(this.prescriber._id, patientId).toPromise();\n }\n this.getPatients(this.query);\n }\n });\n }\n\n getPatients(query: string) {\n this.query = query;\n this.skip = 1;\n this.pageIndex = 1;\n\n this.isVeterinarian ? this.requestPetPatients() : this.requestPatients();\n }\n\n getAllPatientsNames(allNames) {\n let result = '';\n for (let i = 0; i < allNames.length; i++) {\n result = this.dataSet[i].name;\n }\n return result;\n }\n\n private initForm() {\n this.searchForm = this.fb.group({\n query: this.fb.control('')\n });\n\n this.searchForm\n .get('query')\n .valueChanges.pipe(debounceTime(300), distinctUntilChanged())\n .subscribe(value => this.getPatients(value));\n }\n\n clearQuery() {\n this.searchForm.get('query').setValue('');\n }\n\n currentPageDataChange(\n $event: Array<{ name: string; age: number; address: string; checked: boolean }>\n ): void {\n this.displayData = $event;\n }\n\n refreshStatus(): void {\n const allChecked = this.displayData.every(value => value.checked);\n const allUnChecked = this.displayData.every(value => !value.checked);\n this.allChecked = allChecked;\n this.indeterminate = !allChecked && !allUnChecked;\n }\n\n checkAll(value: boolean): void {\n this.displayData.forEach(data => (data.checked = value));\n this.refreshStatus();\n }\n\n togglePatientModalDetails(event: Event, patient: any): void {\n event.preventDefault();\n this.modalPatient.createTplModal(patient, this.prescriber);\n this.modalPatient.update.subscribe(saved =>\n this.isVeterinarian ? this.requestPetPatients() : this.requestPatients()\n );\n }\n\n redirectToPatientPrescriptions(patientId: string) {\n this.router.navigate(['historic'], { queryParams: { patientId } });\n }\n\n redirectToNewPrescription(patient) {\n localStorage.setItem('patient', JSON.stringify(patient));\n const url =\n this.isVeterinarian || this.authService.hasAccessNewModulePrescription\n ? '/document/new'\n : '/prescription/new';\n this.router.navigate([url]);\n }\n\n showModalSearch(cpf?: string) {\n const initialState = {\n user: this.user,\n prescriber: this.prescriber,\n addPatient: true,\n cpf\n };\n const modal = this.modalService.show(ModalSearchComponent, {\n initialState,\n backdrop: 'static',\n keyboard: false\n });\n modal.content.updateListPatientEvent.subscribe(patient => {\n this.query = null;\n this.skip = 1;\n this.requestPatients();\n });\n modal.content.openModalAddPatientEvent.subscribe(consult => this.showModalAddPatient(consult));\n modal.content.openModalSelectPetEvent.subscribe(consult => this.showModalSelectPet(consult));\n modal.content.loadingSpinnerEvent.subscribe((value: boolean) => (this.loadingSpinner = value));\n\n if (cpf) {\n setInterval(() => modal.hide(), 1);\n }\n }\n\n private showModalAddPatient(consult, sucess?: (patient: Patient) => void) {\n const initialState = {\n prescriber: this.prescriber,\n patient: consult.patient,\n isResponsible: consult.isResponsible,\n existingPatient: consult.existingPatient\n };\n const modal = this.modalService.show(ModalAddPatientComponent, {\n class: 'modal-lg',\n initialState,\n backdrop: 'static',\n keyboard: false\n });\n modal.content.updateListPatientEvent.subscribe((patientSaved: Patient) => {\n if (!sucess) {\n this.query = null;\n this.skip = 1;\n this.requestPatients();\n } else {\n sucess(patientSaved);\n }\n });\n }\n\n private showModalSelectPet(consult) {\n const initialState = {\n prescriber: this.prescriber,\n pets: consult.patient.pets,\n responsible: consult.patient\n };\n const modal = this.modalService.show(ModalSelectPetComponent, {\n initialState,\n backdrop: 'static',\n keyboard: false\n });\n\n modal.content.submit.subscribe(_ => {\n this.query = null;\n this.skip = 1;\n this.requestPetPatients();\n this.modalService.hide(1);\n });\n }\n\n pageIndexChanged(pageIndex: number): void {\n this.loading = true;\n this.skip = pageIndex;\n this.pageIndex = pageIndex;\n this.isVeterinarian ? this.requestPetPatients() : this.requestPatients();\n }\n\n toggleFiltersFast(keyFilter: string) {\n Object.entries(this.filtersFast).forEach(([key, value]) => {\n if (key === keyFilter) {\n this.filtersFast[keyFilter] = !value;\n } else {\n this.filtersFast[key] = false;\n }\n });\n this.requestPatients();\n }\n\n showModalSwitchResponsible(patient: Patient | PetPatient) {\n const initialState = {\n patient,\n isVeterinarian: this.isVeterinarian\n };\n const modal = this.modalService.show(ModalSwitchResponsibleComponent, {\n initialState,\n backdrop: 'static',\n keyboard: true,\n class: 'modal-sm'\n });\n\n const updateResponsilbePatient = (newReponsible: Patient) => {\n this.dataSet = this.dataSet.map(item => {\n if (item._id === patient._id) {\n return {\n ...item,\n responsible: newReponsible\n };\n }\n return item;\n });\n };\n\n modal.content.sucess.subscribe(updateResponsilbePatient);\n\n modal.content.newPatientRegister.subscribe((consult: DataBigboostConsult) => {\n const initialState = {\n patient: consult,\n isResponsible: false,\n existingPatient: false\n };\n this.showModalAddPatient(initialState, (newPatient: Patient) => {\n const execute = this.isVeterinarian\n ? this.petPatientService.switchReponsible(patient._id, newPatient.cpf)\n : this.patientService.switchReponsible(patient._id, newPatient.cpf);\n\n execute.subscribe(\n () => {\n updateResponsilbePatient(newPatient);\n this.dataSet.push(newPatient);\n },\n () => {\n this.notification.notify(\n 'error',\n 'Ocorreu um erro ao alterar o responsável do paciente. Favor entrar em contato com administradores!'\n );\n }\n );\n });\n });\n }\n}\n","export default \"::ng-deep .ant-btn:hover,\\n.ant-btn:focus {\\n color: var(--bg-color-primary);\\n border-color: var(--bg-color-primary);\\n}\\n\\n::ng-deep .ant-btn.active,\\n.ant-btn:focus.active {\\n text-decoration: none;\\n background: var(--bg-color-primary);\\n border-color: var(--bg-color-primary);\\n color: #fff;\\n}\\n\\n::ng-deep .cdk-overlay-pane {\\n margin-top: -35px;\\n margin-right: 29px;\\n}\\n\\n::ng-deep .ant-spin-dot-item {\\n background-color: var(--bg-color-primary);\\n}\\n\\nsection {\\n margin: 0 auto;\\n width: 100%;\\n max-width: 80%;\\n}\\n\\n@media (max-width: 768px) {\\n section {\\n margin: 0;\\n max-width: 100%;\\n }\\n}\\n\\nsection header {\\n display: flex;\\n justify-content: space-between;\\n align-items: center;\\n gap: 16px;\\n padding: 16px 0;\\n}\\n\\n@media (max-width: 768px) {\\n section header {\\n flex-direction: column-reverse;\\n gap: 16px;\\n padding: 8px 0;\\n }\\n}\\n\\nsection header .container-filter {\\n flex: 1 1 auto;\\n}\\n\\nsection header .container-filter ::ng-deep .ant-input {\\n border: none;\\n background-color: transparent;\\n box-shadow: none;\\n border-radius: 0;\\n border-bottom: 2px solid #f5f5f5;\\n}\\n\\nsection header .container-filter .ant-input::-moz-placeholder {\\n font-size: 18px;\\n}\\n\\nsection header .container-filter ::ng-deep .ant-input,\\nsection header .container-filter .ant-input::placeholder {\\n font-size: 18px;\\n}\\n\\nsection header .container-filter ::ng-deep .ant-input:focus {\\n border-bottom: 2px solid var(--bg-color-primary);\\n}\\n\\n@media (max-width: 768px) {\\n section header .container-filter {\\n width: calc(100vw - 16px);\\n }\\n}\\n\\nsection header .container-new-patient {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n gap: 16px;\\n}\\n\\n@media (max-width: 768px) {\\n section header .container-new-patient {\\n justify-content: space-between;\\n gap: 16px;\\n width: 100%;\\n padding: 0 8px;\\n }\\n}\\n\\nsection header .container-new-patient .container-qdt-patient {\\n display: flex;\\n align-items: center;\\n gap: 16px;\\n}\\n\\nsection header .container-new-patient .container-qdt-patient i {\\n font-size: 32px;\\n padding: 0;\\n display: flex;\\n}\\n\\nsection header .container-new-patient .container-qdt-patient span {\\n font-size: 18px;\\n}\\n\\nsection header .fast-filter {\\n margin-top: 8px;\\n display: flex;\\n align-items: center;\\n gap: 16px;\\n}\\n\\nsection .container-table {\\n margin: 8px;\\n min-height: 80px;\\n}\\n\\nsection .container-table .container-patient-name {\\n display: flex;\\n align-items: center;\\n gap: 8px;\\n}\\n\\nsection .container-table .container-patient-name i {\\n font-size: 20px;\\n}\\n\\nsection .container-table .container-patient-name .patient-name {\\n font-family: \\\"probold\\\", sans-serif;\\n font-size: 18px;\\n flex: 1;\\n}\\n\\nsection .container-table .container-patient-name .patient-name .responsible-name {\\n font-size: 12px;\\n}\\n\\nsection .container-table .actions {\\n display: flex;\\n align-items: center;\\n justify-content: space-between;\\n}\\n\\nsection .container-table .font-size-td {\\n font-size: 16px;\\n}\\n\\nsection .container-mobile {\\n padding: 0 8px;\\n height: 90vh;\\n max-height: calc(90vh - 240px);\\n overflow: auto;\\n}\\n\\nsection .container-mobile .content-cart {\\n display: flex;\\n gap: 8px;\\n justify-content: space-between;\\n align-items: flex-start;\\n}\\n\\nsection .container-mobile .content-cart .content-cart-info {\\n flex: 1;\\n display: flex;\\n flex-direction: column;\\n gap: 4px;\\n}\\n\\nsection .container-mobile .content-cart .content-cart-info .content-cart-info-name {\\n display: flex;\\n align-items: center;\\n gap: 8px;\\n}\\n\\nsection .container-mobile .content-cart .content-cart-info .content-cart-info-name .patient-name {\\n font-family: \\\"probold\\\", sans-serif;\\n font-size: 18px;\\n}\\n\\nsection .container-mobile .content-cart .content-cart-info .content-cart-info-responsible-name {\\n font-size: 14px;\\n}\\n\\nsection .container-mobile .content-cart .content-cart-info .content-cart-info-cpf-telefone {\\n display: flex;\\n align-items: center;\\n justify-content: space-between;\\n}\\n\\nsection .container-mobile .content-cart .content-cart-info span > strong {\\n font-weight: 600;\\n}\\n\\nsection .container-mobile .content-cart i {\\n font-size: 24px;\\n margin-top: -4px;\\n}\\n\\n.container-center {\\n height: 120px;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n}\\n\\nli {\\n display: flex;\\n align-items: center;\\n gap: 8px;\\n border-bottom: 1px solid #f5f5f5;\\n font-size: 14px;\\n /* Safari */\\n transition-duration: 0.4s;\\n text-decoration: none;\\n overflow: hidden;\\n cursor: pointer;\\n}\\n\\nli :nth-last-child {\\n border-bottom: none;\\n}\\n\\nli:after {\\n content: \\\"\\\";\\n background: #f5f5f5;\\n display: block;\\n position: absolute;\\n opacity: 0;\\n transition: all 0.8s;\\n}\\n\\nli:active:after {\\n padding: 0;\\n margin: 0;\\n opacity: 1;\\n transition: 0s;\\n}\";","export default \"<div class=\\\"float-button\\\">\\n <button class=\\\"round-btn medical-record-btn\\\" *ngIf=\\\"!visible\\\" (click)=\\\"setVisible()\\\">\\n <img src=\\\"assets/icons/file-medical-solid.svg\\\" alt=\\\"\\\" />\\n </button>\\n\\n <form [formGroup]=\\\"patientRecordForm\\\" *ngIf=\\\"visible\\\" class=\\\"patient-record\\\">\\n <div class=\\\"icons\\\">\\n <img\\n src=\\\"assets/icons/window-minimize-regular.svg\\\"\\n class=\\\"icon minimize\\\"\\n title=\\\"Miniminar\\\"\\n (click)=\\\"setVisible()\\\"\\n />\\n <img\\n *ngIf=\\\"patient\\\"\\n src=\\\"assets/icons/backspace-solid.svg\\\"\\n class=\\\"icon\\\"\\n title=\\\"Buscar outro paciente\\\"\\n (click)=\\\"resetPatient()\\\"\\n />\\n </div>\\n\\n <div [ngClass]=\\\"{ 'max-lenght max-width': patient, 'min-width min-width padding': !patient }\\\">\\n <span class=\\\"title\\\" *ngIf=\\\"!patient\\\">PRONTUÃRIO</span>\\n <nz-input-group [nzSuffix]=\\\"suffixIconSearch\\\" *ngIf=\\\"!patient\\\">\\n <nz-form-control>\\n <input\\n nz-input\\n [nzAutocomplete]=\\\"autoName\\\"\\n appPatientSearch\\n placeholder=\\\"Pesquisar\\\"\\n class=\\\"search-ipt\\\"\\n formControlName=\\\"name\\\"\\n />\\n <nz-autocomplete #autoName nzBackfill>\\n <nz-auto-option\\n (click)=\\\"onChangePatient(option)\\\"\\n *ngFor=\\\"let option of patients\\\"\\n [nzLabel]=\\\"option.cpf !== '-1' ? option.name : ''\\\"\\n [nzValue]=\\\"option.cpf !== '-1' ? option.name : ''\\\"\\n class=\\\"mao\\\"\\n >\\n {{ option?.name }}\\n {{ option?.cpf !== '-1' ? (option?.cpf | formattedCpf) : '' }}\\n </nz-auto-option>\\n </nz-autocomplete>\\n </nz-form-control>\\n </nz-input-group>\\n <ng-template #suffixIconSearch>\\n <i nz-icon nzType=\\\"search\\\"></i>\\n </ng-template>\\n <span *ngIf=\\\"!patient\\\" class=\\\"select-text\\\">Selecione um paciente para começar</span>\\n\\n <!-- details -->\\n <div *ngIf=\\\"patient\\\">\\n <div class=\\\"media padding\\\">\\n <img\\n class=\\\"mr-5\\\"\\n *ngIf=\\\"patient?.img\\\"\\n [src]=\\\"'assets/img/' + patient?.img\\\"\\n alt=\\\"Generic placeholder image\\\"\\n />\\n <div class=\\\"media-body\\\">\\n <div class=\\\"media-header d-flex align-items-center\\\">\\n <h5 class=\\\"mt-0 title\\\">{{ patient?.name }}</h5>\\n </div>\\n <p *ngIf=\\\"patient?.cpf\\\" class=\\\"document\\\">CPF: {{ patient?.cpf | formattedCpf }}</p>\\n </div>\\n </div>\\n\\n <app-patient-record [patient]=\\\"patient\\\" [customStyle]=\\\"patientRecordStyle\\\"></app-patient-record>\\n </div>\\n </div>\\n </form>\\n</div>\\n\";","import { Component, OnInit } from '@angular/core';\nimport { FormBuilder, FormGroup } from '@angular/forms';\nimport { AuthService } from '@app/core/services/auth.service';\nimport { HealthProfessionalService } from '@app/modules/health-professional/services/health-professional.service';\nimport { Patient } from '@app/shared/models';\nimport { User } from '@app/shared/models/decodedLoginToken';\nimport { environment } from '@env/environment';\nimport { ReplaySubject } from 'rxjs';\nimport {\n catchError,\n debounceTime,\n distinctUntilChanged,\n map,\n startWith,\n switchMap,\n takeUntil\n} from 'rxjs/operators';\n\n@Component({\n selector: 'app-float-button',\n templateUrl: './float-button.component.html',\n styleUrls: ['./float-button.component.scss']\n})\nexport class FloatButtonComponent implements OnInit {\n visible = false;\n patientRecordForm: FormGroup;\n patient: any;\n patients: Patient[];\n patientRecordStyle = {\n recordsArea: { height: '50vh' }\n };\n\n private destroyed$: ReplaySubject<boolean> = new ReplaySubject<boolean>();\n\n constructor(\n private fb: FormBuilder,\n private authService: AuthService,\n private healthProfessionalService: HealthProfessionalService\n ) {\n this.patientRecordForm = this.fb.group({\n _id: this.fb.control(''),\n name: this.fb.control('')\n });\n }\n\n ngOnInit() {\n this.onChange();\n }\n\n get user(): User {\n return this.authService.user();\n }\n\n onChangePatient(patient: Patient): void {\n this.patient = patient;\n this.patientRecordForm.get('_id').setValue(patient._id);\n }\n\n setVisible() {\n this.visible = !this.visible;\n }\n\n resetPatient() {\n this.patient = undefined;\n this.patientRecordForm.get('_id').setValue('');\n this.patientRecordForm.get('name').setValue('');\n }\n\n onChange(): void {\n let inputValue = '';\n\n this.patientRecordForm\n .get('name')\n .valueChanges.pipe(\n debounceTime(environment.debounceTime),\n distinctUntilChanged(),\n switchMap(value => {\n inputValue = value;\n return this.getPatients(value);\n }),\n map((res: any) => {\n if (res) {\n if (res.length > 0) {\n return res;\n }\n }\n this.patientRecordForm.get('_id').setValue(null);\n }),\n takeUntil(this.destroyed$),\n catchError((err, source) => {\n return source.pipe(startWith([]));\n })\n )\n .subscribe(patients => {\n this.patients = patients;\n });\n }\n\n private getPatients(value: string) {\n return this.healthProfessionalService.getPatientsByUserId(value, this.user._id);\n }\n\n private onlyNumbers(value: String): Boolean {\n return value.match(/^[0-9]+$/) != null;\n }\n}\n","export default \".float-button {\\n float: right;\\n top: 83px;\\n right: 0px;\\n position: absolute;\\n z-index: 1;\\n padding: 20px 18px;\\n}\\n.float-button .round-btn {\\n border-radius: 50px;\\n width: 50px;\\n height: 50px;\\n outline: none;\\n border: none;\\n}\\n.float-button .round-btn.medical-record-btn {\\n background: #0b6054;\\n}\\n.float-button .round-btn.medical-record-btn img {\\n filter: invert(1);\\n width: 23px;\\n}\\n.padding {\\n padding: 15px 45px 29px;\\n}\\n.patient-record {\\n display: flex;\\n flex-direction: column;\\n border: solid 1px;\\n background-color: white;\\n color: #0b6054;\\n}\\n.patient-record .min-width {\\n width: 33vw;\\n}\\n.patient-record .max-width {\\n width: 35vw;\\n}\\n.patient-record .mix-lenght {\\n height: 20vh;\\n}\\n.patient-record .title {\\n font-weight: 600;\\n}\\n.patient-record .icons {\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n align-self: flex-end;\\n justify-content: space-evenly;\\n position: absolute;\\n width: 100px;\\n}\\n.patient-record .icons .icon {\\n width: 22px;\\n cursor: pointer;\\n}\\n.patient-record .minimize {\\n margin-top: -14px;\\n}\\n.patient-record .select-text {\\n font-size: 13px;\\n}\\n.patient-record .search-ipt {\\n margin: 2px 0px 14px;\\n}\\n.patient-record .record {\\n margin-top: 20px;\\n display: flex;\\n justify-content: space-between;\\n}\\n.patient-record .record .date {\\n font-style: italic;\\n}\\n.media {\\n background-color: #ebebeb;\\n}\\n.media img {\\n width: 80px;\\n}\\n.media .media-body {\\n display: flex;\\n flex-direction: column;\\n justify-content: space-evenly;\\n}\\n.media .media-header .title {\\n color: #4d4d4d;\\n font-size: 25px;\\n text-overflow: ellipsis;\\n white-space: nowrap;\\n overflow: hidden;\\n margin-bottom: -12px;\\n text-transform: none;\\n}\\n@media (max-width: 575px) {\\n .media .media-header .title {\\n font-size: 20px;\\n width: 77%;\\n }\\n}\\n.media .media-header a {\\n color: #8e8e8e;\\n font-size: 18px;\\n}\\n.media .media-header a:not(:last-child) {\\n margin-right: 8px;\\n}\\n.media .document {\\n font-size: 18px;\\n color: #4d4d4d;\\n font-family: \\\"proregular\\\";\\n}\\n.media p {\\n margin-bottom: 0;\\n}\\n.media ul li {\\n font-family: \\\"prolight\\\";\\n font-size: 15px;\\n margin-right: 0;\\n}\\n.media ul li .ant-divider {\\n background: #838383;\\n}\\n.media ul li .ant-divider-vertical {\\n margin: 0 20px;\\n height: 20px;\\n}\\n::ng-deep .float-button .ant-input-affix-wrapper .ant-input-suffix {\\n top: 43%;\\n}\";","export default \"<div class=\\\"col justify-content-between p-2\\\" theme>\\n <div *ngIf=\\\"loading\\\" class=\\\"d-flex justify-content-center p-2\\\">\\n <ng-template #indicatorTemplate>\\n <i nz-icon nzType=\\\"loading\\\" class=\\\"loading-icon\\\"></i>\\n </ng-template>\\n <nz-spin nzSimple [nzIndicator]=\\\"indicatorTemplate\\\"></nz-spin>\\n </div>\\n\\n <div *ngIf=\\\"patientRecords.length\\\" class=\\\"d-flex\\\" [ngStyle]=\\\"customStyle?.recordsArea\\\">\\n <div\\n #scrollMe\\n [scrollTop]=\\\"scrollMe.scrollHeight\\\"\\n (scroll)=\\\"onScroll($event)\\\"\\n class=\\\"col\\\"\\n style=\\\"overflow: auto;\\\"\\n [ngClass]=\\\"{ 'opacity-record': loading }\\\"\\n >\\n <nz-list>\\n <nz-list-item *ngFor=\\\"let record of patientRecords.reverse()\\\" class=\\\"d-flex\\\">\\n <app-record-card\\n class=\\\"col\\\"\\n [record]=\\\"record\\\"\\n [tags]=\\\"tags\\\"\\n [merging]=\\\"merging\\\"\\n (recordDeleted)=\\\"refreshList()\\\"\\n (setLoading)=\\\"setLoading($event)\\\"\\n (showCheckbox)=\\\"showCheckbox($event)\\\"\\n (addNewRecordToMerge)=\\\"addNewRecordToMerge($event)\\\"\\n ></app-record-card>\\n </nz-list-item>\\n </nz-list>\\n </div>\\n </div>\\n\\n <hr class=\\\"mt-3\\\" />\\n\\n <div class=\\\"d-flex mt-1 mb-1\\\" *ngIf=\\\"!merging\\\">\\n <div class=\\\"col-6\\\">\\n <nz-select\\n nzPlaceHolder=\\\"Selecione tag\\\"\\n nzShowSearch\\n nzAllowClear\\n nzSize=\\\"default\\\"\\n nzDropdownClassName=\\\"select-tag\\\"\\n [(ngModel)]=\\\"selectedTag\\\"\\n (ngModelChange)=\\\"onChangeTag($event)\\\"\\n >\\n <nz-option nzLabel=\\\"Nenhum\\\"></nz-option>\\n <nz-option-group *ngFor=\\\"let tag of tagsWithChildren\\\" [nzLabel]=\\\"groupTitle\\\">\\n <ng-template #groupTitle>\\n <span>#{{ tag.name }}: {{ tag.description }}</span>\\n </ng-template>\\n <nz-option\\n *ngFor=\\\"let children of tag.children; index as i\\\"\\n [nzLabel]=\\\"i + 1 + ' - ' + children.description\\\"\\n [nzValue]=\\\"children\\\"\\n >\\n </nz-option>\\n </nz-option-group>\\n\\n <nz-option-group>\\n <nz-option\\n *ngFor=\\\"let tag of tagsWithoutChildren\\\"\\n [nzLabel]=\\\"'#' + tag.name + ': ' + tag.description\\\"\\n [nzValue]=\\\"tag\\\"\\n ></nz-option>\\n </nz-option-group>\\n </nz-select>\\n </div>\\n </div>\\n\\n <div class=\\\"d-flex align-items-center justify-content-center\\\" *ngIf=\\\"!loading && !merging\\\">\\n <div class=\\\"col\\\">\\n <textarea\\n #recordInput\\n nz-input\\n rows=\\\"2\\\"\\n [(ngModel)]=\\\"record\\\"\\n placeholder=\\\"Escreva aqui...\\\"\\n ></textarea>\\n </div>\\n <div class=\\\"col-2 p-0\\\" *ngIf=\\\"!merging\\\">\\n <button class=\\\"btn btn-success\\\" (click)=\\\"submitRecord()\\\">\\n <i class=\\\"fa fa-arrow-right\\\"></i>\\n </button>\\n </div>\\n </div>\\n\\n <div class=\\\"d-flex col-2 p-0\\\" *ngIf=\\\"merging\\\">\\n <button\\n nz-button\\n type=\\\"button\\\"\\n nzType=\\\"secondary\\\"\\n class=\\\"btn-secondary\\\"\\n (click)=\\\"cancelMergeSelection()\\\"\\n >\\n Cancelar <i class=\\\"fas fa-times\\\"></i>\\n </button>\\n\\n <button\\n nz-button\\n type=\\\"button\\\"\\n nzType=\\\"primary\\\"\\n class=\\\"btn-primary ml-2\\\"\\n (click)=\\\"changeMergeConfirmation()\\\"\\n [disabled]=\\\"recordsToMerge.length < 2\\\"\\n >\\n Unificar <i class=\\\"fas fa-check\\\"></i>\\n </button>\\n </div>\\n\\n <ng-container *ngIf=\\\"mergeConfirmation\\\">\\n <nz-modal\\n [(nzVisible)]=\\\"mergeConfirmation\\\"\\n nzTitle=\\\"Selecione a nova tag principal\\\"\\n (nzOnCancel)=\\\"cancelMerge()\\\"\\n (nzOnOk)=\\\"mergeRecords(mainTagId)\\\"\\n [nzOkDisabled]=\\\"!mainTagId\\\"\\n nzClassName=\\\"modal-merge\\\"\\n >\\n <div *ngIf=\\\"mergingRecords\\\" class=\\\"loading-area modal-loading\\\">\\n <ng-template #indicatorTemplate>\\n <i nz-icon nzType=\\\"loading\\\"></i>\\n </ng-template>\\n <nz-spin nzSimple [nzIndicator]=\\\"indicatorTemplate\\\"></nz-spin>\\n </div>\\n\\n <div [ngClass]=\\\"{ 'opacity-record': mergingRecords }\\\">\\n <ng-container *ngIf=\\\"distinctTags\\\">\\n <p>\\n Escolha a nova tag do registro:\\n </p>\\n <nz-radio-group [(ngModel)]=\\\"mainTagId\\\">\\n <label *ngFor=\\\"let tag of distinctTags\\\" nz-radio [nzValue]=\\\"tag.id\\\"\\n >#{{ tag.name }}: {{ tag.description }}</label\\n >\\n </nz-radio-group>\\n </ng-container>\\n\\n <ng-container *ngIf=\\\"!distinctTags\\\">\\n <p>Deseja confirmar a mesclagem dos registros selecionados?</p>\\n </ng-container>\\n </div>\\n </nz-modal>\\n </ng-container>\\n</div>\\n\";","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { PatientRecord } from '@app/shared/models/patient-record';\nimport { PatientRecordPage } from '@app/shared/models/patient-record-page';\nimport { PatientRecordRequest } from '@app/shared/models/patient-record-request';\nimport { Tag } from '@app/shared/models/tag';\nimport { environment } from '@env/environment';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PatientRecordService {\n constructor(private http: HttpClient) {}\n\n getTags() {\n return this.http.get<Tag[]>(`${environment.apiRoot}tags`);\n }\n\n getRecords(patientId: string, page: number, limit: number) {\n const params = { patientId, page, limit } as any;\n return this.http.get<PatientRecordPage>(`${environment.apiRoot}patient-records`, { params });\n }\n\n submitRecord(record: PatientRecordRequest) {\n return this.http.post<PatientRecord>(`${environment.apiRoot}patient-records`, record);\n }\n\n updateRecord(record: PatientRecord) {\n return this.http.patch<PatientRecord>(`${environment.apiRoot}patient-records/${record.id}`, record);\n }\n\n deleteRecord(id: string) {\n return this.http.delete(`${environment.apiRoot}patient-records/${id}`);\n }\n\n mergeRecords(records: PatientRecord[], mainTag: string) {\n return this.http.post<PatientRecord>(`${environment.apiRoot}patient-records/merge`, {\n records,\n mainTag\n });\n }\n}\n","import { Component, ElementRef, Input, OnInit, ViewChild } from '@angular/core';\nimport { AuthService } from '@app/core/services/auth.service';\nimport { Patient } from '@app/shared/models';\nimport { User } from '@app/shared/models/decodedLoginToken';\nimport { PatientRecord } from '@app/shared/models/patient-record';\nimport { Tag } from '@app/shared/models/tag';\nimport { AppToastService } from '@app/shared/services/app-toast.service';\nimport { PatientRecordService } from '../../services/patient-record.service';\nimport { nativeAsync } from '@app/shared/decorators/nativeAsync';\n\n@Component({\n selector: 'app-patient-record',\n templateUrl: './patient-record.component.html',\n styleUrls: ['./patient-record.component.scss']\n})\nexport class PatientRecordComponent implements OnInit {\n @Input() patient: Patient;\n @Input() customStyle: any;\n\n visible = false;\n patientRecords: PatientRecord[] = [];\n recordsToMerge: PatientRecord[] = [];\n mainTagId: string;\n distinctTags: Tag[] = [];\n mergeConfirmation: boolean;\n\n tags: Tag[] = [];\n filteredTags: Tag[] = [];\n record = '';\n selectedTag: Tag;\n merging = false;\n loading = true;\n mergingRecords = false;\n page: number;\n total: number;\n limit = 10;\n\n @ViewChild('recordInput') recordInput: ElementRef;\n\n constructor(\n private authService: AuthService,\n private patientRecordService: PatientRecordService,\n private notification: AppToastService\n ) {}\n\n @nativeAsync\n async ngOnInit() {\n if (this.patient) {\n const [tags] = await Promise.all([\n this.patientRecordService.getTags().toPromise(),\n this.requestPatientRecords(1)\n ]);\n this.tags = tags;\n } else {\n this.tags = await this.patientRecordService.getTags().toPromise();\n }\n }\n\n @nativeAsync\n private async requestPatientRecords(paginationIndex: number, reset = false) {\n try {\n this.loading = true;\n const { docs, total } = await this.patientRecordService\n .getRecords(this.patient._id, paginationIndex, this.limit)\n .toPromise();\n if (reset) {\n this.patientRecords = docs;\n } else {\n this.patientRecords = this.patientRecords.concat(docs);\n }\n this.page = paginationIndex;\n this.total = total;\n } catch (err) {\n console.error(err);\n }\n\n this.loading = false;\n }\n\n get user(): User {\n return this.authService.user();\n }\n\n get tagsWithChildren() {\n return this.tags.filter(t => t.children.length);\n }\n\n get tagsWithoutChildren() {\n return this.tags.filter(t => !t.children.length);\n }\n\n @nativeAsync\n async onScroll(event: any) {\n if (\n event.target.offsetHeight + event.target.scrollTop >= event.target.scrollHeight &&\n this.patientRecords.length < this.total\n ) {\n await this.requestPatientRecords(this.page + 1);\n }\n }\n\n @nativeAsync\n async refreshList() {\n await this.requestPatientRecords(1, true);\n }\n\n editRecord(record: PatientRecord) {\n this.patientRecordService.updateRecord(record);\n }\n\n showCheckbox(show: boolean) {\n this.merging = show;\n }\n\n @nativeAsync\n async mergeRecords(mainTagId: string) {\n try {\n this.mergingRecords = true;\n const recordCreated = await this.patientRecordService\n .mergeRecords(this.recordsToMerge, mainTagId)\n .toPromise();\n this.mergingRecords = false;\n this.mergeConfirmation = false;\n this.showCheckbox(false);\n this.patientRecords.unshift(recordCreated);\n await this.refreshList();\n } catch (err) {\n this.mergingRecords = false;\n console.error(err);\n }\n }\n\n addNewRecordToMerge(data) {\n const { record, event } = data;\n if (event) {\n this.recordsToMerge.push(record);\n } else {\n const index = this.recordsToMerge.map(r => r.id).indexOf(record.id);\n this.recordsToMerge = this.recordsToMerge.splice(index, 1);\n }\n }\n\n changeMergeConfirmation() {\n this.distinctTags = this.recordsToMerge\n .map(r => r.tag)\n .filter(t => !!t)\n .reduce((acc, tag) => {\n if (!acc.find(t => t.id === tag.id)) {\n acc.push(tag);\n }\n return acc;\n }, []);\n\n if (this.distinctTags.length === 1) {\n this.mergeRecords(this.distinctTags[0].id);\n } else {\n this.mergeConfirmation = !this.mergeConfirmation;\n }\n }\n\n cancelMergeSelection() {\n this.showCheckbox(false);\n }\n\n cancelMerge() {\n this.mergeConfirmation = !this.mergeConfirmation;\n }\n\n onChangeTag(tag: Tag) {\n if (tag.parentId) {\n this.selectChild(tag.id);\n }\n }\n\n @nativeAsync\n async submitRecord() {\n try {\n const form = {\n patientId: this.patient._id,\n content: this.record,\n tag: this.selectedTag && this.selectedTag.id\n };\n this.loading = true;\n const recordCreated = await this.patientRecordService.submitRecord(form).toPromise();\n this.patientRecords.unshift(recordCreated);\n } catch (err) {\n console.error(err);\n this.notification.notify('error', 'Erro', 'Não foi possÃvel salvar o registro');\n }\n this.reset();\n }\n\n extractDataFromRecord() {\n if (!this.record.includes(':')) {\n return { undefined, record: this.record };\n }\n }\n\n setSelectedTag(tag: Tag) {\n this.selectedTag = tag;\n this.record = `#${tag.name}: `;\n }\n\n @nativeAsync\n async selectChild(tagId: string) {\n try {\n const record = {\n patientId: this.patient._id,\n content: '',\n tag: tagId,\n editable: false\n };\n const recordCreated = await this.patientRecordService.submitRecord(record).toPromise();\n this.patientRecords.unshift(recordCreated);\n } catch (err) {\n console.error(err);\n this.notification.notify('error', 'Erro', 'Não foi possÃvel salvar o registro');\n }\n this.reset();\n }\n\n private reset() {\n this.loading = false;\n this.record = '';\n this.selectedTag = undefined;\n this.recordInput.nativeElement.value = '';\n }\n}\n","export default \".loading-icon {\\n font-size: 30px;\\n}\\n\\n.opacity-record {\\n opacity: 0.7;\\n}\\n\\n.show:hover .list-tags {\\n max-height: inherit;\\n opacity: 1;\\n}\\n\\nhr {\\n margin-top: 0;\\n margin-bottom: 1rem;\\n}\\n\\n::ng-deep .select-tag .ant-select-dropdown-menu-item {\\n padding: 0 0 0 10px;\\n}\\n\\n::ng-deep .patient-record .ant-list-item {\\n padding-bottom: 0;\\n}\\n\\n::ng-deep .modal-merge .ant-modal-header {\\n background-color: #4cbca3;\\n}\\n\\n::ng-deep .modal-merge .ant-modal-title {\\n color: white;\\n}\\n\\n::ng-deep .modal-merge .ant-btn-default:hover {\\n color: #0b6054;\\n border-color: #0b6054;\\n}\\n\\n::ng-deep .modal-merge .ant-btn-default:focus {\\n color: rgba(0, 0, 0, 0.65);\\n border-color: #d9d9d9;\\n}\\n\\n::ng-deep .modal-merge .ant-btn-primary {\\n color: white;\\n background-color: #0b6054;\\n border-color: #0b6054;\\n}\\n\\n::ng-deep .modal-merge .ant-btn-primary:hover {\\n background-color: #0b6054;\\n border-color: #0b6054;\\n}\";","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { PatientRecordService } from '@app/modules/patients/services/patient-record.service';\nimport { nativeAsync } from '@app/shared/decorators/nativeAsync';\nimport { PatientRecord } from '@app/shared/models/patient-record';\nimport { Tag } from '@app/shared/models/tag';\n\n@Component({\n selector: 'app-record-card',\n templateUrl: './record-card.component.html',\n styleUrls: ['./record-card.component.scss']\n})\nexport class RecordCardComponent implements OnInit {\n @Input() record: PatientRecord;\n @Input() tags: Tag[];\n @Input() merging: boolean;\n @Output() recordDeleted: EventEmitter<any> = new EventEmitter<any>();\n @Output() setLoading: EventEmitter<boolean> = new EventEmitter<boolean>();\n @Output() showCheckbox: EventEmitter<boolean> = new EventEmitter<boolean>();\n @Output() addNewRecordToMerge: EventEmitter<any> = new EventEmitter<any>();\n\n loading: boolean;\n checked: boolean;\n recordsToMerging: any[];\n show: boolean;\n newTag: any;\n editing: boolean;\n showHistory: boolean;\n editingTag: boolean;\n updatingTag: boolean;\n showTagConfirmation: boolean;\n\n constructor(private patientRecordService: PatientRecordService) {}\n\n ngOnInit() {}\n\n showOptions() {\n this.show = !this.show;\n }\n\n editTag() {\n this.editingTag = true;\n }\n\n editRecord() {\n this.editing = !this.editing;\n this.show = !this.show;\n }\n\n setShowHistory() {\n this.showHistory = !this.showHistory;\n this.show = false;\n }\n\n mergeRecords() {\n this.showCheckbox.emit(true);\n this.showOptions();\n }\n\n selectRecordToMerge(event) {\n this.addNewRecordToMerge.emit({ record: this.record, event });\n }\n\n @nativeAsync\n async updateRecord() {\n this.loading = true;\n const recordUpdated = await this.patientRecordService.updateRecord(this.record).toPromise();\n this.record = recordUpdated;\n this.editing = false;\n this.loading = false;\n }\n\n @nativeAsync\n async deleteRecord() {\n await this.patientRecordService.deleteRecord(this.record.id).toPromise();\n this.recordDeleted.emit();\n this.loading = false;\n }\n\n getIndex(tagId: string) {\n const parent = this.record.tag.parent;\n const children = parent.children;\n const index = children.findIndex(c => c.id === tagId);\n return index + 1;\n }\n\n changeTagConfirmation(newTag) {\n this.newTag = newTag;\n this.showTagConfirmation = true;\n }\n\n handleOk(flag) {\n this.editingTag = false;\n }\n\n handleCancel(flag: string) {\n if (flag === 'editingTag') {\n this.editingTag = false;\n } else {\n this.showTagConfirmation = false;\n }\n }\n\n @nativeAsync\n async changeTag() {\n this.record.tag = this.newTag;\n this.updatingTag = true;\n const recordUpdated = await this.patientRecordService.updateRecord(this.record).toPromise();\n this.record = recordUpdated;\n this.showTagConfirmation = false;\n this.editingTag = false;\n this.show = false;\n this.updatingTag = false;\n }\n\n getContent(content) {\n document.getElementById('content').innerText = content;\n }\n}\n","export default \"<div class=\\\"record-card\\\">\\n <div *ngIf=\\\"loading\\\" class=\\\"loading-area\\\">\\n <ng-template #indicatorTemplate>\\n <i nz-icon nzType=\\\"loading\\\"></i>\\n </ng-template>\\n <nz-spin nzSimple [nzIndicator]=\\\"indicatorTemplate\\\"></nz-spin>\\n </div>\\n <div class=\\\"record\\\" [ngClass]=\\\"{ 'opacity-record': loading }\\\">\\n <div class=\\\"info-area\\\" *ngIf=\\\"!showHistory\\\">\\n <div class=\\\"infos\\\">\\n <ng-container *ngIf=\\\"!record.tag && !record.editable\\\">\\n <!-- titulo para registro de sistema -->\\n <span class=\\\"gray\\\"><span class=\\\"title\\\">Sistema:</span> {{ record.content }}</span>\\n </ng-container>\\n\\n <ng-container *ngIf=\\\"record.tag\\\">\\n <span class=\\\"title\\\"\\n >{{ record.tag.parent ? record.tag.parent.description : record.tag.description }}\\n </span>\\n <span class=\\\"title\\\"> - </span>\\n <span class=\\\"date\\\">{{ record.createdAt | date: 'dd/MM/yyyy HH:mm' }}</span>\\n </ng-container>\\n\\n <ng-container *ngIf=\\\"!record.tag\\\">\\n <span class=\\\"title\\\"> - </span>\\n <span class=\\\"date\\\">{{ record.createdAt | date: 'dd/MM/yyyy HH:mm' }}</span>\\n </ng-container>\\n </div>\\n <i\\n class=\\\"fas fa-angle-down show-icon\\\"\\n *ngIf=\\\"!merging && (record.editable || record.historic.length)\\\"\\n (click)=\\\"showOptions()\\\"\\n ></i>\\n <label\\n nz-checkbox\\n *ngIf=\\\"merging && record.editable\\\"\\n [(ngModel)]=\\\"checked\\\"\\n (ngModelChange)=\\\"selectRecordToMerge($event)\\\"\\n ></label>\\n </div>\\n\\n <span class=\\\"content\\\" *ngIf=\\\"!editing && !showHistory\\\">{{\\n record.tag && record.tag.parent\\n ? getIndex(record.tag.id) + ' - ' + record.tag.description\\n : record.content\\n }}</span>\\n\\n <div *ngIf=\\\"editing\\\" class=\\\"edit-area\\\">\\n <input nz-input type=\\\"text\\\" [(ngModel)]=\\\"record.content\\\" />\\n <div class=\\\"btns\\\">\\n <button\\n type=\\\"button\\\"\\n class=\\\"btn btn-icon btn-success btn-add text-capitalize btn-save\\\"\\n (click)=\\\"updateRecord()\\\"\\n >\\n <span class=\\\"btn-inner--text\\\">Salvar</span>\\n </button>\\n\\n <button\\n type=\\\"button\\\"\\n class=\\\"btn btn-icon btn-success btn-add text-capitalize btn-save cancel-btn\\\"\\n (click)=\\\"editRecord()\\\"\\n >\\n <span class=\\\"btn-inner--text\\\">Cancelar</span>\\n </button>\\n </div>\\n </div>\\n\\n <div *ngIf=\\\"showHistory\\\" class=\\\"history-area\\\">\\n <i class=\\\"fas fa-times close-icon\\\" (click)=\\\"setShowHistory()\\\"></i>\\n <ng-container *ngFor=\\\"let historic of record.historic\\\">\\n <div>\\n <span> {{ historic.actionType === 'created' ? ' Registro criado em ' : 'Editado em ' }}</span>\\n <span>{{ historic.date | date: 'dd/MM/yyyy HH:mm' }}</span>\\n </div>\\n </ng-container>\\n </div>\\n\\n <!-- menu - registro -->\\n <div class=\\\"menu backgroun-gray\\\" *ngIf=\\\"show\\\">\\n <i\\n class=\\\"fas fa-hashtag option\\\"\\n title=\\\"Editar Tag\\\"\\n (click)=\\\"editTag()\\\"\\n *ngIf=\\\"record.editable\\\"\\n ></i>\\n <i\\n class=\\\"fas fa-pen option\\\"\\n title=\\\"Editar texto do registro\\\"\\n (click)=\\\"editRecord()\\\"\\n *ngIf=\\\"record.editable\\\"\\n ></i>\\n <i class=\\\"fas fa-trash option\\\" title=\\\"Excluir registro\\\" (click)=\\\"deleteRecord()\\\"></i>\\n <div (click)=\\\"mergeRecords()\\\" *ngIf=\\\"record.editable\\\">\\n <i class=\\\"fas fa-chevron-right\\\"></i>\\n <i class=\\\"fas fa-chevron-left\\\"></i>\\n </div>\\n <i\\n class=\\\"fas fa-history option\\\"\\n title=\\\"Histórico\\\"\\n (click)=\\\"setShowHistory()\\\"\\n *ngIf=\\\"record.historic.length\\\"\\n ></i>\\n </div>\\n </div>\\n\\n <nz-modal\\n [(nzVisible)]=\\\"editingTag\\\"\\n nzTitle=\\\"Editar Tag\\\"\\n (nzOnCancel)=\\\"handleCancel('editingTag')\\\"\\n (nzOnOk)=\\\"handleOk('editingTag')\\\"\\n >\\n <p>{{ record.tag ? 'Tag atual: ' + record.tag.description : 'Registro sem tag' }}</p>\\n\\n <p>Escolha a nova tag:</p>\\n <div class=\\\"pointer\\\" *ngFor=\\\"let tag of tags; let i = index\\\" (click)=\\\"changeTagConfirmation(tag)\\\">\\n <span *ngIf=\\\"tag.children.length === 0\\\">{{ i + 1 }}. {{ tag.name }}: {{ tag.description }}</span>\\n </div>\\n </nz-modal>\\n\\n <ng-container *ngIf=\\\"showTagConfirmation\\\">\\n <nz-modal\\n [(nzVisible)]=\\\"showTagConfirmation\\\"\\n nzTitle=\\\"Nova tag\\\"\\n (nzOnCancel)=\\\"handleCancel('showTagConfirmation')\\\"\\n (nzOnOk)=\\\"changeTag()\\\"\\n >\\n <div *ngIf=\\\"updatingTag\\\" class=\\\"loading-area modal-loading\\\">\\n <ng-template #indicatorTemplate>\\n <i nz-icon nzType=\\\"loading\\\"></i>\\n </ng-template>\\n <nz-spin nzSimple [nzIndicator]=\\\"indicatorTemplate\\\"></nz-spin>\\n </div>\\n\\n <div [ngClass]=\\\"{ 'opacity-record': updatingTag }\\\">\\n <p>\\n Definir nova tag como: <span class=\\\"bold\\\">{{ newTag.name }} - {{ newTag.description }}</span\\n >?\\n </p>\\n </div>\\n </nz-modal>\\n </ng-container>\\n</div>\\n\";","export default \".record-card {\\n position: relative;\\n padding-bottom: 8px;\\n margin: 0;\\n}\\n.record-card .record {\\n height: 100%;\\n}\\n.record-card .record .edit-area {\\n display: flex;\\n justify-content: space-between;\\n}\\n.record-card .record .edit-area input {\\n width: 55%;\\n}\\n.record-card .record .edit-area .btns .cancel-btn {\\n background-color: #086053;\\n border-color: #086053;\\n}\\n.record-card .record .content {\\n white-space: pre-line;\\n}\\n.record-card .record .history-area {\\n color: #7a7a7a;\\n display: flex;\\n flex-direction: column;\\n align-items: center;\\n position: relative;\\n top: -18px;\\n font-style: italic;\\n box-shadow: 0px 3px 7px #0000002e;\\n background-color: #f8f8f8;\\n padding: 5px 10px 14px 0px;\\n border-radius: 10px;\\n}\\n.record-card .record .history-area .close-icon {\\n align-self: end;\\n}\\n.record-card .record .info-area {\\n display: flex;\\n justify-content: space-between;\\n}\\n.record-card .record .info-area .infos {\\n color: #086053;\\n font-size: 14px;\\n}\\n.record-card .record .info-area .infos .gray {\\n color: #6f6f6f;\\n}\\n.record-card .record .info-area .show-icon {\\n z-index: 1;\\n}\\n.record-card .record .title,\\n.record-card .record .date {\\n font-size: 14px;\\n}\\n.record-card .record .date {\\n font-style: italic;\\n}\\n.record-card .menu {\\n justify-content: space-around;\\n background-color: #f0f0f0e0;\\n top: 0;\\n height: 100%;\\n width: 100%;\\n opacity: 0.9;\\n display: flex;\\n padding-right: 18px;\\n align-items: center;\\n position: absolute;\\n -webkit-text-stroke-width: medium;\\n color: #363636;\\n}\\n.record-card .menu .option:hover {\\n color: #17c6ac;\\n}\\n.record-card .menu i {\\n color: black;\\n font-size: 22px;\\n}\\ni,\\n.pointer {\\n cursor: pointer;\\n}\\n.pointer:hover {\\n color: #16c6ac;\\n}\\n.loading-area {\\n width: 100%;\\n height: 100%;\\n display: flex;\\n position: absolute;\\n justify-content: center;\\n align-items: center;\\n}\\n.loading-area i {\\n color: #086053;\\n font-size: 30px;\\n}\\n.modal-loading {\\n position: inherit;\\n}\\n.opacity-record {\\n opacity: 0.4;\\n}\\n.bold {\\n font-weight: bold;\\n}\\n.fa-chevron-right:before,\\n.fa-chevron-left:before {\\n margin-right: -0.5em;\\n font-weight: bold;\\n}\";","import { NgModule } from '@angular/core';\r\nimport { RouterModule, Routes } from '@angular/router';\r\nimport { IndexComponent } from './pages/index/index.component';\r\n\r\nconst routes: Routes = [{ path: '', component: IndexComponent }];\r\n\r\n@NgModule({\r\n imports: [RouterModule.forChild(routes)],\r\n exports: [RouterModule]\r\n})\r\nexport class PatientsRoutingModule {}\r\n","import { ScrollingModule } from '@angular/cdk/scrolling';\r\nimport { NgModule } from '@angular/core';\r\nimport { SharedModule } from '@app/shared';\r\nimport { NzCheckboxModule } from 'ng-zorro-antd/checkbox';\r\nimport { NzListModule } from 'ng-zorro-antd/list';\r\nimport { NzSpinModule } from 'ng-zorro-antd/spin';\r\nimport { ModalModule } from 'ngx-bootstrap/modal';\r\nimport { NgxLoadingModule } from 'ngx-loading';\r\nimport { NgxMaskModule } from 'ngx-mask';\r\nimport { EntryModule } from '../entry/entry.module';\r\nimport { SimplifiedPatientFormComponent } from './components/simplified-patient-form/simplified-patient-form.component';\r\nimport { SimplifiedPetPatientFormComponent } from './components/simplified-pet-patient-form/simplified-pet-patient-form.component';\r\nimport { SimplifiedUnderagePatientFormComponent } from './components/simplified-underage-patient-form/simplified-underage-patient-form.component';\r\nimport { IndexComponent } from './pages/index/index.component';\r\nimport { ModalAddPatientComponent } from './pages/modal-add-patient/modal-add-patient.component';\r\nimport { ModalEditPatientComponent } from './pages/modal-edit-patient/modal-edit-patient.component';\r\nimport { ModalEditPetComponent } from './pages/modal-edit-pet/modal-edit-pet.component';\r\nimport { ModalSearchComponent } from './pages/modal-search/modal-search.component';\r\nimport { ModalSelectPetComponent } from './pages/modal-select-pet/modal-select-pet.component';\r\nimport { PatientDetailsComponent } from './pages/patient-details/patient-details.component';\r\nimport { FloatButtonComponent } from './pages/patient-record/float-button/float-button.component';\r\nimport { PatientRecordComponent } from './pages/patient-record/patient-record.component';\r\nimport { RecordCardComponent } from './pages/patient-record/record-card/record-card.component';\r\nimport { PatientsRoutingModule } from './patients-routing.module';\r\nimport { ModalSwitchResponsibleComponent } from './pages/modal-switch-responsible/modal-switch-responsible.component';\r\n\r\n@NgModule({\r\n imports: [\r\n SharedModule,\r\n PatientsRoutingModule,\r\n NgxLoadingModule.forRoot({}),\r\n EntryModule,\r\n ModalModule.forRoot(),\r\n NzSpinModule,\r\n NzListModule,\r\n NgxMaskModule.forRoot(),\r\n NzCheckboxModule,\r\n ScrollingModule\r\n ],\r\n declarations: [\r\n IndexComponent,\r\n PatientDetailsComponent,\r\n ModalSearchComponent,\r\n ModalAddPatientComponent,\r\n PatientRecordComponent,\r\n ModalEditPatientComponent,\r\n RecordCardComponent,\r\n FloatButtonComponent,\r\n SimplifiedPatientFormComponent,\r\n SimplifiedUnderagePatientFormComponent,\r\n SimplifiedPetPatientFormComponent,\r\n ModalSelectPetComponent,\r\n ModalEditPetComponent,\r\n ModalSwitchResponsibleComponent\r\n ],\r\n exports: [PatientRecordComponent, FloatButtonComponent]\r\n})\r\nexport class PatientsModule {}\r\n","import { BrazilState } from '@app/shared/models';\r\n\r\nexport const BrazilianStates: BrazilState[] = [\r\n {\r\n id: '1',\r\n sigla: 'AC',\r\n nome: 'Acre'\r\n },\r\n {\r\n id: '2',\r\n sigla: 'AL',\r\n nome: 'Alagoas'\r\n },\r\n {\r\n id: '3',\r\n sigla: 'AM',\r\n nome: 'Amazonas'\r\n },\r\n {\r\n id: '4',\r\n sigla: 'AP',\r\n nome: 'Amapá'\r\n },\r\n {\r\n id: '5',\r\n sigla: 'BA',\r\n nome: 'Bahia'\r\n },\r\n {\r\n id: '6',\r\n sigla: 'CE',\r\n nome: 'Ceará'\r\n },\r\n {\r\n id: '7',\r\n sigla: 'DF',\r\n nome: 'Distrito Federal'\r\n },\r\n {\r\n id: '8',\r\n sigla: 'ES',\r\n nome: 'EspÃrito Santo'\r\n },\r\n {\r\n id: '9',\r\n sigla: 'GO',\r\n nome: 'Goiás'\r\n },\r\n {\r\n id: '10',\r\n sigla: 'MA',\r\n nome: 'Maranhão'\r\n },\r\n {\r\n id: '11',\r\n sigla: 'MG',\r\n nome: 'Minas Gerais'\r\n },\r\n {\r\n id: '12',\r\n sigla: 'MS',\r\n nome: 'Mato Grosso do Sul'\r\n },\r\n {\r\n id: '13',\r\n sigla: 'MT',\r\n nome: 'Mato Grosso'\r\n },\r\n {\r\n id: '14',\r\n sigla: 'PA',\r\n nome: 'Pará'\r\n },\r\n {\r\n id: '15',\r\n sigla: 'PB',\r\n nome: 'ParaÃba'\r\n },\r\n {\r\n id: '16',\r\n sigla: 'PE',\r\n nome: 'Pernambuco'\r\n },\r\n {\r\n id: '17',\r\n sigla: 'PI',\r\n nome: 'PiauÃ'\r\n },\r\n {\r\n id: '18',\r\n sigla: 'PR',\r\n nome: 'Paraná'\r\n },\r\n {\r\n id: '19',\r\n sigla: 'RJ',\r\n nome: 'Rio de Janeiro'\r\n },\r\n {\r\n id: '20',\r\n sigla: 'RN',\r\n nome: 'Rio Grande do Norte'\r\n },\r\n {\r\n id: '21',\r\n sigla: 'RO',\r\n nome: 'Rondônia'\r\n },\r\n {\r\n id: '22',\r\n sigla: 'RR',\r\n nome: 'Roraima'\r\n },\r\n {\r\n id: '23',\r\n sigla: 'RS',\r\n nome: 'Rio Grande do Sul'\r\n },\r\n {\r\n id: '24',\r\n sigla: 'SC',\r\n nome: 'Santa Catarina'\r\n },\r\n {\r\n id: '25',\r\n sigla: 'SE',\r\n nome: 'Sergipe'\r\n },\r\n {\r\n id: '26',\r\n sigla: 'SP',\r\n nome: 'São Paulo'\r\n },\r\n {\r\n id: '27',\r\n sigla: 'TO',\r\n nome: 'Tocantins'\r\n }\r\n];\r\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { RetentionService } from '@app/modules/document/services/retention.service';\nimport { nativeAsync } from '@app/shared/decorators/nativeAsync';\nimport { AppToastService } from '@app/shared/services/app-toast.service';\nimport { NzModalRef } from 'ng-zorro-antd/modal';\n\n@Component({\n selector: 'app-modal-cancel-retention',\n templateUrl: './modal-cancel-retention.component.html',\n styleUrls: ['./modal-cancel-retention.component.scss']\n})\nexport class ModalCancelRetentionComponent implements OnInit {\n userId: string;\n retentionId: string;\n isRetentionsThirdParties = false;\n loading = false;\n @Input() isVisible = true;\n @Output() updateListPrescriptionEvent = new EventEmitter<any>();\n reason = '';\n\n constructor(\n private nzModalRef: NzModalRef,\n private notification: AppToastService,\n private retentionService: RetentionService\n ) {}\n\n ngOnInit() {}\n @nativeAsync\n async handleOk() {\n if (this.reason === '') {\n this.notification.notify('warning', 'Aviso', 'O motivo é obrigatório');\n return;\n }\n\n if (this.reason.length < 10) {\n this.notification.notify('warning', 'Aviso', 'O motivo não pode ter menos que 10 caracteres');\n return;\n }\n const data = { reason: this.reason, userId: this.userId, retentionId: this.retentionId };\n this.retentionService.cancel(data, this.isRetentionsThirdParties).subscribe(response => {\n if (!response.erro) {\n this.notification.notify('success', 'Sucesso', response.message);\n this.updateListPrescriptionEvent.emit('');\n this.nzModalRef.destroy();\n }\n });\n }\n\n handleCancel(): void {\n this.nzModalRef.destroy();\n }\n}\n","export default \"<br />\\n<div>\\n <nz-form-label nzFor=\\\"telephone\\\">Especifique o motivo do cancelamento</nz-form-label>\\n <textarea\\n nz-input\\n [(ngModel)]=\\\"reason\\\"\\n placeholder=\\\"digite o motivo do cancelamento\\\"\\n rows=\\\"4\\\"\\n cols=\\\"50\\\"\\n ></textarea>\\n</div>\\n<hr />\\n<div class=\\\"row\\\" theme>\\n <div class=\\\"col-6\\\">\\n <ng-template #indicatorTemplate><i nz-icon nzType=\\\"loading\\\"></i></ng-template>\\n <nz-spin *ngIf=\\\"loading\\\" nzSimple [nzIndicator]=\\\"indicatorTemplate\\\"> </nz-spin>\\n </div>\\n\\n <div class=\\\"col-3\\\">\\n <button\\n type=\\\"button\\\"\\n class=\\\"btn btn-icon btn-secondary btn-add text-capitalize\\\"\\n (click)=\\\"handleCancel()\\\"\\n >\\n <span class=\\\"btn-inner--text\\\">Cancelar</span>\\n </button>\\n </div>\\n\\n <div class=\\\"col-3\\\">\\n <button type=\\\"button\\\" class=\\\"btn btn-icon btn-success text-capitalize\\\" (click)=\\\"handleOk()\\\">\\n <span class=\\\"btn-inner--text\\\">Salvar</span>\\n </button>\\n </div>\\n</div>\\n\";","export default \"\";","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { ColorSetting } from '@app/shared/models/color-setting';\nimport { Protocol, ProtocolGroup } from '@app/shared/models/protocol';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\n\n@Component({\n selector: 'app-modal-list-victa-protocol',\n templateUrl: './modal-list-victa-protocol.component.html',\n styleUrls: ['./modal-list-victa-protocol.component.scss']\n})\nexport class ModalListVictaProtocolComponent implements OnInit {\n @Input() groups: ProtocolGroup[];\n @Input() colorSetting: ColorSetting;\n @Output() selectEvent = new EventEmitter<any>();\n\n constructor(private modalRef: BsModalRef) {}\n\n ngOnInit() {\n if (this.groups.length === 1) {\n this.activeChange(this.groups[0]);\n }\n }\n\n activeChange(item: any) {\n item.active = !item.active;\n }\n\n selectProtocol(protocol: Protocol) {\n this.selectEvent.emit({\n name: `${protocol.code} - ${protocol.name}`,\n code: protocol.code,\n phases: protocol.phases.map(phase => {\n const medicaments = phase.elements\n .map(e => {\n const medicament = e.presentation || e.name;\n return medicament.concat(` - ${e.amount} ${e.measurement}`);\n })\n .join('\\n');\n\n const dosage = [\n phase.dosage ? `Posologia: ${phase.dosage}` : '',\n phase.application,\n phase.preparation,\n phase.note\n ]\n .filter(v => v)\n .join('\\n');\n\n return {\n name: phase.name,\n dosage: `${medicaments}\\n\\n${dosage}`\n };\n })\n });\n\n this.close();\n }\n\n close() {\n this.modalRef.hide();\n }\n}\n","export default \"<div class=\\\"protocols-modal\\\" theme>\\n <div\\n class=\\\"modal-header\\\"\\n [ngStyle]=\\\"{\\n 'background-color': colorSetting?.secondary,\\n 'border-color': colorSetting?.secondary\\n }\\\"\\n >\\n <h4 class=\\\"modal-title pull-left text-white\\\">Sugestão de Protocolos</h4>\\n <button type=\\\"button\\\" class=\\\"close pull-right\\\" aria-label=\\\"Close\\\" (click)=\\\"close()\\\">\\n <span aria-hidden=\\\"true\\\">×</span>\\n </button>\\n </div>\\n <div class=\\\"protocols\\\">\\n <nz-list nzBordered=\\\"false\\\">\\n <nz-list-item *ngFor=\\\"let group of groups\\\" class=\\\"flex-column pl-2 pr-2\\\">\\n <div\\n class=\\\"row group align-items-center\\\"\\n [ngStyle]=\\\"{\\n 'background-color': colorSetting?.primary,\\n 'border-color': colorSetting?.primary\\n }\\\"\\n >\\n <div class=\\\"col-1 pb-1\\\" (click)=\\\"activeChange(group)\\\">\\n <i nz-icon nzType=\\\"right\\\" *ngIf=\\\"!group.active\\\" nzTheme=\\\"outline\\\"></i>\\n <i nz-icon nzType=\\\"down\\\" *ngIf=\\\"group.active\\\" nzTheme=\\\"outline\\\"></i>\\n </div>\\n\\n <div class=\\\"col-7\\\">\\n <h6 class=\\\"m-0\\\">{{ group.name }}</h6>\\n </div>\\n\\n <div *ngIf=\\\"group.active\\\" class=\\\"col-12 protocols pl-0 pr-0\\\">\\n <nz-list nzBordered=\\\"false\\\">\\n <nz-list-item *ngFor=\\\"let protocol of group.protocols\\\" class=\\\"flex-column pl-0 pr-0\\\">\\n <div class=\\\"row subgroup align-items-center\\\">\\n <div class=\\\"col-1 pb-1\\\" (click)=\\\"activeChange(protocol)\\\">\\n <i nz-icon nzType=\\\"right\\\" *ngIf=\\\"!protocol.active\\\" nzTheme=\\\"outline\\\"></i>\\n <i nz-icon nzType=\\\"down\\\" *ngIf=\\\"protocol.active\\\" nzTheme=\\\"outline\\\"></i>\\n </div>\\n\\n <div class=\\\"col\\\">\\n <h6 class=\\\"m-0\\\">\\n <span *ngIf=\\\"protocol.code\\\">{{ protocol.code }} - </span>{{ protocol.name }}\\n </h6>\\n </div>\\n\\n <div class=\\\"col p-2\\\" style=\\\"text-align: end;\\\">\\n <button\\n class=\\\"ok-btn btn-select\\\"\\n nz-button\\n (click)=\\\"selectProtocol(protocol)\\\"\\n [ngStyle]=\\\"{\\n 'background-color': colorSetting?.primary,\\n 'border-color': colorSetting?.primary\\n }\\\"\\n >\\n Adicionar\\n </button>\\n </div>\\n </div>\\n\\n <div class=\\\"row elements\\\" *ngIf=\\\"protocol.active\\\">\\n <div *ngFor=\\\"let phase of protocol.phases\\\" class=\\\"col-12 mt-3\\\">\\n <p class=\\\"bold\\\">\\n <span *ngIf=\\\"phase.name\\\">{{ phase.name }} - </span>{{ phase.category }}\\n </p>\\n <div *ngFor=\\\"let element of phase.elements\\\" class=\\\"pl-4 mt-2\\\">\\n <p><span class=\\\"bold\\\">Composição: </span>{{ element.name }}</p>\\n <p><span class=\\\"bold\\\">Quantidade: </span>{{ element.amount }}</p>\\n <p><span class=\\\"bold\\\">Medida: </span>{{ element.measurement }}</p>\\n </div>\\n </div>\\n </div>\\n </nz-list-item>\\n </nz-list>\\n </div>\\n </div>\\n </nz-list-item>\\n </nz-list>\\n <br />\\n </div>\\n</div>\\n\";","export default \".protocols-modal {\\n position: absolute;\\n width: 100%;\\n left: 0;\\n}\\n.protocols-modal .modal-header {\\n font-family: \\\"probold\\\";\\n}\\n.protocols-modal .protocols {\\n background-color: white;\\n border-color: white;\\n height: 100%;\\n max-height: 500px;\\n overflow: auto;\\n}\\n.protocols-modal .group {\\n border-bottom: 1px solid #dcdcdc;\\n background-color: var(--bg-color-primary);\\n width: 100%;\\n min-height: 40px;\\n color: white;\\n}\\n.protocols-modal .group h6 {\\n color: white;\\n}\\n.protocols-modal .subgroup {\\n border-bottom: 1px solid #dcdcdc;\\n background-color: #dcdcdc;\\n width: 100%;\\n min-height: 40px;\\n color: rgba(0, 0, 0, 0.65);\\n}\\n.protocols-modal .subgroup h6 {\\n color: rgba(0, 0, 0, 0.65);\\n}\\n.protocols-modal .elements {\\n width: 100%;\\n}\\n.protocols-modal i {\\n cursor: pointer;\\n}\\n.protocols-modal .bold {\\n font-weight: bold;\\n}\\n.protocols-modal p {\\n font-size: 14px;\\n margin: 0;\\n}\\n.protocols-modal .btn-select {\\n color: var(--color-white);\\n background-color: var(--bg-color-primary);\\n border-color: var(--bg-color-primary);\\n box-shadow: 0 4px 6px rgba(50, 50, 93, 0.11), 0 1px 3px rgba(0, 0, 0, 0.08);\\n}\\n.protocols-modal .btn-select::-moz-selection {\\n color: var(--color-white);\\n background-color: var(--bg-color-secondary);\\n border-color: var(--bg-color-secondary);\\n}\\n.protocols-modal .btn-select:hover,\\n.protocols-modal .btn-select:active,\\n.protocols-modal .btn-select::selection {\\n color: var(--color-white);\\n background-color: var(--bg-color-secondary);\\n border-color: var(--bg-color-secondary);\\n}\";","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\n\n@Component({\n selector: 'app-form-filter',\n templateUrl: './form-filter.component.html',\n styleUrls: ['./form-filter.component.scss']\n})\nexport class FormFilterComponent implements OnInit {\n @Input() userType: string;\n @Input() tab: string;\n @Input() dependents = [];\n @Output() search = new EventEmitter();\n @Input() isVet = false;\n\n title: string;\n loadingFilter: boolean;\n filters = {\n patient: { createdAt: '', code: '', healthProfessional: '', archived: false, dependent: null },\n healthProfessional: { createdAt: '', code: '', patient: '', responsible: '', archived: false },\n pharmacy: { createdAt: '', dispensationCode: '', cpfBuyer: '', prescriberRegisterNumber: '' }\n };\n\n titles: any = {\n patient: 'Minhas prescrições',\n healthProfessional: 'Histórico de Documentos',\n pharmacy: 'Histórico de Retenções'\n };\n\n constructor() {}\n\n ngOnInit() {}\n\n get filter() {\n return this.filters[this.userType];\n }\n\n submit() {\n this.search.emit(this.filter);\n }\n}\n","export default \"<div class=\\\"form-filter\\\" theme>\\n <h2 class=\\\"title\\\">\\n {{ titles[userType] }}\\n </h2>\\n <br />\\n <form nz-form>\\n <div class=\\\"row\\\" *ngIf=\\\"dependents?.length > 0\\\">\\n <div class=\\\"col-md-3\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"dependent\\\">Dependente</nz-form-label>\\n <nz-form-control>\\n <nz-select\\n id=\\\"dependent\\\"\\n nzPlaceHolder=\\\"Selecione\\\"\\n [(ngModel)]=\\\"filter.dependent\\\"\\n [ngModelOptions]=\\\"{ standalone: true }\\\"\\n (ngModelChange)=\\\"submit()\\\"\\n nzAllowClear\\n >\\n <nz-option nzLabel=\\\"Selecione\\\" [nzValue]=\\\"null\\\"></nz-option>\\n <nz-option\\n *ngFor=\\\"let dependent of dependents\\\"\\n [nzLabel]=\\\"dependent.name\\\"\\n [nzValue]=\\\"dependent._id\\\"\\n ></nz-option>\\n </nz-select>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n </div>\\n\\n <div class=\\\"row align-items-center\\\">\\n <ng-container *ngIf=\\\"userType === 'pharmacy'\\\">\\n <div class=\\\"col-md-3\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"createdAt\\\">Data da Dispensação:</nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n type=\\\"date\\\"\\n placeholder=\\\"Data da Dispensação\\\"\\n [(ngModel)]=\\\"filter.createdAt\\\"\\n name=\\\"createdAt\\\"\\n />\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n <div class=\\\"col-md-3\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"nome\\\">CPF Comprador:</nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n type=\\\"text\\\"\\n placeholder=\\\"ex: 000.000.000-00\\\"\\n mask=\\\"000.000.000-00\\\"\\n [(ngModel)]=\\\"filter.cpfBuyer\\\"\\n name=\\\"cpfBuyer\\\"\\n />\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n <div class=\\\"col-md-3\\\">\\n <nz-form-label nzFor=\\\"nome\\\">Cód. Dispensação:</nz-form-label>\\n <nz-form-item>\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n type=\\\"text\\\"\\n [(ngModel)]=\\\"filter.dispensationCode\\\"\\n placeholder=\\\"ex: Kk0rbLca\\\"\\n name=\\\"dispensationCode\\\"\\n />\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n <div class=\\\"col-md-3\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"nome\\\">Registro:</nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n type=\\\"text\\\"\\n [(ngModel)]=\\\"filter.prescriberRegisterNumber\\\"\\n name=\\\"prescriberRegisterNumber\\\"\\n />\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n </ng-container>\\n <ng-container *ngIf=\\\"userType === 'healthProfessional' || userType === 'patient'\\\">\\n <div [ngClass]=\\\"isVet ? 'col-md-2' : 'col-md-3'\\\">\\n <nz-form-item>\\n <nz-form-label *ngIf=\\\"tab === 'prescription'\\\" nzFor=\\\"createdAt\\\"\\n >Data da Prescrição:</nz-form-label\\n >\\n <nz-form-label *ngIf=\\\"tab === 'attestation'\\\" nzFor=\\\"createdAt\\\"\\n >Data do Atestado:</nz-form-label\\n >\\n <nz-form-label *ngIf=\\\"tab === 'exam'\\\" nzFor=\\\"createdAt\\\">Data do Exame:</nz-form-label>\\n <nz-form-label *ngIf=\\\"tab === 'orientation'\\\" nzFor=\\\"createdAt\\\"\\n >Data do Documento:</nz-form-label\\n >\\n <nz-form-control nzHasFeedback>\\n <input nz-input type=\\\"date\\\" [(ngModel)]=\\\"filter.createdAt\\\" name=\\\"createdAt\\\" />\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n <div class=\\\"col-md-3\\\">\\n <nz-form-label nzFor=\\\"prescriptionCode\\\" *ngIf=\\\"tab === 'prescription'\\\"\\n >Cód. Prescrição:</nz-form-label\\n >\\n <nz-form-label nzFor=\\\"prescriptionCode\\\" *ngIf=\\\"tab === 'attestation'\\\"\\n >Cód. Atestado:</nz-form-label\\n >\\n <nz-form-label nzFor=\\\"prescriptionCode\\\" *ngIf=\\\"tab === 'exam'\\\">Cód. Exame:</nz-form-label>\\n <nz-form-label nzFor=\\\"code\\\" *ngIf=\\\"tab === 'orientation'\\\">Cód. Documento:</nz-form-label>\\n\\n <nz-form-item>\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n type=\\\"text\\\"\\n [(ngModel)]=\\\"filter.code\\\"\\n [placeholder]=\\\"isVet ? 'ex: VET.P00.000.000.000' : 'ex: P00.000.000.000.000'\\\"\\n name=\\\"code\\\"\\n [mask]=\\\"isVet || userType === 'patient' ? 'SAA.A00.000.000.000' : 'S00.000.000.000.000'\\\"\\n />\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n <div [ngClass]=\\\"isVet ? 'col-md-2' : 'col-md-3'\\\" *ngIf=\\\"userType === 'healthProfessional'\\\">\\n <nz-form-label nzFor=\\\"patient\\\">{{ isVet ? 'Pet' : 'Paciente' }}</nz-form-label>\\n <nz-form-item>\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n type=\\\"text\\\"\\n [(ngModel)]=\\\"filter.patient\\\"\\n [placeholder]=\\\"isVet ? 'ex: Rex' : 'ex: Luiz carlos'\\\"\\n name=\\\"patient\\\"\\n />\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n\\n <div class=\\\"col-md-2\\\" *ngIf=\\\"userType === 'healthProfessional' && isVet\\\">\\n <nz-form-label nzFor=\\\"patient\\\">Responsável:</nz-form-label>\\n <nz-form-item>\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n type=\\\"text\\\"\\n [(ngModel)]=\\\"filter.responsible\\\"\\n placeholder=\\\"ex: Luiz carlos\\\"\\n name=\\\"patient\\\"\\n />\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n\\n <div class=\\\"col-md-3\\\" *ngIf=\\\"userType === 'patient'\\\">\\n <nz-form-label nzFor=\\\"healthProfessional\\\">Prescritor:</nz-form-label>\\n <nz-form-item>\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n type=\\\"text\\\"\\n [(ngModel)]=\\\"filter.healthProfessional\\\"\\n placeholder=\\\"ex: Luiz Carlos\\\"\\n name=\\\"healthProfessional\\\"\\n />\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n </ng-container>\\n\\n <div class=\\\"col-auto pt-4\\\" *ngIf=\\\"userType && userType !== 'pharmacy'\\\">\\n <label nz-checkbox name=\\\"archived\\\" [(ngModel)]=\\\"filter.archived\\\" (ngModelChange)=\\\"submit()\\\"\\n >Arquivados</label\\n >\\n </div>\\n\\n <div class=\\\"col-auto pt-4\\\">\\n <nz-form-item>\\n <nz-form-control>\\n <button nz-button type=\\\"button\\\" class=\\\"btn-buscar-historico\\\" (click)=\\\"submit()\\\">\\n <i nz-icon nzType=\\\"search\\\"></i>\\n Buscar\\n </button>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n </div>\\n </form>\\n</div>\\n\";","export default \".form-filter .btn-buscar-historico {\\n background-color: var(--bg-color-primary);\\n color: var(--color-white);\\n}\\n.form-filter .btn-buscar-historico:hover {\\n border-color: var(--bg-color-primary);\\n}\";","import { NgModule } from '@angular/core';\r\nimport { Routes, RouterModule } from '@angular/router';\r\n\r\nconst routes: Routes = [];\r\n\r\n@NgModule({\r\n imports: [RouterModule.forChild(routes)],\r\n exports: [RouterModule]\r\n})\r\nexport class HistoricRoutingModule {}\r\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { DocumentModule } from '@app/modules/document/document.module';\nimport { SharedModule } from '@app/shared';\nimport { NgxLoadingModule } from 'ngx-loading';\nimport { NgxMaskModule } from 'ngx-mask';\nimport { FormFilterComponent } from './form-filter/form-filter.component';\nimport { HistoricRoutingModule } from './historic-routing.module';\nimport { HistoricComponent } from './historic.component';\nimport { ModalCancelRetentionComponent } from './modal-cancel-retention/modal-cancel-retention.component';\n\n@NgModule({\n declarations: [HistoricComponent, FormFilterComponent, ModalCancelRetentionComponent],\n exports: [HistoricComponent, ModalCancelRetentionComponent],\n imports: [\n CommonModule,\n HistoricRoutingModule,\n SharedModule,\n NgxLoadingModule.forRoot({}),\n NgxMaskModule.forRoot(),\n DocumentModule\n ]\n})\nexport class HistoricModule {}\n","import { Orientation } from './../../../../shared/models/orientation';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { HttpClient } from '@angular/common/http';\nimport { environment } from '@env/environment';\n\nconst ORIENTATION_URL = 'orientation';\nexport const EXAM_PRESCRIBER = `orientation/prescriber`;\nconst EXAM_PATIENT = `orientation/patient`;\n@Injectable({\n providedIn: 'root'\n})\nexport class OrientationService {\n constructor(private http: HttpClient) {}\n\n public save(orientation: Orientation) {\n if (orientation.code) {\n return this.http.put(`${environment.apiRoot}${ORIENTATION_URL}/${orientation.code}`, orientation);\n }\n return this.http.post(`${environment.apiRoot}${ORIENTATION_URL}`, orientation);\n }\n\n public getOrientationsByPrescriberUserId(prescriberId: string, filter: any): Observable<any> {\n return this.http.get<any>(`${environment.apiRoot}${EXAM_PRESCRIBER}/${prescriberId}`, {\n params: filter\n });\n }\n\n public getAllPatientExams(patientId: string) {\n return this.http.get<Orientation[]>(`${environment.apiRoot}${ORIENTATION_URL}`, {\n params: { patientId }\n });\n }\n\n getOrientationsByPatientId(patientId: string, filter: any): Observable<any> {\n return this.http.get<any>(`${environment.apiRoot}${EXAM_PATIENT}/${patientId}`, { params: filter });\n }\n\n getOrientation(code: string) {\n return this.http.get(`${environment.apiRoot}${ORIENTATION_URL}/${code}`);\n }\n\n getByFilter(filter: any): Promise<Orientation[]> {\n return this.http\n .get<Orientation[]>(`${environment.apiRoot}${ORIENTATION_URL}/filter`, {\n params: filter\n })\n .toPromise();\n }\n\n delete(orientationId: number): Observable<any> {\n return this.http.delete(`${environment.apiRoot}${ORIENTATION_URL}/${orientationId}`);\n }\n}\n","import { environment } from '@env/environment';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ClientAppService {\n private _apiKey: string;\n\n constructor(private http: HttpClient) {}\n\n set apiKey(apiKey: string) {\n this._apiKey = apiKey;\n }\n\n get apiKey() {\n return this._apiKey;\n }\n\n validateToken(token: string, payloadChecksum: string) {\n const headers = new HttpHeaders().set('x-api-key', this._apiKey);\n return this.http\n .post<any>(`${environment.apiV1}/validate-payload`, { token, payloadChecksum }, { headers })\n .toPromise();\n }\n}\n","import { Injectable } from '@angular/core';\n\ninterface RequestOptions {\n method: string;\n url: string;\n json?: boolean;\n headers?: Object;\n body?: any;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class XmlHttpClient {\n constructor() {}\n\n makeRequest(opts: RequestOptions): Promise<any> {\n return new Promise((resolve, reject) => {\n const xhr = new XMLHttpRequest();\n xhr.open(opts.method, opts.url);\n xhr.onload = function() {\n if (this.status >= 200 && this.status < 300) {\n const json = opts.json || true;\n if (json) {\n resolve(JSON.parse(xhr.response));\n } else {\n resolve(xhr.response);\n }\n } else {\n reject({\n status: this.status,\n statusText: xhr.statusText\n });\n }\n };\n xhr.onerror = function() {\n reject({\n status: this.status,\n statusText: xhr.statusText\n });\n };\n if (opts.headers) {\n Object.keys(opts.headers).forEach(function(key) {\n xhr.setRequestHeader(key, opts.headers[key]);\n });\n }\n let body = opts.body;\n // We'll need to stringify if we've been given an object\n // If we have a string, this is skipped.\n if (body && typeof body === 'object') {\n body = Object.keys(body)\n .map(key => encodeURIComponent(key) + '=' + encodeURIComponent(body[key]))\n .join('&');\n }\n xhr.send(body);\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { XmlHttpClient } from '@app/core/services/xml-http-client.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CepService {\n constructor(private request: XmlHttpClient) {}\n\n consult(cep: string): Promise<any> {\n return this.request\n .makeRequest({ method: 'GET', url: `https://viacep.com.br/ws/${cep}/json` })\n .then();\n }\n}\n","import { Component, EventEmitter, OnInit, Output } from '@angular/core';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { ValidationService } from '@app/core/services/validation.service';\r\nimport { PharmacyService } from '@app/modules/pharmacy/services/pharmacy.service';\r\nimport { BrazilianStates } from '@app/shared/data/Brazilian-states';\r\nimport { nativeAsync } from '@app/shared/decorators/nativeAsync';\r\nimport { BrazilState } from '@app/shared/models';\r\nimport { User } from '@app/shared/models/decodedLoginToken';\r\nimport { AppToastService } from '@app/shared/services/app-toast.service';\r\nimport { BigboostService } from '@app/shared/services/bigboost.service';\r\nimport { markFormGroup } from '@app/utils/markFormGroup';\r\nimport * as moment from 'moment';\r\nimport { NzModalRef } from 'ng-zorro-antd/modal';\r\n\r\n@Component({\r\n selector: 'app-modal-edit-pharmacy-technician',\r\n templateUrl: './modal-edit-pharmacy-technician.component.html',\r\n styleUrls: ['./modal-edit-pharmacy-technician.component.scss']\r\n})\r\nexport class ModalEditPharmacyTechnicianComponent implements OnInit {\r\n user: User;\r\n completeUser: any;\r\n userType: string;\r\n technicalResponsible: any;\r\n loading = false;\r\n\r\n form: FormGroup;\r\n states: BrazilState[] = BrazilianStates;\r\n @Output() updateUserEvent = new EventEmitter<User>();\r\n sexos = [\r\n { label: 'Masculino', value: 'M' },\r\n { label: 'Feminino', value: 'F' }\r\n ];\r\n\r\n constructor(\r\n private formp: FormBuilder,\r\n private pharmacyService: PharmacyService,\r\n private nzModalRef: NzModalRef,\r\n private bigboostService: BigboostService,\r\n private notification: AppToastService\r\n ) {}\r\n\r\n ngOnInit() {\r\n this.buildPharmacyForm();\r\n }\r\n\r\n private buildPharmacyForm() {\r\n this.form = this.formp.group({\r\n name: this.formp.control(\r\n this.isEditing ? this.completeUser.technicalResponsible.name : '',\r\n Validators.required\r\n ),\r\n socialName: [this.isEditing ? this.completeUser.technicalResponsible.socialName : ''],\r\n sex: [this.isEditing ? this.completeUser.technicalResponsible.sex : ''],\r\n birthDate: [this.isEditing ? this.formatBirthDate : null, Validators.required],\r\n cpf: this.formp.control(this.isEditing ? this.completeUser.technicalResponsible.cpf : '', [\r\n Validators.required,\r\n ValidationService.cpfValidator\r\n ]),\r\n crf: this.formp.group({\r\n number: this.formp.control(\r\n this.isEditing ? this.completeUser.technicalResponsible.crf.number : '',\r\n Validators.required\r\n ),\r\n uf: this.formp.control(\r\n this.isEditing ? this.completeUser.technicalResponsible.crf.uf : '',\r\n Validators.required\r\n )\r\n })\r\n });\r\n console.log(this.completeUser);\r\n }\r\n\r\n get isEditing() {\r\n return Boolean(this.completeUser && this.completeUser.technicalResponsible);\r\n }\r\n\r\n get formatBirthDate() {\r\n if (this.completeUser.technicalResponsible && this.completeUser.technicalResponsible.birthDate) {\r\n return moment(this.completeUser.technicalResponsible.birthDate).format('YYYY-MM-DD');\r\n }\r\n return null;\r\n }\r\n\r\n @nativeAsync\r\n async consultCpf() {\r\n this.loading = true;\r\n try {\r\n const { cpf, birthdate: date } = this.form.value;\r\n const dateOfBirth = moment(date, 'DDMMYYYY').format('YYYY-MM-DD');\r\n const consult = await this.bigboostService.consultCpf(cpf, dateOfBirth).toPromise();\r\n if (consult.erroCodigo === 102) {\r\n this.handleErrorMessageStatusCode102();\r\n } else {\r\n const { nome: name, genero: sex } = consult;\r\n this.form.patchValue({\r\n ...this.form.value,\r\n name,\r\n sex\r\n });\r\n }\r\n } catch (error) {\r\n if (error.status === 401) {\r\n this.notification.notify(\r\n 'warning',\r\n 'Aviso',\r\n 'Data de nascimento não corresponde ao CPF informado'\r\n );\r\n } else {\r\n this.notification.notify(\r\n 'warning',\r\n 'Aviso',\r\n 'A importação de dados do cpf está com instabilidade'\r\n );\r\n }\r\n } finally {\r\n this.loading = false;\r\n }\r\n }\r\n\r\n private handleErrorMessageStatusCode102(): void {\r\n this.notification.notify(\r\n 'warning',\r\n 'Aviso',\r\n 'O CNPJ informado não existe em nossos fornecedores. Por favor, confira o número do CNPJ e tente novamente. Em caso de dúvidas, entre em contato com o nosso suporte'\r\n );\r\n }\r\n\r\n @nativeAsync\r\n async submitForm() {\r\n markFormGroup(this.form);\r\n try {\r\n if (this.form.valid) {\r\n this.form.disable();\r\n this.loading = true;\r\n\r\n if (this.userType == 'pharmacy') {\r\n this.completeUser.technicalResponsible = this.form.value;\r\n this.completeUser = await this.pharmacyService\r\n .update(this.completeUser._id, this.completeUser)\r\n .toPromise();\r\n } else {\r\n this.completeUser.technicalResponsible = this.form.value.technicalResponsible;\r\n this.completeUser = await this.pharmacyService\r\n .update(this.completeUser._id, this.completeUser)\r\n .toPromise();\r\n }\r\n this.form.enable();\r\n this.updateUserEvent.emit(this.completeUser);\r\n this.loading = false;\r\n this.onDestroyModal();\r\n }\r\n } catch (error) {\r\n this.loading = false;\r\n }\r\n }\r\n\r\n onDestroyModal() {\r\n this.nzModalRef.destroy();\r\n }\r\n}\r\n","export default \"<header theme>\\r\\n <span class=\\\"title\\\">\\r\\n DADOS DO RESPONSÃVEL TÉCNICO\\r\\n </span>\\r\\n</header>\\r\\n\\r\\n<div class=\\\"container-modal-body\\\">\\r\\n <form nz-form [formGroup]=\\\"form\\\" (ngSubmit)=\\\"submitForm()\\\">\\r\\n <div class=\\\"row\\\">\\r\\n <div [ngClass]=\\\"isEditing ? 'col-md-6' : 'col-md-5'\\\">\\r\\n <nz-form-item>\\r\\n <nz-form-label nzFor=\\\"cpf\\\" theme>CPF<span class=\\\"mandatory\\\"> *</span></nz-form-label>\\r\\n <nz-form-control nzHasFeedback>\\r\\n <input\\r\\n nz-input\\r\\n id=\\\"cpf\\\"\\r\\n formControlName=\\\"cpf\\\"\\r\\n placeholder=\\\"000.000.000-00\\\"\\r\\n mask=\\\"000.000.000-00\\\"\\r\\n theme\\r\\n />\\r\\n <nz-form-explain *ngIf=\\\"form.get('cpf').dirty && form.get('cpf').errors\\\">\\r\\n <ng-container *ngIf=\\\"form.get('cpf').hasError('required')\\\">\\r\\n Campo obrigatório.\\r\\n </ng-container>\\r\\n <ng-container\\r\\n *ngIf=\\\"!form.get('cpf').hasError('required') && form.get('cpf').hasError('cpf')\\\"\\r\\n >\\r\\n CPF inválido.\\r\\n </ng-container>\\r\\n </nz-form-explain>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n </div>\\r\\n <div [ngClass]=\\\"isEditing ? 'col-md-6' : 'col-md-5'\\\">\\r\\n <nz-form-item>\\r\\n <nz-form-label nzFor=\\\"birthDate\\\"\\r\\n >Data Nascimento <span class=\\\"mandatory\\\"> *</span></nz-form-label\\r\\n >\\r\\n <nz-form-control nzHasFeedback>\\r\\n <input nz-input type=\\\"date\\\" placeholder=\\\"00/00/0000\\\" formControlName=\\\"birthDate\\\" theme />\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n </div>\\r\\n <div class=\\\"col-md-2 btn-ok-consult-cpf\\\" *ngIf=\\\"!isEditing\\\">\\r\\n <button\\r\\n nz-button\\r\\n class=\\\"btn-primary\\\"\\r\\n type=\\\"button\\\"\\r\\n (click)=\\\"consultCpf(form.get('cpf').value)\\\"\\r\\n [disabled]=\\\"form.get('cpf').invalid || form.get('birthDate').invalid || loading\\\"\\r\\n >\\r\\n <span *ngIf=\\\"!loading\\\">Buscar</span>\\r\\n <span\\r\\n class=\\\"spinner-border spinner-border-sm\\\"\\r\\n role=\\\"status\\\"\\r\\n aria-hidden=\\\"true\\\"\\r\\n *ngIf=\\\"loading\\\"\\r\\n ></span>\\r\\n </button>\\r\\n </div>\\r\\n </div>\\r\\n <div class=\\\"row\\\">\\r\\n <div class=\\\"col-md-12\\\">\\r\\n <nz-form-item>\\r\\n <nz-form-label nzFor=\\\"name\\\" theme>Nome<span class=\\\"mandatory\\\"> *</span></nz-form-label>\\r\\n <nz-form-control nzErrorTip=\\\"Campo obrigatório, por favor digite o seu nome.\\\" theme>\\r\\n <input type=\\\"text\\\" nz-input formControlName=\\\"name\\\" placeholder=\\\"Nome\\\" maxlength=\\\"128\\\" />\\r\\n <nz-form-explain *ngIf=\\\"form.get('name').dirty && form.get('name').errors\\\">\\r\\n <ng-container *ngIf=\\\"form.get('name').hasError('required')\\\">\\r\\n Por favor digite o nome.\\r\\n </ng-container>\\r\\n </nz-form-explain>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n </div>\\r\\n </div>\\r\\n <div class=\\\"row\\\">\\r\\n <div class=\\\"col-md-8\\\">\\r\\n <nz-form-item>\\r\\n <nz-form-label nzFor=\\\"socialName\\\" theme\\r\\n >Nome para exibição/social<span class=\\\"mandatory\\\"> *</span></nz-form-label\\r\\n >\\r\\n <nz-form-control\\r\\n nzErrorTip=\\\"Campo obrigatório, por favor digite o seu nome para exibição.\\\"\\r\\n theme\\r\\n >\\r\\n <input\\r\\n type=\\\"text\\\"\\r\\n nz-input\\r\\n formControlName=\\\"socialName\\\"\\r\\n placeholder=\\\"Nome social\\\"\\r\\n maxlength=\\\"128\\\"\\r\\n />\\r\\n <nz-form-explain *ngIf=\\\"form.get('socialName').dirty && form.get('socialName').errors\\\">\\r\\n <ng-container *ngIf=\\\"form.get('socialName').hasError('required')\\\">\\r\\n Por favor digite o nome para exibição.\\r\\n </ng-container>\\r\\n </nz-form-explain>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n </div>\\r\\n <div class=\\\"col-md-4\\\">\\r\\n <nz-form-label nzFor=\\\"sexo\\\" theme>Sexo</nz-form-label>\\r\\n <nz-select\\r\\n id=\\\"sexo\\\"\\r\\n formControlName=\\\"sex\\\"\\r\\n nzPlaceHolder=\\\"Selecione\\\"\\r\\n nzDropdownClassName=\\\"sexo-select\\\"\\r\\n theme\\r\\n >\\r\\n <nz-option *ngFor=\\\"let sexo of sexos\\\" [nzLabel]=\\\"sexo?.label\\\" [nzValue]=\\\"sexo?.value\\\">\\r\\n </nz-option>\\r\\n </nz-select>\\r\\n </div>\\r\\n </div>\\r\\n\\r\\n <div class=\\\"row\\\">\\r\\n <div class=\\\"col-md-6\\\" [formGroup]=\\\"form.get('crf')\\\">\\r\\n <nz-form-item>\\r\\n <nz-form-label nzHasFeedback nzFor=\\\"crf\\\" theme\\r\\n >CRF<span class=\\\"mandatory\\\"> *</span></nz-form-label\\r\\n >\\r\\n <nz-form-control nzErrorTip=\\\"Campo obrigatório, por favor digite o seu CRF.\\\">\\r\\n <input type=\\\"text\\\" nz-input formControlName=\\\"number\\\" placeholder=\\\"123456\\\" theme />\\r\\n <nz-form-explain *ngIf=\\\"form.get('crf.number').dirty && form.get('crf.number').errors\\\">\\r\\n <ng-container *ngIf=\\\"form.get('crf.number').hasError('required')\\\">\\r\\n Por favor digite o número do CFR.\\r\\n </ng-container>\\r\\n </nz-form-explain>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n </div>\\r\\n\\r\\n <div class=\\\"col-md-6\\\" [formGroup]=\\\"form.get('crf')\\\">\\r\\n <nz-form-item>\\r\\n <nz-form-label nzFor=\\\"uf\\\" theme>UF<span class=\\\"mandatory\\\"> *</span></nz-form-label>\\r\\n <nz-form-control nzHasFeedback nzErrorTip=\\\"Campo obrigatório, por favor selecione o UF do CRM\\\">\\r\\n <nz-select\\r\\n formControlName=\\\"uf\\\"\\r\\n nzShowSearch\\r\\n nzAllowClear\\r\\n nzDropdownClassName=\\\"uf-select\\\"\\r\\n nzPlaceHolder=\\\"Selecione\\\"\\r\\n theme\\r\\n >\\r\\n <nz-option *ngFor=\\\"let state of states\\\" [nzLabel]=\\\"state?.sigla\\\" [nzValue]=\\\"state?.sigla\\\">\\r\\n </nz-option>\\r\\n </nz-select>\\r\\n <nz-form-explain *ngIf=\\\"form.get('crf.uf').dirty && form.get('crf.uf').errors\\\">\\r\\n <ng-container *ngIf=\\\"form.get('crf.uf').hasError('required')\\\">\\r\\n Campo obrigatório, por favor selecione o UF.\\r\\n </ng-container>\\r\\n </nz-form-explain>\\r\\n </nz-form-control>\\r\\n </nz-form-item>\\r\\n </div>\\r\\n </div>\\r\\n </form>\\r\\n <div class=\\\"d-flex align-items-center justify-content-end mt-3\\\">\\r\\n <button\\r\\n class=\\\"btn btn-icon btn-ok text-capitalize btn-save\\\"\\r\\n type=\\\"button\\\"\\r\\n (click)=\\\"submitForm()\\\"\\r\\n theme\\r\\n [disabled]=\\\"form.invalid && !loading\\\"\\r\\n >\\r\\n <span class=\\\"btn-inner--text\\\">Salvar</span>\\r\\n </button>\\r\\n </div>\\r\\n</div>\\r\\n\";","export default \"header {\\n width: 100%;\\n padding: 16px 24px;\\n border-bottom: 1px solid #e8e8e8;\\n border-radius: 4px 4px 0 0;\\n position: absolute;\\n top: 0;\\n left: 0;\\n background-color: var(--bg-modal-header);\\n color: var(--color-white);\\n}\\nheader .title {\\n margin: 0;\\n font-weight: 500;\\n color: var(--color-white);\\n font-size: 16px;\\n line-height: 22px;\\n word-wrap: break-word;\\n}\\n.container-modal-body {\\n margin-top: 37px;\\n height: 55vh;\\n overflow-x: hidden;\\n overflow-y: auto;\\n}\\n.container-modal-body input {\\n border-radius: 10px;\\n}\\ni {\\n font-size: 24px;\\n}\\ninput::-webkit-input-placeholder {\\n color: #bdc2c7;\\n}\\n.mandatory {\\n color: red;\\n}\\n.btn {\\n font-size: 12px;\\n}\\n.btn-ok-consult-cpf {\\n display: flex;\\n justify-content: flex-end;\\n align-items: center;\\n margin-top: 15px;\\n}\";","import { Injectable } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot } from '@angular/router';\r\nimport { AuthService } from '@app/core/services/auth.service';\r\nimport { environment } from '@env/environment';\r\nimport { of } from 'rxjs';\r\nimport { AppToastService } from '../services/app-toast.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AuthGuard implements CanActivate {\r\n constructor(\r\n private router: Router,\r\n private authService: AuthService,\r\n private notification: AppToastService\r\n ) {}\r\n\r\n canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {\r\n if (environment.maintenance) {\r\n this.router.navigate(['/maintenance']);\r\n return of(false);\r\n }\r\n return this.checkLogin(route);\r\n }\r\n\r\n checkLogin(route: ActivatedRouteSnapshot): boolean {\r\n const isExpired = this.authService.isLoggedOut;\r\n if (isExpired) {\r\n const token = this.authService.token;\r\n if (token) {\r\n this.notification.notify('warning', 'Aviso', 'Acesso expirado. Realize o login novamente');\r\n }\r\n this.logout();\r\n } else {\r\n const user = this.authService.user();\r\n if (!user.features) {\r\n this.authService.refreshToken().subscribe();\r\n }\r\n }\r\n return !isExpired;\r\n }\r\n\r\n logout() {\r\n this.authService.logout();\r\n this.router.navigate(['entry/login']);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, Resolve, RouterStateSnapshot } from '@angular/router';\nimport { AuthService } from '@app/core/services/auth.service';\nimport { HealthProfessionalService } from '@app/modules/health-professional/services/health-professional.service';\nimport { User } from '@app/shared/models/decodedLoginToken';\nimport { Observable, of } from 'rxjs';\nimport { switchMap } from 'rxjs/operators';\nimport { ProfessionalType } from '../models/professional-type.enum';\nimport { UserType } from '../models/user-type.enum';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class IsVeterinarianResolver implements Resolve<boolean> {\n constructor(\n private authService: AuthService,\n private healthProfessionalService: HealthProfessionalService\n ) {}\n\n resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> {\n if (this.user.userType === UserType.HEALTH_PROFESSIONAL) {\n return this.healthProfessionalService\n .getHealthProfessional(this.user._id)\n .pipe(\n switchMap(prescriber =>\n of(prescriber && prescriber.professionalType === ProfessionalType.VETERINARIAN)\n )\n );\n }\n return of(false);\n }\n\n get user(): User {\n return this.authService.user();\n }\n}\n","export default \"<app-alternative-navbar title=\\\"Meus dados\\\" titleIcon=\\\"fa fa-account-box\\\"></app-alternative-navbar>\\n<app-sidebar-menu></app-sidebar-menu>\\n<ng-container [ngSwitch]=\\\"user?.userType\\\">\\n <section\\n class=\\\"section profile section-shaped bg-white page-header\\\"\\n *ngIf=\\\"user?.userType !== 'pharmacy'\\\"\\n >\\n <div class=\\\"container\\\">\\n <div class=\\\"row d-flex flex-column\\\">\\n <div class=\\\"col-md-12\\\">\\n <div class=\\\"media _mb-10\\\" *ngIf=\\\"completeUser\\\">\\n <ngx-photo-editor\\n [imageChanedEvent]=\\\"imageChangedEvent\\\"\\n (imageCropped)=\\\"imageCropped($event)\\\"\\n [darkTheme]=\\\"false\\\"\\n [autoCrop]=\\\"true\\\"\\n [modalCentered]=\\\"true\\\"\\n [roundCropper]=\\\"true\\\"\\n [aspectRatio]=\\\"1\\\"\\n [viewMode]=\\\"2\\\"\\n [resizeToWidth]=\\\"1000\\\"\\n ></ngx-photo-editor>\\n\\n <div>\\n <label for=\\\"avatar-input\\\" class=\\\"input-label\\\">\\n <ngx-avatar\\n *ngIf=\\\"avatarB64\\\"\\n class=\\\"mr-3 avatar\\\"\\n [src]=\\\"avatarB64\\\"\\n [name]=\\\"completeUser.name\\\"\\n size=\\\"100\\\"\\n [style.width]=\\\"'100px'\\\"\\n [style.height]=\\\"'100px'\\\"\\n ></ngx-avatar>\\n <div class=\\\"icon-edit-profile\\\">\\n <img src=\\\"assets/icons/pen-solid.svg\\\" class=\\\"svg\\\" />\\n </div>\\n <img\\n class=\\\"mr-3 avatar\\\"\\n src=\\\"assets/img/default-avatar.png\\\"\\n alt=\\\"Generic placeholder image\\\"\\n *ngIf=\\\"!avatarB64 && completeUser.sex !== 'F'\\\"\\n />\\n\\n <img\\n class=\\\"mr-3 avatar\\\"\\n src=\\\"assets/img/default-avatar.F.png\\\"\\n alt=\\\"Generic placeholder image\\\"\\n *ngIf=\\\"!avatarB64 && completeUser.sex === 'F'\\\"\\n />\\n </label>\\n <input\\n type=\\\"file\\\"\\n id=\\\"avatar-input\\\"\\n (change)=\\\"fileChangeEvent($event)\\\"\\n accept=\\\".jpg,.jpeg,.png\\\"\\n />\\n </div>\\n\\n <div class=\\\"media-body pl-2\\\" *ngIf=\\\"completeUser\\\">\\n <h5 style=\\\"font-size: 32px;\\\" class=\\\"mt-0\\\" *ngSwitchCase=\\\"'healthProfessional'\\\">\\n Olá, {{ doctorName }}\\n </h5>\\n <h5 style=\\\"font-size: 32px;\\\" class=\\\"mt-0\\\" *ngSwitchCase=\\\"'patient'\\\">\\n Olá, {{ completeUser.name }}\\n </h5>\\n <h5 style=\\\"font-size: 32px;\\\" class=\\\"mt-0\\\" *ngSwitchCase=\\\"'pharmacist'\\\">\\n Olá, {{ completeUser.name }}\\n </h5>\\n <h5 style=\\\"font-size: 32px;\\\" class=\\\"mt-0\\\" *ngSwitchCase=\\\"'pharmacy'\\\">\\n Olá, {{ completeUser.fantasyName }}\\n </h5>\\n <p class=\\\"date\\\">{{ today | date: 'fullDate' }} | {{ today | date: 'HH:mm' }}</p>\\n <p class=\\\"crm\\\" *ngSwitchCase=\\\"'healthProfessional'\\\">\\n {{ completeUser.regionalCouncilNumber.label }}:\\n {{ completeUser.regionalCouncilNumber.number }}/{{\\n completeUser.regionalCouncilNumber.uf\\n }}\\n </p>\\n <p class=\\\"crm\\\" *ngSwitchCase=\\\"'pharmacist'\\\">\\n CRF:\\n {{ completeUser.crf.number }}/{{ completeUser.crf.uf }}\\n </p>\\n </div>\\n </div>\\n </div>\\n </div>\\n </div>\\n </section>\\n\\n <section class=\\\"my-data profile\\\">\\n <div class=\\\"container data\\\" *ngIf=\\\"completeUser && user\\\">\\n <div class=\\\"content\\\">\\n <div class=\\\"title-area\\\">\\n <p class=\\\"title\\\">DADOS PESSOAIS</p>\\n <button\\n *ngIf=\\\"user.userType !== 'pharmacy'\\\"\\n class=\\\"edit-button\\\"\\n (click)=\\\"showModalPersonalData()\\\"\\n >\\n <img src=\\\"assets/icons/pen-solid.svg\\\" class=\\\"svg\\\" />\\n </button>\\n <button\\n *ngIf=\\\"user.userType === 'pharmacy'\\\"\\n class=\\\"edit-button\\\"\\n (click)=\\\"showModalPersonalData()\\\"\\n >\\n <img src=\\\"assets/icons/pen-solid.svg\\\" class=\\\"svg\\\" />\\n </button>\\n </div>\\n <div class=\\\"row\\\">\\n <div class=\\\"col-md\\\">\\n <span class=\\\"info-area\\\" *ngIf=\\\"completeUser.cellphone\\\">\\n <img\\n [src]=\\\"\\n completeUser.cellphone.length > 10\\n ? 'assets/icons/cellphone-alt-solid.svg'\\n : 'assets/icons/phone-alt-solid.svg'\\n \\\"\\n class=\\\"svg\\\"\\n />\\n <h5>{{ completeUser.cellphone | formattedTel }}</h5>\\n </span>\\n\\n <span class=\\\"info-area\\\" *ngIf=\\\"completeUser.telephone\\\">\\n <img\\n [src]=\\\"\\n completeUser.telephone.length > 10\\n ? 'assets/icons/cellphone-alt-solid.svg'\\n : 'assets/icons/phone-alt-solid.svg'\\n \\\"\\n class=\\\"svg\\\"\\n />\\n <h5>{{ completeUser.telephone | formattedCel }}</h5>\\n </span>\\n\\n <span class=\\\"info-area\\\">\\n <img src=\\\"assets/icons/user-alt-solid.svg\\\" class=\\\"svg\\\" title=\\\"E-mail de login\\\" />\\n <h5>{{ completeUser.user?.email }}</h5>\\n </span>\\n\\n <span\\n class=\\\"info-area\\\"\\n *ngIf=\\\"\\n completeUser.user?.emailContact &&\\n completeUser.user?.emailContact !== completeUser.user?.email\\n \\\"\\n >\\n <img src=\\\"assets/icons/envelope-solid.svg\\\" class=\\\"svg\\\" title=\\\"E-mail de contato\\\" />\\n <h5>{{ completeUser.user?.emailContact }}</h5>\\n </span>\\n\\n <span *ngIf=\\\"user.userType === 'healthProfessional'\\\" class=\\\"info-area\\\">\\n <img src=\\\"assets/icons/user-md-solid.svg\\\" class=\\\"svg\\\" />\\n <h5>{{ specialties }}</h5>\\n </span>\\n </div>\\n\\n <div class=\\\"col-md\\\">\\n <span class=\\\"info-area\\\" *ngIf=\\\"completeUser.dateOfBirth\\\">\\n <i class=\\\"fa fa-birthday-cake-solid\\\"></i>\\n <h5>{{ completeUser.dateOfBirth | date: 'dd/MM/yyyy':'GMT' }}</h5>\\n </span>\\n\\n <span class=\\\"info-area\\\">\\n <img src=\\\"assets/icons/id-card-alt-solid.svg\\\" class=\\\"svg\\\" />\\n <h5 *ngSwitchCase=\\\"'healthProfessional'\\\">\\n {{ completeUser.regionalCouncilNumber.label }}:\\n {{ completeUser.regionalCouncilNumber.number }}\\n </h5>\\n <h5 *ngSwitchCase=\\\"'patient'\\\">Identidade: {{ completeUser.identity }}</h5>\\n <h5 *ngSwitchCase=\\\"'pharmacist'\\\">Identidade: {{ completeUser.identity }}</h5>\\n <h5 *ngSwitchCase=\\\"'pharmacy'\\\">\\n CNPJ: {{ completeUser.cnpj || completeUser.cnpj_entity | formattedCnpj }}\\n </h5>\\n </span>\\n\\n <span *ngIf=\\\"user.userType === 'patient' && completeUser.sex\\\" class=\\\"info-area\\\">\\n <i *ngIf=\\\"completeUser.sex === 'F'\\\" class=\\\"fa fa-venus\\\"></i>\\n <i *ngIf=\\\"completeUser.sex === 'M'\\\" class=\\\"fa fa-mars\\\"></i>\\n <h5>{{ completeUser.sex === 'F' ? 'Feminino' : 'Masculino' }}</h5>\\n </span>\\n\\n <span *ngIf=\\\"completeUser.professionalType === 'veterinarian'\\\" class=\\\"info-area\\\">\\n <img src=\\\"assets/icons/id-card-alt-solid.svg\\\" class=\\\"svg\\\" />\\n\\n <h5 *ngIf=\\\"user.userType != 'pharmacy'\\\">\\n MAPA Sipeagro:\\n {{\\n completeUser.mapaSipeagro\\n ? (completeUser.mapaSipeagro | formattedMapaSipeagro)\\n : 'Não informado'\\n }}\\n </h5>\\n </span>\\n\\n <span class=\\\"cpf info-area\\\">\\n <img src=\\\"assets/icons/address-card-solid.svg\\\" class=\\\"svg\\\" />\\n <h5 *ngSwitchCase=\\\"'pharmacy'\\\">\\n CPF (responsável legal): {{ completeUser.cpfResponsible | formattedCpf }}\\n </h5>\\n <h5 *ngIf=\\\"user.userType != 'pharmacy'\\\">CPF: {{ completeUser.cpf | formattedCpf }}</h5>\\n </span>\\n </div>\\n </div>\\n <span class=\\\"info-area\\\">\\n <label class=\\\"terms-disclaimer\\\">\\n Acesse aqui os\\n <a class=\\\"terms\\\" [href]=\\\"redirectUrl()\\\" target=\\\"_blank\\\" theme>\\n Termos de Uso\\n </a>\\n e\\n <a class=\\\"terms\\\" [href]=\\\"redirectUrl(true)\\\" target=\\\"_blank\\\" theme>\\n PolÃtica de Privacidade\\n </a>\\n </label>\\n </span>\\n </div>\\n\\n <div class=\\\"content\\\" *ngIf=\\\"user.userType === 'healthProfessional'\\\">\\n <hr />\\n <div class=\\\"title-area\\\">\\n <p class=\\\"title\\\">DADOS EMPRESARIAIS</p>\\n </div>\\n <table>\\n <ngx-photo-editor\\n [imageChanedEvent]=\\\"logoChangedEvent\\\"\\n (imageCropped)=\\\"logoCropped($event)\\\"\\n [imageUrl]=\\\"imageURL\\\"\\n [darkTheme]=\\\"false\\\"\\n [autoCrop]=\\\"false\\\"\\n [modalCentered]=\\\"false\\\"\\n [roundCropper]=\\\"false\\\"\\n [aspectRatio]=\\\"0\\\"\\n [viewMode]=\\\"1\\\"\\n [resizeToWidth]=\\\"300\\\"\\n ></ngx-photo-editor>\\n <ng-container *ngFor=\\\"let data of completeUser.commercialData; index as i\\\">\\n <tr>\\n <th>\\n <img src=\\\"assets/icons/briefcase-solid.svg\\\" />\\n </th>\\n <th>\\n <h5 class=\\\"m-3\\\">{{ data.name }}</h5>\\n </th>\\n <th>\\n <a *ngIf=\\\"data.logo\\\" (click)=\\\"showLogo(data.logo, data._id)\\\" title=\\\"Visualizar Logo\\\">\\n <img src=\\\"assets/icons/image-solid.svg\\\" class=\\\"svg\\\" />\\n </a>\\n <button id=\\\"button-edit-business\\\" (click)=\\\"showModalBusinessData(false, data, i)\\\">\\n <img src=\\\"assets/icons/pen-solid.svg\\\" class=\\\"svg\\\" />\\n </button>\\n <button\\n id=\\\"button-remove-business\\\"\\n class=\\\"pt-1\\\"\\n (click)=\\\"showModalRemoveBusinessData(i)\\\"\\n *ngIf=\\\"completeUser.commercialData.length > 1\\\"\\n >\\n <i class=\\\"fa fa-trash-solid\\\"></i>\\n </button>\\n </th>\\n </tr>\\n <tr>\\n <th colspan=\\\"4\\\" class=\\\"pb-3\\\">\\n <label *ngIf=\\\"!data.logo\\\" [for]=\\\"'logo' + i\\\" class=\\\"input-label\\\">Adicionar Logo</label>\\n <label *ngIf=\\\"data.logo\\\" [for]=\\\"'logo' + i\\\" class=\\\"input-label\\\">Atualizar Logo</label>\\n <label *ngIf=\\\"data.logo\\\" class=\\\"input-label\\\" (click)=\\\"removeLogo(data._id)\\\"\\n > | Excluir Logo</label\\n >\\n <app-popover-button\\n content=\\\"A imagem do logotipo deve ser um arquivo JPEG de tamanho máximo de 1MB. Dimensão sugerida 300x120 pixels.\\\"\\n ></app-popover-button>\\n <input\\n [id]=\\\"'logo' + i\\\"\\n class=\\\"logo-img\\\"\\n type=\\\"file\\\"\\n (click)=\\\"$event.target.value = ''\\\"\\n (change)=\\\"addLogo($event, data._id)\\\"\\n accept=\\\".jpg,.jpeg,.png\\\"\\n />\\n </th>\\n </tr>\\n </ng-container>\\n </table>\\n\\n <div class=\\\"add-data\\\">\\n <span (click)=\\\"showModalBusinessData(true)\\\">\\n Adicionar dados empresariais\\n </span>\\n </div>\\n </div>\\n\\n <div class=\\\"content\\\" *ngIf=\\\"user.userType !== 'healthProfessional'\\\">\\n <hr />\\n <div *ngIf=\\\"!completeUser.address\\\" class=\\\"add-data\\\">\\n <span class=\\\"add-data\\\" (click)=\\\"showModalAddressData()\\\">\\n Adicionar Endereço\\n </span>\\n </div>\\n <div class=\\\"title-area\\\" *ngIf=\\\"completeUser.address\\\">\\n <div class=\\\"title-address\\\">\\n <img src=\\\"assets/icons/house-user-solid.svg\\\" class=\\\"svg\\\" />\\n <p class=\\\"title\\\">ENDEREÇO</p>\\n </div>\\n <button class=\\\"edit-button\\\" (click)=\\\"showModalAddressData()\\\">\\n <img src=\\\"assets/icons/pen-solid.svg\\\" class=\\\"svg\\\" />\\n </button>\\n </div>\\n\\n <div class=\\\"row address\\\" *ngIf=\\\"completeUser.address\\\">\\n <div class=\\\"col-md\\\">\\n <div class=\\\"address-info-area\\\">\\n <span class=\\\"address-title\\\">CEP: </span>\\n <h5>{{ completeUser.address.cep | mask: '00.000-000' }}</h5>\\n </div>\\n\\n <div class=\\\"address-info-area\\\">\\n <span class=\\\"address-title\\\">Logradouro: </span>\\n <h5 class=\\\"info\\\">\\n {{ completeUser.address.street }}\\n </h5>\\n </div>\\n\\n <div class=\\\"address-info-area\\\">\\n <span class=\\\"address-title\\\">Número: </span>\\n <h5 class=\\\"info\\\">\\n {{ completeUser.address.number }}\\n </h5>\\n </div>\\n\\n <div class=\\\"address-info-area\\\">\\n <span class=\\\"address-title\\\">Complemento: </span>\\n <h5 *ngIf=\\\"completeUser.address.complement\\\" class=\\\"info\\\">\\n {{ completeUser.address.complement }}\\n </h5>\\n <h5 *ngIf=\\\"!completeUser.address.complement\\\">-</h5>\\n </div>\\n </div>\\n <div class=\\\"col-md\\\">\\n <div class=\\\"address-info-area\\\">\\n <span class=\\\"address-title\\\">Bairro: </span>\\n <h5 class=\\\"info\\\">\\n {{ completeUser.address.neighborhood }}\\n </h5>\\n </div>\\n\\n <div class=\\\"address-info-area\\\">\\n <span class=\\\"address-title\\\">Cidade: </span>\\n <h5 class=\\\"info\\\">\\n {{ completeUser.address.city }}\\n </h5>\\n </div>\\n\\n <div class=\\\"address-info-area\\\">\\n <span class=\\\"address-title\\\">UF: </span>\\n <h5 class=\\\"info\\\">\\n {{ completeUser.address.uf }}\\n </h5>\\n </div>\\n </div>\\n </div>\\n\\n <div *ngSwitchCase=\\\"'patient'\\\">\\n <hr />\\n <div class=\\\"title-area\\\">\\n <div class=\\\"title-address\\\">\\n <img src=\\\"assets/icons/hand-holding-medical.svg\\\" class=\\\"svg\\\" />\\n <p class=\\\"title\\\">DEPENDENTES</p>\\n </div>\\n </div>\\n <div class=\\\"row\\\">\\n <div class=\\\"mt-4 col-12 col-md-6\\\">\\n <p class=\\\"title\\\">MENORES</p>\\n <ng-container *ngIf=\\\"completeUser.dependents.length > 0; else noDependents\\\">\\n <div *ngFor=\\\"let dependent of completeUser.dependents\\\">\\n <span class=\\\"info-area\\\">\\n <h5 class=\\\"mr-3\\\">{{ dependent.name }}</h5>\\n <button class=\\\"edit-button\\\" (click)=\\\"editDependent(dependent)\\\">\\n <img src=\\\"assets/icons/pen-solid.svg\\\" class=\\\"svg\\\" />\\n </button>\\n </span>\\n </div>\\n </ng-container>\\n <ng-template #noDependents>\\n <p>Nenhum menor cadastrado</p>\\n </ng-template>\\n <hr />\\n <app-add-button\\n class=\\\"col-6\\\"\\n label=\\\"Adicionar Menor\\\"\\n (click)=\\\"addDependent($event)\\\"\\n ></app-add-button>\\n </div>\\n\\n <div class=\\\"mt-4 col-12 col-md-6\\\">\\n <p class=\\\"title\\\">PETS</p>\\n <ng-container *ngIf=\\\"completeUser?.pets?.length > 0; else noPets\\\">\\n <div *ngFor=\\\"let pet of completeUser.pets\\\">\\n <span class=\\\"info-area\\\">\\n <h5 class=\\\"mr-3\\\">{{ pet.name }}</h5>\\n <button class=\\\"edit-button\\\" (click)=\\\"editPet(pet)\\\">\\n <img src=\\\"assets/icons/pen-solid.svg\\\" class=\\\"svg\\\" />\\n </button>\\n </span>\\n </div>\\n </ng-container>\\n <ng-template #noPets>\\n <p>Nenhum pet cadastrado</p>\\n </ng-template>\\n <hr />\\n <app-add-button class=\\\"col-6\\\" label=\\\"Adicionar Pet\\\" (click)=\\\"addPet()\\\"></app-add-button>\\n </div>\\n </div>\\n </div>\\n </div>\\n\\n <div class=\\\"content\\\" *ngSwitchCase=\\\"'pharmacy'\\\">\\n <hr />\\n <div class=\\\"title-area\\\">\\n <p class=\\\"title\\\">DADOS DO RESPONSÃVEL TÉCNICO</p>\\n <button class=\\\"edit-button\\\">\\n <img src=\\\"assets/icons/pen-solid.svg\\\" class=\\\"svg\\\" (click)=\\\"showModalPharmacyData()\\\" />\\n </button>\\n </div>\\n <div class=\\\"row\\\">\\n <div class=\\\"col\\\" *ngIf=\\\"completeUser.technicalResponsible as technicalResponsible\\\">\\n <span class=\\\"info-area\\\">\\n <img src=\\\"assets/icons/user-alt-solid.svg\\\" class=\\\"svg\\\" />\\n <h5>{{ technicalResponsible.name }}</h5>\\n </span>\\n <span class=\\\"info-area\\\">\\n <img src=\\\"assets/icons/address-card-solid.svg\\\" class=\\\"svg\\\" />\\n <h5>{{ technicalResponsible.cpf | formattedCpf }}</h5>\\n </span>\\n <span class=\\\"info-area\\\">\\n <img src=\\\"assets/icons/id-card-alt-solid.svg\\\" class=\\\"svg\\\" />\\n <h5>\\n {{ technicalResponsible.crf.number }} -\\n {{ technicalResponsible.crf.uf }}\\n </h5>\\n </span>\\n </div>\\n </div>\\n\\n <hr />\\n\\n <div class=\\\"title-area\\\">\\n <p class=\\\"title\\\">DADOS ESPECÃFICOS</p>\\n <button class=\\\"edit-button\\\">\\n <img src=\\\"assets/icons/pen-solid.svg\\\" class=\\\"svg\\\" (click)=\\\"showModalCovid()\\\" />\\n </button>\\n </div>\\n <div class=\\\"row\\\">\\n <div class=\\\"col\\\">\\n <span class=\\\"info-area\\\">\\n <img src=\\\"assets/icons/Covid-19 arte.png\\\" class=\\\"svg\\\" />\\n <h5 *ngIf=\\\"completeUser.covid == 1\\\" class=\\\"info\\\">\\n Sua farmácia realiza Teste COVID-19? Sim, realiza\\n </h5>\\n <h5 *ngIf=\\\"completeUser.covid == 2\\\" class=\\\"info\\\">\\n Sua farmácia realiza Teste COVID-19? Não realiza\\n </h5>\\n <h5 *ngIf=\\\"completeUser.covid == 3\\\" class=\\\"info\\\">\\n Sua farmácia realiza Teste COVID-19? Não realiza, mas gostaria de realizar\\n </h5>\\n <h5 *ngIf=\\\"!completeUser.covid\\\" class=\\\"info\\\">\\n Sua farmácia realiza Teste COVID-19? Sem resposta\\n </h5>\\n </span>\\n </div>\\n </div>\\n </div>\\n\\n <div\\n class=\\\"content\\\"\\n *ngIf=\\\"this.cipFeature && (user.userType === 'pharmacy' || user.userType === 'pharmacist')\\\"\\n >\\n <hr />\\n\\n <div class=\\\"title-area\\\">\\n <p class=\\\"title\\\">TERMO DE CONSENTIMENTO PARA TRATAMENTO DE DADOS (PROJETO PILOTO)</p>\\n <button class=\\\"edit-button\\\">\\n <img src=\\\"assets/icons/pen-solid.svg\\\" class=\\\"svg\\\" (click)=\\\"showModalCip()\\\" />\\n </button>\\n </div>\\n <div class=\\\"row\\\">\\n <div class=\\\"col\\\">\\n <p class=\\\"info-area\\\">Aceito? {{ this.cipFeatureAccepted }}</p>\\n </div>\\n </div>\\n </div>\\n </div>\\n </section>\\n</ng-container>\\n<ngx-loading [show]=\\\"loading\\\" [config]=\\\"{ backdropBorderRadius: '3px' }\\\"></ngx-loading>\\n<app-modal-cip-acceptance\\n [isVisible]=\\\"isModalCipVisible\\\"\\n (isVisibleChange)=\\\"changeCipVisibility($event)\\\"\\n [code]=\\\"this.cipFeature?.code\\\"\\n></app-modal-cip-acceptance>\\n\\n<nz-modal\\n [nzVisible]=\\\"isPetDataVisible\\\"\\n nzTitle=\\\"Dados do Pet\\\"\\n (nzOnCancel)=\\\"closePetModal()\\\"\\n [nzFooter]=\\\"modalFooter\\\"\\n>\\n <ng-container>\\n <p>Nome: {{ pet?.name | titlecase }}</p>\\n <p>Espécie: {{ pet?.species | titlecase }}</p>\\n <p>Raça: {{ pet?.race ? pet.race : 'Não informado' }}</p>\\n <p>\\n Data de Nascimento:\\n {{ pet?.dateOfBirth ? (pet?.dateOfBirth | date: 'dd/MM/yyyy') : 'Não informado' }}\\n </p>\\n <p>Peso: {{ pet?.weight ? pet?.weight : 'Não informado' }}</p>\\n <p>Pelagem: {{ pet?.fur ? pet?.fur : 'Não informado' }}</p>\\n <p>Catração: {{ pet?.castration ? 'Sim' : 'Não' }}</p>\\n <p>Temperamento: {{ pet?.temperament ? pet?.temperament : 'Não informado' }}</p>\\n <p>Nº do microchip: {{ pet?.microchipNumber ? pet?.microchipNumber : 'Não informado' }}</p>\\n </ng-container>\\n</nz-modal>\\n\\n<ng-template #modalFooter>\\n <button nz-button type=\\\"button\\\" class=\\\"btn\\\" (click)=\\\"closePetModal()\\\">\\n <span>Ok</span>\\n </button>\\n</ng-template>\\n\";","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormBuilder, FormControl, Validators } from '@angular/forms';\nimport { ValidationService } from '@app/core/services/validation.service';\nimport { markFormGroup } from '@app/utils';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\n\n@Component({\n selector: 'app-modal-dependent-form',\n templateUrl: './modal-dependent-form.component.html',\n styleUrls: ['./modal-dependent-form.component.scss']\n})\nexport class ModalDependentFormComponent implements OnInit {\n @Input() responsible: any;\n @Input() dependent: any;\n @Output() submit = new EventEmitter<any>();\n\n constructor(private fb: FormBuilder, private modalRef: BsModalRef) {}\n\n loading = false;\n\n form = this.fb.group({\n _id: [undefined],\n name: ['', [Validators.required]],\n fullname: ['', [Validators.required]],\n cpf: ['', [Validators.required, ValidationService.cpfValidator]],\n sex: ['', Validators.required],\n dateOfBirth: [null, [Validators.required, ModalDependentFormComponent.validateUnderAge]],\n membership: this.fb.group({\n mothersName: ['']\n }),\n pendency: [null],\n verifiedCpf: [false]\n });\n\n static validateUnderAge(control: FormControl): { [key: string]: boolean } | null {\n const birthdate = new Date(control.value);\n const diffDate = Date.now() - birthdate.getTime();\n const ageDate = new Date(diffDate);\n const years = Math.abs(ageDate.getUTCFullYear() - 1970);\n if (years >= 18) {\n return { isNotMinor: true };\n }\n\n return null;\n }\n\n ngOnInit() {\n if (this.dependent) {\n this.form.patchValue(this.dependent);\n const date = new Date(this.dependent.dateOfBirth);\n this.form.get('dateOfBirth').setValue(date.toISOString().substring(0, 10));\n }\n\n this.form.get('name').valueChanges.subscribe(name => {\n this.form.get('fullname').setValue(name);\n });\n }\n\n get currentDate() {\n const now = new Date();\n return this.formatDate(now);\n }\n\n get minDate() {\n const now = new Date();\n now.setFullYear(now.getFullYear() - 18);\n return this.formatDate(now);\n }\n\n private formatDate(now: Date) {\n const dd = String(now.getDate()).padStart(2, '0');\n const mm = String(now.getMonth() + 1).padStart(2, '0');\n const yyyy = now.getFullYear();\n return `${yyyy}-${mm}-${dd}`;\n }\n\n checkCpf(value: boolean) {\n if (value) {\n this.form.get('cpf').setValue(null);\n this.form.get('cpf').disable();\n this.form.get('cpf').setValidators(ValidationService.cpfValidator);\n } else {\n this.form.get('cpf').setValue('');\n this.form.get('cpf').enable();\n this.form.get('cpf').setValidators([Validators.required, ValidationService.cpfValidator]);\n }\n }\n\n checkResponsibleName(value: boolean) {\n if (value) {\n this.form.get('membership.mothersName').setValue(this.responsible.name);\n this.form.get('membership.mothersName').disable();\n } else {\n this.form.get('membership.mothersName').enable();\n }\n }\n\n submitForm() {\n markFormGroup(this.form);\n\n if (this.form.valid) {\n this.submit.emit(this.form.value);\n }\n }\n}\n","export default \"<div class=\\\"modal-body\\\">\\n <form nz-form [formGroup]=\\\"form\\\">\\n <div class=\\\"row\\\">\\n <nz-form-item class=\\\"col-md-7\\\">\\n <div class=\\\"row\\\">\\n <div class=\\\"col-6\\\">\\n <nz-form-label nzFor=\\\"cpf\\\" theme\\n >CPF <span class=\\\"mandatory\\\" *ngIf=\\\"!noCpf.nzChecked\\\">*</span></nz-form-label\\n >\\n </div>\\n <div class=\\\"col\\\">\\n <label #noCpf nz-checkbox (nzCheckedChange)=\\\"checkCpf($event)\\\" style=\\\"font-size: 14px;\\\"\\n >Sem CPF</label\\n >\\n </div>\\n </div>\\n <nz-form-control nzHasFeedback>\\n <nz-input-group>\\n <input\\n type=\\\"text\\\"\\n nz-input\\n formControlName=\\\"cpf\\\"\\n placeholder=\\\"000.000.000-00\\\"\\n mask=\\\"000.000.000-00\\\"\\n theme\\n />\\n </nz-input-group>\\n <nz-form-explain *ngIf=\\\"form.get('cpf').dirty && form.get('cpf').errors\\\">\\n <ng-container *ngIf=\\\"form.get('cpf').hasError('required')\\\">\\n O CPF é obrigatório\\n </ng-container>\\n <ng-container\\n *ngIf=\\\"!form.get('cpf').hasError('required') && form.get('cpf').hasError('cpf')\\\"\\n >\\n CPF inválido, por favor digite um CPF válido.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n\\n <nz-form-item class=\\\"col-md-5\\\">\\n <nz-form-label nzFor=\\\"dateOfBirth\\\" theme\\n >Data de nascimento <span class=\\\"mandatory\\\">*</span>\\n </nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n id=\\\"dateOfBirth\\\"\\n type=\\\"date\\\"\\n formControlName=\\\"dateOfBirth\\\"\\n [max]=\\\"currentDate\\\"\\n [min]=\\\"minDate\\\"\\n theme\\n />\\n <nz-form-explain *ngIf=\\\"form.get('dateOfBirth').dirty && form.get('dateOfBirth').errors\\\">\\n <ng-container *ngIf=\\\"form.get('dateOfBirth').hasError('required')\\\">\\n Campo obrigatório, por favor digite sua data de nascimento.\\n </ng-container>\\n <ng-container\\n *ngIf=\\\"\\n !form.get('dateOfBirth').hasError('required') &&\\n form.get('dateOfBirth').hasError('isNotMinor')\\n \\\"\\n >\\n Dependente deve ser menor de idade.\\n </ng-container>\\n <ng-container\\n *ngIf=\\\"\\n !form.get('dateOfBirth').hasError('required') &&\\n !form.get('dateOfBirth').hasError('isNotMinor') &&\\n form.get('dateOfBirth').errors\\n \\\"\\n >\\n Data de nascimento inválida.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n\\n <nz-form-item class=\\\"col-md-12\\\">\\n <nz-form-label nzFor=\\\"name\\\" theme>Nome <span class=\\\"mandatory\\\">*</span></nz-form-label>\\n <nz-form-control>\\n <nz-input-group>\\n <input\\n theme\\n type=\\\"text\\\"\\n nz-input\\n placeholder=\\\"Digite o nome do paciente\\\"\\n formControlName=\\\"name\\\"\\n maxlength=\\\"128\\\"\\n />\\n </nz-input-group>\\n <nz-form-explain *ngIf=\\\"form.get('name').dirty && form.get('name').errors\\\">\\n <ng-container *ngIf=\\\"form.get('name').hasError('required')\\\">\\n Campo obrigatório, por favor digite o seu nome e sobrenome.\\n </ng-container>\\n <ng-container\\n *ngIf=\\\"!form.get('name').hasError('required') && form.get('name').hasError('nome')\\\"\\n >\\n Nome inválido.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n\\n <nz-form-item class=\\\"col-6\\\">\\n <nz-form-label nzFor=\\\"sex\\\" theme>Sexo<span class=\\\"mandatory\\\"> *</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <select formControlName=\\\"sex\\\" id=\\\"sex\\\" nz-input nzPlaceHolder=\\\"Selecione\\\" theme>\\n <option value=\\\"M\\\">Masculino</option>\\n <option value=\\\"F\\\">Feminino</option>\\n </select>\\n </nz-form-control>\\n </nz-form-item>\\n\\n <div\\n class=\\\"col-12\\\"\\n [formGroup]=\\\"form.get('membership')\\\"\\n *ngIf=\\\"form.get('membership.mothersName') as mothersName\\\"\\n >\\n <nz-form-item>\\n <div class=\\\"row\\\">\\n <div class=\\\"col-6\\\">\\n <nz-form-label nzFor=\\\"mothersName\\\" theme>Nome da mãe</nz-form-label>\\n </div>\\n <div class=\\\"col\\\">\\n <label\\n #responsibleName\\n nz-checkbox\\n (nzCheckedChange)=\\\"checkResponsibleName($event)\\\"\\n style=\\\"font-size: 14px;\\\"\\n >Repetir seu nome</label\\n >\\n </div>\\n </div>\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n placeholder=\\\"Digite o nome da mãe\\\"\\n formControlName=\\\"mothersName\\\"\\n id=\\\"mothersName\\\"\\n maxlength=\\\"128\\\"\\n theme\\n />\\n <nz-form-explain *ngIf=\\\"mothersName.dirty && mothersName.errors\\\">\\n <ng-container *ngIf=\\\"mothersName.hasError('required')\\\">\\n Campo obrigatório, por favor digite o nome da mãe.\\n </ng-container>\\n <ng-container\\n *ngIf=\\\"\\n !mothersName.hasError('required') && mothersName.hasError('membership.mothersName')\\n \\\"\\n >\\n Nome inválido.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n </div>\\n </form>\\n\\n <div class=\\\"row\\\">\\n <div class=\\\"col-8\\\">\\n <ng-template #indicatorTemplate><i nz-icon nzType=\\\"loading\\\"></i></ng-template>\\n <nz-spin *ngIf=\\\"loading\\\" nzSimple [nzIndicator]=\\\"indicatorTemplate\\\"> </nz-spin>\\n </div>\\n\\n <div class=\\\"col-4\\\">\\n <button\\n type=\\\"button\\\"\\n class=\\\"btn btn-icon btn-success btn-add text-capitalize btn-save\\\"\\n (click)=\\\"submitForm()\\\"\\n >\\n <span class=\\\"btn-inner--text\\\">Salvar</span>\\n </button>\\n </div>\\n </div>\\n</div>\\n\";","export default \".modal-body {\\n padding-bottom: 40px;\\n}\\n.modal-body input {\\n border-radius: 10px;\\n}\\n.modal-body .btn-save {\\n float: right;\\n padding-top: 7px;\\n padding-bottom: 7px;\\n margin-top: 13px;\\n margin-bottom: 5px;\\n}\\n.modal-body .doctor-information {\\n padding-left: 0;\\n}\\n.modal-body i {\\n font-size: 24px;\\n}\\n.modal-body .mandatory {\\n color: red;\\n}\\n.modal-body input::-webkit-input-placeholder {\\n color: #bdc2c7;\\n}\\n::ng-deep .ant-select-selection {\\n height: 100%;\\n}\";","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { PharmacyService } from '@app/modules/pharmacy/services/pharmacy.service';\nimport { nativeAsync } from '@app/shared/decorators/nativeAsync';\nimport { User } from '@app/shared/models/decodedLoginToken';\nimport { AppToastService } from '@app/shared/services/app-toast.service';\nimport { NzModalRef } from 'ng-zorro-antd/modal';\n\n@Component({\n selector: 'app-modal-edit-pharmacy-covid',\n templateUrl: './modal-edit-pharmacy-covid.component.html',\n styleUrls: ['./modal-edit-pharmacy-covid.component.scss']\n})\nexport class ModalEditPharmacyCovidComponent implements OnInit {\n @Input() completeUser: any;\n @Output() updateUserEvent = new EventEmitter<User>();\n\n covidForm: FormGroup;\n\n constructor(\n private fb: FormBuilder,\n private pharmacyService: PharmacyService,\n private nzModalRef: NzModalRef,\n private notification: AppToastService\n ) {}\n\n ngOnInit() {\n this.covidForm = this.fb.group({\n covid: [`${this.completeUser.covid}`, Validators.required]\n });\n }\n\n @nativeAsync\n async save(param) {\n if (param === '') {\n this.notification.notify('warning', 'Atenção', 'Valor do teste Covid não informado');\n } else {\n try {\n const pharmacyId = this.completeUser._id;\n this.completeUser.covid = this.covidForm.get('covid').value;\n await this.pharmacyService.update(pharmacyId, this.completeUser).toPromise();\n this.notification.notify('success', 'Sucesso', 'Informação atualizada com sucesso.');\n this.updateUserEvent.emit(this.completeUser);\n this.close();\n } catch (err) {\n console.error(err);\n this.notification.notify('error', 'Erro', 'Erro ao atualizar informação');\n }\n }\n }\n\n close() {\n this.nzModalRef.close();\n }\n}\n","export default \"<div theme>\\n <div class=\\\"modal-header\\\">\\n <img src=\\\"assets/icons/Covid-19 arte.png\\\" class=\\\"gfg\\\" />\\n <h4 class=\\\"modal-title pull-left text-white\\\">MOVIMENTO COVID-19 : Teste Rápido</h4>\\n <button type=\\\"button\\\" class=\\\"close pull-right\\\" aria-label=\\\"Close\\\" (click)=\\\"close()\\\">\\n <span aria-hidden=\\\"true\\\">×</span>\\n </button>\\n </div>\\n <div class=\\\"container\\\">\\n <form nz-form class=\\\"row justify-content-center\\\" [formGroup]=\\\"covidForm\\\">\\n <p>\\n Com o objetivo de ajudar no combate ao Covid-19, estamos mapeando as farmácias e drogarias que\\n oferecem o teste rápido em suas lojas.\\n </p>\\n <h5>Sua farmácia realiza o Teste COVID-19?</h5>\\n <div>\\n <div class=\\\"form-input\\\">\\n <nz-form-label nzFor=\\\"covid\\\" theme></nz-form-label>\\n <nz-radio-group id=\\\"covid\\\" formControlName=\\\"covid\\\" theme>\\n <h4>\\n <label nz-radio nzValue=\\\"1\\\" (click)=\\\"save(1)\\\">Sim, realizo</label>\\n <label nz-radio nzValue=\\\"2\\\" (click)=\\\"save(2)\\\">Não realizo</label>\\n <label nz-radio nzValue=\\\"3\\\" (click)=\\\"save(3)\\\">Não realizo, mas gostaria de ter</label>\\n </h4>\\n </nz-radio-group>\\n </div>\\n </div>\\n </form>\\n </div>\\n</div>\\n\";","export default \"\";","import { Observable, of } from 'rxjs';\r\nimport { ChangeDetectorRef, Component, OnInit } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { AuthService } from '@app/core/services/auth.service';\r\nimport { ModalEditPersonalDataComponent } from '@app/modules/dashboard/modal-edit-personal-data/modal-edit-personal-data.component';\r\nimport { HealthProfessionalService } from '@app/modules/health-professional/services/health-professional.service';\r\nimport { ModalEditPetComponent } from '@app/modules/patients/pages/modal-edit-pet/modal-edit-pet.component';\r\nimport { PatientsService } from '@app/modules/patients/services/patients.service';\r\nimport { PetPatientService } from '@app/modules/patients/services/pet-patient.service';\r\nimport { PharmacistService } from '@app/modules/pharmacist/services/pharmacist.service';\r\nimport { PharmacyService } from '@app/modules/pharmacy/services/pharmacy.service';\r\nimport { UserService } from '@app/modules/user/user.service';\r\nimport { BrazilianStates } from '@app/shared/data/Brazilian-states';\r\nimport { BrazilState, HealthProfessional } from '@app/shared/models';\r\nimport { User } from '@app/shared/models/decodedLoginToken';\r\nimport { PetPatient } from '@app/shared/models/pet-patient';\r\nimport { AppToastService } from '@app/shared/services/app-toast.service';\r\nimport { NzModalService } from 'ng-zorro-antd/modal';\r\nimport { CroppedEvent } from 'ngx-photo-editor';\r\nimport { ModalDependentFormComponent } from '../modal-dependent-form/modal-dependent-form.component';\r\nimport { ModalEditAddressDataComponent } from '../modal-edit-address-data/modal-edit-address-data.component';\r\nimport { ModalEditPharmacyCovidComponent } from '../modal-edit-pharmacy-covid/modal-edit-pharmacy-covid.component';\r\nimport { ModalEditPharmacyTechnicianComponent } from '../modal-edit-pharmacy-technician/modal-edit-pharmacy-technician.component';\r\nimport { ModalPetFormComponent } from '../modal-pet-form/modal-pet-form.component';\r\nimport { nativeAsync } from '@app/shared/decorators/nativeAsync';\r\nimport { BsModalService } from 'ngx-bootstrap/modal';\r\n\r\n@Component({\r\n selector: 'app-my-data',\r\n templateUrl: './my-data.component.html',\r\n styleUrls: ['./my-data.component.scss', '../../dashboard/pages/index/index.component.scss']\r\n})\r\nexport class MyDataComponent implements OnInit {\r\n states: BrazilState[] = BrazilianStates;\r\n completeUser: any;\r\n imageChangedEvent: any;\r\n logoChangedEvent: any;\r\n imageURL: any;\r\n avatarB64: string;\r\n loading = true;\r\n isModalCipVisible = false;\r\n showModal = '';\r\n isPetDataVisible = false;\r\n pet: PetPatient;\r\n\r\n private commercialId: any;\r\n\r\n private readonly MAX_FILE_SIZE_BYTES = 5 * 1024 * 1024; // 5 MB\r\n\r\n constructor(\r\n private router: Router,\r\n private authService: AuthService,\r\n private healthProfessionalService: HealthProfessionalService,\r\n private modalService: NzModalService,\r\n private patientService: PatientsService,\r\n private userService: UserService,\r\n private pharmacyService: PharmacyService,\r\n private pharmacistService: PharmacistService,\r\n private notification: AppToastService,\r\n private petPatientService: PetPatientService,\r\n private bsModalService: BsModalService,\r\n private cdr: ChangeDetectorRef\r\n ) {\r\n const state = this.router.getCurrentNavigation().extras.state;\r\n if (state && state.showModalPersonalData) {\r\n this.showModal = 'showModalPersonalData';\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n this.getCompleteUser();\r\n\r\n if (this.showModal) {\r\n this[this.showModal](true);\r\n }\r\n }\r\n\r\n get user(): User {\r\n return this.authService.user();\r\n }\r\n\r\n private updateUserData(data) {\r\n this.completeUser = data;\r\n this.loading = false;\r\n this.authService.refreshToken().subscribe();\r\n this.cdr.detectChanges();\r\n }\r\n\r\n private getCompleteUser() {\r\n this.userService.getAvatar().subscribe(avatar => (this.avatarB64 = avatar));\r\n let execute$ = new Observable();\r\n switch (this.user.userType) {\r\n case 'patient':\r\n execute$ = this.patientService.getPatientByUserId(this.user._id);\r\n break;\r\n case 'healthProfessional':\r\n execute$ = this.healthProfessionalService.getHealthProfessional(this.user._id);\r\n break;\r\n case 'pharmacist':\r\n execute$ = this.pharmacistService.getPharmacistByUserId(this.user._id);\r\n break;\r\n default:\r\n execute$ = this.pharmacyService.getPharmacyByUserId(this.user._id);\r\n }\r\n\r\n execute$.subscribe(data => {\r\n this.updateUserData(data);\r\n });\r\n }\r\n\r\n get today() {\r\n return new Date();\r\n }\r\n\r\n get doctorName() {\r\n if (this.completeUser) {\r\n return `Dr${this.completeUser.sex === 'F' ? 'a' : ''}. ${this.completeUser.name}`;\r\n }\r\n return '';\r\n }\r\n\r\n redirectUrl(privacyPolicy?: boolean) {\r\n let url;\r\n if (this.user.userType === 'patient') {\r\n url = this.router.createUrlTree(['policies', 'termspatient']);\r\n }\r\n if (this.completeUser.professionalType === 'doctor') {\r\n url = this.router.createUrlTree(['policies', 'termsdoctor']);\r\n }\r\n if (this.completeUser.professionalType === 'dentist') {\r\n url = this.router.createUrlTree(['policies', 'termsdentist']);\r\n }\r\n if (this.completeUser.professionalType === 'veterinarian') {\r\n url = this.router.createUrlTree(['policies', 'termsveterinary']);\r\n }\r\n if (this.user.userType === 'pharmacy') {\r\n url = this.router.createUrlTree(['policies', 'termspharmacy']);\r\n }\r\n if (privacyPolicy) {\r\n url = this.router.createUrlTree(['policies', 'privacypolicy']);\r\n }\r\n return url;\r\n }\r\n\r\n get specialties() {\r\n return this.completeUser ? this.completeUser.specialties.map(s => s.title).join(', ') : '';\r\n }\r\n\r\n get cipFeature() {\r\n return this.user && this.user.features.find(f => f.name === 'CIP');\r\n }\r\n\r\n get cipFeatureAccepted() {\r\n if (this.cipFeature.accept === 'yes') {\r\n return 'Sim';\r\n }\r\n if (this.cipFeature.accept === 'no') {\r\n return 'Não';\r\n }\r\n return 'Não respondido';\r\n }\r\n\r\n changeCipVisibility(visibility: boolean) {\r\n this.isModalCipVisible = visibility;\r\n }\r\n\r\n showModalCip() {\r\n this.isModalCipVisible = true;\r\n }\r\n\r\n showModalPersonalData(touched = false) {\r\n const modal = this.modalService.create({\r\n nzContent: ModalEditPersonalDataComponent,\r\n nzComponentParams: {\r\n user: this.user,\r\n completeUser: this.completeUser,\r\n userTypeLogged: this.user.userType,\r\n touched\r\n },\r\n nzFooter: null,\r\n nzWidth: 800\r\n });\r\n modal.afterOpen.subscribe(() => {\r\n modal.getContentComponent().updateUserEvent.subscribe(user => this.updateUserData(user));\r\n });\r\n }\r\n\r\n showModalCovid() {\r\n const modal = this.modalService.create({\r\n nzContent: ModalEditPharmacyCovidComponent,\r\n nzComponentParams: { completeUser: this.completeUser },\r\n nzFooter: null,\r\n nzClosable: false\r\n });\r\n modal.afterOpen.subscribe(() => {\r\n modal.getContentComponent().updateUserEvent.subscribe(user => this.updateUserData(user));\r\n });\r\n }\r\n\r\n showModalBusinessData(isNew: boolean, data: any, index: number) {\r\n const modal = this.modalService.create({\r\n nzContent: ModalEditAddressDataComponent,\r\n nzComponentParams: {\r\n isNew,\r\n commercialDataIndex: index,\r\n commercialData: data,\r\n completeUser: Object.assign({}, this.completeUser),\r\n userType: this.user.userType\r\n },\r\n nzWidth: 600,\r\n nzFooter: null\r\n });\r\n modal.afterClose.subscribe((data: HealthProfessional) => {\r\n if (data) {\r\n this.updateUserData(data);\r\n }\r\n });\r\n }\r\n\r\n showModalRemoveBusinessData(index: number) {\r\n this.modalService.confirm({\r\n nzTitle: 'Alerta',\r\n nzContent: 'Tem certeza que deseja remover esses dados',\r\n nzOnOk: () => {\r\n this.completeUser.commercialData.splice(index, 1);\r\n\r\n this.healthProfessionalService\r\n .update(this.completeUser.userId, this.completeUser)\r\n .subscribe(user => this.updateUserData(user));\r\n }\r\n });\r\n }\r\n\r\n showModalAddressData() {\r\n const modal = this.modalService.create({\r\n nzContent: ModalEditAddressDataComponent,\r\n nzComponentParams: { completeUser: this.completeUser, userType: this.user.userType },\r\n nzFooter: null\r\n });\r\n modal.afterOpen.subscribe(() => {\r\n modal.getContentComponent().updateUserEvent.subscribe(user => this.updateUserData(user));\r\n });\r\n }\r\n\r\n showModalPharmacyData() {\r\n const modal = this.modalService.create({\r\n nzContent: ModalEditPharmacyTechnicianComponent,\r\n nzComponentParams: { completeUser: this.completeUser, userType: this.user.userType },\r\n nzFooter: null\r\n });\r\n modal.afterOpen.subscribe(() => {\r\n modal.getContentComponent().updateUserEvent.subscribe(user => this.updateUserData(user));\r\n });\r\n }\r\n\r\n addDependent() {\r\n const modal = this.modalService.create({\r\n nzTitle: 'ADICIONAR MENOR',\r\n nzContent: ModalDependentFormComponent,\r\n nzComponentParams: { responsible: this.completeUser },\r\n nzFooter: null\r\n });\r\n\r\n modal.afterOpen.subscribe(_ => {\r\n modal.getContentComponent().submit.subscribe(patient => {\r\n patient.responsible = this.completeUser._id;\r\n this.patientService.save(patient).subscribe(\r\n async res => {\r\n this.completeUser = await this.getCompleteUser();\r\n modal.close();\r\n this.notification.notify('success', 'Sucesso', 'Dependente salvo com sucesso!');\r\n },\r\n err => {\r\n console.error(err);\r\n this.notification.notify('error', 'Aviso', 'Erro ao salvar dependente');\r\n }\r\n );\r\n });\r\n });\r\n }\r\n\r\n addPet() {\r\n const modal = this.modalService.create({\r\n nzContent: ModalPetFormComponent,\r\n nzComponentParams: {},\r\n nzFooter: null\r\n });\r\n\r\n modal.afterOpen.subscribe(_ => {\r\n modal.getContentComponent().submit.subscribe(patient => {\r\n patient.responsible = this.completeUser;\r\n\r\n this.petPatientService.save(patient).subscribe(\r\n async _ => {\r\n this.completeUser = await this.getCompleteUser();\r\n modal.close();\r\n this.notification.notify('success', 'Sucesso', 'Pet salvo com sucesso!');\r\n },\r\n err => {\r\n console.error(err);\r\n this.notification.notify('error', 'Aviso', 'Erro ao salvar dependente');\r\n }\r\n );\r\n });\r\n });\r\n }\r\n\r\n editDependent(dependent: any) {\r\n const modal = this.modalService.create({\r\n nzTitle: 'EDITAR DEPENDENTE',\r\n nzContent: ModalDependentFormComponent,\r\n nzComponentParams: { responsible: this.completeUser, dependent },\r\n nzFooter: null\r\n });\r\n\r\n modal.afterOpen.subscribe(_ => {\r\n modal.getContentComponent().submit.subscribe(patient => {\r\n patient.responsible = this.completeUser._id;\r\n this.patientService.update(patient._id, patient).subscribe(\r\n async res => {\r\n this.completeUser = await this.getCompleteUser();\r\n modal.close();\r\n this.notification.notify('success', 'Sucesso', 'Dependente salvo com sucesso!');\r\n },\r\n err => {\r\n console.error(err);\r\n this.notification.notify('error', 'Aviso', 'Erro ao salvar dependente');\r\n }\r\n );\r\n });\r\n });\r\n }\r\n\r\n editPet(pet: PetPatient) {\r\n const initialState = { pet, isVeterinarian: false };\r\n\r\n const modal = this.bsModalService.show(ModalEditPetComponent, {\r\n initialState,\r\n class: '',\r\n backdrop: 'static',\r\n keyboard: false\r\n });\r\n\r\n modal.content.submit.subscribe(p => {\r\n this.petPatientService.update(p._id, p).subscribe(\r\n () => {\r\n this.getCompleteUser();\r\n modal.hide();\r\n this.notification.notify('success', 'Sucesso', 'Pet salvo com sucesso!');\r\n },\r\n err => {\r\n console.error(err);\r\n this.notification.notify('error', 'Aviso', 'Erro ao salvar pet');\r\n }\r\n );\r\n });\r\n }\r\n\r\n showPetData(pet) {\r\n this.pet = pet;\r\n this.isPetDataVisible = true;\r\n }\r\n\r\n closePetModal() {\r\n this.isPetDataVisible = false;\r\n }\r\n\r\n fileChangeEvent(event) {\r\n this.imageChangedEvent = event;\r\n }\r\n\r\n @nativeAsync\r\n async imageCropped(event: CroppedEvent) {\r\n try {\r\n this.loading = true;\r\n await this.userService.updateAvatar(event).toPromise();\r\n this.avatarB64 = event.base64;\r\n this.notification.notify('success', 'Sucesso', 'Avatar salvo com sucesso!');\r\n } catch (err) {\r\n console.error(err);\r\n this.notification.notify('error', 'Aviso', 'Erro ao salvar o seu avatar');\r\n }\r\n this.loading = false;\r\n }\r\n\r\n addLogo(event: Event, commercialId: string) {\r\n const target = event.target as HTMLInputElement;\r\n const size = target.files[0].size;\r\n if (size > this.MAX_FILE_SIZE_BYTES) {\r\n this.notification.notify(\r\n 'warning',\r\n 'Aviso',\r\n `O arquivo não pode ser maior que ${this.MAX_FILE_SIZE_BYTES / 1024 / 1024} MB`\r\n );\r\n } else {\r\n this.logoChangedEvent = event;\r\n this.commercialId = commercialId;\r\n }\r\n }\r\n\r\n @nativeAsync\r\n async logoCropped(event: CroppedEvent) {\r\n try {\r\n this.loading = true;\r\n this.cdr.detectChanges();\r\n const { url } = await this.healthProfessionalService.uploadLogo(event, this.commercialId);\r\n this.completeUser = {\r\n ...this.completeUser,\r\n commercialData: this.completeUser.commercialData.map(c => {\r\n if (c._id === this.commercialId) {\r\n return {\r\n ...c,\r\n logo: url\r\n };\r\n }\r\n return c;\r\n })\r\n };\r\n\r\n this.notification.notify('success', 'Sucesso', 'Logo salvo com sucesso');\r\n this.cdr.detectChanges();\r\n } catch (error) {\r\n console.error(error);\r\n this.notification.notify('error', 'Aviso', 'Erro ao salvar a logomarca');\r\n } finally {\r\n this.loading = false;\r\n }\r\n this.cdr.detectChanges();\r\n }\r\n\r\n showLogo(url: string, commercialId: string) {\r\n this.imageURL = url;\r\n this.commercialId = commercialId;\r\n }\r\n\r\n @nativeAsync\r\n async removeLogo(commercialId: string) {\r\n this.modalService.confirm({\r\n nzTitle: 'Você tem certeza que deseja remover a Logo?',\r\n nzWidth: 300,\r\n nzContent: null,\r\n nzOnOk: async () => {\r\n try {\r\n await this.healthProfessionalService.removeLog(commercialId).toPromise();\r\n this.completeUser.commercialData.forEach(c => {\r\n if (c._id === commercialId) {\r\n c.logo = null;\r\n }\r\n });\r\n } catch (error) {\r\n console.error(error);\r\n }\r\n this.loading = false;\r\n }\r\n });\r\n }\r\n}\r\n","export default \":host {\\n background-color: var(--background-section) !important;\\n}\\n\\n.terms {\\n text-decoration: underline;\\n color: var(--color-primary);\\n}\\n\\nsection {\\n padding-top: 0px;\\n}\\n\\n.page-header {\\n padding-bottom: 0px;\\n height: 190px !important;\\n}\\n\\n.title-area {\\n display: flex;\\n padding-top: 25px;\\n justify-content: space-between;\\n}\\n\\n.edit-button {\\n border: none;\\n outline: none;\\n background: none;\\n width: 10px;\\n margin-right: 15px;\\n}\\n\\n.my-data {\\n background-color: var(--background-section);\\n}\\n\\n.my-data .data {\\n padding-bottom: 50px;\\n background-color: white;\\n}\\n\\n.my-data .data .content {\\n padding-left: 60px;\\n}\\n\\n.my-data .data .content p {\\n color: #4a4545;\\n}\\n\\n.my-data .data .content .svg {\\n filter: invert(0.3);\\n}\\n\\n.my-data .data .content .row {\\n width: 700px;\\n}\\n\\n.my-data .data .content h5 {\\n font-family: \\\"prolight\\\";\\n font-size: 1.1rem;\\n margin-bottom: 0px;\\n color: #4a4545;\\n}\\n\\n.my-data .data .content .info-area {\\n display: flex;\\n flex-direction: row;\\n align-items: center;\\n padding-bottom: 15px;\\n min-width: 100px;\\n}\\n\\n.my-data .data .content .info-area img {\\n margin-right: 25px;\\n}\\n\\n.my-data .data .content .info-area i {\\n margin-right: 20px;\\n color: #4a4545;\\n}\\n\\n.my-data .data .content span.cpf {\\n display: -webkit-box;\\n}\\n\\n.my-data .data .title {\\n font-size: 11px;\\n}\\n\\n.my-data .data img {\\n width: 17px;\\n}\\n\\n.my-data hr {\\n margin-bottom: 0px;\\n}\\n\\n.my-data .title-address {\\n display: flex;\\n align-items: center;\\n}\\n\\n.my-data .title-address p {\\n margin: 0px;\\n}\\n\\n.my-data .title-address .svg {\\n margin-right: 12px;\\n}\\n\\n.my-data .address {\\n margin-top: 15px;\\n}\\n\\n.my-data .address .address-info-area {\\n display: flex;\\n margin-bottom: 13px;\\n color: #3c3c3c;\\n}\\n\\n.my-data .address .address-info-area .address-title {\\n font-weight: bold;\\n font-size: 1.1rem;\\n}\\n\\n.my-data .address .address-info-area .info {\\n font-size: 1.1rem;\\n}\\n\\n.my-data #button-edit-business {\\n border: 0 !important;\\n background: none !important;\\n margin-left: 10px;\\n}\\n\\n.my-data #button-remove-business {\\n border: 0 !important;\\n background: none !important;\\n color: #4f4f4f;\\n}\\n\\n.my-data .add-data {\\n padding-top: 15px;\\n}\\n\\n.my-data .add-data span {\\n text-decoration: underline;\\n cursor: pointer;\\n}\\n\\n@media (max-width: 1025px) {\\n section.profile .content {\\n padding: 12px !important;\\n }\\n}\\n\\nsection.profile.n-shaped.bg-white.page-header {\\n height: auto;\\n}\\n\\nsection.profile.section-shaped.bg-white.page-header {\\n height: auto !important;\\n}\\n\\n.icon-edit-profile {\\n position: absolute;\\n bottom: 0px;\\n background-color: #17c6ac;\\n right: 0;\\n width: 36px;\\n height: 36px;\\n border-radius: 50%;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n padding: 10px;\\n}\\n\\n.icon-edit-profile img {\\n width: 100% !important;\\n height: 100% !important;\\n fill: #fff !important;\\n}\\n\\n.input-label {\\n position: relative;\\n cursor: pointer;\\n}\\n\\n.logo-img {\\n display: none;\\n}\\n\\n.btn {\\n color: white;\\n background-color: #0b6054;\\n border-color: #0b6054;\\n display: flex;\\n align-items: center;\\n}\\n\\n::ng-deep .ant-modal-header {\\n background-color: #4cbca3;\\n}\\n\\n::ng-deep .ant-modal-header .ant-modal-title {\\n color: white;\\n font-weight: 600;\\n}\\n\\n::ng-deep .ant-modal-footer {\\n display: flex;\\n justify-content: flex-end;\\n}\";","export default \"<app-alternative-navbar [title]=\\\"navTitle\\\" titleIcon=\\\"fas\\\"></app-alternative-navbar>\\n<app-sidebar-menu></app-sidebar-menu>\\n\\n<div class=\\\"container mt-4\\\">\\n <form nz-form [formGroup]=\\\"form\\\">\\n <div class=\\\"row justify-content-md-center\\\">\\n <div class=\\\"col-md-5\\\">\\n <div class=\\\"row\\\">\\n <div class=\\\"col\\\">\\n <nz-form-item>\\n <nz-form-label>Data da Dispensação:<span class=\\\"mandatory\\\"> *</span></nz-form-label>\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n type=\\\"date\\\"\\n formControlName=\\\"dispensationDate\\\"\\n name=\\\"dispensationDate\\\"\\n theme\\n />\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n <div class=\\\"col-md-6\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"cpfBuyer\\\"\\n >CPF do comprador<span class=\\\"mandatory\\\"> *</span></nz-form-label\\n >\\n <nz-form-control nzHasFeedback>\\n <input\\n nz-input\\n id=\\\"cpfBuyer\\\"\\n mask=\\\"000.000.000-00\\\"\\n formControlName=\\\"cpfBuyer\\\"\\n theme\\n />\\n <nz-form-explain *ngIf=\\\"form.get('cpfBuyer').dirty && form.get('cpfBuyer').errors\\\">\\n <ng-container *ngIf=\\\"form.get('cpfBuyer').hasError('required')\\\">\\n Campo obrigatório, por favor digite seu CPF.\\n </ng-container>\\n <ng-container\\n *ngIf=\\\"\\n !form.get('cpfBuyer').hasError('required') && form.get('cpfBuyer').hasError('cpf')\\n \\\"\\n >\\n CPF inválido.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n </div>\\n <div class=\\\"row\\\" [formGroup]=\\\"form.get('preWriterRegister')\\\">\\n <div class=\\\"col-md-6\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"preWriterRegister-numero\\\"\\n >Registro do prescritor<span class=\\\"mandatory\\\"> *</span></nz-form-label\\n >\\n <nz-form-control nzHasFeedback>\\n <input formControlName=\\\"number\\\" id=\\\"preWriterRegister-numero\\\" nz-input theme />\\n <nz-form-explain\\n *ngIf=\\\"\\n form.get('preWriterRegister.number').dirty &&\\n form.get('preWriterRegister.number').errors\\n \\\"\\n >\\n <ng-container *ngIf=\\\"form.get('preWriterRegister.number').hasError('required')\\\">\\n Campo obrigatório, por favor informe o número do prescritor.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n <div class=\\\"col-md-6\\\">\\n <nz-form-item>\\n <nz-form-label nzFor=\\\"preWriterRegister-uf\\\"\\n >UF<span class=\\\"mandatory\\\"> *</span></nz-form-label\\n >\\n <nz-form-control nzHasFeedback>\\n <nz-select\\n formControlName=\\\"uf\\\"\\n id=\\\"preWriterRegister-uf\\\"\\n nzShowSearch\\n nzAllowClear\\n nzDropdownClassName=\\\"account-select\\\"\\n nzPlaceHolder=\\\"Selecione\\\"\\n theme\\n >\\n <nz-option\\n *ngFor=\\\"let state of states\\\"\\n [nzLabel]=\\\"state?.sigla\\\"\\n [nzValue]=\\\"state?.sigla\\\"\\n >\\n </nz-option>\\n </nz-select>\\n <nz-form-explain\\n *ngIf=\\\"\\n form.get('preWriterRegister.uf').dirty && form.get('preWriterRegister.uf').errors\\n \\\"\\n >\\n <ng-container *ngIf=\\\"form.get('preWriterRegister.uf').hasError('required')\\\">\\n Campo obrigatório, por favor selecione o UF do prescritor.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n </div>\\n <div class=\\\"row\\\">\\n <div class=\\\"col-12\\\">\\n <nz-form-item>\\n <nz-form-control>\\n <app-input-file\\n accept=\\\".pdf\\\"\\n formControlName=\\\"pdf\\\"\\n textButton=\\\"Selecione uma receita\\\"\\n transformTo=\\\"base64\\\"\\n maxSize=\\\"3145728\\\"\\n name=\\\"pdf\\\"\\n [file]=\\\"file\\\"\\n [(filename)]=\\\"filename\\\"\\n theme\\n ></app-input-file>\\n <nz-form-explain *ngIf=\\\"form.get('pdf').dirty && form.get('pdf').errors\\\">\\n <ng-container *ngIf=\\\"form.get('pdf').hasError('required')\\\">\\n Arquivo obrigatório, por favor selecione um PDF.\\n </ng-container>\\n </nz-form-explain>\\n </nz-form-control>\\n </nz-form-item>\\n </div>\\n </div>\\n <div class=\\\"row\\\">\\n <div class=\\\"col-12 d-flex justify-content-end\\\">\\n <button nz-button nzType=\\\"primary\\\" (click)=\\\"save()\\\">Salvar</button>\\n </div>\\n </div>\\n </div>\\n </div>\\n </form>\\n</div>\\n<ngx-loading [show]=\\\"loading\\\" [config]=\\\"{ backdropBorderRadius: '3px' }\\\"></ngx-loading>\\n\";","import { Component, OnInit } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { AuthService } from '@app/core/services/auth.service';\nimport { ValidationService } from '@app/core/services/validation.service';\nimport { PrescriptionService } from '@app/modules/document/services/prescription.service';\nimport { RetentionService } from '@app/modules/document/services/retention.service';\nimport { BrazilianStates } from '@app/shared/data/Brazilian-states';\nimport { nativeAsync } from '@app/shared/decorators/nativeAsync';\nimport { BrazilState } from '@app/shared/models/brazil-state';\nimport { CpfCnpjApiErrors } from '@app/shared/models/cpf-cnpj-api-errors.enum';\nimport { User } from '@app/shared/models/decodedLoginToken';\nimport { AppToastService } from '@app/shared/services/app-toast.service';\nimport { BigboostService } from '@app/shared/services/bigboost.service';\nimport { markFormGroup } from '@app/utils/markFormGroup';\nimport * as moment from 'moment';\nimport { UploadFile } from 'ng-zorro-antd/upload';\n\n@Component({\n selector: 'app-recipe',\n templateUrl: './recipe.component.html',\n styleUrls: ['./recipe.component.scss']\n})\nexport class RecipeComponent implements OnInit {\n navTitle: string;\n loading: boolean;\n states: BrazilState[] = BrazilianStates;\n currenteDate: Date = new Date();\n form: FormGroup;\n\n constructor(\n private fb: FormBuilder,\n private notification: AppToastService,\n private authService: AuthService,\n private retentionService: RetentionService,\n private bigboostService: BigboostService,\n private prescriptionService: PrescriptionService\n ) {\n this.form = this.fb.group({\n dispensationDate: [moment().format('YYYY-MM-DD'), Validators.required],\n cpfBuyer: ['', [Validators.required, ValidationService.cpfValidator]],\n pdf: ['', Validators.required],\n preWriterRegister: this.fb.group({\n number: ['', Validators.required],\n uf: [null, Validators.required]\n }),\n pharmacyId: [null]\n });\n\n const pdf = this.prescriptionService.pdfBase64;\n if (pdf) {\n this.form.get('pdf').setValue(pdf);\n }\n }\n\n @nativeAsync\n async ngOnInit() {\n this.navTitle = 'Receita de terceiros';\n\n const extraData = JSON.parse(localStorage.getItem('extra_data'));\n if (extraData) {\n this.form.get('pharmacyId').setValue(extraData.pharmacyId);\n }\n }\n\n get user(): User {\n return this.authService.user();\n }\n\n get file(): UploadFile {\n return this.form.get('pdf').value;\n }\n\n get filename(): string {\n return this.prescriptionService.filename;\n }\n\n set filename(value: string) {\n this.prescriptionService.filename = value;\n }\n @nativeAsync\n async save() {\n markFormGroup(this.form);\n try {\n if (this.form.valid) {\n this.loading = true;\n const consult = await this.bigboostService.consultCpf(this.form.value.cpfBuyer).toPromise();\n if (consult.erroCodigo) {\n this.loading = false;\n if (!Object.values(CpfCnpjApiErrors).includes(consult.erroCodigo)) {\n this.notification.notify('warning', 'Aviso', consult.erro);\n } else {\n this.notification.notify(\n 'warning',\n 'Aviso',\n 'Estamos com problemas no momento, informe o suporte do sistema e tente novamente dentro de alguns minutos.'\n );\n }\n return;\n }\n\n const userId = this.user._id;\n await this.retentionService.saveRetentionOfThirdParties({\n userId,\n ...this.form.value\n });\n this.loading = false;\n this.reset();\n this.notification.notify('success', 'Dados adicionados com sucesso', null);\n }\n } catch (err) {\n this.loading = false;\n if (err.status === 422) {\n this.notification.notify(\n 'warning',\n 'Aviso',\n 'Este arquivo não é um PDF assinado digitalmente. Por favor, selecione um arquivo diferente.'\n );\n } else if (err.status === 400) {\n this.notification.notify(\n 'warning',\n 'Aviso',\n 'Apenas permitido receitas gerados fora da plataforma Receita Digital. Tente realizar a dispensação pelo menu \"Dispensar\"'\n );\n }\n }\n }\n\n reset() {\n this.form.get('cpfBuyer').reset();\n this.form.get('pdf').reset();\n this.form.get('preWriterRegister').reset();\n }\n}\n","export default \".mandatory {\\n color: red;\\n}\";","import { Router } from '@angular/router';\nimport { environment } from '@env/environment';\nimport { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'app-system-update',\n templateUrl: './system-update.component.html',\n styleUrls: ['./system-update.component.scss']\n})\nexport class SystemUpdateComponent implements OnInit {\n constructor(private router: Router) {}\n\n ngOnInit() {\n if (!environment.maintenance) {\n this.router.navigate(['/']);\n }\n }\n}\n","export default \"<div class=\\\"system-update\\\">\\n <img src=\\\"assets/img/system-update.png\\\" />\\n</div>\\n\";","export default \".system-update img {\\n height: 100vh;\\n float: right;\\n}\";","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot } from '@angular/router';\nimport { AuthService } from '@app/core/services/auth.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class EntryGuard implements CanActivate {\n constructor(private router: Router, private authService: AuthService) {}\n\n canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {\n const user = this.authService.user();\n if (user) {\n window.location.href = '/dashboard';\n return false;\n }\n return true;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { PreloadAllModules, Router, RouterModule, Routes } from '@angular/router';\nimport { HistoricComponent } from '@app/modules/historic/historic.component';\nimport { AuthGuard } from '@app/shared/guards/auth.guard';\nimport { IsVeterinarianResolver } from '@app/shared/resolvers/is-veterinarian.resolver';\nimport { environment } from '@env/environment';\nimport { MyDataComponent } from './modules/dashboard/my-data/my-data.component';\nimport { RecipeComponent } from './modules/pharmacy/recipe/recipe.component';\nimport { SystemUpdateComponent } from './modules/system-update/system-update.component';\nimport { AppVersionComponent } from './shared/components/AppVersion/AppVersion.component';\nimport { EntryGuard } from './shared/guards/entry.guard';\n\nconst routes: Routes = [\n {\n path: '',\n pathMatch: 'full',\n loadChildren: () => import('@app/modules/home/home.module').then(m => m.HomeModule)\n },\n {\n path: 'maintenance',\n component: SystemUpdateComponent\n },\n {\n path: 'p/:code',\n loadChildren: () =>\n import('@app/modules/public-document/public-document.module').then(m => m.PublicDocumentModule)\n },\n {\n path: 'entry',\n canActivate: [EntryGuard],\n loadChildren: () => import('@app/modules/entry/entry.module').then(m => m.EntryModule)\n },\n {\n path: 'dashboard',\n canActivate: [AuthGuard],\n loadChildren: () => import('@app/modules/dashboard/dashboard.module').then(m => m.DashboardModule)\n },\n {\n path: 'patients',\n canActivate: [AuthGuard],\n loadChildren: () => import('@app/modules/patients/patients.module').then(m => m.PatientsModule)\n },\n // {\n // path: 'personalized-medications',\n // canActivate: [AuthGuard],\n // loadChildren:\n // '@app/modules/personalized-medications/personalized-medications.module#PersonalizedMedicationsModule'\n // },\n {\n path: 'doctor',\n canActivate: [AuthGuard],\n loadChildren: () =>\n import('@app/modules/health-professional/health-professional.module').then(\n m => m.HealthProfessionalModule\n )\n },\n {\n path: 'dentist',\n canActivate: [AuthGuard],\n loadChildren: () =>\n import('@app/modules/health-professional/health-professional.module').then(\n m => m.HealthProfessionalModule\n )\n },\n {\n path: 'prescriber',\n canActivate: [AuthGuard],\n loadChildren: () =>\n import('@app/modules/health-professional/health-professional.module').then(\n m => m.HealthProfessionalModule\n )\n },\n {\n path: 'prescription',\n canActivate: [AuthGuard],\n loadChildren: () => import('@app/modules/document/document.module').then(m => m.DocumentModule)\n },\n {\n path: 'document',\n canActivate: [AuthGuard],\n loadChildren: () =>\n import('@app/modules/document-v2/document-v2.module').then(m => m.DocumentV2Module),\n resolve: {\n isVeterinarian: IsVeterinarianResolver\n }\n },\n {\n path: 'recipe',\n loadChildren: () =>\n import('@app/modules/external-document/external-document.module').then(\n m => m.ExternalDocumentModule\n )\n },\n {\n path: 'recipe-v2',\n loadChildren: () =>\n import('@app/modules/external-document-v2/external-document-v2.module').then(\n m => m.ExternalDocumentV2Module\n )\n },\n {\n path: 'profile',\n canActivate: [AuthGuard],\n component: MyDataComponent\n },\n {\n path: 'admin',\n canActivate: [AuthGuard],\n loadChildren: () => import('@app/modules/admin/admin.module').then(m => m.AdminModule)\n },\n {\n path: 'historic',\n canActivate: [AuthGuard],\n component: HistoricComponent\n },\n {\n path: 'dispensation',\n canActivate: [AuthGuard],\n loadChildren: () =>\n import('@app/modules/dispensation/dispensation.module').then(m => m.DispensationModule)\n },\n {\n path: 'pharmacy/recipe',\n canActivate: [AuthGuard],\n component: RecipeComponent\n },\n {\n path: 'pharmacist',\n canActivate: [AuthGuard],\n loadChildren: () => import('@app/modules/pharmacist/pharmacist.module').then(m => m.PharmacistModule)\n },\n {\n path: 'favorites',\n canActivate: [AuthGuard],\n loadChildren: () =>\n import('@app/modules/favorite-models/favorite-models.module').then(m => m.FavoriteModelsModule),\n resolve: {\n isVeterinarian: IsVeterinarianResolver\n }\n },\n {\n path: 'pharmacy/filter',\n loadChildren: () =>\n import('@app/modules/public-pharmacy/public-pharmacy.module').then(m => m.PublicPharmacyModule)\n },\n {\n path: 'policies',\n loadChildren: () => import('@app/modules/policies/redirect.module').then(m => m.RedirectModule)\n },\n {\n path: 'version',\n component: AppVersionComponent\n },\n {\n path: '**',\n redirectTo: ''\n }\n];\n\n@NgModule({\n imports: [\n CommonModule,\n RouterModule.forRoot(routes, {\n preloadingStrategy: PreloadAllModules\n })\n ],\n exports: [RouterModule]\n})\nexport class AppRoutingModule {\n constructor(private router: Router) {\n this.router.config.forEach(route => {\n if (environment.maintenance && route.path !== 'maintenance') {\n route.redirectTo = 'maintenance';\n }\n });\n }\n}\n","import {\r\n HttpErrorResponse,\r\n HttpEvent,\r\n HttpHandler,\r\n HttpInterceptor,\r\n HttpRequest,\r\n HttpResponse\r\n} from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { AppToastService } from '@app/shared/services/app-toast.service';\r\nimport { ThemeService } from '@app/theme';\r\nimport { environment } from '@env/environment';\r\nimport { LocalStorage } from '@ngx-pwa/local-storage';\r\nimport { Observable } from 'rxjs';\r\nimport { mergeMap } from 'rxjs/internal/operators/mergeMap';\r\nimport { tap } from 'rxjs/operators';\r\nimport { ClientAppService } from '../../modules/external-document/services/client-app.service';\r\nimport { CoreService } from '../services/core.service';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class HttpInterceptorService implements HttpInterceptor {\r\n private readonly host = 'api';\r\n\r\n constructor(\r\n private localStorage: LocalStorage,\r\n private notification: AppToastService,\r\n private router: Router,\r\n private clientAppService: ClientAppService,\r\n private coreService: CoreService\r\n ) {}\r\n\r\n intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n let httpRequest = req.clone({\r\n url: req.url.includes('http') ? req.url : `${this.host}/${req.url}`\r\n });\r\n\r\n let params = httpRequest.params;\r\n for (const key of httpRequest.params.keys()) {\r\n if (params.get(key) === undefined) {\r\n params = params.delete(key);\r\n }\r\n }\r\n\r\n httpRequest = httpRequest.clone({ params });\r\n httpRequest = httpRequest.clone({\r\n headers: httpRequest.headers.set('ngsw-bypass', 'true')\r\n });\r\n\r\n /**\r\n * Inclusão do tenantId MRD\r\n */\r\n if (this.coreService.isMrd) {\r\n httpRequest = httpRequest.clone({\r\n headers: httpRequest.headers.set('x-tenant', 'MRD')\r\n });\r\n }\r\n\r\n if (httpRequest.url.includes('/v1')) {\r\n httpRequest = httpRequest.clone({\r\n headers: httpRequest.headers.set('x-api-key', environment.envAdminApiKey)\r\n });\r\n }\r\n\r\n if (httpRequest.url.includes('receitadigital.com/medicament')) {\r\n httpRequest = httpRequest.clone({\r\n headers: httpRequest.headers\r\n .set('Authorization', 'Bearer ')\r\n .set('x-api-key', environment.envKeyMedicament)\r\n });\r\n }\r\n\r\n if (httpRequest.url.includes('receitadigital.com/speciality')) {\r\n httpRequest = httpRequest.clone({\r\n headers: httpRequest.headers\r\n .set('Authorization', 'Bearer ')\r\n .set('x-api-key', environment.envKeySpecialty)\r\n });\r\n }\r\n\r\n if (this.router.url.startsWith('/recipe')) {\r\n const apiKey = this.clientAppService.apiKey;\r\n if (apiKey) {\r\n httpRequest = httpRequest.clone({\r\n headers: httpRequest.headers.set('x-api-key', apiKey)\r\n });\r\n }\r\n }\r\n\r\n const externalApi = this.isExternalApi(httpRequest.url);\r\n\r\n return this.localStorage.getItem<string>('id_token').pipe(\r\n mergeMap((idToken: string) => {\r\n if (idToken && !externalApi) {\r\n httpRequest = httpRequest.clone({\r\n headers: httpRequest.headers.set('Authorization', 'Bearer ' + idToken)\r\n });\r\n }\r\n return next.handle(httpRequest).pipe(\r\n tap(\r\n (event: HttpEvent<any>) => {\r\n // if the event is for http response\r\n if (event instanceof HttpResponse) {\r\n // set loading to false\r\n }\r\n },\r\n (err: any) => {\r\n if (\r\n err instanceof HttpErrorResponse &&\r\n !err.url.includes('/v1/') &&\r\n err.status !== 400 &&\r\n err.status !== 401 &&\r\n err.status !== 403 &&\r\n err.status !== 404 &&\r\n err.status !== 409 &&\r\n err.status !== 422\r\n ) {\r\n const message = err.status\r\n ? (err.error || {}).message || err.message || err.error\r\n : 'Serviço indisponÃvel no momento.' +\r\n ' Por favor verifique sua conexão ou se o problema persistir tente mais tarde.';\r\n this.notification.notify('warning', 'Aviso', message);\r\n }\r\n }\r\n )\r\n );\r\n })\r\n );\r\n }\r\n\r\n private isExternalApi(url: string) {\r\n return url.includes(environment.plusGApp) || url.includes('/v1');\r\n }\r\n}\r\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { environment } from '@env/environment';\nimport { first } from 'rxjs/operators';\nimport { AppToastService } from './shared/services/app-toast.service';\nimport { SweetalertService } from './shared/services/sweetalert.service';\nimport { SweetAlertResult } from 'sweetalert2';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AppService {\n // this will be replaced by actual hash post-build.js\n private _versaoAtual = '{{VERSAO_ATUAL}}';\n\n /** 5 MINUSTOS */\n private readonly _TEMPO_VERICACAO_VERSAO = 30000;\n\n constructor(\n private http: HttpClient,\n private notification: AppToastService,\n private _sweetalertService: SweetalertService\n ) {}\n\n /**\n * Checks in every set frequency the version of frontend application\n */\n\n public iniciaVerificacaoVersao() {\n const env = environment;\n if (env && env.local) {\n return;\n }\n this.verificaVersao();\n setInterval(() => this.verificaVersao(), this._TEMPO_VERICACAO_VERSAO);\n }\n\n verificaVersao() {\n const url = `${window.location.origin}/version.json?t=${new Date().getTime()}`;\n this.http\n .get(url)\n .pipe(first())\n .subscribe(\n (response: any) => {\n if (!response || (response && !response.hash)) {\n return;\n }\n const versao = response.hash;\n const versaoIsAlteradao: boolean = this.versaoIsAlterada(this._versaoAtual, versao);\n if (versaoIsAlteradao) {\n console.warn('NOVA VERSÃO DETECTADA: ', response.hash);\n\n this._sweetalertService\n .confirmDialog(\n 'NOVA VERSÃO DETECTADA',\n `Uma nova versão do sistema foi disponibilizada, a página precisa ser recarregada!`,\n 'warning'\n )\n .then(({ isConfirmed }: SweetAlertResult) => {\n if (isConfirmed) {\n location.reload();\n } else {\n this.notification.notify(\n 'warning',\n 'Você optou por cancelar a atualização da plataforma.',\n 'Esta ação poderá acarretar problemas na aplicação. Salve seus documentos e atualize a página clicando na tecla F5 no computador ou deslize o dedo para baixo de estiver navegando em um dispositivo mobile.',\n 50000\n );\n }\n });\n }\n this._versaoAtual = versao;\n },\n err => console.error('não foi possÃvel obter a versão', err)\n );\n }\n\n private versaoIsAlterada(versaoAtual: string, novaVersao: string): boolean {\n if (!versaoAtual || versaoAtual === '{{VERSAO_ATUAL}}') {\n return false;\n }\n return versaoAtual !== novaVersao;\n }\n}\n","import { Location } from '@angular/common';\nimport { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\nimport { Title } from '@angular/platform-browser';\nimport {\n NavigationCancel,\n NavigationEnd,\n NavigationError,\n NavigationStart,\n Router\n} from '@angular/router';\nimport { ReplaySubject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { AppService } from './app.service';\nimport { ThemeService } from './theme';\nimport { AuthService } from './core/services/auth.service';\n\n@Component({\n selector: 'app-root',\n templateUrl: './app.component.html',\n styleUrls: ['./app.component.scss']\n})\nexport class AppComponent implements OnInit, OnDestroy {\n route: string;\n loading = false;\n\n private destroyed$: ReplaySubject<boolean> = new ReplaySubject<boolean>(1);\n\n constructor(\n private _location: Location,\n private router: Router,\n private themeService: ThemeService,\n private titleService: Title,\n private readonly _appService: AppService,\n private cdf: ChangeDetectorRef,\n public _authService: AuthService\n ) {\n this.router.events.pipe(takeUntil(this.destroyed$)).subscribe(ev => {\n if (this._location.path() === '') {\n this.route = 'home';\n } else {\n this.route = this._location.path();\n }\n\n if (ev instanceof NavigationStart) {\n this.loading = true;\n this.cdf.detectChanges();\n }\n\n if (\n ev instanceof NavigationEnd ||\n ev instanceof NavigationCancel ||\n ev instanceof NavigationError\n ) {\n this.loading = false;\n this.cdf.detectChanges();\n }\n });\n\n const favicon: HTMLLinkElement = document.querySelector('#favicon');\n const theme = this.themeService.getActiveTheme();\n favicon.href = theme.favicon;\n this.titleService.setTitle(theme.title);\n }\n ngOnInit(): void {\n this._appService.iniciaVerificacaoVersao();\n }\n\n ngOnDestroy(): void {\n this.destroyed$.next(true);\n this.destroyed$.complete();\n }\n}\n","export default \"<div class=\\\"page-container\\\" theme>\\n <div class=\\\"content-wrap\\\">\\n <app-navbar *ngIf=\\\"route?.includes('home') || route?.includes('update')\\\"></app-navbar>\\n <main class=\\\"container-fluid\\\" [class.p-0]=\\\"route !== 'home'\\\" [class.pr-0]=\\\"route === 'home'\\\">\\n <main>\\n <router-outlet></router-outlet>\\n </main>\\n </main>\\n </div>\\n <app-footer\\n *ngIf=\\\"\\n !route?.includes('entry/register/pharmacy') &&\\n !route?.includes('entry/register/patient') &&\\n !route?.includes('entry/register/doctor') &&\\n !route?.includes('entry/register/dentist') &&\\n !route?.includes('new-prescription') &&\\n !route?.includes('prescription/') &&\\n !route?.includes('recipe/') &&\\n !route?.includes('recipe-v2') &&\\n !route?.includes('pharmacist/new') &&\\n !route?.includes('add-commercial-data') &&\\n !route?.includes('dispensation') &&\\n !route?.includes('document') &&\\n !route?.includes('prescription-new')\\n \\\"\\n ></app-footer>\\n</div>\\n<app-usuario-inativo *ngIf=\\\"_authService.isLoggedIn\\\"></app-usuario-inativo>\\n<ngx-loading\\n *ngIf=\\\"_authService.isLoggedIn\\\"\\n [show]=\\\"loading\\\"\\n [config]=\\\"{ backdropBorderRadius: '3px' }\\\"\\n></ngx-loading>\\n\";","export default \":host {\\n margin: 0;\\n padding: 0;\\n height: 100vh;\\n width: 100vw;\\n overflow-x: none;\\n box-sizing: border-box;\\n flex: 1;\\n}\\n\\n.page-container {\\n position: relative;\\n height: 100vh;\\n}\\n\\n.page-container .content-wrap {\\n overflow-y: auto;\\n height: calc(100vh - 3.125rem);\\n}\";","import { Component, OnInit } from '@angular/core';\r\nimport { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';\r\n\r\n@Component({\r\n selector: 'app-select-prescription',\r\n templateUrl: './select-prescription.component.html',\r\n styleUrls: ['./select-prescription.component.scss']\r\n})\r\nexport class SelectPrescriptionComponent implements OnInit {\r\n constructor(public activeModal: NgbActiveModal) {}\r\n\r\n ngOnInit() {}\r\n\r\n closeModal() {\r\n this.activeModal.close('Modal Fechado');\r\n }\r\n}\r\n","export default \"<div class=\\\"modal-header\\\">\\r\\n <h4 class=\\\"modal-title\\\">Modal Title</h4>\\r\\n <button type=\\\"button\\\" class=\\\"close\\\" aria-label=\\\"Close\\\" (click)=\\\"activeModal.dismiss('Cross click')\\\">\\r\\n </button>\\r\\n</div>\\r\\n<div class=\\\"modal-body\\\">\\r\\n <p>My modal content</p>\\r\\n</div>\\r\\n<div class=\\\"modal-footer\\\">\\r\\n <button (click)=\\\"activeModal.dismiss('Close clicked')\\\">\\r\\n Close Clicked\\r\\n </button>\\r\\n</div>\";","export default \"\";","import { Component, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-user',\r\n templateUrl: './user.component.html',\r\n styleUrls: ['./user.component.scss']\r\n})\r\nexport class UserComponent implements OnInit {\r\n constructor() {}\r\n\r\n ngOnInit() {}\r\n}\r\n","export default \"<p>\\r\\n user works!\\r\\n</p>\\r\\n\";","export default \"\";","import { registerLocaleData } from '@angular/common';\nimport { HTTP_INTERCEPTORS, HttpClientModule } from '@angular/common/http';\nimport localePt from '@angular/common/locales/pt';\nimport { LOCALE_ID, NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { BrowserModule } from '@angular/platform-browser';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { AppRoutingModule } from '@app/app-routing.module';\nimport { CoreModule } from '@app/core';\nimport { HttpInterceptorService } from '@app/core/interceptors/http-interceptor.service';\nimport { SystemUpdateComponent } from '@app/modules/system-update/system-update.component';\nimport { SharedModule } from '@app/shared';\nimport { JwtModule } from '@auth0/angular-jwt';\nimport { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';\nimport { NZ_I18N, NgZorroAntdModule, en_US } from 'ng-zorro-antd';\nimport { AvatarModule } from 'ngx-avatar';\nimport { BsModalRef, ModalModule } from 'ngx-bootstrap/modal';\nimport { NgxLoadingModule } from 'ngx-loading';\nimport { NgxMaskModule } from 'ngx-mask';\nimport { NgxPhotoEditorModule } from 'ngx-photo-editor';\nimport { AppComponent } from './app.component';\nimport { DashboardModule } from './modules/dashboard/dashboard.module';\nimport { ModalDependentFormComponent } from './modules/dashboard/modal-dependent-form/modal-dependent-form.component';\nimport { ModalEditAddressDataComponent } from './modules/dashboard/modal-edit-address-data/modal-edit-address-data.component';\nimport { ModalEditPersonalDataComponent } from './modules/dashboard/modal-edit-personal-data/modal-edit-personal-data.component';\nimport { ModalEditPharmacyCovidComponent } from './modules/dashboard/modal-edit-pharmacy-covid/modal-edit-pharmacy-covid.component';\nimport { MyDataComponent } from './modules/dashboard/my-data/my-data.component';\nimport { DispensationModule } from './modules/dispensation/dispensation.module';\nimport { ModalAlertComponent } from './modules/dispensation/modal-alert/modal-alert.component';\nimport { ModalDispentionComponent } from './modules/dispensation/modal-dispention/modal-dispention.component';\nimport { EntryModule } from './modules/entry/entry.module';\nimport { HistoricModule } from './modules/historic/historic.module';\nimport { SelectPrescriptionComponent } from './modules/model/select-prescription/select-prescription.component';\nimport { RecipeComponent } from './modules/pharmacy/recipe/recipe.component';\nimport { UserComponent } from './modules/user/user.component';\n\nregisterLocaleData(localePt, 'pt-BR');\n\nexport function tokenGetter() {\n return localStorage.getItem('token');\n}\n\n@NgModule({\n declarations: [\n AppComponent,\n ModalAlertComponent,\n ModalDependentFormComponent,\n ModalDispentionComponent,\n ModalEditAddressDataComponent,\n ModalEditPersonalDataComponent,\n ModalEditPharmacyCovidComponent,\n MyDataComponent,\n RecipeComponent,\n SelectPrescriptionComponent,\n SystemUpdateComponent,\n UserComponent\n ],\n imports: [\n AppRoutingModule,\n AvatarModule,\n BrowserAnimationsModule,\n BrowserModule,\n CoreModule,\n SharedModule,\n DashboardModule,\n DispensationModule,\n EntryModule,\n FormsModule,\n HistoricModule,\n HttpClientModule,\n JwtModule.forRoot({ config: { tokenGetter } }),\n ModalModule.forRoot(),\n NgxLoadingModule.forRoot({}),\n NgxMaskModule.forRoot(),\n NgxPhotoEditorModule,\n NgZorroAntdModule\n ],\n providers: [\n BsModalRef,\n NgbActiveModal,\n {\n provide: HTTP_INTERCEPTORS,\n useClass: HttpInterceptorService,\n multi: true\n },\n {\n provide: LOCALE_ID,\n useValue: 'pt-BR'\n },\n { provide: NZ_I18N, useValue: en_US }\n ],\n bootstrap: [AppComponent]\n})\nexport class AppModule {}\n","import { enableProdMode } from '@angular/core';\r\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\r\nimport { AppModule } from './app/app.module';\r\nimport { environment } from './environments/environment';\r\n\r\nif (environment.production) {\r\n enableProdMode();\r\n}\r\n\r\nplatformBrowserDynamic()\r\n .bootstrapModule(AppModule)\r\n .catch(err => console.error(err));\r\n"]}