{"version":3,"sources":["Services/Config/ConfigService.ts","Services/AppInsights.ts","Services/AbpnClient.ts","Services/Auth/AuthSessionStorage.ts","Services/Auth/UserManagerSingleton.ts","Services/Auth/UserSessionContext.ts","Components/Auth/SessionTimeout.tsx","Services/Auth/AuthService.ts","Components/Shared/Components/AbpnSpinner.tsx","Components/Auth/AuthProvider.tsx","Components/Physician/Models/Certificate.ts","Components/Shared/Utility/GetDateWithOffset.ts","Components/Dashboard/Certificates/Components/CertificateRow.tsx","Components/Shared/Utility/DeepCopy.ts","Components/Shared/ValidatorHelper.ts","Components/Dashboard/Certificates/Components/RequestCertificationVerification.tsx","Components/Physician/Models/CCBlock.ts","Components/Dashboard/Certificates/Components/ClinicalStatusRow.tsx","Components/Dashboard/Certificates/Components/CertificatesCard.tsx","Components/Shared/Enums/CountryId.ts","Components/Shared/Components/MedicalLicenseCard.tsx","Components/Shared/Components/MedicalLicenseList.tsx","Components/Physician/Models/MedicalLicense.ts","Components/Dashboard/ContinuingCertification/Components/MedicalLicensure.tsx","Components/Dashboard/CertificationRequirements/Components/Activities.tsx","Components/Dashboard/CertificationRequirements/Components/CertificationRequirements.tsx","Components/Physician/Models/CCEnrollment.ts","Components/Dashboard/ContinuingCertification/Components/CCEnrollmentSummary.tsx","Services/PaymentProcessor/PaymentType.ts","Services/PaymentProcessor/FattPayClient.ts","Components/Shared/Utility/isNullOrUndefined.ts","Services/PaymentProcessor/CardXClient.tsx","Components/Shared/Utility/Booleanify.ts","Services/PaymentProcessor/AffirmClient.tsx","Services/PaymentProcessor/PaymentProcessor.ts","Components/Dashboard/ContinuingCertification/Models/CCAnnualFeePayment.ts","Services/PaymentProcessor/Payment.ts","Services/PaymentProcessor/FattPayBank.tsx","Components/Auth/ProfileProvider.tsx","Services/PaymentProcessor/CardXCreditCard.tsx","Services/PaymentProcessor/FattPayCreditCard.tsx","Services/PaymentProcessor/PaymentTypeSelector.tsx","Services/PaymentProcessor/PaymentContainer.tsx","Components/Shared/Utility/usePrevRefHook.ts","Components/Dashboard/ContinuingCertification/Components/AnnualFees.tsx","Components/Physician/Models/CCAttestation.ts","Components/Physician/Models/CCBlockEvaluationTernaryRequirement.ts","Components/Dashboard/ContinuingCertification/Components/CCActivityRequirements.tsx","Components/Dashboard/ContinuingCertification/Components/ExamAssessmentCard.tsx","Components/Dashboard/ContinuingCertification/Components/NonAbpnAssessmentCard.tsx","Components/Dashboard/ContinuingCertification/Components/CCAssessments.tsx","Components/Dashboard/ContinuingCertification/Components/CCBlockCard.tsx","Components/Dashboard/ContinuingCertification/Components/CCEnrollmentCard.tsx","Components/Apply/Models/ApplicationModel.ts","Components/Dashboard/Exams/Models/AppliedToExamination.ts","Components/Dashboard/ContinuingCertification/Components/ArticleResultList.tsx","Components/Dashboard/Assessments/ReEntryAssessmentCertificationCard.tsx","Components/Dashboard/Assessments/ReEntryAssessmentCard.tsx","Components/Dashboard/Exams/Components/ArticleReentryExaminationCard.tsx","Components/Dashboard/Assessments/AssessmentCard.tsx","Components/Dashboard/Exams/Components/ArticleExaminationCard.tsx","Components/Dashboard/Exams/Components/ExaminationsCard.tsx","Components/Shared/Components/HeaderWithTitle.tsx","Components/Shared/Components/Banner.tsx","Components/Shared/Components/SystemNotifications/DemographicsNotification.tsx","Components/Notifications/Models/SystemNotification.tsx","Components/Shared/Components/SystemNotifications/SystemNotificationBanner.tsx","Components/Shared/Components/SystemNotifications/SystemNotificationModal.tsx","Components/Shared/Components/SystemNotifications/SystemNotifications.tsx","Services/Notifications/SystemNotificationService.tsx","Components/Shared/Utility/urlUtil.ts","Components/Shared/Components/SystemNotifications/NotificationManager.tsx","Components/Home.tsx","Services/Auth/AuthConstants.ts","Components/Auth/Callback.tsx","Components/Auth/LogoutCallback.tsx","Components/Auth/Logout.tsx","Components/Auth/Login.tsx","Components/ApiAuthorizationRoutes.tsx","Components/Auth/OnBehalfOf.tsx","Components/Footer.tsx","Components/NavItems.tsx","Components/NavMenu.tsx","Components/Layout.tsx","Components/Shared/ErrorMessages.tsx","Components/ErrorPage.tsx","Components/Dashboard/Applications/Components/AvailableExaminationCard.tsx","Components/Dashboard/Applications/Components/AvailableExaminationGroup.tsx","Components/Dashboard/Applications/Components/AvailableApplicationGrid.tsx","Components/Auth/SessionExpirationModal.tsx","Components/Auth/AuthorizeRoute.tsx","Components/Auth/StaffOnlyRoute.tsx","Components/Apply/Models/Examination.ts","Components/Physician/Models/Address.ts","Components/Shared/Enums/AddressType.ts","Components/Shared/Components/AddressValidation.tsx","Components/Shared/Enums/AddressVerificationStatus.ts","Components/Shared/Components/AddressForm.tsx","Components/Shared/Components/ApplicantInformation.tsx","Components/Apply/Models/Fee.ts","Components/Apply/Components/PaymentCard.tsx","Components/Apply/Components/MedicalLicenseInformation.tsx","Components/Apply/Components/AttestationStatement.tsx","Components/Apply/Components/TestingOptions.tsx","Components/Physician/Models/SubspecialtyTraining.ts","Components/Physician/Models/PathwayMethod.ts","Components/Apply/Components/TrainingRequirements.tsx","Components/Apply/Components/ApplicationReceived.tsx","Components/Apply/Models/CnpTypes.ts","Components/Apply/Components/CnpOptions.tsx","Components/Apply/Components/Modules.tsx","Components/Apply/Components/CnpSection.tsx","Components/Shared/Components/ActionResultMessage.tsx","Components/Shared/Models/InvoiceLineItemModel.ts","Components/Shared/Models/InvoiceModel.ts","Services/PaymentProcessor/AffirmCheckout.tsx","Components/Shared/Enums/InvoiceStatus.ts","Components/Apply/Components/InvoicePaymentCard.tsx","Components/Apply/Components/Application.tsx","Components/Examination/ExaminationReport.tsx","Components/Dashboard/Exams/Models/ExaminationHistory.ts","Components/Examination/ExamHistory.tsx","Components/Unauthorized.tsx","Components/Physician/Models/CCActivity.ts","Components/ManageActivities/SelfReportedActivityRow.tsx","Components/ManageActivities/ManageActivities.tsx","Components/Auth/EmailNotFound.tsx","Components/Shared/Components/PasswordControl.tsx","Components/Account/SecurityCard.tsx","Components/Account/PersonalCard.tsx","Components/Account/AddressesCard.tsx","Components/Account/Models/PhysicianDemographicModel.ts","Components/Account/PhysicianDemographicCard.tsx","Components/Account/AccountInformation.tsx","Components/Shared/Models/ActionResult.ts","Components/Auth/AccountAssistance.tsx","Components/Auth/Models/SearchPhysicianModel.ts","Components/Auth/SearchPhysician.tsx","Components/Auth/Models/ActivateUser.ts","Components/Auth/UpdateEmail.tsx","Components/Auth/ActivationSelectExam.tsx","Components/Auth/SearchForAccount.tsx","Components/Physician/Models/MedicalEducationModel.ts","Components/Physician/Models/PhysicianCreation.ts","Components/Auth/MedicalEducationCard.tsx","Components/Auth/PersonalEmailCard.tsx","Components/Auth/PersonalInformationCard.tsx","Components/Auth/PersonalInformation.tsx","Components/CCEnrollment/Components/ArticleRequirementPreview.tsx","Components/CCEnrollment/Components/ExamRequirementPreview.tsx","Components/CCEnrollment/Models/CcAssessmentPathwayEnrollment.ts","Components/CCEnrollment/Components/AnnualFeePreview.tsx","Components/CCEnrollment/Components/ReviewRequirements.tsx","Components/CCEnrollment/Components/SelectCertificationRow.tsx","Components/CCEnrollment/Components/SelectCertifications.tsx","Components/CCEnrollment/Components/ArticlePathwayTerms.tsx","Components/CCEnrollment/Components/ExamPathwayTerms.tsx","Components/CCEnrollment/Components/TermsAndAttestation.tsx","Components/CCEnrollment/Models/UpdateCCAssessmentPathwayModel.ts","Components/CCEnrollment/Components/ManageCCEnrollment.tsx","Components/OtherBoardHome.tsx","Components/Orders/Models/Fee.ts","Components/PaymentsAndReceipts.tsx","Components/Messages/Components/Messages.tsx","App.tsx","reportWebVitals.ts","index.tsx"],"names":["configService","constructor","_configuration","getConfiguration","this","Promise","resolve","response","fetch","json","appInsights","load","config","ApplicationInsights","ConnectionString","connectionString","loadAppInsights","trackPageView","addTelemetryInitializer","envelope","tags","logError","ex","message","trackException","exception","Error","JSON","stringify","IdentityServerKnownClient","physicianPortal","abpnClient","_baseUri","_errorPage","ensureConfiguration","AbpnApiUrl","getDefaultHeaders","authContext","token","isAuthenticated","getAccessToken","headers","concat","push","onBehalfOf","getOnBehalfOf","validateResponse","status","reject","ok","clone","text","statusText","castResponse","parse","handleError","error","errorHandlerOpts","logout","handleErrorRedirect","window","location","href","setErrorPage","errorPage","post","relativePath","body","method","then","catch","postStringResponse","get","getResponse","userStore","authUrl","clientId","getOidcSession","sessionObj","sessionStorage","getItem","getStorageMedia","getInitUserStore","configuration","AbpnIdentity","Authority","ClientId","WebStorageStateStore","store","UserManagerSingleton","settings","_oidcUserManager","undefined","UserManager","getInstance","instance","getOidcUserManager","defaultContextValue","showSessionExpirationWarning","setShowSessionExpirationWarning","UserSessionContext","React","createContext","userEvents","SessionTimeout","userSessionContext","useContext","postLogOutRedirectUrl","setPostLogOutRedirectUrl","useState","lastUserActivityTimestampRef","useRef","onUserActivity","now","Date","current","userIdleTimeSec","Math","round","useEffect","async","PostLogoutRedirectUri","getPostLogoutRedirectUrl","onAccessTokenExpiring","idleTime","console","log","onAccessTokenExpired","isUserExpired","user","getUser","expired","err","signinSilent","signoutRedirect","post_logout_redirect_uri","invalidateExpiredSession","events","addAccessTokenExpiring","addAccessTokenExpired","removeAccessTokenExpiring","removeAccessTokenExpired","forEach","ev","document","addEventListener","removeEventListener","_jsx","_Fragment","AuthService","_this","onBehalfOfHeader","userManager","initialize","authority","client_id","redirect_uri","RedirectUri","response_type","automaticSilentRenew","accessTokenExpiringNotificationTime","loadUserInfo","scope","Scope","AuthSessionStorage","Log","logger","level","DEBUG","addUserLoaded","indexOf","navigateToScreen","addSilentRenewError","e","signinRedirectCallback","redirectUrl","localStorage","replace","access_token","setOnBehalfOf","physicianId","setItem","parseJwt","base64","split","atob","signinRedirect","emailPrefill","arguments","length","redirectUri","removeItem","login_hint","staffSigninRedirect","acr_values","oidcStorage","getSessionExpiration","oidc","expires_at","signinSilentCallback","createSigninRequest","id_token_hint","id_token","clearStaleState","changeEmail","model","changePassword","register","AbpnSpinner","props","contentJustification","justifyContent","className","children","Spinner","animation","AuthContext","_ref","_ref2","_ref3","_ref4","AuthConsumer","Consumer","AuthProvider","Component","super","authService","state","isReady","componentDidMount","setState","render","Provider","value","CertificateStatus","CertificationGeneration","getDateWithOffset","date","parsed","isNaN","parseDate","utcOffset","toISOString","CertificateRow","displayCertificate","setDisplayCertificate","expiredCertificatesByDate","setExpiredCertificatesByDate","activeCertificate","certificateGroup","find","_","certificateStatus","Active","inactiveCertificatesByDate","filter","Inactive","sort","a","b","awardDate","getTime","displayCert","lifetimeInfoIconContent","_jsxs","target","rel","ccLabel","mocLabel","isDisplayCertificateActive","showInfoIcon","infoIconContent","ccMocStatusLabel","showStatus","endDateLabel","certificateEndDateDisplay","displayEndDateLabel","certificationGeneration","TenYear","Lifetime","physician","currentCCEnrollment","Cc","expirationDate","toLocaleDateString","displayIsCertified","infoIcon","OverlayTrigger","trigger","placement","rootClose","overlay","Tooltip","id","bsPrefix","isRetired","isHPM","Fragment","Row","Col","xs","md","lg","xl","certificationName","toUpperCase","certificateNumber","ccStatusDisplay","map","deepCopy","Array","cp","v","n","Object","keys","k","ValidatorHelper","setCustomDatePickerValidationWithFeedback","element","errorMessage","dateErrorMsgControl","parentElement","getElementsByClassName","setCustomValidationWithFeedback","customErrorMsgControl","classList","add","setCustomValidity","errorMsgControl","textContent","clearCustomDatePickerValidation","clearCustomValidation","remove","validEmailRegex","RequestCertificationVerification","emailForm","emailInputRef","isDownloading","setIsDownloading","isSending","setIsSending","showRequestSection","setShowRequestSection","showEmailSection","setShowEmailSection","newEmail","setNewEmail","ccEmailAddresses","setCcEmailAddresses","closeModals","showVerificationButtons","hadCertificate","Button","variant","onClick","isRequestingVerificationLetter","openLetterRequestModal","Modal","show","onHide","Body","preventDefault","stopPropagation","blob","downloadFileUrl","URL","createObjectURL","Blob","link","createElement","setAttribute","appendChild","click","parentNode","removeChild","downloadVerification","isEmailingVerificationLetter","openEmailModal","Footer","Form","noValidate","ref","onSubmit","form","test","checkValidity","updatedEmails","addEmail","hidden","Control","type","required","onChange","updateEmailAddress","emailAddress","index","finally","emailVerification","CCBlockRequirementType","ClinicalStatus","ClinicalStatusRow","clinicalStatus","setClinicalStatus","ccBlock","newClinicalStatus","setNewClinicalStatus","isEditing","setIsEditing","setCCBlock","setPhysician","clinicalStatusOptions","key","parseInt","name","editable","as","currentTarget","defaultValue","x","ccBlocks","ccBlockId","currentCCBlock","updatePhysician","save","CertificatesCard","_props$physician$cert","_props$physician$curr","_props$physician$curr2","_props$physician$curr5","_props$physician$curr6","groupedCertsBySpecialty","certificates","reduce","result","item","groupedCertificates","onSaveCertificate","updatedCertificate","updatedPhysician","certIndex","findIndex","certificateId","splice","evaluateCurrentBlockAndCallUpdate","certificatesRows","values","isPrimary","aAwardDates","bAwardDates","max","onSave","showPrint","isBehindCurrentBlock","nextBlock","_props$physician$curr3","_props$physician$curr4","startDate","endDate","Card","border","Title","CountryId","MedicalLicenseCard","_props$states$find","_props$medicalLicense","originalLicense","setOriginalLicense","medicalLicense","updatedLicense","setUpdatedLicense","noGutters","Group","controlId","Label","updated","licenseNumber","updateLicenseNumber","Text","states","stateId","updateState","label","countryId","Usa","shortName","Canada","InputMask","mask","dateString","year","getFullYear","month","getMonth","toString","day","getDate","formatDefaultValue","toJSON","updateExpirationDate","inputProps","isNew","updateMedicalLicense","beginEdit","handleRemove","validationMessage","Alert","MedicalLicenseList","medicalLicenses","license","MedicalLicense","medicalLicenseId","MedicalLicensure","setMedicalLicenses","openCollapse","setOpenCollapse","isSectionOpen","saveAllMedicalLicenses","medicalLicensesToUpdate","_medicalLicense$licen","trim","some","_$validationMessage","validate","url","onSaveLicenses","toggleCollaspe","showCollapse","Collapse","in","newList","removeMedicalLicense","disabled","_$validationMessage2","every","addNewMedicalLicense","newMedicalLicense","Activities","Link","to","CertificationRequirements","requiredArticles","hasActiveTenYearCert","ccEnrollmentsModel","hasCCEnrollmentHistory","sortBySpecialtyAlpha","getCertsString","certs","certList","sortedExpiredCerts","slice","join","displayRecertificationInstructions","yearsRequirement","requiredCredits","showPatientSafetyRequirement","isInactive","hasTenYearCert","hasLiftimeCert","showRecertRequirements","showLifetimeOnlyLanguage","showLifetimeOnlyTenYearLanguage","today","recertifiedDate","isDansInvalidatedAllowReentryExam","size","isLapsedNoLicense","licenses","CCAssessmentType","CCEnrollmentSummary","isEnrolledinCC","lifeTimeActiveCertificates","cert","getCcAssessmentTypeName","ccAssessmentType","Exam","Article","activeAndFutureEnollmentCertificates","activeEnrollmentCertificates","futureEnrollmentCertificates","sortedEnrollmentCertificates","aCertificate","bCertificate","bg","enrollmentCertificate","ccEnrollmentCertificate","certificate","ccCertEnrollmentStartDate","enrollmentStartDate","getCCEnrollmentCertificateListItem","PaymentType","fattPayClient","_fattJs","script","src","getPaymentProcessorId","PaymentProcesserEnum","Stax","initializeCreditCard","cardElement","cvvElement","FattJs","FattPay","WebsitePaymentsToken","number","placeholder","style","format","cvv","showCardForm","initializeBank","tokenize","payment","email","first_name","firstName","last_name","lastName","person_name","address_city","city","address_state","paymentType","CreditCardVisa","bank_type","bankType","bank_holder_type","bankHolderType","bank_account","accountNumber","bank_routing","routingNumber","PaymentToken","LastFour","card_last_four","IsValid","isNullOrUndefined","_window","_scriptElement","_callback","defaultTestAmount","CardX","getCardXEnvironment","Environment","Production","Test","isTestScript","includes","initializeCardX","instanceOpts","cardXEnvironment","scriptOpts","scriptId","dataButton","srcPath","Script","account","Account","callbackFnName","mode","amount","billingInclude","includeBillingFields","billingRequired","isBillingRequired","_cardXCallback","cardXCallback","bind","callbackFn","injectScript","getAmountForEnvironment","scriptPath","opts","updateScriptAttributes","disposeCardX","booleanify","affirmClient","Affirm","initializeAffirm","affirmConfig","public_api_key","PublicApiKey","affirmConfigString","affirmFunction","crossOrigin","createTextNode","CreditCardClientLibrary","getCreditCardProcessor","useCardXFlag","FeatureFlags","UseCardXPaymentProcessor","isCreditCardPaymentType","Discover","MasterCard","AmericanExpress","getPaymentProcessorForPaymentType","creditCardLibrary","cardXClient","ECheckAch","CCAnnualFeePayment","fees","years","BankHolderType","BankType","FattPayBank","forwardRef","_props$payment$error","_props$payment$error2","_props$payment$error3","routingNumberRef","accountNumberRef","reenterAccountNumberRef","useImperativeHandle","isValid","secondAccountNumber","updateBankType","onPaymentChanged","updateBankHolderType","isInvalid","field","updateFirstName","Feedback","updateLastName","height","updateRoutingNumber","maxLength","updateAccountNumber","updateSecondAccountNumber","Image","width","maxWidth","maxHeight","marginTop","Check","formNoValidate","checked","checking","savings","personal","business","ProfileContext","ProfileProvider","setUser","auth","userResult","otherBoardPhysicianId","loadUser","didCardXInitialize","CardXCreditCard","cardXRef","createRef","handlePaymentError","updatedPayment","CardXClient","onCardXCallback","cardXResponse","paymentCancelledError","isPaymentSuccess","pi_response_status","paymentUnsuccessfulError","paymentCharge","paymentProcessorAccount","pt_gateway_account","cardHolderName","pt_payment_name","cardNumber","pt_card_number","cardType","pt_card_type","toLowerCase","transactionDate","responseCode","pi_response_code","transactionId","pt_order_id","surchargeAmount","pt_surcharge_amount","transactionAmount","pt_transaction_amount","isSuccessful","updatePayment","pt_billing_city","pt_billing_state","pt_billing_email_address","substring","pt_card_token","hasBeenCharged","cardWrapperStyle","showPaymentButton","isDisabled","monthRegex","RegExp","yearRegex","FattPayCreditCard","_props$payment$error4","cardRef","cvvRef","ccMonthRef","ccYearRef","match","updateMonth","updateYear","PaymentTypeSelector","CreditCardPaymentTypeSelector","creditCardProcessor","None","PaymentContainer","ccPaymentRef","achPaymentRef","paymentButtonType","setPaymentButtonType","setCreditCardProcessor","updatePaymentType","onPaymentTypeChanged","cardProcessor","getCreditCardProcessorForPaymentContainer","usePrevious","AnnualFees","_props$contactAddress","_props$contactAddress2","_props$ccBlock$unpaid","payFees","setPayFees","isSubmitting","setIsSubmitting","selectedYearsToPay","setSelectedYearsToPay","setPayment","contactAddress","stateCode","isPaymentSuccessful","setIsPaymentSuccessful","useBC","setUseBC","history","useHistory","isPaymentChargedSubmitted","payContainerRef","unpaidFees","ccAnnualFees","isWaived","isPaid","getUnpaidYears","unpaidOrphanYears","addRequiredFeesToPay","allAnnualFees","i","annualFee","requiredFee","isSelectYearToPayInTheFuture","UseBusinessCentral","getUseBC","moment","isSelectYearToPayDisabled","isReadOnly","unSelectedYearsToPay","lastSelectedFee","selectedYear","feeAmount","getTotalAmount","submitPayment","resetPaymentCharge","checkShouldSubmitAfterPaymentCharged","paymentProcessor","dto","invoicePaymentRequest","invoiceNumbers","invoiceNumber","setTimeout","scrollIntoView","behavior","onSaveBlock","updateTotal","getPaidStatus","isSubmitDisabled","onFormSubmitPayment","blockYears","CCAttestation","ccAttestationId","ccAttestationType","appliedToYear","credits","selfReportedCredits","attestationDate","updatedDate","CCAttestationType","CCBlockEvaluationTernaryRequirement","PatientSafetlyRequirementsColumn","showPsCheck","NotRequired","isPhysicianPatientSafetyRequired","hasPatientSafetyCompleted","isPSVerified","requirementsLabel","isPatientSafetyRequired","RequirementsNotMet","PatientSafetyActivityAttestationRow","showIsPatientSafetyRequired","showIsVerifiedLabel","showTotalResultCheck","isPSChecked","hasPipWaiver","Input","isPSDisabled","updateIsPSChecked","CCActivityRequirements","_getDateWithOffset","_ccBlock$ccAppliedWai","isPIPClinicalChecked","setIsPIPClincalChecked","hasPipClinicalAttestation","isPIPFeedbackChecked","setIsPIPFeedbackChecked","hasPipFeedbackAttestation","setIsPSChecked","isEditingAttestations","setIsEditingAttestations","displaySuccessSaveAlert","setDisplaySuccessSaveAlert","isFormDirty","setIsFormDirty","block","ccVerifiedActivities","isPatientSafety","isPIPClinicalVerifiedChecked","isPipClinical","isPIPFeedbackVerifiedChecked","isPipFeedback","isPipRequired","isPIPDisabled","selfAttestedPIPClinicalCredits","selfAttestedPIPFeedbackCredits","selfAttestedPSCredits","totalWaivedAndEarnedCMECredits","totalCMEAttestationCredits","totalWaivedCMECredits","totalVerifiedCMECredits","totalWaivedAndEarnedSACredits","totalSAAttestationCredits","totalWaivedSACredits","totalVerifiedSACredits","overageOfSACredits","requiredSACredits","percentCMECredits","requiredCMECredits","percentSACredits","isInAbcc","enrollmentCertificates","toggleEdit","createNewAttestation","newAttestation","endYear","updateCCAttestations","attestation","newCCBlock","ccAttestations","PIPClinical","filteredPIPClinicalList","PIPFeedback","filteredPIPFeedbackList","CME","SA","totalWaivedAndEarnedSACreditsDisplay","showOverageInfoIcons","hasPassedAudit","hasFailedAudit","hasAudit","Prompt","when","ProgressBar","getPipRequirementMessage","isActivityRequirementsCompleted","saveAllCCAttestations","Table","responsive","getLastUpdated","ccAppliedWaivers","waiverTypeDescription","cmeCredits","saCredits","min","step","updateSelfReportedSACME","parseFloat","updateSelfReportedCME","updateIsPIPClinicalChecked","updateIsPIPFeedbackChecked","PatientSafety","open","ExamAssessmentCard","examAssessment","dueDate","NonAbpnAssessmentCard","nonAbpnAssessment","CCAssessments","_assessments$examAsse","_assessments$nonAbpnA","assessments","setAssessments","examAssessments","certificationId","nonAbpnAssessments","CCBlockCard","setBlockYears","isCurrentBlock","ccEnrollment","isActivitiesReadOnly","isFeesReadOnly","showErrors","extensionDate","isNewestBlock","startYear","apply","isBlockInFuture","outstandingRequirements","isMeetingLicenseRequirement","requirementType","isMeetingFeeRequirement","Fees","isMeetingPatientSafetyRequirement","isMeetingPIPRequirement","PIP","isMeetingCMERequirement","isMeetingAuditRequirement","FailedAudit","isMeetingActivityRequirements","showActivityRequirements","showFees","determineBlockYears","newBlockYears","_props$ccBlock$ccAnnu","hideLicenses","CCEnrollmentCard","_props$currentEnrollm","_currentBlock$outstan","currentBlock","currentEnrollment","isBehindOnCurrentBlock","addresses","isContact","updatedBlock","ApplicationModel","applicationId","examinationId","balance","orderNumber","examLateFee","totalFeeAmount","totalExamFeeAmount","hasAttested","needsFinalReview","attestationContent","installmentOptions","createdDate","isAdaRequested","isNmaRequested","isTransferredIn","isSplitPay","candidateStatusDescription","candidateStatusReason","candidateStatus","knownCandidateStatusReason","modularCertificationIds","order","cnpType","hasDeadlineException","CandidateStatus","KnownCandidateStatusReason","ExamineeStatus","ExamineeStatusReason","ArticleResultList","articleResults","articleResult","articleTitle","completedDate","isPass","rescore","rescoreDate","esoArticleId","ReEntryAssessmentCertificationCard","_props$reEntryAssessm","_props$reEntryAssessm2","_props$reEntryAssessm3","numPassed","reEntryAssessmentCertification","ccArticleResults","numFailed","percentPassed","perCertificationArticleRequirement","role","ReEntryAssessmentCard","_props$assessment$reE","_props$assessment$reE2","_props$assessment$reE3","detailVisible","setDetailVisible","articleAccessUrl","setArticleAccessUrl","cfg","ArticleAccessUrl","getArticleAccessUrl","getTotalPassed","totalPassed","assessment","reEntryAssessmentCertifications","getTotalFailed","totalFailed","failureMax","attemmtpsAllowed","totalArticleRequirement","percentFailed","totalAttempts","getAllArticleResults","allArticleResults","ccArticleResult","ArticleReentryExaminationCard","reEntryAssessments","setReEntryAssessments","AssessmentCard","articleFailureMax","articleRequirement","examDueHeader","isArticleBasedExam","articleStatusMessage","releaseGrades","ArticleExaminationCard","setAssessment","exam","examineeId","ExaminationsCard","examsAppliedTo","setExamsAppliedTo","isLoading","setIsLoading","exams","getDateTimeFormatted","toLocaleTimeString","hour","minute","hour12","getCandidateStatusDescription","application","ToBeReviewed","Approved","Withdrawn","Denied","Withdrew","Unsubmitted","getApplicationDeadlineDate","getCandidateStatusReason","_exam$application$can","TransferredOut","getExamineeStatusDescription","examineeStatus","Authorized","appointments","Delivered","examineeStatusReasonId","NoShow","Invalidated","examineeStatusReason","examineeStatusDescription","removeDeletedApplicationExam","showMakePaymentButton","isExamFeePaid","getPaymentButtonText","getExamDateTitle","getExamDates","_exam$extensionDate","applicationDeadlineDate","isGradeAvailable","examinationGrade","GradingComplete","confirmDeleteApplication","isConfirming","updatedExams","isConfirmingDelete","showArticleReEntryCard","isArticleBased","isReEntry","showArticleExaminationCard","isGradingComplete","_exam$order","_exam$order2","title","moduleSelection","formattedCnpType","startDateTime","addressLine1","addressLine2","addressLine3","postalCode","showExamineeStatus","AuthorizationPending","NA","InviteSent","deleteApplication","HeaderWithTitle","contactMessage","subTitle","Banner","DemographicsNotification","showDemographicsModal","backdrop","centered","keyboard","Header","onPrimaryActionTaken","SystemNotificationDisplayType","SystemNotificationApplication","SystemNotificationBanner","notification","PrimaryActionButton","onNotificationAction","SystemNotificationButtonAction","PrimaryAction","primaryActionText","CloseButton","CloseAction","closeButtonText","DontRemindMeButton","DontRemindMeAction","dontRemindButtonText","SystemNotificationModal","onModalClose","showModal","closeButton","onPermanentlyDismiss","SystemNotifications","notifications","bannerNotifications","displayType","modalNotifications","modalVisbilityState","setModalVisbilityState","visibilityState","visibleIndex","modalCount","newModalVisibilityState","systemNotificationId","notificationActionType","currentVisibleModalIndex","nextModalVisbilityState","nextVisibleModalIndex","modalNotificationElements","showModalNotifications","bannerNotificationElements","systemNotificationService","getSystemNotifications","saveSystemNotificationResponse","systemNotificationApplicationId","PhysicianPortal","primaryActionTaken","permanentlyDismiss","personKey","validPrimaryActionUrlDomain","canNavigateToUrl","isAbsoluteUrl","NotificationManager","setNotifications","setShowDemographicsModal","isImpersonating","setIsImpersonating","SystemNotificationService","getActiveSystemNotifications","notificationsCopy","primaryActionUrl","origin","pathname","Home","_physician$currentCCE","_physician$currentCCE2","updateLastLogin","isOtherBoardPhysician","physicianResult","getPhysician","fullName","LogoutActions","LoginActions","prefix","ApplicationPaths","DefaultLoginRedirectPath","ApiAuthorizationPrefix","Login","StaffLogin","LoginFailed","LoginCallback","LogOut","LoggedOut","LogOutCallback","SearchForAccount","OnBehalfOf","Callback","LogoutCallback","Logout","useParams","decodedUrl","decodeURIComponent","ApiAuthorizationRoutes","Route","exact","path","component","Redirect","NavItems","authenticatedView","logoutPath","local","Dropdown","Toggle","Menu","Item","NavDropdown","Divider","NavMenu","isErrorPage","Navbar","NavbarBrand","otherBoardPhysicianCode","NavbarToggle","Layout","Container","fluid","ErrorMessages","UnexpectedError","PaymentProcessingError","ErrorPage","urlParams","errorId","AvailableExaminationCard","currentDate","setHours","isLateApplication","valueOf","examination","applicationDeadLineDate","applicationAvailableDate","nextApplicationAvailableDate","isAvailable","filteredExamCertifications","_props$currentCCEnrol","ccEnrollmentExamCertificates","ccEnrollmentExamCertificationIds","certification_Key","availableModuleCertifications","examFee","lateFee","infoUrl","applyLinkTo","AvailableExaminationGroup","examinations","CardColumns","filteredExaminations","AvailableApplicationGrid","availableExams","setAvailableExams","loading","setLoading","loadData","isMoc","SessionExpirationModal","AuthorizeRoute","rest","createPortal","StaffOnlyRoute","KnownExaminationDefinitions","KnownCertifications","Address","homePhoneNumber","officePhoneNumber","company","company2","line1","line2","zipCode","faxNumber","types","addressId","updatedBy","newAreaCode","verificationStatus","dateOptedIn","AddressType","AddressValidation","getAddressString","address","data","originalAddress","suggestedAddress","onUseSuggested","onUseAsEntered","AddressVerificationStatus","AddressForm","_props$showStreetAddr","_data$address","_data$address2","_data$address3","_data$address4","_data$address5","_data$address6","_data$address7","_data$address8","_data$address9","_data$address10","_data$address11","_data$address12","_data$address13","_data$address14","_data$address15","_data$address16","_data$address17","_props$showSubmit","_props$submitText","setData","addressVerificationResult","validated","showAddressValidation","showStreetAddress","runValidation","prevData","_prevData$address","updatedData","getElementById","runMelissaValidation","filterStates","Public","Shipping","UseAsEntered","UseSuggested","updateWithSuggestedAddress","addressVerificationResults","validationResult","onVerificationSelection","verficationSelection","updatedAddress","onUpdate","verifyAndSaveAddress","updateLine1","updateLine2","country","countries","updateCountry","updateCity","updateZipCode","updatePhoneNumber","showSubmit","submitText","showCancel","onCancel","ApplicantInformation","_props$addresses$find","_props$addresses","createNewContactAddress","newContactAddress","Contact","isNewPhysician","onOpen","_props$addresses2","_props$addresses3","_props$addresses4","publicationAndShippingAddress","publicationAddress","shippingAddress","buildAddressList","FeeType","PaymentCard","_props$application6","_props$application7","_props$application$in7","_props$application$in8","_selectedInstallmentP","_props$application8","hasExistingOrder","orderWithFirstPaymentDue","total","isDisable","setIsDisable","formRef","isPastDeadline","deadlineDate","toDateString","getNonExamAndApplicationFees","_props$application$or","_props$application","_props$application$or2","_props$application$in2","_props$application$in","_props$application2","_props$application2$o","otherFees","totalInstallmentsAmount","paymentPlan","setPaymentPlan","dueNow","totalBalance","isPayInFull","isPayInSplit","existingOrderWithSplitPay","hasPaymentPlan","existingOrderWithFirstPaymentDue","hasBalanceDue","canSelectPaymentPlan","selectedInstallmentPayments","setSelectedInstallmentPayments","getPaymentPlanAmountDueNow","_props$application3","_props$application3$o","_props$application$in3","_props$application4","_props$application4$o","_props$application5","_props$application5$i","_props$application5$i2","isFirstInstallmentPastDue","isSecondInstallmentPastDue","isFirstInstallmentSelected","isSecondInstallmentSelected","_updatedPayment","isInstallmentPayment","applicationReceipt","displayBanner","onApplicationSubmitted","getPaymentDeadlineDate","_props$application$in4","_props$application$in5","_props$application$in6","applicationLateDeadlineDate","getLateFeeDate","orderLineItem","feeType","lateFeeMoc","lateFeeInitial","formattedDate","getFeeDescription","fee","isDiscount","ccAnnualFee","multipleExamDiscount","committeeMemberDiscount","committeeMemberLateFeeDiscount","committeeMemberProcessingFeeDiscount","committeeMemberTransferFeeDiscount","feeDescription","resetPaymentPlan","isFormDisabled","event","examinationDates","orderLineItems","description","completedPayments","defaultChecked","updateInstallmentsSelectedTotal","setPayInFull","setSplitPayment","getExamLateFee","_props$examination$fe","_props$examination$fe2","initialLateFee","MedicalLicenseInformation","onContinue","areLicensesValid","requiresUnrestrictedLicense","examStartDate","AttestationStatement","ReactHtmlParser","onApplicationAttestedToggled","TestingOptions","selection","setSelection","setErrorMessage","isNoAccommodationRequested","validateSelection","toggleNoAccommodation","noAccommodation","toggleAda","toggleNma","SubspecialtyTraining","subspecialtyTrainingId","trainingProgramId","trainingInstitutionName","monthsCredit","isPartTime","percentTimeForPractice","practiceCertificationBoard","practiceCertificationDate","practiceLocation","practiceTime","pathwayMethod","AlternativePathwayPracticeOption","PathwayMethod","TrainingRequirements","_props$examination$ot","_props$examination$pr","subSpecialtyTraining","setSubspecialtyTraining","alternatePathwayEndDate","alternativePathwayEndDate","isInAlternativePathwayPeriod","hasOnePathwayOption","pathwayOptions","endDateFormElement","practiceCertDateElement","practiceBoardId","practiceBoardElement","existing","subSpecialtyTrainingList","validateDates","subspecialty","Fellowship","OtherBoard","Practice","updateProgramName","updateStartDate","updateEndDate","updateIsPartTime","getPathwayOptionLabel","pathway","updatePathwayMethod","pathwayMethodId","resetTrainingValues","training","saveSubspecialtyTraining","examinationDefinitionId","NeurocriticalCare","BrainInjuryMedicine","FormGroup","getFellowshipRequirementText","startDateYear","updatePracticeCertificationBoard","otherBoardPathwayOptions","otherBoard","updatePracticeCertificationDate","updatePracticeLocation","practicePathwayOptions","updatePracticeTime","ApplicationReceived","offset","CnpTypes","CnpOptions","setCnpType","newValue","cnpTypeUpdated","updateCnpType","Modules","_props$certificates$f","_props$moduleTypes$fi","physicianInactivePrimaryCertIds","requiredCertificationIds","moduleTypes","isCertificationIdRequiredModuleType","moduleSelections","setModuleSelections","availableCertificationIds","setAvailableCertificationIds","errorMessages","setErrorMessages","selections","newErrorMessages","ClinicalNeurophysiology","updateModuleSelection","updatedCnpType","isChecked","module","isRequired","moduleTypeId","isCnp","getCertificate","moduleType","filterAvailableModules","availablePhysicianModules","isCertificationAvailable","existingSelectedModules","_props$application$mo","isExistingSelectedModuleType","filteredExamModules","examCertificationIds","Number","modules","examinationModuleId","CnpSection","setIsValid","ActionResultMessage","alertVariant","InvoiceLineItemModel","unitPrice","discountAmount","discountDescription","product","isRefunded","InvoiceModel","invoiceStatus","createDate","lineItems","appliedPayment","isExpanded","amountDue","_this$lineItems","sum","paymentIncludesMultipleInvoices","_this$appliedPayment","AffirmCheckout","affirm","ui","ready","getAffirmConfig","invoices","checkout","loanConfirmedByUser","checkout_token","onAffirmCheckoutComplete","loanCancelledOrFailed","getOrderId","primaryInvoice","items","display_name","sku","productCode","unit_price","qty","merchant","user_confirmation_url","user_cancel_url","user_confirmation_url_action","shipping","first","last","zipcode","isO3Code","phone_number","billing","metadata","order_id","currency","shipping_amount","tax_amount","onFail","onSuccess","onValidationError","InvoiceStatus","InvoicePaymentCard","setInvoices","unpaidInvoices","unpaidLineItems","flatMap","isLoadingInvoices","setIsLoadingInvoices","setCanSelectPaymentPlan","previouslyPaidInvoices","setPreviouslyPaidInvoices","isPayOverTime","hasInvoice","list","results","_$lineItems","Abandoned","WrittenOff","invoice","_invoice$lineItems","lineItem","isExamFee","feeTypeId","newInvoice","newInvoices","Paid","PaidReceivable","prevPaidInvoices","loadInvoices","AllowPayOverTime","getCanSelectPaymentPlan","getInitialBalanceDue","balanceDue","replaceUnsavedInvoice","newArrayOfInvoices","_$invoiceNumber","_$lineItems2","invoiceReceipt","newResults","updatedInvoices","reloadedInvoices","examFeeMoc","examFeeMocPrimaryInitial","examFeeMocWithThreeOrMoreModules","examFeeMocWithTwoModules","examFeeSubspecialtyinitial","displayInvoiceLineItemDiscount","canSubmitForm","submit","setPayOverTime","dispatchEvent","Event","cancelable","bubbles","ApplicationSection","Application","_application$extensio","_application$order$ba","_application$order2","_application$order$ba2","_application$order3","setExamination","setApplication","setAttestationContent","isSubmitted","setIsSubmitted","displayPaymentSuccessful","setDisplayPaymentSuccessful","sectionNavigation","setSectionNav","navigateToPaySection","sectionsComplete","activeSections","applicationRequiresTrainingSection","requiresFellowshipTraining","exceptionText","formattedApplicationDeadlineDate","previousSectionComplete","section","saveApplication","isNewApplication","params","existingApplication","applicationDto","_application$order","isCombinedMoc","Payment","goToPaySection","applicationCreatedDate","template","updateSectionsComplete","updatedNav","isSectionDisabled","addressesToKeep","saveAllAddresses","Neurology","ChildNeurology","Psychiatry","examinationModules","filteredExamCertificationIds","filteredCCEnrollmentCertificateIds","filteredPhysicianCertificates","moduleCertificationKeys","subspecialtyTrainingList","updateSubSpecialtyTraining","isSectionAvailable","onApplicationSubmittedWithInvoice","ExaminationReport","ExaminationGrade","ExamHistory","examHistory","setExamHistory","examinationIdDownloading","setExaminationIdDownloading","getGrade","Pass","Fail","UnexcusedAbsence","downloadExamResultsAvailable","hasExamineeDocuments","showConfirmPersonalInfoMessage","setDate","cutoff","isInConfirmDateRange","showConfirmPersonalInfoMessageMOC","download","Unauthorized","CCActivity","ccActivityId","activityName","organizationName","isSa","SelfReportedActivityRow","originalSelfReportedActivity","setOriginalSelfReportedActivity","selfReportedActivity","updatedSelfReportedActivity","setUpdatedSelfReportedActivity","setIsConfirmingDelete","organizationErrorMessage","setOrganizationErrorMessage","dateErrorMessage","setDateErrorMessage","cmeErrorMessage","setCmeErrorMessage","saCmeErrorMessage","setSaCmeErrorMessage","clearValidation","colSpan","updateActivityName","updateOrganizationName","minWidth","updateCompletedDate","updateCMECredits","updateSACredits","handleUpdate","ManageActivities","verifiedActivities","setVerifiedActivities","verifiedActivitiesStartDate","setVerifiedActivitiesStartDate","verifiedActivitiesEndDate","setVerifiedActivitiesEndDate","selfReportedActivities","setSelfReportedActivities","selfReportedActivitiesStartDate","setSelfReportedActivitiesStartDate","selfReportedActivitiesEndDate","setSelfReportedActivitiesEndDate","filteredSelfReportedActivities","setFilteredSelfReportedActivities","filterInputUpdate","setFilterInputUpdate","dateSort","sortedVerifiedActivities","sortedSelfReportedActivities","ccSelfReportedActivities","_getDateWithOffset2","filterededVerifiedActivities","_getDateWithOffset3","_getDateWithOffset4","newFilterededSelfReportedActivities","removeSelfReportedActivity","updateSelfReportedActivity","clearSelfReportedFitler","forceFilterInputUpdate","onBlur","clearVerifiedFilter","addNewSelfReportedActivity","newSelfReportedActivity","unshift","table","scrollTop","EmailNotFound","PasswordControl","inputType","setInputType","iconName","setIconName","InputGroup","minLength","toggleShowCharacters","SecurityCard","currentEmail","setCurrentEmail","updatedEmail","setUpdatedEmail","isEditingEmail","setIsEditingEmail","isEditingPassword","setIsEditingPassword","changePasswordModel","setChangePasswordModel","showEmailSuccess","setShowEmailSuccess","showPasswordSuccess","setShowPasswordSuccess","passwordErrorMessage","setPasswordErrorMessage","emailErrorMessage","setEmailErrorMessage","validatePassword","setValidatePassword","isNewPasswordValid","newPassword","confirmNewPassword","changeEmailModel","registerClientId","ssn4","dateOfBirth","res","changeEmailAddress","cancelEditEmailAddress","currentPassword","PersonalCard","currentName","viewInstructionsButton","openInstructions","focus","AddressesCard","setAddresses","setContactAddress","setShippingAddress","publicAddress","setPublicAddress","isEditingContactAddress","setIsEditingContactAddress","isEditingShippingAddress","setIsEditingShippingAddress","isEditingPublicAddress","setIsEditingPublicAddress","showSuccess","setShowSuccess","hasEUCode","setHasEUCode","setAddressesFromList","checkForEuCode","saveAddress","addressList","createNewAddress","newAddress","updatedContact","removeAddressType","updatedPublic","updatedShipping","displayAddress","_props$countries$find","isPublic","getGDPRText","pubAddress","hasntOptedIn","saveOptInOut","opt","PhysicianDemographicModel","physicianDemographicId","ethnicity","gender","races","EthnicityType","GenderType","PhysicianDemographicCard","demographicModel","setDemographicModel","showDeleteSuccess","setShowDeleteSuccess","handleDemographicEthnicityChange","updatedModel","handleDemographicGenderChange","handleDemographicRaceChange","race","isDemographicRaceChecked","raceId","ctrlId","htmlFor","savePhysicianDemographic","NoAnswer","deletePhysicianDemographic","AccountInformation","ActionResult","alertType","AccountAssistance","mailToLink","setMailToLink","updatePersonalInfoLink","setUpdatePersonalInfoLink","PhysicianPortalHelp","UpdatePersonalInfoInstructions","hascompletedResidency","showSearchAgain","searchAgain","showLogin","SearchPhysicianModel","siteToken","SearchPhysician","setModel","captchaResponse","setCaptchaResponse","siteKey","setSiteKey","ssn4Ref","Captcha","SiteKey","updateDateOfBirth","updateLastFourOfSSN","ReCAPTCHA","sitekey","handleCaptcha","ActivateUser","UpdateEmail","setEmail","emailUnavilable","setEmailUnavaliable","setIsSubmitDisabled","activateModel","activatePhysician","ActivationSelectExam","noExamsAvailable","setNoExamsAvailable","hasNoExams","reportNoExams","searchModel","matchResult","setMatchResult","alert","setAlert","hasCompletedResidency","setHasCompletedResidency","allowUpdateEmail","isExactMatch","requiresAccountAssistance","showExamSelection","showAccountAssistance","showResidency","matchPhysician","userModel","newAlert","MedicalEducation","medicalEducationId","graduationYear","locationId","isGraduationYearValid","isLocationIdValid","PhysicianCreation","medicalEducation","examinationAppliedToId","PhysicianName","middleName","suffix","MedicalEducationCard","updateMedicalEducationValidation","isFormValid","updateMedicalEducation","updateGraduationYear","medicalEducationModel","medicalEducationLocationLookupList","updateLocationId","PersonalEmailCard","_props$userModel","isNewEmailUnique","setIsNewEmailUnique","isFormatValid","setIsFormatValid","encodedLoginUrl","encodeURIComponent","validFormatAndNotUniqueEmail","isEmailValid","updateEmailValidation","updatePersonalEmail","isEmailFormValid","PersonalInformationCard","setName","createPhysicianName","newName","physicianData","updatePersonalInformationValidation","updatedName","updatePersonalInformation","updateMiddleName","updateSuffix","updateTitle","PersonalInformation","useLocation","physicianModel","setPhysicianModel","newPhysician","setNewPhysician","showAlert","setShowAlert","setRunValidation","isMedicalEducationFormValid","setIsMedicalEducationFormValid","isPersonalInfoFormValid","setIsPersonalInfoFormValid","isAddressFormValid","setIsAddressFormValid","isNewEmailValid","setIsNewEmailValid","setUserModel","createNewPhysician","CreatePhysician","updatePhysicianName","isPersonalInformationValid","updateContactAddress","isMedicalEducationValid","validateAndSave","newUserModel","ArticleRequirementPreview","getAbccCertifications","pathwayEnrollment","ccEnrollmentCertificates","isEnrolled","isAbccEligible","articlePathwayPerCertificationMinimum","articlePathwayFlexRequirement","abccCert","getTotalArticlesRequired","totalRequired","ExamRequirementPreview","getExamCertifications","Other","getExamAssessmentTitle","formatExamDue","CcAssessmentPathwayEnrollment","ccEnrollmentId","currentBlockStart","currentBlockEnd","currentBlockExtensionDate","oneCertificationAnnualFee","twoCertificationAnnualFee","threeOrMoreCertificationAnnualFee","CCAssessmentPathwayHelper","AnnualFeePreview","isFuture","getAnnualFee","ReviewRequirements","onPrevious","SelectCertificationRow","updateCcAssessmentType","updatedCert","lastArticleAssessmentEnrolledDate","updateEnrollmentCert","updateCertIsEnrolled","SelectCertifications","onUpdateEnrollmentCert","updateCertificates","ArticlePathwayTerms","abccCertificates","ccAssessmentAttestationDate","updateCertificateAttestation","ExamPathwayTerms","examCertificates","TermsAndAttestation","getEnrolledCertificates","onCompleteEnrollment","onUpdateCertificateAttestation","numCertificates","UpdateCCAssessmentPathwayModel","cCEnrollmentId","cCEnrollmentCertificates","UpdateCCAssessmentPathwayCertificateModel","cCAssessmentType","cCAssessmentAttestationDate","enrollmentEndDate","EnrollmentSection","ManageCCEnrollment","setPathwayEnrollment","enrollment","Certifications","Requirements","Terms","onUpdatedCertificates","onSelectCertificationsContinue","onReviewRequirementsContinue","onReviewRequirementsPrevious","onTermsPrevious","OtherBoardHome","loadAssessments","OrdersAndInvoices","payments","setPayments","paymentInvoices","paymentOrders","sortedPayments","paymentDateSort","loadOrdersAndInvoices","getFees","Refund","getRefunds","getFeesSubtotal","getRefundsSubtotal","getTotal","getBalance","getTotalPaid","getFeeAmount","abs","getSumOrderTotal","orders","getSumInvoiceTotal","_$invoices","_$orders","api","paymentId","updatedPayments","collapseRow","expandRow","invoiceIndex","lineItemIndex","orderIndex","_order$installments","orderLineItemId","refund","installments","installment","installmentIndex","Messages","messages","setMessages","loadMessages","_$attachments","statusDate","messageTemplateName","attachments","messageAttachment","messageAttachmentId","documentName","downloadMessageAttachment","messageId","subject","downloadMessageDocument","App","basename","errorPageUrl","Router","Switch","strict","PaymentsAndReceipts","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","ReactDOM","StrictMode"],"mappings":"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","file":"static/js/main.f9c60c0e.chunk.js","sourcesContent":["import { EnvironmentConfiguration } from \"./EnvironmentConfiguration\";\r\n\r\nclass ConfigService {\r\n\r\n private _configuration: EnvironmentConfiguration;\r\n\r\n public async getConfiguration(): Promise {\r\n\r\n if (this._configuration) return Promise.resolve(this._configuration);\r\n\r\n const response = await fetch(\"/physicianportal/config.json\")\r\n this._configuration = await response.json();\r\n \r\n return this._configuration;\r\n }\r\n}\r\n\r\nexport const configService = new ConfigService();","import { ApplicationInsights, ITelemetryItem } from \"@microsoft/applicationinsights-web\";\r\nimport { configService } from \"./Config/ConfigService\";\r\n\r\nclass AppInsights {\r\n\r\n private appInsights: ApplicationInsights\r\n\r\n async load() {\r\n\r\n var config = await configService.getConfiguration()\r\n\r\n if (config.ApplicationInsights.ConnectionString) {\r\n this.appInsights = new ApplicationInsights({\r\n config: {\r\n connectionString: config.ApplicationInsights.ConnectionString\r\n }\r\n });\r\n this.appInsights.loadAppInsights();\r\n this.appInsights.trackPageView(); // Manually call trackPageView to establish the current user/session/pageview\r\n var telemetryInitializer = (envelope : ITelemetryItem) => {\r\n envelope.tags[\"ai.cloud.role\"] = \"physicianportal\";\r\n }\r\n this.appInsights.addTelemetryInitializer(telemetryInitializer);\r\n }\r\n }\r\n\r\n async logError(ex: Error){\r\n if (!this.appInsights) return;\r\n if (!ex) return;\r\n\r\n if (ex && ex.message){\r\n this.appInsights.trackException({exception: ex});\r\n }\r\n else {\r\n this.appInsights.trackException({exception: new Error(JSON.stringify(ex))});\r\n }\r\n }\r\n}\r\nexport const appInsights = new AppInsights();","import { appInsights } from \"./AppInsights\";\r\nimport { configService } from \"./Config/ConfigService\";\r\n\r\nexport class IdentityServerKnownClient {\r\n static physicianPortal: string = \"physicianportal\";\r\n}\r\n\r\nexport interface IErrorHandlerOpts {\r\n handleErrorRedirect ?: boolean;\r\n}\r\n\r\nclass AbpnClient {\r\n private _baseUri: string;\r\n public _errorPage: string;\r\n\r\n\r\n private async ensureConfiguration() {\r\n if (this._baseUri) return;\r\n\r\n this._baseUri = (await configService.getConfiguration()).AbpnApiUrl;\r\n }\r\n\r\n private async getDefaultHeaders(authContext: any) {\r\n const token = authContext?.isAuthenticated() ? await authContext.getAccessToken() : null;\r\n const headers = token ? [['Authorization', `Bearer ${token}`]] : [];\r\n headers.push(['Pragma', 'no-cache']);\r\n\r\n var onBehalfOf = await authContext?.getOnBehalfOf();\r\n\r\n if (onBehalfOf) {\r\n headers.push(['X-OBO-PhysicianId', onBehalfOf]);\r\n }\r\n return headers;\r\n }\r\n\r\n private async validateResponse(response: Response): Promise {\r\n if (response.status === 401) {\r\n return Promise.reject(response.status);\r\n }\r\n if (!response.ok) {\r\n var clone = response.clone();\r\n const text = await clone.text();\r\n throw Error(`(${response.statusText}) ${text}}`);\r\n }\r\n return Promise.resolve(response);\r\n }\r\n\r\n private async castResponse(response: Response): Promise {\r\n const text = await response.text();\r\n if (!text) {\r\n return null;\r\n }\r\n return JSON.parse(text) as T;\r\n }\r\n\r\n private async handleError(error: any, authContext: any, errorHandlerOpts ?: IErrorHandlerOpts): Promise { \r\n if (error.message === \"Unauthorized\" || error === 401) {\r\n authContext.logout();\r\n await appInsights.logError(error);\r\n return Promise.reject(error);\r\n }\r\n\r\n await appInsights.logError(error);\r\n const handleErrorRedirect = !(errorHandlerOpts && errorHandlerOpts.handleErrorRedirect === false);\r\n if (handleErrorRedirect) {\r\n window.location.href = this._errorPage;\r\n }\r\n else {\r\n throw error; //Expect error to be handled in caller component\r\n }\r\n\r\n return Promise.reject(error);\r\n\r\n }\r\n\r\n setErrorPage(errorPage: string) {\r\n\r\n this._errorPage = errorPage;\r\n }\r\n\r\n async post(relativePath: string, body: any, authContext: any, errorHandlerOpts ?: IErrorHandlerOpts): Promise {\r\n await this.ensureConfiguration();\r\n\r\n const headers : any = await this.getDefaultHeaders(authContext);\r\n headers.push([\"Content-Type\", \"application/json\"]);\r\n return fetch(this._baseUri + relativePath,\r\n {\r\n method: \"post\",\r\n headers: headers,\r\n body: JSON.stringify(body)\r\n })\r\n .then(this.validateResponse)\r\n .then(response => this.castResponse(response))\r\n .catch(error => this.handleError(error, authContext, errorHandlerOpts));\r\n }\r\n\r\n async postStringResponse(relativePath: string, body: any, authContext: any): Promise {\r\n await this.ensureConfiguration();\r\n\r\n const headers : any = await this.getDefaultHeaders(authContext);\r\n headers.push([\"Content-Type\", \"application/json\"]);\r\n return fetch(this._baseUri + relativePath,\r\n {\r\n method: \"post\",\r\n headers: headers,\r\n body: JSON.stringify(body)\r\n })\r\n .then(this.validateResponse)\r\n .catch(error => this.handleError(error, authContext));\r\n }\r\n\r\n async get(relativePath: string, authContext: any): Promise {\r\n await this.ensureConfiguration();\r\n\r\n const headers : any = await this.getDefaultHeaders(authContext);\r\n return fetch(this._baseUri + relativePath, {\r\n method: \"GET\",\r\n headers: headers\r\n })\r\n .then(this.validateResponse)\r\n .then(response => this.castResponse(response))\r\n .catch(error => this.handleError(error, authContext));\r\n }\r\n\r\n async getResponse(relativePath: string, authContext: any): Promise {\r\n await this.ensureConfiguration();\r\n\r\n const headers : any = await this.getDefaultHeaders(authContext);\r\n return fetch(this._baseUri + relativePath, {\r\n headers: headers\r\n })\r\n .then(this.validateResponse)\r\n .catch(error => this.handleError(error, authContext));\r\n }\r\n}\r\nexport const abpnClient = new AbpnClient();","import { WebStorageStateStore } from \"oidc-client\";\r\nimport { EnvironmentConfiguration } from \"../Config/EnvironmentConfiguration\";\r\n\r\nclass AuthSessionStorage {\r\n\r\n private userStore : WebStorageStateStore;\r\n private authUrl?: string;\r\n private clientId?: string;\r\n\r\n constructor() {\r\n }\r\n\r\n getStorageMedia(){\r\n return window.sessionStorage;\r\n }\r\n\r\n getInitUserStore(configuration : EnvironmentConfiguration) {\r\n this.authUrl = configuration.AbpnIdentity.Authority;\r\n this.clientId = configuration.AbpnIdentity.ClientId;\r\n\r\n this.userStore = new WebStorageStateStore({ store: this.getStorageMedia() })\r\n return this.userStore;\r\n }\r\n\r\n getOidcSession = () => {\r\n if (!this.userStore) return null;\r\n\r\n const sessionObj = sessionStorage.getItem(`oidc.user:${this.authUrl}:${this.clientId}`);\r\n if (!sessionObj) return null;\r\n\r\n const oidcStorage = JSON.parse(sessionObj)\r\n return oidcStorage;\r\n }\r\n\r\n} \r\n\r\nexport default new AuthSessionStorage();\r\n","import { User, UserManager } from \"oidc-client\";\r\n\r\n/**There should only be one instance of the user manager in the app to prevent accidental double sessions */\r\nexport default class UserManagerSingleton {\r\n private static instance: UserManagerSingleton;\r\n\r\n private readonly _oidcUserManager : UserManager = undefined;\r\n\r\n private constructor(settings : any | null | undefined) {\r\n this._oidcUserManager = new UserManager(settings);\r\n }\r\n\r\n public static getInstance(settings ?: any | null | undefined): UserManagerSingleton {\r\n if (!UserManagerSingleton.instance && settings) {\r\n UserManagerSingleton.instance = new UserManagerSingleton(settings);\r\n }\r\n\r\n return UserManagerSingleton.instance;\r\n }\r\n\r\n getOidcUserManager() {\r\n return this._oidcUserManager;\r\n }\r\n\r\n\r\n}\r\n","import React from 'react';\r\n\r\nexport interface IUserSessionContext {\r\n showSessionExpirationWarning : boolean;\r\n setShowSessionExpirationWarning : Function;\r\n}\r\n\r\n\r\nconst defaultContextValue : IUserSessionContext= {\r\n showSessionExpirationWarning: false,\r\n setShowSessionExpirationWarning: () => {}\r\n};\r\n\r\nconst UserSessionContext = React.createContext(defaultContextValue);\r\n\r\nexport default UserSessionContext;","import { useContext, useEffect, useState } from \"react\";\r\nimport UserManagerSingleton from \"../../Services/Auth/UserManagerSingleton\";\r\nimport UserSessionContext, { IUserSessionContext } from \"../../Services/Auth/UserSessionContext\";\r\nimport { useRef } from 'react';\r\nimport { configService } from \"../../Services/Config/ConfigService\";\r\n\r\nconst userEvents = ['mousemove', 'mousedown', 'keydown', 'touchstart', 'touchmove', 'click', 'scroll']\r\n\r\nexport const AccessTokenExpiringNotificationTime = 60;\r\n\r\nconst userIdleTimeoutSec = 60;\r\n\r\n/**Redirect to login page */\r\nconst invalidateExpiredSession = async (postLogOutRedirectUrl : string) => {\r\n console.log(\"Invalidating session...\")\r\n await UserManagerSingleton.getInstance().getOidcUserManager().signoutRedirect({post_logout_redirect_uri: postLogOutRedirectUrl});\r\n}\r\n\r\nexport const SessionTimeout = () => {\r\n const userSessionContext : IUserSessionContext = useContext(UserSessionContext);\r\n const [postLogOutRedirectUrl, setPostLogOutRedirectUrl] = useState(\"\");\r\n\r\n let lastUserActivityTimestampRef = useRef(0);\r\n\r\n const onUserActivity = () => {\r\n if (lastUserActivityTimestampRef) {\r\n const now = Date.now();\r\n lastUserActivityTimestampRef.current = now;\r\n }\r\n }\r\n\r\n const userIdleTimeSec = () : number => {\r\n if (!lastUserActivityTimestampRef) return 0;\r\n if (lastUserActivityTimestampRef && lastUserActivityTimestampRef.current <= 0) return -1;\r\n\r\n return Math.round((Date.now() - lastUserActivityTimestampRef.current) / 1000);\r\n }\r\n\r\n useEffect(() => {\r\n \r\n async function getPostLogoutRedirectUrl() {\r\n var configuration = await configService.getConfiguration();\r\n if (configuration){\r\n setPostLogOutRedirectUrl(configuration.AbpnIdentity.PostLogoutRedirectUri);\r\n }\r\n }\r\n\r\n getPostLogoutRedirectUrl();\r\n\r\n }, [])\r\n\r\n const onAccessTokenExpiring = () => {\r\n const idleTime = userIdleTimeSec();\r\n console.log(`Access token expiring... User idle: ${idleTime}sec`);\r\n if (!userSessionContext.showSessionExpirationWarning && idleTime >= userIdleTimeoutSec) {\r\n console.log(\"Showing session expiration warning...\");\r\n userSessionContext.setShowSessionExpirationWarning(true);\r\n }\r\n }\r\n\r\n const onAccessTokenExpired = async () => {\r\n const idleTime = userIdleTimeSec();\r\n console.log(`Access token expired...User idle: ${idleTime}sec`)\r\n\r\n //Detect whether the user was just recently renewed, if so then cancel reneal\r\n let isUserExpired = true;\r\n try{\r\n const user = await UserManagerSingleton.getInstance().getOidcUserManager().getUser();\r\n if (user != null){\r\n if (!user.expired) isUserExpired = false;\r\n }\r\n }\r\n catch (err){\r\n console.error(err);\r\n }\r\n\r\n if (!userSessionContext.showSessionExpirationWarning && idleTime < userIdleTimeoutSec) {\r\n try\r\n {\r\n console.log(\"Refreshing token...\")\r\n UserManagerSingleton.getInstance().getOidcUserManager().signinSilent();\r\n }\r\n catch (err) {\r\n console.error(err);\r\n }\r\n\r\n return;\r\n }\r\n\r\n if (isUserExpired) invalidateExpiredSession(postLogOutRedirectUrl);\r\n }\r\n\r\n useEffect(() => {\r\n UserManagerSingleton.getInstance().getOidcUserManager().events.addAccessTokenExpiring(onAccessTokenExpiring);\r\n UserManagerSingleton.getInstance().getOidcUserManager().events.addAccessTokenExpired(onAccessTokenExpired); \r\n\r\n return () => {\r\n UserManagerSingleton.getInstance().getOidcUserManager().events.removeAccessTokenExpiring(onAccessTokenExpiring);\r\n UserManagerSingleton.getInstance().getOidcUserManager().events.removeAccessTokenExpired(onAccessTokenExpired); \r\n }\r\n\r\n }, []);\r\n\r\n useEffect(() => {\r\n userEvents.forEach(ev => document.body.addEventListener(ev, onUserActivity ));\r\n\r\n return () => {\r\n lastUserActivityTimestampRef.current = 0;\r\n userEvents.forEach(ev => document.body.removeEventListener(ev, onUserActivity ));\r\n }\r\n }, []);\r\n\r\n return <>;\r\n}\r\n\r\nexport default SessionTimeout;","import { Log, User, UserManagerSettings } from \"oidc-client\";\r\nimport ChangePasswordModel from \"../../Components/Account/Models/ChangePasswordModel\";\r\nimport ActivateUser from \"../../Components/Auth/Models/ActivateUser\";\r\nimport { configService } from \"../Config/ConfigService\";\r\nimport ChangeEmailModel from \"../../Components/Account/Models/ChangeEmailModel\";\r\nimport AuthSessionStorage from \"./AuthSessionStorage\";\r\nimport UserManagerSingleton from './UserManagerSingleton';\r\nimport { AccessTokenExpiringNotificationTime } from \"../../Components/Auth/SessionTimeout\";\r\n\r\nexport default class AuthService {\r\n\r\n constructor(errorPage: string) {\r\n this.errorPage = errorPage;\r\n }\r\n\r\n authUrl?: string;\r\n clientId?: string;\r\n errorPage: string;\r\n onBehalfOfHeader: string = \"oboPhysicianId\";\r\n userManager : UserManagerSingleton;\r\n\r\n initialize = async () => {\r\n var configuration = await configService.getConfiguration();\r\n this.authUrl = configuration.AbpnIdentity.Authority;\r\n this.clientId = configuration.AbpnIdentity.ClientId;\r\n\r\n const settings : UserManagerSettings = {\r\n authority: this.authUrl,\r\n client_id: this.clientId,\r\n redirect_uri: configuration.AbpnIdentity.RedirectUri,\r\n post_logout_redirect_uri: configuration.AbpnIdentity.PostLogoutRedirectUri,\r\n response_type: \"code\",\r\n automaticSilentRenew: false,\r\n accessTokenExpiringNotificationTime: AccessTokenExpiringNotificationTime,\r\n loadUserInfo: false,\r\n scope: configuration.AbpnIdentity.Scope,\r\n userStore: AuthSessionStorage.getInitUserStore(configuration)\r\n };\r\n\r\n this.userManager = UserManagerSingleton.getInstance(settings);\r\n\r\n // Logger\r\n Log.logger = console;\r\n Log.level = Log.DEBUG;\r\n\r\n this.userManager.getOidcUserManager().events.addUserLoaded(() => {\r\n if (window.location.href.indexOf(\"signin-oidc\") !== -1) {\r\n this.navigateToScreen();\r\n }\r\n });\r\n\r\n this.userManager.getOidcUserManager().events.addSilentRenewError((e) => {\r\n console.error(\"silent renew error\", e.message);\r\n });\r\n\r\n }\r\n\r\n signinRedirectCallback = () => {\r\n this.userManager.getOidcUserManager().signinRedirectCallback().then(() => {\r\n var redirectUrl = localStorage.getItem(\"redirectUri\");\r\n window.location.replace(redirectUrl);\r\n });\r\n };\r\n\r\n\r\n getUser = async () : Promise => {\r\n const user = await this.userManager.getOidcUserManager().getUser();\r\n if (!user) {\r\n return await this.userManager.getOidcUserManager().signinRedirectCallback();\r\n }\r\n\r\n return user;\r\n };\r\n\r\n getAccessToken = async () => {\r\n var user = await this.getUser();\r\n return user && user.access_token;\r\n }\r\n\r\n setOnBehalfOf = (physicianId: string | null) => {\r\n if (physicianId) {\r\n AuthSessionStorage.getStorageMedia().setItem(this.onBehalfOfHeader, physicianId);\r\n }\r\n }\r\n\r\n getOnBehalfOf = () => AuthSessionStorage.getStorageMedia().getItem(this.onBehalfOfHeader);\r\n\r\n parseJwt = (token: string) => {\r\n const base64Url = token.split(\".\")[1];\r\n const base64 = base64Url.replace(\"-\", \"+\").replace(\"_\", \"/\");\r\n return JSON.parse(window.atob(base64));\r\n };\r\n\r\n signinRedirect = (emailPrefill: string = null, redirectUri: string = null) => {\r\n if (redirectUri) {\r\n localStorage.setItem(\"redirectUri\", redirectUri);\r\n }\r\n\r\n if (AuthSessionStorage.getStorageMedia().getItem(this.onBehalfOfHeader)) {\r\n AuthSessionStorage.getStorageMedia().removeItem(this.onBehalfOfHeader);\r\n }\r\n\r\n this.userManager.getOidcUserManager().signinRedirect({ login_hint: emailPrefill });\r\n };\r\n\r\n staffSigninRedirect = () => {\r\n localStorage.setItem(\"redirectUri\", window.location.href);\r\n this.userManager.getOidcUserManager().signinRedirect({ acr_values: \"idp:aad\" });\r\n };\r\n\r\n navigateToScreen = () => {\r\n window.location.replace(\"/en/dashboard\");\r\n };\r\n\r\n isAuthenticated = () => {\r\n console.log('authenticating...');\r\n const oidcStorage = AuthSessionStorage.getOidcSession();\r\n\r\n return (!!oidcStorage && !!oidcStorage.access_token)\r\n };\r\n\r\n getSessionExpiration = () : number => {\r\n const oidc = AuthSessionStorage.getOidcSession();\r\n if (!oidc) return null;\r\n return oidc.expires_at;\r\n }\r\n\r\n signinSilent = () => {\r\n this.userManager.getOidcUserManager().signinSilent()\r\n .then((user) => {\r\n console.log(\"signed in\", user);\r\n })\r\n .catch((err) => {\r\n console.error(err);\r\n });\r\n };\r\n\r\n signinSilentCallback = () => {\r\n this.userManager.getOidcUserManager().signinSilentCallback();\r\n };\r\n\r\n createSigninRequest = () => {\r\n return this.userManager.getOidcUserManager().createSigninRequest();\r\n };\r\n\r\n logout = async () => {\r\n const user = await this.userManager.getOidcUserManager().getUser();\r\n await this.userManager.getOidcUserManager().signoutRedirect({\r\n id_token_hint: user?.id_token\r\n });\r\n await this.userManager.getOidcUserManager().clearStaleState();\r\n };\r\n\r\n changeEmail = (model: ChangeEmailModel) => {\r\n return fetch(this.authUrl + \"/account/ChangeEmail\",\r\n {\r\n method: \"post\",\r\n headers: [['Pragma', 'no-cache'], [\"Content-Type\", \"application/json\"]],\r\n body: JSON.stringify(model)\r\n });\r\n }\r\n\r\n changePassword = (model: ChangePasswordModel) => {\r\n return fetch(this.authUrl + \"/account/ChangePassword\",\r\n {\r\n method: \"post\",\r\n headers: [['Pragma', 'no-cache'], [\"Content-Type\", \"application/json\"]],\r\n body: JSON.stringify(model)\r\n });\r\n }\r\n \r\n register = (model: ActivateUser) => {\r\n return fetch(this.authUrl + \"/account/Register\",\r\n {\r\n method: \"post\",\r\n headers: [['Pragma', 'no-cache'], [\"Content-Type\", \"application/json\"]],\r\n body: JSON.stringify(model)\r\n })\r\n .then(response => {\r\n return response.ok;\r\n })\r\n .catch(error => {\r\n window.location.href = this.errorPage;\r\n return Promise.reject(error);\r\n });\r\n }\r\n\r\n}","import React from \"react\";\r\nimport { Spinner } from \"react-bootstrap\";\r\n\r\ninterface IAbpnSpinnerProps {\r\n justifyContent ?: \"center\" | \"start\"\r\n}\r\n\r\nexport function AbpnSpinner(props : IAbpnSpinnerProps) {\r\n const contentJustification = `justify-content-${props.justifyContent || \"center\" }`\r\n return
;\r\n}\r\n\r\nexport default AbpnSpinner;\r\n","import React, { Component } from \"react\";\r\nimport AuthService from \"../../Services/Auth/AuthService\";\r\nimport AbpnSpinner from \"../Shared/Components/AbpnSpinner\";\r\n\r\nexport const AuthContext = React.createContext({\r\n signinRedirectCallback: (): void => { },\r\n logout: (): void => { },\r\n isAuthenticated: (): boolean => (false),\r\n signinRedirect: (_emailPrefill: string = null,_redirectUrl: string = null): void => { },\r\n staffSigninRedirect: (): void => { },\r\n signinSilentCallback: (): void => { },\r\n createSigninRequest: (): void => { },\r\n setOnBehalfOf: ({ }): void => { },\r\n getOnBehalfOf: (): string => (null),\r\n getAccessToken: (): Promise => (null),\r\n changeEmail: ({}): Promise => (null),\r\n changePassword: ({ }): Promise => (null),\r\n register: ({}): Promise => (null),\r\n});\r\n\r\nexport const AuthConsumer = AuthContext.Consumer;\r\n\r\nexport class AuthProvider extends Component {\r\n authService;\r\n constructor(props: any) {\r\n super(props);\r\n this.authService = new AuthService(props.errorPage);\r\n\r\n this.state = {\r\n isReady: false\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n this.authService.initialize()\r\n .then(() => {\r\n this.setState({ isReady: true })\r\n });\r\n }\r\n\r\n render() {\r\n if (!this.state.isReady) {\r\n return \r\n }\r\n return {this.props.children};\r\n }\r\n}","export class Certificate {\r\n certificateId: number;\r\n examinationId: number;\r\n certificationId: number;\r\n certificationName: string;\r\n isPrimary: boolean;\r\n certificateStatus: number;\r\n awardDateOrRecertifiedDate: Date;\r\n expirationDate: string;\r\n awardDate: string;\r\n certificateNumber: number;\r\n ccStatus: number;\r\n ccStatusDisplay: string;\r\n certificationGeneration: number;\r\n isOtherBoard: boolean;\r\n recertifiedDate: string;\r\n isHPM: boolean;\r\n isLifeTimeWithTenYear: boolean;\r\n}\r\n\r\nexport enum CertificateStatus {\r\n Active = 1,\r\n Inactive = 2\r\n}\r\n\r\n\r\nexport enum CCStatus {\r\n Meeting = 1,\r\n VoluntarilyMeeting = 2,\r\n NotMeeting = 3,\r\n NotRequired = 4\r\n}\r\n\r\nexport enum CertificationGeneration\r\n{\r\n Lifetime = 1,\r\n TenYear = 2,\r\n Cc = 3\r\n}","export const getDateWithOffset = (date: string) => {\r\n if (parseDate(date)) {\r\n var dateWithTimezone = new Date(date);\r\n var utcOffset = dateWithTimezone.toISOString();\r\n \r\n return new Date(utcOffset);\r\n }\r\n return null;\r\n };\r\n\r\n function parseDate(date: string) {\r\n const parsed = Date.parse(date);\r\n if (!isNaN(parsed)) {\r\n return parsed;\r\n }\r\n else if(date != null)\r\n return Date.parse(date.replace(/-/g, '/').replace(/[a-z]+/gi, ' '));\r\n else\r\n return null;\r\n }","import { Fragment, useEffect, useState } from \"react\";\r\nimport { Col, OverlayTrigger, Row, Tooltip } from \"react-bootstrap\";\r\nimport { Certificate, CertificateStatus, CertificationGeneration } from \"../../../Physician/Models/Certificate\";\r\nimport AbpnSpinner from \"../../../Shared/Components/AbpnSpinner\";\r\nimport Physician from \"../../../Physician/Models/Physician\";\r\nimport { getDateWithOffset } from \"../../../Shared/Utility/GetDateWithOffset\";\r\n\r\ninterface IProps {\r\n physician: Physician,\r\n certificateGroup: Certificate[];\r\n onSave: (updatedCertificate: Certificate) => void;\r\n}\r\n\r\nexport function CertificateRow(props: IProps) {\r\n const [displayCertificate, setDisplayCertificate] = useState(null);\r\n const [expiredCertificatesByDate, setExpiredCertificatesByDate] = useState([]);\r\n\r\n useEffect(() => {\r\n let activeCertificate = props.certificateGroup.find(_ => _.certificateStatus === CertificateStatus.Active);\r\n let inactiveCertificatesByDate = props.certificateGroup.filter(_ => _.certificateStatus === CertificateStatus.Inactive).sort(\r\n (a, b) => getDateWithOffset(b.awardDate).getTime() - getDateWithOffset(a.awardDate).getTime()\r\n );\r\n let displayCert = activeCertificate ?? inactiveCertificatesByDate[0];\r\n setDisplayCertificate(displayCert);\r\n setExpiredCertificatesByDate(inactiveCertificatesByDate)\r\n }, []);\r\n\r\n var lifetimeInfoIconContent = (
\r\n Non-Time Limited (Lifetime) certificates are not required to participate in the Continuing Certification (CC) program.\r\n

\r\n \r\n Diplomates who wish to participate in CC for a non-time limited (lifetime) certification will need to enroll in the traditional\r\n recertification/CC Exam OR the Article Based Continuing Certification (ABCC) pathway. Diplomates will pay the first annual fee for that\r\n certification at the time of enrollment, and will then be listed as \"Meeting\" CC/MOC requirements. Diplomates will have the next three years\r\n to pass the recertification/CC exam OR successfully complete 30 article exams, and complete the CC requirements.\r\n \r\n

\r\n \r\n Diplomates who choose the article pathway will need to continue to complete article exams each three-year block, in addition to\r\n satisfying the CC requirements. For more information about the ABCC pathway, please visit\r\n abpn.org.\r\n \r\n
);\r\n\r\n var ccLabel = \"Continuing Certification Status\";\r\n var mocLabel = \"MOC Status\";\r\n\r\n let isDisplayCertificateActive = displayCertificate?.certificateStatus == CertificateStatus.Active;\r\n\r\n let showInfoIcon = true;\r\n var infoIconContent: any;\r\n\r\n let showStatus = isDisplayCertificateActive;\r\n let ccMocStatusLabel: string;\r\n\r\n var displayEndDateLabel = false;\r\n var endDateLabel: string;\r\n var certificateEndDateDisplay: string; \r\n\r\n\r\n switch (displayCertificate?.certificationGeneration) {\r\n case CertificationGeneration.TenYear:\r\n showInfoIcon = false;\r\n ccMocStatusLabel = mocLabel;\r\n displayEndDateLabel = true;\r\n\r\n break;\r\n case CertificationGeneration.Lifetime:\r\n showStatus = true;\r\n infoIconContent = lifetimeInfoIconContent;\r\n ccMocStatusLabel = mocLabel;\r\n\r\n if (props.physician.currentCCEnrollment != null) {\r\n ccMocStatusLabel = ccLabel;\r\n }\r\n break;\r\n case CertificationGeneration.Cc:\r\n ccMocStatusLabel = ccLabel;\r\n break;\r\n default:\r\n break;\r\n }\r\n var isActiveCC = displayCertificate?.certificationGeneration === CertificationGeneration.Cc \r\n && displayCertificate.certificateStatus === CertificateStatus.Active;\r\n\r\n if (!isActiveCC && displayCertificate?.expirationDate && displayCertificate?.certificationGeneration != CertificationGeneration.Lifetime) {\r\n showInfoIcon = false;\r\n endDateLabel = \"Expiration\";\r\n displayEndDateLabel = true;\r\n certificateEndDateDisplay = getDateWithOffset(displayCertificate.expirationDate).toLocaleDateString();\r\n }\r\n\r\n let displayIsCertified =\r\n (isDisplayCertificateActive ?\r\n
Certified
\r\n :\r\n
Not Certified
\r\n );\r\n \r\n var infoIcon = (\r\n {infoIconContent}\r\n \r\n }>\r\n \r\n );\r\n\r\n if (props.physician.isRetired) {\r\n if (displayCertificate?.expirationDate) {\r\n displayEndDateLabel = true;\r\n endDateLabel = \"Retired Notification\"\r\n certificateEndDateDisplay = getDateWithOffset(displayCertificate.expirationDate).toLocaleDateString();\r\n }\r\n\r\n showInfoIcon = false;\r\n displayIsCertified =
Certified - Retired
\r\n }\r\n\r\n if (displayCertificate?.isHPM) displayIsCertified = (
ABPN issued certificates in Hospice and Palliative Medicine (HPM) from 2008-2021. In 2022, HPM certificates issued by ABPN were transitioned to the American Board of Internal Medicine (ABIM) for initial certification and continuing certification. \r\n For the current status of this certificate, please visit ABIM.org.
)\r\n\r\n if (displayCertificate == null) return \r\n return (\r\n \r\n \r\n \r\n
\r\n {displayCertificate.certificationName.toUpperCase()}\r\n {showInfoIcon && displayCertificate.certificationGeneration == CertificationGeneration.Lifetime &&\r\n infoIcon\r\n }\r\n
\r\n {displayIsCertified}\r\n \r\n \r\n \r\n \r\n
Awarded
\r\n
\r\n {getDateWithOffset(displayCertificate.awardDate).toLocaleDateString()}\r\n
\r\n \r\n {displayEndDateLabel &&\r\n \r\n \r\n
{endDateLabel}\r\n {showInfoIcon && displayCertificate.certificationGeneration == CertificationGeneration.Cc &&\r\n infoIcon\r\n }\r\n
\r\n
{certificateEndDateDisplay}
\r\n \r\n
\r\n }\r\n \r\n
Certificate Number
\r\n
{displayCertificate.certificateNumber}
\r\n \r\n
\r\n {showStatus &&\r\n \r\n
\r\n \r\n \r\n
{ccMocStatusLabel}
\r\n
{displayCertificate.ccStatusDisplay}
\r\n \r\n
\r\n
\r\n }\r\n {expiredCertificatesByDate.length > 0 &&\r\n \r\n
\r\n \r\n \r\n
Certification History
\r\n {displayCertificate.certificateStatus == CertificateStatus.Active &&\r\n
Certified on {getDateWithOffset(displayCertificate.awardDate).toLocaleDateString()} | Certificate Number {displayCertificate.certificateNumber}
}\r\n {expiredCertificatesByDate.map(_ =>\r\n
Certified from {getDateWithOffset(_.awardDate).toLocaleDateString()} to {getDateWithOffset(_.expirationDate).toLocaleDateString()} | Certificate Number {_.certificateNumber}
\r\n )}\r\n \r\n
\r\n
\r\n }\r\n \r\n
\r\n
\r\n
\r\n );\r\n}","/**\r\n * Deep copy function for TypeScript.\r\n * @param T Generic type of target/copied value.\r\n * @param target Target value to be copied.\r\n * @see Source project, ts-deepcopy https://github.com/ykdr2017/ts-deepcopy\r\n * @see Code pen https://codepen.io/erikvullings/pen/ejyBYg\r\n */\r\nexport const deepCopy = (target: T): T => {\r\n if (target === null) {\r\n return target;\r\n }\r\n if (target instanceof Date) {\r\n return new Date(target.getTime()) as any;\r\n }\r\n if (target instanceof Array) {\r\n const cp = [] as any[];\r\n (target as any[]).forEach((v) => { cp.push(v); });\r\n return cp.map((n: any) => deepCopy(n)) as any;\r\n }\r\n // @ts-ignore TS2839\r\n if (typeof target === 'object' && target !== {}) {\r\n const cp = { ...(target as { [key: string]: any }) } as { [key: string]: any };\r\n Object.keys(cp).forEach(k => {\r\n cp[k] = deepCopy(cp[k]);\r\n });\r\n return cp as T;\r\n }\r\n return target;\r\n };","\r\nexport class ValidatorHelper {\r\n constructor() {}\r\n\r\n static setCustomDatePickerValidationWithFeedback(element: HTMLInputElement, errorMessage: string) { \r\n var dateErrorMsgControl = element.parentElement.parentElement.parentElement.getElementsByClassName(\"invalid-feedback\")[0];\r\n\r\n this.setCustomValidationWithFeedback(element, errorMessage, dateErrorMsgControl);\r\n }\r\n\r\n static setCustomValidationWithFeedback(element: HTMLInputElement, errorMessage: string, customErrorMsgControl?: Element) { \r\n if (!element) return;\r\n\r\n element.parentElement.parentElement.classList.add('is-invalid');\r\n element.setCustomValidity(errorMessage);\r\n\r\n var errorMsgControl = customErrorMsgControl ? customErrorMsgControl : element.parentElement.getElementsByClassName(\"invalid-feedback\")[0];\r\n\r\n if (!errorMsgControl) return;\r\n\r\n errorMsgControl.textContent = errorMessage;\r\n }\r\n\r\n static clearCustomDatePickerValidation(element: HTMLInputElement) {\r\n\r\n var dateErrorMsgControl = element.parentElement.getElementsByClassName(\"invalid-feedback\")[0];\r\n\r\n this.clearCustomValidation(element, dateErrorMsgControl);\r\n }\r\n\r\n static clearCustomValidation(element: HTMLInputElement, customErrorMsgControl? : Element) { \r\n if (!element) return;\r\n\r\n element.parentElement.parentElement.classList.remove('is-invalid');\r\n element.setCustomValidity(\"\");\r\n\r\n var errorMsgControl = customErrorMsgControl ? customErrorMsgControl : element.parentElement.getElementsByClassName(\"invalid-feedback\")[0];\r\n if (!errorMsgControl) return;\r\n\r\n errorMsgControl.textContent = null;\r\n }\r\n}","import { Col, Row, Button, Modal, Form } from \"react-bootstrap\";\r\nimport { Fragment, useContext, useRef, useState } from \"react\";\r\nimport { abpnClient } from \"../../../../Services/AbpnClient\";\r\nimport { AuthContext } from \"../../../Auth/AuthProvider\";\r\nimport AbpnSpinner from \"../../../Shared/Components/AbpnSpinner\";\r\nimport { deepCopy } from \"../../../Shared/Utility/DeepCopy\";\r\nimport { ValidatorHelper } from \"../../../Shared/ValidatorHelper\";\r\n\r\nconst validEmailRegex = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\r\n\r\ninterface IProps {\r\n hadCertificate: boolean;\r\n}\r\n\r\nexport default function RequestCertificationVerification(props: IProps) {\r\n const authContext = useContext(AuthContext);\r\n\r\n const emailForm = useRef(null);\r\n const emailInputRef = useRef(null);\r\n const [isDownloading, setIsDownloading] = useState(false);\r\n const [isSending, setIsSending] = useState(false);\r\n const [showRequestSection, setShowRequestSection] = useState(false);\r\n const [showEmailSection, setShowEmailSection] = useState(false);\r\n const [newEmail, setNewEmail] = useState(\"\");\r\n const [ccEmailAddresses, setCcEmailAddresses] = useState>([]);\r\n\r\n const downloadVerification = async (e: React.MouseEvent) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n setIsDownloading(true);\r\n\r\n var response = await abpnClient.getResponse(\"/api/physician/DownloadVerificationLetter\", authContext)\r\n var blob = await response.blob();\r\n\r\n const downloadFileUrl = window.URL.createObjectURL(\r\n new Blob([blob]),\r\n );\r\n const link = document.createElement('a');\r\n link.href = downloadFileUrl;\r\n link.setAttribute(\r\n 'download',\r\n `VerificationLetter.pdf`,\r\n );\r\n\r\n // Append to html link element page\r\n document.body.appendChild(link);\r\n\r\n // Start download\r\n link.click();\r\n\r\n // Clean up and remove the link\r\n link.parentNode.removeChild(link);\r\n\r\n setIsDownloading(false);\r\n closeModals();\r\n }\r\n\r\n const updateEmailAddress = (value: string) => {\r\n setNewEmail(value);\r\n }\r\n\r\n const addEmail = async (e: React.FormEvent) => {\r\n const form = emailForm.current;\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n if (!validEmailRegex.test(newEmail)) {\r\n ValidatorHelper.setCustomValidationWithFeedback(emailInputRef.current, \"Please enter a valid email address\");\r\n }\r\n else {\r\n ValidatorHelper.clearCustomValidation(emailInputRef.current);\r\n }\r\n\r\n form.classList.add('was-validated');\r\n if (form.checkValidity()) {\r\n form.classList.remove('was-validated');\r\n let updatedEmails = deepCopy(ccEmailAddresses);\r\n updatedEmails.push(newEmail);\r\n setNewEmail(\"\");\r\n setCcEmailAddresses(updatedEmails);\r\n }\r\n }\r\n\r\n const emailVerification = async (e: React.MouseEvent) => {\r\n const form = emailForm.current;\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n if (ccEmailAddresses.length === 0) {\r\n ValidatorHelper.setCustomValidationWithFeedback(emailInputRef.current, \"Please enter an email address\");\r\n form.classList.add('was-validated');\r\n } else {\r\n ValidatorHelper.clearCustomValidation(emailInputRef.current);\r\n setIsSending(true);\r\n abpnClient.post>(\"/api/physician/SendVerificationLetter\", ccEmailAddresses, authContext).then(_ => {\r\n form.classList.remove('was-validated');\r\n closeModals();\r\n }).finally(() => {\r\n setIsSending(false);\r\n });\r\n }\r\n }\r\n\r\n const openLetterRequestModal = async (isRequestingVerificationLetter: boolean) => {\r\n setShowRequestSection(isRequestingVerificationLetter);\r\n }\r\n\r\n const openEmailModal = async (isEmailingVerificationLetter: boolean) => {\r\n setShowEmailSection(isEmailingVerificationLetter);\r\n }\r\n\r\n const closeModals = async () => {\r\n setNewEmail(\"\");\r\n setCcEmailAddresses([]);\r\n setShowRequestSection(false);\r\n setShowEmailSection(false);\r\n }\r\n\r\n let showVerificationButtons = props.hadCertificate;\r\n\r\n return (\r\n <>\r\n \r\n {showVerificationButtons &&\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n \r\n closeModals()}>\r\n \r\n {isDownloading ? :\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n \r\n \r\n \r\n \r\n \r\n closeModals()}>\r\n \r\n
\r\n If you would like the letter of certification verification emailed to a\r\n third party, enter the email address and select the plus/add button.\r\n You may add up to 3 different email addresses. After you have\r\n added the email address(es), select the Send Email button. Emails\r\n will send TO the email address we have on file for you and\r\n CC the third party email address(es) indicated.\r\n
\r\n
addEmail(e)}>\r\n
\r\n \r\n
\r\n {ccEmailAddresses.length > 0 &&\r\n \r\n Send to: \r\n
    \r\n {ccEmailAddresses.map((emailAddress, index) =>\r\n
  • {emailAddress}
  • \r\n )}\r\n
\r\n
}\r\n
\r\n
\r\n \r\n {isSending ? :\r\n <>\r\n \r\n \r\n \r\n }\r\n \r\n
\r\n \r\n )\r\n}","import CCActivity from \"./CCActivity\";\r\nimport { CCAttestation } from \"./CCAttestation\";\r\nimport CCBlockEvaluationTernaryRequirement from \"./CCBlockEvaluationTernaryRequirement\";\r\nimport { EnrollmentCertificate } from \"./CCEnrollment\";\r\n\r\nexport class CCBlock {\r\n ccBlockId: number;\r\n ccBlockNumber: number;\r\n startDate: string;\r\n endDate: string;\r\n startYear: number;\r\n endYear: number;\r\n complete: boolean;\r\n extensionDate: string;\r\n totalCMEAttestationCredits: number;\r\n totalSAAttestationCredits: number;\r\n totalVerifiedCMECredits: number;\r\n totalVerifiedSACredits: number;\r\n hasPipClinicalAttestation: boolean;\r\n hasPipFeedbackAttestation: boolean;\r\n hasPatientSafetyCompleted: boolean;\r\n hasVerifiedPatientSafety: boolean;\r\n isExpanded: boolean;\r\n totalRequiredCMECredits: number;\r\n requiredCMECredits: number;\r\n requiredSACredits: number;\r\n totalWaivedCMECredits: number;\r\n totalWaivedSACredits: number;\r\n hasPipWaiver: boolean;\r\n ccVerifiedActivities: Array;\r\n ccAppliedWaivers: Array;\r\n ccAttestations: Array;\r\n isEditing: boolean;\r\n ccAnnualFees: Array;\r\n totalBlockYears: number;\r\n isMeetingRequirements: boolean;\r\n isPatientSafetyRequired: CCBlockEvaluationTernaryRequirement;\r\n isPipRequired: boolean;\r\n outstandingRequirements: Array;\r\n isActivityRequirementsCompleted: boolean;\r\n hasFailedAudit: boolean;\r\n hasPassedAudit: boolean;\r\n hasAudit: boolean;\r\n enrollmentCertificates: Array;\r\n unpaidOrphanYears: Array;\r\n clinicalStatus: number;\r\n}\r\n\r\nexport class CCAttesttionWaiver {\r\n ccAttestationWaiverId: number;\r\n cmeCredits: number;\r\n description: string;\r\n waiverTypeDescription: string;\r\n isPipWaived: boolean;\r\n saCredits: number;\r\n waiverDate: Date;\r\n year: number;\r\n}\r\n\r\nexport class CCAnnualFee {\r\n year: number;\r\n isWaived: boolean;\r\n isPaid: boolean;\r\n feeAmount: number;\r\n}\r\nexport class CCBlockRequirementResult {\r\n requirementType: CCBlockRequirementType;\r\n}\r\n\r\nexport enum CCBlockRequirementType {\r\n CME = 1,\r\n SA = 2,\r\n PIP = 3,\r\n PatientSafety = 4,\r\n MedicalLicense = 5,\r\n Fees = 6,\r\n FailedAudit = 8\r\n}\r\n\r\nexport const ClinicalStatus: { [key: number]: string } = {\r\n 2: \"Clinically Active\",\r\n 3: \"Clinically Inactive\",\r\n 6: \"Clinically Active Not Enough For PIP\"\r\n}","import { Fragment, useContext, useEffect, useState } from \"react\";\r\nimport { Button, Col, Form, OverlayTrigger, Row, Tooltip } from \"react-bootstrap\";\r\nimport { LookupItem } from \"../../../Shared/Models/LookupItem\";\r\nimport { CCBlock, ClinicalStatus } from \"../../../Physician/Models/CCBlock\";\r\nimport { abpnClient } from \"../../../../Services/AbpnClient\";\r\nimport { AuthContext } from \"../../../Auth/AuthProvider\";\r\nimport { deepCopy } from \"../../../Shared/Utility/DeepCopy\";\r\nimport React from \"react\";\r\nimport Physician from \"../../../Physician/Models/Physician\";\r\n\r\ninterface IProps {\r\n ccBlock: CCBlock;\r\n physician: Physician;\r\n updatePhysician: (updatedPhysician: Physician) => void;\r\n editable: boolean;\r\n}\r\n\r\nexport default function ClinicalStatusRow(props: IProps) {\r\n const authContext = useContext(AuthContext);\r\n const [clinicalStatus, setClinicalStatus] = useState(props.ccBlock.clinicalStatus);\r\n const [newClinicalStatus, setNewClinicalStatus] = useState(2);\r\n const [isEditing, setIsEditing] = useState(false);\r\n const [ccBlock, setCCBlock] = useState(deepCopy(props.ccBlock));\r\n const [physician, setPhysician] = useState(deepCopy(props.physician));\r\n\r\n useEffect(() => {\r\n setCCBlock(deepCopy(props.ccBlock));\r\n setPhysician(deepCopy(props.physician));\r\n }, [props.physician]);\r\n\r\n const beginEdit = () => {\r\n setIsEditing(true);\r\n }\r\n\r\n const cancel = () => {\r\n setIsEditing(false);\r\n }\r\n\r\n const save = async () => {\r\n ccBlock.clinicalStatus = newClinicalStatus;\r\n\r\n await abpnClient.post(\"/api/physician/UpdateClinicalStatus\", ccBlock, authContext);\r\n setClinicalStatus(newClinicalStatus);\r\n setIsEditing(false);\r\n\r\n physician.currentCCEnrollment.ccBlocks.find(_=>_.ccBlockId == ccBlock.ccBlockId).clinicalStatus = newClinicalStatus;\r\n if(ccBlock.ccBlockId == physician.currentCCEnrollment.currentCCBlock.ccBlockId)\r\n physician.currentCCEnrollment.currentCCBlock = ccBlock;\r\n props.updatePhysician(physician);\r\n }\r\n\r\n let clinicalStatusOptions: Array = [];\r\n\r\n for (let key in ClinicalStatus) {\r\n let value = ClinicalStatus[key];\r\n clinicalStatusOptions.push({ id: parseInt(key), name: value })\r\n }\r\n\r\n return (\r\n \r\n {props.editable && \r\n \r\n \r\n \r\n Clinical Status\r\n \r\n Diplomates are required to update their clinical status. There are three designations:
\r\n
    \r\n
  • Active- Physicians who are treating patients. These diplomates need to complete the PIP requirement.
  • \r\n
  • Active, Not Enough for PIP- Physicians who are active, but are primarily in research, academic, or administrative roles insufficient to complete the PIP requirement.
  • \r\n
  • Inactive- Physicians who are not clinically active (i.e. medical leave, not practicing).
  • \r\n
\r\n If a diplomate is active in at least one certification, they will need to complete the PIP requirement.\r\n }>\r\n \r\n \r\n
\r\n {isEditing ?\r\n ) => {setNewClinicalStatus(parseInt(e.currentTarget.value)); }}\r\n defaultValue={clinicalStatus}>\r\n \r\n {clinicalStatusOptions.map(x => ())}\r\n \r\n :\r\n
{ClinicalStatus[clinicalStatus]}
\r\n }\r\n \r\n \r\n {isEditing ?\r\n \r\n \r\n \r\n \r\n :\r\n \r\n }\r\n \r\n
\r\n }\r\n {!props.editable &&\r\n \r\n \r\n \r\n Clinical Status\r\n \r\n Diplomates are required to update their clinical status. There are three designations:
\r\n
    \r\n
  • Active- Physicians who are treating patients. These diplomates need to complete the PIP requirement.
  • \r\n
  • Active, Not Enough for PIP- Physicians who are active, but are primarily in research, academic, or administrative roles insufficient to complete the PIP requirement.
  • \r\n
  • Inactive- Physicians who are not clinically active (i.e. medical leave, not practicing).
  • \r\n
\r\n If a diplomate is active in at least one certification, they will need to complete the PIP requirement.\r\n }>\r\n \r\n \r\n
\r\n
{ClinicalStatus[props.ccBlock.clinicalStatus]}
\r\n \r\n
\r\n }\r\n
\r\n );\r\n}","import { Card, Col, Row, Button } from \"react-bootstrap\";\r\nimport { useContext, useState } from \"react\";\r\nimport Physician from \"../../../Physician/Models/Physician\";\r\nimport { Certificate } from \"../../../Physician/Models/Certificate\";\r\nimport { abpnClient } from \"../../../../Services/AbpnClient\";\r\nimport { AuthContext } from \"../../../Auth/AuthProvider\";\r\nimport AbpnSpinner from \"../../../Shared/Components/AbpnSpinner\";\r\nimport { CertificateRow } from \"./CertificateRow\";\r\nimport { CCBlock } from \"../../../Physician/Models/CCBlock\";\r\nimport { deepCopy } from \"../../../Shared/Utility/DeepCopy\";\r\nimport { getDateWithOffset } from \"../../../Shared/Utility/GetDateWithOffset\";\r\nimport RequestCertificationVerification from \"./RequestCertificationVerification\";\r\nimport ClinicalStatusRow from \"./ClinicalStatusRow\";\r\nimport React from \"react\";\r\n\r\ninterface IProps {\r\n physician: Physician;\r\n updatePhysician: (updatedPhysician: Physician) => void;\r\n}\r\n\r\nexport default function CertificatesCard(props: IProps) {\r\n const authContext = useContext(AuthContext);\r\n\r\n let groupedCertsBySpecialty: Record> = {};\r\n groupedCertsBySpecialty = props.physician.certificates.reduce(\r\n (result, item) => ({\r\n ...result,\r\n [item[\"certificationId\"]]: [\r\n ...(result[item[\"certificationId\"]] || []),\r\n item,\r\n ],\r\n }),\r\n groupedCertsBySpecialty\r\n );\r\n\r\n const [groupedCertificates] = useState(groupedCertsBySpecialty);\r\n const [isDownloading, setIsDownloading] = useState(false);\r\n\r\n const hadCertificate = props.physician.certificates?.length > 0;\r\n\r\n const evaluateCurrentBlockAndCallUpdate = async (physician : Physician) => {\r\n if (props.physician.currentCCEnrollment == null) return;\r\n\r\n const ccBlock = await abpnClient.get(\"/api/physician/EvaluateCurrentBlockRequirements\", authContext);\r\n const certificates = await abpnClient.get>(\"/api/physician/GetCertificates\", authContext);\r\n\r\n var index = physician.currentCCEnrollment.ccBlocks.findIndex(_ => _.ccBlockId === ccBlock.ccBlockId);\r\n physician.currentCCEnrollment.ccBlocks.splice(index, 1, ccBlock);\r\n physician.currentCCEnrollment.currentCCBlock = ccBlock;\r\n\r\n physician.certificates = certificates;\r\n props.updatePhysician(physician);\r\n } \r\n\r\n const onSaveCertificate = (updatedCertificate: Certificate) => {\r\n let updatedPhysician = deepCopy(props.physician);\r\n var certIndex = updatedPhysician.certificates.findIndex(_ => _.certificateId == updatedCertificate.certificateId);\r\n updatedPhysician.certificates[certIndex] = updatedCertificate;\r\n evaluateCurrentBlockAndCallUpdate(updatedPhysician);\r\n }\r\n\r\n let sortedCertificates = Object.values(groupedCertificates).sort((a: Certificate[], b: Certificate[]) => {\r\n //sort by Specialty/Subspecialty\r\n if (a[0].isPrimary === b[0].isPrimary) {\r\n //then by recent Award Date\r\n let aAwardDates = a.map(_ => getDateWithOffset(_.awardDate).getTime());\r\n let bAwardDates = b.map(_ => getDateWithOffset(_.awardDate).getTime());\r\n return Math.max(...aAwardDates) - Math.max(...bAwardDates);\r\n } else {\r\n return a[0].isPrimary ? -1 : 1\r\n }\r\n });\r\n\r\n const download = async (e: React.MouseEvent) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n setIsDownloading(true);\r\n\r\n var response = await abpnClient.getResponse(\"/api/physician/cccertificate\", authContext)\r\n var blob = await response.blob();\r\n\r\n const downloadFileUrl = window.URL.createObjectURL(\r\n new Blob([blob]),\r\n );\r\n const link = document.createElement('a');\r\n link.href = downloadFileUrl;\r\n link.setAttribute(\r\n 'download',\r\n `CertificateStatus.pdf`,\r\n );\r\n\r\n // Append to html link element page\r\n document.body.appendChild(link);\r\n\r\n // Start download\r\n link.click();\r\n\r\n // Clean up and remove the link\r\n link.parentNode?.removeChild(link);\r\n\r\n setIsDownloading(false);\r\n }\r\n\r\n let certificatesRows = sortedCertificates.map((certificates, index) => );\r\n\r\n let showPrint = props.physician.currentCCEnrollment && !props.physician.currentCCEnrollment.isBehindCurrentBlock;\r\n\r\n let nextBlock = props.physician.currentCCEnrollment?.ccBlocks?.find(_ => getDateWithOffset(_.startDate) > getDateWithOffset(props.physician.currentCCEnrollment?.currentCCBlock?.endDate));\r\n\r\n return (\r\n \r\n \r\n \r\n Certifications\r\n \r\n { props.physician.currentCCEnrollment?.currentCCBlock &&\r\n \r\n }\r\n
\r\n \r\n \r\n {certificatesRows.length > 0 ? certificatesRows : \"Not certified\"}\r\n {showPrint &&\r\n \r\n \r\n  \r\n \r\n \r\n }\r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n}","export enum CountryId {\r\n Usa = 1,\r\n Canada = 2\r\n}","import React, { Fragment, useState } from \"react\";\r\nimport { Col, Form, Button, Row, Alert} from \"react-bootstrap\";\r\nimport { MedicalLicense } from \"../../Physician/Models/MedicalLicense\";\r\nimport { deepCopy } from \"../Utility/DeepCopy\";\r\nimport { StateWithCountryLookupItem } from \"../Models/StateWithCountryLookupItem\";\r\nimport InputMask from 'react-input-mask';\r\nimport { getDateWithOffset } from \"../Utility/GetDateWithOffset\";\r\nimport { CountryId } from \"../Enums/CountryId\";\r\n\r\ninterface IProps {\r\n medicalLicense: MedicalLicense;\r\n states: Array;\r\n handleRemove: (medicalLicense: MedicalLicense) => void;\r\n updateMedicalLicense: (medicalLicense: MedicalLicense) => void;\r\n}\r\n\r\nexport default function MedicalLicenseCard(props: IProps) {\r\n const [originalLicense, setOriginalLicense] = useState(props.medicalLicense);\r\n const [updatedLicense, setUpdatedLicense] = useState(props.medicalLicense);\r\n\r\n const updateLicenseNumber = (value: string) => {\r\n var updated = deepCopy(updatedLicense);\r\n updated.licenseNumber = value;\r\n setUpdatedLicense(updated);\r\n }\r\n\r\n const updateExpirationDate = (value: string) => {\r\n var updated = deepCopy(updatedLicense);\r\n updated.expirationDate = value;\r\n\r\n if (Date.parse(value)) {\r\n updated.expirationDate = getDateWithOffset(value).toJSON();\r\n }\r\n setUpdatedLicense(updated);\r\n }\r\n\r\n const updateState = (e: React.ChangeEvent) => {\r\n var state = props.states.find(_ => _.id == parseInt(e.target.value));\r\n if (!state) state = props.states.find(_ => _.name == e.target.value);\r\n var value = state ? state.id : null;\r\n\r\n var updated = deepCopy(updatedLicense);\r\n updated.stateId = value;\r\n setUpdatedLicense(updated);\r\n }\r\n\r\n const beginEdit = () => {\r\n var updated = deepCopy(updatedLicense);\r\n updated.isEditing = true;\r\n setUpdatedLicense(updated);\r\n }\r\n\r\n const undo = () => {\r\n updatedLicense.isNew\r\n ? props.handleRemove(updatedLicense)\r\n : setUpdatedLicense(originalLicense);\r\n }\r\n\r\n const save = () => {\r\n var updated = deepCopy(updatedLicense);\r\n updated.isEditing = false;\r\n updated.isNew = false;\r\n props.updateMedicalLicense(updated);\r\n setUpdatedLicense(updated);\r\n setOriginalLicense(updated);\r\n }\r\n\r\n const isLicenseActive = () => {\r\n return getDateWithOffset(updatedLicense.expirationDate) > new Date();\r\n }\r\n\r\n const formatDefaultValue = (dateString: string) => {\r\n if (!dateString) return \"\";\r\n\r\n var date = getDateWithOffset(dateString);\r\n if (date == null) return \"\"\r\n\r\n var year = date.getFullYear();\r\n\r\n var month = (1 + date.getMonth()).toString();\r\n month = month.length > 1 ? month : '0' + month;\r\n\r\n var day = date.getDate().toString();\r\n day = day.length > 1 ? day : '0' + day;\r\n\r\n return month + '/' + day + '/' + year;\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n License Number\r\n {updatedLicense.isEditing ?\r\n updateLicenseNumber(e.target.value)}\r\n defaultValue={updatedLicense.licenseNumber ? updatedLicense.licenseNumber : \"\"} />\r\n :\r\n {updatedLicense.licenseNumber ? updatedLicense.licenseNumber : \"\"}\r\n }\r\n \r\n \r\n \r\n \r\n State\r\n {updatedLicense.isEditing ?\r\n ) => { updateState(e); }}\r\n defaultValue={updatedLicense.stateId ? updatedLicense.stateId : \"\"}>\r\n \r\n \r\n {props.states.filter(x => x.countryId === CountryId.Usa).map(x => ())}\r\n \r\n \r\n {props.states.filter(x => x.countryId === CountryId.Canada).map(x => ())}\r\n \r\n \r\n :\r\n {props.states.find(x => x.id == updatedLicense.stateId)?.shortName}\r\n }\r\n \r\n \r\n \r\n \r\n Expiration\r\n {updatedLicense.isEditing ?\r\n updateExpirationDate(e.target.value)}>\r\n {(inputProps: any) => {\r\n return \r\n }}\r\n \r\n :\r\n {getDateWithOffset(updatedLicense.expirationDate).toLocaleDateString('en-US')}\r\n }\r\n \r\n \r\n {updatedLicense.isEditing ?\r\n \r\n
\r\n \r\n
\r\n :\r\n \r\n \r\n Status\r\n {isLicenseActive() ?\r\n Active\r\n :\r\n \r\n }\r\n \r\n }\r\n \r\n
\r\n {!updatedLicense.isEditing && }\r\n {(updatedLicense.isEditing || updatedLicense.isNew) && }\r\n
\r\n \r\n
\r\n \r\n {(props.medicalLicense.validationMessage?.length > 0) &&\r\n \r\n { props.medicalLicense.validationMessage.map(message => {\r\n return {message}\r\n })\r\n\r\n }\r\n \r\n }\r\n \r\n
\r\n
\r\n );\r\n}\r\n","import React, { Fragment } from \"react\";\r\nimport { Card } from \"react-bootstrap\";\r\nimport { MedicalLicense } from \"../../Physician/Models/MedicalLicense\";\r\nimport { StateWithCountryLookupItem } from \"../Models/StateWithCountryLookupItem\";\r\nimport MedicalLicenseCard from \"./MedicalLicenseCard\";\r\n\r\ninterface IProps {\r\n medicalLicenses: Array;\r\n states: Array;\r\n handleRemove: (medicalLicense: MedicalLicense) => void;\r\n updateMedicalLicense: (medicalLicense: MedicalLicense) => void;\r\n}\r\n\r\nexport function MedicalLicenseList(props: IProps) {\r\n\r\n return (\r\n \r\n {props.medicalLicenses?.length > 0 ?\r\n props.medicalLicenses.map((license: MedicalLicense) => {\r\n return props.handleRemove(medicalLicense)}\r\n updateMedicalLicense={(medicalLicense: MedicalLicense) => props.updateMedicalLicense(medicalLicense)} />\r\n })\r\n :\r\n No medical licenses}\r\n \r\n );\r\n}","export class MedicalLicense {\r\n constructor() {\r\n this.licenseNumber = null;\r\n this.medicalLicenseId = 0; \r\n }\r\n public medicalLicenseId: number;\r\n public licenseNumber: string;\r\n public stateId: number;\r\n public expirationDate: string;\r\n public isNew: boolean;\r\n public isEditing: boolean;\r\n public validationMessage: string[];\r\n}\r\n\r\n","import React from \"react\";\r\nimport { useState, useContext } from \"react\";\r\nimport { Card, Button, Col, Form, Row, Collapse,OverlayTrigger,Tooltip} from \"react-bootstrap\";\r\nimport { MedicalLicenseList } from \"../../../Shared/Components/MedicalLicenseList\";\r\nimport { deepCopy } from \"../../../Shared/Utility/DeepCopy\";\r\nimport { StateWithCountryLookupItem } from \"../../../Shared/Models/StateWithCountryLookupItem\";\r\nimport { abpnClient } from \"../../../../Services/AbpnClient\";\r\nimport { MedicalLicense } from \"../../../Physician/Models/MedicalLicense\";\r\nimport { AuthContext } from \"../../../Auth/AuthProvider\";\r\nimport AbpnSpinner from \"../../../Shared/Components/AbpnSpinner\";\r\nimport { getDateWithOffset } from \"../../../Shared/Utility/GetDateWithOffset\";\r\n\r\ninterface IProps {\r\n medicalLicenses: Array;\r\n states: Array;\r\n onSaveLicenses: (medicalLicenses: Array) => void;\r\n isSectionOpen: boolean;\r\n showCollapse: boolean;\r\n}\r\n\r\nexport function MedicalLicensure(props: IProps) {\r\n const [medicalLicenses, setMedicalLicenses] = useState>(props.medicalLicenses);\r\n const [openCollapse, setOpenCollapse] = useState(props.isSectionOpen);\r\n const authContext = useContext(AuthContext);\r\n\r\n const validate = (medicalLicenses: Array) : boolean => {\r\n medicalLicenses.forEach((medicalLicense: MedicalLicense) => {\r\n medicalLicense.validationMessage = new Array();\r\n \r\n if (medicalLicense.medicalLicenseId === 0 && getDateWithOffset(medicalLicense.expirationDate) < new Date())\r\n {\r\n medicalLicense.validationMessage.push(\"Can not add expired licenses.\");\r\n }\r\n if (!medicalLicense.licenseNumber?.trim()) {\r\n medicalLicense.validationMessage.push(\" License number is required.\");\r\n }\r\n if (!medicalLicense.stateId) {\r\n medicalLicense.validationMessage.push(\" State is required\");\r\n }\r\n if (!Date.parse(medicalLicense.expirationDate)){\r\n medicalLicense.validationMessage.push(\" Expiration date invalid. Expected format: MM/DD/YYYY\");\r\n }\r\n if (medicalLicense.validationMessage.length > 0){\r\n medicalLicense.isEditing = true;\r\n }\r\n })\r\n setMedicalLicenses(deepCopy(medicalLicenses));\r\n return !medicalLicenses.some(_ => _.validationMessage?.length > 0);\r\n }\r\n\r\n const saveAllMedicalLicenses = (medicalLicensesToUpdate: Array) => {\r\n if (validate(medicalLicensesToUpdate))\r\n {\r\n const url = \"/api/Physician/SaveMedicalLicenses/\";\r\n abpnClient.post>(url, medicalLicensesToUpdate, authContext).then(result => {\r\n result.forEach((license: MedicalLicense) => { license.isEditing = false; license.isNew = false });\r\n setMedicalLicenses(result);\r\n props.onSaveLicenses(result);\r\n });\r\n } \r\n }\r\n\r\n const addNewMedicalLicense = () => {\r\n var newMedicalLicense = new MedicalLicense();\r\n newMedicalLicense.isNew = true;\r\n newMedicalLicense.isEditing = true;\r\n var newList = deepCopy(medicalLicenses);\r\n newList.push(newMedicalLicense);\r\n setMedicalLicenses(newList);\r\n }\r\n\r\n const removeMedicalLicense = (medicalLicense: MedicalLicense) => {\r\n var newList = deepCopy(medicalLicenses.filter(x => x.medicalLicenseId !== medicalLicense.medicalLicenseId));\r\n setMedicalLicenses(newList);\r\n }\r\n\r\n const updateMedicalLicense = (medicalLicense: MedicalLicense) => {\r\n var updated = deepCopy(medicalLicenses)\r\n var index = updated.findIndex(_ => _.medicalLicenseId == medicalLicense.medicalLicenseId);\r\n updated[index] = medicalLicense;\r\n saveAllMedicalLicenses(updated);\r\n }\r\n\r\n const canAddNewLicense = () => {\r\n return medicalLicenses.every(_ => _.isNew !== true);\r\n }\r\n\r\n const areLicensesValid = () => {\r\n return !medicalLicenses.some(_ => _.validationMessage?.length > 0);\r\n }\r\n\r\n const toggleCollaspe = () => {\r\n if(props.showCollapse){\r\n setOpenCollapse(!openCollapse)\r\n }\r\n }\r\n\r\n if (props.medicalLicenses == null) return ;\r\n return (\r\n \r\n \r\n \r\n {props.showCollapse && }Medical Licensure\r\n \r\n If a medical license needs to be deleted, please email questions@abpn.org.\r\n }>\r\n \r\n \t\r\n \r\n \r\n \r\n \r\n
\r\n removeMedicalLicense(medicalLicense)}\r\n updateMedicalLicense={(medicalLicense: MedicalLicense) => updateMedicalLicense(medicalLicense)} />\r\n\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n );\r\n\r\n}\r\n\r\n\r\nexport default MedicalLicensure;","import React from \"react\";\r\nimport { Button, Card, Col, Row } from \"react-bootstrap\";\r\nimport { Link } from \"react-router-dom\";\r\n\r\nexport function Activities() {\r\n return (\r\n \r\n \r\n \r\n Activities\r\n \r\n \r\n \r\n \r\n \r\n View and Manage Activity\r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n}","import { Button, Card, Col, Collapse, Row } from \"react-bootstrap\";\r\nimport { StateWithCountryLookupItem } from \"../../../Shared/Models/StateWithCountryLookupItem\";\r\nimport Physician from \"../../../Physician/Models/Physician\";\r\nimport { MedicalLicense } from \"../../../Physician/Models/MedicalLicense\";\r\nimport { Fragment, useEffect, useState } from \"react\";\r\nimport { deepCopy } from \"../../../Shared/Utility/DeepCopy\";\r\nimport MedicalLicensure from \"../../ContinuingCertification/Components/MedicalLicensure\";\r\nimport { Activities } from \"./Activities\";\r\nimport { Certificate, CertificateStatus, CertificationGeneration } from \"../../../Physician/Models/Certificate\";\r\nimport { getDateWithOffset } from \"../../../Shared/Utility/GetDateWithOffset\";\r\nimport React from \"react\";\r\n\r\ninterface IProps {\r\n states: Array;\r\n physician: Physician;\r\n updatePhysician: (physician: Physician) => void;\r\n}\r\n\r\nexport function CertificationRequirements(props: IProps) {\r\n let requiredArticles = (props.physician.hasActiveTenYearCert && !props.physician.ccEnrollmentsModel.hasCCEnrollmentHistory) ? 30 : 90;\r\n const [openCollapse, setOpenCollapse] = useState(false);\r\n\r\n useEffect(() => {\r\n }, []);\r\n\r\n const onSaveLicenses = (licenses: Array) => {\r\n var updatedPhysician = deepCopy(props.physician);\r\n updatedPhysician.medicalLicenses = licenses;\r\n\r\n props.updatePhysician(updatedPhysician);\r\n }\r\n\r\n const sortBySpecialtyAlpha = (a: Certificate, b: Certificate) => {\r\n //sort by Specialty/Subspecialty\r\n if (a.isPrimary === b.isPrimary) {\r\n //then by alpha\r\n return a.certificationName < b.certificationName ? -1 : 1\r\n } else {\r\n return a.isPrimary ? -1 : 1;\r\n }\r\n }\r\n\r\n const getCertsString = (certs: Certificate[], expiredOnly: boolean = true) => {\r\n let certList = certs;\r\n if (expiredOnly) {\r\n certList = certList.filter(_ => _.certificateStatus === CertificateStatus.Inactive);\r\n }\r\n let sortedExpiredCerts = certList.sort(sortBySpecialtyAlpha).map(_ => _.certificationName);\r\n\r\n if (sortedExpiredCerts.length > 1) {\r\n return sortedExpiredCerts.slice(0, -1).join(\", \").\r\n concat(\", and \", sortedExpiredCerts[sortedExpiredCerts.length - 1], \" certifications\");\r\n } else if (sortedExpiredCerts.length === 1) {\r\n return sortedExpiredCerts[0].concat(\" certification\");\r\n } else {\r\n return \"\";\r\n }\r\n }\r\n\r\n const displayExpiredReasonText = () => {\r\n if(props.physician.isLapsedNoLicense)\r\n return \"not meeting ABPN certification program requirements.\";\r\n else\r\n return \"not meeting certification requirements within two 3-year blocks (6 years).\";\r\n }\r\n\r\n const displayExpiredOrUnenrollmentTextForLifetimeCertHolders = () => {\r\n if(props.physician.isLapsedNoLicense)\r\n return `Your ${getCertsString(props.physician.certificates, false)} expired due to not meeting ABPN certification program requirements.`;\r\n else\r\n return `You are no longer enrolled in the Continuing Certification (CC) program for your ${getCertsString(props.physician.certificates, false)} due to not completing the CC requirements for one three-year block (three years).`;\r\n }\r\n\r\n const displayRecertificationInstructions = () => {\r\n return (\r\n \r\n To recertify, you will need to do the following:\r\n

\r\n 1. Update your medical license(s) information on file. Medical license(s) must be active, full, and unrestricted.\r\n

\r\n 2. Complete one set of activity requirements over the past {yearsRequirement} years:
\r\n
    \r\n
  • {requiredCredits} Category 1 CME credits (includes SA credit)
  • \r\n
  • 24 Self-Assessment (SA) CME credits
  • \r\n
  • 1 Improvement in Medical Practice (PIP) activity
  • \r\n {(showPatientSafetyRequirement || isInactive) &&
  • 1 Patient Safety activity
  • }\r\n {isInactive ? You will be required to submit the documentation for auditing purposes. \r\n : \r\n You will be required to submit the documentation if audited.}\r\n
\r\n For more information about \r\n Activity Requirements\r\n , please visit our website.\r\n

\r\n 3. Apply and pay for the CC/recertification exam application OR, beginning in 2022, participate in the Article Based Continuing Certification (ABCC) pathway for each certification you wish to recertify in.* Payment for recertification is due at time of application. If audited, diplomates will need to submit documentation (CME certificates, transcripts, etc.) of the completed activity requirements. For more information about the ABCC pathway, please visit \r\n \r\n abpn.org\r\n .\r\n
\r\n *Diplomates must maintain primary certification for dependent subspecialty certifications.\r\n

\r\n {hasTenYearCert ?\r\n
\r\n Diplomates who are lapsed with 10-Year certification(s) will be recertified upon passing the CC exam(s) OR successful completion of 90 ABCC article exams.* Diplomates who are active with 10-Year certification(s) will be recertified upon passing the CC exam(s) OR successful completion of 30 ABCC article exams per each cert.**\r\n
\r\n :\r\n
\r\n Diplomates will be recertified upon passing the CC exam(s) OR successful completion of {requiredArticles} ABCC article exams.*\r\n
\r\n }\r\n

\r\n \r\n *ABPN Diplomates who hold another ABMS member Board’s subspecialty certification are not eligible for the ABPN ABCC pathway for that certification. For more information about recertification options, please contact the respective administrating ABMS member Board below:\r\n

\r\n Brain Injury Medicine (American Board of Physical Medicine and Rehabilitation)
\r\n Hospice and Palliative Medicine (American Board of Internal Medicine)
\r\n Pain Medicine (American Board of Anesthesiology)
\r\n Sleep Medicine (American Board of Internal Medicine)\r\n {hasTenYearCert &&\r\n \r\n

\r\n ** Lapsed diplomates will be recertified upon successfully complete 90 ABCC article exams.\r\n Diplomates with at least one active certification, but have one or more lapsed certificates, will be recertified upon successfully complete 30 article exams for each lapsed certificate.\r\n
\r\n }\r\n
\r\n {hasLiftimeCert &&\r\n
\r\n

\r\n Non-Time Limited (Lifetime) certificates are not required to participate in the Continuing Certification (CC) program.\r\n

\r\n Diplomates who wish to participate in CC for a non-time limited (lifetime) certification will need to enroll in the traditional recertification/CC Exam OR the Article Based Continuing Certification (ABCC) pathway. Diplomates will pay the first annual fee for that certification at the time of enrollment, and will then be listed as \"Meeting\" CC/MOC requirements. Diplomates will have the next three years to pass the recertification/CC exam OR successfully complete 30 article exams, and complete the CC requirements.\r\n

\r\n Diplomates who choose the article pathway will need to continue to complete the article exams each three-year block, in addition to satisfying the CC requirements. For more information about the ABCC pathway, please visit \r\n \r\n abpn.org\r\n .\r\n

\r\n
\r\n }\r\n
\r\n );\r\n }\r\n\r\n let requiredCredits = 90;\r\n let showRecertRequirements = true;\r\n let showLifetimeOnlyLanguage = false;\r\n let showLifetimeOnlyTenYearLanguage = false;\r\n let today = new Date();\r\n\r\n let yearsRequirement = \"three\";\r\n //Lifetime Only\r\n if (props.physician.certificates.every(_ => _.certificationGeneration == CertificationGeneration.Lifetime)) {\r\n if (props.physician.ccEnrollmentsModel.hasCCEnrollmentHistory) {\r\n showLifetimeOnlyLanguage = true;\r\n } else if ((props.physician.certificates.every(_ => !_.recertifiedDate ||\r\n (getDateWithOffset(_.recertifiedDate).getTime() < getDateWithOffset(new Date(2012, 1, 1).toString()).getTime() && today.getTime() > getDateWithOffset(_.expirationDate).getTime()))\r\n )) {\r\n showRecertRequirements = false;\r\n } else if (props.physician.certificates.every(_ => _.recertifiedDate != null)) {\r\n if (props.physician.certificates.some(_ => today.getTime() > getDateWithOffset(_.expirationDate).getTime())) {\r\n showRecertRequirements = false;\r\n } else {\r\n //Active 10 year on the Lifetime cert\r\n showLifetimeOnlyTenYearLanguage = true;\r\n requiredCredits = 300;\r\n requiredArticles = 30;\r\n yearsRequirement = \"three\";\r\n }\r\n }\r\n }\r\n\r\n\r\n let hasTenYearCert = false;\r\n if (props.physician.certificates.some(_ => _.certificationGeneration == CertificationGeneration.TenYear)) {\r\n hasTenYearCert = true;\r\n yearsRequirement = \"three\";\r\n }\r\n\r\n if (props.physician.certificates.every(_ => _.certificationGeneration == CertificationGeneration.TenYear)) {\r\n requiredCredits = 300;\r\n }\r\n\r\n let isInactive = false;\r\n if (props.physician.certificates.every(_ => _.certificateStatus == CertificateStatus.Inactive)) {\r\n isInactive = true;\r\n requiredCredits = 90;\r\n yearsRequirement = \"three\";\r\n }\r\n\r\n let hasLiftimeCert = false;\r\n if (props.physician.certificates.some(_ => _.certificationGeneration == CertificationGeneration.Lifetime)) {\r\n hasLiftimeCert = true;\r\n }\r\n\r\n let showPatientSafetyRequirement = true;\r\n if (props.physician.certificates.every(_ => _.certificationGeneration == CertificationGeneration.TenYear)) {\r\n showPatientSafetyRequirement = false;\r\n }\r\n\r\n return (\r\n
\r\n {(showRecertRequirements && !props.physician.isDansInvalidatedAllowReentryExam) &&\r\n \r\n \r\n \r\n Recertification Requirements \r\n \r\n \r\n \r\n \r\n \r\n
Important message regarding your certification
\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n {showLifetimeOnlyLanguage ?\r\n
\r\n {displayExpiredOrUnenrollmentTextForLifetimeCertHolders()} Lifetime certificates are not required to participate in CC. The CC status of your lifetime certification(s) is now listed as ‘Not Required’.\r\n {!props.physician.isLapsedNoLicense &&\r\n \r\n

\r\n Diplomates who wish to participate in CC for a non-time limited (lifetime) certification will need to enroll in the traditional recertification/CC Exam OR the Article Based Continuing Certification (ABCC) pathway. Diplomates will pay the first annual fee for that certification at the time of enrollment, and will then be listed as \"Meeting\" CC/MOC requirements. Diplomates will have the next three years to pass the recertification/CC exam OR successfully complete 30 article exams, and complete the CC requirements.\r\n

\r\n Diplomates who choose the article pathway will need to continue to complete article exams each three- year block, in addition to satisfying the CC requirements. For more information about the ABCC pathway, please visit \r\n \r\n abpn.org\r\n .\r\n
\r\n }\r\n

\r\n {displayRecertificationInstructions()}\r\n
\r\n :\r\n
\r\n {props.physician.ccEnrollmentsModel.hasCCEnrollmentHistory &&\r\n \r\n Your {getCertsString(props.physician.certificates.filter(_ => _.certificationGeneration == CertificationGeneration.Cc), true)} expired due to {displayExpiredReasonText()}

\r\n {hasLiftimeCert &&\r\n \r\n You are no longer enrolled in the Continuing Certification (CC) program for your {getCertsString(props.physician.certificates.filter(_ => _.certificationGeneration == CertificationGeneration.Lifetime), false)} due to not meeting CC requirements for one three-year block (three years). Lifetime certificates are not required to participate in CC. The CC status of your lifetime certification(s) is now listed as ‘Not Required’.

\r\n
\r\n }\r\n
\r\n }\r\n {showLifetimeOnlyTenYearLanguage &&\r\n \r\n You are currently participating in the Continuing Certification program. Non-Time Limited (Lifetime) certificates are not required to participate in CC. If you wish to maintain your Continuing Certification status, you will need to recertify.

\r\n
\r\n }\r\n {displayRecertificationInstructions()}\r\n
\r\n }\r\n
\r\n \r\n
\r\n
\r\n
\r\n
}\r\n\r\n {!props.physician.isDansInvalidatedAllowReentryExam && }\r\n \r\n ) => onSaveLicenses(licenses)}\r\n isSectionOpen={true}\r\n showCollapse={false} />\r\n
\r\n )\r\n}","import { CCBlock} from \"./CCBlock\";\r\n\r\nexport class CCEnrollment {\r\n ccEnrollmentId: number;\r\n enrollmentDate: string;\r\n examCredit: number;\r\n ccBlocks: Array;\r\n patientSafetyCompletedYear: number;\r\n currentCCBlock: CCBlock;\r\n isBehindCurrentBlock: boolean;\r\n enrollmentCertificates: Array;\r\n activeEnrollmentCertificates: Array;\r\n futureEnrollmentCertificates: Array;\r\n}\r\n\r\nexport enum CCAssessmentType{\r\n Article = 1,\r\n Exam = 2,\r\n Other = 3\r\n \r\n}\r\n\r\nexport class CCEnrollmentsModel {\r\n currentCCEnrollmentId?: number;\r\n ccEnrollments: Array;\r\n hasCCEnrollmentHistory: boolean;\r\n}\r\n\r\nexport class EnrollmentCertificate{\r\n cCEnrollmentCertificateId: number;\r\n certificateId: number;\r\n certification_Key: number;\r\n certificationName: string;\r\n certificationGeneration: number;\r\n isABCCEligible: boolean;\r\n isEnrolled: string;\r\n enrollmentStartDate: string;\r\n enrollmentEndDate?: string;\r\n ccAssessmentType: CCAssessmentType;\r\n ccAssessmentAttestationDate: string;\r\n lastArticleAssessmentEnrolledDate: string;\r\n}","import React from \"react\";\r\nimport { Button, Card, Col, Row } from \"react-bootstrap\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { CCAssessmentType, EnrollmentCertificate } from \"../../../Physician/Models/CCEnrollment\";\r\nimport { Certificate, CertificateStatus, CertificationGeneration } from \"../../../Physician/Models/Certificate\";\r\nimport Physician from \"../../../Physician/Models/Physician\";\r\nimport { getDateWithOffset } from \"../../../Shared/Utility/GetDateWithOffset\";\r\n\r\ninterface IProps{\r\n physician: Physician;\r\n}\r\n\r\nexport default function CCEnrollmentSummary(props: IProps) {\r\n const isEnrolledinCC = props.physician.currentCCEnrollment != null;\r\n const lifeTimeActiveCertificates = props.physician.certificates.filter(cert => cert.certificationGeneration === CertificationGeneration.Lifetime && cert.certificateStatus == CertificateStatus.Active);\r\n\r\n const getCcAssessmentTypeName = (ccAssessmentType: CCAssessmentType ) => {\r\n switch(ccAssessmentType){\r\n case CCAssessmentType.Exam:\r\n return Examination Pathway;\r\n case CCAssessmentType.Article:\r\n return Article Based Continuing Certification (ABCC);\r\n default:\r\n return ABPN's ABCC pathway is not an option for this certification.
Please see the ABPN Website for more details.
\r\n }\r\n }\r\n\r\n const getCCEnrollmentCertificateListItem = (ccEnrollmentCertificate: EnrollmentCertificate) => {\r\n\r\n const certificate = props.physician.certificates.find((cert: Certificate) => cert.certificateId == ccEnrollmentCertificate.certificateId);\r\n if (!certificate) return \"\";\r\n \r\n var ccCertEnrollmentStartDate = getDateWithOffset(ccEnrollmentCertificate.enrollmentStartDate)\r\n\r\n return \r\n \r\n \r\n {certificate.certificationName}\r\n { ccCertEnrollmentStartDate > new Date() &&
(Requirements Begin: {ccCertEnrollmentStartDate.toLocaleDateString('en-US')})
}\r\n \r\n {getCcAssessmentTypeName(ccEnrollmentCertificate.ccAssessmentType)}\r\n
\r\n
\r\n
\r\n }\r\n let activeAndFutureEnollmentCertificates = props.physician.currentCCEnrollment && Object.values(props.physician.currentCCEnrollment.activeEnrollmentCertificates).concat(Object.values(props.physician.currentCCEnrollment.futureEnrollmentCertificates));\r\n let sortedEnrollmentCertificates = activeAndFutureEnollmentCertificates && activeAndFutureEnollmentCertificates.sort((a: EnrollmentCertificate, b: EnrollmentCertificate) => {\r\n \r\n //sort by Specialty/Subspecialty\r\n const aCertificate = props.physician.certificates.find((cert: Certificate) => cert.certificateId == a.certificateId);\r\n const bCertificate = props.physician.certificates.find((cert: Certificate) => cert.certificateId == b.certificateId);\r\n if (!aCertificate || !bCertificate) return 0;\r\n\r\n if (aCertificate.isPrimary === bCertificate.isPrimary) {\r\n //then by recent Award Date\r\n return getDateWithOffset(aCertificate.awardDate).getTime() - getDateWithOffset(bCertificate.awardDate).getTime();\r\n } else {\r\n return aCertificate.isPrimary ? -1 : 1\r\n }\r\n });\r\n\r\n \r\n return(\r\n \r\n \r\n \r\n \r\n Continuing Certification Enrollment\r\n \r\n \r\n \r\n \r\n {isEnrolledinCC && \r\n \r\n \r\n \r\n Certificates enrolled in the Continuing Certification (CC) Program:\r\n \r\n \r\n Certification\r\n Pathway\r\n \r\n \r\n {sortedEnrollmentCertificates.map((enrollmentCertificate: EnrollmentCertificate) => {\r\n return getCCEnrollmentCertificateListItem(enrollmentCertificate);\r\n })}\r\n \r\n \r\n \r\n *** Access to the ABCC Platform and Managing CC Enrollments will be available in late January 2025.\r\n \r\n \r\n \r\n \r\n }\r\n\r\n {!isEnrolledinCC && lifeTimeActiveCertificates?.length > 0 &&\r\n
\r\n

You are not currently enrolled in the Continuing Certification (CC) Program

\r\n
\r\n }\r\n \r\n
\r\n
\r\n
\r\n );\r\n\r\n}","export enum PaymentType\r\n{\r\n CreditCardVisa = 1,\r\n MasterCard = 2,\r\n Discover = 3,\r\n ECheckAch = 4,\r\n AmericanExpress = 5,\r\n Affirm = 7,\r\n}","import { appInsights } from \"../AppInsights\";\r\nimport { configService } from \"../Config/ConfigService\";\r\nimport Payment from \"./Payment\";\r\nimport { IPaymentProcessor, PaymentProcesserEnum } from \"./PaymentProcessor\";\r\nimport { PaymentType } from \"./PaymentType\";\r\n\r\ndeclare var FattJs: any;\r\n\r\nclass FattPayClient implements IPaymentProcessor {\r\n\r\n //private _payment: Payment = null;\r\n private _fattJs: any = null;\r\n\r\n constructor() {\r\n const script = document.createElement('script');\r\n script.src = \"https://fattjs.fattpay.com/js/fattmerchant.js\";\r\n script.async = true;\r\n document.body.appendChild(script);\r\n }\r\n\r\n public getPaymentProcessorId(): PaymentProcesserEnum {\r\n return PaymentProcesserEnum.Stax;\r\n }\r\n\r\n public async initializeCreditCard(cardElement: Element, cvvElement: Element) {\r\n var config = await configService.getConfiguration();\r\n\r\n this._fattJs = new FattJs(config.FattPay.WebsitePaymentsToken, {\r\n number: {\r\n id: cardElement.id, // the html id of the div you want to contain the credit card number field\r\n placeholder: '0000 0000 0000 0000', // the placeholder the field should contain\r\n style: 'display: block;padding: 0.375rem 0.75rem;font-size: 1rem;font-weight: 400;line-height: 1.5;color: #495057;background-color: #fff;background-clip: padding-box;border: 1px solid #ced4da;border-radius: 0px;transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;', // the style to apply to the field\r\n type: 'text', // the input type (optional)\r\n format: 'prettyFormat' // the formatting of the CC number (prettyFormat || plainFormat || maskedFormat)\r\n },\r\n cvv: {\r\n id: cvvElement.id, // the html id of the div you want to contain the cvv field\r\n placeholder: 'CVV', // the placeholder the field should contain\r\n style: 'display: block;padding: 0.375rem 0.75rem;font-size: 1rem;font-weight: 400;line-height: 1.5;color: #495057;background-color: #fff;background-clip: padding-box;border: 1px solid #ced4da;border-radius: 0px;transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;', // the style to apply to the field\r\n type: 'text' // the input type (optional)\r\n }\r\n });\r\n this._fattJs.showCardForm();\r\n }\r\n\r\n public async initializeBank() {\r\n var config = await configService.getConfiguration();\r\n\r\n this._fattJs = new FattJs(config.FattPay.WebsitePaymentsToken, {});\r\n this._fattJs.showCardForm();\r\n }\r\n\r\n public async tokenize(payment: Payment): Promise {\r\n\r\n if (!payment.email) throw \"Email is required for payments\";\r\n\r\n try {\r\n var response = await this._fattJs.tokenize({\r\n first_name: payment.firstName,\r\n last_name: payment.lastName,\r\n person_name: payment.firstName + \" \" + payment.lastName,\r\n address_city: payment.city,\r\n address_state: payment.state,\r\n method: payment.paymentType === PaymentType.CreditCardVisa ? \"card\" : \"bank\",\r\n month: payment.month,\r\n year: payment.year,\r\n email: payment.email,\r\n bank_type: payment.bankType,\r\n bank_holder_type: payment.bankHolderType,\r\n bank_account: payment.accountNumber,\r\n bank_routing: payment.routingNumber\r\n });\r\n payment.PaymentToken = response.id;\r\n payment.LastFour = response.card_last_four;\r\n payment.IsValid = true;\r\n } catch (ex) {\r\n payment.IsValid = false;\r\n appInsights.logError(ex);\r\n console.log(ex);\r\n }\r\n return payment;\r\n }\r\n}\r\nexport const fattPayClient = new FattPayClient();","const isNullOrUndefined = (value : any) => value === undefined || value === null;\r\nexport default isNullOrUndefined;\r\n","import Payment from \"./Payment\";\r\nimport { IPaymentProcessor, PaymentProcesserEnum } from \"./PaymentProcessor\";\r\nimport { configService } from \"../Config/ConfigService\";\r\nimport { CardXEnvironmentConfiguration } from \"../Config/EnvironmentConfiguration\";\r\nimport isNullOrUndefined from \"../../Components/Shared/Utility/isNullOrUndefined\";\r\n\r\ninterface ICardXInstanceOptions {\r\n amount : string;\r\n cardElement: Element\r\n mode ?: string;\r\n includeBillingFields : boolean;\r\n isBillingRequired : boolean;\r\n callbackFn : Function;\r\n accountNumber : string;\r\n}\r\n\r\ninterface ICardXScriptOptions {\r\n scriptId : string;\r\n srcPath : string;\r\n account: string;\r\n dataButton : string;\r\n callbackFnName : string;\r\n mode : string;\r\n amount : string | number;\r\n billingInclude : boolean;\r\n billingRequired: boolean;\r\n accountNumber : string;\r\n}\r\n\r\nclass CardXClient implements IPaymentProcessor {\r\n\r\n _window : any;\r\n _scriptElement : HTMLScriptElement = null;\r\n _callback : Function;\r\n defaultTestAmount = (1.0).toString();\r\n\r\n constructor() {\r\n this._window = window;\r\n }\r\n\r\n getPaymentProcessorId(): PaymentProcesserEnum {\r\n return PaymentProcesserEnum.CardX;\r\n }\r\n\r\n async tokenize(payment: Payment): Promise {\r\n return payment;\r\n }\r\n\r\n private async getCardXEnvironment() : Promise {\r\n var config = await configService.getConfiguration();\r\n var cardXEnvironment = (config.CardX.Environment === \"Production\") ? config.CardX.Production : config.CardX.Test;\r\n return cardXEnvironment;\r\n }\r\n\r\n private isTestScript(script : string) : boolean {\r\n return script.includes(\"test\");\r\n }\r\n\r\n public async initializeCardX(instanceOpts : ICardXInstanceOptions) {\r\n const cardXEnvironment = await this.getCardXEnvironment();\r\n \r\n const scriptOpts : ICardXScriptOptions = {\r\n scriptId : 'cardx_lightbox_script',\r\n dataButton: `#${instanceOpts.cardElement.id}`,\r\n srcPath: cardXEnvironment.Script,\r\n account : cardXEnvironment.Account,\r\n callbackFnName: '_cardXCallback',\r\n mode: instanceOpts.mode,\r\n amount: instanceOpts.amount,\r\n billingInclude: instanceOpts.includeBillingFields,\r\n billingRequired: instanceOpts.isBillingRequired,\r\n accountNumber: instanceOpts.accountNumber\r\n }\r\n\r\n this._window._cardXCallback = this.cardXCallback.bind(this);\r\n this._callback = instanceOpts.callbackFn;\r\n\r\n this.injectScript(scriptOpts);\r\n }\r\n\r\n private cardXCallback(err : any, response : any) {\r\n this._callback(err, response);\r\n }\r\n\r\n private getAmountForEnvironment(scriptPath : string, amount : string| number) : string {\r\n return this.isTestScript(scriptPath) ? this.defaultTestAmount : amount.toString() ;\r\n }\r\n\r\n private injectScript(opts : ICardXScriptOptions) {\r\n this._scriptElement = document.createElement('script');\r\n this._scriptElement.id = opts.scriptId;\r\n this._scriptElement.src = opts.srcPath;\r\n this._scriptElement.setAttribute('data-account', opts.account);\r\n this._scriptElement.setAttribute('data-lightboxamount', opts.amount.toString());\r\n this._scriptElement.setAttribute('data-amount', this.getAmountForEnvironment(opts.srcPath, opts.amount));\r\n this._scriptElement.setAttribute('data-button', opts.dataButton);\r\n this._scriptElement.setAttribute('data-callback', opts.callbackFnName);\r\n this._scriptElement.setAttribute('data-mode', 'payment');\r\n this._scriptElement.setAttribute('data-billingInclude', opts.billingInclude === true ? 'true' : 'false');\r\n this._scriptElement.setAttribute('data-billingRequired', opts.billingRequired === true ? 'true' : 'false');\r\n if (!isNullOrUndefined(opts.accountNumber)) {\r\n this._scriptElement.setAttribute('data-accountIdentifier', opts.accountNumber);\r\n this._scriptElement.setAttribute('data-accountIdentifierEditable', 'false');\r\n }\r\n document.body.appendChild(this._scriptElement);\r\n }\r\n\r\n updateScriptAttributes(opts : Partial) {\r\n if (this._scriptElement === null) return;\r\n\r\n if (!isNullOrUndefined(opts.amount)){\r\n this._scriptElement.setAttribute('data-lightboxamount', opts.amount.toString());\r\n this._scriptElement.setAttribute('data-amount', this.getAmountForEnvironment(this._scriptElement.src, opts.amount));\r\n }\r\n \r\n if (!isNullOrUndefined(opts.accountNumber)){\r\n this._scriptElement.setAttribute('data-accountIdentifier', opts.accountNumber);\r\n this._scriptElement.setAttribute('data-accountIdentifierEditable', 'false');\r\n }\r\n\r\n }\r\n\r\n public disposeCardX() {\r\n if (this._window._cardXCallback){\r\n delete this._window._cardXCallback;\r\n }\r\n\r\n if (this._scriptElement != null){\r\n document.body.removeChild(this._scriptElement);\r\n this._scriptElement = null;\r\n }\r\n }\r\n}\r\n\r\n\r\nexport default new CardXClient();","export const booleanify = (value: string): boolean => {\r\n const truthy: string[] = [\r\n 'true',\r\n 'True',\r\n '1'\r\n ]\r\n\r\n return truthy.includes(value);\r\n}","import { configService } from \"../Config/ConfigService\";\r\nimport Payment from \"./Payment\";\r\nimport { IPaymentProcessor, PaymentProcesserEnum } from \"./PaymentProcessor\";\r\n\r\nclass AffirmClient implements IPaymentProcessor {\r\n \r\n constructor() {\r\n \r\n }\r\n\r\n getPaymentProcessorId(): PaymentProcesserEnum {\r\n return PaymentProcesserEnum.Affirm;\r\n }\r\n\r\n tokenize(payment: Payment): Promise {\r\n return Promise.resolve(payment);\r\n }\r\n\r\n public async initializeAffirm() {\r\n var config = await configService.getConfiguration();\r\n var affirmConfig = {\r\n public_api_key: config.Affirm.PublicApiKey,\r\n script: config.Affirm.Script\r\n };\r\n\r\n var affirmConfigString = \"_affirm_config = \" + JSON.stringify(affirmConfig) + ';';\r\n var affirmFunction = '(function(m,g,n,d,a,e,h,c){var b=m[n]||{},k=document.createElement(e),p=document.getElementsByTagName(e)[0],l=function(a,b,c){return function(){a[b]._.push([c,arguments])}};b[d]=l(b,d,\"set\");var f=b[d];b[a]={};b[a]._=[];f._=[];b._=[];b[a][h]=l(b,a,h);b[c]=function(){b._.push([h,arguments])};a=0;for(c=\"set add save post open empty reset on off trigger ready setProduct\".split(\" \");a;\r\n}\r\n\r\nexport async function getCreditCardProcessor() : Promise {\r\n const useCardXFlag = (await configService.getConfiguration()).FeatureFlags.UseCardXPaymentProcessor;\r\n const useCardX = (typeof useCardXFlag === \"string\") ? booleanify(useCardXFlag) : useCardXFlag;\r\n\r\n return useCardX ? CreditCardClientLibrary.CardX : CreditCardClientLibrary.FattPay;\r\n}\r\n\r\nconst isCreditCardPaymentType = (paymentType : PaymentType) => paymentType == PaymentType.CreditCardVisa || paymentType == PaymentType.Discover || paymentType == PaymentType.MasterCard || paymentType == PaymentType.AmericanExpress;\r\n\r\nexport function getPaymentProcessorForPaymentType(creditCardLibrary : CreditCardClientLibrary, paymentType : PaymentType) : IPaymentProcessor {\r\n\r\n if (isCreditCardPaymentType(paymentType)) \r\n {\r\n switch (creditCardLibrary){\r\n case CreditCardClientLibrary.CardX: {\r\n return cardXClient;\r\n }\r\n case CreditCardClientLibrary.FattPay: {\r\n return fattPayClient;\r\n }\r\n default:\r\n {\r\n throw new Error(\"No credit card client library available\");\r\n }\r\n }\r\n }\r\n\r\n switch (paymentType)\r\n {\r\n case PaymentType.Affirm: \r\n {\r\n return affirmClient;\r\n }\r\n case PaymentType.ECheckAch:\r\n {\r\n return fattPayClient;\r\n }\r\n default:\r\n {\r\n throw new Error(\"No payment processor\");\r\n }\r\n }\r\n}\r\n\r\n","import Payment from \"../../../../Services/PaymentProcessor/Payment\";\r\nimport { CCAnnualFee } from \"../../../Physician/Models/CCBlock\";\r\n\r\nexport default class CCAnnualFeePayment {\r\n constructor(fees: Array, payment: Payment) {\r\n this.years = fees.map(_ => _.year);\r\n this.payment = payment;\r\n }\r\n years: Array;\r\n payment: Payment;\r\n}\r\n\r\n","import { IPaymentCharge } from \"./PaymentChargeModel\";\r\nimport { PaymentType } from \"./PaymentType\";\r\n\r\nexport default class Payment {\r\n PaymentToken: string;\r\n LastFour: string;\r\n IsValid: boolean;\r\n error: any;\r\n amount: number;\r\n transactionDate: string;\r\n paymentType: PaymentType;\r\n firstName: string;\r\n lastName: string;\r\n city: string;\r\n state: string;\r\n month: string;\r\n year: string;\r\n email: string;\r\n accountNumber: string;\r\n secondAccountNumber: string;\r\n routingNumber: string;\r\n method: string;\r\n bankType: string;\r\n bankHolderType: string;\r\n paymentCharge ?: IPaymentCharge\r\n hasBeenCharged : boolean\r\n}\r\nexport enum BankHolderType {\r\n personal = \"personal\",\r\n business = \"business\"\r\n}\r\nexport enum BankType {\r\n checking = \"checking\",\r\n savings = \"savings\"\r\n}","import React from 'react'\r\nimport { Fragment, useEffect } from 'react'\r\nimport { fattPayClient } from \"./FattPayClient\";\r\nimport { Col, Form, Row, Button, Image } from 'react-bootstrap';\r\nimport Payment, { BankHolderType, BankType } from './Payment';\r\nimport { deepCopy } from '../../Components/Shared/Utility/DeepCopy';\r\nimport { ValidatorHelper } from '../../Components/Shared/ValidatorHelper';\r\n\r\ninterface IProps {\r\n onPaymentChanged: (payment: Payment) => void;\r\n payment: Payment,\r\n disabled?: boolean\r\n}\r\n\r\nexport const FattPayBank = React.forwardRef((props: IProps, ref: React.Ref) => {\r\n var routingNumberRef = React.useRef(null);\r\n var accountNumberRef = React.useRef(null);\r\n var reenterAccountNumberRef = React.useRef(null);\r\n\r\n React.useImperativeHandle(ref,\r\n () => ({\r\n validate(payment: Payment) : boolean {\r\n var isValid = true;\r\n ValidatorHelper.clearCustomValidation(routingNumberRef.current);\r\n ValidatorHelper.clearCustomValidation(accountNumberRef.current);\r\n ValidatorHelper.clearCustomValidation(reenterAccountNumberRef.current);\r\n\r\n if(payment.routingNumber === undefined || payment.routingNumber.length < 9) {\r\n ValidatorHelper.setCustomValidationWithFeedback(routingNumberRef.current, \"9-digit routing number is Required\");\r\n isValid = false;\r\n }\r\n\r\n if(payment.accountNumber !== payment.secondAccountNumber) {\r\n ValidatorHelper.setCustomValidationWithFeedback(accountNumberRef.current, \"Account numbers do not match\");\r\n ValidatorHelper.setCustomValidationWithFeedback(reenterAccountNumberRef.current, \"Account numbers do not match\");\r\n isValid = false;\r\n }\r\n \r\n return isValid;\r\n }\r\n }),\r\n );\r\n\r\n useEffect(() => {\r\n async function initialize() {\r\n //Initialize Bank\r\n await fattPayClient.initializeBank();\r\n }\r\n initialize();\r\n }, []);\r\n\r\n const updateAccountNumber = (accountNumber: string) => {\r\n const updated = deepCopy(props.payment);\r\n updated.accountNumber = accountNumber;\r\n props.onPaymentChanged(updated);\r\n if(updated.accountNumber !== updated.secondAccountNumber) {\r\n ValidatorHelper.setCustomValidationWithFeedback(accountNumberRef.current, \"Account numbers do not match\");\r\n ValidatorHelper.setCustomValidationWithFeedback(reenterAccountNumberRef.current, \"Account numbers do not match\");\r\n }\r\n if(updated.secondAccountNumber === updated.accountNumber) {\r\n ValidatorHelper.clearCustomValidation(accountNumberRef.current);\r\n ValidatorHelper.clearCustomValidation(reenterAccountNumberRef.current);\r\n }\r\n }\r\n\r\n const updateSecondAccountNumber = (accountNumber: string) => {\r\n const updated = deepCopy(props.payment);\r\n updated.secondAccountNumber = accountNumber;\r\n props.onPaymentChanged(updated);\r\n \r\n if(updated.secondAccountNumber !== updated.accountNumber) {\r\n ValidatorHelper.setCustomValidationWithFeedback(accountNumberRef.current, \"Account numbers do not match\");\r\n ValidatorHelper.setCustomValidationWithFeedback(reenterAccountNumberRef.current, \"Account numbers do not match\");\r\n }\r\n if(updated.secondAccountNumber === updated.accountNumber) {\r\n ValidatorHelper.clearCustomValidation(accountNumberRef.current);\r\n ValidatorHelper.clearCustomValidation(reenterAccountNumberRef.current);\r\n }\r\n }\r\n\r\n const updateRoutingNumber = (routingNumber: string) => {\r\n const updated = deepCopy(props.payment);\r\n updated.routingNumber = routingNumber;\r\n props.onPaymentChanged(updated);\r\n if(updated.routingNumber === undefined || updated.routingNumber.length < 9) {\r\n ValidatorHelper.setCustomValidationWithFeedback(routingNumberRef.current, \"9-digit routing number is Required\");\r\n }\r\n if(routingNumber.length === 9) {\r\n ValidatorHelper.clearCustomValidation(routingNumberRef.current);\r\n }\r\n }\r\n \r\n const updateBankType = (type: BankType) => {\r\n const updated = deepCopy(props.payment);\r\n updated.bankType = type;\r\n props.onPaymentChanged(updated);\r\n }\r\n \r\n const updateBankHolderType = (type: BankHolderType) => {\r\n const updated = deepCopy(props.payment);\r\n updated.bankHolderType = type;\r\n props.onPaymentChanged(updated);\r\n }\r\n\r\n const updateFirstName = (firstName: string) => {\r\n const updated = deepCopy(props.payment);\r\n updated.firstName = firstName;\r\n props.onPaymentChanged(updated);\r\n }\r\n\r\n const updateLastName = (lastName: string) => {\r\n const updated = deepCopy(props.payment);\r\n updated.lastName = lastName;\r\n props.onPaymentChanged(updated);\r\n }\r\n\r\n return (\r\n \r\n \r\n Account Holder Name\r\n *\r\n \r\n \r\n updateFirstName(e.target.value)}\r\n defaultValue={props.payment.firstName} />\r\n First Name is Required\r\n \r\n \r\n updateLastName(e.target.value)}\r\n defaultValue={props.payment.lastName} />\r\n Last Name is Required\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Routing Number\r\n *\r\n updateRoutingNumber(e.target.value)}\r\n defaultValue={props.payment.routingNumber}\r\n maxLength={9} />\r\n 9-digit routing number is Required\r\n \r\n \r\n \r\n \r\n Account Number\r\n *\r\n updateAccountNumber(e.target.value)}\r\n defaultValue={props.payment.accountNumber} />\r\n Account numbers do not match\r\n \r\n \r\n \r\n \r\n Re-Enter Account Number\r\n *\r\n updateSecondAccountNumber(e.target.value)}\r\n defaultValue={\"\"} />\r\n Account numbers do not match\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Type*\r\n updateBankType(BankType.checking)}\r\n className=\"ml-1 mt-3\" />\r\n \r\n \r\n \r\n updateBankType(BankType.savings)}\r\n className=\"ml-1 mt-3\" />\r\n \r\n \r\n \r\n \r\n \r\n \r\n Purpose*\r\n updateBankHolderType(BankHolderType.personal)}\r\n className=\"ml-1 mt-3\" />\r\n \r\n \r\n \r\n updateBankHolderType(BankHolderType.business)}\r\n className=\"ml-1 mt-3\" />\r\n \r\n \r\n \r\n\r\n \r\n\r\n );\r\n});","import React, { useEffect, useState } from \"react\";\r\nimport { abpnClient } from \"../../Services/AbpnClient\";\r\nimport { PortalUser } from \"../Shared/Models/PortalUser\";\r\nimport { AuthContext } from \"./AuthProvider\";\r\n\r\ninterface IProfileProviderProps {\r\n user: PortalUser\r\n}\r\nexport const ProfileContext = React.createContext(null);\r\n\r\nexport const ProfileProvider = (props: any) => {\r\n const [user, setUser] = useState(null);\r\n var auth = React.useContext(AuthContext);\r\n\r\n useEffect(() => {\r\n const loadUser = async () => {\r\n let userResult = await abpnClient.get(\"/api/profile/getcurrentuser\", auth);\r\n\r\n if ((userResult.physicianId !== user?.physicianId) && (userResult.otherBoardPhysicianId !== user?.otherBoardPhysicianId)) {\r\n setUser(userResult);\r\n }\r\n }\r\n if (auth.isAuthenticated()) {\r\n loadUser();\r\n }\r\n }, [])\r\n\r\n return { props.children };\r\n}","import React, { useContext } from 'react'\r\nimport CardXClient from \"./CardXClient\";\r\nimport { deepCopy } from '../../Components/Shared/Utility/DeepCopy';\r\nimport Payment from './Payment';\r\nimport { getDateWithOffset } from '../../Components/Shared/Utility/GetDateWithOffset';\r\nimport AbpnSpinner from '../../Components/Shared/Components/AbpnSpinner';\r\nimport { IPaymentCharge } from './PaymentChargeModel';\r\nimport { PaymentType } from './PaymentType';\r\nimport { appInsights } from '../AppInsights';\r\nimport { ProfileContext } from '../../Components/Auth/ProfileProvider';\r\n\r\ninterface ICardXCreditCardProps {\r\n onPaymentChanged: (payment: Payment) => void;\r\n showPaymentButton : boolean;\r\n isDisabled : boolean;\r\n payment: Payment,\r\n}\r\n\r\ninterface ICardXResponse { \r\n credDebType: string;\r\n pi_avs_response : string;\r\n pi_cvv_response : string;\r\n pd_collect_shipping_information : string;\r\n pd_display_items : string;\r\n pi_response_code : string;\r\n pi_response_status : string;\r\n pt_ach_account_type : string;\r\n pt_authorization_code : string;\r\n pt_card_expiration : string;\r\n pt_card_number : string;\r\n pt_card_token : string;\r\n pt_card_type : string;\r\n pt_currency : string;\r\n pt_custom_name_1 : string;\r\n pt_custom_value_1 : string;\r\n pt_decline_order_id : string;\r\n pt_gateway_account : string;\r\n pt_order_id : string;\r\n pt_surcharge_amount : number;\r\n pt_transaction_amount : number;\r\n pt_payment_session : string;\r\n pt_account_code_1 : string;\r\n pt_account_code_2 : string;\r\n pt_account_code_3 : string;\r\n pt_billing_address_1 : string;\r\n pt_billing_city : string;\r\n pt_billing_email_address : string;\r\n pt_billing_postal_code : string;\r\n pt_billing_state : string;\r\n pt_payment_name : string;\r\n pt_billing_country : string;\r\n processor_message : string;\r\n isFraudDetectRun : boolean;\r\n country : string;\r\n response : string;\r\n}\r\n\r\nlet didCardXInitialize : boolean = false;\r\n\r\nexport const CardXCreditCard = React.forwardRef((props : ICardXCreditCardProps) => {\r\n const { user } = useContext(ProfileContext);\r\n \r\n var cardXRef = React.createRef();\r\n\r\n const updatePayment = (cardXResponse : ICardXResponse, paymentCharge : IPaymentCharge) => {\r\n const paymentClone = deepCopy(props.payment);\r\n\r\n const cardXPayment : Partial = {\r\n city: cardXResponse.pt_billing_city,\r\n state: cardXResponse.pt_billing_state, \r\n method: \"card\",\r\n email: cardXResponse.pt_billing_email_address,\r\n LastFour: cardXResponse.pt_card_number.substring(-4),\r\n PaymentToken: cardXResponse.pt_card_token, \r\n IsValid: paymentCharge.isSuccessful,\r\n paymentCharge: paymentCharge,\r\n paymentType: paymentCharge.paymentType,\r\n hasBeenCharged: true\r\n };\r\n\r\n const updatedPayment : Payment = {...paymentClone, ...cardXPayment};\r\n props.onPaymentChanged(updatedPayment);\r\n }\r\n\r\n const handlePaymentError = (err : Error) => {\r\n const paymentClone = deepCopy(props.payment);\r\n const updatedPayment : Payment = {...paymentClone, \r\n error: `${err}`\r\n };\r\n\r\n props.onPaymentChanged(updatedPayment);\r\n }\r\n\r\n React.useEffect(() => {\r\n if (didCardXInitialize) return;\r\n\r\n function getCardXPaymentType(cardType : string) : PaymentType {\r\n if (cardType == \"amex\") return PaymentType.AmericanExpress;\r\n\r\n return PaymentType.CreditCardVisa;\r\n }\r\n\r\n async function onCardXCallback(err : Error, cardXResponse : ICardXResponse) {\r\n if (err != null) {\r\n await appInsights.logError(err);\r\n handlePaymentError(err);\r\n return;\r\n }\r\n\r\n if (cardXResponse.response === 'payment cancelled') {\r\n var paymentCancelledError = new Error(`Payment Cancelled`);\r\n await appInsights.logError(paymentCancelledError);\r\n handlePaymentError(paymentCancelledError);\r\n return;\r\n }\r\n\r\n const isPaymentSuccess = cardXResponse.pi_response_status == 'success';\r\n\r\n if (!isPaymentSuccess) {\r\n var paymentUnsuccessfulError = new Error(`Unsuccessful payment: ${JSON.stringify(cardXResponse)}`);\r\n await appInsights.logError(paymentUnsuccessfulError);\r\n }\r\n\r\n const paymentCharge : IPaymentCharge = {\r\n paymentProcessorAccount: cardXResponse.pt_gateway_account,\r\n cardHolderName: cardXResponse.pt_payment_name,\r\n cardNumber: cardXResponse.pt_card_number,\r\n paymentType: getCardXPaymentType(cardXResponse.pt_card_type.toLowerCase()),\r\n response: JSON.stringify(cardXResponse),\r\n transactionDate: new Date(),\r\n responseCode: cardXResponse.pi_response_code,\r\n transactionId: cardXResponse.pt_order_id,\r\n surchargeAmount: cardXResponse.pt_surcharge_amount,\r\n transactionAmount: cardXResponse.pt_transaction_amount,\r\n isSuccessful: isPaymentSuccess\r\n };\r\n\r\n updatePayment(cardXResponse, paymentCharge);\r\n }\r\n\r\n async function initializeCardX() {\r\n await CardXClient.initializeCardX({\r\n amount: `${props.payment.amount}`,\r\n cardElement: cardXRef.current,\r\n mode: 'payment',\r\n includeBillingFields: true,\r\n isBillingRequired: true,\r\n callbackFn: onCardXCallback,\r\n accountNumber: user.physicianId\r\n });\r\n }\r\n\r\n initializeCardX();\r\n didCardXInitialize = true;\r\n\r\n return () => {\r\n CardXClient.disposeCardX();\r\n didCardXInitialize = false;\r\n }\r\n\r\n }, []);\r\n\r\n React.useEffect(() => {\r\n CardXClient.updateScriptAttributes({\r\n amount: `${props.payment.amount}`,\r\n });\r\n\r\n }, [props.payment]);\r\n\r\n React.useEffect(() => {\r\n CardXClient.updateScriptAttributes({accountNumber: user.physicianId});\r\n }, [user.physicianId]);\r\n\r\n const cardWrapperStyle = {\r\n 'display': props.showPaymentButton ? 'block' : 'none',\r\n 'marginTop': '20px'\r\n };\r\n\r\n return (\r\n
\r\n
\r\n
\r\n );\r\n});","import React from 'react'\r\nimport { fattPayClient } from \"./FattPayClient\";\r\nimport { Col, Form, Button } from 'react-bootstrap';\r\nimport Payment from './Payment';\r\nimport { deepCopy } from '../../Components/Shared/Utility/DeepCopy';\r\nimport { ValidatorHelper } from '../../Components/Shared/ValidatorHelper';\r\n\r\ninterface IFattPayCreditCardProps {\r\n onPaymentChanged: (payment: Payment) => void;\r\n payment: Payment,\r\n disabled?: boolean\r\n}\r\n\r\nconst monthRegex = new RegExp('0[1-9]|1[012]');\r\nconst yearRegex = new RegExp('\\\\d{4}');\r\n\r\nexport const FattPayCreditCard = React.forwardRef((props: IFattPayCreditCardProps, ref: React.Ref) => {\r\n var cardRef = React.createRef();\r\n var cvvRef = React.createRef();\r\n var ccMonthRef = React.useRef(null);\r\n var ccYearRef = React.useRef(null);\r\n\r\n React.useImperativeHandle(ref,\r\n () => ({\r\n validate(payment: Payment) : boolean {\r\n ValidatorHelper.clearCustomValidation(ccMonthRef.current);\r\n ValidatorHelper.clearCustomValidation(ccYearRef.current);\r\n var isValid = true;\r\n \r\n if (payment.month.match(monthRegex) === null) {\r\n ValidatorHelper.setCustomValidationWithFeedback(ccMonthRef.current, \"Enter 2 Digit Month.\");\r\n isValid = false;\r\n }\r\n \r\n if (payment.year.match(yearRegex) === null) {\r\n ValidatorHelper.setCustomValidationWithFeedback(ccYearRef.current, \"Enter 4 Digit Year.\");\r\n isValid = false;\r\n }\r\n \r\n return isValid;\r\n }\r\n }),\r\n );\r\n\r\n React.useEffect(() => {\r\n async function initialize() {\r\n //Initialize Bank\r\n await fattPayClient.initializeCreditCard(cardRef.current, cvvRef.current);\r\n }\r\n initialize();\r\n }, []);\r\n\r\n\r\n const updateFirstName = (firstName: string) => {\r\n const updated = deepCopy(props.payment);\r\n updated.firstName = firstName;\r\n props.onPaymentChanged(updated);\r\n }\r\n\r\n const updateLastName = (lastName: string) => {\r\n const updated = deepCopy(props.payment);\r\n updated.lastName = lastName;\r\n props.onPaymentChanged(updated);\r\n }\r\n\r\n const updateMonth = (month: string) => {\r\n const updated = deepCopy(props.payment);\r\n updated.month = month;\r\n props.onPaymentChanged(updated);\r\n }\r\n\r\n const updateYear = (year: string) => {\r\n const updated = deepCopy(props.payment);\r\n updated.year = year;\r\n props.onPaymentChanged(updated);\r\n }\r\n\r\n return (\r\n \r\n \r\n Cardholder Name\r\n *\r\n \r\n \r\n updateFirstName(e.target.value)}\r\n defaultValue={props.payment.firstName} />\r\n First Name is Required\r\n \r\n \r\n updateLastName(e.target.value)}\r\n defaultValue={props.payment.lastName} />\r\n Last Name is Required\r\n \r\n \r\n \r\n \r\n Card Number\r\n *\r\n
\r\n \r\n \r\n Expiration\r\n *\r\n \r\n \r\n updateMonth(e.target.value)} maxLength={2}\r\n defaultValue={props.payment.month} />\r\n Month is invalid\r\n \r\n \r\n updateYear(e.target.value)}\r\n defaultValue={props.payment.year} />\r\n Year is invalid\r\n \r\n \r\n \r\n \r\n CVV\r\n *\r\n
\r\n \r\n\r\n \r\n\r\n \r\n );\r\n});","import React from 'react'\r\nimport Payment from './Payment';\r\nimport { PaymentType } from './PaymentType';\r\nimport { FattPayBank } from './FattPayBank';\r\nimport { CardXCreditCard } from './CardXCreditCard';\r\nimport { FattPayCreditCard } from './FattPayCreditCard';\r\nimport { CreditCardClientLibrary } from './PaymentProcessor';\r\n\r\ninterface IPaymentTypeSelectorProps {\r\n creditCardProcessor : CreditCardClientLibrary;\r\n onPaymentChanged: (payment: Payment) => void;\r\n isDisabled : boolean;\r\n payment: Payment,\r\n}\r\n\r\nexport const PaymentTypeSelector = React.forwardRef((props: IPaymentTypeSelectorProps, ref: React.Ref) => {\r\n return \r\n {props.payment.paymentType === PaymentType.CreditCardVisa && }\r\n {props.payment.paymentType === PaymentType.ECheckAch && }\r\n \r\n});\r\n\r\nconst CreditCardPaymentTypeSelector = React.forwardRef((props: IPaymentTypeSelectorProps) : React.ReactElement => {\r\n switch (props.creditCardProcessor){\r\n case CreditCardClientLibrary.CardX:\r\n return ;\r\n case CreditCardClientLibrary.FattPay:\r\n return \r\n default:\r\n case CreditCardClientLibrary.None:\r\n return null;\r\n }\r\n});\r\n","import React, { useEffect, useState } from 'react'\r\nimport { Button, Card } from 'react-bootstrap';\r\nimport Payment from './Payment';\r\nimport { deepCopy } from '../../Components/Shared/Utility/DeepCopy';\r\nimport { PaymentType } from './PaymentType';\r\nimport { PaymentTypeSelector } from './PaymentTypeSelector';\r\nimport { CreditCardClientLibrary, getCreditCardProcessor } from './PaymentProcessor';\r\n\r\ninterface IPaymentContainerProps {\r\n onPaymentChanged: (payment: Payment) => void;\r\n onPaymentTypeChanged: () => void;\r\n payment: Payment,\r\n disabled?: boolean\r\n}\r\n\r\nexport const PaymentContainer = React.forwardRef((props: IPaymentContainerProps, ref: React.Ref) => {\r\n const ccPaymentRef = React.useRef(null);\r\n const achPaymentRef = React.useRef(null);\r\n const [paymentButtonType, setPaymentButtonType] = useState(0);\r\n\r\n const [creditCardProcessor, setCreditCardProcessor] = useState(CreditCardClientLibrary.None);\r\n\r\n React.useImperativeHandle(ref,\r\n () => ({\r\n validate(payment: Payment) : boolean {\r\n var isValid = true;\r\n\r\n if (ccPaymentRef.current && !ccPaymentRef.current.validate(payment)) {\r\n isValid = false;\r\n }\r\n\r\n if (achPaymentRef.current && !achPaymentRef.current.validate(payment)) {\r\n isValid = false;\r\n }\r\n\r\n return isValid;\r\n }\r\n }),\r\n );\r\n\r\n const updatePaymentType = (paymentType: PaymentType, type: number) => {\r\n const updated = deepCopy(props.payment);\r\n updated.paymentType = paymentType;\r\n setPaymentButtonType(type);\r\n props.onPaymentChanged(updated);\r\n props.onPaymentTypeChanged();\r\n }\r\n\r\n useEffect(() => {\r\n if (creditCardProcessor !== CreditCardClientLibrary.None) return;\r\n \r\n const getCreditCardProcessorForPaymentContainer = async () => {\r\n const cardProcessor : CreditCardClientLibrary = await getCreditCardProcessor();\r\n setCreditCardProcessor(cardProcessor);\r\n }\r\n\r\n getCreditCardProcessorForPaymentContainer();\r\n\r\n }, [])\r\n\r\n return (\r\n \r\n
\r\n \r\n Select Payment Method*\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n );\r\n});","import { MutableRefObject, useEffect, useRef } from \"react\";\r\n\r\n/**Use previous value ref hook. Useful for executing logic only if a value from state changed only once */\r\nexport function usePrevious(value : any) : MutableRefObject {\r\n const ref = useRef();\r\n useEffect(() => {\r\n ref.current = value;\r\n }, [value]);\r\n return ref;\r\n}","import React, { useRef, useState, useContext, useEffect } from \"react\";\r\nimport { Card, Button, Col, Form, Row, Alert, OverlayTrigger, Tooltip } from \"react-bootstrap\";\r\nimport { abpnClient } from \"../../../../Services/AbpnClient\";\r\nimport { CreditCardClientLibrary, getCreditCardProcessor, getPaymentProcessorForPaymentType } from \"../../../../Services/PaymentProcessor/PaymentProcessor\";\r\nimport Payment from \"../../../../Services/PaymentProcessor/Payment\";\r\nimport { Address } from \"../../../Physician/Models/Address\";\r\nimport { AuthContext } from \"../../../Auth/AuthProvider\";\r\nimport { CCAnnualFee, CCBlock } from \"../../../Physician/Models/CCBlock\";\r\nimport AbpnSpinner from \"../../../Shared/Components/AbpnSpinner\";\r\nimport { deepCopy } from \"../../../Shared/Utility/DeepCopy\";\r\nimport CCAnnualFeePayment from \"../Models/CCAnnualFeePayment\";\r\nimport { PaymentContainer } from \"../../../../Services/PaymentProcessor/PaymentContainer\";\r\nimport CCAnnualFeePaymentResponse from \"../Models/CCAnnualFeePaymentResponse\";\r\nimport { configService } from \"../../../../Services/Config/ConfigService\";\r\nimport { booleanify } from \"../../../Shared/Utility/Booleanify\";\r\nimport InvoiceModel from \"../../../Shared/Models/InvoiceModel\";\r\nimport ReceiptModel from \"../../../Shared/Models/ReceiptModel\";\r\nimport moment from \"moment\";\r\nimport { usePrevious } from \"../../../Shared/Utility/usePrevRefHook\";\r\nimport { useHistory } from \"react-router-dom\";\r\n\r\ninterface IProps {\r\n ccBlock: CCBlock;\r\n onSaveBlock: (updatedBlock: CCBlock) => void;\r\n isReadOnly: boolean;\r\n blockYears: Array;\r\n contactAddress: Address;\r\n email: string;\r\n}\r\n\r\nexport function AnnualFees(props: IProps) {\r\n\r\n const [payFees, setPayFees] = useState(false);\r\n const [isSubmitting, setIsSubmitting] = useState(false);\r\n const [selectedYearsToPay, setSelectedYearsToPay] = useState>([]);\r\n const [payment, setPayment] = useState({ email: props.email, city: props.contactAddress?.city, state: props.contactAddress?.stateCode } as Payment);\r\n const [isPaymentSuccessful, setIsPaymentSuccessful] = useState(null);\r\n const [useBC, setUseBC] = useState(false);\r\n const [creditCardProcessor, setCreditCardProcessor] = useState(CreditCardClientLibrary.None);\r\n const history = useHistory();\r\n\r\n let isPaymentChargedSubmitted = usePrevious(false); //track whether to submit to invoice if payment has been charged\r\n\r\n const authContext = useContext(AuthContext);\r\n const cardRef = useRef(null);\r\n const payContainerRef = React.useRef(null);\r\n const scrollToTop = () => cardRef?.current.scrollIntoView({ behavior: \"smooth\" })\r\n var unpaidFees = props.ccBlock.ccAnnualFees.filter(_ => !_.isWaived && !_.isPaid);\r\n\r\n const getUnpaidYears = () => {\r\n return unpaidFees.filter(_ => !props.ccBlock.unpaidOrphanYears.some(x => x == _.year));\r\n }\r\n\r\n useEffect(() => {\r\n const addRequiredFeesToPay = () => {\r\n const updated = deepCopy(selectedYearsToPay);\r\n var allAnnualFees = props.ccBlock.ccAnnualFees\r\n for (var i = 0; i < allAnnualFees.length; i++){\r\n var annualFee = allAnnualFees[i];\r\n var isOrphan = props.ccBlock.unpaidOrphanYears.some(_ => _ == annualFee.year);\r\n if (isOrphan && updated.every(_ => _.year != annualFee.year)) updated.push(annualFee);\r\n }\r\n\r\n if (updated.length === 0) {\r\n var unpaid = props.ccBlock.ccAnnualFees.filter(_ => !_.isWaived && !_.isPaid && !isSelectYearToPayInTheFuture(_));\r\n var requiredFee = unpaid[0];\r\n if (requiredFee){\r\n updated.push(requiredFee)\r\n }\r\n \r\n }\r\n\r\n setSelectedYearsToPay(updated);\r\n }\r\n\r\n addRequiredFeesToPay();\r\n }, [props.ccBlock]);\r\n\r\n useEffect(() => {\r\n if (creditCardProcessor !== CreditCardClientLibrary.None) return;\r\n \r\n const getCreditCardProcessorForPaymentContainer = async () => {\r\n const cardProcessor : CreditCardClientLibrary = await getCreditCardProcessor();\r\n setCreditCardProcessor(cardProcessor);\r\n }\r\n \r\n getCreditCardProcessorForPaymentContainer();\r\n \r\n }, [])\r\n \r\n\r\n useEffect(() => {\r\n const getUseBC = async () => {\r\n let k = (await configService.getConfiguration()).FeatureFlags.UseBusinessCentral;\r\n if (typeof k === \"string\")\r\n {\r\n setUseBC(booleanify(k));\r\n }\r\n else {\r\n setUseBC(k);\r\n }\r\n\r\n }\r\n getUseBC();\r\n }, []);\r\n\r\n const onPaymentChanged = (updated: Payment) => {\r\n setPayment(deepCopy(updated));\r\n }\r\n\r\n const isSelectYearToPayInTheFuture = (annualFee: CCAnnualFee) => {\r\n return annualFee.year > moment().year();\r\n }\r\n\r\n const isSelectYearToPayDisabled = (annualFee: CCAnnualFee) => {\r\n if (props.isReadOnly) return true;\r\n if (isSelectYearToPayInTheFuture(annualFee)) return true;\r\n\r\n var unPaidYears = getUnpaidYears();\r\n var unSelectedYearsToPay = unPaidYears.filter(_ => !selectedYearsToPay?.some(x => x.year == _.year));\r\n\r\n var lastSelectedFee = selectedYearsToPay[selectedYearsToPay.length - 1];\r\n\r\n if (lastSelectedFee != null && lastSelectedFee.year !== annualFee.year)\r\n {\r\n if (selectedYearsToPay.some((selectedYear) => selectedYear.year === annualFee.year && selectedYear.feeAmount === annualFee.feeAmount && selectedYear.isPaid === annualFee.isPaid && selectedYear.isWaived === annualFee.isWaived)){\r\n return true\r\n }\r\n }\r\n\r\n if (unSelectedYearsToPay?.length > 0 && unSelectedYearsToPay.includes(annualFee) && unSelectedYearsToPay[0] !== annualFee) return true;\r\n\r\n return false;\r\n }\r\n\r\n const onFormSubmitPayment = async (e: React.FormEvent) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n e.currentTarget.classList.add('was-validated');\r\n\r\n if (!payContainerRef.current.validate(payment) || !e.currentTarget.checkValidity()) {\r\n setIsSubmitting(false);\r\n return;\r\n }\r\n\r\n e.currentTarget.classList.remove('was-validated');\r\n\r\n await submitPayment();\r\n }\r\n\r\n const refreshPaymentAmount = () => {\r\n onPaymentChanged({...payment, amount: getTotalAmount()});\r\n }\r\n\r\n useEffect(() => {\r\n refreshPaymentAmount();\r\n }, [selectedYearsToPay]);\r\n\r\n //Automatically submit the payment form is the payment was already charged through the payment processor client library\r\n useEffect(() => {\r\n async function checkShouldSubmitAfterPaymentCharged(){\r\n if (isPaymentChargedSubmitted.current == false && payment.hasBeenCharged == true){\r\n isPaymentChargedSubmitted.current = true;\r\n try{\r\n await submitPayment();\r\n }\r\n finally{\r\n resetPaymentCharge();\r\n }\r\n }\r\n }\r\n\r\n checkShouldSubmitAfterPaymentCharged();\r\n }, [payment.hasBeenCharged, isPaymentChargedSubmitted]);\r\n\r\n const resetPaymentCharge = () => {\r\n isPaymentChargedSubmitted.current = false;\r\n setPayment({...payment, hasBeenCharged: false, paymentCharge: null});\r\n }\r\n\r\n /**Handle payment processing errors with redirect to error page with custom error message */\r\n const handlePaymentError = () => {\r\n history.replace(\"/error/PaymentProcessingError\");\r\n }\r\n\r\n const submitPayment = async () => {\r\n if (isSubmitting) return;\r\n try{\r\n \r\n setIsSubmitting(true);\r\n\r\n var updatedPayment = deepCopy(payment);\r\n const paymentProcessor = getPaymentProcessorForPaymentType(creditCardProcessor, updatedPayment.paymentType);\r\n updatedPayment = await paymentProcessor.tokenize(updatedPayment);\r\n updatedPayment.amount = getTotalAmount();\r\n\r\n setPayment(updatedPayment);\r\n\r\n if (!updatedPayment.IsValid) {\r\n setIsSubmitting(false);\r\n return;\r\n }\r\n\r\n var dto = new CCAnnualFeePayment(selectedYearsToPay, updatedPayment);\r\n\r\n var response : any;\r\n if (useBC){\r\n // Create Invoices\r\n const newInvoices : any = await abpnClient.post('/api/invoice/createInvoicesForAnnualFeeYears', dto.years, authContext, { handleErrorRedirect: false })\r\n .catch(handlePaymentError);\r\n // Apply Payment To Invoices\r\n let invoiceNumbers = newInvoices.map((_ : any) => _.invoiceNumber);\r\n\r\n const invoicePaymentRequest = {\r\n invoiceNumbers: invoiceNumbers,\r\n paymentCharge: payment.paymentCharge\r\n };\r\n \r\n await abpnClient.post(`/api/invoice/applyPaymentToInvoices?paymentType=${updatedPayment.paymentType}&paymentProcessor=${paymentProcessor.getPaymentProcessorId()}&paymentToken=${updatedPayment.PaymentToken}&paymentAmount=${updatedPayment.amount}`, invoicePaymentRequest, authContext, { handleErrorRedirect: false })\r\n .catch(handlePaymentError)\r\n // Apply Payment To Invoices\r\n .then(async (_ : any) => {\r\n if (_ && _.isSuccessful) {\r\n response = await abpnClient.post(`/api/Physician/recordAnnualFeesPaid`, dto, authContext)\r\n .catch(handlePaymentError)\r\n setIsPaymentSuccessful(_.isSuccessful);\r\n } else {\r\n setIsSubmitting(false);\r\n return;\r\n }\r\n })\r\n }else{\r\n response = await abpnClient.post(`/api/Physician/PayCCAnnualFees`, dto, authContext, { handleErrorRedirect: false })\r\n .catch(handlePaymentError)\r\n setIsPaymentSuccessful(response.isSuccessful);\r\n if (!response.isSuccessful) {\r\n setIsSubmitting(false);\r\n return;\r\n }\r\n }\r\n \r\n setTimeout(() => setIsPaymentSuccessful(null), 5000);\r\n\r\n setPayFees(false);\r\n scrollToTop();\r\n setSelectedYearsToPay([]);\r\n\r\n props.onSaveBlock(response.ccBlock);\r\n setIsSubmitting(false);\r\n }\r\n catch {\r\n handlePaymentError();\r\n }\r\n } \r\n\r\n const updateTotal = (annualFee: CCAnnualFee) => {\r\n const updated = deepCopy(selectedYearsToPay);\r\n const index = updated.findIndex(_ => _.year == annualFee.year);\r\n if (index >= 0) {\r\n updated.splice(index, 1);\r\n setSelectedYearsToPay(updated);\r\n return;\r\n }\r\n updated.push(annualFee);\r\n setSelectedYearsToPay(updated);\r\n }\r\n\r\n const getTotalAmount = () => {\r\n return selectedYearsToPay.map(_ => _.feeAmount).reduce((a, b) => a + b, 0);\r\n }\r\n\r\n const getPaidStatus = (year: number) => {\r\n var annualFee = props.ccBlock.ccAnnualFees.find(_ => _.year == year)\r\n\r\n if(annualFee != null){\r\n if (annualFee.isPaid) return \"Paid\";\r\n if (annualFee.isWaived) return \"Waived\";\r\n \r\n return `Not Paid: $${annualFee.feeAmount}`\r\n }\r\n }\r\n\r\n if (props.ccBlock == null) return ;\r\n\r\n const isSubmitDisabled = isSubmitting || selectedYearsToPay.length <= 0 || props.isReadOnly;\r\n\r\n return (\r\n \r\n {isPaymentSuccessful && Payment Received Successfully.}\r\n \r\n \r\n Annual Fees\r\n \r\n Annual fees cover either assessment pathway (Article Based Continuing Certification (ABCC) pathway or Examination pathway) for all active certifications in the CC Program.
\r\n Annual fees include development and administration of both CC assessment pathways, reporting of Board certification status, access to personalized Physician Portal account, ongoing credentialing, and verification of certification.
\r\n Annual fees are dependent on number of active CC certifications. The annual fee is non-refundable.\r\n }>\r\n \r\n \r\n
\r\n \r\n \r\n
onFormSubmitPayment(e)} key={props.ccBlock.ccAnnualFees.toString()}>\r\n \r\n {\r\n props.blockYears.map(year => {\r\n return (\r\n \r\n {year}\r\n {getPaidStatus(year)}\r\n \r\n )\r\n })\r\n }\r\n \r\n \r\n \r\n \r\n {\r\n payFees &&\r\n \r\n
\r\n
\r\n Pay Annual Fee\r\n {props.ccBlock.unpaidOrphanYears?.length > 0 && props.ccBlock.unpaidOrphanYears.map((year: number ) => {\r\n var annualFee = props.ccBlock.ccAnnualFees.find(_ => _.year == year);\r\n return ( _.year == year)}\r\n disabled={true}\r\n id={year.toString()}\r\n onChange={() => updateTotal(annualFee)}\r\n label={{year} (${annualFee.feeAmount}) **Unpaid Fee prior to block reset}\r\n />)\r\n })}\r\n {getUnpaidYears().map(annualFee => {\r\n return ( _.year == annualFee.year) && !isSelectYearToPayInTheFuture(annualFee) }\r\n id={annualFee.year.toString()}\r\n onChange={() => updateTotal(annualFee)}\r\n label={{annualFee.year} (${annualFee.feeAmount}) {isSelectYearToPayInTheFuture(annualFee) && \"* Payment can be made beginning 1/1/\" + annualFee.year}}\r\n />)\r\n })}\r\n
Total ${getTotalAmount()}
\r\n
\r\n {payment.paymentType && payment.IsValid === false &&\r\n \r\n

Could Not Validate Payment Method. Please verify your payment method and try again

\r\n
\r\n }\r\n {isPaymentSuccessful === false &&\r\n \r\n

The provided payment method failed. Please verify your payment method and try again

\r\n
}\r\n null} disabled={isSubmitDisabled} />\r\n {isSubmitting ? : null }\r\n
\r\n }\r\n
\r\n \r\n
\r\n
\r\n
\r\n );\r\n\r\n}","export class CCAttestation {\r\n public ccAttestationId: number;\r\n public ccBlockId: number;\r\n public ccAttestationType: number;\r\n public appliedToYear: number;\r\n public credits: number;\r\n public selfReportedCredits: number;\r\n public attestationDate: Date;\r\n public updatedDate: Date;\r\n}\r\n\r\nexport enum CCAttestationType {\r\n CME = 1,\r\n SA = 2,\r\n PIPFeedback = 3,\r\n PIPClinical = 4,\r\n PatientSafety = 7\r\n}","enum CCBlockEvaluationTernaryRequirement\r\n{\r\n RequirementsNotMet = 0,\r\n RequirementsMet = 1,\r\n NotRequired = 2\r\n}\r\n\r\nexport default CCBlockEvaluationTernaryRequirement;\r\n","import { useState, useContext, useEffect } from \"react\";\r\nimport { Card, Col, Collapse, Form, OverlayTrigger, ProgressBar, Row, Table, Tooltip } from \"react-bootstrap\";\r\nimport { CCBlock } from \"../../../Physician/Models/CCBlock\";\r\nimport { AuthContext } from \"../../../Auth/AuthProvider\";\r\nimport { CCAttestation, CCAttestationType } from './../../../Physician/Models/CCAttestation';\r\nimport { Button } from 'react-bootstrap';\r\nimport { Fragment } from 'react';\r\nimport { deepCopy } from \"../../../Shared/Utility/DeepCopy\";\r\nimport { abpnClient } from \"../../../../Services/AbpnClient\";\r\nimport { Alert } from 'react-bootstrap';\r\nimport { Link, Prompt } from \"react-router-dom\";\r\nimport AbpnSpinner from \"../../../Shared/Components/AbpnSpinner\";\r\nimport { getDateWithOffset } from \"../../../Shared/Utility/GetDateWithOffset\";\r\nimport CCActivity from \"../../../Physician/Models/CCActivity\";\r\nimport React from \"react\";\r\nimport ClinicalStatusRow from \"../../Certificates/Components/ClinicalStatusRow\";\r\nimport Physician from \"../../../Physician/Models/Physician\";\r\nimport CCBlockEvaluationTernaryRequirement from \"../../../Physician/Models/CCBlockEvaluationTernaryRequirement\";\r\nimport { CCAssessmentType } from \"../../../Physician/Models/CCEnrollment\";\r\nimport moment from \"moment\";\r\n\r\n\r\ninterface IProps {\r\n ccBlock: CCBlock;\r\n ccVerifiedActivities: Array;\r\n isReadOnly: boolean;\r\n isPhysicianPatientSafetyRequired ?: CCBlockEvaluationTernaryRequirement;\r\n onSaveBlock: (updatedBlock: CCBlock) => void;\r\n physician: Physician;\r\n updatePhysician: (updatedPhysician: Physician) => void;\r\n}\r\n\r\nexport const PatientSafetlyRequirementsColumn = (props: {isPhysicianPatientSafetyRequired : CCBlockEvaluationTernaryRequirement, ccBlock : CCBlock, isPSVerified: boolean}) => {\r\n const showPsCheck = CCBlockEvaluationTernaryRequirement.NotRequired !== props.isPhysicianPatientSafetyRequired && (props.ccBlock.hasPatientSafetyCompleted || props.isPSVerified);\r\n const showRequirementsNotMetLabel = props.isPhysicianPatientSafetyRequired !== CCBlockEvaluationTernaryRequirement.NotRequired && props.ccBlock.isPatientSafetyRequired == CCBlockEvaluationTernaryRequirement.RequirementsNotMet;\r\n const requirementsLabel = showRequirementsNotMetLabel ? \"Not Met\" : \"Not Required\";\r\n\r\n return <>\r\n
\r\n Patient Safety\r\n
\r\n {showPsCheck &&
}\r\n {!showPsCheck && \r\n {requirementsLabel}\r\n }\r\n \r\n}\r\n\r\nexport const PatientSafetyActivityAttestationRow = (props : {isPhysicianPatientSafetyRequired : CCBlockEvaluationTernaryRequirement, ccBlock : CCBlock, isPSVerified: boolean, isPSChecked: boolean, isReadOnly : boolean, isPSDisabled : boolean, updateIsPSChecked : Function}) => {\r\n const showIsPatientSafetyRequired = props.isPhysicianPatientSafetyRequired !== CCBlockEvaluationTernaryRequirement.NotRequired && props.ccBlock.isPatientSafetyRequired !== CCBlockEvaluationTernaryRequirement.NotRequired;\r\n const showIsVerifiedLabel = props.isPhysicianPatientSafetyRequired != CCBlockEvaluationTernaryRequirement.NotRequired && props.isPSVerified;\r\n const showTotalResultCheck = props.isPSChecked || props.isPSVerified || props.ccBlock.hasPipWaiver;\r\n\r\n return \r\n \r\n Patient Safety\r\n \r\n \r\n {!showIsPatientSafetyRequired && Not Required}\r\n {showIsPatientSafetyRequired && showIsVerifiedLabel && {\"-\"}}\r\n {showIsPatientSafetyRequired && !showIsVerifiedLabel && \r\n props.updateIsPSChecked()} />\r\n }\r\n \r\n \r\n {props.isPSVerified ? : \"-\"}\r\n \r\n \r\n {\"-\"}\r\n \r\n \r\n {showTotalResultCheck ? : \"-\"}\r\n \r\n \r\n}\r\n\r\nexport function CCActivityRequirements(props: IProps) {\r\n const [isPIPClinicalChecked, setIsPIPClincalChecked] = useState(props.ccBlock.hasPipClinicalAttestation);\r\n const [isPIPFeedbackChecked, setIsPIPFeedbackChecked] = useState(props.ccBlock.hasPipFeedbackAttestation);\r\n const [isPSChecked, setIsPSChecked] = useState(props.ccBlock.hasPatientSafetyCompleted || props.isPhysicianPatientSafetyRequired === CCBlockEvaluationTernaryRequirement.NotRequired);\r\n const [isEditingAttestations, setIsEditingAttestations] = useState(false);\r\n const [displaySuccessSaveAlert, setDisplaySuccessSaveAlert] = useState(false);\r\n const [isSubmitting, setIsSubmitting] = useState(false);\r\n const [isFormDirty, setIsFormDirty] = useState(false);\r\n const [ccBlock, setCCBlock] = useState(deepCopy(props.ccBlock));\r\n\r\n useEffect(() => {\r\n var block = deepCopy(props.ccBlock)\r\n setIsPIPClincalChecked(block.hasPipClinicalAttestation);\r\n setIsPIPFeedbackChecked(block.hasPipFeedbackAttestation);\r\n setIsPSChecked(block.hasPatientSafetyCompleted || props.isPhysicianPatientSafetyRequired === CCBlockEvaluationTernaryRequirement.NotRequired);\r\n setCCBlock(block);\r\n }, [props.ccBlock])\r\n\r\n const authContext = useContext(AuthContext);\r\n\r\n let isPSDisabled = props.isPhysicianPatientSafetyRequired === CCBlockEvaluationTernaryRequirement.NotRequired;\r\n let isPSVerified = props.ccVerifiedActivities.length > 0 && props.ccVerifiedActivities.filter(_ => _.isPatientSafety).length > 0;\r\n let isPIPClinicalVerifiedChecked = ccBlock?.ccVerifiedActivities.map(_ => _.isPipClinical).reduce((a, b) => a || b, 0);\r\n let isPIPFeedbackVerifiedChecked = ccBlock?.ccVerifiedActivities.map(_ => _.isPipFeedback).reduce((a, b) => a || b, 0);\r\n let isPipRequired = ccBlock?.clinicalStatus == 2;\r\n let isPIPDisabled = isPIPClinicalVerifiedChecked == true || isPIPFeedbackVerifiedChecked == true || !isPipRequired;\r\n let selfAttestedPIPClinicalCredits = isPIPClinicalChecked ? 1 : 0;\r\n let selfAttestedPIPFeedbackCredits = isPIPFeedbackChecked ? 1 : 0;\r\n let selfAttestedPSCredits = isPSChecked ? 1 : 0;\r\n let totalWaivedAndEarnedCMECredits = ccBlock.totalCMEAttestationCredits + ccBlock.totalWaivedCMECredits + ccBlock.totalVerifiedCMECredits;\r\n let totalWaivedAndEarnedSACredits = ccBlock.totalSAAttestationCredits + ccBlock.totalWaivedSACredits + ccBlock.totalVerifiedSACredits;\r\n let overageOfSACredits = totalWaivedAndEarnedSACredits > ccBlock.requiredSACredits ? totalWaivedAndEarnedSACredits - ccBlock.requiredSACredits : 0;\r\n let percentCMECredits = Math.round((totalWaivedAndEarnedCMECredits + overageOfSACredits > ccBlock.requiredCMECredits ? ccBlock.requiredCMECredits : totalWaivedAndEarnedCMECredits + overageOfSACredits) / ccBlock.requiredCMECredits * 100);\r\n let percentSACredits = Math.round((totalWaivedAndEarnedSACredits > ccBlock.requiredSACredits ? ccBlock.requiredSACredits : totalWaivedAndEarnedSACredits) / ccBlock.requiredSACredits * 100);\r\n let isInAbcc = ccBlock.enrollmentCertificates.filter(_ => _.ccAssessmentType == CCAssessmentType.Article).length > 0;\r\n\r\n const toggleEdit = () => {\r\n setIsEditingAttestations(!isEditingAttestations);\r\n }\r\n\r\n const createNewAttestation = (type: CCAttestationType) => {\r\n var newAttestation = new CCAttestation();\r\n newAttestation.ccAttestationType = type;\r\n newAttestation.appliedToYear = ccBlock.endYear;\r\n return newAttestation;\r\n }\r\n\r\n const updateSelfReportedCME = (value: number) => {\r\n var attestation = ccBlock.ccAttestations.find(_ => _.appliedToYear === ccBlock.endYear && _.ccAttestationType === CCAttestationType.CME);\r\n\r\n if (attestation == null) {\r\n attestation = createNewAttestation(CCAttestationType.CME);\r\n }\r\n\r\n attestation.selfReportedCredits = value;\r\n attestation.ccBlockId = ccBlock.ccBlockId;\r\n updateCCAttestations(attestation);\r\n setIsFormDirty(true);\r\n }\r\n\r\n const updateSelfReportedSACME = (value: number) => {\r\n var attestation = ccBlock.ccAttestations.find(_ => _.appliedToYear === ccBlock.endYear && _.ccAttestationType === CCAttestationType.SA);\r\n\r\n if (attestation == null) {\r\n attestation = createNewAttestation(CCAttestationType.SA);\r\n }\r\n\r\n attestation.selfReportedCredits = value;\r\n attestation.ccBlockId = ccBlock.ccBlockId;\r\n updateCCAttestations(attestation);\r\n setIsFormDirty(true);\r\n }\r\n\r\n const updateCCAttestations = (attestation: CCAttestation) => {\r\n var newCCBlock = deepCopy(ccBlock);\r\n var newList = deepCopy(ccBlock.ccAttestations);\r\n\r\n if (attestation.ccAttestationType === CCAttestationType.PIPClinical) {\r\n var filteredPIPClinicalList = newList.filter(_ => _.ccAttestationType !== CCAttestationType.PIPFeedback);\r\n newList = filteredPIPClinicalList;\r\n }\r\n\r\n if (attestation.ccAttestationType === CCAttestationType.PIPFeedback) {\r\n var filteredPIPFeedbackList = newList.filter(_ => _.ccAttestationType !== CCAttestationType.PIPClinical);\r\n newList = filteredPIPFeedbackList;\r\n }\r\n\r\n var index = ccBlock.ccAttestations.findIndex(_ => _.ccAttestationId === attestation.ccAttestationId && _.ccAttestationType === attestation.ccAttestationType);\r\n\r\n if (index === -1) {\r\n newList.push(attestation);\r\n }\r\n else {\r\n newList[index] = attestation;\r\n }\r\n\r\n newCCBlock.ccAttestations = newList;\r\n if (attestation.ccAttestationType == CCAttestationType.CME) newCCBlock.totalCMEAttestationCredits = attestation.selfReportedCredits\r\n if (attestation.ccAttestationType == CCAttestationType.SA) newCCBlock.totalSAAttestationCredits = attestation.selfReportedCredits\r\n setCCBlock(newCCBlock);\r\n }\r\n\r\n const saveAllCCAttestations = (e: React.FormEvent) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n e.currentTarget.classList.add(\"was-validated\");\r\n if (e.currentTarget.checkValidity()) {\r\n e.currentTarget.classList.remove(\"was-validated\");\r\n setIsSubmitting(true);\r\n\r\n const url = \"/api/Physician/SaveCCAttestations?ccBlockId=\" + ccBlock.ccBlockId;\r\n\r\n abpnClient.post(url, ccBlock.ccAttestations, authContext).then(result => {\r\n\r\n setCCBlock(result);\r\n setIsSubmitting(false);\r\n setIsEditingAttestations(false);\r\n setDisplaySuccessSaveAlert(true);\r\n\r\n setTimeout(() => {\r\n setDisplaySuccessSaveAlert(false);\r\n }, 5000)\r\n\r\n setIsFormDirty(false);\r\n\r\n props.onSaveBlock(result);\r\n });\r\n }\r\n }\r\n\r\n const cancelEdit = () => {\r\n toggleEdit();\r\n setCCBlock(deepCopy(props.ccBlock));\r\n }\r\n\r\n const updateIsPIPClinicalChecked = () => {\r\n setIsPIPClincalChecked(!isPIPClinicalChecked);\r\n var attestation = ccBlock.ccAttestations.find(_ => _.appliedToYear === ccBlock.endYear && _.ccAttestationType === CCAttestationType.PIPClinical);\r\n\r\n if (attestation == null) {\r\n attestation = createNewAttestation(CCAttestationType.PIPClinical);\r\n }\r\n\r\n attestation.selfReportedCredits = selfAttestedPIPClinicalCredits === 1 ? 0 : 1;\r\n attestation.ccBlockId = ccBlock.ccBlockId;\r\n updateCCAttestations(attestation);\r\n setIsFormDirty(true);\r\n }\r\n\r\n const updateIsPIPFeedbackChecked = () => {\r\n setIsPIPFeedbackChecked(!isPIPFeedbackChecked);\r\n var attestation = ccBlock.ccAttestations.find(_ => _.appliedToYear === ccBlock.endYear && _.ccAttestationType === CCAttestationType.PIPFeedback);\r\n\r\n if (attestation == null) {\r\n attestation = createNewAttestation(CCAttestationType.PIPFeedback);\r\n }\r\n\r\n attestation.selfReportedCredits = selfAttestedPIPFeedbackCredits === 1 ? 0 : 1;\r\n attestation.ccBlockId = ccBlock.ccBlockId;\r\n updateCCAttestations(attestation);\r\n setIsFormDirty(true);\r\n }\r\n\r\n const updateIsPSChecked = () => {\r\n setIsPSChecked(!isPSChecked);\r\n var attestation = ccBlock.ccAttestations.find(_ => _.appliedToYear === ccBlock.endYear && _.ccAttestationType === CCAttestationType.PatientSafety);\r\n\r\n if (attestation == null) {\r\n attestation = createNewAttestation(CCAttestationType.PatientSafety);\r\n }\r\n\r\n attestation.selfReportedCredits = selfAttestedPSCredits === 1 ? 0 : 1;\r\n attestation.ccBlockId = ccBlock.ccBlockId;\r\n updateCCAttestations(attestation);\r\n setIsFormDirty(true);\r\n }\r\n\r\n const openApprovedActivities = () => {\r\n window.open(\"https://www.abpn.org/maintain-certification/abpn-approved-products-list/\", \"_blank\")\r\n }\r\n\r\n const getPipRequirementMessage = (ccBlock: CCBlock) => {\r\n\r\n if (ccBlock.hasPipWaiver) return \"Waived\"\r\n if (isPipRequired) return \"Not Met\"\r\n return \"Not Required\"\r\n }\r\n\r\n const getDivBorderColor = ()=>\r\n {\r\n if(ccBlock.hasPassedAudit)\r\n return \"mb-4 pp-div-CC-PassAudit\"\r\n if(ccBlock.hasFailedAudit)\r\n return \"mb-4 pp-div-CC-FailAudit\"\r\n if(ccBlock.hasAudit)\r\n return \"mb-4 pp-div-CC-HasAudit\"\r\n\r\n return \"mb-4 pp-secondary-grey\"\r\n\r\n }\r\n\r\n const getLastUpdated = () => {\r\n var ccAttestations = ccBlock.ccAttestations\r\n var LastUpdated = new Date(Math.max(...ccAttestations.map(_ => new Date(_.updatedDate).getTime())));\r\n return LastUpdated.toLocaleDateString();\r\n }\r\n\r\n const totalWaivedAndEarnedSACreditsDisplay = () => {\r\n return totalWaivedAndEarnedSACredits > ccBlock.requiredSACredits ? ccBlock.requiredSACredits : totalWaivedAndEarnedSACredits;\r\n }\r\n\r\n const showOverageInfoIcons = () => {\r\n return totalWaivedAndEarnedSACredits > ccBlock.requiredSACredits;\r\n }\r\n\r\n\r\n return (\r\n \r\n {displaySuccessSaveAlert &&\r\n \r\n

Successfully Saved and Attested

\r\n
\r\n }\r\n \r\n \r\n \r\n Continuing Certification Activity Requirements\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Activity Attestations Due By\r\n {getDateWithOffset(props.ccBlock.endDate)?.toLocaleDateString()}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n Self-Assessment CME (SA-CME)\r\n \r\n Self-Assessment CME (SA-CME) credits contribute to the overall number of CME Credits. Any attested to SA CME credits over the 24 SA credits required will be applied to the required Category 1 CME credits.\r\n }>\r\n \r\n \r\n \r\n \r\n \r\n
\r\n ({totalWaivedAndEarnedSACreditsDisplay()}/{ccBlock.requiredSACredits})\r\n
\r\n \r\n
\r\n \r\n \r\n CME\r\n \r\n This CME count includes any Self-Assessment CMEs self reported, verified, or waived over the minimum 24 SA CMEs required in the reported total.\r\n }>\r\n \r\n \r\n \r\n \r\n \r\n
\r\n ({totalWaivedAndEarnedCMECredits + overageOfSACredits}/{ccBlock.requiredCMECredits})\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n {ccBlock.hasPipClinicalAttestation || ccBlock.hasPipFeedbackAttestation || isPIPClinicalVerifiedChecked || isPIPFeedbackVerifiedChecked ?\r\n
\r\n : {getPipRequirementMessage(ccBlock)}}\r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n
\r\n \r\n {ccBlock.isActivityRequirementsCompleted &&
Congratulations! You Have Completed All Activity Requirements
}\r\n {isInAbcc && ccBlock.endYear == moment().year() && 16 Self-Assessment CME (SA-CME) credits will be waived for successful completion of the required ABCC article exams. This waiver will be granted by ABPN and will be reflected in your Portal 1-2 days after successful completion of your required article exams for this ABCC block.}\r\n
\r\n\r\n {!isEditingAttestations &&\r\n \r\n \r\n \r\n \r\n \r\n }\r\n\r\n {isEditingAttestations &&\r\n \r\n \r\n \r\n \r\n \r\n Activity Attestations\r\n \r\n \r\n\r\n \r\n
saveAllCCAttestations(e)}>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n Self-Reported\r\n \r\n These activities are not verified or waived by ABPN.\r\n }>\r\n \r\n \r\n \r\n {ccBlock.ccAttestations.length > 0 && Last Updated {getLastUpdated()}}\r\n \r\n Verified\r\n \r\n Records of completed CC credits and activities from various professional organizations are reported directly to ABPN within three months of the activity completion. The verified credits are reflected in the CC Activity Attestations section. In the event of an audit no further documentation is required from a diplomate for verified activities.\r\n }>\r\n \r\n \r\n \r\n \r\n Waived\r\n \r\n Activity credits that have been waived by the ABPN for Fellowship, Article Pathway, Exam Credit, and/or non-CME SA activities.\r\n {ccBlock?.ccAppliedWaivers?.length > 0 &&\r\n \r\n

\r\n Your activity waiver(s):
\r\n {ccBlock.ccAppliedWaivers.map(_ =>\r\n \r\n {_.waiverTypeDescription} ({_.cmeCredits > 0 ? `${_.cmeCredits} CME ` : null}{_.saCredits > 0 ? `${_.saCredits} SA` : null})
\r\n
\r\n )}\r\n
\r\n\r\n }\r\n\r\n }>\r\n \r\n \r\n
\r\n
\r\n Total\r\n
\r\n Self Assessment CME\r\n \r\n
\r\n updateSelfReportedSACME(parseFloat(e.target.value))}\r\n value={ccBlock.totalSAAttestationCredits} />\r\n
\r\n
\r\n {ccBlock.totalVerifiedSACredits}\r\n \r\n {ccBlock.totalWaivedSACredits}\r\n \r\n {totalWaivedAndEarnedSACreditsDisplay()}/{ccBlock.requiredSACredits}\r\n
\r\n CME\r\n \r\n
\r\n updateSelfReportedCME(parseFloat(e.target.value))}\r\n value={ccBlock.totalCMEAttestationCredits} />\r\n
\r\n
\r\n {ccBlock.totalVerifiedCMECredits}\r\n \r\n {ccBlock.totalWaivedCMECredits}\r\n \r\n {totalWaivedAndEarnedCMECredits + overageOfSACredits}/{ccBlock.requiredCMECredits}\r\n \r\n The CME count includes any Self-Assessment CMEs self reported, verified, or waived over the minimum 24 SA CMEs required in the reported total.\r\n }>\r\n \r\n \r\n \r\n
\r\n PIP - Clinical\r\n \r\n Only one PIP (Clinical or Feedback) is required.\r\n }>\r\n \r\n \r\n \r\n \r\n {!ccBlock.hasPipWaiver ?\r\n \r\n updateIsPIPClinicalChecked()} />\r\n \r\n : \"-\"\r\n }\r\n \r\n {isPIPClinicalVerifiedChecked ? : \"-\"}\r\n \r\n {ccBlock.hasPipWaiver ? : \"-\"}\r\n \r\n {(isPIPClinicalVerifiedChecked || isPIPClinicalChecked || ccBlock.hasPipWaiver) ? : \"-\"}\r\n
\r\n PIP - Feedback\r\n \r\n Only one PIP (Clinical or Feedback) is required.\r\n }>\r\n \r\n \r\n \r\n \r\n {!ccBlock.hasPipWaiver ?\r\n \r\n updateIsPIPFeedbackChecked()} />\r\n \r\n : \"-\"\r\n }\r\n \r\n {isPIPFeedbackVerifiedChecked ? : \"-\"}\r\n \r\n {ccBlock.hasPipWaiver ? : \"-\"}\r\n \r\n {(isPIPFeedbackVerifiedChecked || isPIPFeedbackChecked || ccBlock.hasPipWaiver) ? : \"-\"}\r\n
\r\n \r\n
\r\n\r\n \r\n \r\n {isSubmitting ?\r\n \r\n :\r\n \r\n }\r\n \r\n \r\n \r\n \r\n \r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
}\r\n
\r\n\r\n
\r\n
\r\n
\r\n );\r\n\r\n}","import { Fragment } from \"react\";\r\nimport { Col, Form, Row } from \"react-bootstrap\";\r\nimport { getDateWithOffset } from \"../../../Shared/Utility/GetDateWithOffset\";\r\nimport { ExamAssessment } from \"../Models/CCAssessment\";\r\n\r\ninterface IProps {\r\n examAssessment: ExamAssessment;\r\n}\r\n\r\nexport function ExamAssessmentCard(props: IProps) {\r\n var examDueHeader = \"Exam Due\";\r\n\r\n const getFormattedDueDate = () => {\r\n if (isNaN(Date.parse(props.examAssessment.dueDate))) return props.examAssessment.dueDate;\r\n\r\n return getDateWithOffset(props.examAssessment.dueDate).getFullYear().toString();\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {props.examAssessment.certificationName.toUpperCase()}\r\n \r\n \r\n \r\n \r\n {examDueHeader}\r\n {getFormattedDueDate()} \r\n \r\n \r\n \r\n  \r\n \r\n \r\n
\r\n
\r\n );\r\n\r\n}\r\n\r\nexport default ExamAssessmentCard;","import { Fragment } from \"react\";\r\nimport { Col, Form, Row } from \"react-bootstrap\";\r\nimport { getDateWithOffset } from \"../../../Shared/Utility/GetDateWithOffset\";\r\nimport { NonAbpnAssessment } from \"../Models/CCAssessment\";\r\n\r\ninterface IProps{\r\n nonAbpnAssessment: NonAbpnAssessment;\r\n}\r\n\r\nexport function NonAbpnAssessmentCard(props: IProps){\r\n var examDueHeader = \"Assessment Due\";\r\n\r\n const getFormattedDueDate = () => {\r\n if (isNaN(Date.parse(props.nonAbpnAssessment.dueDate))) return props.nonAbpnAssessment.dueDate;\r\n\r\n return getDateWithOffset(props.nonAbpnAssessment.dueDate).getFullYear().toString();\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {props.nonAbpnAssessment.certificationName.toUpperCase()}\r\n \r\n \r\n \r\n \r\n {examDueHeader}\r\n {getFormattedDueDate()} \r\n \r\n \r\n \r\n  \r\n \r\n \r\n
\r\n
\r\n );\r\n}","import React, { Fragment, useEffect, useState, useContext } from \"react\";\r\nimport { Card, Col, Row} from \"react-bootstrap\";\r\nimport { AuthContext } from \"./../../../Auth/AuthProvider\";\r\nimport { abpnClient } from \"./../../../../Services/AbpnClient\";\r\nimport AbpnSpinner from \"../../../Shared/Components/AbpnSpinner\";\r\nimport { AbccAssessmentCard } from \"./AbccAssessmentCard\";\r\nimport { ExamAssessmentCard } from \"./ExamAssessmentCard\";\r\nimport { NonAbpnAssessmentCard } from \"./NonAbpnAssessmentCard\";\r\nimport { AssessmentsResult, ExamAssessment, NonAbpnAssessment } from \"../Models/CCAssessment\";\r\nimport { CCBlock } from \"../../../Physician/Models/CCBlock\";\r\n\r\ninterface IProps{\r\n ccBlock: CCBlock;\r\n}\r\n\r\nexport function CCAssessments(props: IProps) {\r\n\r\n const [assessments, setAssessments] = useState(null);\r\n const authContext = useContext(AuthContext);\r\n\r\n useEffect(()=>{\r\n abpnClient.get(`/api/physician/GetCCAssessments?ccBlockId=${props.ccBlock.ccBlockId}`,authContext)\r\n .then(_=>{setAssessments(_);\r\n });\r\n },[]);\r\n\r\n if (assessments == null) return \r\n\r\n return (\r\n \r\n \r\n \r\n Assessments\r\n \r\n\r\n \r\n \r\n \r\n {assessments != null ?\r\n \r\n {assessments?.examAssessments?.length > 0 ?\r\n assessments.examAssessments.map((examAssessment: ExamAssessment)=> ) : null}\r\n {assessments?.nonAbpnAssessments?.length > 0 ?\r\n assessments.nonAbpnAssessments.map((nonAbpnAssessment: NonAbpnAssessment) => ) : null}\r\n \r\n :\r\n No Certificates}\r\n \r\n \r\n \r\n\r\n \r\n \r\n );\r\n}\r\n","import { useEffect, useState } from \"react\";\r\nimport { Card,OverlayTrigger, Tooltip } from \"react-bootstrap\";\r\nimport { Address } from \"../../../Physician/Models/Address\";\r\nimport CCActivity from \"../../../Physician/Models/CCActivity\";\r\nimport { CCBlock, CCBlockRequirementType } from \"../../../Physician/Models/CCBlock\";\r\nimport { CCEnrollment } from \"../../../Physician/Models/CCEnrollment\";\r\nimport { MedicalLicense } from \"../../../Physician/Models/MedicalLicense\";\r\nimport AbpnSpinner from \"../../../Shared/Components/AbpnSpinner\";\r\nimport { StateWithCountryLookupItem } from \"../../../Shared/Models/StateWithCountryLookupItem\";\r\nimport { getDateWithOffset } from \"../../../Shared/Utility/GetDateWithOffset\";\r\nimport { AnnualFees } from \"./AnnualFees\";\r\nimport { CCActivityRequirements } from \"./CCActivityRequirements\";\r\nimport { CCAssessments } from \"./CCAssessments\";\r\nimport { MedicalLicensure } from \"./MedicalLicensure\";\r\nimport CCBlockEvaluationTernaryRequirement from \"../../../Physician/Models/CCBlockEvaluationTernaryRequirement\";\r\nimport Physician from \"../../../Physician/Models/Physician\";\r\ninterface IProps {\r\n ccEnrollment: CCEnrollment;\r\n ccBlock: CCBlock;\r\n contactAddress: Address;\r\n email: string;\r\n medicalLicenses: Array;\r\n states: Array;\r\n onSaveBlock: (updatedBlock: CCBlock) => void;\r\n onSaveLicenses: (medicalLicenses: Array) => void;\r\n hideLicenses: boolean;\r\n isReadOnly?: boolean;\r\n showCollapse?: boolean;\r\n isSectionOpen?: boolean;\r\n showChangesText?: boolean;\r\n ccVerifiedActivities: Array;\r\n physician: Physician;\r\n updatePhysician: (updatedPhysician: Physician) => void;\r\n isPhysicianPatientSafetyRequired ?: CCBlockEvaluationTernaryRequirement;\r\n}\r\n\r\nexport default function CCBlockCard(props: IProps) {\r\n const [blockYears, setBlockYears] = useState>([]);\r\n \r\n const isCurrentBlock = props.ccBlock.ccBlockId === props.ccEnrollment.currentCCBlock.ccBlockId;\r\n const isActivitiesReadOnly = !isCurrentBlock || props.isReadOnly || props.ccBlock.hasAudit;\r\n const isFeesReadOnly = !isCurrentBlock || props.isReadOnly;\r\n const showErrors = getDateWithOffset(props.ccBlock.endDate) < new Date() && \r\n (props.ccBlock.extensionDate == null || getDateWithOffset(props.ccBlock.extensionDate) < new Date());\r\n\r\n const isNewestBlock = props.ccBlock.startYear == Math.max.apply(Math, props.ccEnrollment.ccBlocks.map(function(block: CCBlock) { return block.startYear; }))\r\n const isBlockInFuture = props.ccBlock.startYear > new Date().getFullYear();\r\n const outstandingRequirements = props.ccBlock.outstandingRequirements;\r\n const isMeetingLicenseRequirement = !outstandingRequirements?.some(_ => _.requirementType === CCBlockRequirementType.MedicalLicense);\r\n const isMeetingFeeRequirement = !outstandingRequirements?.some(_ => _.requirementType === CCBlockRequirementType.Fees);\r\n const isMeetingPatientSafetyRequirement = !outstandingRequirements?.some(_ => _.requirementType === CCBlockRequirementType.PatientSafety);\r\n const isMeetingPIPRequirement = !outstandingRequirements?.some(_ => _.requirementType === CCBlockRequirementType.PIP);\r\n const isMeetingCMERequirement = !outstandingRequirements?.some(_ => _.requirementType === CCBlockRequirementType.SA ||\r\n _.requirementType === CCBlockRequirementType.CME);\r\n const isMeetingAuditRequirement = !outstandingRequirements?.some(_ => _.requirementType === CCBlockRequirementType.FailedAudit);\r\n const isMeetingActivityRequirements = isMeetingCMERequirement && isMeetingPIPRequirement && isMeetingPatientSafetyRequirement && isMeetingAuditRequirement;\r\n\r\n const showActivityRequirements = (isCurrentBlock && !showErrors) || \r\n (isCurrentBlock && showErrors && !isMeetingActivityRequirements) ||\r\n (!isCurrentBlock && isMeetingActivityRequirements) ||\r\n isActivitiesReadOnly;\r\n\r\n const showFees = (isCurrentBlock && !showErrors) || \r\n (isCurrentBlock && showErrors && !isMeetingFeeRequirement) ||\r\n (!isCurrentBlock && isMeetingFeeRequirement) ||\r\n isFeesReadOnly;\r\n\r\n useEffect(() => {\r\n const determineBlockYears = () => {\r\n const newBlockYears = [];\r\n\r\n for (var year = props.ccBlock.startYear; year <= props.ccBlock.endYear; year++) {\r\n newBlockYears.push(year);\r\n }\r\n setBlockYears(newBlockYears);\r\n }\r\n \r\n determineBlockYears();\r\n }, [props.ccBlock])\r\n\r\n const getUnpaidYears = () => {\r\n return blockYears.filter(year => props.ccBlock.ccAnnualFees?.find(_ => _.year == year && !_.isPaid && !_.isWaived));\r\n }\r\n const getUnpaidTotal = () => {\r\n return props.ccBlock.ccAnnualFees.filter(_ => !_.isPaid && !_.isWaived).map(_ => _.feeAmount).reduce((a, b) => a + b, 0);\r\n }\r\n\r\n if (props.ccBlock == null) return \r\n return (\r\n \r\n \r\n \r\n \r\n \r\n Continuing Certification Status {props.ccBlock.startYear} - {props.ccBlock.endYear}\r\n {props.showCollapse && }\r\n \r\n {props.ccBlock.hasFailedAudit && \r\n You have not passed the CC audit of this block.\r\n \r\n You have not passed the CC audit of this block. Therefore, your board certification status has been updated to \"Certified, Not Meeting CC Requirements\". Communication of the audit status has been sent to the email on file in your Physician Portal account. This CC block may not be edited until this audit has been satisfied.

\r\n Once you have documentation of all completed requirements, please send it via email to credentials@abpn.org and inform our office that you are contacting us to resolve the audit. If you need an additional PIP Audit Form, you can find that on the ABPN Diplomates Audits webpage.

\r\n If you have any questions, please contact the ABPN office at credentials@abpn.org or call 847-229-6510.\r\n }>\r\n \r\n \r\n
\r\n }\r\n {props.ccBlock.hasPassedAudit && \r\n You have passed the CC audit of this block.\r\n \r\n Congratulations! You have successfully passed this CC block audit. No other documentation is required at this time.

\r\n If you have any questions, please contact the ABPN office at credentials@abpn.org or call 847-229-6510.\r\n }>\r\n \r\n \r\n
\r\n }\r\n {props.ccBlock.hasAudit && !props.ccBlock.hasPassedAudit && !props.ccBlock.hasFailedAudit && \r\n You have been randomly selected for the CC audit of this block.\r\n \r\n You have been randomly selected for an audit of this CC block. If you have not yet received email notification of the audit, please check your email spam folder or you should expect to get an email within the next few weeks. You may visit the ABPN Diplomate Audits webpage to learn more about what to expect during the audit and what is required.

\r\n The Self-Reported column within your \"continuing certification activity requirements\" section of the Physician Portal may not be edited for the remainder of this CC block. However, verified and waived activity credits will continue to be updated, and you may still view and manage your activity records and view the ABPN approved activities list.

\r\n If you have any questions, please contact the ABPN office at credentials@abpn.org or call 847-229-6510.\r\n }>\r\n \r\n \r\n
\r\n }\r\n
\r\n {props.ccBlock.hasAudit && !props.ccBlock.hasPassedAudit && !props.ccBlock.hasFailedAudit &&
}\r\n
\r\n {showErrors &&
Not Meeting Requirements
}\r\n\r\n
\r\n {showErrors &&\r\n
\r\n
    \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n }\r\n \r\n {isBlockInFuture ? \r\n
Requirements for the {props.ccBlock.startYear} - {props.ccBlock.endYear} block will be available in early January of {props.ccBlock.startYear}
: \r\n
\r\n {!showErrors && isNewestBlock &&\r\n \r\n }\r\n {\r\n showActivityRequirements &&\r\n \r\n }\r\n {\r\n showFees &&\r\n \r\n }\r\n {\r\n !props.hideLicenses &&\r\n \r\n }\r\n
\r\n }\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n );\r\n}","import { useContext } from \"react\";\r\nimport { abpnClient } from \"../../../../Services/AbpnClient\";\r\nimport { AuthContext } from \"../../../Auth/AuthProvider\";\r\nimport { CCBlock, CCBlockRequirementType } from \"../../../Physician/Models/CCBlock\";\r\nimport { CCEnrollment } from \"../../../Physician/Models/CCEnrollment\";\r\nimport { MedicalLicense } from \"../../../Physician/Models/MedicalLicense\";\r\nimport Physician from \"../../../Physician/Models/Physician\";\r\nimport { StateWithCountryLookupItem } from \"../../../Shared/Models/StateWithCountryLookupItem\";\r\nimport { deepCopy } from \"../../../Shared/Utility/DeepCopy\";\r\nimport { getDateWithOffset } from \"../../../Shared/Utility/GetDateWithOffset\";\r\nimport CCBlockCard from \"./CCBlockCard\";\r\n\r\ninterface IProps {\r\n currentEnrollment: CCEnrollment\r\n states: Array;\r\n physician: Physician;\r\n updatePhysician: (physician: Physician) => void;\r\n}\r\nexport default function CCEnrollmentCard(props: IProps) { \r\n const currentBlock = props.currentEnrollment.currentCCBlock\r\n const isBehindOnCurrentBlock = props.physician.currentCCEnrollment.isBehindCurrentBlock;\r\n const nextBlock = props.currentEnrollment.ccBlocks?.find(_ => getDateWithOffset(_.startDate) > getDateWithOffset(currentBlock.endDate));\r\n const isMeetingLicenseRequirement = !currentBlock.outstandingRequirements?.some(_ => _.requirementType === CCBlockRequirementType.MedicalLicense);\r\n const authContext = useContext(AuthContext);\r\n const contactAddress = props.physician.addresses.addresses.find(_ => _.isContact);\r\n\r\n const evaluateCurrentBlockAndCallUpdate = async (physician : Physician) => {\r\n if (props.physician.currentCCEnrollment == null) return;\r\n \r\n const ccBlock = await abpnClient.get(\"/api/physician/EvaluateCurrentBlockRequirements\", authContext);\r\n\r\n var index = physician.currentCCEnrollment.ccBlocks.findIndex(_ => _.ccBlockId === ccBlock.ccBlockId);\r\n physician.currentCCEnrollment.ccBlocks.splice(index, 1, ccBlock);\r\n physician.currentCCEnrollment.currentCCBlock = ccBlock;\r\n \r\n props.updatePhysician(physician);\r\n } \r\n\r\n const onSaveBlock = (updatedBlock: CCBlock) => {\r\n var updatedPhysician = deepCopy(props.physician);\r\n var index = updatedPhysician.currentCCEnrollment.ccBlocks.findIndex(_ => _.ccBlockId === updatedBlock.ccBlockId);\r\n updatedPhysician.currentCCEnrollment.ccBlocks.splice(index, 1, updatedBlock);\r\n\r\n evaluateCurrentBlockAndCallUpdate(updatedPhysician);\r\n }\r\n\r\n const onSaveLicenses = (licenses: Array) => {\r\n var updatedPhysician = deepCopy(props.physician);\r\n updatedPhysician.medicalLicenses = licenses;\r\n\r\n evaluateCurrentBlockAndCallUpdate(updatedPhysician);\r\n }\r\n\r\n return (\r\n
\r\n onSaveBlock(updatedBlock)}\r\n medicalLicenses={props.physician.medicalLicenses}\r\n states={props.states}\r\n onSaveLicenses={(licenses: Array) => onSaveLicenses(licenses)}\r\n hideLicenses={isBehindOnCurrentBlock ? isMeetingLicenseRequirement : false} \r\n isPhysicianPatientSafetyRequired={props.physician.isPatientSafetyRequired} \r\n physician={props.physician}\r\n updatePhysician={props.updatePhysician}\r\n />\r\n {\r\n nextBlock != null &&\r\n onSaveBlock(updatedBlock)}\r\n medicalLicenses={props.physician.medicalLicenses}\r\n states={props.states}\r\n onSaveLicenses={(licenses: Array) => onSaveLicenses(licenses)}\r\n hideLicenses={!isMeetingLicenseRequirement} \r\n physician={props.physician}\r\n updatePhysician={props.updatePhysician}\r\n isPhysicianPatientSafetyRequired={props.physician.isPatientSafetyRequired} />\r\n }\r\n
\r\n );\r\n}","import Fee from \"./Fee\"\r\nimport Installment from \"./Installment\"\r\nimport Order from \"../../Shared/Models/Order\"\r\n\r\nexport default class ApplicationModel {\r\n applicationId: number\r\n examinationId: number\r\n balance: number\r\n orderNumber: string\r\n examLateFee: Fee\r\n totalFeeAmount: number\r\n totalExamFeeAmount: number\r\n fees: Array\r\n hasAttested: boolean\r\n needsFinalReview: boolean\r\n attestationContent: string\r\n installmentOptions: Array\r\n createdDate: string\r\n isAdaRequested: boolean\r\n isNmaRequested: boolean\r\n isTransferredIn: boolean;\r\n isSplitPay: boolean;\r\n candidateStatusDescription: string;\r\n candidateStatusReason: string;\r\n candidateStatus: CandidateStatus;\r\n knownCandidateStatusReason: KnownCandidateStatusReason;\r\n modularCertificationIds: Array\r\n order: Order;\r\n cnpType: number\r\n extensionDate: string;\r\n hasDeadlineException: boolean;\r\n}\r\n\r\nexport enum CandidateStatus {\r\n ToBeReviewed = 1,\r\n Hold = 2,\r\n Denied = 3,\r\n Approved = 4,\r\n TransferredOut = 5,\r\n Withdrawn = 6,\r\n InviteSent = 7,\r\n Unsubmitted = 8\r\n}\r\n\r\nexport enum KnownCandidateStatusReason {\r\n Withdrew = 9\r\n}\r\n","import ApplicationModel from \"../../../Apply/Models/ApplicationModel\";\r\nimport Order from \"../../../Shared/Models/Order\";\r\nimport { PearsonVueAppointment } from \"./PearsonVueAppointment\";\r\n\r\nexport class AppliedToExamination {\r\n examinationId: number;\r\n examineeId: number;\r\n title: string;\r\n applicationLateDeadlineDate: string;\r\n applicationDeadlineDate: string;\r\n extensionDate: string;\r\n startDate: string;\r\n endDate: string;\r\n releaseGrades: boolean;\r\n showExamineeStatus: boolean;\r\n application: ApplicationModel;\r\n appointments: Array;\r\n examinationGrade: ExaminationGrade;\r\n examineeStatus: ExamineeStatus;\r\n examineeStatusDescription: string;\r\n examineeStatusReasonId: ExamineeStatusReason;\r\n examineeStatusReason: string;\r\n order: Order;\r\n formattedCnpType: string;\r\n moduleSelection: string;\r\n isConfirmingDelete: boolean;\r\n hasDeadlineException: boolean;\r\n isReEntry: boolean;\r\n isArticleBased: boolean;\r\n isGradingComplete : boolean;\r\n isExamFeePaid: boolean;\r\n}\r\n\r\nexport enum ExaminationGrade {\r\n Pass = 1,\r\n Fail = 2,\r\n}\r\n\r\nexport enum ExamineeStatus {\r\n NA = 0,\r\n AuthorizationPending = 2,\r\n Authorized = 3,\r\n GradingComplete = 4,\r\n Delivered = 25,\r\n UnexcusedAbsence = 26\r\n}\r\n\r\nexport enum ExamineeStatusReason {\r\n NoShow = 1,\r\n Invalidated = 3\r\n}","import { CCArticleResult } from \"../../Models/Assessment\";\r\nimport { OverlayTrigger, Table, Tooltip } from \"react-bootstrap\";\r\nimport { getDateWithOffset } from \"../../../Shared/Utility/GetDateWithOffset\";\r\n\r\ninterface IProps {\r\n articleResults: Array;\r\n}\r\n\r\nexport function ArticleResultList(props: IProps) {\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n { props.articleResults.map((articleResult: CCArticleResult) => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n )\r\n })}\r\n \r\n
ArticleCompletedResult
{articleResult.articleTitle}{getDateWithOffset(articleResult.completedDate).toLocaleDateString()}{articleResult.isPass ? \"Pass\" : \"Fail\"}\r\n {articleResult.isPass && articleResult.rescore && \r\n \r\n Rescored on {getDateWithOffset(articleResult.rescoreDate).toLocaleDateString()}. Result updated.\r\n }>\r\n \r\n \r\n }\r\n
\r\n
\r\n\r\n \r\n );\r\n}\r\n","import { Fragment } from \"react\";\r\nimport { Col, Form, ProgressBar, Row } from \"react-bootstrap\";\r\nimport { ReEntryAssessmentCertification } from \"../Models/Assessment\";\r\n\r\ninterface IProps {\r\n reEntryAssessmentCertification: ReEntryAssessmentCertification;\r\n perCertificationArticleRequirement: number;\r\n}\r\n\r\nexport function ReEntryAssessmentCertificationCard(props: IProps){\r\n const numPassed = props.reEntryAssessmentCertification.ccArticleResults?.length > 0 ? props.reEntryAssessmentCertification.ccArticleResults.filter(_ => _.isPass).length : 0;\r\n const numFailed = props.reEntryAssessmentCertification.ccArticleResults?.length > 0 ? props.reEntryAssessmentCertification.ccArticleResults?.filter(_ => !_.isPass).length : 0;\r\n const percentPassed = numPassed / props.perCertificationArticleRequirement * 100;\r\n \r\n return(\r\n \r\n \r\n \r\n {props.reEntryAssessmentCertification.certificationName} \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n {numPassed}/{props.perCertificationArticleRequirement} \r\n
\r\n
\r\n \r\n \r\n {numFailed} \r\n \r\n \r\n  \r\n \r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default ReEntryAssessmentCertificationCard;","import React, { Fragment, useEffect, useState } from \"react\";\r\nimport { Col, Form, Row, Button, Card, ProgressBar } from \"react-bootstrap\";\r\nimport { CCArticleResult, ReEntryAssessmentCertification, ReEntryAssessmentResult } from \"../Models/Assessment\";\r\nimport { ArticleResultList } from \"../ContinuingCertification/Components/ArticleResultList\";\r\nimport ReEntryAssessmentCertificationCard from \"./ReEntryAssessmentCertificationCard\";\r\nimport { configService } from \"../../../Services/Config/ConfigService\";\r\nimport { getDateWithOffset } from \"../../Shared/Utility/GetDateWithOffset\";\r\n\r\ninterface IProps {\r\n assessment: ReEntryAssessmentResult;\r\n}\r\n\r\nexport function ReEntryAssessmentCard(props: IProps) {\r\n\r\nconst [detailVisible, setDetailVisible] = useState(false);\r\nconst [articleAccessUrl, setArticleAccessUrl] = useState(null);\r\n\r\nuseEffect(() => {\r\n const getArticleAccessUrl = async () => {\r\n let cfg = (await configService.getConfiguration()).ArticleAccessUrl;\r\n setArticleAccessUrl(cfg);\r\n \r\n\r\n }\r\n getArticleAccessUrl();\r\n}, []);\r\n\r\nconst getTotalPassed = () => {\r\n var totalPassed = 0;\r\n if (props.assessment.reEntryAssessmentCertifications.length > 0){\r\n for (var i = 0; i < props.assessment.reEntryAssessmentCertifications.length; i++){\r\n if (props.assessment.reEntryAssessmentCertifications[i].ccArticleResults.length > 0)\r\n {\r\n for (var a = 0; a < props.assessment.reEntryAssessmentCertifications[i].ccArticleResults.length; a++)\r\n {\r\n if (props.assessment.reEntryAssessmentCertifications[i].ccArticleResults[a].isPass)\r\n {\r\n totalPassed++;\r\n }\r\n }\r\n } \r\n }\r\n }\r\n\r\n return totalPassed;\r\n}\r\n\r\nconst getTotalFailed = () => {\r\n var totalFailed = 0;\r\n if (props.assessment.reEntryAssessmentCertifications){\r\n for (var i = 0; i < props.assessment.reEntryAssessmentCertifications.length; i++){\r\n if (props.assessment.reEntryAssessmentCertifications[i].ccArticleResults)\r\n {\r\n for (var a = 0; a < props.assessment.reEntryAssessmentCertifications[i].ccArticleResults.length; a++)\r\n {\r\n if (!props.assessment.reEntryAssessmentCertifications[i].ccArticleResults[a].isPass)\r\n {\r\n totalFailed++;\r\n }\r\n }\r\n } \r\n }\r\n }\r\n\r\n return totalFailed;\r\n}\r\n\r\nconst failureMax = props.assessment.attemmtpsAllowed - props.assessment.totalArticleRequirement;\r\n\r\nconst percentPassed = getTotalPassed() / props.assessment.totalArticleRequirement * 100;\r\nconst percentFailed = getTotalFailed() / failureMax * 100;\r\nconst totalAttempts = getTotalPassed() + getTotalFailed();\r\n\r\nconst getStatusMessage = () => {\r\n if (getTotalFailed() > failureMax){\r\n return \"You have exceeded the number of failed article exams allowed. Unfortunately, you were unsuccessful with the article exams. You will need to apply/pay for, and pass, the traditional CC/recertification exam in order to maintain your certification.\";\r\n }\r\n else if (getTotalPassed() < props.assessment.totalArticleRequirement){\r\n return `You have passed ${getTotalPassed()} of ${props.assessment.totalArticleRequirement} article exams needed to pass with ${totalAttempts - getTotalFailed() - getTotalPassed()} article exams remaining.`\r\n }\r\n else {\r\n return `Congratulations! You have passed ${getTotalPassed()} of ${props.assessment.totalArticleRequirement} article exams needed to pass.`\r\n }\r\n}\r\n\r\n\r\n const articleResultsExist = () => {\r\n return getAllArticleResults().length > 0\r\n }\r\n\r\n const getAllArticleResults = () => {\r\n var allArticleResults = Array();\r\n props.assessment.reEntryAssessmentCertifications.map((reEntryAssessmentCertification: ReEntryAssessmentCertification) => {\r\n reEntryAssessmentCertification.ccArticleResults && reEntryAssessmentCertification.ccArticleResults.map((ccArticleResult: CCArticleResult) => {\r\n allArticleResults.push(ccArticleResult);\r\n })\r\n })\r\n\r\n return allArticleResults;\r\n }\r\n\r\n const getFormattedDueDate = () => { \r\n return getDateWithOffset(props.assessment.dueDate).toLocaleDateString();\r\n }\r\n\r\n return(\r\n \r\n \r\n \r\n \r\n Article Exams Due By\r\n {getFormattedDueDate()}\r\n \r\n \r\n \r\n \r\n \r\n   \r\n \r\n \r\n Passed \r\n \r\n \r\n Failed \r\n \r\n \r\n Total Attempts \r\n \r\n \r\n {props.assessment.reEntryAssessmentCertifications?.length > 1 && props.assessment.reEntryAssessmentCertifications?.map((reEntryAssessmentCertification: ReEntryAssessmentCertification) => { \r\n return })\r\n }\r\n \r\n \r\n \r\n {props.assessment.reEntryAssessmentCertifications?.length > 1 ? \"Total\" : props.assessment.reEntryAssessmentCertifications[0].certificationName} \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n {getTotalPassed()}/{props.assessment.totalArticleRequirement} \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n {getTotalFailed()}/{failureMax} \r\n
\r\n
\r\n \r\n \r\n {totalAttempts}/{props.assessment.attemmtpsAllowed} \r\n \r\n
\r\n \r\n \r\n {getStatusMessage()}\r\n \r\n \r\n { detailVisible &&\r\n \r\n \r\n \r\n }\r\n \r\n \r\n { articleResultsExist() && }\r\n \r\n
* Clicking 'Access Article Exams' will navigate you to the article portal
\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default ReEntryAssessmentCard;","import { Fragment, useContext, useState, useEffect } from \"react\";\r\nimport { Row, Col, Card } from \"react-bootstrap\";\r\nimport { ReEntryAssessmentResult } from \"../../Models/Assessment\";\r\nimport { ReEntryAssessmentCard } from \"../../Assessments/ReEntryAssessmentCard\";\r\nimport { AuthContext } from \"../../../Auth/AuthProvider\";\r\nimport { abpnClient } from \"../../../../Services/AbpnClient\";\r\n\r\nexport function ArticleReentryExaminationCard() {\r\n\r\n const authContext = useContext(AuthContext);\r\n const [reEntryAssessments, setReEntryAssessments] = useState>(null);\r\n\r\n useEffect(()=>{\r\n abpnClient.get>(`/api/physician/GetReEntryAssessments`,authContext)\r\n .then(_=>{setReEntryAssessments(_.sort((a: ReEntryAssessmentResult, b: ReEntryAssessmentResult)=>{\r\n return a.endYear - b.endYear;\r\n }));\r\n });\r\n },[]);\r\n\r\n return(\r\n reEntryAssessments?.length > 0 &&\r\n \r\n \r\n \r\n \r\n Assessments for Re-Entry\r\n \r\n \r\n \r\n \r\n \r\n {reEntryAssessments.map((assessment: ReEntryAssessmentResult) => {\r\n return \r\n })}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n}","import React, { Fragment, useEffect, useState } from \"react\";\r\nimport { Col, Form, Row, Button, Card, ProgressBar } from \"react-bootstrap\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { getDateWithOffset } from \"../../Shared/Utility/GetDateWithOffset\";\r\nimport { AssessmentResult } from \"../Models/Assessment\";\r\nimport { ArticleResultList } from \"../ContinuingCertification/Components/ArticleResultList\";\r\nimport { configService } from \"../../../Services/Config/ConfigService\";\r\n\r\ninterface IProps {\r\n assessment: AssessmentResult;\r\n}\r\n\r\nexport function AssessmentCard(props: IProps) {\r\n\r\nconst [detailVisible, setDetailVisible] = useState(false);\r\nconst [articleAccessUrl, setArticleAccessUrl] = useState(null);\r\n\r\nuseEffect(() => {\r\n const getArticleAccessUrl = async () => {\r\n let cfg = (await configService.getConfiguration()).ArticleAccessUrl;\r\n setArticleAccessUrl(cfg);\r\n \r\n\r\n }\r\n getArticleAccessUrl();\r\n}, []);\r\n\r\nconst numPassed = props.assessment.ccArticleResults.filter(_ => _.isPass).length;\r\nconst numFailed = props.assessment.ccArticleResults.filter(_ => !_.isPass).length;\r\nconst totalAttempts = props.assessment.articleFailureMax + props.assessment.articleRequirement;\r\nconst percentPassed = numPassed / props.assessment.articleRequirement * 100;\r\nconst percentFailed = numFailed / props.assessment.articleFailureMax * 100;\r\nvar examDueHeader = props.assessment.isArticleBasedExam ? \"Article Exams Due\" : \"Exam Due\";\r\nvar articleStatusMessage = \"\";\r\n\r\nif (props.assessment.isArticleBasedExam) {\r\n if (numFailed > 10){\r\n articleStatusMessage = \"You have exceeded the number of failed article exams allowed. Unfortunately, you were unsuccessful with the Pilot article exams. You will need to apply/pay for, and pass, the traditional 10-Year CC/recertification exam in order to maintain your certification.\";\r\n }\r\n else if (numFailed == 10 && numPassed < 30) {\r\n articleStatusMessage = `You have passed ${numPassed} of ${props.assessment.articleRequirement} article exams needed to pass with ${totalAttempts - numFailed - numPassed} article exams remaining. If you fail one more article exam before you pass 30, no further attempts will be allowed.`\r\n }\r\n else if (numPassed < 30){\r\n articleStatusMessage = `You have passed ${numPassed} of ${props.assessment.articleRequirement} article exams needed to pass with ${totalAttempts - numFailed - numPassed} article exams remaining.`\r\n }\r\n else {\r\n articleStatusMessage = `Congratulations! You have passed ${numPassed} of ${props.assessment.articleRequirement} article exams needed to pass.`\r\n }\r\n}\r\n\r\nconst getFormattedDueDate = () => {\r\n if (isNaN(Date.parse(props.assessment.dueDate)) || props.assessment.isArticleBasedExam) return getDateWithOffset(props.assessment.dueDate).toLocaleDateString();\r\n\r\n return getDateWithOffset(props.assessment.dueDate).getFullYear().toString();\r\n}\r\n\r\nconst articleResultsExist = () => {\r\n return props.assessment.isArticleBasedExam && \r\n props.assessment.ccArticleResults.length > 0;\r\n}\r\n\r\nreturn (\r\n \r\n \r\n \r\n \r\n \r\n {props.assessment.certificationName.toUpperCase()}\r\n \r\n \r\n \r\n { !props.assessment.releaseGrades && \r\n \r\n {examDueHeader}\r\n {getFormattedDueDate()} \r\n \r\n }\r\n \r\n \r\n { props.assessment.releaseGrades && \r\n \r\n Result\r\n Available \r\n \r\n }\r\n \r\n \r\n { props.assessment.isArticleBasedExam &&\r\n
\r\n \r\n \r\n Passed \r\n \r\n \r\n Failed \r\n \r\n \r\n Completed \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n {numPassed}/{props.assessment.articleRequirement} \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n {numFailed}/{props.assessment.articleFailureMax} \r\n
\r\n
\r\n \r\n \r\n {numPassed + numFailed}/{props.assessment.articleRequirement + props.assessment.articleFailureMax} \r\n \r\n
\r\n \r\n \r\n {articleStatusMessage}\r\n \r\n \r\n
\r\n }\r\n { detailVisible &&\r\n \r\n \r\n \r\n }\r\n\r\n \r\n { props.assessment.isArticleBasedExam && }\r\n { articleResultsExist() && }\r\n \r\n
* Clicking 'Access Article Exams' will navigate you to the article portal
\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default AssessmentCard;","import { Fragment, useContext, useState, useEffect } from \"react\";\r\nimport { Row, Col, Card } from \"react-bootstrap\";\r\nimport { AssessmentResult } from \"../../Models/Assessment\";\r\nimport { AssessmentCard } from \"../../Assessments/AssessmentCard\";\r\nimport { AuthContext } from \"../../../Auth/AuthProvider\";\r\nimport { abpnClient } from \"../../../../Services/AbpnClient\";\r\nimport { AppliedToExamination } from \"../Models/AppliedToExamination\";\r\n\r\ninterface IProps{\r\n exam: AppliedToExamination;\r\n}\r\n\r\nexport function ArticleExaminationCard(props: IProps) {\r\n\r\n const authContext = useContext(AuthContext);\r\n const [assessment, setAssessment] = useState(null);\r\n\r\n useEffect(()=>{\r\n abpnClient.get(`/api/physician/GetExamAssessment?examineeId=${props.exam.examineeId}`,authContext)\r\n .then(_=>{setAssessment(_)\r\n });\r\n },[]);\r\n\r\n return(\r\n assessment != null &&\r\n \r\n \r\n \r\n \r\n Assessment For Exam\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n}","import { Card, Col, Row, Form, Button, OverlayTrigger, Tooltip} from \"react-bootstrap\";\r\nimport { useEffect, useContext, useState, Fragment } from \"react\";\r\nimport { abpnClient } from \"../../../../Services/AbpnClient\";\r\nimport { AppliedToExamination } from \"../Models/AppliedToExamination\"\r\nimport { AuthContext } from \"../../../Auth/AuthProvider\";\r\nimport AbpnSpinner from \"../../../Shared/Components/AbpnSpinner\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { CandidateStatus, KnownCandidateStatusReason } from \"../../../Apply/Models/ApplicationModel\";\r\nimport { ExamineeStatus, ExamineeStatusReason } from \"../Models/AppliedToExamination\";\r\nimport { deepCopy } from \"../../../Shared/Utility/DeepCopy\";\r\nimport { getDateWithOffset } from \"../../../Shared/Utility/GetDateWithOffset\";\r\nimport { ArticleReentryExaminationCard } from \"./ArticleReentryExaminationCard\";\r\nimport { ArticleExaminationCard } from \"./ArticleExaminationCard\";\r\n\r\nexport function ExaminationsCard() {\r\n const [examsAppliedTo, setExamsAppliedTo] = useState>(null);\r\n const [isLoading, setIsLoading] = useState(true);\r\n\r\n useEffect(() => {\r\n const getExams = () => {\r\n abpnClient.get>(`/api/Examination/GetAppliedToExaminations`, authContext)\r\n .then(exams => {\r\n setExamsAppliedTo(exams);\r\n setIsLoading(false);\r\n });\r\n }\r\n getExams();\r\n }, []);\r\n\r\n const authContext = useContext(AuthContext);\r\n\r\n const getDateFormatted = (date: string) => {\r\n return getDateWithOffset(date).toLocaleDateString();\r\n }\r\n\r\n const getDateTimeFormatted = (date: string) => {\r\n return getDateWithOffset(date).toLocaleTimeString('en-US', { hour: 'numeric', minute: '2-digit', hour12: true });\r\n }\r\n\r\n const getCandidateStatusDescription = (exam: AppliedToExamination) => {\r\n if (exam.application.needsFinalReview) return \"Approved (Pending PD Graduation Attestation & Credentials Final Review - Allow up to 4 weeks after graduation)\";\r\n\r\n if (exam.application.candidateStatus === CandidateStatus.ToBeReviewed\r\n || (exam.application.candidateStatus === CandidateStatus.Approved && exam.application.candidateStatusReason.length > 0)) {\r\n return \"Application Pending Review by Credentials Department (allow up to 16 weeks)\";\r\n } \r\n\r\n if (exam.application.candidateStatus === CandidateStatus.Withdrawn \r\n || (exam.application.candidateStatus === CandidateStatus.Denied && exam.application.knownCandidateStatusReason === KnownCandidateStatusReason.Withdrew)) {\r\n return \"Application Withdrew\";\r\n } \r\n\r\n if (exam.application.candidateStatus === CandidateStatus.Unsubmitted){\r\n return exam.application.candidateStatusDescription + getApplicationDeadlineDate(exam)\r\n }\r\n\r\n return exam.application.candidateStatusDescription;\r\n }\r\n\r\n const getCandidateStatusReason = (exam: AppliedToExamination) => {\r\n if (exam.application.needsFinalReview) return \"\";\r\n\r\n if (exam.application.candidateStatusReason?.length === 0 \r\n || exam.application.candidateStatus === CandidateStatus.ToBeReviewed\r\n || exam.application.candidateStatus === CandidateStatus.TransferredOut\r\n || exam.application.candidateStatus === CandidateStatus.Withdrawn\r\n || (exam.application.candidateStatus === CandidateStatus.Approved && exam.application.candidateStatusReason.length > 0)) return \"\";\r\n\r\n return `: ${exam.application.candidateStatusReason}`;\r\n }\r\n\r\n const getExamineeStatusDescription = (exam: AppliedToExamination) => {\r\n if (exam.examineeStatus === ExamineeStatus.Authorized \r\n && (exam.appointments == null || exam.appointments.length === 0)) return exam.examineeStatusDescription;\r\n\r\n if ((exam.examineeStatus === ExamineeStatus.Delivered && exam.examineeStatusReasonId === ExamineeStatusReason.NoShow) || exam.examineeStatusReasonId === ExamineeStatusReason.Invalidated) return exam.examineeStatusReason;\r\n\r\n return exam.examineeStatusDescription;\r\n }\r\n\r\n const deleteApplication = (applicationId: number) => {\r\n const url = `/api/Application/delete?applicationId=${applicationId}`;\r\n abpnClient.post(url, null, authContext).then(() => {\r\n removeDeletedApplicationExam(applicationId);\r\n });\r\n }\r\n\r\n const removeDeletedApplicationExam = (applicationId: number) => {\r\n var existing = deepCopy(examsAppliedTo);\r\n var updated = existing.filter(_ => _.application.applicationId !== applicationId);\r\n setExamsAppliedTo(updated);\r\n }\r\n\r\n\r\n const showMakePaymentButton = (exam: AppliedToExamination) =>{\r\n if(exam.application.candidateStatus == CandidateStatus.Denied || exam.application.candidateStatus == CandidateStatus.Withdrawn) return false;\r\n \r\n if((exam.application.candidateStatus !== CandidateStatus.Unsubmitted || exam.application.isTransferredIn) && !exam.isExamFeePaid) return true;\r\n \r\n return false;\r\n }\r\n\r\n const getPaymentButtonText = (exam: AppliedToExamination) => {\r\n if (exam.application.isTransferredIn) return \"Complete and Pay\"\r\n \r\n return \"Make Payment\";\r\n }\r\n\r\n const getExamDateTitle = (exam: AppliedToExamination) => {\r\n if (exam.releaseGrades) return \"Date Exam Started\";\r\n return \"Exam Dates\";\r\n }\r\n\r\n const getExamDates = (exam: AppliedToExamination) => {\r\n if (exam.releaseGrades) return getDateWithOffset(exam.startDate).toLocaleDateString();\r\n\r\n return `${getDateWithOffset(exam.startDate).toLocaleDateString()} - ${getDateWithOffset(exam.endDate).toLocaleDateString()}`;\r\n }\r\n\r\n const getApplicationDeadlineDate = (exam: AppliedToExamination) => {\r\n var date = exam.extensionDate ?? exam.applicationDeadlineDate;\r\n return ` (Application ${exam.hasDeadlineException ? \"Exception\" : \"\"} Deadline: ${getDateWithOffset(date).toLocaleDateString()})`;\r\n }\r\n\r\n const isGradeAvailable = (exam: AppliedToExamination) => {\r\n return exam.releaseGrades && exam.examinationGrade !== null && exam.examineeStatus == ExamineeStatus.GradingComplete;\r\n }\r\n\r\n const confirmDeleteApplication = (exam: AppliedToExamination, isConfirming: boolean) => {\r\n var updatedExams = deepCopy(examsAppliedTo);\r\n var updatedExam = updatedExams.find(_ => _.examinationId === exam.examinationId);\r\n updatedExam.isConfirmingDelete = isConfirming;\r\n setExamsAppliedTo(updatedExams);\r\n }\r\n\r\n const showArticleReEntryCard = (exam : AppliedToExamination) => exam.isArticleBased && exam.examineeStatus != ExamineeStatus.GradingComplete && exam.isReEntry && exam.examinationId == examsAppliedTo[0].examinationId;\r\n\r\n /**Don't show examination card if article has been finalized */\r\n const showArticleExaminationCard = (exam : AppliedToExamination) => exam.isArticleBased && !exam.isReEntry && exam.examineeId && exam.isGradingComplete == false;\r\n\r\n if (isLoading) return ;\r\n\r\n return (\r\n \r\n \r\n \r\n Examinations\r\n \r\n \r\n \r\n {examsAppliedTo?.sort((a, b) => {return (a.isReEntry === b.isReEntry)? 0 : a.isReEntry? -1 : 1;}).map(exam => { \r\n return (\r\n \r\n {showArticleReEntryCard(exam) && }\r\n \r\n \r\n {exam.title.toUpperCase()}\r\n {exam.moduleSelection}{exam.formattedCnpType}\r\n \r\n\r\n {(exam.appointments == null || exam.appointments.length === 0 ) &&\r\n \r\n {getExamDateTitle(exam)}\r\n {getExamDates(exam)} \r\n }\r\n\r\n {(exam.appointments != null && exam.appointments.length > 0 && !exam.releaseGrades) &&\r\n \r\n \r\n \r\n {`Exam Appointment${exam.appointments.length > 1 ? 's' : ''}`}\r\n \r\n Appointment time(s)\r\n displayed is that of the \r\n Pearson VUE test center\r\n }>\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n {exam.appointments.map(_ => \r\n \r\n {`${getDateFormatted(_.startDateTime)} ${getDateTimeFormatted(_.startDateTime)}`} \r\n {_.addressLine1}
\r\n {_.addressLine2 ? {_.addressLine2}
: null} \r\n {_.addressLine3 ? {_.addressLine3}
: null}\r\n {_.city}, {_.stateCode} {_.postalCode}
\r\n \r\n )}\r\n
\r\n }\r\n\r\n {((exam.application.candidateStatus !== CandidateStatus.Unsubmitted || exam.application.isTransferredIn) && exam.order?.balance > 0) &&\r\n \r\n \r\n Balance\r\n ${exam.order.balance} \r\n \r\n } \r\n\r\n {isGradeAvailable(exam) &&\r\n \r\n \r\n } \r\n\r\n
\r\n\r\n {!isGradeAvailable(exam) ? \r\n \r\n \r\n \r\n
\r\n {\r\n exam.showExamineeStatus ?\r\n \r\n \r\n {(exam.examineeStatus === ExamineeStatus.AuthorizationPending || exam.examineeStatus === ExamineeStatus.NA) ? \"Application Status\" : \"Exam Status\"}\r\n \r\n {`${getExamineeStatusDescription(exam)}`} \r\n \r\n : \r\n Application Status\r\n {`${getCandidateStatusDescription(exam)}${getCandidateStatusReason(exam)}`} \r\n }\r\n \r\n
: null}\r\n {(exam.application.candidateStatus === CandidateStatus.Unsubmitted || exam.application.candidateStatus === CandidateStatus.InviteSent) \r\n && (!exam.application.isTransferredIn || exam.order?.balance <= 0) && \r\n \r\n \r\n \r\n \r\n } \r\n {exam.application.candidateStatus === CandidateStatus.Unsubmitted && exam.order === null && !exam.isConfirmingDelete &&\r\n \r\n \r\n \r\n \r\n } \r\n\r\n {exam.isConfirmingDelete &&\r\n \r\n \r\n \r\n \r\n \r\n Delete this Application?\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n } \r\n\r\n {(showMakePaymentButton(exam)) && \r\n \r\n \r\n \r\n \r\n } \r\n\r\n {showArticleExaminationCard(exam) && }\r\n \r\n
\r\n
\r\n )\r\n })}\r\n \r\n \r\n \r\n \r\n {examsAppliedTo != null && }\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n );\r\n\r\n}","import { Col, Row } from \"react-bootstrap\";\r\nimport { Link } from \"react-router-dom\";\r\n\r\ninterface IProps {\r\n title: string,\r\n subTitle: string,\r\n contactMessage: boolean\r\n}\r\nexport default function HeaderWithTitle(props: IProps) {\r\n\r\n return (\r\n
\r\n \r\n \r\n PHYSICIAN PORTAL\r\n
\r\n\r\n

{props.title}

\r\n \r\n \r\n
Questions about the Physician Portal, certification requirements, or deadlines
should be addressed to Questions@abpn.org or contact (847) 229-6512.

\r\n Please allow 2 business days for a response to your message.
\r\n \r\n
\r\n {props.subTitle && \r\n
{props.subTitle}
\r\n }\r\n
\r\n );\r\n}\r\n","import { Alert } from \"react-bootstrap\";\r\n\r\nexport function Banner() {\r\n return (\r\n \r\n
\r\n

*** Updated 9/11/2023***

\r\n

PLEASE NOTE:ABPN has recently migrated from abpn.com to abpn.org. To ensure you continue to receive communications from ABPN, please make sure to allow emails from abpn.org in any spam or email filter you may be using.

\r\n

ABPN is excited to introduce the new Article Based Continuing Certification (ABCC) Pathway as an alternative option to the every ten-year traditional recertification exams. \r\n Diplomates with active certifications can access the article lists and exam platform by clicking 'Access Article Exams' in the Assessment section below. Diplomates in the \r\n 2022-2024 CC block have until the end of 2024 to complete the current block of requirements, any outstanding requirements, and annual fees, as well as completion of the article exams as indicated below.

\r\n\r\n

Diplomates who do not successfully complete all article assessments by the end of their CC block will not be able to continue in the article assessment pathway. \r\n Additional time will not be provided to complete the article assessments and exceptions to the noted deadlines below will not be made.

\r\n \r\n

Diplomates who were awarded certifications in 2012-2014 will have their certification(s) lapse if the article assessments are not completed by December 15, 2024 (midnight CST) or have not passed a CC exam by 12/31/2024.

\r\n
\r\n
\r\n )\r\n}","import React, { useContext } from \"react\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { Modal, Button } from \"react-bootstrap\";\r\nimport DemographicPromptResponseModel from \"../../../Account/Models/DemographicPromptResponseModel\";\r\nimport { deepCopy } from \"../../Utility/DeepCopy\";\r\nimport { abpnClient } from \"../../../../Services/AbpnClient\";\r\nimport { AuthContext } from \"../../../Auth/AuthProvider\";\r\nimport Physician from \"../../../Physician/Models/Physician\";\r\n\r\ninterface IProps {\r\n physician : Physician;\r\n setShowDemographicsModal: Function;\r\n showDemographicsModal: boolean;\r\n}\r\n\r\nexport default function DemographicsNotification(props : IProps) {\r\n\r\n const history = useHistory();\r\n const authContext = useContext(AuthContext);\r\n\r\n\r\n const onPrimaryActionTaken = () =>{\r\n history.push('/AccountInformation');\r\n\r\n }\r\n \r\n return (<>\r\n {props.showDemographicsModal && \r\n \r\n Submit Data for ABPN Demographic Survey\r\n \r\n \r\n

\r\n The American Board of Psychiatry and Neurology (ABPN) and its Board of Directors are committed to advancing diversity, equity, and inclusion (DEI) within all ABPN programs and services.\r\n

\r\n

\r\n Beginning today, the ABPN will begin collecting detailed demographic data of all ABPN physicians to help enhance ABPN certification programs and the mission of the organization. When logging into the Physician Portal, \r\n you will be asked to submit information on your race, ethnicity, and gender. Survey results will have no bearing on a physician’s certification status. \r\n

\r\n

\r\n The ABPN is committed to using this demographic data to analyze diversity, equity, and inclusion within the certification process and to ensure that all physicians are treated equitably.\r\n

\r\n

\r\n The ABPN will not share data that could be used to identify individual residents, training programs, applicants, candidates, diplomates, or former diplomates.\r\n

\r\n
\r\n \r\n \r\n \r\n }\r\n );\r\n}","export default class SystemNotification {\r\n systemNotificationId: number;\r\n title : string;\r\n startDate : Date;\r\n endDate : Date;\r\n body : string;\r\n displayType : SystemNotificationDisplayType;\r\n primaryActionText : string;\r\n primaryActionUrl : string;\r\n closeButtonText : string;\r\n dontRemindButtonText : string;\r\n verifyCert : boolean;\r\n preCert : boolean;\r\n physicianPortal : boolean;\r\n boardCert : boolean;\r\n}\r\n\r\nexport enum SystemNotificationDisplayType {\r\n Banner = 1,\r\n Modal = 2\r\n}\r\n\r\nexport enum SystemNotificationApplication {\r\n PhysicianPortal = 1,\r\n BoardCert = 2,\r\n PreCert = 3,\r\n VerifyCert = 4\r\n}\r\n\r\nexport class SystemNotificationResponse {\r\n systemNotificationId : number;\r\n systemNotificationApplicationId : SystemNotificationApplication;\r\n personKey : number;\r\n primaryActionTaken: boolean;\r\n permanentlyDismiss: boolean;\r\n}","import SystemNotification from \"../../../Notifications/Models/SystemNotification\";\r\nimport { SystemNotificationButtonAction } from \"./SystemNotifications\";\r\n\r\ninterface SystemNotificationBannerProps {\r\n notification : SystemNotification;\r\n onNotificationAction : (notificationActionType : SystemNotificationButtonAction, notification: SystemNotification) => void;\r\n}\r\n\r\nexport default function SystemNotificationBanner(props : SystemNotificationBannerProps) {\r\n const {notification} = props;\r\n\r\n const PrimaryActionButton = () => ;\r\n const CloseButton = () => ;\r\n const DontRemindMeButton = () => \r\n\r\n return
\r\n {notification.title &&
{notification.title}
}\r\n

{notification.body}

\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
;\r\n}","import { Modal, Button } from \"react-bootstrap\";\r\nimport SystemNotification from \"../../../Notifications/Models/SystemNotification\";\r\nimport { SystemNotificationButtonAction } from \"./SystemNotifications\";\r\n\r\ninterface ISystemNotificationModalProps {\r\n notification : SystemNotification;\r\n showModal : boolean;\r\n onNotificationAction : (notificationActionType : SystemNotificationButtonAction, notification: SystemNotification) => void;\r\n}\r\n\r\nexport default function SystemNotificationModal(props : ISystemNotificationModalProps) {\r\n const {notification} = props;\r\n\r\n const onModalClose = () => props.onNotificationAction(SystemNotificationButtonAction.CloseAction, notification);\r\n const onPrimaryActionTaken = () => props.onNotificationAction(SystemNotificationButtonAction.PrimaryAction, notification);\r\n const onPermanentlyDismiss = () => props.onNotificationAction(SystemNotificationButtonAction.DontRemindMeAction, notification);\r\n\r\n return (<>\r\n {props.showModal && \r\n \r\n {notification.title}\r\n \r\n \r\n

{notification.body}

\r\n
\r\n \r\n \r\n \r\n \r\n \r\n }\r\n );\r\n}","import { useEffect, useState } from \"react\";\r\nimport SystemNotification, { SystemNotificationDisplayType } from \"../../../Notifications/Models/SystemNotification\";\r\nimport SystemNotificationBanner from \"./SystemNotificationBanner\";\r\nimport SystemNotificationModal from \"./SystemNotificationModal\";\r\n\r\ninterface SystemNotificationsProps {\r\n notifications: SystemNotification[]\r\n onNotificationAction : (notificationActionType : SystemNotificationButtonAction, notification: SystemNotification) => void;\r\n showModalNotifications : boolean;\r\n children: string | JSX.Element | JSX.Element[] \r\n}\r\n\r\nexport enum SystemNotificationButtonAction {\r\n CloseAction = 0,\r\n PrimaryAction = 1,\r\n DontRemindMeAction = 2\r\n}\r\n\r\ninterface ModalVisibilityState {\r\n visibilityState : {[id: string]: boolean};\r\n visibleIndex: number;\r\n modalCount: number;\r\n}\r\n\r\nexport default function SystemNotifications(props : SystemNotificationsProps) {\r\n const {notifications} = props;\r\n\r\n const bannerNotifications = notifications.filter(n => n.displayType == SystemNotificationDisplayType.Banner);\r\n const modalNotifications = notifications.filter(n => n.displayType == SystemNotificationDisplayType.Modal);\r\n const [modalVisbilityState, setModalVisbilityState] = useState({ visibilityState: {}, visibleIndex: 0, modalCount: 0});\r\n\r\n useEffect(() => {\r\n if (modalVisbilityState.modalCount !== modalNotifications.length) {\r\n let newModalVisibilityState : ModalVisibilityState = {\r\n modalCount: modalNotifications.length,\r\n visibleIndex: 0,\r\n visibilityState: {}\r\n };\r\n\r\n if (modalNotifications.length > 0) newModalVisibilityState.visibilityState[modalNotifications[newModalVisibilityState.visibleIndex].systemNotificationId] = true;\r\n\r\n setModalVisbilityState(newModalVisibilityState)\r\n }\r\n\r\n\r\n }, [modalNotifications.length]);\r\n\r\n const onNotificationAction = async (notificationActionType : SystemNotificationButtonAction, notification: SystemNotification) => {\r\n props.onNotificationAction(notificationActionType, notification);\r\n\r\n if (notification.displayType == SystemNotificationDisplayType.Modal) {\r\n const currentVisibleModalIndex = modalVisbilityState.visibleIndex;\r\n let nextModalVisbilityState = {...modalVisbilityState};\r\n nextModalVisbilityState.visibilityState[modalNotifications[currentVisibleModalIndex].systemNotificationId] = false;\r\n\r\n if (modalVisbilityState.visibleIndex < modalNotifications.length - 1) {\r\n const nextVisibleModalIndex = 1 + currentVisibleModalIndex;\r\n nextModalVisbilityState.visibleIndex = nextVisibleModalIndex;\r\n\r\n nextModalVisbilityState.visibilityState[modalNotifications[nextVisibleModalIndex].systemNotificationId] = true;\r\n }\r\n\r\n setModalVisbilityState(nextModalVisbilityState);\r\n }\r\n\r\n }\r\n\r\n const modalNotificationElements = modalNotifications.map(notification => );\r\n\r\n const bannerNotificationElements = bannerNotifications.map(notification => );\r\n\r\n return (
\r\n {props.children}\r\n {modalNotificationElements}\r\n {bannerNotificationElements}\r\n
);\r\n}","import SystemNotification, { SystemNotificationApplication, SystemNotificationResponse } from \"../../Components/Notifications/Models/SystemNotification\";\r\nimport { abpnClient } from \"../AbpnClient\";\r\n\r\nclass SystemNotificationService {\r\n \r\n async getSystemNotifications(authContext : any) : Promise {\r\n return await abpnClient.get(\"/api/physician/GetSystemNotifications\", authContext);\r\n }\r\n\r\n async saveSystemNotificationResponse(response : Partial, authContext : any) {\r\n await abpnClient.post(\"/api/physician/SaveSystemNotificationResponse\", {\r\n systemNotificationApplicationId: SystemNotificationApplication.PhysicianPortal,\r\n systemNotificationId: response.systemNotificationId,\r\n primaryActionTaken: response.primaryActionTaken,\r\n permanentlyDismiss: response.permanentlyDismiss,\r\n personKey: response.personKey\r\n }, authContext);\r\n }\r\n \r\n}\r\n\r\nconst systemNotificationService = new SystemNotificationService();\r\nexport default systemNotificationService;","const validPrimaryActionUrlDomain = /\\.{0,1}abpn\\.org/i\r\n\r\n/**Only URLs within ABPN domain are valid*/\r\nconst canNavigateToUrl = (url : string) => {\r\n return validPrimaryActionUrlDomain.test(url);\r\n}\r\n\r\nconst isAbsoluteUrl = (url : string) => {\r\n var absoluteUrlPattern = /^(w{3,}|\\w+:){0,1}[^\\s]+[\\w]\\.\\w+/i;\r\n return absoluteUrlPattern.test(url);\r\n}\r\n\r\nexport { isAbsoluteUrl, canNavigateToUrl };","import React from \"react\";\r\nimport { Banner } from \"../Banner\";\r\nimport DemographicsNotification from \"./DemographicsNotification\";\r\nimport Physician from \"../../../Physician/Models/Physician\";\r\nimport SystemNotifications, { SystemNotificationButtonAction } from \"./SystemNotifications\";\r\nimport { useContext, useEffect, useState } from \"react\";\r\nimport { AuthContext } from \"../../../Auth/AuthProvider\";\r\nimport SystemNotificationService from \"../../../../Services/Notifications/SystemNotificationService\";\r\nimport SystemNotification, { SystemNotificationDisplayType } from \"../../../Notifications/Models/SystemNotification\";\r\nimport { deepCopy } from \"../../Utility/DeepCopy\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { ProfileContext } from \"../../../Auth/ProfileProvider\";\r\nimport { abpnClient } from \"../../../../Services/AbpnClient\";\r\nimport DemographicPromptResponseModel from \"../../../Account/Models/DemographicPromptResponseModel\";\r\nimport isNullOrUndefined from \"../../Utility/isNullOrUndefined\";\r\nimport {isAbsoluteUrl, canNavigateToUrl} from \"../../Utility/urlUtil\";\r\nimport PhysicianDemographicModel from '../../../Account/Models/PhysicianDemographicModel';\r\n\r\ninterface IProps { \r\n physician : Physician; \r\n}\r\n\r\nexport default function NotificationManager(props : IProps) {\r\n const authContext = useContext(AuthContext);\r\n const { user } = useContext(ProfileContext);\r\n const [notifications, setNotifications] = useState([]);\r\n const history = useHistory();\r\n \r\n const [showDemographicsModal, setShowDemographicsModal] = useState(null);\r\n const [isImpersonating, setIsImpersonating] = useState(false);\r\n\r\n const navigateToPrimaryActionUrl = (primaryActionUrl : string) => {\r\n if (isNullOrUndefined(primaryActionUrl) || primaryActionUrl.trim().length == 0) return;\r\n\r\n if (isAbsoluteUrl(primaryActionUrl))\r\n {\r\n if (canNavigateToUrl(primaryActionUrl))\r\n {\r\n window.location.replace(primaryActionUrl);\r\n }\r\n }\r\n else \r\n {\r\n history.push(new URL(primaryActionUrl, document.location.origin).pathname);\r\n }\r\n\r\n }\r\n useEffect(() => {\r\n setIsImpersonating(authContext.getOnBehalfOf() && authContext.getOnBehalfOf().length > 0)\r\n }, [authContext]);\r\n\r\n useEffect(() => {\r\n let url = '/api/physicianDemographic/GetPhysicianDemographic/';\r\n abpnClient.get(url, authContext).then(_ => {\r\n setShowDemographicsModal(_ == null);\r\n });\r\n }, [user, props.physician]);\r\n \r\n useEffect(() => {\r\n if (showDemographicsModal == null) return //Wait until demographic notification is loaded to load other notifications\r\n \r\n async function getActiveSystemNotifications() {\r\n const response = await SystemNotificationService.getSystemNotifications(authContext);\r\n setNotifications(response);\r\n }\r\n\r\n getActiveSystemNotifications();\r\n\r\n }, [showDemographicsModal]);\r\n\r\n const onNotificationAction = async (notificationActionType : SystemNotificationButtonAction, notification: SystemNotification) => {\r\n //Remove the banner notification\r\n if (notification.displayType == SystemNotificationDisplayType.Banner){\r\n const notificationsCopy = deepCopy(notifications);\r\n notificationsCopy.splice(notifications.findIndex(n => n.systemNotificationId==notification.systemNotificationId),1);\r\n setNotifications(notificationsCopy);\r\n }\r\n\r\n switch (notificationActionType){\r\n case SystemNotificationButtonAction.PrimaryAction: {\r\n await SystemNotificationService.saveSystemNotificationResponse({personKey: props.physician.physicianId, primaryActionTaken: true, permanentlyDismiss: false, systemNotificationId: notification.systemNotificationId}, authContext);\r\n if (notification.primaryActionUrl) navigateToPrimaryActionUrl(notification.primaryActionUrl);\r\n break;\r\n }\r\n case SystemNotificationButtonAction.DontRemindMeAction: {\r\n await SystemNotificationService.saveSystemNotificationResponse({personKey: props.physician.physicianId, primaryActionTaken: false, permanentlyDismiss: true, systemNotificationId: notification.systemNotificationId}, authContext);\r\n break;\r\n }\r\n default:\r\n case SystemNotificationButtonAction.CloseAction: {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n\r\n return (\r\n {!isImpersonating && }\r\n \r\n );\r\n}","import React, { Fragment, useContext, useEffect, useState } from \"react\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { Row, Col } from \"react-bootstrap\";\r\nimport { abpnClient } from \"../Services/AbpnClient\";\r\nimport { AuthContext } from \"./Auth/AuthProvider\";\r\nimport CertificatesCard from \"./Dashboard/Certificates/Components/CertificatesCard\";\r\nimport { CertificationRequirements } from \"./Dashboard/CertificationRequirements/Components/CertificationRequirements\";\r\nimport CCEnrollmentSummary from \"./Dashboard/ContinuingCertification/Components/CCEnrollmentSummary\";\r\nimport CCEnrollmentCard from \"./Dashboard/ContinuingCertification/Components/CCEnrollmentCard\";\r\nimport { ExaminationsCard } from \"./Dashboard/Exams/Components/ExaminationsCard\";\r\nimport { CertificateStatus, CertificationGeneration } from \"./Physician/Models/Certificate\";\r\nimport Physician from \"./Physician/Models/Physician\";\r\nimport AbpnSpinner from \"./Shared/Components/AbpnSpinner\";\r\nimport HeaderWithTitle from \"./Shared/Components/HeaderWithTitle\";\r\nimport { CountryId } from \"./Shared/Enums/CountryId\";\r\nimport { ProfileContext } from \"./Auth/ProfileProvider\";\r\nimport NotificationManager from \"./Shared/Components/SystemNotifications/NotificationManager\";\r\n\r\nexport default function Home() {\r\n\r\n const [physician, setPhysician] = useState(null);\r\n const states = physician?.addresses.states;\r\n const authContext = useContext(AuthContext);\r\n const { user } = useContext(ProfileContext);\r\n const history = useHistory();\r\n\r\n const lifeTimeActiveCertificates = physician?.certificates.filter(cert => cert.certificationGeneration === CertificationGeneration.Lifetime && cert.certificateStatus == CertificateStatus.Active);\r\n\r\n useEffect(() => {\r\n const getPhysician = async () => {\r\n const physicianResult = await abpnClient.get(`/api/physician`,authContext);\r\n setPhysician(physicianResult);\r\n }\r\n\r\n const updateLastLogin = async () => {\r\n await abpnClient.post(\"/api/physician/UpdateLastLogin\", user.physicianId, authContext);\r\n }\r\n\r\n if (!user) return;\r\n if(user.physicianId != null && user.physicianId != \"\") updateLastLogin();\r\n if(user?.isOtherBoardPhysician){\r\n history.push('/OtherBoard');\r\n } else {\r\n getPhysician();\r\n }\r\n }, [user]);\r\n\r\n if (!physician || !user) return \r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {physician.currentCCEnrollment != null ?\r\n \r\n {((physician?.currentCCEnrollment?.activeEnrollmentCertificates && physician?.currentCCEnrollment?.activeEnrollmentCertificates.length > 0)\r\n || (lifeTimeActiveCertificates && lifeTimeActiveCertificates.length > 0))\r\n && }\r\n x.countryId === CountryId.Usa || x.countryId === CountryId.Canada)}\r\n updatePhysician={(physician: Physician) => setPhysician(physician)} />\r\n \r\n :\r\n \r\n {((lifeTimeActiveCertificates && lifeTimeActiveCertificates.length > 0))\r\n && }\r\n x.countryId === CountryId.Usa)}\r\n updatePhysician={(physician: Physician) => setPhysician(physician)} />\r\n }\r\n \r\n \r\n \r\n setPhysician(physician)} />\r\n \r\n \r\n \r\n );\r\n}","export const ApplicationName = 'Folios';\r\n\r\nexport const LogoutActions = {\r\n LogoutCallback: 'logout-callback',\r\n Logout: 'logout',\r\n LoggedOut: 'logged-out'\r\n};\r\n\r\nexport const LoginActions = {\r\n Login: 'login',\r\n StaffLogin: 'staff-login',\r\n LoginCallback: 'login-callback',\r\n LoginFailed: 'login-failed',\r\n Activate: 'activate'\r\n};\r\n\r\nconst prefix = '/authentication';\r\n\r\nexport const ApplicationPaths = {\r\n DefaultLoginRedirectPath: '/',\r\n ApiAuthorizationPrefix: prefix,\r\n Login: `${prefix}/${LoginActions.Login}`,\r\n StaffLogin: `${prefix}/${LoginActions.StaffLogin}`,\r\n LoginFailed: `${prefix}/${LoginActions.LoginFailed}`,\r\n LoginCallback: `${prefix}/${LoginActions.LoginCallback}`,\r\n LogOut: `${prefix}/${LogoutActions.Logout}`,\r\n LoggedOut: `${prefix}/${LogoutActions.LoggedOut}`,\r\n LogOutCallback: `${prefix}/${LogoutActions.LogoutCallback}`,\r\n SearchForAccount: `/SearchForAccount`,\r\n OnBehalfOf: `/OnBehalfOf`,\r\n};\r\n","import AbpnSpinner from \"../Shared/Components/AbpnSpinner\";\r\nimport { AuthConsumer } from \"./AuthProvider\";\r\n\r\nexport const Callback = () => (\r\n \r\n {({ signinRedirectCallback }) => {\r\n signinRedirectCallback();\r\n return ;\r\n }}\r\n \r\n);","import { useHistory } from \"react-router-dom\";\r\nimport AbpnSpinner from \"../Shared/Components/AbpnSpinner\";\r\n\r\nexport const LogoutCallback = () => {\r\n const history = useHistory();\r\n\r\n history.push(\"/\");\r\n\r\n return \r\n}","import AbpnSpinner from \"../Shared/Components/AbpnSpinner\";\r\nimport { AuthConsumer } from \"./AuthProvider\";\r\n\r\nexport const Logout = () => (\r\n \r\n {({ logout }) => {\r\n logout();\r\n return ;\r\n }}\r\n \r\n);","import { useParams } from \"react-router-dom\";\r\nimport AbpnSpinner from \"../Shared/Components/AbpnSpinner\";\r\nimport { AuthConsumer } from \"./AuthProvider\";\r\n\r\nexport const Login = () => {\r\n let { emailAddress, redirectUrl } = useParams<{ emailAddress: string, redirectUrl: string }>();\r\n\r\n return \r\n {({ signinRedirect }) => {\r\n var decodedUrl = decodeURIComponent(redirectUrl);\r\n signinRedirect(emailAddress, decodedUrl);\r\n return ;\r\n }}\r\n \r\n\r\n}","import { Component, Fragment } from 'react';\r\nimport { Route } from 'react-router';\r\nimport { ApplicationPaths } from '../Services/Auth/AuthConstants';\r\nimport { Callback } from './Auth/Callback';\r\nimport { LogoutCallback } from './Auth/LogoutCallback';\r\nimport { Logout } from './Auth/Logout';\r\nimport { Login } from './Auth/Login';\r\n\r\ninterface IProps{\r\n}\r\n\r\nexport default class ApiAuthorizationRoutes extends Component {\r\n\r\n render () {\r\n return(\r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n","import { useParams } from \"react-router\";\r\nimport { Redirect } from \"react-router-dom\";\r\nimport { AuthConsumer } from \"./AuthProvider\";\r\n\r\nexport const OnBehalfOf = () => {\r\n const { physicianId } = useParams();\r\n\r\n return (\r\n \r\n {({ setOnBehalfOf }) => {\r\n setOnBehalfOf(physicianId)\r\n return ;\r\n }}\r\n \r\n );\r\n};","export default function Footer(){\r\n \r\n let currentYear = () => {\r\n\r\n var currentTime = new Date();\r\n\r\n return currentTime.getFullYear().toString();\r\n }\r\n \r\n return (\r\n
\r\n
\r\n ABPN Physician Portal users agree to the ABPN policies\r\n
\r\n \r\n
\r\n © {currentYear()}, American Board of Psychiatry and Neurology, Inc. All rights reserved.\r\n
\r\n
\r\n );\r\n\r\n}","import { useContext } from 'react';\r\nimport { ApplicationPaths } from '../Services/Auth/AuthConstants';\r\nimport { Dropdown, NavDropdown} from 'react-bootstrap';\r\nimport { Link } from 'react-router-dom';\r\nimport { AuthContext } from './Auth/AuthProvider';\r\nimport { ProfileContext } from \"./Auth/ProfileProvider\";\r\n\r\nexport const NavItems = ({ }: { children: any }) => {\r\n\r\n const authContext = useContext(AuthContext);\r\n const { user } = useContext(ProfileContext);\r\n\r\n\r\n const authenticatedView = () => {\r\n const logoutPath = { pathname: `${ApplicationPaths.LogOut}`, state: { local: true } };\r\n return (\r\n \r\n \r\n \r\n MENU\r\n \r\n {user?.isOtherBoardPhysician ?\r\n \r\n Messages\r\n \r\n Logout\r\n \r\n :\r\n \r\n Home\r\n \r\n Exam History\r\n \r\n Payments and Receipts\r\n \r\n Activity Records\r\n \r\n Messages\r\n \r\n Account Information\r\n \r\n Logout\r\n \r\n }\r\n \r\n )\r\n };\r\n\r\n const anonymousView = () => {\r\n return (
\r\n Login\r\n
);\r\n };\r\n\r\n if (!authContext.isAuthenticated()) {\r\n return anonymousView();\r\n } else {\r\n return authenticatedView();\r\n }\r\n}","import { useContext } from \"react\";\r\nimport { Navbar, NavbarBrand, Image, Collapse } from \"react-bootstrap\";\r\nimport NavbarToggle from \"react-bootstrap/esm/NavbarToggle\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { ProfileContext } from \"./Auth/ProfileProvider\";\r\nimport { NavItems } from \"./NavItems\";\r\nimport { abpnClient } from \"../Services/AbpnClient\";\r\n\r\nexport default function NavMenu() {\r\n\r\n const { user } = useContext(ProfileContext);\r\n const isErrorPage = window.location.pathname == abpnClient._errorPage;\r\n\r\n return (\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n {user && !isErrorPage &&
\r\n {user.fullName}\r\n
\r\n ABPN ID: {user.isOtherBoardPhysician ? user.otherBoardPhysicianCode : user.physicianId}\r\n
\r\n }\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n );\r\n}\r\n","import { Container } from \"react-bootstrap\";\r\nimport Footer from \"./Footer\";\r\nimport NavMenu from \"./NavMenu\";\r\n\r\nexport default function Layout(props: any) {\r\n return (\r\n
\r\n \r\n \r\n {props.children}\r\n \r\n
\r\n
\r\n );\r\n}","export const UnexpectedError = `An unexpected error has occurred`;\r\n\r\nexport const PaymentProcessingError = `There was an issue with the processing of your payment. DO NOT attempt to pay again because that can result in a double payment. Please contact questions@abpn.org to find out if your payment was received.`;\r\n\r\nexport const ErrorMessages : { [key: string]: string } = {\r\n UnexpectedError: UnexpectedError,\r\n PaymentProcessingError: PaymentProcessingError\r\n}","import React from \"react\";\r\nimport { Alert, Container, Navbar, NavbarBrand } from \"react-bootstrap\";\r\nimport NavbarToggle from \"react-bootstrap/esm/NavbarToggle\";\r\nimport { Link, useParams } from \"react-router-dom\";\r\nimport { ErrorMessages } from './Shared/ErrorMessages';\r\n\r\nexport default function ErrorPage() {\r\n const urlParams : any = useParams();\r\n\r\n const hasErrorId = urlParams && !!urlParams.errorId && urlParams.errorId in ErrorMessages;\r\n const errorMessage = hasErrorId ? ErrorMessages[urlParams.errorId] : ErrorMessages[\"UnexpectedError\"]\r\n\r\n return (\r\n \r\n
\r\n \r\n \r\n Physician Portal\r\n \r\n \r\n \r\n
\r\n
\r\n {errorMessage}\r\n
\r\n
\r\n );\r\n}","import React from \"react\";\r\nimport { Card, Button, Col, Row, Container, Tooltip, OverlayTrigger } from \"react-bootstrap\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { CCAssessmentType, CCEnrollment } from \"../../../Physician/Models/CCEnrollment\";\r\nimport AbpnSpinner from \"../../../Shared/Components/AbpnSpinner\";\r\nimport { getDateWithOffset } from \"../../../Shared/Utility/GetDateWithOffset\";\r\nimport { AvailableExamination } from \"../Models/AvailableExamination\";\r\n\r\ninterface IProps {\r\n examination: AvailableExamination;\r\n applyLinkTo: any;\r\n currentCCEnrollment: CCEnrollment;\r\n}\r\n\r\nexport function AvailableExaminationCard(props: IProps) {\r\n const currentDate = new Date().setHours(0,0,0,0);\r\n const isLateApplication = currentDate.valueOf() > getDateWithOffset(props.examination.applicationDeadLineDate).valueOf() ;\r\n const applicationAvailableDate = getDateWithOffset(props.examination.applicationAvailableDate);\r\n const nextApplicationAvailableDate = props.examination.nextApplicationAvailableDate ? getDateWithOffset(props.examination.nextApplicationAvailableDate).toLocaleDateString() : \"TBA\"\r\n const isAvailable = applicationAvailableDate.valueOf() <= currentDate.valueOf();\r\n\r\n const filteredExamCertifications = () => {\r\n const ccEnrollmentExamCertificates = props.currentCCEnrollment?.activeEnrollmentCertificates.filter(_ => _.ccAssessmentType == CCAssessmentType.Exam);\r\n if(ccEnrollmentExamCertificates == null) return null;\r\n var ccEnrollmentExamCertificationIds = ccEnrollmentExamCertificates.map(_ => _.certification_Key);\r\n var filteredCertifications = props.examination.availableModuleCertifications.filter(_ => ccEnrollmentExamCertificationIds.indexOf(_.certificationId) != -1);\r\n return filteredCertifications;\r\n };\r\n\r\n if (!props.examination) return \r\n return (\r\n \r\n
\r\n {props.examination.title}\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n Application Deadline\r\n \r\n Application deadlines are at 11:59 p.m. CST, after which the late fee will be applied. \r\n }>\r\n \r\n \r\n
\r\n \r\n {isAvailable ? getDateWithOffset(props.examination.applicationDeadLineDate).toLocaleDateString() : \"TBA\"}\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n Exam Start\r\n
\r\n \r\n {props.examination.startDate ? getDateWithOffset(props.examination.startDate).toLocaleDateString() : \"\"}\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n Exam End\r\n
\r\n \r\n {props.examination.endDate ? getDateWithOffset(props.examination.endDate).toLocaleDateString() : \"\"}\r\n \r\n
\r\n \r\n\r\n \r\n \r\n
\r\n Fee\r\n
\r\n \r\n {isAvailable ? `$${props.examination.examFee}`: \"TBA\"}\r\n \r\n
\r\n \r\n \r\n {isLateApplication ?\r\n \r\n
\r\n Late Fee\r\n \r\n This exam is still available for an additional ${props.examination.lateFee} as the application deadline has passed. \r\n }>\r\n \r\n \r\n
\r\n \r\n {isAvailable ? `$${props.examination.lateFee}` : \"TBA\"} \r\n \r\n
: \r\n \r\n
\r\n Late Fee\r\n
\r\n \r\n {isAvailable ? `$${props.examination.lateFee}` : \"TBA\"}\r\n \r\n
\r\n } \r\n \r\n \r\n \r\n
\r\n {isAvailable ? \"Next Available Application\" : \"Application Available\"}\r\n
\r\n \r\n {isAvailable ? nextApplicationAvailableDate : getDateWithOffset(props.examination.applicationAvailableDate).toLocaleDateString()}\r\n \r\n
\r\n \r\n {\r\n props.examination.availableModuleCertifications.length > 0 && \r\n \r\n \r\n {filteredExamCertifications() != null &&\r\n
\r\n
\r\n Available Certifications\r\n
\r\n {\r\n filteredExamCertifications().map(_ => {\r\n return {_.certificationName}\r\n })\r\n }\r\n
\r\n }\r\n
\r\n \r\n }\r\n \r\n \r\n
\r\n \r\n \r\n
\r\n \r\n \r\n Information for Applicants\r\n \r\n \r\n \r\n \r\n {isAvailable ? \r\n \r\n \r\n \r\n : null\r\n }\r\n \r\n \r\n
\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default AvailableExaminationCard;","import React from \"react\";\r\nimport { Card, CardColumns } from \"react-bootstrap\";\r\nimport { CCAssessmentType, CCEnrollment } from \"../../../Physician/Models/CCEnrollment\";\r\nimport { AvailableExamination } from \"../Models/AvailableExamination\";\r\nimport AvailableExaminationCard from \"./AvailableExaminationCard\";\r\n \r\ninterface IProps {\r\n examinations: Array;\r\n title: string;\r\n currentCCEnrollment: CCEnrollment\r\n}\r\n\r\nexport default function AvailableExaminationGroup(props: IProps){\r\n\r\n const filteredExaminations = () => {\r\n var exams = new Array();\r\n props.examinations.map((exam: AvailableExamination) => {\r\n if(exam.availableModuleCertifications.length > 0){\r\n const ccEnrollmentExamCertificates = props.currentCCEnrollment?.activeEnrollmentCertificates.filter(_ => _.ccAssessmentType == CCAssessmentType.Exam);\r\n if(ccEnrollmentExamCertificates != null){\r\n var ccEnrollmentExamCertificationIds = ccEnrollmentExamCertificates.map(_ => _.certification_Key);\r\n var filteredCertifications = exam.availableModuleCertifications.filter(_ => ccEnrollmentExamCertificationIds.indexOf(_.certificationId) != -1);\r\n if(filteredCertifications.length > 1)\r\n exams.push(exam);\r\n }\r\n else\r\n exams.push(exam);\r\n }\r\n else\r\n exams.push(exam);\r\n });\r\n\r\n return exams;\r\n }\r\n\r\n return (\r\n \r\n

{props.title}

\r\n { props.examinations.length > 0 ? \r\n \r\n {filteredExaminations().map((exam: AvailableExamination) => { return })}\r\n \r\n :\r\n No available applications } \r\n
\r\n );\r\n}","import { useContext, useEffect, useState } from \"react\";\r\nimport { abpnClient } from \"../../../../Services/AbpnClient\";\r\nimport { AuthContext } from \"../../../Auth/AuthProvider\";\r\nimport AbpnSpinner from \"../../../Shared/Components/AbpnSpinner\";\r\nimport { AvailableExamination } from \"../Models/AvailableExamination\";\r\nimport AvailableExaminationGroup from \"./AvailableExaminationGroup\";\r\nimport Physician from \"../../../Physician/Models/Physician\";\r\n\r\nexport default function AvailableApplicationGrid() {\r\n const [availableExams, setAvailableExams] = useState([]);\r\n const [loading, setLoading] = useState(true);\r\n const [physician, setPhysician] = useState(null);\r\n const authContext = useContext(AuthContext);\r\n\r\n useEffect(() => {\r\n const loadData = async () => {\r\n\r\n await abpnClient.get>(\"/api/application/available\", authContext)\r\n .then(exams => {\r\n setAvailableExams(exams);\r\n });\r\n\r\n await abpnClient.get(\"/api/physician\", authContext)\r\n .then(physician => {\r\n setPhysician(physician);\r\n });\r\n\r\n setLoading(false);\r\n }\r\n\r\n if(loading) loadData();\r\n \r\n }, []);\r\n\r\n if (loading) return ;\r\n return (\r\n
\r\n

Apply for Exam

\r\n _.isMoc && _.isArticleBased)}\r\n currentCCEnrollment={null} />\r\n _.isMoc && !_.isArticleBased)} \r\n currentCCEnrollment={physician.currentCCEnrollment} />\r\n !_.isMoc && _.isPrimary)} \r\n currentCCEnrollment={null} />\r\n !_.isMoc && !_.isPrimary)} \r\n currentCCEnrollment={null} />\r\n
\r\n );\r\n}","import { Modal, Button } from \"react-bootstrap\";\r\nimport UserManagerSingleton from \"../../Services/Auth/UserManagerSingleton\";\r\n\r\ninterface ISessionExpirationModalProps {\r\n showModal : boolean;\r\n setShowSessionExpirationWarning: Function;\r\n}\r\n\r\nexport default function SessionExpirationModal(props : ISessionExpirationModalProps) {\r\n\r\n const onPrimaryActionTaken = () => {\r\n try {\r\n props.setShowSessionExpirationWarning(false);\r\n UserManagerSingleton.getInstance().getOidcUserManager().signinSilent().catch((err) => {\r\n console.error(err);\r\n }); \r\n }\r\n catch (err){\r\n console.error(err); //possible iframe window responsible for silent token renew timed out, probably should upgrade oidc-client (deprecated) to oidc-client-ts\r\n }\r\n }\r\n\r\n return (<>\r\n {props.showModal && \r\n \r\n Session is about to expire\r\n \r\n \r\n

You will be logged out within the next minute due to inactivity. Please click Continue to remain logged into the portal.

\r\n
\r\n \r\n \r\n \r\n
}\r\n );\r\n}","import { Route } from \"react-router-dom\";\r\nimport AbpnSpinner from \"../Shared/Components/AbpnSpinner\";\r\nimport { AuthConsumer } from \"./AuthProvider\";\r\nimport { SessionTimeout } from \"./SessionTimeout\";\r\nimport UserSessionContext, { IUserSessionContext } from \"../../Services/Auth/UserSessionContext\";\r\nimport { useState } from \"react\";\r\nimport { createPortal } from \"react-dom\";\r\nimport SessionExpirationModal from \"./SessionExpirationModal\";\r\n\r\nexport const AuthorizeRoute = ({ component, ...rest }: any) => {\r\n\r\n const [showSessionExpirationWarning, setShowSessionExpirationWarning] = useState(false);\r\n const userSessionContext : IUserSessionContext = {\r\n showSessionExpirationWarning,\r\n setShowSessionExpirationWarning\r\n };\r\n\r\n const renderFn = (Component :any) => (props: any) => (\r\n \r\n {({ isAuthenticated, signinRedirect }) => {\r\n if (!!Component && isAuthenticated()) {\r\n return <>\r\n \r\n \r\n \r\n {showSessionExpirationWarning && createPortal(, document.body)}\r\n \r\n ;\r\n } else {\r\n signinRedirect(null, window.location.pathname);\r\n return ;\r\n }\r\n }}\r\n \r\n );\r\n\r\n return ;\r\n}","import { Route } from \"react-router-dom\";\r\nimport AbpnSpinner from \"../Shared/Components/AbpnSpinner\";\r\nimport { AuthConsumer } from \"./AuthProvider\";\r\n\r\nexport const StaffOnlyRoute = ({ component, ...rest }: any) => {\r\n\r\n const renderFn = (Component :any) => (props: any) => (\r\n \r\n {({ isAuthenticated, staffSigninRedirect }) => {\r\n if (!!Component && isAuthenticated()) {\r\n return ;\r\n } else {\r\n staffSigninRedirect();\r\n return ;\r\n }\r\n }}\r\n \r\n );\r\n\r\n return ;\r\n}","import { LookupItem } from \"../../Shared/Models/LookupItem\";\r\nimport Fee from \"./Fee\"\r\nexport default class Examination\r\n{\r\n examinationId?: number;\r\n examinationDefinitionId: number;\r\n title: string;\r\n certificationId: number;\r\n certificationName: string;\r\n startDate: string;\r\n endDate: string;\r\n applicationDeadlineDate: string;\r\n applicationLateDeadlineDate: string;\r\n alternativePathwayEndDate: string;\r\n isMoc: boolean;\r\n isArticleBased: boolean;\r\n isPrimary: boolean;\r\n requiresFellowshipTraining: boolean;\r\n isCombinedMoc: boolean;\r\n fees: Array;\r\n examinationModules: Array;\r\n moduleTypes: Array;\r\n otherBoardPathwayOptions: Array;\r\n practicePathwayOptions: Array;\r\n pathwayOptions: Array;\r\n}\r\n\r\nexport class PracticePathwayOptionLookupItem {\r\n id: number;\r\n name: string;\r\n}\r\nexport class OtherBoardPathwayOptionLookupItem {\r\n id: number;\r\n name: string;\r\n}\r\n\r\nexport enum KnownExaminationDefinitions {\r\n Neurology = 1030,\r\n ChildNeurology = 1031,\r\n Psychiatry = 1038,\r\n NeurocriticalCare = 1058,\r\n BrainInjuryMedicine = 1041\r\n}\r\n\r\nexport enum KnownCertifications {\r\n ClinicalNeurophysiology = 14\r\n}\r\n\r\nexport class ExaminationModule {\r\n examinationModuleId: number;\r\n moduleTypeId: number;\r\n}\r\n\r\nexport class ModuleType {\r\n moduleTypeId: number;\r\n certificationId: number;\r\n}\r\n","import { AddressType } from \"../../Shared/Enums/AddressType\";\r\nimport { AddressVerificationStatus } from \"../../Shared/Enums/AddressVerificationStatus\";\r\nimport { CountryLookupItem, StateWithCountryLookupItem } from \"../../Shared/Models/StateWithCountryLookupItem\";\r\n\r\nexport class Address {\r\n constructor() {\r\n this.isEditing = true;\r\n this.types = new Array();\r\n this.addressId = 0;\r\n this.updatedBy = \"\";\r\n this.isValid = false;\r\n }\r\n\r\n public homePhoneNumber: string;\r\n public officePhoneNumber: string;\r\n public company: string;\r\n public company2: string;\r\n public line1: string;\r\n public line2: string;\r\n public city: string;\r\n public stateCode: string;\r\n public stateId: number;\r\n public countryId: number;\r\n public zipCode: string;\r\n public faxNumber: string;\r\n public isValid: boolean;\r\n public types: Array;\r\n public isContact: boolean;\r\n public addressId: number;\r\n public updatedDate: Date;\r\n public updatedBy: string;\r\n public isEditing: boolean;\r\n public newAreaCode: string;\r\n public verificationStatus: AddressVerificationStatus;\r\n public dateOptedIn: Date;\r\n}\r\n\r\nexport class AddressGridViewModel {\r\n public addresses: Array
;\r\n public states: Array;\r\n public countries: Array;\r\n}","export enum AddressType {\r\n Contact = 1,\r\n Public = 2,\r\n Shipping = 6\r\n}","import { Button } from \"react-bootstrap\";\r\nimport { Address } from \"../../Physician/Models/Address\";\r\nimport { AddressVerificationResult } from \"../../Physician/Models/AddressVerificationResult\";\r\n\r\ninterface IProps {\r\n data: AddressVerificationResult;\r\n onUseAsEntered: () => void;\r\n onUseSuggested: () => void;\r\n}\r\n\r\n\r\nexport default function AddressValidation(props: IProps) {\r\n var getAddressString = (address: Address) => {\r\n if (!address) return null;\r\n return `${address.line1}${address.line2 ? \", \" + address.line2 : \"\"}, ${address.city}, ${address.stateCode} ${address.zipCode}`\r\n }\r\n if (props.data == null) return null;\r\n return (\r\n
\r\n
\r\n Entered Address:\r\n {getAddressString(props.data.originalAddress)}\r\n
\r\n \r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n );\r\n}\r\n","export enum AddressVerificationStatus {\r\n UseSuggested = 1,\r\n UseAsEntered = 2\r\n}","import React, { useEffect, useContext, Fragment, /*FormEvent*/ } from \"react\";\r\nimport { useState } from \"react\";\r\nimport { Card, Button, Row, Col, Form, Tooltip, OverlayTrigger } from \"react-bootstrap\";\r\nimport { abpnClient } from \"../../../Services/AbpnClient\";\r\nimport { AuthContext } from \"../../Auth/AuthProvider\";\r\nimport { Address } from \"../../Physician/Models/Address\";\r\nimport AddressValidation from \"./AddressValidation\";\r\nimport { AddressVerificationResult } from \"../../Physician/Models/AddressVerificationResult\";\r\nimport { AddressVerificationStatus } from \"../Enums/AddressVerificationStatus\";\r\nimport { deepCopy } from \"../Utility/DeepCopy\";\r\nimport { CountryLookupItem, StateWithCountryLookupItem } from \"../Models/StateWithCountryLookupItem\";\r\nimport { AddressType } from \"../Enums/AddressType\";\r\nimport { CountryId } from \"../Enums/CountryId\";\r\nimport AbpnSpinner from \"./AbpnSpinner\";\r\n\r\ninterface IProps {\r\n address: Address;\r\n states: Array;\r\n countries: Array;\r\n runValidation: boolean;\r\n onSubmit: (address: Address) => void;\r\n onUpdate?: () => void;\r\n onCancel?: () => void;\r\n showSubmit?: boolean;\r\n submitText?: string;\r\n showCancel?: boolean;\r\n isLoading?: boolean;\r\n showStreetAddress?: boolean;\r\n}\r\n\r\nexport function AddressForm(props: IProps) {\r\n interface IData {\r\n addressVerificationResult: AddressVerificationResult,\r\n address: Address,\r\n validated: boolean,\r\n showAddressValidation: boolean,\r\n showStreetAddress: boolean\r\n }\r\n\r\n const [data, setData] = useState({\r\n addressVerificationResult: null,\r\n address: props.address,\r\n validated: false,\r\n showAddressValidation: false,\r\n showStreetAddress: props.showStreetAddress ?? true\r\n });\r\n\r\n const authContext = useContext(AuthContext);\r\n\r\n useEffect(() => {\r\n if (props.runValidation) validate();\r\n }, [props.runValidation]);\r\n\r\n useEffect(() => {\r\n setData(prevData =>\r\n ({\r\n ...prevData,\r\n showAddressValidation: (!prevData.address?.verificationStatus &&\r\n prevData.addressVerificationResult !== null)\r\n }));\r\n }, [data.address?.verificationStatus, data.addressVerificationResult]);\r\n\r\n const validate = () => {\r\n var isValid = true;\r\n var updatedData = deepCopy(data);\r\n const form = document.getElementById(\"addressForm\") as HTMLFormElement;\r\n\r\n if (!form.checkValidity()) isValid = false;\r\n\r\n updatedData.address.isValid = isValid;\r\n updatedData.validated = true;\r\n setData(updatedData);\r\n\r\n if (isValid) {\r\n runMelissaValidation();\r\n }\r\n }\r\n\r\n const updateLine1 = (value: string) => {\r\n var address = data.address;\r\n if(address == null)\r\n address = new Address();\r\n address.line1 = value;\r\n address.verificationStatus = null;\r\n setData(prevData => ({ ...prevData, address: address, addressVerificationResult: null }));\r\n if (props.onUpdate) props.onUpdate();\r\n }\r\n\r\n const updateLine2 = (value: string) => {\r\n var address = deepCopy(data.address);\r\n if(address == null)\r\n address = new Address();\r\n address.line2 = value;\r\n address.verificationStatus = null;\r\n setData(prevData => ({ ...prevData, address: address, addressVerificationResult: null }));\r\n if (props.onUpdate) props.onUpdate();\r\n }\r\n\r\n const updateCity = (value: string) => {\r\n var address = deepCopy(data.address);\r\n if(address == null)\r\n address = new Address();\r\n address.city = value;\r\n address.verificationStatus = null;\r\n setData(prevData => ({ ...prevData, address: address, addressVerificationResult: null }));\r\n if (props.onUpdate) props.onUpdate();\r\n }\r\n\r\n const updateZipCode = (value: string) => {\r\n var address = deepCopy(data.address);\r\n if(address == null)\r\n address = new Address();\r\n address.zipCode = value;\r\n address.verificationStatus = null;\r\n setData(prevData => ({ ...prevData, address: address, addressVerificationResult: null }));\r\n if (props.onUpdate) props.onUpdate();\r\n }\r\n\r\n const updateState = (e: React.ChangeEvent) => {\r\n var address = deepCopy(data.address);\r\n if(address == null)\r\n address = new Address();\r\n\r\n //Handles finding state if selected manually or with autofill\r\n var state = props.states.find(_ => _.id === parseInt(e.target.value));\r\n if (!state) state = props.states.find(_ => _.name === e.target.value);\r\n var value = state ? state.id : null;\r\n\r\n address.stateId = value;\r\n address.verificationStatus = null;\r\n setData(prevData => ({ ...prevData, address: address, addressVerificationResult: null }));\r\n if (props.onUpdate) props.onUpdate();\r\n }\r\n\r\n const filterStates = (countryId: number) => {\r\n if (countryId == null) return props.states;\r\n return props.states.filter(x => x.countryId === countryId)\r\n }\r\n\r\n const updateCountry = (e: React.ChangeEvent) => {\r\n var address = deepCopy(data.address);\r\n if(address == null)\r\n address = new Address();\r\n\r\n //Handles finding country if selected manually or with autofill\r\n var country = props.countries.find(_ => _.id === parseInt(e.target.value));\r\n if (!country) {\r\n country = props.countries.find(_ => _.name === e.target.value);\r\n }\r\n address.countryId = country ? country.id : null;\r\n\r\n if (address.countryId) {\r\n var states = filterStates(address.countryId);\r\n if (states.length === 1) {\r\n address.stateId = states[0].id;\r\n }\r\n }\r\n\r\n address.verificationStatus = null;\r\n setData(prevData => ({ ...prevData, address: address, addressVerificationResult: null }));\r\n if (props.onUpdate) props.onUpdate();\r\n }\r\n\r\n const updatePhoneNumber = (value: string) => {\r\n var address = deepCopy(data.address);\r\n if(address == null)\r\n address = new Address();\r\n\r\n address.homePhoneNumber = value;\r\n address.verificationStatus = null;\r\n setData(prevData => ({ ...prevData, address: address }));\r\n if (props.onUpdate) props.onUpdate();\r\n }\r\n\r\n const countryRequiresValidation = (countryId: number) => {\r\n return countryId === CountryId.Usa || countryId === CountryId.Canada;\r\n }\r\n\r\n const verifyAndSaveAddress = (e: React.FormEvent) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n //Validate required fields\r\n e.currentTarget.classList.add('was-validated');\r\n if (e.currentTarget.checkValidity()) {\r\n e.currentTarget.classList.remove('was-validated');\r\n\r\n runMelissaValidation();\r\n }\r\n }\r\n\r\n const runMelissaValidation = () => {\r\n let updatedData = deepCopy(data);\r\n\r\n //determine if address can use Melissa validation\r\n if (!countryRequiresValidation(updatedData.address.countryId) ||\r\n (!updatedData.address.isContact &&\r\n updatedData.address.types.includes(AddressType.Public) &&\r\n !updatedData.address.types.includes(AddressType.Shipping))) {\r\n updatedData.address.verificationStatus = AddressVerificationStatus.UseAsEntered;\r\n }\r\n\r\n if (updatedData.address.verificationStatus) {\r\n updatedData.address.isValid = true;\r\n if (updatedData.address.verificationStatus === AddressVerificationStatus.UseSuggested && data.addressVerificationResult !== null) {\r\n updatedData.address = updateWithSuggestedAddress(updatedData.address);\r\n }\r\n\r\n props.onSubmit(updatedData.address);\r\n return;\r\n }\r\n\r\n //Melissa validation\r\n abpnClient.post>(\"/api/Address/Verify\", [updatedData.address], authContext)\r\n .then(addressVerificationResults => {\r\n\r\n let validationResult = addressVerificationResults.find(_ => !_.isValid || _.suggestedAddress !== null);\r\n\r\n if (addressVerificationResults.some(_ => _.isValid && !_.suggestedAddress)) {\r\n updatedData.address.verificationStatus = AddressVerificationStatus.UseSuggested;\r\n };\r\n updatedData.addressVerificationResult = validationResult ?? null;\r\n\r\n if (!updatedData.addressVerificationResult) {\r\n updatedData.address.isValid = true;\r\n props.onSubmit(updatedData.address);\r\n }\r\n\r\n setData(updatedData);\r\n });\r\n }\r\n\r\n const updateWithSuggestedAddress = (address: Address) => {\r\n let suggestedAddress = data.addressVerificationResult.suggestedAddress;\r\n\r\n if (suggestedAddress === null) return address;\r\n\r\n address.line1 = suggestedAddress.line1;\r\n address.line2 = suggestedAddress.line2;\r\n address.city = suggestedAddress.city;\r\n address.stateId = suggestedAddress.stateId;\r\n address.zipCode = suggestedAddress.zipCode;\r\n\r\n return address;\r\n }\r\n\r\n const onVerificationSelection = (verficationSelection: AddressVerificationStatus) => {\r\n let updatedAddress = deepCopy(data.address);\r\n updatedAddress.verificationStatus = verficationSelection;\r\n\r\n updatedAddress.isValid = true;\r\n if (updatedAddress.verificationStatus === AddressVerificationStatus.UseSuggested && data.addressVerificationResult !== null) {\r\n updatedAddress = updateWithSuggestedAddress(updatedAddress);\r\n }\r\n\r\n setData(prevData => ({ ...prevData, address: updatedAddress }));\r\n if (props.onUpdate) props.onUpdate();\r\n }\r\n\r\n return (\r\n
verifyAndSaveAddress(e)} validated={data.validated}>\r\n \r\n {data.showStreetAddress &&\r\n \r\n \r\n \r\n Address\r\n *\r\n updateLine1(e.target.value)}\r\n defaultValue={data.address?.line1 ? data.address.line1 : null}\r\n value={data.address?.line1} />\r\n \r\n \r\n \r\n \r\n Address 2\r\n updateLine2(e.target.value)}\r\n defaultValue={data.address?.line2 ? data.address.line2 : null}\r\n value={data.address?.line2} />\r\n \r\n \r\n \r\n }\r\n \r\n \r\n Country\r\n *\r\n ) => { updateCountry(e); }}\r\n defaultValue={data.address?.countryId ? data.address.countryId : \"\"}\r\n value={data.address?.countryId}>\r\n \r\n {props.countries.map(country => {\r\n return \r\n })}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n City\r\n *\r\n updateCity(e.target.value)}\r\n defaultValue={data.address?.city ? data.address.city : null}\r\n value={data.address?.city} />\r\n \r\n \r\n\r\n {filterStates(data.address?.countryId).length !== 1 &&\r\n \r\n \r\n State/Area\r\n *\r\n ) => { updateState(e); }}\r\n defaultValue={data.address?.stateId ? data.address.stateId : \"\"}\r\n value={data.address?.stateId}>\r\n \r\n {filterStates(data.address?.countryId).map(x => ())}\r\n \r\n \r\n }\r\n\r\n \r\n \r\n Postal Code\r\n *\r\n updateZipCode(e.target.value)}\r\n defaultValue={data.address?.zipCode ? data.address.zipCode : null}\r\n value={data.address?.zipCode}\r\n placeholder=\"00000\"\r\n name=\"zipCode\" />\r\n \r\n \r\n \r\n {data.showStreetAddress &&\r\n \r\n \r\n \r\n Phone\r\n *\r\n \r\n If outside the US please enter phone number in international format.\r\n }>\r\n \r\n \r\n \r\n updatePhoneNumber(e.target.value)}\r\n defaultValue={data.address?.homePhoneNumber ? data.address.homePhoneNumber : null}\r\n value={data.address?.homePhoneNumber} />\r\n \r\n \r\n \r\n }\r\n \r\n {data.showAddressValidation ?\r\n
\r\n onVerificationSelection(AddressVerificationStatus.UseAsEntered)}\r\n onUseSuggested={() => onVerificationSelection(AddressVerificationStatus.UseSuggested)} />\r\n
\r\n :\r\n (props.showSubmit ?? true) &&\r\n (props.isLoading ?\r\n :\r\n )\r\n }\r\n {props.showCancel && }\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default AddressForm;\r\n","import React, { useEffect } from \"react\";\r\nimport { useState, Fragment } from \"react\";\r\nimport { Card, Row, Col, Collapse, Tooltip, OverlayTrigger } from \"react-bootstrap\";\r\nimport { Address } from \"../../Physician/Models/Address\";\r\nimport { AddressVerificationResult } from \"../../Physician/Models/AddressVerificationResult\";\r\nimport { AddressType } from \"../Enums/AddressType\";\r\nimport { deepCopy } from \"../Utility/DeepCopy\";\r\nimport { CountryLookupItem, StateWithCountryLookupItem } from \"../Models/StateWithCountryLookupItem\";\r\nimport AddressForm from \"./AddressForm\";\r\nimport { CountryId } from \"../Enums/CountryId\";\r\n\r\ninterface IProps {\r\n isNewPhysician: boolean;\r\n fullName: string;\r\n addresses: Array
;\r\n emailAddress: string;\r\n states: Array;\r\n countries: Array;\r\n isSectionOpen: boolean;\r\n runValidation: boolean;\r\n onSave: (addresses: Array
) => void;\r\n onUpdate?: () => void;\r\n onOpen?: () => void;\r\n disabled?: boolean;\r\n isLoading?: boolean;\r\n}\r\nexport function ApplicantInformation(props: IProps) {\r\n interface IData {\r\n openCollapse: boolean;\r\n addressVerificationResult: Array;\r\n contactAddress: Address;\r\n }\r\n\r\n const createNewContactAddress = () => {\r\n var newContactAddress = new Address();\r\n newContactAddress.countryId = CountryId.Usa;\r\n newContactAddress.types.push(AddressType.Contact);\r\n newContactAddress.isContact = true;\r\n return newContactAddress;\r\n }\r\n\r\n const [data, setData] = useState({\r\n openCollapse: props.isSectionOpen,\r\n addressVerificationResult: null,\r\n contactAddress: props.addresses?.find(_ => _.isContact) ?? createNewContactAddress()\r\n });\r\n\r\n useEffect(() => {\r\n setData(prevData => ({...prevData, openCollapse: props.isSectionOpen}));\r\n }, [props.isSectionOpen]);\r\n\r\n const buildAddressList = (contactAddress: Address) => {\r\n // must have 1 of each type to save: contact, shipping, and public\r\n let addresses = new Array
();\r\n addresses.push(contactAddress);\r\n\r\n if(contactAddress.addressId == 0) {\r\n //Add public and shipping address types to contact address\r\n contactAddress.types.push(AddressType.Public);\r\n contactAddress.types.push(AddressType.Shipping);\r\n return addresses;\r\n }\r\n else {\r\n var publicationAndShippingAddress = props.addresses?.find(_ =>\r\n _.types.includes(AddressType.Public)\r\n && _.types.includes(AddressType.Shipping)\r\n && !_.isContact);\r\n if (publicationAndShippingAddress) {\r\n addresses.push(publicationAndShippingAddress);\r\n return addresses;\r\n }\r\n\r\n contactAddress.types = [AddressType.Contact, AddressType.Shipping, AddressType.Public];\r\n\r\n var publicationAddress = props.addresses?.find(_ => _.types.includes(AddressType.Public) && !_.isContact);\r\n if (publicationAddress) {\r\n addresses.push(publicationAddress);\r\n contactAddress.types.splice(contactAddress.types.indexOf(AddressType.Public), 1);\r\n }\r\n\r\n var shippingAddress = props.addresses?.find(_ => _.types.includes(AddressType.Shipping) && !_.isContact);\r\n if (shippingAddress) {\r\n addresses.push(shippingAddress);\r\n contactAddress.types.splice(contactAddress.types.indexOf(AddressType.Shipping), 1);\r\n }\r\n\r\n return addresses;\r\n }\r\n }\r\n\r\n const saveContactAddress = (contactAddress: Address) => {\r\n let addresses = buildAddressList(contactAddress);\r\n props.onSave(addresses);\r\n }\r\n\r\n const setOpenCollapse = () => {\r\n let updatedData = deepCopy(data);\r\n updatedData.openCollapse = !updatedData.openCollapse;\r\n if (updatedData.openCollapse && props.onOpen) props.onOpen();\r\n setData(updatedData);\r\n }\r\n\r\n return (\r\n \r\n \r\n {props.isNewPhysician ?\r\n \r\n Contact Address\r\n :\r\n {if (!props.disabled) setOpenCollapse()}}>\r\n Applicant\r\n }\r\n \r\n \r\n \r\n {!props.isNewPhysician &&\r\n \r\n \r\n \r\n Contact\r\n \r\n Contact Address is used for the delivery of any mailed items.\r\n }>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Applicant Name\r\n \r\n \r\n {props.fullName}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Email\r\n \r\n \r\n {props.emailAddress ? props.emailAddress : \"placeholder@email.com\"}\r\n \r\n \r\n \r\n \r\n }\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default ApplicantInformation;\r\n","export default class Fee {\r\n feeAmount : number\r\n feeDescription : string\r\n feeType: FeeType\r\n}\r\n\r\nexport enum FeeType {\r\n examFeeMocPrimaryInitial = 2,\r\n examFeeSubspecialtyinitial = 3,\r\n examFeeMoc = 4,\r\n lateFeeInitial = 7,\r\n lateFeeMoc = 8,\r\n examFeeMocWithTwoModules = 10,\r\n examFeeMocWithThreeOrMoreModules = 11,\r\n ccAnnualFee = 12,\r\n ccAnnualFeeTwoCertifications = 21,\r\n ccAnnualFeeThreeOrMoreCertifications = 22,\r\n annualFeeCredit = 16,\r\n multipleExamDiscount = 23,\r\n committeeMemberDiscount = 24,\r\n committeeMemberTransferFeeDiscount = 25,\r\n committeeMemberLateFeeDiscount = 26,\r\n committeeMemberProcessingFeeDiscount = 27\r\n}","import React, { useContext, useEffect, useRef, useState } from \"react\";\r\nimport { Button, Row, Card, Col, Collapse, Table, Form } from \"react-bootstrap\";\r\nimport { abpnClient } from \"../../../Services/AbpnClient\";\r\nimport { CreditCardClientLibrary, getCreditCardProcessor, getPaymentProcessorForPaymentType } from \"../../../Services/PaymentProcessor/PaymentProcessor\";\r\nimport Payment from \"../../../Services/PaymentProcessor/Payment\";\r\nimport { AuthContext } from \"../../Auth/AuthProvider\";\r\nimport Physician from \"../../Physician/Models/Physician\";\r\nimport { deepCopy } from \"../../Shared/Utility/DeepCopy\";\r\nimport ApplicationModel, { CandidateStatus } from \"../Models/ApplicationModel\";\r\nimport ApplicationReceiptModel from \"../Models/ApplicationReceiptModel\";\r\nimport Examination from \"../Models/Examination\";\r\nimport Fee, { FeeType } from \"../Models/Fee\";\r\nimport { Alert } from 'react-bootstrap';\r\nimport { Fragment } from \"react\";\r\nimport OrderLineItem from \"../../Shared/Models/OrderLineItem\";\r\nimport { AbpnSpinner } from './../../Shared/Components/AbpnSpinner';\r\nimport { PaymentContainer } from \"../../../Services/PaymentProcessor/PaymentContainer\";\r\nimport { getDateWithOffset } from \"../../Shared/Utility/GetDateWithOffset\";\r\n\r\ninterface IPaymentCardProps {\r\n application: ApplicationModel;\r\n physician: Physician;\r\n examination: Examination;\r\n isSectionAvailable: boolean;\r\n isSectionOpen: boolean;\r\n onApplicationSubmitted: (applicationReceipt: ApplicationReceiptModel) => void;\r\n examinationDates: string;\r\n displayBanner: () => void;\r\n onOpen: () => void;\r\n disabled: boolean;\r\n applicationDeadlineDate: string;\r\n totalBalance: number;\r\n}\r\n\r\ninterface IPaymentPlan {\r\n dueNow: number;\r\n isPayInFull: boolean;\r\n isPayInSplit: boolean;\r\n}\r\n\r\ninterface ISelectedInstallmentPayments {\r\n total: number;\r\n isFirstInstallmentSelected: boolean;\r\n isSecondInstallmentSelected: boolean;\r\n}\r\n\r\nexport function PaymentCard(props: IPaymentCardProps) {\r\n const hasExistingOrder = props.application.order !== null;\r\n const orderWithFirstPaymentDue = hasExistingOrder && (props.application.order.total === props.application.order.balance)\r\n\r\n const [openCollapse, setOpenCollapse] = useState(props.isSectionOpen);\r\n\r\n const contactAddress = props.physician.addresses.addresses.find(_ => _.isContact);\r\n\r\n const [payment, setPayment] = useState({ email: props.physician.emailAddress, city: contactAddress?.city, state: contactAddress?.stateCode } as Payment);\r\n \r\n const [isSubmitting, setIsSubmitting] = useState(false);\r\n const [isPaymentSuccessful, setIsPaymentSuccessful] = useState(null);\r\n const [isDisable, setIsDisable] = useState(false);\r\n const [creditCardProcessor, setCreditCardProcessor] = useState(CreditCardClientLibrary.None);\r\n \r\n const payContainerRef = React.useRef(null);\r\n\r\n const formRef = useRef(null);\r\n\r\n const today = new Date();\r\n\r\n useEffect(() => {\r\n if (creditCardProcessor !== CreditCardClientLibrary.None) return;\r\n \r\n const getCreditCardProcessorForPaymentContainer = async () => {\r\n const cardProcessor : CreditCardClientLibrary = await getCreditCardProcessor();\r\n setCreditCardProcessor(cardProcessor);\r\n }\r\n \r\n getCreditCardProcessorForPaymentContainer();\r\n \r\n }, [])\r\n \r\n \r\n const isPastDeadline = (date: string) => {\r\n var deadlineDate = getDateWithOffset(date);\r\n return getDateWithOffset(deadlineDate.toDateString()) < getDateWithOffset(today.toDateString());\r\n }\r\n\r\n const getNonExamAndApplicationFees = () => {\r\n var otherFees = props.application.order?.total - props.application.totalExamFeeAmount;\r\n\r\n var totalInstallmentsAmount = 0;\r\n\r\n if (props.application.installmentOptions.length > 0) {\r\n totalInstallmentsAmount = props.application.installmentOptions.map(_ => _.amount)?.reduce((a, b) => a + b, 0);\r\n }\r\n\r\n if (totalInstallmentsAmount > 0 && totalInstallmentsAmount === props.application?.order?.balance) return 0;\r\n\r\n if (props.application.installmentOptions?.length === 2) {\r\n otherFees = props.application?.order?.balance - totalInstallmentsAmount;\r\n }\r\n\r\n return otherFees > 0 ? otherFees : 0;\r\n }\r\n\r\n const getPaymentPlanAmountDueNow = () => {\r\n if (!isSplitPay) return props.application?.order?.balance;\r\n\r\n var isFirstInstallmentPastDue = isPastDeadline(props.application.installmentOptions[0]?.dueDate);\r\n var isSecondInstallmentPastDue = props.application.installmentOptions[1] && isPastDeadline(props.application.installmentOptions[1].dueDate);\r\n\r\n if (isFirstInstallmentPastDue && isSecondInstallmentPastDue) return props.application?.order?.balance;\r\n\r\n var installmentAmountDue = orderWithFirstPaymentDue ? 0 : props.application?.installmentOptions?.[0]?.amount;\r\n\r\n return installmentAmountDue + getNonExamAndApplicationFees();\r\n }\r\n\r\n const [paymentPlan, setPaymentPlan] = useState({\r\n dueNow: props.totalBalance,\r\n isPayInFull: false,\r\n isPayInSplit: false,\r\n })\r\n const isSplitPay = (props.application.isSplitPay || paymentPlan.isPayInSplit);\r\n const existingOrderWithSplitPay = hasExistingOrder && isSplitPay;\r\n\r\n const hasPaymentPlan = (paymentPlan.isPayInSplit || paymentPlan.isPayInFull);\r\n const existingOrderWithFirstPaymentDue = hasExistingOrder && orderWithFirstPaymentDue;\r\n\r\n const hasBalanceDue = paymentPlan.dueNow > 0;\r\n\r\n const selectPaymentPlanForExistingOrder = (existingOrderWithFirstPaymentDue && hasBalanceDue);\r\n const canSelectPaymentPlan = (!hasExistingOrder || selectPaymentPlanForExistingOrder) && !props.examination.isMoc && props.application.candidateStatus != CandidateStatus.InviteSent && hasBalanceDue;\r\n\r\n const [selectedInstallmentPayments, setSelectedInstallmentPayments] = useState({\r\n total: getPaymentPlanAmountDueNow(),\r\n isFirstInstallmentSelected: !orderWithFirstPaymentDue,\r\n isSecondInstallmentSelected: false,\r\n })\r\n\r\n const authContext = useContext(AuthContext);\r\n\r\n const setPayInFull = () => {\r\n var updated = deepCopy(paymentPlan);\r\n updated.isPayInFull = true;\r\n updated.isPayInSplit = false;\r\n updated.dueNow = props.totalBalance;\r\n setPaymentPlan(updated);\r\n }\r\n\r\n const setSplitPayment = () => {\r\n var updated = deepCopy(paymentPlan);\r\n updated.isPayInFull = false;\r\n updated.isPayInSplit = true;\r\n updated.dueNow = props.totalBalance - props.application.installmentOptions.map(_ => _.amount).reduce((a, b) => a + b, 0);\r\n setPaymentPlan(updated);\r\n }\r\n const onPaymentChanged = (updated: Payment) => {\r\n setPayment(deepCopy(updated));\r\n }\r\n const onFormSubmitPayment = async (event: React.FormEvent) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n if (isSubmitting) {\r\n return;\r\n }\r\n\r\n event.currentTarget.classList.add('was-validated');\r\n\r\n submitPayment();\r\n }\r\n\r\n const submitPayment = async () => {\r\n setIsDisable(true);\r\n\r\n if (isSubmitting) {\r\n return;\r\n }\r\n\r\n if (payContainerRef === null || payContainerRef === undefined || !hasBalanceDue)\r\n {\r\n setIsSubmitting(true);\r\n var applicationReceipt = await abpnClient.get('/api/application/submit?examinationId=' + props.application.examinationId, authContext)\r\n\r\n props.onApplicationSubmitted(applicationReceipt);\r\n return;\r\n }\r\n\r\n if (payContainerRef.current.validate(payment) && formRef.current.checkValidity()) {\r\n formRef.current.classList.remove('was-validated');\r\n\r\n var updatedPayment = deepCopy(payment);\r\n updatedPayment = await getPaymentProcessorForPaymentType(creditCardProcessor, updatedPayment.paymentType).tokenize(updatedPayment);\r\n\r\n var isInstallmentPayment = (hasExistingOrder && isSplitPay && !existingOrderWithFirstPaymentDue)\r\n updatedPayment.amount = isInstallmentPayment ? selectedInstallmentPayments?.total : paymentPlan.dueNow;\r\n\r\n setPayment(updatedPayment);\r\n\r\n if (!updatedPayment?.IsValid) {\r\n setIsDisable(false);\r\n return;\r\n }\r\n\r\n setIsDisable(false);\r\n setIsSubmitting(true);\r\n\r\n //Installment Payments\r\n if (hasExistingOrder && props.application.candidateStatus !== CandidateStatus.Unsubmitted) {\r\n var applicationReceipt = await abpnClient.post('/api/application/makePayment?applicationId=' + props.application.applicationId, updatedPayment, authContext)\r\n\r\n setIsSubmitting(false);\r\n setIsPaymentSuccessful(applicationReceipt.isSuccessful);\r\n\r\n if (!applicationReceipt.isSuccessful) {\r\n return;\r\n }\r\n\r\n props.displayBanner();\r\n return;\r\n }\r\n\r\n var url = `/api/application/submit?examinationId=${props.application.examinationId}&isSplitPay=${paymentPlan.isPayInSplit}`\r\n var applicationReceipt = await abpnClient.post(url, updatedPayment, authContext)\r\n\r\n setIsSubmitting(false);\r\n setIsPaymentSuccessful(applicationReceipt.isSuccessful);\r\n\r\n if (!applicationReceipt.isSuccessful) {\r\n return;\r\n }\r\n\r\n props.onApplicationSubmitted(applicationReceipt);\r\n }\r\n\r\n setIsDisable(false);\r\n }\r\n\r\n const getExamLateFee = () => {\r\n var initialLateFee = props.examination.fees.find(_ => _.feeType === FeeType.lateFeeInitial)?.feeAmount;\r\n return initialLateFee ?? props.examination.fees.find(_ => _.feeType === FeeType.lateFeeMoc)?.feeAmount;\r\n }\r\n\r\n const getPaymentDeadlineDate = () => {\r\n var deadlineDate = props.application.installmentOptions[props.application.installmentOptions?.length - 1]?.dueDate ??\r\n props.examination.applicationLateDeadlineDate;\r\n\r\n return getDateWithOffset(deadlineDate);\r\n }\r\n\r\n const getLateFeeDate = (orderLineItem: OrderLineItem) => {\r\n if (orderLineItem.feeType === FeeType.lateFeeMoc || orderLineItem.feeType === FeeType.lateFeeInitial) {\r\n var formattedDate = getDateWithOffset(orderLineItem.createdDate).toLocaleDateString('en-us', {\r\n year: 'numeric',\r\n month: 'long',\r\n day: 'numeric'\r\n });\r\n return `(${formattedDate})`;\r\n }\r\n return '';\r\n }\r\n\r\n const getFeeDescription = (fee: Fee) => {\r\n var isWaived = fee.feeAmount < 0;\r\n var isDiscount = (fee.feeType == FeeType.ccAnnualFee) || \r\n (fee.feeType == FeeType.multipleExamDiscount) ||\r\n (fee.feeType == FeeType.committeeMemberDiscount) ||\r\n (fee.feeType == FeeType.committeeMemberLateFeeDiscount) ||\r\n (fee.feeType == FeeType.committeeMemberProcessingFeeDiscount) ||\r\n (fee.feeType == FeeType.committeeMemberTransferFeeDiscount);\r\n\r\n if (isWaived && !isDiscount) return `${fee.feeDescription} (Waived)`;\r\n return fee.feeDescription;\r\n }\r\n\r\n const updateInstallmentsSelectedTotal = (amount: number) => {\r\n var updated = deepCopy(selectedInstallmentPayments);\r\n updated.total = !updated.isSecondInstallmentSelected ? (updated.total + amount) : (updated.total - amount);\r\n updated.isSecondInstallmentSelected = !updated.isSecondInstallmentSelected;\r\n setSelectedInstallmentPayments(updated);\r\n }\r\n\r\n useEffect(() => {\r\n setOpenCollapse(props.isSectionOpen);\r\n }, [props.isSectionOpen]);\r\n\r\n useEffect(() => {\r\n if (openCollapse) props.onOpen();\r\n }, [openCollapse]);\r\n\r\n useEffect(() => {\r\n const resetPaymentPlan = () => {\r\n var updated = deepCopy(paymentPlan);\r\n updated.isPayInFull = false;\r\n updated.isPayInSplit = false;\r\n updated.dueNow = props.totalBalance;\r\n setPaymentPlan(updated);\r\n }\r\n\r\n resetPaymentPlan();\r\n }, [props.totalBalance]);\r\n\r\n const isFormDisabled = isDisable || (!payment.paymentType && hasBalanceDue);\r\n\r\n return (\r\n \r\n \r\n { if (!props.disabled) setOpenCollapse(!openCollapse) }}>\r\n Payment\r\n \r\n \r\n
onFormSubmitPayment(e)} ref={formRef}>\r\n {isSubmitting ? :\r\n \r\n \r\n \r\n Applicant Name\r\n \r\n \r\n {props.physician.fullName}\r\n \r\n \r\n Email\r\n \r\n \r\n {props.physician.emailAddress}\r\n \r\n \r\n Examination Requested\r\n \r\n \r\n {props.examination.title}\r\n \r\n \r\n Examination Dates\r\n \r\n \r\n {props.examinationDates}\r\n \r\n\r\n\r\n {!hasExistingOrder &&\r\n \r\n \r\n
Fees
\r\n
\r\n \r\n \r\n {props.application.fees.map(_ => \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n
{getFeeDescription(_)}${_.feeAmount}
Total${props.application?.totalFeeAmount}
\r\n
}\r\n\r\n {hasExistingOrder &&\r\n \r\n \r\n {props.application.order.orderLineItems.map((_, index) => \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n {props.application.order.completedPayments.map((_, index) => \r\n \r\n \r\n )}\r\n \r\n
{`${_.description} ${getLateFeeDate(_)}`}${_.amount}
TOTAL${props.application?.order.total}
Paid {(getDateWithOffset(_.transactionDate)).toLocaleDateString('en-us', {\r\n year: 'numeric',\r\n month: 'long',\r\n day: 'numeric'\r\n })}(${-1 * _.amount})
\r\n }\r\n\r\n {(hasExistingOrder && !orderWithFirstPaymentDue && props.application.installmentOptions?.length <= 1 && hasBalanceDue) &&\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
Pay Now
Due {getPaymentDeadlineDate().toLocaleDateString('en-us', {\r\n year: 'numeric',\r\n month: 'long',\r\n day: 'numeric'\r\n })} ${props.application.order.balance}
Total ${props.application.order.balance}
\r\n
}\r\n {(existingOrderWithSplitPay && !orderWithFirstPaymentDue && props.application.installmentOptions?.length > 1) &&\r\n \r\n \r\n Select Installment(s) to pay.\r\n \r\n \r\n \r\n {props.application.installmentOptions.map((_, index) =>\r\n \r\n updateInstallmentsSelectedTotal(_.amount)}\r\n label={Due {(getDateWithOffset(_.dueDate)).toLocaleDateString('en-us', {\r\n year: 'numeric',\r\n month: 'long',\r\n day: 'numeric'\r\n })} ${index === 0 ? _.amount + getNonExamAndApplicationFees() : _.amount}} />\r\n )}\r\n \r\n \r\n \r\n \r\n
Total ${selectedInstallmentPayments.total ?? props.application?.order.balance}
\r\n
\r\n }\r\n {canSelectPaymentPlan &&\r\n \r\n \r\n setPayInFull()}\r\n hidden={props.examination.isMoc}>Pay In Full\r\n setSplitPayment()}\r\n disabled={isPastDeadline(props.examination.applicationLateDeadlineDate) || props.application.installmentOptions.length == 0}\r\n hidden={props.examination.isMoc}>Split Payment\r\n \r\n }\r\n {((canSelectPaymentPlan && hasPaymentPlan) || (!canSelectPaymentPlan && !existingOrderWithSplitPay)) &&\r\n \r\n \r\n Amount Due\r\n \r\n \r\n \r\n \r\n \r\n \r\n {paymentPlan.isPayInSplit && props.application.installmentOptions.map((_, index) =>\r\n \r\n \r\n \r\n )}\r\n \r\n
Due {props.application.isTransferredIn ? getDateWithOffset(props.applicationDeadlineDate).toLocaleDateString() : `Now`}${paymentPlan.dueNow}
Due {getDateWithOffset(_.dueDate).toLocaleDateString('en-us', {\r\n year: 'numeric',\r\n month: 'long',\r\n day: 'numeric'\r\n })}${_.amount}
\r\n {isSplitPay &&\r\n
\r\n \r\n NOTE: ABPN will NOT automatically charge your credit card or checking account for remaining installment payments.\r\n You will receive an email with instructions for each installment.\r\n \r\n \r\n Any installment payment made after the due date must also include a ${getExamLateFee()} late fee charge.\r\n \r\n \r\n If all payments are not received by {getPaymentDeadlineDate().toLocaleDateString('en-us', {\r\n year: 'numeric',\r\n month: 'long',\r\n day: 'numeric'\r\n })} your application will be denied.\r\n \r\n
\r\n }\r\n
\r\n }\r\n\r\n {(!canSelectPaymentPlan || hasPaymentPlan) && hasBalanceDue &&\r\n \r\n null} />\r\n {payment.paymentType && payment.IsValid === false &&\r\n\r\n \r\n

Could Not Validate Payment Method. Please verify your payment method and try again

\r\n
}\r\n {isPaymentSuccessful === false &&\r\n \r\n

The provided payment method failed. Please verify your payment method and try again

\r\n
}\r\n\r\n
\r\n }\r\n\r\n {!isSubmitting &&\r\n
\r\n \r\n
\r\n }\r\n \r\n
\r\n }\r\n \r\n
\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default PaymentCard;\r\n","import React, { useEffect } from \"react\";\r\nimport { useState, useContext } from \"react\";\r\nimport { Card, Button, Col, Collapse, Form, Row} from \"react-bootstrap\";\r\nimport { AuthContext } from \"../../Auth/AuthProvider\";\r\nimport { MedicalLicense } from \"../../Physician/Models/MedicalLicense\";\r\nimport { abpnClient } from \"../../../Services/AbpnClient\";\r\nimport { StateWithCountryLookupItem } from \"../../Shared/Models/StateWithCountryLookupItem\";\r\nimport { deepCopy } from \"../../Shared/Utility/DeepCopy\";\r\nimport { MedicalLicenseList } from \"../../Shared/Components/MedicalLicenseList\";\r\nimport AbpnSpinner from \"../../Shared/Components/AbpnSpinner\";\r\nimport { getDateWithOffset } from \"../../Shared/Utility/GetDateWithOffset\";\r\n\r\ninterface IProps {\r\n medicalLicenses: Array;\r\n states: Array;\r\n examStartDate: string;\r\n isSectionOpen: boolean;\r\n requiresUnrestrictedLicense: boolean;\r\n onContinue: () => void;\r\n onOpen: () => void;\r\n disabled: boolean;\r\n}\r\n\r\nexport function MedicalLicenseInformation(props: IProps) {\r\n const [openCollapse, setOpenCollapse] = useState(props.isSectionOpen);\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [medicalLicenses, setMedicalLicenses] = useState>(props.medicalLicenses);\r\n\r\n const authContext = useContext(AuthContext);\r\n\r\n const validate = (medicalLicenses: Array) : boolean => {\r\n medicalLicenses.forEach((medicalLicense: MedicalLicense) => {\r\n medicalLicense.validationMessage = new Array();\r\n \r\n if (medicalLicense.medicalLicenseId === 0 && getDateWithOffset(medicalLicense.expirationDate) < new Date())\r\n {\r\n medicalLicense.validationMessage.push(\"Can not add expired licenses.\");\r\n }\r\n if (!medicalLicense.licenseNumber?.trim()) {\r\n medicalLicense.validationMessage.push(\" License number is required.\");\r\n }\r\n if (!medicalLicense.stateId) {\r\n medicalLicense.validationMessage.push(\" State is required\");\r\n }\r\n if (!Date.parse(medicalLicense.expirationDate)){\r\n medicalLicense.validationMessage.push(\" Expiration date invalid. Expected format: MM/DD/YYYY\");\r\n }\r\n if (medicalLicense.validationMessage.length > 0){\r\n medicalLicense.isEditing = true;\r\n }\r\n })\r\n setMedicalLicenses(deepCopy(medicalLicenses));\r\n return !medicalLicenses.some(_ => _.validationMessage?.length > 0);\r\n }\r\n\r\n const saveAllMedicalLicenses = (medicalLicensesToUpdate: Array) => {\r\n if (validate(medicalLicensesToUpdate))\r\n {\r\n setIsLoading(true);\r\n const url = \"/api/Physician/SaveMedicalLicenses/\";\r\n abpnClient.post>(url, medicalLicensesToUpdate, authContext).then(result => {\r\n result.forEach((license: MedicalLicense) => { license.isEditing = false; license.isNew = false });\r\n setMedicalLicenses(result);\r\n setIsLoading(false);\r\n props.onContinue();\r\n });\r\n } \r\n }\r\n\r\n const addNewMedicalLicense = () => {\r\n var newMedicalLicense = new MedicalLicense();\r\n newMedicalLicense.isNew = true;\r\n newMedicalLicense.isEditing = true;\r\n var newList = deepCopy(medicalLicenses);\r\n newList.push(newMedicalLicense);\r\n setMedicalLicenses(newList);\r\n }\r\n\r\n const removeMedicalLicense = (medicalLicense: MedicalLicense) => {\r\n var newList = deepCopy(medicalLicenses.filter(x => x.medicalLicenseId !== medicalLicense.medicalLicenseId));\r\n setMedicalLicenses(newList);\r\n }\r\n\r\n const updateMedicalLicense = (medicalLicense: MedicalLicense) => {\r\n var updated = deepCopy(medicalLicenses)\r\n var index = updated.findIndex(_ => _.medicalLicenseId == medicalLicense.medicalLicenseId);\r\n updated[index] = medicalLicense;\r\n saveAllMedicalLicenses(updated);\r\n }\r\n\r\n const canAddNewLicense = () => {\r\n var newLicense = medicalLicenses.find(_ => _.isNew);\r\n return newLicense ? false : true;\r\n }\r\n\r\n const areLicensesValid = () => {\r\n return medicalLicenses.filter(_ => _.validationMessage?.length > 0).length === 0;\r\n }\r\n\r\n const saveAndContinue = () => {\r\n saveAllMedicalLicenses(medicalLicenses);\r\n }\r\n\r\n useEffect(() => {\r\n setOpenCollapse(props.isSectionOpen);\r\n }, [props.isSectionOpen]);\r\n\r\n useEffect(() => {\r\n if (openCollapse) props.onOpen();\r\n }, [openCollapse]);\r\n\r\n if (props.medicalLicenses == null) return ;\r\n return (\r\n \r\n \r\n {if (!props.disabled) setOpenCollapse(!openCollapse)}}>\r\n Medical Licenses\r\n \r\n \r\n \r\n \r\n
\r\n removeMedicalLicense(medicalLicense)}\r\n updateMedicalLicense={(medicalLicense: MedicalLicense) => updateMedicalLicense(medicalLicense)} />\r\n \r\n \r\n \r\n \r\n \r\n \r\n {isLoading ? : }\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n );\r\n\r\n}","import React, { useEffect, useState } from \"react\";\r\nimport { Card, Button, Form, Col, Collapse, Row } from \"react-bootstrap\";\r\nimport ReactHtmlParser from 'react-html-parser';\r\nimport AbpnSpinner from \"../../Shared/Components/AbpnSpinner\";\r\n\r\ninterface IProps {\r\n onApplicationAttestedToggled: () => void;\r\n onContinue: () => void;\r\n hasAttested: boolean;\r\n isSectionOpen: boolean\r\n attestationContent: string\r\n onOpen: () => void;\r\n disabled: boolean;\r\n isLoading?: boolean;\r\n}\r\n\r\nexport function AttestationStatement(props: IProps) {\r\n const [openCollapse, setOpenCollapse] = useState(props.isSectionOpen);\r\n\r\n const onSubmit = async (e: React.FormEvent) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n e.currentTarget.classList.add('was-validated');\r\n if (e.currentTarget.checkValidity()) {\r\n e.currentTarget.classList.remove('was-validated');\r\n props.onContinue();\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n setOpenCollapse(props.isSectionOpen);\r\n }, [props.isSectionOpen]);\r\n\r\n useEffect(() => {\r\n if (openCollapse) props.onOpen();\r\n }, [openCollapse]);\r\n\r\n return (\r\n \r\n \r\n {if (!props.disabled) setOpenCollapse(!openCollapse)}}>\r\n Application Attestation\r\n \r\n \r\n \r\n \r\n
\r\n
{ReactHtmlParser(props.attestationContent)}
\r\n Attestation\r\n \r\n \r\n \r\n props.onApplicationAttestedToggled()} />\r\n I hereby declare under penalty of perjury that the information given in this application is true and correct to the best of my knowledge and belief. I intend to be legally bound by the foregoing.\r\n Please attest to the above before continuing\r\n \r\n \r\n \r\n {props.isLoading ? : }\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default AttestationStatement;","import React, { useEffect, useState } from \"react\";\r\nimport { Card, Button, Form, Col, Collapse, Row, Alert } from \"react-bootstrap\";\r\nimport AbpnSpinner from \"../../Shared/Components/AbpnSpinner\";\r\nimport { deepCopy } from \"../../Shared/Utility/DeepCopy\";\r\n\r\ninterface IProps {\r\n isAdaRequested: boolean\r\n isNmaRequested: boolean\r\n isSectionOpen: boolean\r\n isArticleBased: boolean\r\n onContinue: (isAdaRequested: boolean, isNmaRequested: boolean) => void;\r\n onOpen: () => void;\r\n disabled: boolean;\r\n isLoading?: boolean;\r\n}\r\n\r\ninterface ISelection {\r\n isAdaRequested: boolean;\r\n isNmaRequested: boolean;\r\n}\r\n\r\nexport function TestingOptions(props: IProps) {\r\n const [openCollapse, setOpenCollapse] = useState(props.isSectionOpen);\r\n const [selection, setSelection] = useState({\r\n isAdaRequested: !props.isArticleBased && props.isAdaRequested,\r\n isNmaRequested: !props.isArticleBased && props.isNmaRequested\r\n });\r\n\r\n const [errorMessage, setErrorMessage] = useState(\"\");\r\n\r\n const isNoAccommodationRequested = () => {\r\n return selection.isAdaRequested === false && selection.isNmaRequested === false;\r\n }\r\n\r\n const onSubmit = async (e: React.FormEvent) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n if (validateSelection()) {\r\n if (selection.isAdaRequested === null) selection.isAdaRequested = false;\r\n if (selection.isNmaRequested === null) selection.isNmaRequested = false;\r\n\r\n props.onContinue(selection.isAdaRequested, selection.isNmaRequested);\r\n }\r\n }\r\n\r\n const validateSelection = () => {\r\n if (!selection.isNmaRequested && !selection.isAdaRequested && !isNoAccommodationRequested()) {\r\n setErrorMessage(\"You must choose a selection.\")\r\n return false;\r\n }\r\n setErrorMessage(\"\");\r\n return true;\r\n }\r\n const toggleAda = () => {\r\n var updated = deepCopy(selection);\r\n updated.isAdaRequested = !updated.isAdaRequested;\r\n setSelection(updated);\r\n }\r\n const toggleNma = () => {\r\n var updated = deepCopy(selection);\r\n updated.isNmaRequested = !updated.isNmaRequested;\r\n setSelection(updated);\r\n }\r\n\r\n const toggleNoAccommodation = () => {\r\n var updated = deepCopy(selection);\r\n var noAccommodation = isNoAccommodationRequested();\r\n\r\n updated.isAdaRequested = noAccommodation ? null : false;\r\n updated.isNmaRequested = noAccommodation ? null : false;\r\n setSelection(updated);\r\n }\r\n\r\n useEffect(() => {\r\n setOpenCollapse(props.isSectionOpen);\r\n }, [props.isSectionOpen]);\r\n\r\n useEffect(() => {\r\n if (openCollapse) props.onOpen();\r\n }, [openCollapse]);\r\n\r\n return (\r\n \r\n \r\n {if (!props.disabled) setOpenCollapse(!openCollapse)}}>\r\n Testing Options\r\n \r\n \r\n \r\n \r\n
onSubmit(e)}>\r\n {!props.isArticleBased ?\r\n \r\n \r\n \r\n toggleNoAccommodation()} />\r\n I do not request accommodations.\r\n \r\n \r\n \r\n \r\n toggleAda()} />\r\n I have a disability and request accommodations during the examination.\r\n
\r\n NOTE: The Board will contact you by email with a link to the application for testing accommodations and submission deadline information.\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n toggleNma()} />\r\n I am pregnant or a nursing mother and request accommodations.\r\n \r\n \r\n
\r\n :\r\n

\r\n Qualifications for test accommodations for applicants with disabilities can be found on the ABPN website policies section. \r\n

}\r\n \r\n {errorMessage && {errorMessage}}\r\n {props.isLoading ? : }\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n );\r\n}\r\nexport default TestingOptions;","import { PathwayMethod } from \"./PathwayMethod\";\r\n\r\nexport default class SubspecialtyTraining {\r\n subspecialtyTrainingId: number;\r\n trainingProgramId: number;\r\n applicationId: number;\r\n trainingInstitutionName: string;\r\n isEditing: boolean;\r\n startDate: string;\r\n endDate: string;\r\n monthsCredit: number;\r\n isPartTime: boolean;\r\n percentTimeForPractice: number;\r\n practiceCertificationBoard: string;\r\n practiceCertificationDate: string;\r\n practiceLocation: string;\r\n practiceTime: string;\r\n pathwayMethod: PathwayMethod;\r\n}\r\n\r\nexport enum AlternativePathwayPracticeOption {\r\n \"An average of at least 17% of their post-training clinical practice time spent in the practice of NCC (at least 7 hours per week) for the past 6 years.*\" = 1,\r\n \"An average of at least 25% of their post-training clinical practice time spent in the practice of NCC (at least 10 hours per week) for the past 4 years.*\" = 2,\r\n \"An average of at least 33% of their post-training clinical practice time spent in the practice of NCC (at least 13 hours per week) for the past 3 years.*\" = 3,\r\n \"An average of at least 50% of their post-training clinical practice time spent in the practice of NCC (at least 20 hours per week) for the past 2 years.*\" = 4,\r\n \"An average of at least 25% of their total post-training professional time spent in the practice of NCC (at least 10 hours per week) for the past 4 years.**\" = 5\r\n}\r\n","\r\nexport enum PathwayMethod {\r\n Grandfathered = 1,\r\n Fellowship = 2,\r\n Practice = 3,\r\n OtherBoard = 4\r\n}","import React, { useContext, useEffect } from \"react\";\r\nimport { useState } from \"react\";\r\nimport { Button, Card, Col, Collapse, Form, FormGroup, Row } from \"react-bootstrap\";\r\nimport InputMask from 'react-input-mask';\r\nimport { abpnClient } from \"../../../Services/AbpnClient\";\r\nimport { AuthContext } from \"../../Auth/AuthProvider\";\r\nimport SubspecialtyTraining, { AlternativePathwayPracticeOption } from \"../../Physician/Models/SubspecialtyTraining\";\r\nimport { PathwayMethod } from \"../../Physician/Models/PathwayMethod\";\r\nimport { deepCopy } from \"../../Shared/Utility/DeepCopy\";\r\nimport Examination, { KnownExaminationDefinitions, PracticePathwayOptionLookupItem } from \"../Models/Examination\";\r\nimport { LookupItem } from \"../../Shared/Models/LookupItem\";\r\nimport { ValidatorHelper } from \"../../Shared/ValidatorHelper\";\r\nimport AbpnSpinner from \"../../Shared/Components/AbpnSpinner\";\r\nimport { getDateWithOffset } from \"../../Shared/Utility/GetDateWithOffset\";\r\n\r\ninterface IProps {\r\n isSectionOpen: boolean;\r\n onSave: (subSpecialtyTraining: Array) => void;\r\n examination: Examination;\r\n applicationId: number;\r\n subSpecialtyTrainingList: Array;\r\n onOpen: () => void;\r\n disabled: boolean;\r\n}\r\n\r\nexport function TrainingRequirements(props: IProps) {\r\n const [openCollapse, setOpenCollapse] = useState(props.isSectionOpen);\r\n const [subSpecialtyTraining, setSubspecialtyTraining] = useState(new SubspecialtyTraining());\r\n const [errorMessage, setErrorMessage] = useState(\"\");\r\n const [isLoading, setIsLoading] = useState(false);\r\n\r\n const alternatePathwayEndDate = getDateWithOffset(props.examination.alternativePathwayEndDate);\r\n const isInAlternativePathwayPeriod = alternatePathwayEndDate && alternatePathwayEndDate >= new Date();\r\n const hasOnePathwayOption = props.examination.pathwayOptions.length == 1;\r\n const authContext = useContext(AuthContext);\r\n\r\n var endDateFormElement = React.createRef();\r\n var practiceCertDateElement = React.createRef();\r\n const practiceBoardId: string = \"practiceBoard\"\r\n var practiceBoardElement: HTMLInputElement = null;\r\n\r\n useEffect(() => {\r\n let existing = props.subSpecialtyTrainingList.find(_ => _.applicationId === props.applicationId);\r\n if (existing) {\r\n setSubspecialtyTraining(existing);\r\n }\r\n if (hasOnePathwayOption) {\r\n let updated = deepCopy(subSpecialtyTraining);\r\n updated.pathwayMethod = props.examination.pathwayOptions[0].id;\r\n setSubspecialtyTraining(updated);\r\n }\r\n }, [props.subSpecialtyTrainingList])\r\n\r\n const saveSubspecialtyTraining = (e: React.FormEvent) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n setErrorMessage(\"\");\r\n\r\n e.currentTarget.classList.add('was-validated');\r\n if (validateDates(subSpecialtyTraining) && e.currentTarget.checkValidity()) {\r\n e.currentTarget.classList.remove('was-validated');\r\n\r\n var training = deepCopy(subSpecialtyTraining);\r\n setIsLoading(true);\r\n const url = \"/api/Physician/SaveSubspecialtyTraining?examinationId=\" + props.examination.examinationId;\r\n abpnClient.post>(url, training, authContext).then((data: Array) => {\r\n props.onSave(data);\r\n setIsLoading(false);\r\n });\r\n }\r\n }\r\n\r\n const resetTrainingValues = (subSpecialtyTraining: SubspecialtyTraining) => {\r\n if (subSpecialtyTraining.pathwayMethod != PathwayMethod.Practice) {\r\n subSpecialtyTraining.practiceTime = null;\r\n }\r\n if (subSpecialtyTraining.pathwayMethod != PathwayMethod.OtherBoard) {\r\n subSpecialtyTraining.practiceCertificationDate = null;\r\n subSpecialtyTraining.trainingInstitutionName = null;\r\n }\r\n if (subSpecialtyTraining.pathwayMethod != PathwayMethod.Fellowship) {\r\n subSpecialtyTraining.trainingInstitutionName = null;\r\n subSpecialtyTraining.startDate = null;\r\n subSpecialtyTraining.endDate = null;\r\n }\r\n return subSpecialtyTraining;\r\n }\r\n\r\n const validateDates = (subspecialty: SubspecialtyTraining) => {\r\n var isValid = true;\r\n if (subspecialty.pathwayMethod === PathwayMethod.Fellowship) {\r\n\r\n ValidatorHelper.clearCustomValidation(endDateFormElement.current);\r\n if (!Date.parse(subspecialty.startDate) || !Date.parse(subspecialty.endDate)) isValid = false;\r\n\r\n if (getDateWithOffset(subspecialty.endDate) < getDateWithOffset(subspecialty.startDate)) {\r\n ValidatorHelper.setCustomValidationWithFeedback(endDateFormElement.current, \"Must be after start date.\")\r\n isValid = false;\r\n }\r\n }\r\n\r\n if (subspecialty.pathwayMethod === PathwayMethod.OtherBoard) {\r\n practiceBoardElement = document.getElementById(practiceBoardId) as HTMLInputElement;\r\n\r\n ValidatorHelper.clearCustomValidation(practiceBoardElement);\r\n if (!subspecialty.practiceCertificationBoard) {\r\n ValidatorHelper.setCustomValidationWithFeedback(practiceBoardElement, \"Must select an organization.\");\r\n isValid = false;\r\n }\r\n \r\n ValidatorHelper.clearCustomValidation(practiceCertDateElement.current);\r\n if (!Date.parse(subspecialty.practiceCertificationDate)) {\r\n ValidatorHelper.setCustomValidationWithFeedback(practiceCertDateElement.current, \"Must be a valid date. Expected Format: mm/dd/yyyy\")\r\n isValid = false;\r\n }\r\n }\r\n if (subspecialty.pathwayMethod === PathwayMethod.Practice) {\r\n if (!subSpecialtyTraining.practiceTime) {\r\n setErrorMessage(\"Must select a training time\")\r\n }\r\n }\r\n return isValid;\r\n }\r\n\r\n\r\n\r\n const updateProgramName = (value: string) => {\r\n var updated = deepCopy(subSpecialtyTraining);\r\n updated.trainingInstitutionName = value;\r\n setSubspecialtyTraining(updated);\r\n }\r\n\r\n const updatePracticeCertificationBoard = (value: string) => {\r\n var updated = deepCopy(subSpecialtyTraining);\r\n updated.practiceCertificationBoard = value;\r\n setSubspecialtyTraining(updated);\r\n }\r\n\r\n const updatePracticeLocation = (value: string) => {\r\n var updated = deepCopy(subSpecialtyTraining);\r\n updated.practiceLocation = value;\r\n setSubspecialtyTraining(updated);\r\n }\r\n\r\n const updateStartDate = (e: React.ChangeEvent) => {\r\n var updated = deepCopy(subSpecialtyTraining);\r\n updated.startDate = e.target.value;\r\n\r\n if (Date.parse(e.target.value)) {\r\n updated.startDate = getDateWithOffset(e.target.value).toJSON();\r\n }\r\n\r\n setSubspecialtyTraining(updated);\r\n }\r\n\r\n const updateEndDate = (e: React.ChangeEvent) => {\r\n var updated = deepCopy(subSpecialtyTraining);\r\n updated.endDate = e.target.value;\r\n\r\n if (Date.parse(e.target.value)) {\r\n updated.endDate = getDateWithOffset(e.target.value).toJSON();\r\n }\r\n setSubspecialtyTraining(updated);\r\n }\r\n\r\n const updatePracticeCertificationDate = (e: React.ChangeEvent) => {\r\n var updated = deepCopy(subSpecialtyTraining);\r\n updated.practiceCertificationDate = e.target.value;\r\n\r\n if (Date.parse(e.target.value)) {\r\n updated.practiceCertificationDate = getDateWithOffset(e.target.value).toJSON();\r\n }\r\n setSubspecialtyTraining(updated);\r\n }\r\n\r\n const updateIsPartTime = (value: boolean) => {\r\n var updated = deepCopy(subSpecialtyTraining);\r\n updated.isPartTime = value;\r\n setSubspecialtyTraining(updated);\r\n }\r\n\r\n const updatePracticeTime = (selection: PracticePathwayOptionLookupItem) => {\r\n var updated = deepCopy(subSpecialtyTraining);\r\n updated.practiceTime = selection.name;\r\n switch (selection.id) {\r\n case AlternativePathwayPracticeOption[\"An average of at least 17% of their post-training clinical practice time spent in the practice of NCC (at least 7 hours per week) for the past 6 years.*\"]:\r\n updated.percentTimeForPractice = 17;\r\n break;\r\n case AlternativePathwayPracticeOption[\"An average of at least 25% of their post-training clinical practice time spent in the practice of NCC (at least 10 hours per week) for the past 4 years.*\"]:\r\n updated.percentTimeForPractice = 25;\r\n break;\r\n case AlternativePathwayPracticeOption[\"An average of at least 33% of their post-training clinical practice time spent in the practice of NCC (at least 13 hours per week) for the past 3 years.*\"]:\r\n updated.percentTimeForPractice = 33;\r\n break;\r\n case AlternativePathwayPracticeOption[\"An average of at least 50% of their post-training clinical practice time spent in the practice of NCC (at least 20 hours per week) for the past 2 years.*\"]:\r\n updated.percentTimeForPractice = 50;\r\n break;\r\n case AlternativePathwayPracticeOption[\"An average of at least 25% of their total post-training professional time spent in the practice of NCC (at least 10 hours per week) for the past 4 years.**\"]:\r\n updated.percentTimeForPractice = 25;\r\n break;\r\n default:\r\n break;\r\n }\r\n setSubspecialtyTraining(updated);\r\n }\r\n\r\n const formatDefaultValue = (dateString: string) => {\r\n if (!dateString) return \"\";\r\n var date = getDateWithOffset(dateString);\r\n \r\n if (date == null) return \"\";\r\n var year = date.getFullYear();\r\n\r\n var month = (1 + date.getMonth()).toString();\r\n month = month.length > 1 ? month : '0' + month;\r\n\r\n var day = date.getDate().toString();\r\n day = day.length > 1 ? day : '0' + day;\r\n\r\n return month + '/' + day + '/' + year;\r\n }\r\n\r\n const getPathwayOptionLabel = (pathway: LookupItem) => {\r\n if (pathway.id === PathwayMethod.OtherBoard) return \"Certified By Another Organization\"\r\n if (pathway.id === PathwayMethod.Practice) return \"Clinical Practice\"\r\n return pathway.name;\r\n }\r\n\r\n const getDocumentationText = () => {\r\n if (isInAlternativePathwayPeriod) {\r\n return \"Documentation of practice pathway is required upon request of the ABPN Credentials Department and prior to approval of application.\"\r\n }\r\n return \"Documentation of fellowship training is required upon request of the ABPN Credentials Department and prior to approval of application.\"\r\n }\r\n const getGeneralRequirementsText = () => {\r\n if (isInAlternativePathwayPeriod && props.examination.examinationDefinitionId == KnownExaminationDefinitions.NeurocriticalCare) {\r\n return \"Applicant must have completed a fellowship, a clinical practice, or been certified by another board during the practice pathway period of six years (2021-2026 examination administrations)\"\r\n }\r\n if (isInAlternativePathwayPeriod && props.examination.examinationDefinitionId == KnownExaminationDefinitions.BrainInjuryMedicine) {\r\n return \"Applicant must have completed a fellowship or clinical practice during the practice pathway period (2014-2022 examination administrations)\"\r\n }\r\n return \"\"\r\n }\r\n const getFellowshipRequirementText = () => {\r\n var startDateYear = getDateWithOffset(props.examination.startDate).getFullYear();\r\n\r\n if (isInAlternativePathwayPeriod && props.examination.examinationDefinitionId == KnownExaminationDefinitions.NeurocriticalCare) {\r\n return `Applicant must have completed a fellowship no later than July 31, ${startDateYear} in ${props.examination.certificationName} (UCNS, CAST, or other non-ACGME accredited fellowship).`;\r\n }\r\n\r\n if (isInAlternativePathwayPeriod && props.examination.examinationDefinitionId == KnownExaminationDefinitions.BrainInjuryMedicine) {\r\n return `Applicant must have completed a fellowship no later than July 31, ${startDateYear} in ${props.examination.certificationName}.`;\r\n }\r\n return `Applicant must have completed an ACGME-accredited fellowship in ${props.examination.certificationName} no later than July 31, ${startDateYear}.`;\r\n }\r\n\r\n const getNotesSection = () => {\r\n if (isInAlternativePathwayPeriod && props.examination.examinationDefinitionId == KnownExaminationDefinitions.NeurocriticalCare) {\r\n return \r\n * This calculation is based on an average work week of 40 hours. Physicians whose total practice exceeds 40 hours per week may still use the 40 hours number as the denominator of their % calculation.\r\n ** This approach specifically applies to academic program directors, administrators, or researchers, and provides them a pathway to qualification.\r\n \r\n }\r\n return null\r\n }\r\n\r\n const updatePathwayMethod = (pathwayMethodId: number) => {\r\n var updated = deepCopy(subSpecialtyTraining);\r\n updated.pathwayMethod = props.examination.pathwayOptions.find(_ => _.id == pathwayMethodId).id;\r\n resetTrainingValues(updated);\r\n setSubspecialtyTraining(updated);\r\n }\r\n\r\n useEffect(() => {\r\n setOpenCollapse(props.isSectionOpen);\r\n }, [props.isSectionOpen]);\r\n\r\n useEffect(() => {\r\n if (openCollapse) props.onOpen();\r\n }, [openCollapse]);\r\n\r\n return (\r\n \r\n \r\n {if (!props.disabled) setOpenCollapse(!openCollapse)}}>\r\n Training\r\n \r\n \r\n
saveSubspecialtyTraining(e)}>\r\n \r\n \r\n {getGeneralRequirementsText()}\r\n {getDocumentationText()}\r\n \r\n \r\n \r\n \r\n {subSpecialtyTraining.pathwayMethod === PathwayMethod.Fellowship &&\r\n \r\n \r\n {getFellowshipRequirementText()}\r\n \r\n \r\n \r\n Fellowship Program*\r\n Enter name and location of program\r\n updateProgramName(e.target.value)}\r\n required />\r\n \r\n \r\n \r\n \r\n Start*\r\n updateStartDate(e)}>\r\n {(inputProps: any) => {\r\n return \r\n }}\r\n \r\n \r\n \r\n \r\n \r\n End*\r\n updateEndDate(e)}>\r\n {(inputProps: any) => {\r\n return \r\n }}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Attendance*\r\n updateIsPartTime(true)}\r\n className=\"ml-1 mt-3\" />\r\n \r\n \r\n \r\n updateIsPartTime(false)}\r\n className=\"ml-1 mt-3\" />\r\n \r\n \r\n \r\n \r\n \r\n }\r\n {subSpecialtyTraining.pathwayMethod === PathwayMethod.OtherBoard &&\r\n \r\n \r\n \r\n Organization Name*\r\n \r\n \r\n \r\n \r\n Certification Date*\r\n updatePracticeCertificationDate(e)}>\r\n {(inputProps: any) => {\r\n return \r\n }}\r\n \r\n \r\n \r\n \r\n \r\n }\r\n {subSpecialtyTraining.pathwayMethod === PathwayMethod.Practice &&\r\n \r\n \r\n \r\n Institution Name*\r\n Enter name of program\r\n updateProgramName(e.target.value)}\r\n required />\r\n \r\n \r\n \r\n \r\n Location*\r\n Enter location of program\r\n updatePracticeLocation(e.target.value)}\r\n required />\r\n \r\n \r\n \r\n \r\n Start*\r\n updateStartDate(e)}>\r\n {(inputProps: any) => {\r\n return \r\n }}\r\n \r\n \r\n \r\n \r\n \r\n End*\r\n updateEndDate(e)}>\r\n {(inputProps: any) => {\r\n return \r\n }}\r\n \r\n \r\n \r\n \r\n \r\n \r\n Training Time*\r\n {props.examination.practicePathwayOptions?.map(_ => {\r\n return updatePracticeTime(_)}\r\n label={_.name}\r\n id={_.name}\r\n name=\"practiceTime\"\r\n defaultChecked={subSpecialtyTraining.practiceTime === _.name}\r\n value={_.name} />\r\n })}\r\n {errorMessage}\r\n {getNotesSection()}\r\n \r\n \r\n \r\n }\r\n \r\n \r\n \r\n \r\n \r\n {isLoading ? : }\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n );\r\n\r\n}","import { Alert,Button,Col,Container, Row } from \"react-bootstrap\";\r\nimport { Link } from \"react-router-dom\";\r\n\r\nexport function ApplicationReceived() {\r\n return (\r\n \r\n

ABPN Application Submission Confirmation

\r\n
\r\n \r\n \r\n Thank you. Your ABPN examination application was submitted successfully. If you made a payment, a receipt has been emailed to you. \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nexport default ApplicationReceived;","export const CnpTypes: { [key: number]: string } = {\r\n 1: \"General\",\r\n 2: \"EEG\",\r\n 3: \"EMG\",\r\n};","import { useEffect, useState } from \"react\";\r\nimport { Form } from \"react-bootstrap\";\r\nimport { CnpTypes } from \"../Models/CnpTypes\";\r\n\r\ninterface IProps {\r\n cnpType: number\r\n cnpTypeUpdated: (cnpType: number) => void\r\n}\r\n\r\nexport function CnpOptions(props: IProps) {\r\n\r\n let [cnpType, setCnpType] = useState(props.cnpType);\r\n\r\n useEffect(() => {\r\n setCnpType(props.cnpType);\r\n })\r\n\r\n const updateCnpType = (value: number) => {\r\n let newValue = value == cnpType ? null : value;\r\n\r\n setCnpType(newValue);\r\n props.cnpTypeUpdated(newValue);\r\n }\r\n\r\n return (\r\n \r\n Select one*\r\n {Object.keys(CnpTypes).map(key =>\r\n \r\n updateCnpType(parseInt(key))} />\r\n {CnpTypes[parseInt(key)]}\r\n \r\n )}\r\n \r\n );\r\n}\r\nexport default CnpOptions;","import React, { Fragment, useEffect, useContext, useState } from \"react\";\r\nimport { Card, Button, Form, Col, Collapse, Row, Alert } from \"react-bootstrap\";\r\nimport { abpnClient } from \"../../../Services/AbpnClient\";\r\nimport { AuthContext } from \"../../Auth/AuthProvider\";\r\nimport { Certificate, CertificateStatus } from \"../../Physician/Models/Certificate\";\r\nimport AbpnSpinner from \"../../Shared/Components/AbpnSpinner\";\r\nimport { deepCopy } from \"../../Shared/Utility/DeepCopy\";\r\nimport ApplicationModel from \"../Models/ApplicationModel\";\r\nimport { ExaminationModule, KnownCertifications, ModuleType } from \"../Models/Examination\";\r\nimport CnpOptions from \"./CnpOptions\";\r\n\r\ninterface IProps {\r\n isSectionOpen: boolean;\r\n modules: Array;\r\n onContinue: (moduleCertificationKeys: Array, cnpType: number) => void;\r\n moduleTypes: Array;\r\n certificates: Array;\r\n examCertificationIds: Array;\r\n application: ApplicationModel;\r\n onOpen: () => void;\r\n disabled: boolean;\r\n isLoading?: boolean;\r\n}\r\n\r\nexport function Modules(props: IProps) {\r\n const physicianInactivePrimaryCertIds = props.certificates.filter(_ => _.isPrimary && _.certificateStatus === CertificateStatus.Inactive)?.map(_ => _.certificationId);\r\n\r\n const isCertificationAvailable = (certificationId: number) => {\r\n return availableCertificationIds.some(_ => _ == certificationId);\r\n }\r\n\r\n const isCertificationIdRequiredModuleType = (certificationId: number) => {\r\n return physicianInactivePrimaryCertIds.some(_ => _ == certificationId);\r\n }\r\n\r\n const isExistingSelectedModuleType = (certificationId: number) => {\r\n return props.application.modularCertificationIds?.some(_ => _ == certificationId);\r\n }\r\n\r\n const filterAvailableModules = () => {\r\n var availablePhysicianModules = props.moduleTypes.filter(_ => isCertificationAvailable(_.certificationId));\r\n var existingSelectedModules = props.moduleTypes.filter(_ => isExistingSelectedModuleType(_.certificationId));\r\n var availableModules = availablePhysicianModules.concat(existingSelectedModules);\r\n var filteredExamModules = availableModules.filter(_ => props.examCertificationIds.includes(Number(_.certificationId)));\r\n\r\n return props.modules.filter(_ => filteredExamModules.some(x => x.moduleTypeId == _.moduleTypeId));\r\n }\r\n\r\n const requiredCertificationIds = props.moduleTypes.filter(_ => isCertificationIdRequiredModuleType(_.certificationId))?.map(_ => _.certificationId);\r\n\r\n const [moduleSelections, setModuleSelections] = useState>([]);\r\n const [availableCertificationIds, setAvailableCertificationIds] = useState>([]);\r\n const [cnpType, setCnpType] = useState(props.application.cnpType);\r\n const [openCollapse, setOpenCollapse] = useState(props.isSectionOpen);\r\n const [errorMessages, setErrorMessages] = useState([]);\r\n\r\n const authContext = useContext(AuthContext);\r\n\r\n useEffect(() => {\r\n const setDefaultModuleSelections = () => {\r\n if (props.application.modularCertificationIds !== null) {\r\n setModuleSelections(props.application.modularCertificationIds);\r\n return;\r\n } \r\n\r\n if (requiredCertificationIds !== null) setModuleSelections(requiredCertificationIds);\r\n }\r\n\r\n const getAvailableCertificationIds = () => {\r\n abpnClient.get>(\"/api/application/availableModules\", authContext).then(result => {\r\n setAvailableCertificationIds(result);\r\n })\r\n }\r\n setDefaultModuleSelections();\r\n getAvailableCertificationIds();\r\n }, []);\r\n\r\n const onSubmit = async (e: React.FormEvent) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n if (validateSelection(moduleSelections)) {\r\n props.onContinue(moduleSelections, cnpType);\r\n }\r\n }\r\n\r\n const validateSelection = (selections: number[]) => {\r\n let newErrorMessages = [];\r\n\r\n if (selections.length <= 1 || selections.length >= 4) {\r\n newErrorMessages.push(\"You must select 2 or 3 certifications\");\r\n }\r\n\r\n const isCnpSelected = selections.some(certificationId => certificationId == KnownCertifications.ClinicalNeurophysiology);\r\n\r\n if (isCnpSelected && !cnpType) {\r\n newErrorMessages.push(\"You must select a CNP focus if you've selected the CNP module\");\r\n }\r\n\r\n setErrorMessages(newErrorMessages);\r\n return newErrorMessages.length === 0;\r\n }\r\n\r\n const updateModuleSelection = (certificationId: number) => {\r\n var updated = deepCopy(moduleSelections);\r\n var index = updated.indexOf(certificationId);\r\n\r\n if (index >= 0) {\r\n updated.splice(index, 1);\r\n if (cnpType && certificationId === KnownCertifications.ClinicalNeurophysiology) {\r\n setCnpType(null);\r\n }\r\n setModuleSelections(updated);\r\n return;\r\n }\r\n updated.push(certificationId);\r\n setModuleSelections(updated);\r\n }\r\n\r\n const updateCnpType = (updatedCnpType: number) => {\r\n setCnpType(updatedCnpType);\r\n\r\n var index = moduleSelections.indexOf(KnownCertifications.ClinicalNeurophysiology);\r\n if ((updatedCnpType && index < 0) || (!updatedCnpType && index >= 0)) {\r\n updateModuleSelection(KnownCertifications.ClinicalNeurophysiology);\r\n }\r\n }\r\n\r\n const isChecked = (module: ExaminationModule) => {\r\n if (isRequired(module)) return true;\r\n\r\n var certificationId = props.moduleTypes.find(_ => _.moduleTypeId == module.moduleTypeId).certificationId\r\n return moduleSelections.some(_ => _ == certificationId);\r\n }\r\n\r\n const isRequired = (module: ExaminationModule) => {\r\n var certificationId = props.moduleTypes.find(_ => _.moduleTypeId == module.moduleTypeId).certificationId;\r\n return requiredCertificationIds.some(_ => _ == certificationId);\r\n }\r\n\r\n const isCnp = (module: ExaminationModule) => {\r\n return props.moduleTypes.some(_ => _.moduleTypeId == module.moduleTypeId && _.certificationId == KnownCertifications.ClinicalNeurophysiology);\r\n }\r\n\r\n const getCertificate = (moduleTypeId: number) => {\r\n var moduleType = props.moduleTypes.find(_ => _.moduleTypeId === moduleTypeId);\r\n return props.certificates.find(_ => _.certificationId == moduleType.certificationId);\r\n }\r\n\r\n useEffect(() => {\r\n setOpenCollapse(props.isSectionOpen);\r\n }, [props.isSectionOpen]);\r\n\r\n useEffect(() => {\r\n if (openCollapse) props.onOpen();\r\n }, [openCollapse]);\r\n\r\n return (\r\n \r\n \r\n { if (!props.disabled) setOpenCollapse(!openCollapse) }}>\r\n Certifications\r\n \r\n \r\n \r\n \r\n
onSubmit(e)}>\r\n \r\n Select two or three certifications to include in your examination\r\n *\r\n \r\n {filterAvailableModules().map(module => {\r\n return (\r\n \r\n \r\n ) => updateModuleSelection(parseInt(e.target.value))} />\r\n {getCertificate(module.moduleTypeId).certificationName}\r\n \r\n {isCnp(module) &&\r\n
\r\n \r\n
\r\n }\r\n
\r\n )\r\n })}\r\n
\r\n {errorMessages.length > 0 &&\r\n \r\n {errorMessages.map(errorMessage =>

{errorMessage}

)}\r\n
\r\n }\r\n {props.isLoading ? : }\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n );\r\n}\r\nexport default Modules;","import React, { useEffect, useState } from \"react\";\r\nimport { Card, Button, Form, Col, Collapse, Row, Alert } from \"react-bootstrap\";\r\nimport AbpnSpinner from \"../../Shared/Components/AbpnSpinner\";\r\nimport CnpOptions from \"./CnpOptions\";\r\n\r\ninterface IProps {\r\n isSectionOpen: boolean;\r\n cnpType: number;\r\n certificationName: string\r\n onContinue: (cnpType: number) => void;\r\n onOpen: () => void;\r\n disabled: boolean;\r\n isLoading?: boolean;\r\n}\r\n\r\nexport function CnpSection(props: IProps) {\r\n\r\n const [openCollapse, setOpenCollapse] = useState(props.isSectionOpen);\r\n const [cnpType, setCnpType] = useState(props.cnpType);\r\n const [isValid, setIsValid] = useState(true);\r\n\r\n const onSubmit = async (e: React.FormEvent) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n if (validateSelection(cnpType)) {\r\n props.onContinue(cnpType);\r\n }\r\n }\r\n\r\n const validateSelection = (selection: number) => {\r\n if (!selection) {\r\n setIsValid(false)\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n const updateCnpType = (updatedCnpType: number) => {\r\n setCnpType(updatedCnpType);\r\n }\r\n\r\n useEffect(() => {\r\n setOpenCollapse(props.isSectionOpen);\r\n }, [props.isSectionOpen]);\r\n\r\n useEffect(() => {\r\n if (openCollapse) props.onOpen();\r\n }, [openCollapse]);\r\n\r\n return (\r\n \r\n \r\n {if (!props.disabled) setOpenCollapse(!openCollapse)}}>\r\n Focus\r\n \r\n \r\n \r\n \r\n
onSubmit(e)}>\r\n \r\n {!isValid &&\r\n \r\n

You must select a {props.certificationName} focus

\r\n
\r\n }\r\n {props.isLoading ? : }\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n );\r\n}\r\nexport default CnpSection;","import { Container, Alert } from \"react-bootstrap\";\r\nimport HeaderWithTitle from \"./HeaderWithTitle\";\r\n\r\ninterface IProps {\r\n title: string;\r\n subTitle: string;\r\n alertVariant: string;\r\n message: string;\r\n}\r\nexport default function ActionResultMessage(props: IProps) {\r\n\r\n return (\r\n \r\n \r\n \r\n {props.message}\r\n \r\n \r\n );\r\n}\r\n","import Product from \"./Product\";\r\n\r\nexport default class InvoiceLineItemModel {\r\n unitPrice: number;\r\n amount: number;\r\n description: string;\r\n discountAmount: number;\r\n discountDescription: string;\r\n createdDate: string;\r\n product: Product;\r\n isRefunded: boolean;\r\n\r\n constructor(unitPrice: number, amount: number, createdDate: string, description: string,\r\n discountAmount: number, discountDescription: string, product: Product, isRefunded: boolean) {\r\n this.unitPrice = unitPrice;\r\n this.amount = amount;\r\n this.createdDate = createdDate;\r\n this.description = description;\r\n this.discountAmount = discountAmount;\r\n this.discountDescription = discountDescription;\r\n this.product = product;\r\n this.isRefunded = isRefunded;\r\n }\r\n}","import PaymentModel from \"./PaymentModel\";\r\nimport InvoiceLineItemModel from \"./InvoiceLineItemModel\";\r\nimport { InvoiceStatus } from \"../Enums/InvoiceStatus\";\r\n\r\nexport default class InvoiceModel {\r\n invoiceNumber: string;\r\n invoiceStatus: InvoiceStatus;\r\n createDate: string;\r\n total: number;\r\n balance: number;\r\n lineItems: Array;\r\n appliedPayment: PaymentModel;\r\n infoUrl: string;\r\n moduleSelection: string;\r\n formattedCnpType: string;\r\n isPaid: boolean;\r\n isExpanded: boolean;\r\n amountDue = () => this.lineItems?.reduce((sum, _) => sum + _.unitPrice - _.discountAmount, 0);\r\n paymentIncludesMultipleInvoices = () => (this.appliedPayment?.amount > this.total);\r\n\r\n constructor(data :\r\n {\r\n invoiceNumber?: string;\r\n invoiceStatus?: InvoiceStatus; \r\n createDate?: string;\r\n total?: number;\r\n balance?: number; \r\n lineItems?: Array\r\n appliedPayment?: PaymentModel;\r\n infoUrl?: string;\r\n moduleSelection?: string;\r\n formattedCnpType?: string;\r\n isPaid?: boolean;\r\n isExpanded?: boolean;\r\n }\r\n ) \r\n {\r\n this.invoiceNumber = data.invoiceNumber;\r\n this.invoiceStatus = data.invoiceStatus;\r\n this.createDate = data.createDate;\r\n this.total = data.total;\r\n this.balance = data.balance;\r\n this.appliedPayment = data.appliedPayment;\r\n this.infoUrl = data.infoUrl;\r\n this.moduleSelection = data.moduleSelection;\r\n this.formattedCnpType = data.formattedCnpType;\r\n this.isPaid = data.isPaid;\r\n this.isExpanded = data.isExpanded;\r\n this.lineItems = new Array();\r\n \r\n data.lineItems.forEach(_ => {\r\n this.lineItems.push(new InvoiceLineItemModel(_.unitPrice, _.amount, _.createdDate, _.description, _.discountAmount, _.discountDescription, _.product, _.isRefunded));\r\n })\r\n }\r\n}\r\n","import React, { useEffect } from 'react';\r\nimport { configService } from \"../Config/ConfigService\";\r\nimport Payment from './Payment';\r\nimport { AffirmConfig } from './AffirmModels';\r\nimport { affirmClient } from './AffirmClient';\r\nimport { EnvironmentConfiguration } from '../Config/EnvironmentConfiguration';\r\nimport { deepCopy } from '../../Components/Shared/Utility/DeepCopy';\r\nimport { PaymentType } from './PaymentType';\r\nimport Physician from '../../Components/Physician/Models/Physician';\r\nimport InvoiceModel from '../../Components/Shared/Models/InvoiceModel';\r\nimport { Button, Card } from 'react-bootstrap';\r\nimport isNullOrUndefined from '../../Components/Shared/Utility/isNullOrUndefined';\r\n\r\ndeclare global {\r\n interface Window {\r\n affirm: any;\r\n }\r\n}\r\n\r\ninterface IProps{\r\n onPaymentChanged: (payment: Payment) => void;\r\n onPaymentTypeChanged: () => void;\r\n onAffirmCheckoutComplete: () => void;\r\n physician: Physician;\r\n invoices: InvoiceModel[];\r\n payment: Payment;\r\n disabled?: boolean;\r\n\r\n}\r\n\r\nexport const AffirmCheckout = (props: IProps) => {\r\n \r\n useEffect(() => {\r\n async function initialize() {\r\n await affirmClient.initializeAffirm();\r\n var config = await configService.getConfiguration();\r\n window.affirm.ui.ready(() => {\r\n var affirmConfig = getAffirmConfig(props.physician, props.invoices, props.payment, config);\r\n console.log(affirmConfig);\r\n window.affirm.checkout(affirmConfig);\r\n });\r\n }\r\n initialize();\r\n }, []);\r\n\r\n const startCheckout = (e: React.MouseEvent) => {\r\n e.preventDefault();\r\n window.affirm.checkout.open({\r\n onFail: loanCancelledOrFailed,\r\n onSuccess: loanConfirmedByUser, \r\n onOpen: function(token: any){\r\n console.log(\"Affirm modal was opened successfully, checkout token is: \" + token)},\r\n onValidationError: loanCancelledOrFailed\r\n });\r\n }\r\n\r\n const loanConfirmedByUser = (response: any) => {\r\n console.log(response);\r\n const updated = deepCopy(props.payment);\r\n updated.paymentType = PaymentType.Affirm;\r\n updated.PaymentToken = response.checkout_token;\r\n updated.IsValid = true;\r\n props.onPaymentChanged(updated);\r\n props.onPaymentTypeChanged();\r\n props.onAffirmCheckoutComplete();\r\n }\r\n\r\n const loanCancelledOrFailed = () => {\r\n const updated = deepCopy(props.payment);\r\n updated.paymentType = null;\r\n updated.IsValid = false;\r\n props.onPaymentChanged(updated);\r\n props.onPaymentTypeChanged();\r\n }\r\n\r\n const getOrderId = (physician: Physician, primaryInvoice: InvoiceModel) : string => {\r\n return !(isNullOrUndefined(primaryInvoice) || isNullOrUndefined(primaryInvoice.invoiceNumber)) \r\n ? [physician.physicianId, primaryInvoice.invoiceNumber].join(\".\")\r\n : physician.physicianId.toString();\r\n }\r\n\r\n const getAffirmConfig = (physician: Physician, invoices: InvoiceModel[], payment: Payment, config: EnvironmentConfiguration): AffirmConfig => {\r\n \r\n var contactAddress = physician.addresses.addresses.filter(_ => _.isContact)[0];\r\n var country = physician.addresses.countries.find(_ => _.id == contactAddress.countryId);\r\n var primaryInvoice = invoices.sort((a, b) => b.amountDue() - a.amountDue())[0];\r\n\r\n var items = [];\r\n for (var i = 0; i < primaryInvoice.lineItems.length; i++){\r\n items.push({\r\n display_name: primaryInvoice.lineItems[i].description,\r\n sku: primaryInvoice.lineItems[i].product.productCode,\r\n unit_price: primaryInvoice.lineItems[i].amount*100,\r\n qty: 1\r\n })\r\n }\r\n\r\n\r\n return {\r\n merchant: {\r\n user_confirmation_url: \"https://abpn.com\",\r\n user_cancel_url: \"https://abpn.com\",\r\n user_confirmation_url_action: \"GET\",\r\n public_api_key: config.Affirm.PublicApiKey,\r\n name: \"The American Board of Psychiatry and Neurology\"\r\n },\r\n shipping: {\r\n name: {\r\n first: physician.firstName,\r\n last: physician.lastName\r\n },\r\n address: {\r\n line1: contactAddress.line1,\r\n line2: contactAddress.line2,\r\n city: contactAddress.city,\r\n state: contactAddress.stateCode,\r\n zipcode: contactAddress.zipCode,\r\n country: country.isO3Code\r\n },\r\n phone_number: contactAddress.homePhoneNumber.replace(/\\D/g,''),\r\n email: payment.email\r\n },\r\n billing:{\r\n name: {\r\n first: physician.firstName,\r\n last: physician.lastName\r\n },\r\n address: {\r\n line1: contactAddress.line1,\r\n line2: contactAddress.line2,\r\n city: contactAddress.city,\r\n state: contactAddress.stateCode,\r\n zipcode: contactAddress.zipCode,\r\n country: country.isO3Code\r\n },\r\n phone_number: contactAddress.homePhoneNumber.replace(/\\D/g,''),\r\n email: payment.email\r\n },\r\n items:items,\r\n metadata: {\r\n mode: \"modal\"\r\n },\r\n order_id: getOrderId(physician, primaryInvoice),\r\n currency: \"USD\",\r\n shipping_amount: 0,\r\n tax_amount: 0,\r\n total: primaryInvoice.amountDue()*100 \r\n };\r\n }\r\n\r\n return (\r\n \r\n
\r\n \r\n Click the button below to begin the checkout process to pay over time with Affirm.\r\n \r\n \r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default AffirmCheckout;","export enum InvoiceStatus {\r\n Created = 1,\r\n Abandoned = 2,\r\n TermsAccepted = 3,\r\n Receivable = 4,\r\n Paid = 5,\r\n PaidReceivable = 6,\r\n WrittenOff = 7\r\n}","import React, { useContext, useEffect, useRef, useState } from \"react\";\r\nimport { Button, Row, Card, Col, Collapse, Table, Form } from \"react-bootstrap\";\r\nimport { abpnClient } from \"../../../Services/AbpnClient\";\r\nimport { CreditCardClientLibrary, PaymentProcesserEnum, getCreditCardProcessor, getPaymentProcessorForPaymentType } from \"../../../Services/PaymentProcessor/PaymentProcessor\";\r\nimport Payment from \"../../../Services/PaymentProcessor/Payment\";\r\nimport { AuthContext } from \"../../Auth/AuthProvider\";\r\nimport Physician from \"../../Physician/Models/Physician\";\r\nimport { deepCopy } from \"../../Shared/Utility/DeepCopy\";\r\nimport ApplicationModel, { CandidateStatus } from \"../Models/ApplicationModel\";\r\nimport Examination from \"../Models/Examination\";\r\nimport { FeeType } from \"../Models/Fee\";\r\nimport { Alert } from 'react-bootstrap';\r\nimport { Fragment } from \"react\";\r\nimport { AbpnSpinner } from './../../Shared/Components/AbpnSpinner';\r\nimport { PaymentContainer } from \"../../../Services/PaymentProcessor/PaymentContainer\";\r\nimport ReceiptModel from \"../../Shared/Models/ReceiptModel\";\r\nimport InvoiceModel from \"../../Shared/Models/InvoiceModel\";\r\nimport InvoiceLineItemModel from \"../../Shared/Models/InvoiceLineItemModel\";\r\nimport { configService } from \"../../../Services/Config/ConfigService\";\r\nimport { booleanify } from \"../../Shared/Utility/Booleanify\";\r\nimport AffirmCheckout from \"../../../Services/PaymentProcessor/AffirmCheckout\";\r\nimport { PaymentType } from \"../../../Services/PaymentProcessor/PaymentType\";\r\nimport { InvoiceStatus } from \"../../Shared/Enums/InvoiceStatus\";\r\nimport { usePrevious } from \"../../Shared/Utility/usePrevRefHook\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport isNullOrUndefined from \"../../Shared/Utility/isNullOrUndefined\";\r\n\r\ninterface IInvoicePaymentCardProps {\r\n application: ApplicationModel;\r\n physician: Physician;\r\n examination: Examination;\r\n isSectionAvailable: boolean;\r\n isSectionOpen: boolean;\r\n onApplicationSubmitted: (receipt: ReceiptModel) => void;\r\n examinationDates: string;\r\n onOpen: () => void;\r\n disabled: boolean;\r\n applicationDeadlineDate: string;\r\n totalBalance: number;\r\n}\r\n\r\n\r\ninterface IPaymentPlan {\r\n isPayInFull: boolean;\r\n isPayOverTime: boolean;\r\n}\r\n\r\nexport function InvoicePaymentCard(props: IInvoicePaymentCardProps) {\r\n const hasPaymentPlan = false;\r\n\r\n const [openCollapse, setOpenCollapse] = useState(props.isSectionOpen);\r\n const [invoices, setInvoices] = useState>([]);\r\n const unpaidInvoices = invoices.filter(_ => _.isPaid == false);\r\n const unpaidLineItems = unpaidInvoices?.flatMap(_ => _.lineItems);\r\n const [isLoadingInvoices, setIsLoadingInvoices] = useState(false);\r\n const [canSelectPaymentPlan, setCanSelectPaymentPlan] = useState(false);\r\n const [creditCardProcessor, setCreditCardProcessor] = useState(CreditCardClientLibrary.None);\r\n const [previouslyPaidInvoices, setPreviouslyPaidInvoices] = useState>([]);\r\n const history = useHistory();\r\n \r\n const contactAddress = props.physician.addresses.addresses.find(_ => _.isContact);\r\n\r\n const [payment, setPayment] = useState({ email: props.physician.emailAddress, city: contactAddress?.city, state: contactAddress?.stateCode, hasBeenCharged: false, routingNumber: \"\" } as Payment);\r\n let isPaymentChargedSubmitted = usePrevious(false); //track whether to submit to invoice if payment has been charged\r\n\r\n const [paymentPlan, setPaymentPlan] = useState({\r\n isPayInFull: false,\r\n isPayOverTime: false,\r\n })\r\n\r\n const setPayInFull = () => {\r\n var updated = deepCopy(paymentPlan);\r\n updated.isPayInFull = true;\r\n updated.isPayOverTime = false;\r\n setPaymentPlan(updated);\r\n\r\n var updatedPayment = deepCopy(payment);\r\n updatedPayment.IsValid = null;\r\n setPayment(updatedPayment);\r\n }\r\n\r\n const setPayOverTime = () => {\r\n var updated = deepCopy(paymentPlan);\r\n updated.isPayInFull = false;\r\n updated.isPayOverTime = true;\r\n setPaymentPlan(updated);\r\n\r\n var updatedPayment = deepCopy(payment);\r\n updatedPayment.IsValid = null;\r\n setPayment(updatedPayment);\r\n }\r\n\r\n const [isSubmitting, setIsSubmitting] = useState(false);\r\n const [isPaymentSuccessful, setIsPaymentSuccessful] = useState(null);\r\n const [isDisable, setIsDisable] = useState(false);\r\n\r\n const payContainerRef = React.useRef(null);\r\n\r\n const hasInvoice = (list : Array) => list.length > 0;\r\n\r\n const formRef = useRef(null);\r\n\r\n useEffect(() => {\r\n const loadInvoices = async () => {\r\n setIsLoadingInvoices(true);\r\n\r\n //Get invoices related to the provided application. I would really rather this component was passed the invoices as props.\r\n const results = (await abpnClient.get>('/api/invoice/getInvoicesForPhysician', authContext))\r\n .filter(_ => _.lineItems?.filter(x => x.product.examinationId == props.application.examinationId).length > 0)\r\n .filter(x => !(x.invoiceStatus == InvoiceStatus.Abandoned ||\r\n x.invoiceStatus == InvoiceStatus.WrittenOff));\r\n\r\n // if there are no results with an exam fee, we need to create an invoice.\r\n let isMissingInvoiceWithExamFee = results?.some(invoice => \r\n invoice.lineItems?.some(lineItem => \r\n isExamFee(lineItem.product.feeTypeId) &&\r\n lineItem.product.examinationId === props.application.examinationId &&\r\n !lineItem.isRefunded\r\n )\r\n ) === false;\r\n\r\n if(isMissingInvoiceWithExamFee) {\r\n let url = `/api/invoice/createInvoiceForApplication?applicationId=${props.application.applicationId}&persist=${false}`;\r\n const newInvoice = await abpnClient.post(url, null, authContext);\r\n results.push(newInvoice);\r\n }\r\n\r\n let newInvoices = new Array();\r\n results.filter(x => x.isPaid == false && !(x.invoiceStatus == InvoiceStatus.Abandoned || x.invoiceStatus == InvoiceStatus.WrittenOff || x.invoiceStatus == InvoiceStatus.Paid || x.invoiceStatus == InvoiceStatus.PaidReceivable)).forEach(_ => {\r\n newInvoices.push(new InvoiceModel({invoiceNumber: _.invoiceNumber, createDate: _.createDate, isPaid: _.isPaid, lineItems: _.lineItems}));\r\n });\r\n \r\n \r\n let prevPaidInvoices = new Array();\r\n results.filter(x=>x.invoiceStatus == InvoiceStatus.Paid).forEach(_ => {\r\n prevPaidInvoices.push(new InvoiceModel({invoiceNumber: _.invoiceNumber, createDate: _.createDate, isPaid: _.isPaid, lineItems: _.lineItems}));\r\n setPreviouslyPaidInvoices(prevPaidInvoices);\r\n });\r\n\r\n setInvoices(newInvoices);\r\n setIsLoadingInvoices(false);\r\n }\r\n\r\n if (!isLoadingInvoices && props.isSectionOpen) {\r\n loadInvoices();\r\n }\r\n }, [props.isSectionOpen])\r\n\r\n useEffect(() => {\r\n if (creditCardProcessor !== CreditCardClientLibrary.None) return;\r\n \r\n const getCreditCardProcessorForPaymentContainer = async () => {\r\n const cardProcessor : CreditCardClientLibrary = await getCreditCardProcessor();\r\n setCreditCardProcessor(cardProcessor);\r\n }\r\n\r\n getCreditCardProcessorForPaymentContainer();\r\n\r\n }, [])\r\n\r\n useEffect(() => {\r\n const getCanSelectPaymentPlan = async () => {\r\n let k = (await configService.getConfiguration()).FeatureFlags.AllowPayOverTime;\r\n if (typeof k === \"string\")\r\n {\r\n setCanSelectPaymentPlan(booleanify(k));\r\n }\r\n else {\r\n setCanSelectPaymentPlan(k);\r\n }\r\n\r\n }\r\n getCanSelectPaymentPlan();\r\n }, []);\r\n\r\n const getInitialBalanceDue = () => invoices?.filter(_ => _.isPaid == false).reduce((sum, _) => sum + _.amountDue(), 0);\r\n\r\n const balanceDue = getInitialBalanceDue();\r\n \r\n const hasBalanceDue = balanceDue > 0;\r\n\r\n const authContext = useContext(AuthContext);\r\n\r\n const onPaymentChanged = (updated: Payment) => {\r\n setPayment(deepCopy(updated));\r\n }\r\n\r\n const replaceUnsavedInvoice = async () => {\r\n let newArrayOfInvoices = new Array();\r\n \r\n invoices.filter(_ => _.invoiceNumber?.length > 0).forEach(_ => {\r\n newArrayOfInvoices.push(_);\r\n });\r\n\r\n let isMissingInvoiceWithExamFee = newArrayOfInvoices?.filter(_ => \r\n _.lineItems?.filter(x => isExamFee(x.product.feeTypeId) && x.product.examinationId == props.application.examinationId).length > 0)\r\n .length == 0;\r\n \r\n if (isMissingInvoiceWithExamFee) {\r\n let url = `/api/invoice/createInvoiceForApplication?applicationId=${props.application.applicationId}&persist=${true}`;\r\n const newInvoice = await abpnClient.post(url, null, authContext);\r\n newArrayOfInvoices.push(new InvoiceModel(newInvoice));\r\n }\r\n\r\n setInvoices(newArrayOfInvoices);\r\n return newArrayOfInvoices;\r\n }\r\n\r\n const onAffirmCheckoutComplete = () => {\r\n formRef.current.dispatchEvent(\r\n new Event(\"submit\", { cancelable: true, bubbles: true })\r\n );\r\n\r\n }\r\n\r\n const submit = async (event: React.FormEvent) => {\r\n setIsDisable(true);\r\n\r\n if (isSubmitting)\r\n return;\r\n\r\n event.preventDefault();\r\n event.stopPropagation();\r\n event.currentTarget.classList.add('was-validated');\r\n\r\n await submitPayment();\r\n }\r\n\r\n //Automatically submit the payment form is the payment was already charged through the payment processor client library\r\n useEffect(() => {\r\n async function checkShouldSubmitAfterPaymentCharged(){\r\n if (isPaymentChargedSubmitted.current == false && payment.hasBeenCharged == true){\r\n isPaymentChargedSubmitted.current = true;\r\n try{\r\n await submitPayment();\r\n }\r\n finally{\r\n resetPaymentCharge();\r\n }\r\n }\r\n }\r\n\r\n checkShouldSubmitAfterPaymentCharged();\r\n }, [payment.hasBeenCharged, isPaymentChargedSubmitted]);\r\n\r\n const resetPaymentCharge = () => {\r\n isPaymentChargedSubmitted.current = false;\r\n setPayment({...payment, hasBeenCharged: false, paymentCharge: null});\r\n }\r\n\r\n const refreshPaymentAmount = () => {\r\n onPaymentChanged({...payment, amount: getInitialBalanceDue()});\r\n }\r\n\r\n useEffect(() => {\r\n refreshPaymentAmount();\r\n }, [invoices]);\r\n\r\n /**Handle payment processing errors with redirect to error page with custom error message.\r\n * This custom error should only occur on payment errors, not application submission errors */\r\n const handlePaymentError = () => {\r\n history.replace(\"/error/PaymentProcessingError\");\r\n }\r\n \r\n const submitPayment = async () => {\r\n if (isSubmitting) {\r\n return;\r\n }\r\n\r\n setIsDisable(true);\r\n\r\n\r\n var noPaymentIsDue = isNullOrUndefined(payContainerRef) || !hasBalanceDue\r\n if (noPaymentIsDue)\r\n {\r\n setIsSubmitting(true);\r\n\r\n if(previouslyPaidInvoices.length > 0)\r\n {\r\n var invoiceReceipt : any;\r\n await abpnClient.post(`/api/application/submitApplicationByExaminationId?examinationId=${props.application.examinationId}`,null, authContext);\r\n props.onApplicationSubmitted(invoiceReceipt);\r\n return;\r\n }\r\n\r\n let updateInvoices = await replaceUnsavedInvoice();\r\n let invoiceNumbers = updateInvoices.map(_ => _.invoiceNumber);\r\n var invoiceReceipt : any = await abpnClient.post('/api/invoice/completeInvoiceWithNoPayment',invoiceNumbers, authContext);\r\n\r\n await abpnClient.post(`/api/application/submitApplicationByExaminationId?examinationId=${props.application.examinationId}`,null, authContext);\r\n\r\n //Map untyped objects to typed ones.\r\n let newResults = new Array();\r\n invoiceReceipt.invoices.forEach((_ : any) => {\r\n newResults.push(new InvoiceModel({invoiceNumber: _.invoiceNumber, createDate: _.createDate, isPaid: _.isPaid, lineItems: _.lineItems}));\r\n });\r\n\r\n invoiceReceipt.invoices = newResults;\r\n\r\n props.onApplicationSubmitted(invoiceReceipt);\r\n return;\r\n }\r\n\r\n // Card or Affirm\r\n var updatedPayment = deepCopy(payment);\r\n const paymentProcessor = getPaymentProcessorForPaymentType(creditCardProcessor, updatedPayment.paymentType);\r\n if (paymentProcessor.getPaymentProcessorId() !== PaymentProcesserEnum.CardX && (payment.paymentType === PaymentType.CreditCardVisa || payment.paymentType === PaymentType.ECheckAch)){\r\n \r\n // If it's card or echeck but not cardX processor, tokenize the payment details, if it's affirm, the token already is populated\r\n if (payContainerRef.current.validate(payment) && formRef.current.checkValidity()) {\r\n formRef.current.classList.remove('was-validated');\r\n\r\n \r\n updatedPayment = await paymentProcessor.tokenize(updatedPayment);\r\n }else{\r\n return;\r\n }\r\n }\r\n\r\n updatedPayment.amount = invoices.reduce((sum, _) => sum + _.amountDue(), 0);\r\n setPayment(updatedPayment);\r\n\r\n if (!updatedPayment?.IsValid) {\r\n setIsDisable(false);\r\n return;\r\n }\r\n\r\n setIsDisable(false);\r\n setIsSubmitting(true);\r\n\r\n let updatedInvoices = await replaceUnsavedInvoice();\r\n\r\n if (hasInvoice(updatedInvoices)) {\r\n\r\n // This is where the invoice should be created and app submitted.\r\n let invoiceNumbers = updatedInvoices.map(_ => _.invoiceNumber);\r\n const invoicePaymentRequest = {\r\n invoiceNumbers: invoiceNumbers,\r\n paymentCharge: payment.paymentCharge\r\n };\r\n\r\n let invoiceReceipt : any = await abpnClient.post(`/api/invoice/applyPaymentToInvoices?paymentType=${updatedPayment.paymentType}&paymentProcessor=${paymentProcessor.getPaymentProcessorId()}&paymentToken=${updatedPayment.PaymentToken}&paymentAmount=${updatedPayment.amount}`, invoicePaymentRequest, authContext, {handleErrorRedirect: false})\r\n .catch(handlePaymentError);\r\n\r\n //If previous API call failed and was handled, prevent application submission\r\n if (isNullOrUndefined(invoiceReceipt) || !invoiceReceipt.isSuccessful) {\r\n setIsSubmitting(false);\r\n setIsPaymentSuccessful(false);\r\n return;\r\n }\r\n\r\n // Don't submit the app if it has already been submitted\r\n if (props.application.candidateStatus == CandidateStatus.Unsubmitted) {\r\n await abpnClient.post(`/api/application/submitApplicationByExaminationId?examinationId=${props.application.examinationId}`,null, authContext, {handleErrorRedirect: true});\r\n } \r\n\r\n let reloadedInvoices = new Array();\r\n invoiceReceipt.invoices.forEach((_:any) => {\r\n reloadedInvoices.push(new InvoiceModel({invoiceNumber: _.invoiceNumber, createDate: _.createDate, isPaid: _.isPaid, lineItems: _.lineItems}));\r\n });\r\n invoiceReceipt.invoices = reloadedInvoices;\r\n\r\n setIsSubmitting(false);\r\n setIsPaymentSuccessful(invoiceReceipt.isSuccessful);\r\n\r\n if (!invoiceReceipt.isSuccessful) {\r\n return;\r\n }\r\n\r\n props.onApplicationSubmitted(invoiceReceipt);\r\n return;\r\n }\r\n \r\n setIsDisable(false);\r\n }\r\n\r\n const isExamFee = (feeTypeId : number) => {\r\n return (feeTypeId == FeeType.examFeeMoc ||\r\n feeTypeId == FeeType.examFeeMocPrimaryInitial ||\r\n feeTypeId == FeeType.examFeeMocWithThreeOrMoreModules ||\r\n feeTypeId == FeeType.examFeeMocWithTwoModules ||\r\n feeTypeId == FeeType.examFeeSubspecialtyinitial)\r\n }\r\n\r\n const displayInvoiceLineItem = (item : InvoiceLineItemModel) => {\r\n return (\r\n \r\n {item.description}\r\n ${item.unitPrice}\r\n \r\n {displayInvoiceLineItemDiscount(item)}\r\n )\r\n }\r\n\r\n const displayInvoiceLineItemDiscount = (item : InvoiceLineItemModel) => {\r\n if (item.discountAmount > 0) return (\r\n \r\n {item.discountDescription}\r\n $-{item.discountAmount}\r\n \r\n );\r\n else return;\r\n } \r\n\r\n useEffect(() => {\r\n setOpenCollapse(props.isSectionOpen);\r\n }, [props.isSectionOpen]);\r\n\r\n useEffect(() => {\r\n if (openCollapse) props.onOpen();\r\n }, [openCollapse]);\r\n \r\n //Can submit form if it's not already submitting or has an unpaid invoice with a balance due\r\n const canSubmitForm = !isDisable && !isLoadingInvoices && !(hasInvoice && hasBalanceDue);\r\n\r\n return (\r\n \r\n \r\n { if (!props.disabled) setOpenCollapse(!openCollapse) }}>\r\n Payment\r\n \r\n \r\n
submit(e)} ref={formRef}>\r\n {isSubmitting ? :\r\n \r\n \r\n \r\n Applicant Name\r\n \r\n \r\n {props.physician.fullName}\r\n \r\n \r\n Email\r\n \r\n \r\n {props.physician.emailAddress}\r\n \r\n \r\n Examination Requested\r\n \r\n \r\n {props.examination.title}\r\n \r\n \r\n Examination Dates\r\n \r\n \r\n {props.examinationDates}\r\n \r\n\r\n {isLoadingInvoices ? : (invoices?.filter(_ => _.isPaid == false).length > 0) &&\r\n \r\n \r\n
Fees
\r\n
\r\n \r\n \r\n {unpaidLineItems.map(_ => { return (displayInvoiceLineItem(_))})}\r\n \r\n \r\n \r\n \r\n \r\n
Total${balanceDue}
\r\n
}\r\n\r\n {hasBalanceDue &&\r\n \r\n \r\n setPayInFull()}>Pay In Full\r\n {canSelectPaymentPlan && hasBalanceDue && (!props.examination.isMoc) && setPayOverTime()}\r\n hidden={props.examination.isMoc}>Pay Over Time With Affirm}\r\n \r\n }\r\n\r\n {(!canSelectPaymentPlan || hasPaymentPlan || (canSelectPaymentPlan && paymentPlan.isPayInFull)) && hasBalanceDue &&\r\n \r\n null} />\r\n {payment.paymentType && payment.IsValid === false &&\r\n\r\n \r\n

Could Not Validate Payment Method. Please verify your payment method and try again

\r\n
}\r\n {isPaymentSuccessful === false &&\r\n \r\n

The provided payment method failed. Please verify your payment method and try again

\r\n
}\r\n\r\n
\r\n }\r\n\r\n {((canSelectPaymentPlan && paymentPlan.isPayOverTime)) && hasBalanceDue &&\r\n \r\n null} onAffirmCheckoutComplete={onAffirmCheckoutComplete} />\r\n \r\n }\r\n\r\n {!isSubmitting &&\r\n
\r\n \r\n
\r\n }\r\n \r\n
\r\n }\r\n \r\n
\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default InvoicePaymentCard;\r\n","import { useContext, useEffect, useState } from \"react\";\r\nimport { RouteComponentProps, useHistory } from \"react-router-dom\";\r\nimport Physician from \"../../Physician/Models/Physician\";\r\nimport { AuthContext } from \"../../Auth/AuthProvider\";\r\nimport { abpnClient } from \"../../../Services/AbpnClient\";\r\nimport Examination, { KnownCertifications, KnownExaminationDefinitions } from \"../Models/Examination\";\r\nimport ApplicantInformation from \"../../Shared/Components/ApplicantInformation\";\r\nimport PaymentCard from \"./PaymentCard\";\r\nimport ApplicationModel, { CandidateStatus } from \"../Models/ApplicationModel\"\r\nimport { MedicalLicenseInformation } from \"./MedicalLicenseInformation\";\r\nimport AttestationStatement from \"./AttestationStatement\";\r\nimport TestingOptions from \"./TestingOptions\";\r\nimport { deepCopy } from \"../../Shared/Utility/DeepCopy\";\r\nimport { TrainingRequirements } from \"./TrainingRequirements\";\r\nimport SubspecialtyTraining from \"../../Physician/Models/SubspecialtyTraining\";\r\nimport AbpnSpinner from \"../../Shared/Components/AbpnSpinner\";\r\nimport ApplicationReceived from \"./ApplicationReceived\";\r\nimport Modules from \"./Modules\";\r\nimport CnpSection from \"./CnpSection\";\r\nimport { Address } from \"../../Physician/Models/Address\";\r\nimport ActionResultMessage from \"../../Shared/Components/ActionResultMessage\";\r\nimport { ApplicationPaths } from \"../../../Services/Auth/AuthConstants\";\r\nimport { getDateWithOffset } from \"../../Shared/Utility/GetDateWithOffset\";\r\nimport { OverlayTrigger, Tooltip } from \"react-bootstrap\";\r\nimport { CCAssessmentType } from \"../../Physician/Models/CCEnrollment\";\r\nimport { configService } from \"../../../Services/Config/ConfigService\";\r\nimport InvoicePaymentCard from \"./InvoicePaymentCard\";\r\nimport { booleanify } from \"../../Shared/Utility/Booleanify\";\r\n\r\ntype TParams = { examinationId: string };\r\n\r\ninterface INavigation {\r\n navigateToPaySection: boolean,\r\n sectionsComplete: number,\r\n activeSections: Array,\r\n}\r\n\r\nenum ApplicationSection {\r\n ApplicantInformation,\r\n MedicalLicenseInformation,\r\n Modules,\r\n CnpSection,\r\n TrainingRequirements,\r\n AttestationStatement,\r\n TestingOptions,\r\n Payment\r\n}\r\n\r\nfunction Application({ match }: RouteComponentProps) {\r\n\r\n const [physician, setPhysician] = useState(null);\r\n const [examination, setExamination] = useState(null);\r\n const [application, setApplication] = useState(null);\r\n const [attestationContent, setAttestationContent] = useState(null);\r\n const [loading, setLoading] = useState(true);\r\n const [isSubmitted, setIsSubmitted] = useState(false);\r\n const [displayPaymentSuccessful, setDisplayPaymentSuccessful] = useState(false);\r\n const [useBC, setUseBC] = useState(false);\r\n const [sectionNavigation, setSectionNav] = useState({navigateToPaySection: false, sectionsComplete: null, activeSections: null});\r\n\r\n const examinationDates = examination ? `Exam Dates: (${getDateWithOffset(examination.startDate).toLocaleDateString()} - ${getDateWithOffset(examination.endDate).toLocaleDateString()})` : null;\r\n const applicationRequiresTrainingSection = examination?.requiresFellowshipTraining && !application?.isTransferredIn && application?.candidateStatus != CandidateStatus.InviteSent;\r\n\r\n const applicationDeadlineDate = application?.extensionDate ?? examination?.applicationDeadlineDate;\r\n const exceptionText = application?.hasDeadlineException ? \"Exception\" : \"\";\r\n const formattedApplicationDeadlineDate = applicationDeadlineDate ? `Application ${exceptionText} Deadline: ${getDateWithOffset(applicationDeadlineDate).toLocaleDateString()}` : null\r\n\r\n const authContext = useContext(AuthContext);\r\n const USCountryId = 1;\r\n\r\n const previousSectionComplete = (section: ApplicationSection) => {\r\n return (sectionNavigation.sectionsComplete === sectionNavigation.activeSections.indexOf(section));\r\n }\r\n\r\n const saveApplication = async (model: ApplicationModel, isNewApplication: boolean = false) => {\r\n setLoading(true);\r\n \r\n return abpnClient.post(\"/api/application/update\", model, authContext).then(result => {\r\n setApplication(result);\r\n \r\n if (!isNewApplication) {\r\n var updated = deepCopy(sectionNavigation);\r\n updated.sectionsComplete++;\r\n setSectionNav(updated);\r\n }\r\n setLoading(false);\r\n })\r\n };\r\n\r\n useEffect(() => {\r\n abpnClient.get(\"/api/application?examinationId=\" + match.params.examinationId, authContext).then(async existingApplication => {\r\n //If no application found create a new one\r\n if (existingApplication == null) {\r\n var applicationDto = new ApplicationModel();\r\n applicationDto.examinationId = parseInt(match.params.examinationId);\r\n\r\n await saveApplication(applicationDto, true);\r\n } else {\r\n setApplication(existingApplication);\r\n }\r\n\r\n abpnClient.get(\"/api/physician\", authContext)\r\n .then(physician => {\r\n setPhysician(physician);\r\n abpnClient.get(\"/api/examination?examinationId=\" + match.params.examinationId, authContext)\r\n .then(exam => {\r\n setExamination(exam);\r\n });\r\n });\r\n });\r\n }, []);\r\n\r\n useEffect(() => {\r\n const getUseBC = async () => {\r\n let k = (await configService.getConfiguration()).FeatureFlags.UseBusinessCentral;\r\n if (typeof k === \"string\")\r\n {\r\n setUseBC(booleanify(k));\r\n }\r\n else {\r\n setUseBC(k);\r\n }\r\n\r\n }\r\n getUseBC();\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (sectionNavigation.activeSections == null && application && examination && physician){\r\n let activeSections = [ApplicationSection.ApplicantInformation];\r\n activeSections.push(ApplicationSection.MedicalLicenseInformation);\r\n if (examination.isCombinedMoc) {\r\n activeSections.push(ApplicationSection.Modules);\r\n }\r\n if (examination.certificationId == KnownCertifications.ClinicalNeurophysiology && examination.isMoc && !examination.isArticleBased) {\r\n activeSections.push(ApplicationSection.CnpSection);\r\n }\r\n if (applicationRequiresTrainingSection) {\r\n activeSections.push(ApplicationSection.TrainingRequirements);\r\n }\r\n activeSections.push(ApplicationSection.AttestationStatement, ApplicationSection.TestingOptions, ApplicationSection.Payment);\r\n\r\n var updated = deepCopy(sectionNavigation);\r\n var goToPaySection = application?.candidateStatus !== CandidateStatus.Unsubmitted && application.order?.balance > 0;\r\n updated.navigateToPaySection = goToPaySection;\r\n updated.activeSections = activeSections;\r\n updated.sectionsComplete = goToPaySection ? activeSections.indexOf(ApplicationSection.Payment) : 0;\r\n\r\n setSectionNav(updated);\r\n setLoading(false);\r\n }\r\n }, [application, examination, physician])\r\n\r\n useEffect(() => {\r\n if (application && !attestationContent) {\r\n var applicationCreatedDate = getDateWithOffset(application.createdDate).toLocaleDateString(\"en-US\");\r\n abpnClient.get(`/api/applicationTemplate/attestation?examinationId=${match.params.examinationId}&applicationCreatedDate=${applicationCreatedDate}`, authContext)\r\n .then(template => {\r\n setAttestationContent(template.attestationContent);\r\n });\r\n }\r\n }, [application]);\r\n\r\n const onApplicationAttestedToggled = () => {\r\n var updated = deepCopy(application);\r\n updated.attestationContent = attestationContent;\r\n updated.hasAttested = !application.hasAttested;\r\n setApplication(updated);\r\n }\r\n\r\n const onAttestationContinue = async () => {\r\n await saveApplication(application);\r\n }\r\n\r\n const onTestingOptionsContinue = async (isAdaRequested: boolean, isNmaRequested: boolean) => {\r\n var updated = deepCopy(application);\r\n updated.isAdaRequested = isAdaRequested;\r\n updated.isNmaRequested = isNmaRequested;\r\n await saveApplication(updated)\r\n }\r\n\r\n const onCertificationSelectionContinue = async (moduleCertificationKeys: Array, cnpType: number) => {\r\n var updated = deepCopy(application)\r\n updated.modularCertificationIds = moduleCertificationKeys;\r\n updated.cnpType = cnpType;\r\n\r\n await saveApplication(updated)\r\n }\r\n\r\n const onCnpSectionContinue = async (cnpType: number) => {\r\n var updated = deepCopy(application)\r\n updated.cnpType = cnpType;\r\n\r\n await saveApplication(updated)\r\n }\r\n\r\n const onApplicationSubmitted = () => {\r\n setDisplayPaymentSuccessful(false);\r\n setIsSubmitted(true);\r\n }\r\n\r\n const onApplicationSubmittedWithInvoice = () => {\r\n setDisplayPaymentSuccessful(false);\r\n setIsSubmitted(true);\r\n }\r\n\r\n const updateSubSpecialtyTraining = (subSpecialtyTraining: Array) => {\r\n var updated = deepCopy(physician);\r\n updated.subspecialtyTrainingList = subSpecialtyTraining;\r\n setPhysician(updated);\r\n updateSectionsComplete(sectionNavigation.sectionsComplete + 1)\r\n }\r\n\r\n const requiresUnrestrictedLicense = () => {\r\n if (examination.examinationDefinitionId === KnownExaminationDefinitions.Neurology) return true;\r\n if (examination.examinationDefinitionId === KnownExaminationDefinitions.ChildNeurology) return true;\r\n if (examination.examinationDefinitionId === KnownExaminationDefinitions.Psychiatry) return true;\r\n return false;\r\n }\r\n\r\n const updateSectionsComplete = (index: number) => {\r\n var updatedNav = deepCopy(sectionNavigation);\r\n updatedNav.sectionsComplete = index;\r\n setSectionNav(updatedNav);\r\n }\r\n\r\n const saveAllAddresses = (addresses: Array
) => {\r\n if (!addresses.find(_ => _.isContact).isValid) return;\r\n\r\n const url = \"/api/Physician/SaveAddresses/\";\r\n\r\n setLoading(true);\r\n abpnClient.post>(url, addresses, authContext).then(result => {\r\n var updated = deepCopy(physician);\r\n var addressesToKeep = updated.addresses.addresses.filter(_ => !_.isContact);\r\n\r\n addressesToKeep.push(result.find(_ => _.isContact));\r\n physician.addresses.addresses = addressesToKeep;\r\n\r\n setPhysician(physician);\r\n setLoading(false);\r\n updateSectionsComplete(1);\r\n });\r\n }\r\n\r\n const history = useHistory();\r\n\r\n const displayBanner = () => {\r\n setDisplayPaymentSuccessful(true);\r\n setTimeout(() => { history.push(ApplicationPaths.DefaultLoginRedirectPath) }, 5000);\r\n }\r\n\r\n const isSectionDisabled = (section: ApplicationSection) => {\r\n return sectionNavigation.navigateToPaySection || (sectionNavigation.sectionsComplete < sectionNavigation.activeSections.indexOf(section));\r\n }\r\n\r\n const filteredExamCertificationIds = () => {\r\n const ccEnrollmentExamCertificates = physician.currentCCEnrollment?.activeEnrollmentCertificates?.filter(_ => _.ccAssessmentType == CCAssessmentType.Exam);\r\n var filteredCCEnrollmentCertificateIds = ccEnrollmentExamCertificates?.map(_ => _.certificateId);\r\n var filteredPhysicianCertificates = physician.certificates.filter(_ => filteredCCEnrollmentCertificateIds?.indexOf(_.certificateId) != -1);\r\n return filteredPhysicianCertificates?.map(_ => _.certificationId);\r\n }\r\n \r\n if (!(application && examination && physician && attestationContent && sectionNavigation.activeSections)) return \r\n if (displayPaymentSuccessful) return \r\n if (isSubmitted) return \r\n\r\n return ( \r\n
\r\n

{examination.title}

\r\n

{formattedApplicationDeadlineDate}\r\n \r\n Application deadlines are at 11:59 p.m. CST, after which the late fee will be applied. \r\n }>\r\n \r\n \r\n

\r\n

{examinationDates}

\r\n ) => saveAllAddresses(addresses)}\r\n onOpen={() => updateSectionsComplete(0)}\r\n disabled={isSectionDisabled(ApplicationSection.ApplicantInformation)}\r\n isLoading={loading} />\r\n x.countryId == USCountryId)}\r\n isSectionOpen={previousSectionComplete(ApplicationSection.MedicalLicenseInformation)}\r\n requiresUnrestrictedLicense={requiresUnrestrictedLicense()}\r\n onContinue={() => { updateSectionsComplete(sectionNavigation.sectionsComplete + 1) }}\r\n onOpen={() => updateSectionsComplete(sectionNavigation.activeSections.indexOf(ApplicationSection.MedicalLicenseInformation))}\r\n disabled={isSectionDisabled(ApplicationSection.MedicalLicenseInformation)}\r\n />\r\n {\r\n examination.isCombinedMoc &&\r\n updateSectionsComplete(sectionNavigation.activeSections.indexOf(ApplicationSection.Modules))}\r\n disabled={isSectionDisabled(ApplicationSection.Modules)}\r\n isLoading={loading}\r\n />\r\n }\r\n {\r\n examination.certificationId == KnownCertifications.ClinicalNeurophysiology && examination.isMoc && !examination.isArticleBased &&\r\n updateSectionsComplete(sectionNavigation.activeSections.indexOf(ApplicationSection.CnpSection))}\r\n disabled={isSectionDisabled(ApplicationSection.CnpSection)}\r\n isLoading={loading} />\r\n }\r\n {\r\n applicationRequiresTrainingSection &&\r\n ) => updateSubSpecialtyTraining(subSpecialtyTraining)}\r\n examination={examination}\r\n applicationId={application.applicationId}\r\n subSpecialtyTrainingList={physician.subspecialtyTrainingList}\r\n onOpen={() => updateSectionsComplete(sectionNavigation.activeSections.indexOf(ApplicationSection.TrainingRequirements))}\r\n disabled={isSectionDisabled(ApplicationSection.TrainingRequirements)}\r\n />\r\n }\r\n updateSectionsComplete(sectionNavigation.activeSections.indexOf(ApplicationSection.AttestationStatement))}\r\n disabled={isSectionDisabled(ApplicationSection.AttestationStatement)}\r\n isLoading={loading}\r\n />\r\n updateSectionsComplete(sectionNavigation.activeSections.indexOf(ApplicationSection.TestingOptions))}\r\n disabled={isSectionDisabled(ApplicationSection.TestingOptions)}\r\n isLoading={loading}\r\n />\r\n { useBC ?\r\n updateSectionsComplete(sectionNavigation.activeSections.indexOf(ApplicationSection.Payment))}\r\n disabled={sectionNavigation.sectionsComplete < sectionNavigation.activeSections.indexOf(ApplicationSection.Payment)}\r\n applicationDeadlineDate={applicationDeadlineDate}\r\n totalBalance={application?.order?.balance ?? application?.totalFeeAmount}\r\n /> :\r\n updateSectionsComplete(sectionNavigation.activeSections.indexOf(ApplicationSection.Payment))}\r\n disabled={sectionNavigation.sectionsComplete < sectionNavigation.activeSections.indexOf(ApplicationSection.Payment)}\r\n applicationDeadlineDate={applicationDeadlineDate}\r\n totalBalance={application?.order?.balance ?? application?.totalFeeAmount}\r\n />\r\n }\r\n
\r\n );\r\n}\r\n\r\nexport default Application;","\r\n\r\nexport default function ExaminationReport() {\r\n\r\n\r\n return (\r\n
\r\n

Examination Report

\r\n
\r\n );\r\n}","export class ExaminationHistory {\r\n examinationId: number;\r\n examineeId: number;\r\n certificationId: number;\r\n title: string;\r\n certificationName: string;\r\n moduleSelection: string;\r\n formattedCnpType: string;\r\n startDate: string;\r\n endDate: string;\r\n releaseGrades: boolean;\r\n isPrimary: boolean;\r\n isMoc: boolean;\r\n hasExamineeDocuments: boolean;\r\n examinationGrade: ExaminationGrade;\r\n examineeStatusReason: string;\r\n examineeStatus: ExamineeStatus;\r\n examineeStatusReasonId: ExamineeStatusReason;\r\n candidateStatus: CandidateStatus\r\n candidateStatusReason: string;\r\n}\r\n\r\nexport enum ExaminationGrade {\r\n Pass = 1,\r\n Fail = 2,\r\n}\r\n\r\nexport enum ExamineeStatus {\r\n UnexcusedAbsence = 26\r\n}\r\n\r\nexport enum ExamineeStatusReason {\r\n Invalidated = 3\r\n}\r\n\r\nexport enum CandidateStatus {\r\n ToBeReviewed = 1,\r\n Hold = 2,\r\n Denied = 3,\r\n Approved = 4,\r\n TransferredOut = 5,\r\n Withdrawn = 6,\r\n Unsubmitted = 8\r\n}","import { useContext, useEffect, useState, Fragment } from \"react\";\r\nimport { Row, Col, Card, Container, Button } from \"react-bootstrap\";\r\nimport { abpnClient } from \"../../Services/AbpnClient\";\r\nimport { AuthContext } from \"../Auth/AuthProvider\";\r\nimport AbpnSpinner from \"../Shared/Components/AbpnSpinner\";\r\nimport { ExaminationHistory, ExaminationGrade, ExamineeStatus, ExamineeStatusReason } from '../Dashboard/Exams/Models/ExaminationHistory';\r\nimport { getDateWithOffset } from \"../Shared/Utility/GetDateWithOffset\";\r\nimport { Link } from \"react-router-dom\";\r\n\r\n\r\nexport default function ExamHistory() {\r\n const validInitialSpecialtyCertYear = 2017;\r\n const validForAnyExamAdministeredYear = 2021;\r\n const [examHistory, setExamHistory] = useState>(null);\r\n const [isLoading, setIsLoading] = useState(true);\r\n const [isDownloading, setIsDownloading] = useState(false);\r\n const [examinationIdDownloading, setExaminationIdDownloading] = useState(null);\r\n\r\n useEffect(() => {\r\n const getExams = () => {\r\n abpnClient.get>(`/api/Examination/GetExaminationHistory`, authContext)\r\n .then(exams => {\r\n setExamHistory(exams);\r\n setIsLoading(false);\r\n });\r\n }\r\n getExams();\r\n }, []);\r\n\r\n const authContext = useContext(AuthContext);\r\n\r\n const getGrade = (exam: ExaminationHistory) => {\r\n if (exam.examineeStatusReasonId === ExamineeStatusReason.Invalidated) return exam.examineeStatusReason;\r\n\r\n if (exam.examinationGrade === ExaminationGrade.Pass) return \"Pass\";\r\n\r\n if (exam.examinationGrade === ExaminationGrade.Fail) return \"Fail\";\r\n\r\n if (exam.examineeStatus === ExamineeStatus.UnexcusedAbsence) return \"Unexcused Absence\";\r\n\r\n if (exam.examinationGrade === null) return \"N/A\"\r\n\r\n return \"\";\r\n }\r\n\r\n const getCandidateStatusDescription = (exam: ExaminationHistory) => {\r\n return exam.candidateStatusReason;\r\n }\r\n\r\n const downloadExamResultsAvailable = (exam: ExaminationHistory) => {\r\n if (exam.examineeStatusReasonId === ExamineeStatusReason.Invalidated || !exam.hasExamineeDocuments) return false;\r\n\r\n var examStartDate = getDateWithOffset(exam.startDate);\r\n\r\n if (exam.isPrimary && !exam.isMoc && examStartDate.getFullYear() >= validInitialSpecialtyCertYear) return true;\r\n\r\n return examStartDate.getFullYear() >= validForAnyExamAdministeredYear;\r\n }\r\n\r\n const showConfirmPersonalInfoMessage = (exam: ExaminationHistory) => {\r\n var result = new Date();\r\n result.setDate(result.getDate() - 120);\r\n\r\n var cutoff = getDateWithOffset(result.toString());\r\n var endDateCheck = getDateWithOffset(exam.endDate);\r\n\r\n var isInConfirmDateRange = endDateCheck >= cutoff;\r\n var isMoc = exam.isMoc;\r\n return exam.examinationGrade === ExaminationGrade.Pass && isInConfirmDateRange && !isMoc;\r\n }\r\n\r\n const showConfirmPersonalInfoMessageMOC = (exam: ExaminationHistory) => {\r\n var result = new Date();\r\n result.setDate(result.getDate() - 120);\r\n\r\n var cutoff = getDateWithOffset(result.toString());\r\n var endDateCheck = getDateWithOffset(exam.endDate);\r\n\r\n var isInConfirmDateRange = endDateCheck >= cutoff;\r\n var isMoc = exam.isMoc;\r\n return exam.examinationGrade === ExaminationGrade.Pass && isInConfirmDateRange && isMoc;\r\n }\r\n\r\n const download = async (e: React.MouseEvent, examinationId: number) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n setExaminationIdDownloading(examinationId);\r\n setIsDownloading(true);\r\n\r\n var response = await abpnClient.getResponse(`/api/examination/DownloadScoreReport?examinationId=${examinationId}`, authContext)\r\n var blob = await response.blob();\r\n\r\n const downloadFileUrl = window.URL.createObjectURL(\r\n new Blob([blob]),\r\n );\r\n const link = document.createElement('a');\r\n link.href = downloadFileUrl;\r\n link.setAttribute(\r\n 'download',\r\n `ExaminationGrade.pdf`,\r\n );\r\n\r\n // Append to html link element page\r\n document.body.appendChild(link);\r\n\r\n // Start download\r\n link.click();\r\n\r\n // Clean up and remove the link\r\n link.parentNode.removeChild(link);\r\n\r\n setIsDownloading(false);\r\n }\r\n\r\n if (isLoading) return ;\r\n\r\n if (examHistory == null || examHistory.length === 0) return

No Examination History

\r\n \r\n return (\r\n \r\n
\r\n
Examination History
\r\n
\r\n \r\n \r\n {examHistory.map(exam => {\r\n return (\r\n \r\n \r\n \r\n
{exam.certificationName.toUpperCase()}
\r\n
{exam.moduleSelection}{exam.formattedCnpType}
\r\n \r\n \r\n \r\n \r\n
Exam Start Date
\r\n
{getDateWithOffset(exam.startDate).toLocaleDateString()}
\r\n \r\n \r\n
Examination Name
\r\n
{exam.title}
\r\n \r\n \r\n
Grade
\r\n
{getGrade(exam)}
\r\n \r\n \r\n
Application Status
\r\n
{getCandidateStatusDescription(exam)}
\r\n \r\n \r\n {downloadExamResultsAvailable(exam) ?\r\n (isDownloading && examinationIdDownloading === exam.examinationId) ? :\r\n : null\r\n }\r\n \r\n
\r\n {showConfirmPersonalInfoMessage(exam) &&\r\n \r\n
\r\n \r\n \r\n
\r\n Confirm your Personal Information within 30 days of the date of the Grade Letter found in Exam Results.\r\n
\r\n
\r\n Confirm your Name and Title along with your Contact, Shipping, and Public addresses to ensure successful\r\n delivery of your certificate and correct publication of your name and address.\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n }\r\n {showConfirmPersonalInfoMessageMOC(exam) &&\r\n \r\n
\r\n \r\n \r\n
\r\n Confirm your Personal Information within 30 days of the date of the Grade Letter found in Exam Results.\r\n
\r\n
\r\n It is your responsibility to keep the information current in your ABPN Physician Portal throughout your career.\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n }\r\n \r\n
\r\n
\r\n
\r\n )\r\n })}\r\n
\r\n
\r\n
\r\n );\r\n}","import React from \"react\";\r\nimport { Container, Navbar, NavbarBrand } from \"react-bootstrap\";\r\nimport NavbarToggle from \"react-bootstrap/esm/NavbarToggle\";\r\nimport { Link } from \"react-router-dom\";\r\n\r\ninterface IProps { }\r\n\r\ninterface IState { }\r\n\r\nexport default class Unauthorized extends React.Component {\r\n render() {\r\n return (\r\n \r\n
\r\n \r\n \r\n Physician Portal\r\n \r\n \r\n \r\n
\r\n
\r\n You are unauthorized to view this page. If you believe you received this page in error, try logging out and logging back in again.\r\n
\r\n
\r\n );\r\n }\r\n}","export default class CCActivity {\r\n ccActivityId: number;\r\n activityName: string;\r\n organizationName: string;\r\n completedDate: string\r\n isSa: boolean;\r\n isPipClinical: boolean;\r\n isPipFeedback: boolean;\r\n isPatientSafety: boolean;\r\n cmeCredits: number;\r\n saCredits: number;\r\n isEditing: boolean;\r\n isNew: boolean;\r\n}","import React, { Fragment, useContext, useState } from \"react\";\r\nimport { Button, Form } from \"react-bootstrap\";\r\nimport { deepCopy } from \"../Shared/Utility/DeepCopy\";\r\nimport InputMask from 'react-input-mask';\r\nimport CCActivity from \"../Physician/Models/CCActivity\";\r\nimport { abpnClient } from \"../../Services/AbpnClient\";\r\nimport { AuthContext } from \"../Auth/AuthProvider\";\r\nimport { getDateWithOffset } from \"../Shared/Utility/GetDateWithOffset\";\r\n\r\ninterface IProps {\r\n selfReportedActivity: CCActivity;\r\n handleRemove: (selfReportedActivity: CCActivity) => void;\r\n handleUpdate: (ccActivityId: number, selfReportedActivity: CCActivity) => void;\r\n}\r\n\r\nexport function SelfReportedActivityRow(props: IProps) {\r\n const [originalSelfReportedActivity, setOriginalSelfReportedActivity] = useState(props.selfReportedActivity);\r\n const [updatedSelfReportedActivity, setUpdatedSelfReportedActivity] = useState(props.selfReportedActivity);\r\n const [isConfirmingDelete, setIsConfirmingDelete] = useState(false);\r\n const [organizationErrorMessage, setOrganizationErrorMessage] = useState(\"\");\r\n const [dateErrorMessage, setDateErrorMessage] = useState(\"\");\r\n const [cmeErrorMessage, setCmeErrorMessage] = useState(\"\");\r\n const [saCmeErrorMessage, setSaCmeErrorMessage] = useState(\"\");\r\n\r\n const authContext = useContext(AuthContext);\r\n\r\n const beginEdit = () => {\r\n var updated = deepCopy(updatedSelfReportedActivity);\r\n updated.isEditing = true;\r\n setUpdatedSelfReportedActivity(updated);\r\n }\r\n\r\n const cancel = () => {\r\n if (originalSelfReportedActivity.isNew) {\r\n props.handleRemove(originalSelfReportedActivity);\r\n }\r\n else {\r\n setUpdatedSelfReportedActivity(originalSelfReportedActivity);\r\n }\r\n }\r\n \r\n const save = () => {\r\n clearValidation();\r\n\r\n if (validate()) {\r\n const url = \"/api/Physician/SaveCCSelfReportedActivity/\";\r\n abpnClient.post(url, updatedSelfReportedActivity, authContext).then(result => {\r\n setOriginalSelfReportedActivity(result);\r\n setUpdatedSelfReportedActivity(result);\r\n props.handleUpdate(originalSelfReportedActivity.ccActivityId, result);\r\n });\r\n }\r\n }\r\n\r\n const clearValidation = () => {\r\n setOrganizationErrorMessage(\"\");\r\n setDateErrorMessage(\"\");\r\n setCmeErrorMessage(\"\");\r\n setSaCmeErrorMessage(\"\");\r\n }\r\n const validate = () => {\r\n var isValid = true;\r\n\r\n if (!updatedSelfReportedActivity.organizationName) {\r\n setOrganizationErrorMessage(\"Organization Name is required.\");\r\n isValid = false;\r\n }\r\n\r\n if (!Date.parse(updatedSelfReportedActivity.completedDate)) {\r\n setDateErrorMessage(\" Completed date invalid. Expected format: MM/DD/YYYY\");\r\n isValid = false\r\n }\r\n var isValidCme = updatedSelfReportedActivity.cmeCredits >= 0;\r\n if (!isValidCme) {\r\n setCmeErrorMessage(\"CME credit amount must be 0 or greater.\");\r\n isValid = false\r\n }\r\n\r\n var isValidSa = updatedSelfReportedActivity.saCredits >= 0;\r\n if (!isValidSa) {\r\n setSaCmeErrorMessage(\"SA CME credit amount must be 0 or greater.\");\r\n isValid = false\r\n }\r\n\r\n return isValid;\r\n }\r\n\r\n const updateCompletedDate = (value: string) => {\r\n var updated = deepCopy(updatedSelfReportedActivity);\r\n\r\n if (Date.parse(value)) {\r\n updated.completedDate = getDateWithOffset(value).toJSON();\r\n }\r\n setUpdatedSelfReportedActivity(updated);\r\n }\r\n\r\n const updateActivityName = (value: string) => {\r\n setUpdatedSelfReportedActivity({ ...updatedSelfReportedActivity, activityName: value });\r\n }\r\n\r\n const updateOrganizationName = (value: string) => {\r\n setUpdatedSelfReportedActivity({ ...updatedSelfReportedActivity, organizationName: value });\r\n }\r\n\r\n const updateCMECredits = (value: number) => {\r\n setUpdatedSelfReportedActivity({ ...updatedSelfReportedActivity, cmeCredits: value });\r\n }\r\n\r\n const updateSACredits = (value: number) => {\r\n setUpdatedSelfReportedActivity({ ...updatedSelfReportedActivity, saCredits: value });\r\n }\r\n\r\n const updateIsPIPClinical = () => {\r\n setUpdatedSelfReportedActivity({ ...updatedSelfReportedActivity, isPipClinical: !updatedSelfReportedActivity.isPipClinical });\r\n }\r\n\r\n const updateIsPIPFeedback = () => {\r\n setUpdatedSelfReportedActivity({ ...updatedSelfReportedActivity, isPipFeedback: !updatedSelfReportedActivity.isPipFeedback });\r\n }\r\n\r\n const updateIsPatientSafety = () => {\r\n setUpdatedSelfReportedActivity({ ...updatedSelfReportedActivity, isPatientSafety: !updatedSelfReportedActivity.isPatientSafety });\r\n }\r\n\r\n const formatDefaultValue = (value: string) => {\r\n var date = getDateWithOffset(value);\r\n if (date == null) return \"\"\r\n var year = date.getFullYear();\r\n\r\n var month = (1 + date.getMonth()).toString();\r\n month = month.length > 1 ? month : '0' + month;\r\n\r\n var day = date.getDate().toString();\r\n day = day.length > 1 ? day : '0' + day;\r\n\r\n return month + '/' + day + '/' + year;\r\n }\r\n\r\n if (isConfirmingDelete) {\r\n return (\r\n \r\n \r\n \r\n Do you want to delete Activity \"{updatedSelfReportedActivity.activityName}\"?\r\n \r\n \r\n \r\n \r\n \r\n )\r\n }\r\n return (\r\n \r\n {updatedSelfReportedActivity.isEditing ?\r\n \r\n \r\n updateActivityName(e.target.value)} />\r\n \r\n \r\n \r\n updateOrganizationName(e.target.value)} />\r\n {organizationErrorMessage}\r\n \r\n \r\n \r\n updateCompletedDate(e.target.value)}>\r\n {(inputProps: any) => {\r\n return \r\n }}\r\n \r\n {dateErrorMessage}\r\n \r\n \r\n updateCMECredits(parseFloat(e.target.value))} />\r\n {cmeErrorMessage}\r\n \r\n \r\n updateSACredits(parseFloat(e.target.value))} />\r\n {saCmeErrorMessage}\r\n \r\n \r\n \r\n updateIsPIPClinical()} />\r\n \r\n \r\n \r\n \r\n updateIsPIPFeedback()} />\r\n \r\n \r\n \r\n \r\n updateIsPatientSafety()} />\r\n \r\n \r\n \r\n :\r\n \r\n \r\n {updatedSelfReportedActivity.activityName}\r\n \r\n \r\n {updatedSelfReportedActivity.organizationName}\r\n \r\n \r\n {getDateWithOffset(updatedSelfReportedActivity.completedDate).toLocaleDateString()}\r\n \r\n \r\n {updatedSelfReportedActivity.cmeCredits}\r\n \r\n \r\n {updatedSelfReportedActivity.saCredits}\r\n \r\n \r\n {updatedSelfReportedActivity.isPipClinical ? : \"-\"}\r\n \r\n \r\n {updatedSelfReportedActivity.isPipFeedback ? : \"-\"}\r\n \r\n \r\n {updatedSelfReportedActivity.isPatientSafety ? : \"-\"}\r\n \r\n \r\n }\r\n \r\n
\r\n {updatedSelfReportedActivity.isEditing ?\r\n \r\n \r\n \r\n \r\n :\r\n \r\n \r\n \r\n \r\n }\r\n
\r\n \r\n \r\n );\r\n}\r\n\r\nexport default SelfReportedActivityRow;","import React, { Fragment, useContext, useEffect, useState } from \"react\";\r\nimport { Button, Card, Col, Container, Form, OverlayTrigger, Row, Table, Tooltip } from \"react-bootstrap\";\r\nimport { abpnClient } from \"../../Services/AbpnClient\";\r\nimport { AuthContext } from \"../Auth/AuthProvider\";\r\nimport CCActivity from \"../Physician/Models/CCActivity\";\r\nimport Physician from \"../Physician/Models/Physician\";\r\nimport AbpnSpinner from \"../Shared/Components/AbpnSpinner\";\r\nimport { deepCopy } from \"../Shared/Utility/DeepCopy\";\r\nimport SelfReportedActivityRow from \"./SelfReportedActivityRow\";\r\nimport InputMask from 'react-input-mask';\r\nimport { getDateWithOffset } from \"../Shared/Utility/GetDateWithOffset\";\r\nimport { Redirect } from \"react-router\";\r\n\r\nexport default function ManageActivities() {\r\n const [physician, setPhysician] = useState(null);\r\n const [verifiedActivities, setVerifiedActivities] = useState>(null);\r\n const [verifiedActivitiesStartDate, setVerifiedActivitiesStartDate] = useState(null);\r\n const [verifiedActivitiesEndDate, setVerifiedActivitiesEndDate] = useState(null);\r\n const [selfReportedActivities, setSelfReportedActivities] = useState>(null);\r\n const [selfReportedActivitiesStartDate, setSelfReportedActivitiesStartDate] = useState(null);\r\n const [selfReportedActivitiesEndDate, setSelfReportedActivitiesEndDate] = useState(null);\r\n const [filteredSelfReportedActivities, setFilteredSelfReportedActivities] = useState>(null);\r\n const [filterInputUpdate, setFilterInputUpdate] = useState(0);\r\n\r\n const authContext = useContext(AuthContext);\r\n\r\n useEffect(() => {\r\n abpnClient.get(\"/api/physician\", authContext)\r\n .then(_ => {\r\n setPhysician(_);\r\n let dateSort = (a: CCActivity, b: CCActivity) => {\r\n return getDateWithOffset(b.completedDate).getTime() - getDateWithOffset(a.completedDate).getTime();\r\n }\r\n let sortedVerifiedActivities = _.ccVerifiedActivities.sort(dateSort);\r\n setVerifiedActivities(sortedVerifiedActivities);\r\n let sortedSelfReportedActivities = _.ccSelfReportedActivities.sort(dateSort);\r\n setSelfReportedActivities(sortedSelfReportedActivities);\r\n });\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (physician?.ccVerifiedActivities) {\r\n let filterededVerifiedActivities = physician.ccVerifiedActivities;\r\n let startDate = getDateWithOffset(verifiedActivitiesStartDate)?.getTime();\r\n if (startDate) {\r\n filterededVerifiedActivities = filterededVerifiedActivities.filter(_ => \r\n getDateWithOffset(_.completedDate).getTime() >= getDateWithOffset(verifiedActivitiesStartDate).getTime()\r\n );\r\n }\r\n let endDate = getDateWithOffset(verifiedActivitiesEndDate)?.getTime();\r\n if (endDate) {\r\n filterededVerifiedActivities = filterededVerifiedActivities.filter(_ => \r\n getDateWithOffset(_.completedDate).getTime() <= endDate\r\n );\r\n }\r\n setVerifiedActivities(filterededVerifiedActivities);\r\n }\r\n }, [verifiedActivitiesStartDate, verifiedActivitiesEndDate]);\r\n\r\n useEffect(() => {\r\n if (selfReportedActivities) {\r\n let newFilterededSelfReportedActivities = deepCopy(selfReportedActivities);\r\n let startDate = getDateWithOffset(selfReportedActivitiesStartDate)?.getTime();\r\n if (startDate) {\r\n newFilterededSelfReportedActivities = newFilterededSelfReportedActivities.filter(_ => \r\n getDateWithOffset(_.completedDate).getTime() >= startDate\r\n );\r\n }\r\n let endDate = getDateWithOffset(selfReportedActivitiesEndDate)?.getTime();\r\n if (endDate) {\r\n newFilterededSelfReportedActivities = newFilterededSelfReportedActivities.filter(_ => \r\n getDateWithOffset(_.completedDate).getTime() <= endDate\r\n );\r\n }\r\n setFilteredSelfReportedActivities(newFilterededSelfReportedActivities);\r\n }\r\n }, [selfReportedActivitiesStartDate, selfReportedActivitiesEndDate, selfReportedActivities]);\r\n\r\n const addNewSelfReportedActivity = () => {\r\n clearSelfReportedFitler();\r\n var newSelfReportedActivity = new CCActivity();\r\n newSelfReportedActivity.isNew = true;\r\n newSelfReportedActivity.isEditing = true;\r\n var newList = deepCopy(selfReportedActivities);\r\n newList.unshift(newSelfReportedActivity);\r\n setSelfReportedActivities(newList);\r\n \r\n let table = document.getElementById(\"selfReportedActivitiesTable\");\r\n if (table) table.scrollTop = 0;\r\n }\r\n\r\n const removeSelfReportedActivity = (selfReportedActivity: CCActivity) => {\r\n if (!selfReportedActivity.isNew) {\r\n const url = \"/api/Physician/DeleteCCSelfReportedActivity/\";\r\n abpnClient.post(url, selfReportedActivity, authContext).then(() => {\r\n var newList = deepCopy(selfReportedActivities.filter(_ => _.ccActivityId !== selfReportedActivity.ccActivityId));\r\n setSelfReportedActivities(newList);\r\n });\r\n }\r\n else {\r\n var newList = deepCopy(selfReportedActivities.filter(_ => _.ccActivityId !== selfReportedActivity.ccActivityId));\r\n setSelfReportedActivities(newList);\r\n }\r\n }\r\n\r\n const updateSelfReportedActivity = (ccActivityId: number, selfReportedActivity: CCActivity) => {\r\n var updated = deepCopy(selfReportedActivities);\r\n var index = updated.findIndex(_ => _.ccActivityId == ccActivityId);\r\n updated[index] = selfReportedActivity;\r\n setSelfReportedActivities(updated);\r\n }\r\n\r\n const canAddNew = () => {\r\n var hasNewSelfReportedActivity = selfReportedActivities?.find(_ => _.isNew);\r\n return !hasNewSelfReportedActivity;\r\n }\r\n\r\n const clearVerifiedFilter = () => {\r\n setVerifiedActivitiesStartDate(null);\r\n setVerifiedActivitiesEndDate(null);\r\n forceFilterInputUpdate();\r\n }\r\n\r\n const clearSelfReportedFitler = () => {\r\n setSelfReportedActivitiesStartDate(null);\r\n setSelfReportedActivitiesEndDate(null);\r\n forceFilterInputUpdate();\r\n }\r\n\r\n const forceFilterInputUpdate = () => {\r\n //workaround for InputMask not rerendering correctly\r\n setFilterInputUpdate(filterInputUpdate + 1);\r\n }\r\n\r\n if (!physician) return \r\n\r\n if (physician.isDansInvalidatedAllowReentryExam) return ;\r\n \r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n VERIFIED ACTIVITIES\r\n \r\n Records of completed CC credits and activities from various professional organizations are reported directly to ABPN within three months of the activity completion. In the event of an audit, no further documentation is required from a diplomate for verified activities.\r\n }>\r\n \r\n \r\n \r\n \r\n \r\n Display From\r\n setVerifiedActivitiesStartDate(e.target.value)}>\r\n {(inputProps: any) => {\r\n return \r\n }}\r\n \r\n \r\n \r\n To\r\n setVerifiedActivitiesEndDate(e.target.value)}>\r\n {(inputProps: any) => {\r\n return \r\n }}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {(!verifiedActivities || verifiedActivities.length === 0) ?\r\n
\r\n No Verified Activities on file. It may take up to three months from the event date to be reported.\r\n
\r\n :\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {verifiedActivities.map(_ =>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n
\r\n
Activity Name
\r\n
\r\n
Organization
\r\n
\r\n
Completed
\r\n
\r\n
CME
\r\n
\r\n
SA CME
\r\n
\r\n
PIP Clinical
\r\n
\r\n
PIP Feedback
\r\n
\r\n
Patient Safety
\r\n
\r\n {_.activityName}\r\n \r\n {_.organizationName}\r\n \r\n {getDateWithOffset(_.completedDate).toLocaleDateString()}\r\n \r\n {_.cmeCredits}\r\n \r\n {_.saCredits}\r\n \r\n {_.isPipClinical ? : \"-\"}\r\n \r\n {_.isPipFeedback ? : \"-\"}\r\n \r\n {_.isPatientSafety ? : \"-\"}\r\n
\r\n
\r\n
\r\n
Allow up to three months from the activity completion date for the credits to be reported to ABPN.
\r\n
\r\n }\r\n
\r\n
\r\n \r\n \r\n \r\n SELF-REPORTED ACTIVITIES - Optional Tracker\r\n \r\n Diplomates can utilize this optional feature to enter and keep track of CC activities they have completed. Diplomates must still enter the total number of credits completed per block in the CC Activity Attestations section. Self-reported activities are not considered verified nor waived by the ABPN. Diplomates must maintain their CME certificates/transcripts for self-reported activities in the event of an audit.\r\n }>\r\n \r\n \r\n \r\n \r\n \r\n \r\n Display From\r\n setSelfReportedActivitiesStartDate(e.target.value)}>\r\n {(inputProps: any) => {\r\n return \r\n }}\r\n \r\n \r\n \r\n To\r\n setSelfReportedActivitiesEndDate(e.target.value)}>\r\n {(inputProps: any) => {\r\n return \r\n }}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {(!filteredSelfReportedActivities || filteredSelfReportedActivities.length === 0) ?\r\n
\r\n No Self-reported Activities on file. Click the Add button to enter your Self-reported activity. This is to help you keep track of your records.\r\n
\r\n :\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {filteredSelfReportedActivities.map(_ =>\r\n \r\n )}\r\n \r\n
\r\n
Activity Name
\r\n
\r\n
Organization
\r\n
\r\n
Completed
\r\n
\r\n
CME
\r\n
\r\n
SA CME
\r\n
\r\n
PIP Clinical
\r\n
\r\n
PIP Feedback
\r\n
\r\n
Patient Safety
\r\n
\r\n
Actions
\r\n
\r\n
\r\n
\r\n
\r\n }\r\n
\r\n
\r\n \r\n
\r\n
\r\n );\r\n}","import React from \"react\";\r\nimport { Alert, Button, Card, Col, Container, Row } from \"react-bootstrap\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { ApplicationPaths } from \"../../Services/Auth/AuthConstants\";\r\n\r\nexport function EmailNotFound() {\r\n\r\n return (\r\n \r\n
\r\n PHYSICIAN PORTAL\r\n
\r\n

Email Not Found

\r\n
\r\n \r\n \r\n

The email address you entered was not found. If you have an active ABPN Physician Portal account, please try again. \r\n If you do not have an account, click First-time User and follow instructions.\r\n

\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default EmailNotFound;","import React, { useState } from \"react\";\r\nimport { useEffect } from \"react\";\r\nimport { Form, InputGroup } from \"react-bootstrap\";\r\nimport { ValidatorHelper } from \"../ValidatorHelper\";\r\n\r\ninterface IProps {\r\n onChange: (value: string) => void\r\n validate: boolean;\r\n validationMessage: string;\r\n isValid: boolean;\r\n}\r\n\r\nexport default function PasswordControl(props: IProps) {\r\n const [inputType, setInputType] = useState(\"password\");\r\n const [iconName, setIconName] = useState(\"la-eye\");\r\n \r\n var element = React.createRef();\r\n\r\n useEffect(() => {\r\n setIconName(inputType === \"password\" ? \"la-eye\": \"la-low-vision\")\r\n }, [inputType])\r\n\r\n const toggleShowCharacters = () => {\r\n setInputType(inputType === \"password\" ? \"text\" : \"password\");\r\n }\r\n\r\n useEffect(() => {\r\n ValidatorHelper.clearCustomValidation(element.current);\r\n \r\n if (props.validate && !props.isValid){\r\n ValidatorHelper.setCustomValidationWithFeedback(element.current, props.validationMessage);\r\n }\r\n })\r\n\r\n return (\r\n \r\n props.onChange(e.target.value)}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n )\r\n\r\n}\r\n","import React, { Fragment, useContext, useEffect, useState } from \"react\";\r\nimport { Row, Col, Button, Card, Form, Alert, Collapse, OverlayTrigger, Tooltip } from \"react-bootstrap\";\r\nimport { Prompt } from \"react-router-dom\";\r\nimport { abpnClient, IdentityServerKnownClient } from \"../../Services/AbpnClient\";\r\nimport { AuthContext } from \"../Auth/AuthProvider\";\r\nimport ActivateUser from \"../Auth/Models/ActivateUser\";\r\nimport Physician from \"../Physician/Models/Physician\";\r\nimport AbpnSpinner from \"../Shared/Components/AbpnSpinner\";\r\nimport PasswordControl from \"../Shared/Components/PasswordControl\";\r\nimport { deepCopy } from \"../Shared/Utility/DeepCopy\";\r\nimport ChangeEmailModel from \"./Models/ChangeEmailModel\";\r\nimport ChangePasswordModel from \"./Models/ChangePasswordModel\";\r\n\r\ninterface IProps {\r\n isSectionOpen: boolean;\r\n physician: Physician;\r\n}\r\n\r\nexport default function SecurityCard(props: IProps) {\r\n const [openCollapse, setOpenCollapse] = useState(props.isSectionOpen);\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [currentEmail, setCurrentEmail] = useState(props.physician.emailAddress);\r\n const [updatedEmail, setUpdatedEmail] = useState(props.physician.emailAddress);\r\n const [isEditingEmail, setIsEditingEmail] = useState(false);\r\n const [isEditingPassword, setIsEditingPassword] = useState(false);\r\n const [changePasswordModel, setChangePasswordModel] = useState({ email: props.physician.emailAddress } as ChangePasswordModel);\r\n const [showEmailSuccess, setShowEmailSuccess] = useState(false);\r\n const [showPasswordSuccess, setShowPasswordSuccess] = useState(false);\r\n const [passwordErrorMessage, setPasswordErrorMessage] = useState(null);\r\n const [emailErrorMessage, setEmailErrorMessage] = useState(null);\r\n const [validatePassword, setValidatePassword] = useState(false);\r\n\r\n const authContext = useContext(AuthContext);\r\n const isNewPasswordValid = changePasswordModel.newPassword === changePasswordModel.confirmNewPassword;\r\n\r\n useEffect(() => {\r\n setEmailErrorMessage(\"\");\r\n }, [isEditingEmail]);\r\n\r\n useEffect(() => {\r\n setPasswordErrorMessage(\"\");\r\n }, [isEditingPassword]);\r\n\r\n useEffect(() => {\r\n var updated = deepCopy(changePasswordModel);\r\n updated.email = currentEmail;\r\n setChangePasswordModel(updated);\r\n }, [currentEmail]);\r\n\r\n const updateEmailAddress = (value: string) => {\r\n setUpdatedEmail(value);\r\n }\r\n\r\n const updateCurrentPassword = (value: string) => {\r\n var updated = deepCopy(changePasswordModel);\r\n updated.currentPassword = value;\r\n setChangePasswordModel(updated);\r\n }\r\n\r\n const updateNewPassword = (value: string) => {\r\n var updated = deepCopy(changePasswordModel);\r\n updated.newPassword = value;\r\n setChangePasswordModel(updated);\r\n }\r\n\r\n const updateConfirmPassword = (value: string) => {\r\n var updated = deepCopy(changePasswordModel);\r\n updated.confirmNewPassword = value;\r\n setChangePasswordModel(updated);\r\n }\r\n\r\n const cancelEditEmailAddress = () => {\r\n setUpdatedEmail(currentEmail);\r\n setIsEditingEmail(false);\r\n }\r\n\r\n const changeEmailAddress = async (e: React.FormEvent) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n setEmailErrorMessage(\"\");\r\n\r\n e.currentTarget.classList.add('was-validated');\r\n if (e.currentTarget.checkValidity()) {\r\n e.currentTarget.classList.remove('was-validated');\r\n setIsLoading(true);\r\n\r\n const isValid = await abpnClient.post('/api/profile/ValidateEmail', { email: updatedEmail } as ActivateUser, authContext);\r\n\r\n if (isValid) {\r\n await abpnClient.post('/api/Physician/UpdateEmail', { physicianId: props.physician.physicianId, currentEmail: currentEmail, newEmail: updatedEmail } as ChangeEmailModel, authContext);\r\n\r\n let changeEmailModel = { \r\n currentEmail: currentEmail, \r\n newEmail: updatedEmail, \r\n registerClientId: IdentityServerKnownClient.physicianPortal,\r\n lastName: props.physician.lastName,\r\n ssn4: props.physician.ssn4,\r\n dateOfBirth: props.physician.dateOfBirth,\r\n email: updatedEmail\r\n } as ChangeEmailModel;\r\n const res = await authContext.changeEmail(changeEmailModel);\r\n if (res.ok) {\r\n setCurrentEmail(updatedEmail);\r\n setShowEmailSuccess(true);\r\n setIsEditingEmail(false);\r\n setTimeout(function () {\r\n setShowEmailSuccess(false);\r\n }, 5000);\r\n }\r\n else {\r\n const text = await res.text();\r\n setEmailErrorMessage(text);\r\n }\r\n setIsLoading(false);\r\n }\r\n else {\r\n setEmailErrorMessage(\"The email you provided is already in use. Please try a new email.\");\r\n setIsLoading(false);\r\n }\r\n }\r\n }\r\n\r\n const changePassword = (e: React.FormEvent) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n setPasswordErrorMessage(\"\");\r\n\r\n e.currentTarget.classList.add('was-validated');\r\n setValidatePassword(true)\r\n\r\n if (isNewPasswordValid && e.currentTarget.checkValidity()) {\r\n e.currentTarget.classList.remove('was-validated');\r\n setValidatePassword(false);\r\n\r\n setIsLoading(true);\r\n authContext.changePassword(changePasswordModel).then(async res => {\r\n if (res.ok) {\r\n setShowPasswordSuccess(true);\r\n setIsEditingPassword(false);\r\n setTimeout(function () {\r\n setShowPasswordSuccess(false);\r\n }, 5000);\r\n }\r\n else {\r\n const text = await res.text();\r\n setPasswordErrorMessage(text);\r\n }\r\n setIsLoading(false);\r\n })\r\n }\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n setOpenCollapse(!openCollapse)}>\r\n Security\r\n \r\n {isLoading ? :\r\n \r\n \r\n \r\n \r\n {showEmailSuccess && Success! Your Email has been updated.}\r\n \r\n Personal Email Address\r\n \r\n Your email address will be used to login to your portal. ABPN highly recommends keeping a personal email address on file to ensure you receive all communications regarding applications, exams, certification requirements, pertinent updates, and to access your Physician Portal.\r\n }>\r\n \r\n \r\n \r\n {isEditingEmail ?\r\n
changeEmailAddress(e)}>\r\n \r\n Personal Email Address\r\n updateEmailAddress(e.target.value)}\r\n defaultValue={updatedEmail ?? null} />\r\n {emailErrorMessage}\r\n \r\n {emailErrorMessage &&\r\n \r\n {emailErrorMessage}\r\n }\r\n
\r\n \r\n \r\n
\r\n
\r\n :\r\n \r\n {currentEmail}\r\n \r\n \r\n }\r\n
\r\n
\r\n \r\n \r\n \r\n {showPasswordSuccess && Success! Your Password has been updated.}\r\n \r\n Password\r\n {isEditingPassword ?\r\n \r\n
changePassword(e)}>\r\n \r\n Old Password *\r\n \r\n \r\n
Use 8 or more characters to set your new password.
\r\n \r\n New Password *\r\n \r\n \r\n \r\n Confirm New Password *\r\n \r\n \r\n {passwordErrorMessage &&\r\n \r\n {passwordErrorMessage}\r\n }\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n :\r\n \r\n }\r\n
\r\n
\r\n \r\n
\r\n
}\r\n
\r\n
\r\n );\r\n}","import React, { Fragment, useState } from \"react\";\r\nimport { Row, Col, Button, Card, Collapse, } from \"react-bootstrap\";\r\nimport Physician from \"../Physician/Models/Physician\";\r\nimport { getDateWithOffset } from \"../Shared/Utility/GetDateWithOffset\";\r\n\r\ninterface IProps {\r\n isSectionOpen: boolean;\r\n physicianId: number;\r\n physician: Physician;\r\n}\r\n\r\nexport default function PersonalCard(props: IProps) {\r\n const [openCollapse, setOpenCollapse] = useState(props.isSectionOpen);\r\n const currentName = props.physician.fullName;\r\n const dateOfBirth = getDateWithOffset(props.physician.dateOfBirth).toLocaleDateString();\r\n const ssn4 = props.physician.ssn4;\r\n const instructionsUrl = 'https://www.abpn.org/wp-content/uploads/2015/05/ABPN_Name_DOB_SSN_Change_Instructions.pdf';\r\n\r\n const openInstructions = () => {\r\n window.open(instructionsUrl, '_blank').focus();\r\n }\r\n\r\n let viewInstructionsButton = \r\n\r\n return (\r\n \r\n \r\n setOpenCollapse(!openCollapse)}>\r\n Personal\r\n \r\n \r\n \r\n \r\n \r\n \r\n Name\r\n \r\n {currentName}\r\n {viewInstructionsButton}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Date of Birth\r\n \r\n {dateOfBirth}\r\n {viewInstructionsButton}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Last 4 of SSN\r\n \r\n {ssn4}\r\n {viewInstructionsButton}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n}","import { Fragment, useContext, useEffect, useState } from \"react\";\r\nimport { Row, Col, Button, Card, Collapse, OverlayTrigger, Tooltip, Alert, Form } from \"react-bootstrap\";\r\nimport { Address } from \"../Physician/Models/Address\";\r\nimport { abpnClient } from \"../../Services/AbpnClient\";\r\nimport { AuthContext } from \"../Auth/AuthProvider\";\r\nimport { CountryLookupItem, StateWithCountryLookupItem } from \"../Shared/Models/StateWithCountryLookupItem\";\r\nimport AddressForm from \"../Shared/Components/AddressForm\";\r\nimport { AddressType } from \"../Shared/Enums/AddressType\";\r\nimport { CountryId } from \"../Shared/Enums/CountryId\";\r\nimport { deepCopy } from \"../Shared/Utility/DeepCopy\";\r\nimport { Prompt } from \"react-router-dom\";\r\n\r\ninterface IProps {\r\n isSectionOpen: boolean;\r\n physicianId: number;\r\n addresses: Array
;\r\n states: Array;\r\n countries: Array;\r\n}\r\n\r\nexport default function AddressesCard(props: IProps) {\r\n const [addresses, setAddresses] = useState>(props.addresses);\r\n const [openCollapse, setOpenCollapse] = useState(props.isSectionOpen);\r\n const [contactAddress, setContactAddress] = useState
(null);\r\n const [shippingAddress, setShippingAddress] = useState
(null);\r\n const [publicAddress, setPublicAddress] = useState
(null);\r\n const [isEditingContactAddress, setIsEditingContactAddress] = useState(false);\r\n const [isEditingShippingAddress, setIsEditingShippingAddress] = useState(false);\r\n const [isEditingPublicAddress, setIsEditingPublicAddress] = useState(false);\r\n const [showSuccess, setShowSuccess] = useState(false);\r\n const [hasEUCode, setHasEUCode] = useState(false);\r\n\r\n useEffect(() => {\r\n setAddressesFromList(addresses);\r\n checkForEuCode();\r\n }, [addresses]);\r\n\r\n const authContext = useContext(AuthContext);\r\n\r\n const saveAddress = (address: Address) => {\r\n setIsEditingContactAddress(false);\r\n setIsEditingShippingAddress(false);\r\n setIsEditingPublicAddress(false);\r\n let url = \"/api/Physician/SaveAddresses/\";\r\n let addressList = buildAddressList(address);\r\n abpnClient.post>(url, addressList, authContext).then(result => {\r\n setAddresses(result);\r\n setShowSuccess(true);\r\n setTimeout(() => {\r\n setShowSuccess(false);\r\n }, 5000)\r\n });\r\n }\r\n\r\n const saveOptInOut = (opt: boolean) => {\r\n let url = \"/api/Physician/OptInOut/\";\r\n abpnClient.post(url, opt, authContext);\r\n }\r\n\r\n const setAddressesFromList = (addresses: Array
) => {\r\n let contactAddress = addresses.find(_ => _.isContact);\r\n let shippingAddress = addresses.find(_ => !_.isContact && _.types.includes(AddressType.Shipping));\r\n let publicAddress = addresses.find(_ => !_.isContact && _.types.includes(AddressType.Public));\r\n setContactAddress(contactAddress ?? createNewAddress(AddressType.Contact));\r\n setShippingAddress(shippingAddress ?? createNewAddress(AddressType.Shipping));\r\n setPublicAddress(publicAddress ?? createNewAddress(AddressType.Public));\r\n }\r\n\r\n const checkForEuCode = () => {\r\n let euCodes = [103, 105, 112, 113, 120, 125, 126, 129, 131, 137, 139, 142, 147, 154, 157, 165, 179, 170, 171, 183, 185];\r\n let publicAddress = addresses.find(_ => _.types.includes(AddressType.Public));\r\n setHasEUCode(euCodes.includes(publicAddress?.countryId));\r\n }\r\n\r\n const createNewAddress = (type: AddressType) => {\r\n let newAddress = new Address();\r\n newAddress.countryId = CountryId.Usa;\r\n newAddress.types.push(type);\r\n return newAddress;\r\n }\r\n\r\n const buildAddressList = (address: Address) => {\r\n let addressList = new Array
();\r\n if (address.isContact) {\r\n addressList = deepCopy(addresses);\r\n addressList.splice(addressList.findIndex(_ => _.isContact), 1);\r\n } else {\r\n if (address.types.length == 0 ||(address.types.length == 1 && address.isContact === undefined) && address.types.includes(AddressType.Contact)) {\r\n //Set new address to use for all 3 types\r\n if(address.types.length == 0)\r\n {\r\n address.types.push(AddressType.Contact);\r\n }\r\n address.types.push(AddressType.Public);\r\n address.types.push(AddressType.Shipping);\r\n addressList.push(address);\r\n return addressList;\r\n } else if (address.types.includes(AddressType.Shipping) && address.types.includes(AddressType.Public)) {\r\n let updatedContact = deepCopy(addresses.find(_ => _.isContact))\r\n updatedContact = removeAddressType(updatedContact, AddressType.Shipping);\r\n updatedContact = removeAddressType(updatedContact, AddressType.Public);\r\n addressList.push(updatedContact);\r\n } else if (address.types.includes(AddressType.Shipping)) {\r\n let updatedContact = deepCopy(addresses.find(_ => _.isContact))\r\n if (updatedContact) {\r\n addressList.push(removeAddressType(updatedContact, AddressType.Shipping));\r\n }\r\n\r\n let updatedPublic = deepCopy(addresses.find(_ => !_.isContact && _.types.includes(AddressType.Public)))\r\n if (updatedPublic) {\r\n addressList.push(removeAddressType(updatedPublic, AddressType.Shipping));\r\n }\r\n } else if (address.types.includes(AddressType.Public)) {\r\n let updatedContact = deepCopy(addresses.find(_ => _.isContact))\r\n if (updatedContact) {\r\n addressList.push(removeAddressType(updatedContact, AddressType.Public));\r\n }\r\n\r\n let updatedShipping = deepCopy(addresses.find(_ => !_.isContact && _.types.includes(AddressType.Shipping)))\r\n if (updatedShipping) {\r\n addressList.push(removeAddressType(updatedShipping, AddressType.Public));\r\n }\r\n }\r\n }\r\n\r\n addressList.push(address);\r\n return addressList;\r\n }\r\n\r\n const removeAddressType = (address: Address, type: AddressType) => {\r\n if (address.types.includes(type)) {\r\n address.types.splice(address.types.indexOf(type), 1);\r\n }\r\n return address;\r\n }\r\n\r\n const displayAddress = (address: Address, isPublic: boolean = false) => {\r\n if(!address?.stateId) return No Address Provided\r\n\r\n return \r\n {!isPublic &&\r\n \r\n
{address?.line1}
\r\n
{address?.line2}
\r\n
}\r\n
{address?.city}, {props.states.find(_ => _.id === address?.stateId)?.shortName} {address?.zipCode}
\r\n
{props.countries.find(_ => _.id === address?.countryId)?.name}
\r\n {!isPublic &&\r\n \r\n
\r\n
{address?.homePhoneNumber}
\r\n
}\r\n
\r\n }\r\n\r\n const getGDPRText = () => {\r\n let pubAddress = addresses.find(_ => _.types.includes(AddressType.Public));\r\n let hasntOptedIn = pubAddress.dateOptedIn === null || pubAddress.dateOptedIn === undefined;\r\n return \r\n
Because you have an EU public address, the GDPR requires the ABPN to suppress your diplomate information in ABPN's public-facing board certification verification system, verifyCERT. To opt-in to remove the suppression of your diplomate information in verifyCERT, please check the Opt-in box below.
\r\n
I hereby consent and do authorize the ABPN to process and publish my certification details, including city and country of current residence and waive and any applicable privacy rules or regulations relating to my certification data and status.
\r\n \r\n ) => saveOptInOut(e.target.checked)} />\r\n Opt-in\r\n \r\n
\r\n }\r\n\r\n if (!props.addresses || contactAddress == null)\r\n return (\r\n \r\n \r\n {showSuccess && Success! Address has been updated.}\r\n \r\n setOpenCollapse(!openCollapse)}>\r\n Addresses\r\n \r\n {hasEUCode && {getGDPRText()}}\r\n \r\n \r\n \r\n \r\n \r\n Contact Address\r\n \r\n ABPN highly recommends keeping a personal email address on file to ensure you receive all communications regarding applications, exams, certification requirements, pertinent updates, and to access your ABPN Physician Portal account.\r\n This will be used to log into the Physician Portal.\r\n }>\r\n \r\n \r\n \r\n {isEditingContactAddress ?\r\n setIsEditingContactAddress(false)}\r\n submitText={'Save'}\r\n showCancel={true} />\r\n :\r\n \r\n
\r\n
\r\n
\r\n setIsEditingContactAddress(true)}>\r\n Add\r\n \r\n
\r\n }\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n Certificate Shipping\r\n \r\n This address will be used for shipment of your certificate and will expire from our system six months after the exam window end date.\r\n }>\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n Public\r\n \r\n The Board will submit your name and public address for inclusion in the ABMS’s Certification Matters website, certificationmatters.org upon certification. Lists of diplomates are also sent to other select publications and your name and publication address will be included in these lists.\r\n
\r\n Due to the European General Data Protection Regulation (GDPR), diplomates with a current UK/EU address on file will no longer be published on our VerifyCert directory, or reported to credentialers or any other third parties. Additional GDPR information: https://gdpr-info.eu/\r\n
\r\n
\r\n Note: diplomates with a UK/EU addresses do not have their certification status published due to GDPR regulations.\r\n }>\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n )\r\n return (\r\n \r\n \r\n {showSuccess && Success! Address has been updated.}\r\n \r\n setOpenCollapse(!openCollapse)}>\r\n Addresses\r\n \r\n {hasEUCode && {getGDPRText()}}\r\n \r\n \r\n \r\n \r\n \r\n Contact Address\r\n \r\n ABPN highly recommends keeping a personal email address on file to ensure you receive all communications regarding applications, exams, certification requirements, pertinent updates, and to access your ABPN Physician Portal account.\r\n This will be used to log into the Physician Portal.\r\n }>\r\n \r\n \r\n \r\n {isEditingContactAddress ?\r\n setIsEditingContactAddress(false)}\r\n submitText={'Save'}\r\n showCancel={true} />\r\n :\r\n \r\n {displayAddress(contactAddress)}\r\n setIsEditingContactAddress(true)}>\r\n Edit\r\n \r\n \r\n }\r\n \r\n \r\n \r\n {contactAddress.addressId !== 0 &&\r\n \r\n \r\n \r\n Certificate Shipping\r\n \r\n This address will be used for shipment of your certificate and will expire from our system six months after the exam window end date.\r\n }>\r\n \r\n \r\n \r\n {isEditingShippingAddress ?\r\n setIsEditingShippingAddress(false)}\r\n submitText={'Save'}\r\n showCancel={true} />\r\n :\r\n \r\n {displayAddress(addresses.find(_ => !_.isContact && _.types.includes(AddressType.Shipping)) ? shippingAddress : contactAddress)}\r\n setIsEditingShippingAddress(true)}>\r\n Edit\r\n \r\n \r\n }\r\n \r\n \r\n }\r\n {contactAddress.addressId !== 0 && \r\n \r\n \r\n \r\n Public\r\n \r\n The Board will submit your name and public address for inclusion in the ABMS’s Certification Matters website, certificationmatters.org upon certification. Lists of diplomates are also sent to other select publications and your name and publication address will be included in these lists.\r\n
\r\n Due to the European General Data Protection Regulation (GDPR), diplomates with a current UK/EU address on file will no longer be published on our VerifyCert directory, or reported to credentialers or any other third parties. Additional GDPR information: https://gdpr-info.eu/\r\n
\r\n
\r\n Note: diplomates with a UK/EU addresses do not have their certification status published due to GDPR regulations.\r\n }>\r\n \r\n \r\n
\r\n {isEditingPublicAddress ?\r\n setIsEditingPublicAddress(false)}\r\n submitText={'Save'}\r\n showCancel={true}\r\n showStreetAddress={false} />\r\n :\r\n \r\n {displayAddress(addresses.find(_ => !_.isContact && _.types.includes(AddressType.Public)) ? publicAddress : contactAddress, true)}\r\n setIsEditingPublicAddress(true)}>\r\n Edit\r\n \r\n \r\n }\r\n
\r\n
\r\n }\r\n
\r\n
\r\n
\r\n
\r\n );\r\n}","export default class PhysicianDemographicModel {\r\n constructor()\r\n {\r\n this.races = [];\r\n }\r\n\r\n physicianDemographicId? : number\r\n personKey? : number\r\n ethnicity? : number\r\n gender? : number\r\n races? : Array\r\n}\r\n\r\nexport class PhysicianDemographicRaceModel {\r\n physicianDemographicRaceId? : number\r\n physicianDemographicId? : number\r\n race? : number\r\n}\r\n\r\nexport enum EthnicityType\r\n{\r\n HispanicOrLatinoa = 1,\r\n NonHispanicOrNonLatinoa = 2,\r\n Other = 3,\r\n NoAnswer = 4\r\n}\r\n\r\nexport enum GenderType\r\n{\r\n Female = 1,\r\n Male = 2,\r\n NonBinary = 3,\r\n Other = 4,\r\n NoAnswer = 5\r\n}","import React, { useState, useEffect, useContext } from \"react\";\r\nimport { Button, Row, Col, Card, Alert, Form, Collapse } from \"react-bootstrap\";\r\nimport { abpnClient } from \"../../Services/AbpnClient\";\r\nimport { AuthContext } from \"../Auth/AuthProvider\";\r\nimport AbpnSpinner from \"../Shared/Components/AbpnSpinner\";\r\nimport { deepCopy } from \"../Shared/Utility/DeepCopy\";\r\nimport PhysicianDemographicModel, { EthnicityType, GenderType } from './Models/PhysicianDemographicModel';\r\n\r\ninterface IProps{\r\n isSectionOpen: boolean;\r\n physicianId: number;\r\n}\r\n\r\nexport default function PhysicianDemographicCard(props: IProps) {\r\n const [openCollapse, setOpenCollapse] = useState(props.isSectionOpen);\r\n const [demographicModel, setDemographicModel] = useState(null);\r\n const [showSuccess, setShowSuccess] = useState(false);\r\n const [showDeleteSuccess, setShowDeleteSuccess] = useState(false);\r\n const authContext = useContext(AuthContext);\r\n \r\n useEffect(() => {\r\n let url = '/api/physicianDemographic/GetPhysicianDemographic/';\r\n abpnClient.get(url, authContext).then(_ => {\r\n if(_ == null){\r\n _ = new PhysicianDemographicModel();\r\n _.personKey = props.physicianId;\r\n }\r\n setDemographicModel(_);\r\n });\r\n }, []);\r\n\r\n const handleDemographicEthnicityChange = (e: React.ChangeEvent) => {\r\n var updatedModel = deepCopy(demographicModel);\r\n updatedModel.ethnicity = Number.parseInt(e.target.value);\r\n setDemographicModel(updatedModel);\r\n };\r\n\r\n const handleDemographicGenderChange = (e: React.ChangeEvent) => {\r\n var updatedModel = deepCopy(demographicModel);\r\n updatedModel.gender = Number.parseInt(e.target.value);\r\n setDemographicModel(updatedModel);\r\n };\r\n\r\n const handleDemographicRaceChange = (e: React.ChangeEvent) => {\r\n var updatedModel = deepCopy(demographicModel);\r\n const { value, checked } = e.target;\r\n if(checked){\r\n updatedModel.races.push({\r\n \"physicianDemographicRaceId\" : null,\r\n \"physicianDemographicId\" : updatedModel.physicianDemographicId,\r\n \"race\" : Number.parseInt(value)\r\n });\r\n }\r\n else{\r\n updatedModel.races = updatedModel.races.filter((e => e.race.toString() !== value));\r\n }\r\n\r\n setDemographicModel(updatedModel);\r\n };\r\n\r\n function isDemographicRaceChecked(raceId: string) : boolean\r\n {\r\n if(demographicModel.races == null)\r\n return false;\r\n else{\r\n var isChecked = false;\r\n demographicModel.races.map((race) => {\r\n if(race != null && race.race == Number.parseInt(raceId))\r\n isChecked = true;\r\n });\r\n return isChecked;\r\n }\r\n }\r\n\r\n const savePhysicianDemographic = () => {\r\n let url = '/api/physicianDemographic/SavePhysicianDemographic/';\r\n if(demographicModel.ethnicity == null)\r\n demographicModel.ethnicity = EthnicityType.NoAnswer;\r\n if(demographicModel.gender == null)\r\n demographicModel.gender = GenderType.NoAnswer;\r\n abpnClient.post(url, demographicModel, authContext).then(_ => {\r\n setDemographicModel(_);\r\n setShowSuccess(true);\r\n setTimeout(function () {\r\n setShowSuccess(false);\r\n }, 5000);\r\n });\r\n };\r\n\r\n const deletePhysicianDemographic = () => {\r\n let url = '/api/physicianDemographic/DeletePhysicianDemographic/';\r\n abpnClient.post(url, demographicModel.personKey, authContext).then(res => {\r\n var _ = new PhysicianDemographicModel();\r\n _.personKey = res;\r\n setDemographicModel(_);\r\n setShowDeleteSuccess(true);\r\n setTimeout(function () {\r\n setShowDeleteSuccess(false);\r\n }, 5000);\r\n });\r\n };\r\n\r\n const populateEthnicities = (() => {\r\n const Ethnicities = [\r\n {\r\n id: \"1\",\r\n ctrlId: \"E1\",\r\n name: \"Hispanic or Latino(a)\"\r\n },\r\n {\r\n id: \"2\",\r\n ctrlId: \"E2\",\r\n name: \"Non-Hispanic or Non-Latino(a)\"\r\n },\r\n {\r\n id: \"3\",\r\n ctrlId: \"E3\",\r\n name: \"Other\"\r\n },\r\n {\r\n id: \"4\",\r\n ctrlId: \"E4\",\r\n name: \"Prefer not to answer\"\r\n }\r\n ];\r\n\r\n return (\r\n \r\n Ethnic Identity\r\n {Ethnicities.map((ethnicity) => {\r\n return(\r\n \r\n \r\n {ethnicity.name}\r\n \r\n )\r\n })}\r\n \r\n );\r\n });\r\n\r\n const populateGenders = (() => {\r\n const Genders = [\r\n {\r\n id: \"1\",\r\n ctrlId: \"G1\",\r\n name: \"Female\"\r\n },\r\n {\r\n id: \"2\",\r\n ctrlId: \"G2\",\r\n name: \"Male\"\r\n },\r\n {\r\n id: \"3\",\r\n ctrlId: \"G3\",\r\n name: \"Non-binary\"\r\n },\r\n {\r\n id: \"4\",\r\n ctrlId: \"G4\",\r\n name: \"Other\"\r\n },\r\n {\r\n id: \"5\",\r\n ctrlId: \"G5\",\r\n name: \"Prefer not to answer\"\r\n }\r\n ];\r\n\r\n return (\r\n \r\n Gender Identity\r\n {Genders.map((gender) => {\r\n return(\r\n \r\n \r\n {gender.name}\r\n \r\n )\r\n })}\r\n \r\n );\r\n });\r\n\r\n const populateRaces = (() => {\r\n const Races = [\r\n {\r\n id: \"1\",\r\n ctrlId: \"R1\",\r\n name: \"Asian\"\r\n },\r\n {\r\n id: \"2\",\r\n ctrlId: \"R2\",\r\n name: \"Black or African American\"\r\n },\r\n {\r\n id: \"3\",\r\n ctrlId: \"R3\",\r\n name: \"American Indian or Alaskan Native\"\r\n },\r\n {\r\n id: \"4\",\r\n ctrlId: \"R4\",\r\n name: \"Native Hawaiian or Pacific Islander\"\r\n },\r\n {\r\n id: \"5\",\r\n ctrlId: \"R5\",\r\n name: \"White\"\r\n },\r\n {\r\n id: \"6\",\r\n ctrlId: \"R6\",\r\n name: \"Other\"\r\n },\r\n {\r\n id: \"7\",\r\n ctrlId: \"R7\",\r\n name: \"Prefer not to answer\"\r\n }\r\n ];\r\n\r\n return (\r\n \r\n Racial Identity (multiple selections allowed)\r\n {Races.map((race) => {\r\n return (\r\n \r\n \r\n {race.name}\r\n \r\n );\r\n })}\r\n \r\n );\r\n });\r\n\r\n if(!demographicModel)\r\n return (\r\n \r\n );\r\n return (\r\n \r\n \r\n setOpenCollapse(!openCollapse)}>\r\n Demographics\r\n \r\n \r\n \r\n \r\n \r\n {showSuccess && Success! Your Demographic information has been updated.}\r\n {showDeleteSuccess && Success! Your Demographic information has been deleted.}\r\n \r\n
Submit Data for ABPN Demographic Survey
\r\n

\r\n The American Board of Psychiatry and Neurology (ABPN) and its Board of Directors are committed to advancing diversity, equity, and inclusion (DEI) within all ABPN programs and services.\r\n

\r\n

\r\n Beginning today, the ABPN will begin collecting detailed demographic data of all ABPN physicians to help enhance ABPN certification programs and the mission of the organization. When logging into the Physician Portal, \r\n you will be asked to submit information on your race, ethnicity, and gender. Survey results will have no bearing on a physician’s certification status. \r\n

\r\n

\r\n The ABPN is committed to using this demographic data to analyze diversity, equity, and inclusion within the certification process and to ensure that all physicians are treated equitably.\r\n

\r\n

\r\n The ABPN will not share data that could be used to identify individual residents, training programs, applicants, candidates, diplomates, or former diplomates.\r\n

\r\n \r\n \r\n {populateRaces()}\r\n \r\n \r\n {populateEthnicities()}\r\n \r\n \r\n {populateGenders()}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n );\r\n}","import React, { useContext, useEffect, useState } from \"react\";\r\nimport { Row, Col, Container } from \"react-bootstrap\";\r\nimport { abpnClient } from \"../../Services/AbpnClient\";\r\nimport { AuthContext } from \"../Auth/AuthProvider\";\r\nimport Physician from \"../Physician/Models/Physician\";\r\nimport AbpnSpinner from \"../Shared/Components/AbpnSpinner\";\r\nimport SecurityCard from \"./SecurityCard\";\r\nimport PersonalCard from \"./PersonalCard\";\r\n import MedicalLicensure from \"../Dashboard/ContinuingCertification/Components/MedicalLicensure\";\r\n import { MedicalLicense } from \"../Physician/Models/MedicalLicense\";\r\nimport AddressesCard from \"./AddressesCard\";\r\nimport { deepCopy } from \"../Shared/Utility/DeepCopy\";\r\nimport { CCBlock } from \"../Physician/Models/CCBlock\";\r\nimport PhysicianDemographicCard from \"./PhysicianDemographicCard\";\r\nimport { CountryId } from \"../Shared/Enums/CountryId\";\r\n\r\nexport default function AccountInformation() {\r\n\tconst [physician, setPhysician] = useState(null);\r\n\tconst states = physician?.addresses.states.filter(x => x.countryId === CountryId.Usa || x.countryId === CountryId.Canada);\r\n\r\n\tconst authContext = useContext(AuthContext);\r\n\tuseEffect(() => {\r\n\t\tabpnClient.get(\"/api/physician\", authContext).then((_) => {\r\n\t\t\tsetPhysician(_);\r\n\t\t});\r\n\t}, []);\r\n\r\n\r\n\tconst evaluateCurrentBlockAndCallUpdate = async (physician : Physician) =>{\r\n const ccBlock = await abpnClient.get(\"/api/physician/EvaluateCurrentBlockRequirements\", authContext);\r\n\r\n\t\tif(ccBlock != null){\r\n\t\t\tvar index = physician.currentCCEnrollment.ccBlocks.findIndex(_ => _.ccBlockId === ccBlock.ccBlockId);\r\n\t\t\tphysician.currentCCEnrollment.ccBlocks.splice(index, 1, ccBlock);\r\n\t\t\tphysician.currentCCEnrollment.currentCCBlock = ccBlock;\r\n\t\t\tsetPhysician(physician);\t\r\n\t\t}\r\n }\r\n\tconst onSaveLicenses = (licenses: Array) => {\r\n var updatedPhysician = deepCopy(physician);\r\n updatedPhysician.medicalLicenses = licenses;\r\n\r\n evaluateCurrentBlockAndCallUpdate(updatedPhysician);\r\n }\r\n\r\n\tif (!physician) return ;\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t) => onSaveLicenses(licenses)}\r\n\t\t\t\t\t\tshowCollapse={true}\r\n\t\t\t\t\t/>\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t);\r\n}\r\n","export class ActionResult {\r\n message: string;\r\n title: string;\r\n alertType: string;\r\n}","import { Fragment, useEffect, useState } from 'react';\r\nimport { Button, Card, Col, Container, Row } from 'react-bootstrap';\r\nimport { Link } from 'react-router-dom';\r\nimport HeaderWithTitle from '../Shared/Components/HeaderWithTitle';\r\nimport { configService } from \"../../Services/Config/ConfigService\";\r\nimport AbpnSpinner from '../Shared/Components/AbpnSpinner';\r\n\r\ninterface IProps {\r\n\tshowLogin: boolean;\r\n\tshowSearchAgain: boolean;\r\n\thascompletedResidency: boolean;\r\n\tsearchAgain: () => void;\r\n}\r\nexport function AccountAssistance(props: IProps) {\r\n\tconst [mailToLink, setMailToLink] = useState(null);\r\n\tconst [updatePersonalInfoLink, setUpdatePersonalInfoLink] = useState(null);\r\n\r\n\tuseEffect(() => {\r\n\t\tconst getMailToLink = () => {\r\n\t\t\tconfigService.getConfiguration().then(_ => {\r\n\t\t\t\tsetMailToLink(_.PhysicianPortalHelp);\r\n\t\t\t})\r\n\t\t}\r\n\t\tconst getUpdatePersonalInfoLink = () => {\r\n\t\t\tconfigService.getConfiguration().then(_ => {\r\n\t\t\t\tsetUpdatePersonalInfoLink(_.UpdatePersonalInfoInstructions);\r\n\t\t\t})\r\n\t\t}\r\n\t\tgetMailToLink();\r\n\t\tgetUpdatePersonalInfoLink();\r\n\t}, [])\r\n \r\n\tif (!mailToLink || !updatePersonalInfoLink) return \r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t{props.hascompletedResidency ? (\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t

Your account could not be activated with the information you provided

\r\n\t\t\t\t\t\t\t\t\t\tIf you are currently in a residency program:\r\n\t\t\t\t\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\t\t\t\t\tPlease check with your residency program to ensure your last name, date of\r\n\t\t\t\t\t\t\t\t\t\t\tbirth, and last four of your social security number have been into the ABPN\r\n\t\t\t\t\t\t\t\t\t\t\tpreCert system. If the information had been entered incorrectly, refer to the\r\n\t\t\t\t\t\t\t\t\t\t\t Update Personal Information document for further instructions.\r\n\t\t\t\t\t\t\t\t\t\t

\r\n\r\n\t\t\t\t\t\t\t\t\t\tIf you are NOT currently in a residency program:\r\n\t\t\t\t\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\t\t\t\t\tPlease contact ABPN through email at questions@abpn.org{' '}\r\n\t\t\t\t\t\t\t\t\t\t\twith subject \"Physician Portal Help” for assistance.\r\n\t\t\t\t\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\t\t\t
) : (\r\n\t\t\t\t\t\t\t\t\t

We are having trouble locating your account. Please contact ABPN through email at{' '}\r\n\t\t\t\t\t\t\t\t\t\tquestions@abpn.org with subject \"Physician\r\n\t\t\t\t\t\t\t\t\t\tPortal Help” for assistance.\r\n\t\t\t\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{(props.showSearchAgain || props.hascompletedResidency) && (\r\n\t\t\t\t\t\t\t\t props.searchAgain()}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\tSearch for Account Again\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\t{props.showLogin && (\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t
\r\n\t);\r\n}\r\n\r\nexport default AccountAssistance;\r\n","export default class SearchPhysicianModel {\r\n lastName: string\r\n dateOfBirth: string\r\n ssn4: string\r\n siteToken: string\r\n}\r\n\r\nexport class MatchPhysicianResult {\r\n requiresAccountAssistance: boolean;\r\n isExactMatch: boolean;\r\n}","import React, { FormEvent, useState } from \"react\";\r\nimport { Button, Col, Form, OverlayTrigger, Row, Tooltip } from \"react-bootstrap\";\r\nimport { Link } from \"react-router-dom\";\r\nimport InputMask from 'react-input-mask';\r\nimport SearchPhysicianModel from \"./Models/SearchPhysicianModel\";\r\nimport { deepCopy } from \"../Shared/Utility/DeepCopy\";\r\nimport ReCAPTCHA from \"react-google-recaptcha\";\r\nimport { useEffect } from \"react\";\r\nimport { configService } from \"../../Services/Config/ConfigService\";\r\nimport AbpnSpinner from \"../Shared/Components/AbpnSpinner\";\r\nimport { ValidatorHelper } from \"../Shared/ValidatorHelper\";\r\nimport { getDateWithOffset } from \"../Shared/Utility/GetDateWithOffset\";\r\n\r\ninterface IProps {\r\n onSubmit: (e: FormEvent, model: SearchPhysicianModel) => void;\r\n}\r\nexport function SearchPhysician(props: IProps) {\r\n const [model, setModel] = useState(new SearchPhysicianModel());\r\n const [captchaResponse, setCaptchaResponse] = useState(null);\r\n const [siteKey, setSiteKey] = useState(null);\r\n\r\n var ssn4Ref = React.createRef();\r\n\r\n //Get Captcha Site Key from Config\r\n useEffect(() => {\r\n configService.getConfiguration().then(configuration => {\r\n setSiteKey(configuration.Captcha.SiteKey);\r\n });\r\n }, [])\r\n\r\n //Matching Captcha Timeout\r\n useEffect(() => {\r\n let oneMinute = 60000;\r\n setTimeout(() => setCaptchaResponse(null), oneMinute);\r\n }, [captchaResponse]);\r\n\r\n const updateLastName = (value: string) => {\r\n let updated = deepCopy(model);\r\n updated.lastName = value;\r\n setModel(updated);\r\n }\r\n\r\n const updateDateOfBirth = (value: string) => {\r\n let updated = deepCopy(model);\r\n updated.dateOfBirth = value;\r\n\r\n if (Date.parse(value)) {\r\n updated.dateOfBirth = getDateWithOffset(value).toJSON();\r\n }\r\n\r\n setModel(updated);\r\n }\r\n\r\n const updateLastFourOfSSN = (value: string) => {\r\n ssn4Ref && ValidatorHelper.clearCustomValidation(ssn4Ref.current);\r\n let updated = deepCopy(model);\r\n updated.ssn4 = value;\r\n setModel(updated);\r\n }\r\n\r\n const handleCaptcha = (response: string) => {\r\n setCaptchaResponse(response)\r\n\r\n let updated = deepCopy(model);\r\n updated.siteToken = response;\r\n setModel(updated);\r\n }\r\n\r\n const onSubmit = (e: FormEvent, model: SearchPhysicianModel) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n e.currentTarget.classList.add('was-validated');\r\n if (e.currentTarget.checkValidity() && validate(model)) {\r\n e.currentTarget.classList.remove('was-validated');\r\n props.onSubmit(e, model);\r\n }\r\n }\r\n\r\n const validate = (model: SearchPhysicianModel) => {\r\n var isValid = true;\r\n ValidatorHelper.clearCustomValidation(ssn4Ref.current);\r\n\r\n if (model.ssn4.length !== 4) {\r\n ValidatorHelper.setCustomValidationWithFeedback(ssn4Ref.current, \"You must provide exactly 4 digits.\");\r\n isValid = false;\r\n }\r\n\r\n return isValid;\r\n }\r\n\r\n if (!siteKey) return \r\n return (\r\n
onSubmit(e, model)}>\r\n \r\n \r\n \r\n \r\n Last Name*\r\n \r\n updateLastName(e.target.value)} />\r\n \r\n \r\n \r\n Date of Birth*\r\n \r\n updateDateOfBirth(e.target.value)} >\r\n {(inputProps: any) => {\r\n return \r\n }}\r\n \r\n \r\n \r\n \r\n Last Four of SSN*\r\n \r\n If you are from Canada, please enter last 4 digits of your SIN\r\n }>\r\n \r\n \r\n \r\n updateLastFourOfSSN(e.target.value)} />\r\n \r\n \r\n \r\n \r\n \r\n \r\n handleCaptcha(response)} />\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nexport default SearchPhysician;","import SearchPhysicianModel from \"./SearchPhysicianModel\";\r\n\r\nexport default class ActivateUser {\r\n constructor(model: SearchPhysicianModel, email: string) {\r\n this.lastName = model.lastName;\r\n this.ssn4 = model.ssn4;\r\n this.dateOfBirth = model.dateOfBirth;\r\n this.email = email;\r\n }\r\n\r\n lastName: string;\r\n ssn4: string;\r\n dateOfBirth: string;\r\n email: string;\r\n clientId: string;\r\n registerClientId: string;\r\n}","import React, { FormEvent, useState } from \"react\";\r\nimport { Alert, Button, Card, Col, Form, Row } from \"react-bootstrap\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { abpnClient, IdentityServerKnownClient } from \"../../Services/AbpnClient\";\r\nimport ActivateUser from \"./Models/ActivateUser\";\r\nimport SearchPhysicianModel from \"./Models/SearchPhysicianModel\";\r\n\r\ninterface IProps {\r\n model: SearchPhysicianModel;\r\n onSave: (userModel: ActivateUser) => void;\r\n}\r\nexport default function UpdateEmail(props: IProps) {\r\n const [email, setEmail] = useState(\"\");\r\n const [emailUnavilable, setEmailUnavaliable] = useState(false);\r\n const [isSubmitDisabled, setIsSubmitDisabled] = useState(false);\r\n\r\n const activatePhysician = async (e: FormEvent) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n setIsSubmitDisabled(true);\r\n\r\n e.currentTarget.classList.add('was-validated');\r\n\r\n if (e.currentTarget.checkValidity()) {\r\n e.currentTarget.classList.remove('was-validated');\r\n var activateModel = new ActivateUser(props.model, email);\r\n activateModel.registerClientId = IdentityServerKnownClient.physicianPortal;\r\n\r\n abpnClient.post('/api/profile/ValidateEmail', activateModel, null)\r\n .then(async isValid => {\r\n if (!isValid) {\r\n setEmailUnavaliable(true);\r\n setTimeout(() => {\r\n setEmailUnavaliable(false);\r\n }, 10000)\r\n \r\n return;\r\n }\r\n props.onSave(activateModel);\r\n })\r\n }\r\n\r\n setIsSubmitDisabled(false);\r\n }\r\n\r\n return (\r\n
activatePhysician(e)}>\r\n \r\n \r\n \r\n Please enter a personal email address below which will be used to log in to your ABPN Physician Portal account.\r\n
\r\n ABPN highly recommends keeping a personal email address on file to ensure you receive all communications regarding applications, exams, certification requirements, pertinent updates, and to access your ABPN Physician Portal account.\r\n \r\n
\r\n \r\n \r\n \r\n Email Address\r\n *\r\n setEmail(e.target.value)}\r\n defaultValue={email} />\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n}\r\n","import { Fragment, useEffect, useState } from 'react';\r\nimport { Row, Col } from 'react-bootstrap';\r\nimport { abpnClient } from '../../Services/AbpnClient';\r\nimport { configService } from '../../Services/Config/ConfigService';\r\nimport AvailableExaminationCard from '../Dashboard/Applications/Components/AvailableExaminationCard';\r\nimport { AvailableExamination } from '../Dashboard/Applications/Models/AvailableExamination';\r\nimport AbpnSpinner from '../Shared/Components/AbpnSpinner';\r\nimport { getDateWithOffset } from '../Shared/Utility/GetDateWithOffset';\r\nimport SearchPhysicianModel from './Models/SearchPhysicianModel';\r\n\r\ninterface IProps {\r\n\tsearchModel: SearchPhysicianModel;\r\n\treportNoExams: () => void;\r\n}\r\nconst ActivationSelectExam = (props: IProps) => {\r\n\tconst [ availableExams, setAvailableExams ] = useState([]);\r\n\tconst [ loading, setLoading ] = useState(true);\r\n\tconst [ noExamsAvailable, setNoExamsAvailable ] = useState(false);\r\n\tconst [mailToLink, setMailToLink] = useState(null);\r\n\r\n\tuseEffect(() => {\r\n\t\tconst getMailToLink = () => {\r\n\t\t\tconfigService.getConfiguration().then(_ => {\r\n\t\t\t\tsetMailToLink(_.PhysicianPortalHelp);\r\n\t\t\t})\r\n\t\t}\r\n\t\tgetMailToLink();\r\n\r\n\t\tabpnClient.get>('/api/application/available', null).then((exams) => {\r\n\t\t\tsetAvailableExams(exams);\r\n\t\t\tsetLoading(false);\r\n\r\n\t\t\tvar hasNoExams = exams.filter((_) => getDateWithOffset(_.applicationAvailableDate) <= new Date()).length === 0;\r\n\t\t\tsetNoExamsAvailable(hasNoExams);\r\n\t\t\tif (hasNoExams) props.reportNoExams();\r\n\t\t});\r\n\t}, []);\r\n\r\n\tif (loading) return ;\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t{noExamsAvailable ? (\r\n\t\t\t\t

\r\n\t\t\t\t\tABPN Physician Portal account activation cannot occur at this time because applications are\r\n\t\t\t\t\tcurrently not available. Please return when examination applications become available as noted\r\n\t\t\t\t\tbelow.\r\n\t\t\t\t

\r\n\t\t\t) : (\r\n\t\t\t\t\r\n\t\t\t\t\t

\r\n\t\t\t\t\t\tAn ABPN examination needs to be requested in order to begin the ABPN Physician Portal account\r\n\t\t\t\t\t\tactivation process.\r\n\t\t\t\t\t

\r\n\t\t\t\t\t

\r\n\t\t\t\t\t\tDo not see your exam here? Please contact ABPN through email at questions@abpn.org with subject \"Physician Portal Help” for assistance.\r\n\t\t\t\t\t\tIf you are a diplomate of another ABMS board (not of ABPN) and you would like to apply for an\r\n\t\t\t\t\t\tABPN administered subspecialty examination, please apply through your parent board.\r\n\t\t\t\t\t

\r\n\t\t\t\t
\r\n\t\t\t)}\r\n\t\t\t\r\n\t\t\t\t{availableExams.map((exam: AvailableExamination) => (\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t))}\r\n\t\t\t\r\n\t\t
\r\n\t);\r\n};\r\n\r\nexport default ActivationSelectExam;\r\n","import React, { FormEvent, useContext } from \"react\";\r\nimport { useState } from \"react\";\r\nimport { Row, Col, Card, Container, Button } from \"react-bootstrap\";\r\nimport { abpnClient } from \"../../Services/AbpnClient\";\r\nimport AbpnSpinner from \"../Shared/Components/AbpnSpinner\";\r\nimport ActionResultMessage from \"../Shared/Components/ActionResultMessage\";\r\nimport HeaderWithTitle from \"../Shared/Components/HeaderWithTitle\";\r\nimport { ActionResult } from \"../Shared/Models/ActionResult\";\r\nimport AccountAssistance from \"./AccountAssistance\";\r\nimport { AuthContext } from \"./AuthProvider\";\r\nimport ActivateUser from \"./Models/ActivateUser\";\r\nimport SearchPhysicianModel, { MatchPhysicianResult } from \"./Models/SearchPhysicianModel\";\r\nimport SearchPhysician from \"./SearchPhysician\";\r\nimport UpdateEmail from \"./UpdateEmail\";\r\nimport ActivationSelectExam from \"./ActivationSelectExam\";\r\n\r\nexport default function SearchForAccount() {\r\n const [matchResult, setMatchResult] = useState(null);\r\n const [model, setModel] = useState(null);\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [alert, setAlert] = useState(null);\r\n const [hasCompletedResidency, setHasCompletedResidency] = useState(null);\r\n const [noExamsAvailable, setNoExamsAvailable] = useState(null);\r\n const authContext = useContext(AuthContext);\r\n\r\n\r\n const allowUpdateEmail = matchResult != null && matchResult.isExactMatch && !matchResult.requiresAccountAssistance;\r\n const showExamSelection = matchResult?.requiresAccountAssistance || hasCompletedResidency === false;\r\n const showAccountAssistance = matchResult?.requiresAccountAssistance || hasCompletedResidency;\r\n const showResidency = !matchResult?.isExactMatch && !matchResult?.requiresAccountAssistance && hasCompletedResidency === null && model != null;\r\n const showSearchAgain = !matchResult?.isExactMatch || hasCompletedResidency;\r\n\r\n const matchPhysician = (e: FormEvent, model: SearchPhysicianModel) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n if (!model.siteToken) return;\r\n\r\n e.currentTarget.classList.add('was-validated');\r\n if (e.currentTarget.checkValidity()) {\r\n e.currentTarget.classList.remove('was-validated');\r\n setModel(model);\r\n setIsLoading(true);\r\n\r\n abpnClient.post('/api/profile/MatchPhysician', model, null)\r\n .then(result => {\r\n setMatchResult(result);\r\n setIsLoading(false);\r\n })\r\n }\r\n }\r\n\r\n const searchAgain = () => {\r\n setModel(null);\r\n setMatchResult(null);\r\n setHasCompletedResidency(null);\r\n }\r\n\r\n const registerUserAccount = async (userModel: ActivateUser) => {\r\n setIsLoading(true);\r\n\r\n await abpnClient.post('/api/profile/activate', userModel, null);\r\n await authContext.register(userModel);\r\n\r\n var newAlert = new ActionResult();\r\n newAlert.title = `\"Create Password\" Email Sent`;\r\n newAlert.alertType = \"pp-alert-success\";\r\n newAlert.message = `Please check your ${userModel.email} email account and follow instructions to create your new password within 24 hours.`;\r\n\r\n setAlert(newAlert);\r\n setIsLoading(false);\r\n }\r\n\r\n if (isLoading) return \r\n if (alert) return \r\n if (showAccountAssistance) return \r\n return (\r\n \r\n {model == null && }\r\n {allowUpdateEmail && }\r\n {showExamSelection && !noExamsAvailable && }\r\n {showResidency && }\r\n {noExamsAvailable && }\r\n \r\n \r\n \r\n \r\n {model == null && }\r\n\r\n \r\n \r\n {matchResult != null &&\r\n \r\n \r\n\r\n {/* Match on 3 */}\r\n {allowUpdateEmail &&\r\n \r\n }\r\n\r\n {/* Match on < 2 */}\r\n {showResidency && (\r\n \r\n \r\n \r\n Will you complete or have you completed training in a US ACGME-accredited residency program in 2012 or later?\r\n \r\n \r\n \r\n \r\n \r\n {}\r\n \r\n \r\n \r\n )}\r\n\r\n {showExamSelection &&\r\n setNoExamsAvailable(true)} />\r\n }\r\n \r\n \r\n }\r\n \r\n \r\n \r\n );\r\n}\r\n","import { LookupItem } from \"../../Shared/Models/LookupItem\";\r\n\r\nexport class MedicalEducationModel {\r\n public physicianId: number;\r\n public medicalEducation : MedicalEducation;\r\n public medicalEducationLocationLookupList: Array;\r\n}\r\n\r\nexport class MedicalEducation {\r\n constructor() {\r\n this.isGraduationYearValid = true;\r\n this.isLocationIdValid = true;\r\n }\r\n public medicalEducationId: number;\r\n public physicianId: number;\r\n public graduationYear: number;\r\n public locationId: number;\r\n public isGraduationYearValid: boolean;\r\n public isLocationIdValid: boolean;\r\n}\r\n\r\n","import { Address } from \"./Address\";\r\nimport { MedicalEducation } from './MedicalEducationModel';\r\n\r\nexport default class PhysicianCreation {\r\n constructor() {\r\n this.address = new Address();\r\n this.name = new PhysicianName();\r\n this.medicalEducation = new MedicalEducation();\r\n }\r\n name: PhysicianName;\r\n address: Address;\r\n medicalEducation: MedicalEducation;\r\n ssn4: string;\r\n email: string;\r\n dateOfBirth: string;\r\n examinationAppliedToId: number;\r\n}\r\n\r\nexport class PhysicianName {\r\n firstName: string;\r\n lastName: string;\r\n middleName: string;\r\n suffix: string;\r\n title: string;\r\n}","import React, { Fragment, useEffect } from \"react\";\r\nimport { Card, Row, Col, Form} from \"react-bootstrap\";\r\nimport { deepCopy } from \"../Shared/Utility/DeepCopy\";\r\nimport { MedicalEducation, MedicalEducationModel } from \"../Physician/Models/MedicalEducationModel\";\r\n\r\ninterface IProps {\r\n medicalEducationModel: MedicalEducationModel;\r\n medicalEducation: MedicalEducation;\r\n runValidation: boolean;\r\n isFormValid: boolean;\r\n updateMedicalEducation: (medicalEducation: MedicalEducation) => void;\r\n updateMedicalEducationValidation: (isValid: boolean) => void;\r\n}\r\n\r\nexport function MedicalEducationCard(props: IProps) {\r\n\r\n useEffect(() => {\r\n if (props.runValidation) validate();\r\n }, [props.runValidation]);\r\n\r\n const updateLocationId = (e: React.ChangeEvent) => {\r\n var updated = deepCopy(props.medicalEducation);\r\n updated.locationId = e.target.value ? props.medicalEducationModel.medicalEducationLocationLookupList.find(_ => _.id === parseInt(e.target.value)).id : null;\r\n props.updateMedicalEducation(updated);\r\n }\r\n\r\n const updateGraduationYear = (e: React.ChangeEvent) => {\r\n var updated = deepCopy(props.medicalEducation);\r\n updated.graduationYear = parseInt(e.target.value);\r\n props.updateMedicalEducation(updated);\r\n }\r\n\r\n const validate = () => {\r\n const form = document.getElementById(\"medicalSchoolForm\") as HTMLFormElement;\r\n\r\n props.updateMedicalEducationValidation(form.checkValidity());\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n Medical School\r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n Graduation Year*\r\n ) => {updateGraduationYear(e)}}>\r\n \r\n \r\n \r\n \r\n \r\n Medical School Location*\r\n ) => { updateLocationId(e)}}\r\n defaultValue={\"\"}>\r\n \r\n {props.medicalEducationModel.medicalEducationLocationLookupList.map(x => ())}\r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default MedicalEducationCard;\r\n","import React, { Fragment, useEffect, useState } from \"react\";\r\nimport { Card, Row, Col, Form, Tooltip, OverlayTrigger} from \"react-bootstrap\";\r\nimport { abpnClient } from \"../../Services/AbpnClient\";\r\nimport ActivateUser from \"./Models/ActivateUser\";\r\nimport { ApplicationPaths } from \"../../Services/Auth/AuthConstants\";\r\nimport { Link } from \"react-router-dom\";\r\n\r\ninterface IProps {\r\n runValidation: boolean;\r\n isEmailFormValid: boolean;\r\n userModel: ActivateUser;\r\n updatePersonalEmail: (email: string) => void;\r\n updateEmailValidation: (isFormValid: boolean) => void;\r\n}\r\n\r\nexport function PersonalEmailCard(props: IProps) {\r\n const [isNewEmailUnique, setIsNewEmailUnique] = useState(null);\r\n const [isFormatValid, setIsFormatValid] = useState(true);\r\n\r\n var encodedLoginUrl = encodeURIComponent(ApplicationPaths.DefaultLoginRedirectPath);\r\n\r\n let validFormatAndNotUniqueEmail = (isFormatValid === true && isNewEmailUnique === false);\r\n\r\n useEffect(() => {\r\n if (props.runValidation) validate();\r\n }, [props.runValidation]);\r\n\r\n const validate = async () => {\r\n const form = document.getElementById(\"personalEmail\") as HTMLFormElement;\r\n var isEmailValid = form.checkValidity();\r\n setIsFormatValid(isEmailValid);\r\n\r\n if (isEmailValid) {\r\n await abpnClient.post('/api/profile/validateEmail', props.userModel, null)\r\n .then((response: boolean) => {\r\n setIsNewEmailUnique(response);\r\n isEmailValid = response;\r\n });\r\n }\r\n props.updateEmailValidation(isEmailValid);\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n Security\r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n Personal Email Address\r\n *\r\n \r\n ABPN highly recommends keeping a personal email address on file to ensure\r\n you receive all communications regarding applications, exams,\r\n certification requirements, pertinent updates, and to access your ABPN\r\n Physician Portal account.\r\n This will be used to log into the Physician Portal.\r\n }>\r\n \r\n \r\n \r\n ) => {props.updatePersonalEmail(e.target.value)}}>\r\n {props.isEmailFormValid === false && \r\n \r\n Please enter a valid email address.\r\n \r\n }\r\n {isNewEmailUnique === false &&\r\n

\r\n This email address is already associated with an account. If the account is yours, then \r\n Log In \r\n using that email address, otherwise enter a different email address. \r\n

\r\n }\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default PersonalEmailCard;\r\n","import React, { Fragment, useEffect, useState } from \"react\";\r\nimport { Card, Row, Col, Form} from \"react-bootstrap\";\r\nimport { PhysicianName } from \"../Physician/Models/PhysicianCreation\";\r\nimport { deepCopy } from \"../Shared/Utility/DeepCopy\";\r\nimport { getDateWithOffset } from \"../Shared/Utility/GetDateWithOffset\";\r\nimport SearchPhysicianModel from './Models/SearchPhysicianModel';\r\ninterface IProps {\r\n physicianData: SearchPhysicianModel;\r\n runValidation: boolean;\r\n isFormValid: boolean;\r\n updatePersonalInformation: (name: PhysicianName) => void;\r\n updatePersonalInformationValidation: (isValid: boolean) => void;\r\n}\r\n\r\nexport function PersonalInformationCard(props: IProps) {\r\n const [name, setName] = useState(null);\r\n\r\n useEffect(() => {\r\n if (props.runValidation) validate();\r\n }, [props.runValidation]);\r\n\r\n useEffect(() => {\r\n const createPhysicianName = () => {\r\n var newName = new PhysicianName();\r\n newName.lastName = props.physicianData.lastName;\r\n setName(newName);\r\n }\r\n createPhysicianName();\r\n }, []);\r\n\r\n const updateFirstName = (e: React.ChangeEvent) => {\r\n var updatedName = deepCopy(name);\r\n updatedName.firstName = e.target.value;\r\n setName(updatedName);\r\n props.updatePersonalInformation(updatedName);\r\n }\r\n\r\n const updateMiddleName = (e: React.ChangeEvent) => {\r\n var updatedName = deepCopy(name);\r\n updatedName.middleName = e.target.value;\r\n setName(updatedName);\r\n props.updatePersonalInformation(updatedName);\r\n }\r\n\r\n const updateSuffix = (e: React.ChangeEvent) => {\r\n var updatedName = deepCopy(name);\r\n updatedName.suffix = e.target.value;\r\n setName(updatedName);\r\n props.updatePersonalInformation(updatedName);\r\n }\r\n const updateTitle = (e: React.ChangeEvent) => {\r\n var updatedName = deepCopy(name);\r\n updatedName.title = e.target.value;\r\n setName(updatedName);\r\n props.updatePersonalInformation(updatedName);\r\n }\r\n\r\n const validate = () => {\r\n const form = document.getElementById(\"nameForm\") as HTMLFormElement;\r\n\r\n props.updatePersonalInformationValidation(form.checkValidity());\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n Personal\r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n First Name*\r\n ) => {updateFirstName(e)}}>\r\n \r\n \r\n \r\n \r\n Middle Name\r\n ) => {updateMiddleName(e)}}>\r\n \r\n \r\n \r\n \r\n Last Name\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Suffix\r\n ) => {updateSuffix(e)}}>\r\n \r\n \r\n \r\n \r\n Title*\r\n ) => {updateTitle(e)}}>\r\n \r\n \r\n \r\n \r\n Date of Birth\r\n \r\n \r\n \r\n \r\n \r\n Last 4 Digits of SSN\r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default PersonalInformationCard;\r\n","import React, { useEffect, useState, useContext } from \"react\";\r\nimport { Button, Container, Row } from \"react-bootstrap\";\r\nimport { Link, useLocation } from \"react-router-dom\";\r\nimport { abpnClient, IdentityServerKnownClient } from \"../../Services/AbpnClient\";\r\nimport { AuthContext } from \"../Auth/AuthProvider\";\r\nimport { MedicalEducation } from \"../Physician/Models/MedicalEducationModel\";\r\nimport Physician from \"../Physician/Models/Physician\";\r\nimport PhysicianCreation, { PhysicianName } from \"../Physician/Models/PhysicianCreation\";\r\nimport MedicalEducationCard from \"./MedicalEducationCard\";\r\nimport PersonalEmailCard from \"./PersonalEmailCard\";\r\nimport { deepCopy } from \"../Shared/Utility/DeepCopy\";\r\nimport { AbpnSpinner } from './../Shared/Components/AbpnSpinner';\r\nimport { PersonalInformationCard } from './PersonalInformationCard';\r\nimport { ApplicantInformation } from '../Shared/Components/ApplicantInformation';\r\nimport { Address } from \"../Physician/Models/Address\";\r\nimport SearchPhysicianModel from \"./Models/SearchPhysicianModel\";\r\nimport ActivateUser from \"./Models/ActivateUser\";\r\nimport ActionResultMessage from './../Shared/Components/ActionResultMessage';\r\nimport HeaderWithTitle from './../Shared/Components/HeaderWithTitle';\r\nimport { ApplicationPaths } from \"../../Services/Auth/AuthConstants\";\r\nimport CreatePhysicianModel from './../Physician/Models/CreatePhysicianModel';\r\n\r\ntype TParams = { data: SearchPhysicianModel, examinationId: number };\r\n\r\nexport function PersonalInformation() {\r\n const authContext = useContext(AuthContext);\r\n const location = useLocation();\r\n const data = location.state.data;\r\n\r\n const [isLoading, setIsLoading] = useState(true);\r\n const [physicianModel, setPhysicianModel] = useState(null);\r\n const [newPhysician, setNewPhysician] = useState(null);\r\n const [showAlert, setShowAlert] = useState(false);\r\n const [runValidation, setRunValidation] = useState(false);\r\n const [isMedicalEducationFormValid, setIsMedicalEducationFormValid] = useState(null);\r\n const [isPersonalInfoFormValid, setIsPersonalInfoFormValid] = useState(null);\r\n const [isAddressFormValid, setIsAddressFormValid] = useState(null);\r\n const [isNewEmailValid, setIsNewEmailValid] = useState(null);\r\n const [userModel, setUserModel] = useState(null);\r\n\r\n useEffect(() => {\r\n const getFormLookupItems = () => {\r\n abpnClient.get(`/api/Profile/GetPhysicianFormLookupItems`, null)\r\n .then(result => {\r\n setPhysicianModel(result);\r\n setIsLoading(false);\r\n });\r\n }\r\n\r\n const createNewPhysician = () => {\r\n var physician = new PhysicianCreation();\r\n physician.name.lastName = data.lastName;\r\n physician.dateOfBirth = data.dateOfBirth;\r\n physician.ssn4 = data.ssn4;\r\n\r\n setNewPhysician(physician);\r\n }\r\n createNewPhysician();\r\n getFormLookupItems();\r\n }, []);\r\n\r\n const validateAndSave = () => {\r\n let newUserModel = new ActivateUser(data, newPhysician.email);\r\n newUserModel.registerClientId = IdentityServerKnownClient.physicianPortal;\r\n setUserModel(newUserModel);\r\n setRunValidation(true);\r\n }\r\n\r\n useEffect(() => {\r\n const CreatePhysician = async () => {\r\n setRunValidation(false);\r\n setIsLoading(true);\r\n\r\n let model: CreatePhysicianModel = {\r\n physician: newPhysician,\r\n examinationId: location.state.examinationId\r\n }\r\n\r\n await abpnClient.post(\"/api/profile/CreatePhysician\", model, null);\r\n await authContext.register(userModel);\r\n setIsLoading(false);\r\n setShowAlert(true);\r\n }\r\n\r\n if (isMedicalEducationFormValid\r\n && isPersonalInfoFormValid\r\n && isAddressFormValid\r\n && isNewEmailValid) {\r\n CreatePhysician();\r\n }\r\n }, [isMedicalEducationFormValid, isPersonalInfoFormValid, isAddressFormValid, isNewEmailValid]);\r\n\r\n const updateMedicalEducation = (medicalEducation: MedicalEducation) => {\r\n setRunValidation(false);\r\n var updated = deepCopy(newPhysician);\r\n updated.medicalEducation = medicalEducation;\r\n setNewPhysician(updated);\r\n }\r\n\r\n const updatePersonalEmail = (email: string) => {\r\n setRunValidation(false);\r\n var updated = deepCopy(newPhysician);\r\n updated.email = email;\r\n setIsNewEmailValid(null);\r\n setNewPhysician(updated);\r\n }\r\n\r\n const updatePhysicianName = (name: PhysicianName) => {\r\n setRunValidation(false);\r\n var updated = deepCopy(newPhysician);\r\n updated.name = name;\r\n setNewPhysician(updated);\r\n }\r\n\r\n const updateContactAddress = (addresses: Array
) => {\r\n var contactAddress = addresses.find(_ => _.isContact);\r\n var updated = deepCopy(newPhysician);\r\n updated.address = contactAddress;\r\n setNewPhysician(updated);\r\n setIsAddressFormValid(contactAddress.isValid);\r\n }\r\n\r\n if (isLoading) return \r\n\r\n if (showAlert) return \r\n\r\n return (\r\n \r\n \r\n\r\n updatePhysicianName(name)}\r\n updatePersonalInformationValidation={(isPersonalInformationValid: boolean) => setIsPersonalInfoFormValid(isPersonalInformationValid)} />\r\n\r\n ) => updateContactAddress(addresses)}\r\n onUpdate={() => setRunValidation(false)} />\r\n\r\n updatePersonalEmail(email)}\r\n updateEmailValidation={(isEmailFormValid: boolean) => setIsNewEmailValid(isEmailFormValid)} />\r\n\r\n updateMedicalEducation(medicalEducation)}\r\n updateMedicalEducationValidation={(isMedicalEducationValid: boolean) => setIsMedicalEducationFormValid(isMedicalEducationValid)} />\r\n\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default PersonalInformation;","import React from \"react\";\r\nimport { Col, Form, Row } from \"react-bootstrap\";\r\nimport { CCAssessmentType } from \"../../Physician/Models/CCEnrollment\";\r\nimport CcAssessmentPathwayEnrollment from \"../Models/CcAssessmentPathwayEnrollment\";\r\n\r\ninterface IProps{\r\n pathwayEnrollment: CcAssessmentPathwayEnrollment;\r\n}\r\nexport default function ArticleRequirementPreview(props: IProps){\r\n\r\n const getAbccCertifications = () => {\r\n return props.pathwayEnrollment.ccEnrollmentCertificates.filter(_ => _.isEnrolled && _.isAbccEligible && _.ccAssessmentType == CCAssessmentType.Article);\r\n }\r\n\r\n const getTotalArticlesRequired = () =>{\r\n var totalRequired = props.pathwayEnrollment.articlePathwayFlexRequirement;\r\n totalRequired = totalRequired + (getAbccCertifications().length * props.pathwayEnrollment.articlePathwayPerCertificationMinimum);\r\n return totalRequired;\r\n }\r\n\r\n if (getAbccCertifications().length == 0) return ();\r\n return (\r\n \r\n
\r\n

ABCC Requirements

\r\n \r\n

The following summarizes the article exam requirements that will be required in each 3 year block.

\r\n
\r\n \r\n \r\n \r\n Certification\r\n Article Exams Required\r\n \r\n {props.pathwayEnrollment.ccEnrollmentCertificates && getAbccCertifications().length == 1 ? \r\n \r\n {getAbccCertifications()[0].certificationName}\r\n {props.pathwayEnrollment.articlePathwayPerCertificationMinimum + props.pathwayEnrollment.articlePathwayFlexRequirement}\r\n :\r\n getAbccCertifications().map(abccCert => \r\n \r\n {abccCert.certificationName}\r\n {props.pathwayEnrollment.articlePathwayPerCertificationMinimum}\r\n \r\n )}\r\n {getAbccCertifications().length > 1 ? \r\n \r\n \r\n Flex\r\n {props.pathwayEnrollment.articlePathwayFlexRequirement}\r\n \r\n \r\n Total\r\n {getTotalArticlesRequired()}\r\n \r\n : \r\n null}\r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n}","import React from \"react\";\r\nimport { Col, Form, Row } from \"react-bootstrap\";\r\nimport { CCAssessmentType } from \"../../Physician/Models/CCEnrollment\";\r\nimport { getDateWithOffset } from \"../../Shared/Utility/GetDateWithOffset\";\r\nimport CcAssessmentPathwayEnrollment from \"../Models/CcAssessmentPathwayEnrollment\";\r\n\r\ninterface IProps{\r\n pathwayEnrollment: CcAssessmentPathwayEnrollment;\r\n}\r\nexport default function ExamRequirementPreview(props: IProps){\r\n const getAbccInEligibleCerts = () => {\r\n return props.pathwayEnrollment.ccEnrollmentCertificates.filter(_ => _.isEnrolled && (_.ccAssessmentType == CCAssessmentType.Other));\r\n }\r\n\r\n const getExamCertifications = () => {\r\n return props.pathwayEnrollment.ccEnrollmentCertificates.filter(_ => _.isEnrolled && (_.ccAssessmentType == CCAssessmentType.Exam || _.ccAssessmentType == CCAssessmentType.Other));\r\n }\r\n\r\n const getExamAssessmentTitle = () => {\r\n return getAbccInEligibleCerts().length > 0 ? \"Exam/Assessment\" : \"Exam\"; \r\n }\r\n\r\n const formatExamDue = (value: string) => {\r\n var date = getDateWithOffset(value);\r\n if (date == null) return \"\"\r\n return date.getFullYear();\r\n }\r\n\r\n if (getExamCertifications().length == 0) return ();\r\n return (\r\n \r\n
\r\n

{getExamAssessmentTitle()} Requirements

\r\n \r\n \r\n \r\n Certification\r\n {getExamAssessmentTitle()} Due\r\n \r\n {getExamCertifications().map(_ => \r\n \r\n {_.certificationName} {(!_.isAbccEligible) && ** }\r\n {formatExamDue(_.expirationDate)}\r\n \r\n )}\r\n \r\n \r\n \r\n

** For certifications that are not administered by the ABPN, the date below reflects the year by which an application must be submitted to the ABPN and an examination must be passed or a longitudinal assessment begun.

\r\n
\r\n \r\n
\r\n
\r\n );\r\n}\r\n\r\n","import { CCAssessmentType } from \"../../Physician/Models/CCEnrollment\";\r\n\r\n\r\nexport default class CcAssessmentPathwayEnrollment {\r\n ccEnrollmentId: number;\r\n currentBlockStart: string;\r\n currentBlockEnd: string;\r\n currentBlockExtensionDate: string;\r\n oneCertificationAnnualFee: number;\r\n twoCertificationAnnualFee: number;\r\n threeOrMoreCertificationAnnualFee: number;\r\n articlePathwayPerCertificationMinimum: number;\r\n articlePathwayFlexRequirement: number;\r\n\r\n ccEnrollmentCertificates: Array;\r\n\r\n \r\n}\r\n\r\nexport class CcAssessmentPathwayEnrollmentCertificate{\r\n cCEnrollmentCertificateId: number;\r\n certificateId: number;\r\n certificationName: string;\r\n certificationGeneration: number;\r\n expirationDate: string;\r\n isAbccEligible: boolean;\r\n isEnrolled: boolean;\r\n isFuture: boolean;\r\n enrollmentStartDate: string;\r\n enrollmentEndDate: string;\r\n ccAssessmentType: CCAssessmentType;\r\n ccAssessmentAttestationDate: string;\r\n lastArticleAssessmentEnrolledDate: string;\r\n}\r\n\r\nexport class CCAssessmentPathwayHelper{\r\n static getAnnualFee = (pathwayEnrollment: CcAssessmentPathwayEnrollment) : number => {\r\n var numCertificates = pathwayEnrollment.ccEnrollmentCertificates.filter(_ => _.isEnrolled).length;\r\n console.log(numCertificates);\r\n if (numCertificates == 0) return 0;\r\n if (numCertificates == 1) return pathwayEnrollment.oneCertificationAnnualFee;\r\n if (numCertificates == 2) return pathwayEnrollment.twoCertificationAnnualFee;\r\n return pathwayEnrollment.threeOrMoreCertificationAnnualFee;\r\n }\r\n}\r\n","import React from \"react\";\r\nimport { Col, Form, Row } from \"react-bootstrap\";\r\nimport CcAssessmentPathwayEnrollment, { CCAssessmentPathwayHelper } from \"../Models/CcAssessmentPathwayEnrollment\";\r\nimport { getDateWithOffset } from \"../../Shared/Utility/GetDateWithOffset\";\r\n\r\n\r\ninterface IProps{\r\n pathwayEnrollment: CcAssessmentPathwayEnrollment;\r\n}\r\n\r\nexport default function AnnualFeePreview(props: IProps){\r\n const getEnrolledCertificates = () => {\r\n return props.pathwayEnrollment.ccEnrollmentCertificates.filter(_ => _.isEnrolled);\r\n }\r\n\r\n \r\n return(\r\n \r\n
\r\n

Annual Fee

\r\n \r\n \r\n \r\n Certification\r\n \r\n {getEnrolledCertificates().map(_ => \r\n \r\n {_.certificationName} { _.isFuture && (Fee will be applied starting: {getDateWithOffset(_.enrollmentStartDate).toLocaleDateString('en-US')})}\r\n \r\n )}\r\n \r\n Total: ${CCAssessmentPathwayHelper.getAnnualFee(props.pathwayEnrollment)}\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n}","import React from \"react\";\r\nimport { Button, Card, Col, Form, Row } from \"react-bootstrap\";\r\nimport { CCEnrollment } from \"../../Physician/Models/CCEnrollment\";\r\nimport AbpnSpinner from \"../../Shared/Components/AbpnSpinner\";\r\nimport CcAssessmentPathwayEnrollment from \"../Models/CcAssessmentPathwayEnrollment\";\r\n\r\nimport ArticleRequirementPreview from \"./ArticleRequirementPreview\";\r\nimport ExamRequirementPreview from \"./ExamRequirementPreview\";\r\nimport AnnualFeePreview from \"./AnnualFeePreview\";\r\n\r\ninterface IProps {\r\n isSectionOpen: boolean;\r\n onSave?: () => void;\r\n onUpdate?: () => void;\r\n onOpen?: () => void;\r\n disabled?: boolean;\r\n isLoading?: boolean;\r\n onContinue: () => void;\r\n onPrevious: () => void; \r\n currentEnrollment: CCEnrollment;\r\n pathwayEnrollment: CcAssessmentPathwayEnrollment;\r\n}\r\n\r\nexport default function ReviewRequirements(props: IProps){\r\n\r\n const onSubmit = async (e: React.FormEvent) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n if (validateSelection()) {\r\n props.onContinue();\r\n }\r\n }\r\n\r\n const onPrevious = async (e: React.MouseEvent) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n props.onPrevious();\r\n }\r\n\r\n const validateSelection = () => {\r\n return true;\r\n }\r\n \r\n if (props.isLoading) return \r\n return (\r\n \r\n { !(props.disabled) &&\r\n \r\n \r\n \r\n REQUIREMENTS\r\n \r\n \r\n \r\n
onSubmit(e)}>\r\n \r\n

Please review your CC Requirements

\r\n
\r\n {props.isLoading ? : \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n }\r\n \r\n \r\n
\r\n
\r\n
\r\n }\r\n
\r\n )\r\n}","import React from \"react\";\r\nimport { Button, Col, Form, OverlayTrigger, Row, Tooltip } from \"react-bootstrap\";\r\nimport { CCAssessmentType } from \"../../Physician/Models/CCEnrollment\";\r\nimport { CertificationGeneration } from \"../../Physician/Models/Certificate\";\r\nimport { deepCopy } from \"../../Shared/Utility/DeepCopy\";\r\nimport { CcAssessmentPathwayEnrollmentCertificate } from \"../Models/CcAssessmentPathwayEnrollment\";\r\nimport { getDateWithOffset } from \"../../Shared/Utility/GetDateWithOffset\";\r\n\r\ninterface IProps{\r\n certificate: CcAssessmentPathwayEnrollmentCertificate;\r\n updateEnrollmentCert: (certificate: CcAssessmentPathwayEnrollmentCertificate) => void;\r\n}\r\nexport default function SelectCertificationRow(props: IProps){\r\n const updateCcAssessmentType = (ccAssessmentType: CCAssessmentType) => {\r\n var updatedCert = deepCopy(props.certificate);\r\n updatedCert.ccAssessmentType = ccAssessmentType;\r\n if (ccAssessmentType !== CCAssessmentType.Article){\r\n updatedCert.lastArticleAssessmentEnrolledDate = new Date().toString();\r\n } else{\r\n updatedCert.lastArticleAssessmentEnrolledDate = null;\r\n }\r\n \r\n props.updateEnrollmentCert(updatedCert);\r\n }\r\n\r\n const updateCertIsEnrolled = (isEnrolled: boolean) => {\r\n var updatedCert = deepCopy(props.certificate);\r\n updatedCert.isEnrolled = isEnrolled;\r\n if (!isEnrolled){\r\n updatedCert.ccAssessmentType = null;\r\n }\r\n \r\n props.updateEnrollmentCert(updatedCert);\r\n \r\n }\r\n \r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {props.certificate.certificationName}\r\n {props.certificate.isEnrolled && props.certificate.isFuture &&
(Requirements Begin: {getDateWithOffset(props.certificate.enrollmentStartDate).toLocaleDateString('en-US')})
}\r\n \r\n \r\n \r\n \r\n {props.certificate.isEnrolled ? \r\n \r\n {props.certificate.isAbccEligible ? \r\n Select pathway*\r\n \r\n

Article Pathway (ABCC): Diplomates will complete a set of mini exams based on articles from various medical journals per 3-year block

\r\n

Exam Pathway: Diplomates will be required to apply for and pass a traditional recertification examination every ten years

\r\n }>\r\n \r\n \r\n
\r\n \r\n\r\n \r\n \r\n updateCcAssessmentType(CCAssessmentType.Article)} />\r\n Article Pathway (ABCC)\r\n \r\n \r\n \r\n \r\n updateCcAssessmentType(CCAssessmentType.Exam)} />\r\n Exam Pathway\r\n \r\n \r\n
: \r\n \r\n ABPN's ABCC pathway is not an option for this certification. Please see the ABPN Website for more details.\r\n }\r\n
\r\n : \r\n \r\n {props.certificate.certificationGeneration === CertificationGeneration.Lifetime \r\n && !props.certificate.isEnrolled &&\r\n
\r\n \r\n
}\r\n\r\n \r\n
}\r\n
\r\n \r\n \r\n {props.certificate.certificationGeneration === CertificationGeneration.Lifetime \r\n && props.certificate.isEnrolled &&\r\n
\r\n \r\n
\r\n }\r\n \r\n
\r\n \r\n
\r\n
\r\n
)\r\n}","import React, { useState } from \"react\";\r\nimport { Alert, Button, Card, Col, Form, Row } from \"react-bootstrap\";\r\nimport AbpnSpinner from \"../../Shared/Components/AbpnSpinner\";\r\nimport { deepCopy } from \"../../Shared/Utility/DeepCopy\";\r\nimport { CcAssessmentPathwayEnrollmentCertificate } from \"../Models/CcAssessmentPathwayEnrollment\";\r\nimport SelectCertificationRow from \"./SelectCertificationRow\";\r\n\r\ninterface IProps {\r\n isSectionOpen: boolean;\r\n onSave?: () => void;\r\n onUpdate?: () => void;\r\n onOpen?: () => void;\r\n disabled?: boolean;\r\n isLoading?: boolean;\r\n onContinue: () => void;\r\n certificates: Array;\r\n updateCertificates: (certificates: Array) => void;\r\n}\r\n\r\nexport default function SelectCertifications(props: IProps){\r\n const [errorMessages, setErrorMessages] = useState([]);\r\n \r\n const onSubmit = async (e: React.FormEvent) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n if (validateSelection()) {\r\n props.onContinue();\r\n }\r\n }\r\n\r\n const validateSelection = () => {\r\n console.log(props.certificates);\r\n let newErrorMessages = [];\r\n var unselectedCerts = props.certificates.filter(_ => _.isEnrolled && (_.ccAssessmentType === null));\r\n if (unselectedCerts.length > 0)\r\n {\r\n newErrorMessages.push(\"You must select a pathway for all enrolled certifications\");\r\n }\r\n \r\n setErrorMessages(newErrorMessages);\r\n return newErrorMessages.length === 0;\r\n }\r\n\r\n const onUpdateEnrollmentCert = (certificate: CcAssessmentPathwayEnrollmentCertificate)=> {\r\n // Get Certificate from props and update, then send the collection back to parent\r\n var updated = deepCopy(props.certificates);\r\n var index = updated.findIndex((_: CcAssessmentPathwayEnrollmentCertificate) => _.certificateId == certificate.certificateId);\r\n updated[index] = certificate;\r\n props.updateCertificates(updated);\r\n\r\n }\r\n \r\n if (props.isLoading) return \r\n return (\r\n \r\n { !(props.disabled) &&\r\n \r\n \r\n \r\n CERTIFICATIONS\r\n \r\n \r\n \r\n
onSubmit(e)}>\r\n \r\n \r\n

Please review your certifications eligible for Continuing Certification

\r\n {props.certificates.map((certificate: CcAssessmentPathwayEnrollmentCertificate) => \r\n \r\n )}\r\n \r\n
\r\n {errorMessages.length > 0 &&\r\n \r\n {errorMessages.map(errorMessage =>

{errorMessage}

)}\r\n
\r\n }\r\n {props.isLoading ? : \r\n \r\n \r\n  \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n }\r\n \r\n \r\n
\r\n
\r\n
\r\n }\r\n
\r\n )\r\n}","import React from \"react\";\r\nimport { Form } from \"react-bootstrap\";\r\nimport { CcAssessmentPathwayEnrollmentCertificate } from \"../Models/CcAssessmentPathwayEnrollment\";\r\n\r\n\r\ninterface IProps{\r\n abccCertificates: Array;\r\n updateCertificateAttestation: (certificate: CcAssessmentPathwayEnrollmentCertificate) => void;\r\n}\r\n\r\nexport default function ArticlePathwayTerms(props: IProps){\r\n \r\n const updateCertificateAttestations = (e: React.ChangeEvent) => {\r\n for (var i = 0; i < props.abccCertificates.length; i++){\r\n var updated = props.abccCertificates[i];\r\n updated.ccAssessmentAttestationDate = e.target.checked ? new Date().toString() : null;\r\n props.updateCertificateAttestation(updated);\r\n }\r\n }\r\n\r\n\r\n return (\r\n \r\n \r\n Article Based Continuing Certification (ABCC) Policy Statement\r\n \r\n \r\n
\r\n

I agree the Board is the final judge of my qualifications for admission to examination and for certification. I agree that the Board may disqualify me from examination, from certification, or may cancel my certification \r\n in the event that the Board determines that any information furnished by me was false or that I violated any Board rule or policy.

\r\n

I agree that irregular or improper behavior, such as giving, obtaining, or receiving information or aid, failing to comply with instructions, disregarding time limits, taking any recordings of the examination or \r\n other disruptive behavior will be considered an attempt to subvert the certification process. I understand that the examination material is confidential and copyrighted. I agree not to copy, reproduce, record, stream, \r\n or disclose examination materials or content, at any time. These and other irregular or improper behaviors, as evidenced by observation, by subsequent statistical analysis, or by other means, may be cause for \r\n the Board to terminate my examination, invalidate my examination results, bar me from admission to future examinations or certification, and to take other appropriate actions.

\r\n

I agree not to share questions or answers included in the examinations. I will not choose journal article exams for which I am an author.

\r\n

Professionalism forms the basis of medicine’s contract with society. The ABPN is concerned with those aspects of professionalism that are demonstrated through a physician’s clinical competence, commitment to \r\n lifelong learning and professional improvement, interpersonal skills, and ethical understanding and behavior. In its credentialing, certification, and CC/MOC programs, \r\n the ABPN seeks to assess and document that its candidates and diplomates possess and maintain these aspects of professionalism.

\r\n

Pursuant to HIPPA, any related regulations, and any applicable state laws, I agree not to use or disclose health information used or disclosed in any Board examination.

\r\n

I understand that the Board makes academic and scientific judgments in its evaluation of the results of its examinations, and that situations may occur, even through no fault of mine, \r\n that will render my examination results unreliable in the judgement of the Board. I agree that if the Board determines that the results of my examination are unreliable, \r\n the Board may require me to retake that examination.

\r\n

I consent to the fact that my certification status is public information and that the Board will make it publicly available. In addition, I authorize the Board to release information about me in accordance \r\n with the Board’s Privacy Policy, https://www.abpn.org/terms-of-use/ including but not limited to informing program director(s) from which I took training as to my performance on any or all of the Board’s \r\n examinations taken by me at any time. In addition, I also authorize the Board to, at its discretion, release information contained in this application, my examination results, and examination scores to \r\n researchers selected by the Board to study the testing and evaluation programs of the Board under appropriateconditions of confidentiality established by the Board. Any studies reported by the Board will \r\n contain information about candidates and diplomates only in the aggregate, and the names of individuals will not be revealed in any publications. I hereby release and agree to hold harmless the Board and any of the Board’s employees,\r\n directors or representatives from any liability arising out of the Board’s disclosing of information pertaining to me. This release and hold harmless includes liability for the inaccuracy of such information, \r\n so long as such information was provided in good faith.

\r\n

I hereby release and discharge the Board, its directors, officers, employees, examiners, representatives, and agents from any actions, suits, obligations, claims, or demands arising out of, or in connection with \r\n participation in the Continuing Certification program and Article based Assessment pathway, the scoring given with respect to any examination, or the failure of the Board to issue me such certificate.

\r\n

Notwithstanding the preceding release, if a claim is allowed, I AGREE AND CONSENT TO THE JURISDICTION AND THE LAWS OF ILLINOIS AND EXCLUSIVE VENUE IN LAKE COUNTY, ILLINOIS. In addition,\r\n I EXPRESSLY WAIVE ANY RIGHT TO ASSERT ANY CLAIMS (whether before a jury, judge, administrative judge or board or in arbitration) AGAINST THE BOARD AS A REPRESENTATIVE OR MEMBER IN ANY CLASS ACTION, \r\n except where such waiver is prohibited by law. To the extent either party is permitted to proceed with a class action, the parties agree that (i) the prevailing party shall not be entitled to recover attorneys’ fees \r\n or costs associated with pursuing the class action and (ii) the party who participates as a member of a class action will not submit a claim or otherwise participate in any recovery secured through the class action, by settlement or judgment.

\r\n

See the website for additional Article Based Continuing Certification (ABCC) information.

\r\n

See the General Policies regarding taking a CC/MOC examination here: https://www.abpn.org/wp-content/uploads/2021/07/2022-ABPN-General-Information-and-Board-Policies.pdf

\r\n

No extensions or additional time will be granted for completing the journal article assessments. All assessments must be completed and submitted by the date indicated in the Physician Portal/Folios account.

\r\n

\r\n Qualifications for test accommodations for applicants with disabilities can be found on the ABPN website policies section. \r\n

\r\n
\r\n
\r\n \r\n \r\n \r\n I hereby declare under penalty of perjury I agree to the terms and conditions of the Article Based Continuing Certification (ABCC) Pathway. I intend to be legally bound by the foregoing.\r\n Please attest to the above before continuing\r\n \r\n \r\n
\r\n );\r\n}","import React from \"react\";\r\nimport { Form } from \"react-bootstrap\";\r\nimport { CcAssessmentPathwayEnrollmentCertificate } from \"../Models/CcAssessmentPathwayEnrollment\";\r\n\r\n\r\ninterface IProps{\r\n examCertificates: Array;\r\n updateCertificateAttestation: (certificate: CcAssessmentPathwayEnrollmentCertificate) => void;\r\n}\r\n\r\nexport default function ExamPathwayTerms(props: IProps){\r\n \r\n const updateCertificateAttestations = (e: React.ChangeEvent) => {\r\n for (var i = 0; i < props.examCertificates.length; i++){\r\n var updated = props.examCertificates[i];\r\n updated.ccAssessmentAttestationDate = e.target.checked ? new Date().toString() : null;\r\n props.updateCertificateAttestation(updated);\r\n }\r\n }\r\n\r\n return(\r\n \r\n \r\n CC Exam Application Policy Statement\r\n \r\n \r\n
\r\n

I agree the Board is the final judge of my qualifications for admission to examination and for certification. I agree that the Board may disqualify me from examination, from certification, or may cancel my certification \r\n in the event that the Board determines that any information furnished by me was false or that I violated any Board rule or policy.

\r\n

I agree to not bring food, drink, phones, pagers, or other electronic devices, books, study materials, personal belongings including watches and wallets, or other prohibited materials into an examination room. \r\n I agree not to make any phone calls during an examination session.

\r\n

I agree that irregular or improper behavior, such as giving, obtaining, or receiving information or aid, removing any examination materials from the test center, failing to comply with instructions, disregarding time limits, \r\n taking any recordings of the examination or other disruptive behavior will be considered an attempt to subvert the certification process. I understand that the examination material is confidential and copyrighted. \r\n I agree not to copy, reproduce, record, stream, or disclose examination materials or content, at any time. These and other irregular or improper behaviors, as evidenced by observation, by subsequent statistical analysis, \r\n or by other means, may be cause for the Board to terminate my examination, invalidate my examination results, bar me from admission to future examinations or certification, and to take other appropriate actions.

\r\n

Professionalism forms the basis of medicine’s contract with society. The ABPN is concerned with those aspects of professionalism that are demonstrated through a physician’s clinical competence, commitment to lifelong learning \r\n and professional improvement, interpersonal skills, and ethical understanding and behavior. In its credentialing, certification, and CC/MOC programs, the ABPN seeks to assess and document that its candidates and diplomates possess and maintain these aspects of professionalism.

\r\n

Pursuant to HIPPA, any related regulations, and any applicable state laws, I agree not to use or disclose health information used or disclosed in any Board examination.

\r\n

I understand that the Board makes academic and scientific judgments in its evaluation of the results of its examinations, and that situations may occur, even through no fault of mine, that will render my examination results unreliable in \r\n the judgement of the Board. I agree that if the Board determines that the results of my examination are unreliable, the Board may require me to retake that examination.

\r\n

I consent to the fact that my certification status is public information and that the Board will make it publicly available. In addition, I authorize the Board to release information about me in accordance with the Board’s Privacy Policy,\r\n https://www.abpn.org/terms-of-use/, including but not limited to informing program director(s) from which I took training as to my performance on any or all of the Board’s examinations taken by me at any time. \r\n In addition, I also authorize the Board to, at its discretion, release information contained in this application, my examination results, and examination scores to researchers selected by the Board to study the testing and evaluation \r\n programs of the Board under appropriate conditions of confidentiality established by the Board. Any studies reported by the Board will contain information about candidates and diplomates only in the aggregate, and the names of individuals will not be revealed in any publications. \r\n I hereby release and agree to hold harmless the Board and any of the Board’s employees, directors or representatives from any liability arising out of the Board’s disclosing of information pertaining to me. This release and hold harmless includes liability for\r\n the inaccuracy of such information, so long as such information was provided in good faith.

\r\n

I HEREBY RELEASE AND DISCHARGE THE BOARD, its directors, officers, employees, examiners, representatives, and agents FROM ANY ACTIONS, SUITS, OBLIGATIONS, CLAIMS, OR DEMANDS arising out of, or in connection with this application, \r\n the grade or grades given with respect to any examination, or the failure of the Board to issue me such certificate.

\r\n

Notwithstanding the preceding release, if a claim is allowed, I AGREE AND CONSENT TO THE JURISDICTION AND THE LAWS OF ILLINOIS AND EXCLUSIVE VENUE IN LAKE COUNTY, ILLINOIS. In addition, I EXPRESSLY WAIVE ANY RIGHT TO ASSERT ANY CLAIMS \r\n (whether before a jury, judge, administrative judge or board or in arbitration) AGAINST THE BOARD AS A REPRESENTATIVE OR MEMBER IN ANY CLASS ACTION, except where such waiver is prohibited by law. To the extent either party is \r\n permitted to proceed with a class action, the parties agree that (i) the prevailing party shall not be entitled to recover attorneys’ fees or costs associated with pursuing the class action and (ii) the party who participates as \r\n a member of a class action will not submit a claim or otherwise participate in any recovery secured through the class action, by settlement or judgment.

\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n I hereby declare under penalty of perjury that the information given in this application is true and correct to the best of my knowledge and belief. I intend to be legally bound by the foregoing.\r\n Please attest to the above before continuing\r\n \r\n \r\n
\r\n );\r\n}","import React, { useState } from \"react\";\r\nimport { Alert, Button, Card, Col, Form, Row } from \"react-bootstrap\";\r\nimport { CCAssessmentType } from \"../../Physician/Models/CCEnrollment\";\r\nimport AbpnSpinner from \"../../Shared/Components/AbpnSpinner\";\r\nimport ArticlePathwayTerms from './ArticlePathwayTerms';\r\nimport ExamPathwayTerms from './ExamPathwayTerms';\r\nimport CcAssessmentPathwayEnrollment, { CcAssessmentPathwayEnrollmentCertificate } from \"../Models/CcAssessmentPathwayEnrollment\";\r\nimport { deepCopy } from \"../../Shared/Utility/DeepCopy\";\r\n\r\ninterface IProps {\r\n isSectionOpen: boolean;\r\n onSave?: () => void;\r\n onUpdate?: () => void;\r\n onOpen?: () => void;\r\n disabled?: boolean;\r\n isLoading?: boolean;\r\n onCompleteEnrollment: () => void;\r\n onPrevious: () => void;\r\n pathwayEnrollment: CcAssessmentPathwayEnrollment;\r\n updateCertificates: (certificates: Array) => void;\r\n}\r\n\r\nexport default function TermsAndAttestation(props: IProps){\r\n const [errorMessages, setErrorMessages] = useState([]);\r\n const [isSubmitDisabled, setIsSubmitDisabled] = useState(false);\r\n\r\n const getEnrolledCertificates = () => {\r\n return props.pathwayEnrollment.ccEnrollmentCertificates.filter(_ => _.isEnrolled);\r\n }\r\n\r\n const getAbccCertifications = () => {\r\n return props.pathwayEnrollment.ccEnrollmentCertificates.filter(_ => _.isEnrolled && _.isAbccEligible && _.ccAssessmentType == CCAssessmentType.Article);\r\n }\r\n\r\n const getExamCertifications = () => {\r\n return props.pathwayEnrollment.ccEnrollmentCertificates.filter(_ => _.isEnrolled && (_.ccAssessmentType == CCAssessmentType.Exam || _.ccAssessmentType == CCAssessmentType.Other));\r\n }\r\n\r\n const onSubmit = async (e: React.FormEvent) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n setIsSubmitDisabled(true);\r\n\r\n // todo validate all attested\r\n if (validateSelection()){\r\n props.onCompleteEnrollment();\r\n }\r\n\r\n setIsSubmitDisabled(false);\r\n \r\n }\r\n\r\n const validateSelection = () => {\r\n let newErrorMessages = [];\r\n var unattestedCerts = props.pathwayEnrollment.ccEnrollmentCertificates.filter(_ => _.isEnrolled && _.ccAssessmentAttestationDate === null);\r\n if (unattestedCerts.length > 0)\r\n {\r\n newErrorMessages.push(\"You must agree to the terms for all pathways selected.\");\r\n }\r\n \r\n setErrorMessages(newErrorMessages);\r\n return newErrorMessages.length === 0;\r\n }\r\n\r\n const onUpdateCertificateAttestation = (certificate: CcAssessmentPathwayEnrollmentCertificate) => {\r\n var updated = deepCopy(props.pathwayEnrollment.ccEnrollmentCertificates);\r\n var index = updated.findIndex((_: CcAssessmentPathwayEnrollmentCertificate) => _.certificateId == certificate.certificateId);\r\n updated[index] = certificate;\r\n props.updateCertificates(updated);\r\n }\r\n\r\n const onPrevious = async (e: React.MouseEvent) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n props.onPrevious();\r\n }\r\n\r\n\r\n if (props.isLoading || isSubmitDisabled) return \r\n return (\r\n \r\n { !(props.disabled) && !(isSubmitDisabled) &&\r\n \r\n {getEnrolledCertificates().length > 0 && \r\n \r\n POLICY STATEMENT\r\n \r\n \r\n \r\n
onSubmit(e)}>\r\n

Please review an accept the terms below:

\r\n {getAbccCertifications().length > 0 &&\r\n \r\n }\r\n {getExamCertifications().length > 0 &&\r\n \r\n }\r\n\r\n {errorMessages.length > 0 &&\r\n \r\n {errorMessages.map(errorMessage =>

{errorMessage}

)}\r\n
\r\n }\r\n {props.isLoading ? : \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n \r\n \r\n
\r\n
}\r\n {getEnrolledCertificates().length == 0 && \r\n \r\n UNENROLL FROM CC\r\n \r\n \r\n \r\n
onSubmit(e)}>\r\n

You have chosen to unenroll all certificates from CC.

\r\n\r\n {props.isLoading ? : \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n \r\n \r\n
\r\n
}\r\n
\r\n }\r\n
\r\n )\r\n}","import { CCAssessmentType } from \"../../Physician/Models/CCEnrollment\";\r\nimport { getDateWithOffset } from \"../../Shared/Utility/GetDateWithOffset\";\r\nimport CcAssessmentPathwayEnrollment, { CcAssessmentPathwayEnrollmentCertificate } from \"./CcAssessmentPathwayEnrollment\";\r\n\r\nexport default class UpdateCCAssessmentPathwayModel{\r\n constructor(pathwayEnrollment: CcAssessmentPathwayEnrollment) {\r\n this.cCEnrollmentId = pathwayEnrollment.ccEnrollmentId;\r\n this.cCEnrollmentCertificates = new Array();\r\n\r\n for (var i = 0; i < pathwayEnrollment.ccEnrollmentCertificates.length; i++){\r\n this.cCEnrollmentCertificates.push(new UpdateCCAssessmentPathwayCertificateModel(pathwayEnrollment.ccEnrollmentCertificates[i]));\r\n }\r\n }\r\n\r\n cCEnrollmentId: number;\r\n cCEnrollmentCertificates: Array\r\n}\r\n\r\nexport class UpdateCCAssessmentPathwayCertificateModel{\r\n constructor(enrollmentCertificate: CcAssessmentPathwayEnrollmentCertificate){\r\n this.certificateId = enrollmentCertificate.certificateId;\r\n this.isEnrolled = enrollmentCertificate.isEnrolled;\r\n this.cCAssessmentType = enrollmentCertificate.ccAssessmentType;\r\n this.cCAssessmentAttestationDate = getDateWithOffset(enrollmentCertificate.ccAssessmentAttestationDate);\r\n this.lastArticleAssessmentEnrolledDate = getDateWithOffset(enrollmentCertificate.lastArticleAssessmentEnrolledDate);\r\n this.enrollmentStartDate = getDateWithOffset(enrollmentCertificate.enrollmentStartDate);\r\n this.enrollmentEndDate = getDateWithOffset(enrollmentCertificate.enrollmentEndDate);\r\n \r\n }\r\n\r\n certificateId: number;\r\n isEnrolled: boolean;\r\n cCAssessmentType: CCAssessmentType;\r\n cCAssessmentAttestationDate: Date;\r\n lastArticleAssessmentEnrolledDate: Date;\r\n enrollmentStartDate: Date;\r\n enrollmentEndDate: Date;\r\n}","import { useContext, useEffect, useState } from \"react\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { Button, Col, Container, Row } from \"react-bootstrap\";\r\nimport ReviewRequirements from \"./ReviewRequirements\";\r\nimport SelectCertifications from \"./SelectCertifications\";\r\nimport TermsAndAttestation from \"./TermsAndAttestation\";\r\nimport { deepCopy } from \"../../Shared/Utility/DeepCopy\";\r\nimport AbpnSpinner from \"../../Shared/Components/AbpnSpinner\";\r\nimport CcAssessmentPathwayEnrollment, { CcAssessmentPathwayEnrollmentCertificate } from \"../Models/CcAssessmentPathwayEnrollment\";\r\nimport Physician from \"../../Physician/Models/Physician\";\r\nimport { abpnClient } from \"../../../Services/AbpnClient\";\r\nimport { AuthContext } from \"../../Auth/AuthProvider\";\r\nimport UpdateCCAssessmentPathwayModel from \"../Models/UpdateCCAssessmentPathwayModel\";\r\n\r\ninterface INavigation {\r\n sectionsComplete: number,\r\n activeSections: Array,\r\n}\r\n\r\nenum EnrollmentSection {\r\n Certifications,\r\n Requirements,\r\n Terms\r\n}\r\n\r\n\r\nexport default function ManageCCEnrollment(){\r\n const [physician, setPhysician] = useState(null);\r\n const [sectionNavigation, setSectionNav] = useState({sectionsComplete: null, activeSections: null});\r\n const [loading, setLoading] = useState(true);\r\n const authContext = useContext(AuthContext);\r\n const [pathwayEnrollment, setPathwayEnrollment] = useState(new CcAssessmentPathwayEnrollment());\r\n\r\n useEffect(() => {\r\n abpnClient.get(\"/api/physician\", authContext)\r\n .then(physician => {\r\n setPhysician(physician);\r\n \r\n abpnClient.get(\"/api/physician/GetCCAssessmentPathwayEnrollment\", authContext)\r\n .then (enrollment => {\r\n setPathwayEnrollment(enrollment);\r\n console.log(enrollment);\r\n let activeSections = [EnrollmentSection.Certifications];\r\n activeSections.push(EnrollmentSection.Requirements);\r\n activeSections.push(EnrollmentSection.Terms);\r\n var updated = deepCopy(sectionNavigation);\r\n updated.activeSections = activeSections;\r\n updated.sectionsComplete = 0;\r\n\r\n setSectionNav(updated);\r\n setLoading(false);\r\n })\r\n });\r\n }, []);\r\n\r\n const updateSectionsComplete = (index: number) => {\r\n var updatedNav = deepCopy(sectionNavigation);\r\n updatedNav.sectionsComplete = index;\r\n setSectionNav(updatedNav);\r\n }\r\n\r\n const previousSectionComplete = (section: EnrollmentSection) => {\r\n return (sectionNavigation.sectionsComplete === sectionNavigation.activeSections.indexOf(section));\r\n }\r\n\r\n const onSelectCertificationsContinue = () => {\r\n // Move to next section\r\n \r\n var enrolledcCertificates = pathwayEnrollment.ccEnrollmentCertificates.filter(_ => _.isEnrolled === true);\r\n if (enrolledcCertificates.length === 0){\r\n updateSectionsComplete(sectionNavigation.sectionsComplete + 2);\r\n }else{\r\n updateSectionsComplete(sectionNavigation.sectionsComplete + 1);\r\n }\r\n \r\n }\r\n\r\n const onUpdatedCertificates = (certificates: Array) => {\r\n var updated = deepCopy(pathwayEnrollment);\r\n updated.ccEnrollmentCertificates = certificates\r\n setPathwayEnrollment(updated);\r\n }\r\n\r\n const onReviewRequirementsContinue = () => {\r\n // Move to next section\r\n updateSectionsComplete(sectionNavigation.sectionsComplete + 1);\r\n }\r\n\r\n const onReviewRequirementsPrevious = () => {\r\n // Move to next section\r\n updateSectionsComplete(sectionNavigation.sectionsComplete - 1);\r\n }\r\n\r\n const history = useHistory();\r\n\r\n \r\n\r\n const onTermsCompleteEnrollment = async () => {\r\n const url = \"/api/Physician/UpdateCCAssessmentPathwayEnrollment\";\r\n var dto = new UpdateCCAssessmentPathwayModel(pathwayEnrollment);\r\n await abpnClient.post(url, dto, authContext).then(result => {\r\n setPathwayEnrollment(result);\r\n });\r\n\r\n history.push('/');\r\n\r\n }\r\n\r\n const onTermsPrevious = () => {\r\n // Move to next section\r\n var enrolledcCertificates = pathwayEnrollment.ccEnrollmentCertificates.filter(_ => _.isEnrolled === true);\r\n if (enrolledcCertificates.length === 0){\r\n updateSectionsComplete(sectionNavigation.sectionsComplete - 2);\r\n }else{\r\n updateSectionsComplete(sectionNavigation.sectionsComplete - 1);\r\n }\r\n \r\n }\r\n\r\n const isSectionDisabled = (section: EnrollmentSection) => {\r\n return (sectionNavigation.sectionsComplete !== sectionNavigation.activeSections.indexOf(section));\r\n }\r\n\r\n const onCancel = () => {\r\n history.push('/');\r\n }\r\n\r\n if (!(sectionNavigation.activeSections)) return \r\n return (\r\n \r\n \r\n \r\n
\r\n

Manage CC Enrollment

\r\n updateSectionsComplete(0)}\r\n isLoading={loading}\r\n onContinue={onSelectCertificationsContinue}\r\n certificates={pathwayEnrollment && pathwayEnrollment.ccEnrollmentCertificates}\r\n updateCertificates={onUpdatedCertificates}\r\n />\r\n updateSectionsComplete(sectionNavigation.activeSections.indexOf(EnrollmentSection.Requirements))}\r\n isLoading={loading} \r\n onContinue={onReviewRequirementsContinue}\r\n onPrevious={onReviewRequirementsPrevious}\r\n currentEnrollment={physician.currentCCEnrollment}\r\n pathwayEnrollment={pathwayEnrollment}\r\n />\r\n updateSectionsComplete(sectionNavigation.activeSections.indexOf(EnrollmentSection.Terms))}\r\n isLoading={loading}\r\n onCompleteEnrollment={onTermsCompleteEnrollment}\r\n pathwayEnrollment={pathwayEnrollment}\r\n onPrevious={onTermsPrevious}\r\n updateCertificates={onUpdatedCertificates}\r\n />\r\n \r\n
\r\n \r\n
\r\n
\r\n )\r\n}\r\n\r\n\r\n","import { Fragment, useEffect, useContext, useState } from \"react\";\r\nimport { Row, Col, Card } from \"react-bootstrap\";\r\nimport { abpnClient } from \"../Services/AbpnClient\";\r\nimport { AuthContext } from \"./Auth/AuthProvider\";\r\nimport { AssessmentResult } from \"./Dashboard/Models/Assessment\";\r\nimport AbpnSpinner from \"./Shared/Components/AbpnSpinner\";\r\nimport { ProfileContext } from \"../Components/Auth/ProfileProvider\";\r\nimport AssessmentCard from \"./Dashboard/Assessments/AssessmentCard\";\r\nimport { Banner } from \"./Shared/Components/Banner\";\r\n\r\nexport default function OtherBoardHome() {\r\n\r\n const [assessments, setAssessments] = useState>([]);\r\n const [isLoading, setIsLoading] = useState(false);\r\n const authContext = useContext(AuthContext);\r\n const { user } = useContext(ProfileContext);\r\n\r\n useEffect(()=>{\r\n const loadAssessments = async () => {\r\n setIsLoading(true);\r\n const results = await abpnClient.get>(`/api/OtherBoard/GetOtherBoardPhysicianLearningTracks`,authContext);\r\n setAssessments(results);\r\n setIsLoading(false);\r\n }\r\n\r\n if (user) {\r\n loadAssessments();\r\n }\r\n },[user]);\r\n\r\n if (!user) return \r\n return (\r\n \r\n \r\n \r\n {isLoading ? :\r\n \r\n \r\n \r\n Assessments\r\n \r\n \r\n \r\n \r\n \r\n {assessments.map((assessment: AssessmentResult, index: number) => {\r\n return \r\n })}\r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n \r\n \r\n );\r\n}","\r\nexport default class Fee {\r\n public feeAmount: number;\r\n public feeDescription: string;\r\n public feeType: FeeType;\r\n}\r\n\r\nexport enum FeeType {\r\n ApplicationFee = 1,\r\n ExaminationFeePrimaryInitial = 2,\r\n ExaminationFeeSubspecialtyInitial = 3,\r\n ExaminationFeeMoc = 4,\r\n ExaminationTransferInitial = 5,\r\n ExaminationTransferMoc = 6,\r\n LateFeeInitial = 7,\r\n LateFeeMoc = 8,\r\n ReturnedPaymentFee = 9,\r\n ExaminationFeeMocWithTwoModules = 10,\r\n ExaminationFeeMocWithThreeOrMoreModules = 11,\r\n CCAnnualFee = 12,\r\n ReseatingFee = 13,\r\n Refund = 14,\r\n DuplicateCertificate = 15,\r\n}","import { Fragment, useContext, useEffect, useState } from \"react\";\r\nimport { Card, Col, Row, Table } from \"react-bootstrap\";\r\nimport { abpnClient } from \"../Services/AbpnClient\";\r\nimport { AuthContext } from \"./Auth/AuthProvider\";\r\nimport AbpnSpinner from \"./Shared/Components/AbpnSpinner\";\r\nimport { deepCopy } from \"./Shared/Utility/DeepCopy\";\r\nimport { getDateWithOffset } from \"./Shared/Utility/GetDateWithOffset\";\r\nimport { FeeType } from \"./Orders/Models/Fee\";\r\nimport Order, { OrderLineItem } from \"./Orders/Models/Order\";\r\nimport PaymentWithInvoicesOrOrdersModel from \"./Shared/Models/PaymentWithInvoicesOrOrdersModel\";\r\n\r\nexport default function OrdersAndInvoices() {\r\n\r\n const [payments, setPayments] = useState>([]);\r\n const [isLoading, setIsLoading] = useState(false);\r\n\r\n const authContext = useContext(AuthContext);\r\n\r\n useEffect(() => {\r\n const loadOrdersAndInvoices = async () => {\r\n setIsLoading(true);\r\n const paymentInvoices = await abpnClient.get>('/api/invoice/getPaidInvoicesForPayment', authContext);\r\n const paymentOrders = await abpnClient.get>('/api/order/getPaidOrdersForPayment', authContext);\r\n const results = paymentInvoices.concat(paymentOrders);\r\n setPayments(results);\r\n\r\n let paymentDateSort = (a: PaymentWithInvoicesOrOrdersModel, b: PaymentWithInvoicesOrOrdersModel) => {\r\n return getDateWithOffset(b.transactionDate).getTime() - getDateWithOffset(a.transactionDate).getTime();\r\n }\r\n\r\n let sortedPayments = results.sort(paymentDateSort);\r\n setPayments(sortedPayments);\r\n setIsLoading(false);\r\n }\r\n\r\n loadOrdersAndInvoices();\r\n }, []);\r\n\r\n const getFees = (order: Order) => order.orderLineItems.filter(_ => _.feeType !== FeeType.Refund)\r\n const getRefunds = (order: Order) => order.orderLineItems.filter(_ => _.feeType === FeeType.Refund)\r\n const getFeesSubtotal = (order: Order) => getFees(order).map(_ => _.amount).reduce((a, b) => a + b, 0);\r\n const getRefundsSubtotal = (order: Order) => getRefunds(order).map(_ => _.amount).reduce((a, b) => a + b, 0);\r\n const getTotal = (order: Order) => order.orderLineItems.map(_ => _.amount).reduce((a, b) => a + b, 0);\r\n const getTotalPaid = (order: Order) => order.completedPayments.map(_ => _.amount).reduce((a, b) => a + b, 0);\r\n const getBalance = (order: Order) => getTotal(order) - getTotalPaid(order);\r\n\r\n const getFeeDescription = (orderLineItem: OrderLineItem) => {\r\n return orderLineItem.amount > 0 ? orderLineItem.description : orderLineItem.description + ' (Waived)'\r\n };\r\n\r\n const getFeeAmount = (orderLineItem: OrderLineItem) => {\r\n return orderLineItem.amount > 0 ? `$${Math.abs(orderLineItem.amount)}` : `- $${Math.abs(orderLineItem.amount)}`\r\n }\r\n\r\n const getSumOrderTotal = (payment: PaymentWithInvoicesOrOrdersModel) => {\r\n let value: number = 0;\r\n payment.orders.forEach(order => value += getTotal(order));\r\n return value;\r\n }\r\n\r\n const getSumInvoiceTotal = (payment: PaymentWithInvoicesOrOrdersModel) => {\r\n let value: number = 0;\r\n payment.invoices.forEach(invoice => value += invoice.total);\r\n return value;\r\n }\r\n\r\n const expandRow = (index: number) => {\r\n let updatedPayments: Array = deepCopy(payments);\r\n updatedPayments[index].isExpanded = true;\r\n setPayments(updatedPayments);\r\n }\r\n\r\n const collapseRow = (index: number) => {\r\n let updatedPayments: Array = deepCopy(payments);\r\n updatedPayments[index].isExpanded = false;\r\n setPayments(updatedPayments);\r\n }\r\n\r\n const download = async (paymentId: number) => {\r\n \r\n var api = `/api/payment/DownloadPaymentReceipt?paymentId=${paymentId}`;\r\n\r\n var response = await abpnClient.getResponse(api, authContext);\r\n var blob = await (response as Response).blob();\r\n\r\n const downloadFileUrl = window.URL.createObjectURL(\r\n new Blob([blob]),\r\n );\r\n const link = document.createElement('a');\r\n link.href = downloadFileUrl;\r\n link.setAttribute(\r\n 'download',\r\n `PaymentReceipt.pdf`,\r\n );\r\n\r\n // Append to html link element page\r\n document.body.appendChild(link);\r\n\r\n // Start download\r\n link.click();\r\n\r\n // Clean up and remove the link\r\n link.parentNode.removeChild(link);\r\n }\r\n\r\n if (isLoading) return \r\n if (payments.length === 0) return
There are no receipts.
\r\n\r\n return (\r\n \r\n \r\n \r\n Payments and Receipts\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {payments.map((_, index) =>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {_.invoices?.map((invoice, invoiceIndex) =>\r\n
Payment Date
\r\n {getDateWithOffset(_.transactionDate).toLocaleDateString()}\r\n \r\n \r\n {!_.isExpanded ?\r\n :\r\n \r\n }\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {invoice.lineItems.map((lineItem, lineItemIndex) => {\r\n if (lineItem.discountDescription)\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n else\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n )\r\n })}\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n {invoiceIndex == _.invoices.length - 1 &&\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {_.paymentIncludesMultipleInvoices &&\r\n \r\n \r\n \r\n } \r\n \r\n \r\n \r\n \r\n \r\n }\r\n \r\n
IDProduct DescriptionFee
{invoice.invoiceNumber}{lineItem.description}${lineItem.unitPrice}
{invoice.invoiceNumber}{lineItem.discountDescription}- ${lineItem.discountAmount}
{invoice.invoiceNumber}{lineItem.description}${lineItem.unitPrice}
Subtotal${invoice.total}
 
 
Total${getSumInvoiceTotal(_)}
Payment\r\n {(_.paymentIncludesMultipleInvoices) ?\r\n ${_.total}*\r\n :\r\n \r\n ${_.total}\r\n \r\n }\r\n
* Multiple invoices were processed in the same transaction. The displayed payment amount reflects the portion of the payment transaction that satisfied this invoice.
Balance\r\n $0\r\n
\r\n )}\r\n\r\n {_.orders?.map((order, orderIndex) =>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {getFees(order).map(fee => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n )\r\n })}\r\n \r\n \r\n \r\n \r\n \r\n {getRefunds(order).map(refund => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n )\r\n })}\r\n {getRefunds(order).length > 0 &&\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n\r\n {order.installments?.map((installment, installmentIndex) => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n )\r\n })}\r\n {orderIndex == _.orders.length - 1 &&\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n \r\n
IDProduct DescriptionFee
{order.orderNumber}{getFeeDescription(fee)}{getFeeAmount(fee)}
Subtotal${getFeesSubtotal(order)}
Refunded{getDateWithOffset(refund.createdDate).toLocaleDateString()}${refund.amount}
Refunded${getRefundsSubtotal(order)}
Due by {getDateWithOffset(installment.dueDate).toLocaleDateString()}${installment.amount}
 
Total${getSumOrderTotal(_)}
Payment${_.total}
Balance${getBalance(order)}
\r\n )}\r\n
\r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n}","import { useContext, useEffect, useState } from \"react\";\r\nimport { Card, Col, Row, Table } from \"react-bootstrap\";\r\nimport { abpnClient } from \"../../../Services/AbpnClient\";\r\nimport { AuthContext } from \"../../Auth/AuthProvider\";\r\nimport AbpnSpinner from \"../../Shared/Components/AbpnSpinner\";\r\nimport { getDateWithOffset } from \"../../Shared/Utility/GetDateWithOffset\";\r\nimport Message, { MessageAttachment } from \"../Models/Message\";\r\n\r\nexport default function Messages() {\r\n\r\n const [messages, setMessages] = useState>([]);\r\n const [isLoading, setIsLoading] = useState(false);\r\n\r\n const authContext = useContext(AuthContext);\r\n\r\n useEffect(() => {\r\n const loadMessages = async () => {\r\n setIsLoading(true);\r\n const results = await abpnClient.get>('/api/physician/GetMessages', authContext);\r\n setMessages(results);\r\n setIsLoading(false);\r\n }\r\n\r\n if (!isLoading) {\r\n loadMessages();\r\n }\r\n }, [authContext]);\r\n\r\n const downloadMessageDocument = async (message: Message) => {\r\n var response = await abpnClient.getResponse(`/api/physician/DownloadMessageDocument?messageId=${message.messageId}`, authContext)\r\n var blob = await response.blob();\r\n\r\n const downloadFileUrl = window.URL.createObjectURL(\r\n new Blob([blob]),\r\n );\r\n const link = document.createElement('a');\r\n link.href = downloadFileUrl;\r\n link.setAttribute(\r\n 'download',\r\n `${message.messageTemplateName ? message.messageTemplateName : message.subject} Message Document.pdf`,\r\n );\r\n\r\n // Append to html link element page\r\n document.body.appendChild(link);\r\n\r\n // Start download\r\n link.click();\r\n\r\n // Clean up and remove the link\r\n link.parentNode.removeChild(link);\r\n }\r\n\r\n const downloadMessageAttachment = async (messageAttachment: MessageAttachment) => {\r\n var response = await abpnClient.getResponse(`/api/physician/DownloadMessageAttachment?messageAttachmentId=${messageAttachment.messageAttachmentId}`, authContext)\r\n var blob = await response.blob();\r\n\r\n const downloadFileUrl = window.URL.createObjectURL(\r\n new Blob([blob]),\r\n );\r\n const link = document.createElement('a');\r\n link.href = downloadFileUrl;\r\n link.setAttribute(\r\n 'download',\r\n `${messageAttachment.documentName}`,\r\n );\r\n\r\n // Append to html link element page\r\n document.body.appendChild(link);\r\n\r\n // Start download\r\n link.click();\r\n\r\n // Clean up and remove the link\r\n link.parentNode.removeChild(link);\r\n }\r\n\r\n if (isLoading) return \r\n if (messages.length === 0) return
There are no messages.
\r\n\r\n return (\r\n \r\n \r\n \r\n Messages\r\n \r\n \r\n {messages.length === 0 ?\r\n
There are no messages.
\r\n :\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {messages.map((_, index) =>\r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n
DateMessage TypeAttachments 
\r\n {getDateWithOffset(_.statusDate).toLocaleDateString()}\r\n \r\n {_.messageTemplateName}\r\n \r\n {_.attachments?.map(_ => {\r\n return \r\n })}\r\n \r\n \r\n
\r\n \r\n }\r\n
\r\n
\r\n
\r\n );\r\n}","\r\nimport { BrowserRouter as Router, Route, Switch } from 'react-router-dom';\r\nimport Home from './Components/Home';\r\nimport { abpnClient } from './Services/AbpnClient';\r\nimport { ApplicationPaths } from './Services/Auth/AuthConstants';\r\nimport ApiAuthorizationRoutes from './Components/ApiAuthorizationRoutes';\r\nimport { OnBehalfOf } from './Components/Auth/OnBehalfOf';\r\nimport { appInsights } from './Services/AppInsights';\r\nimport Layout from './Components/Layout';\r\nimport '../src/App.scss'\r\nimport ErrorPage from './Components/ErrorPage';\r\nimport AvailableApplicationGrid from './Components/Dashboard/Applications/Components/AvailableApplicationGrid';\r\nimport { AuthorizeRoute } from './Components/Auth/AuthorizeRoute';\r\nimport { AuthProvider } from './Components/Auth/AuthProvider';\r\nimport { StaffOnlyRoute } from './Components/Auth/StaffOnlyRoute';\r\nimport Application from './Components/Apply/Components/Application';\r\nimport ExaminationReport from './Components/Examination/ExaminationReport';\r\nimport ExamHistory from './Components/Examination/ExamHistory';\r\nimport Unauthorized from './Components/Unauthorized';\r\nimport ManageActivities from './Components/ManageActivities/ManageActivities';\r\nimport { EmailNotFound } from './Components/Auth/EmailNotFound';\r\nimport AccountInformation from './Components/Account/AccountInformation';\r\nimport SearchForAccount from './Components/Auth/SearchForAccount';\r\nimport PersonalInformation from './Components/Auth/PersonalInformation';\r\nimport ManageCCEnrollment from './Components/CCEnrollment/Components/ManageCCEnrollment';\r\nimport { ProfileProvider } from './Components/Auth/ProfileProvider';\r\nimport OtherBoardHome from './Components/OtherBoardHome';\r\nimport PaymentsAndReceipts from './Components/PaymentsAndReceipts';\r\nimport Messages from './Components/Messages/Components/Messages';\r\n\r\nfunction App() {\r\n appInsights.load();\r\n\r\n const basename = '/physicianportal'\r\n const errorPageUrl = `${basename}/error`;\r\n\r\n abpnClient.setErrorPage(errorPageUrl);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default App;\r\n","import { ReportHandler } from 'web-vitals';\r\n\r\nconst reportWebVitals = (onPerfEntry?: ReportHandler) => {\r\n if (onPerfEntry && onPerfEntry instanceof Function) {\r\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\r\n getCLS(onPerfEntry);\r\n getFID(onPerfEntry);\r\n getFCP(onPerfEntry);\r\n getLCP(onPerfEntry);\r\n getTTFB(onPerfEntry);\r\n });\r\n }\r\n};\r\n\r\nexport default reportWebVitals;\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport App from './App';\r\nimport reportWebVitals from './reportWebVitals';\r\n\r\nReactDOM.render(\r\n \r\n \r\n ,\r\n document.getElementById('root')\r\n);\r\n\r\n// If you want to start measuring performance in your app, pass a function\r\n// to log results (for example: reportWebVitals(console.log))\r\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\r\nreportWebVitals();\r\n"],"sourceRoot":""}