PageSourceSearch

https://k-doc.ai/_next/static/chunks/87903-57f54d695bfd9008.js

js k-doc.ai collected 2026-10-05 12:17:33 UTC 25,571 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[87903],{5996:(e,t,i)=>{i.d(t,{$o:()=>c,wR:()=>A,fc:()=>u,kB:()=>d,d3:()=>l,PR:()=>o,l:()=>r,YJ:()=>v,XY:()=>w});var n=i(38731),a=i(56002);let s="checkout-service.prod.iamport.co",o=3500,l=`PortOne 보안 결제창이 별도 팝업으로 열립니다. 팝업이 보이지 않거나 "이 콘텐츠는 차단되어 있습니다"가 보이면, 이 사이트의 팝업과 ${s}만 허용한 뒤 다시 시도해 주세요.`;function r(e){let t=e instanceof Error?e.message.trim():"";return/failed to fetch|network\s*error|load failed/i.test(t)?`PortOne 보안 결제창을 열지 못했습니다. 브라우저의 광고\xb7보안 차단 확장 기능 또는 네트워크 정책에서 ${s}를 허용한 뒤 다시 시도해 주세요.`:/cancel|취소/i.test(t)?"카드 등록이 취소되었습니다. 다시 진행해 주세요.":"결제수단 등록을 완료하지 못했습니다. 잠시 후 다시 시도해 주세요."}let d=Object.freeze({pc:"POPUP"}),u=Object.freeze({center:!0});
1Object.freeze(["자동수납 대상은 동의 완료 후 새로 확정된 카인드닥터 AI 상담 사용료 청구서이며, 기존 미납분은 포함하지 않습니다.","청구금액은 유효 상담 전달 건당 2,000원, 적용된 무료\xb7제외\xb7조정 금액, 설정 지원비 및 부가가치세를 합산한 월별 변동 금액입니다.","각 청구서는 월 마감 후 7일 검토 기간이 끝나면 등록 카드로 자동 결제되며, 병원은 검토 기간 중 건별 이의를 신청할 수 있습니다.","결제 상태가 확정되지 않은 요청은 동일한 결제 ID로 재확인하고, 결제 실패가 확인된 경우에만 새로운 결제 ID로 최대 3회 승인 요청합니다. 최종 실패\xb7취소\xb7부분취소 또는 금액 불일치는 담당자 수동 검토로 전환합니다.","자동결제를 해지하면 아직 결제가 시작되지 않은 청구서의 자동수납이 중단됩니다. 이미 승인된 결제의 취소\xb7환불은 별도 확인 절차가 필요합니다.","카드번호\xb7CVC\xb7유효기간은 카인드닥터 서버를 통과하거나 저장되지 않습니다. PortOne이 발급한 빌링키만 별도 암호화해 보관하고, 해지 시 PG 폐기를 요청합니다. 카드사\xb7브랜드\xb7끝 4자리와 동의\xb7결제 감사기록은 관련 법령 및 회사 보존정책에 따라 보관됩니다."]);
1let c=Object.freeze(["자동수납 대상은 병원이 승인해 확정된 카인드닥터 예약 플랫폼 이용료와 선택한 월 구독료입니다. 문의 접수, 거절, 승인 전 만료, 샌드박스와 내부 테스트는 과금하지 않습니다.","청구 공급가액은 베이직 코어 0원 또는 예약 전환 관리 구독 300,000원, 선택한 다국어 옵션, 신규 승인 예약 건당 2,000원, 재예약 건당 500원과 승인된 취소\xb7오류 조정을 합산하며 부가가치세 10%가 별도 적용됩니다.","월별 이용명세는 한국시간 기준 익월 1일부터 3일까지 검토할 수 있고, 4일에 확정되며 5일에 등록 카드로 자동결제가 진행됩니다. 이미 확정된 원장은 삭제하지 않고 승인된 취소\xb7오류는 별도 크레딧으로 기록합니다.","최초 카드 결제가 실패하면 1일, 3일, 7일 뒤에 재시도합니다. 상태가 불명확한 요청은 같은 결제 ID로 재확인하며 최종 실패\xb7취소\xb7금액 불일치는 담당자 확인으로 전환합니다.","실제 환자 예약 승인을 위해서는 Hospital Owner의 버전 표시 이용약관 동의와 등록 카드가 모두 필요합니다. 카드 교체 또는 정기결제 철회는 아직 수납이 시작되지 않은 미래 이용명세에 적용되며, 이미 발생한 이용료와 법적 보존 기록은 삭제되지 않습니다.","카드번호\xb7CVC\xb7유효기간은 카인드닥터 서버를 통과하거나 저장되지 않습니다. PortOne이 발급한 빌링키만 별도 암호화해 보관하고, 카드사\xb7브랜드\xb7끝 4자리와 동의\xb7결제 감사기록은 관련 법령 및 회사 보존정책에 따라 보관합니다."]);i(34067);let m=n.Yj().trim().min(1).max(120).regex(/^[A-Za-z0-9._-]+$/),p=n.Yj().trim().min(8).max(160),f=n.k5(["email","sms","kakao","push"]),h="hospital-self-service-v3-2026-08-26",_=n.Ik({hospitalTerms:m,hospitalPricing:m,hospitalDpa:m,hospitalDataPolicy:m}).strict();n.Ik({hospitalId:n.uR(),bundleVersion:n.eu(h),documentVersions:_,stepUpToken:n.Yj().regex(/^[A-Za-z0-9_-]{40,128}$/).optional(),idempotencyKey:p}).strict(),n.Ik({hospitalId:n.uR(),consentKind:n.k5(["identifiable_marketing","hospital_user_marketing"]),documentVersion:m,granted:n.zM(),choices:n.Ik({customerReference:n.zM().optional(),testimonial:n.zM().optional(),caseStudy:n.zM().optional(),paidAdvertising:n.zM().optional(),channels:n.YO(f).max(4).optional()}).strict(),idempotencyKey:p}).strict().superRefine((e,t)=>{if(e.granted){if("identifiable_marketing"===e.consentKind){Object.entries(e.choices).some(([e,t])=>"channels"!==e&&!0===t)||t.addIssue({code:"custom",path:["choices"],message:"identifiable_marketing_requires_one_selection"});return}e.choices.channels?.length||t.addIssue({code:"custom",path:["choices","channels"],message:"hospital_user_marketing_requires_channel"})}}),n.Ik({scope:n.k5(["platform","hospital"]),hospitalId:n.uR().nullable().default(null),documentVersion:m,channels:n.YO(f).min(1).max(4).refine(e=>new Set(e).size===e.length,"channels_must_be_unique"),granted:n.zM(),idempotencyKey:p}).strict().superRefine((e,t)=>{"hospital"!==e.scope||e.hospitalId||t.addIssue({code:"custom",path:["hospitalId"],message:"hospital_scope_requires_hospital"}),"platform"===e.scope&&e.hospitalId&&t.addIssue({code:"custom",path:["hospitalId"],message:"platform_scope_must_not_have_hospital"})}),n.Ik({hospitalId:n.uR(),bundleVersion:m,acceptedAt:a.w$({offset:!0}),subscriptionVersion:n.ai().int().positive()}).strict(),n.Ik({hospitalId:n.uR(),expectedVersion:n.ai().int().positive(),idempotencyKey:p}).strict(),n.Ik({enabled:n.zM(),idempotencyKey:p}).strict();let v=n.Ik({bundleVersion:n.eu(h),ready:n.zM(),acceptedAt:a.w$({offset:!0}).nullable(),acceptedBundleVersion:m.nullable(),documents:n.Ik({hospital_terms:n.Ik({version:m,body:n.Yj().min(1),sha256:n.Yj().regex(/^[0-9a-f]{64}$/),effectiveFrom:n.Yj().min(1)}).optional(),hospital_pricing:n.Ik({version:m,body:n.Yj().min(1),sha256:n.Yj().regex(/^[0-9a-f]{64}$/),effectiveFrom:n.Yj().min(1)}).optional(),hospital_dpa:n.Ik({version:m,body:n.Yj().min(1),sha256:n.Yj().regex(/^[0-9a-f]{64}$/),effectiveFrom:n.Yj().min(1)}).optional(),hospital_data_policy:n.Ik({version:m,body:n.Yj().min(1),sha256:n.Yj().regex(/^[0-9a-f]{64}$/),effectiveFrom:n.Yj().min(1)}).optional()}).strict()}).strict();i(49304).hp;let g=n.Yj().trim().min(8).max(160);n.Ik({hospitalId:n.uR(),invoiceId:n.uR(),chargeEventId:n.uR(),reason:n.k5(["duplicate_charge","patient_cancelled","hospital_cancelled","internal_test","system_error","fraud_or_spam","other"]),evidenceReference:n.Yj().regex(/^[A-Za-z0-9._:-]{1,160}$/).nullable().default(null),idempotencyKey:g}
1).strict(),n.Ik({disputeId:n.uR(),decision:n.k5(["approved","rejected"]),resolutionCode:n.k5(["evidence_verified","duplicate_confirmed","system_error_confirmed","insufficient_evidence","booking_evidence_conflicts","policy_exclusion_not_met"]),idempotencyKey:g}).strict();let b=n.Yj().regex(/^\d{4}-(0[1-9]|1[0-2])$/),x=n.Ik({key:n.Yj().trim().min(1).max(160),count:n.ai().int().nonnegative()}),y=n.Ik({date:n.Yj().regex(/^\d{4}-\d{2}-\d{2}$/),validHandoffs:n.ai().int().nonnegative(),bookedInquiries:n.ai().int().nonnegative()}),j=n.Ik({hospitalId:n.Yj().trim().min(1).max(160),period:b,generatedAt:a.w$({offset:!0}),pricing:n.Ik({policyCode:n.eu("handoff_krw_2000_v1"),unitPriceKrw:n.eu(2e3),lifetimeFreeUnits:n.eu(30),vatExclusive:n.eu(!0)}),summary:n.Ik({validHandoffs:n.ai().int().nonnegative(),uniqueInquiries:n.ai().int().nonnegative(),freeUnits:n.ai().int().nonnegative(),billableUnits:n.ai().int().nonnegative(),excludedUnits:n.ai().int().nonnegative(),hospitalOpenedInquiries:n.ai().int().nonnegative(),inProgressInquiries:n.ai().int().nonnegative(),bookedInquiries:n.ai().int().nonnegative(),reservationRequests:n.ai().int().nonnegative(),usageSubtotalKrw:n.ai().int().nonnegative(),medianFirstOpenMinutes:n.ai().nonnegative().nullable()}),sourceDistribution:n.YO(x).max(20),topicDistribution:n.YO(x).max(20),dailyTrend:n.YO(y).max(31)});function w(e){return e.summary.billableUnits}n.Ik({current:j,previous:j}),n.k5(["legacy_tiered","usage_handoff_v1"]);let k="handoff_krw_2000_v1",I="valid_submitted_handoff",Y="usage-handoff-v1-2026-07-28",K="usage-autocollection-v1-2026-07-29",$="booking-autocollection-v2-2026-08-25",A="booking-autocollection-v3-2026-08-26",R=Object.freeze({pricingModel:"usage_handoff_v1",policyCode:k,unitType:I,currency:"KRW",unitPriceKrw:2e3,vatPolicy:"exclusive_10_percent",lifetimeFreeUnits:30});n.Ik({code:n.eu(k),unitType:n.eu(I),currency:n.eu("KRW"),unitPriceKrw:n.ai().int().positive(),vatPolicy:n.eu("exclusive_10_percent"),lifetimeFreeUnits:n.ai().int().nonnegative(),policyVersion:n.ai().int().positive(),effectiveFrom:a.w$({offset:!0}),effectiveUntil:a.w$({offset:!0}).nullable()});let P=["hospital_not_selected","not_meaningful","missing_approved_summary","missing_contact_consent","delivery_failed","internal_test","spam","duplicate_seven_day_window","blocked_before_submission","payment_method_required"];n.Ik({hospitalId:n.Yj().trim().min(1).max(160),inquiryId:n.Yj().trim().min(1).max(160),submittedVersion:n.ai().int().positive(),selectedHospital:n.zM(),meaningfulInquiryOrReservationIntent:n.zM(),approvedKnowledgeSummaryCreated:n.zM(),contactChannelAndConsentPresent:n.zM(),hospitalInboxDeliveryAccepted:n.zM(),internalTest:n.zM(),spam:n.zM(),duplicateWithinSevenDays:n.zM(),blockedBeforeSubmission:n.zM()});let C=["free","billable","excluded"];n.Ik({hospitalId:n.Yj().trim().min(1).max(160),inquiryId:n.Yj().trim().min(1).max(160),eventKey:n.Yj().trim().min(1).max(240),submittedVersion:n.ai().int().positive(),occurredAt:a.w$({offset:!0}),billingPeriodKst:n.Yj().regex(/^\d{4}-(0[1-9]|1[0-2])$/),validationVersion:n.Yj().trim().min(1).max(120),identityHmacVersion:n.Yj().trim().min(1).max(120),topicKey:n.Yj().trim().min(1).max(160),classification:n.k5(C),exclusionReason:n.k5(P).nullable(),unitPriceKrw:n.ai().int().nonnegative(),freeUnitApplied:n.zM()}).superRefine((e,t)=>{if("excluded"===e.classification){e.exclusionReason||t.addIssue({code:"custom",message:"excluded_handoff_requires_reason",path:["exclusionReason"]}),(e.freeUnitApplied||0!==e.unitPriceKrw)&&t.addIssue({code:"custom",message:"excluded_handoff_must_not_charge",path:["unitPriceKrw"]});return}e.exclusionReason&&t.addIssue({code:"custom",message:"included_handoff_must_not_have_exclusion_reason",path:["exclusionReason"]}),e.unitPriceKrw<=0&&t.addIssue({code:"custom",message:"included_handoff_requires_policy_unit_price",path:["unitPriceKrw"]}),"free"!==e.classification||e.freeUnitApplied||t.addIssue({code:"custom",message:"free_handoff_requires_free_unit",path:["freeUnitApplied"]}),"billable"===e.classification&&e.freeUnitApplied&&t.addIssue({code:"custom",message:"billable_handoff_cannot_apply_free_unit",path:["freeUnitApplied"]})}),n.Ik({hospitalId:n.Yj().trim().min(1).max(160),termsVersion:n.eu(Y),monthlyCapKrw:n.ai().int().nonnegative().nullable(),idempotencyKey:n.Yj().trim().min(8).max(160)}).superRefine((e,t)=>
1{var i,n;null===e.monthlyCapKrw||(i=e.monthlyCapKrw,n=R.unitPriceKrw,Number.isSafeInteger(i)&&Number.isSafeInteger(n)&&i>=0&&n>0&&i%n==0)||t.addIssue({code:"custom",message:"usage_monthly_cap_invalid",path:["monthlyCapKrw"]})}),n.Ik({hospital_id:n.Yj().trim().min(1),policy_code:n.eu(k),status:n.k5(["active","paused","terminated"]),terms_version:n.eu(Y),monthly_cap_krw:n.ai().int().nonnegative().nullable(),cap_behavior:n.eu("fallback_without_handoff"),accepted_by:n.uR(),accepted_at:a.w$({offset:!0}),updated_at:a.w$({offset:!0})}),n.Ik({hospitalId:n.Yj().trim().min(1),billingPeriodKst:n.Yj().regex(/^\d{4}-(0[1-9]|1[0-2])$/),policyCode:n.eu(k),pricingModel:n.eu("usage_handoff_v1"),unitPriceKrw:n.eu(2e3),vatRate:n.eu(.1),lifetimeFreeUnits:n.eu(30),lifetimeFreeUnitsUsed:n.ai().int().nonnegative(),periodFreeUnits:n.ai().int().nonnegative(),periodBillableUnits:n.ai().int().nonnegative(),periodExcludedUnits:n.ai().int().nonnegative(),usageSubtotalKrw:n.ai().int().nonnegative(),usageAdjustmentKrw:n.ai().int().max(0).default(0),setupAssistanceSubtotalKrw:n.ai().int().nonnegative(),subtotalKrw:n.ai().int().nonnegative(),vatKrw:n.ai().int().nonnegative(),totalKrw:n.ai().int().nonnegative(),monthlyCapKrw:n.ai().int().nonnegative().nullable(),remainingCapKrw:n.ai().int().nonnegative().nullable()});let z=["duplicate_charge","internal_test","spam","delivery_failed","incorrect_classification","other"],N=["submitted","approved","rejected"];n.Ik({id:n.uR(),occurredAt:a.w$({offset:!0}),topicKey:n.Yj().trim().min(1).max(160),classification:n.k5(C),exclusionReason:n.k5(P).nullable(),chargeAmountKrw:n.ai().int().nonnegative(),disputeStatus:n.k5(N).nullable()}),n.Ik({id:n.uR(),hospitalId:n.Yj().trim().min(1),billingPeriodKst:n.Yj().regex(/^\d{4}-(0[1-9]|1[0-2])$/),invoiceId:n.uR(),status:n.k5(["review_open","under_review","finalized"]),freeUnits:n.ai().int().nonnegative(),billableUnits:n.ai().int().nonnegative(),excludedUnits:n.ai().int().nonnegative(),grossUsageAmountKrw:n.ai().int().nonnegative(),adjustmentAmountKrw:n.ai().int().max(0),setupAssistanceAmountKrw:n.ai().int().nonnegative(),subtotalKrw:n.ai().int().nonnegative(),vatKrw:n.ai().int().nonnegative(),totalKrw:n.ai().int().nonnegative(),frozenAt:a.w$({offset:!0}),disputeUntil:a.w$({offset:!0}),finalizedAt:a.w$({offset:!0}).nullable(),collectionStatus:n.k5(["not_configured","pending","processing","retry_scheduled","paid","not_required","manual_review"]).default("not_configured"),collectionAttemptCount:n.ai().int().nonnegative().default(0),collectionNextRetryAt:a.w$({offset:!0}).nullable().default(null),collectionLastAttemptAt:a.w$({offset:!0}).nullable().default(null),collectionPaidAt:a.w$({offset:!0}).nullable().default(null),collectionProviderStatus:n.Yj().trim().min(1).max(80).nullable().default(null),collectionProviderStatusChangedAt:a.w$({offset:!0}).nullable().default(null)}),n.Ik({id:n.uR(),statementId:n.uR(),hospitalId:n.Yj().trim().min(1),billingPeriodKst:n.Yj().regex(/^\d{4}-(0[1-9]|1[0-2])$/),billableHandoffEventId:n.uR(),reason:n.k5(z),details:n.Yj().trim().min(4).max(1200),status:n.k5(N),submittedAt:a.w$({offset:!0}),resolutionNote:n.Yj().trim().min(4).max(1200).nullable(),resolvedAt:a.w$({offset:!0}).nullable()}),n.Ik({id:n.uR(),hospitalId:n.Yj().trim().min(1),provider:n.eu("portone"),providerMode:n.k5(["test","live"]),status:n.k5(["active","disabled","revoked"]),methodType:n.eu("CARD"),cardPublisher:n.Yj().trim().min(1).max(120).nullable(),cardBrand:n.Yj().trim().min(1).max(80).nullable(),cardLast4:n.Yj().regex(/^\d{4}$/).nullable(),autoCollectionEnabled:n.zM(),consentVersion:n.k5([K,$,A]),consentedAt:a.w$({offset:!0}),verifiedAt:a.w$({offset:!0}),disabledAt:a.w$({offset:!0}).nullable(),revokedAt:a.w$({offset:!0}).nullable()}),n.Ik({hospitalId:n.Yj().trim().min(1).max(160),issueId:n.Yj().regex(/^[0-9A-F]{32}$/),billingKey:n.Yj().trim().min(16).max(512),consentVersion:n.k5([K,$,A]),consentAccepted:n.eu(!0),idempotencyKey:n.Yj().trim().min(8).max(160)}).extend({consentVersion:n.eu(A)}),n.Ik({hospitalId:n.Yj().trim().min(1).max(160),idempotencyKey:n.Yj().trim().min(8).max(160)}),n.Ik({hospitalId:n.Yj().trim().min(1).max(160),methodId:n.uR(),idempotencyKey:n.Yj().trim().min(8).max(160)}),n.Ik({id:n.uR(),statementId:n.uR(),hospitalId:n.Yj().trim().min(1),invoiceId:n.uR(),paymentMethodId:n.uR(),attemptNumber:n.ai().int().min(1).max(4),providerPaymentId:n.Yj().regex(/^[0-9A-F]{32}$/),amountKrw:n.ai().int().positive(),status:n.k5(["processing","pending","succeeded","failed","manual_review"]),providerStatus:n.Yj().trim().min(1).max(80).nullable(),errorCode:n.Yj().trim().min(1).max(160).nullable(),attemptedAt:a.w$({offset:!0}),completedAt:a.w$({offset:!0}).nullable()}),n.Ik({hospitalId:n.Yj().trim().min(1).max(160),billingPeriodKst:n.Yj().regex(/^\d{4}-(0[1-9]|1[0-2])$/),billableHandoffEventId:n.uR(),reason:n.k5(z),details:n.Yj().trim().min(4).max(1200),idempotencyKey:n.Yj().trim().min(8).max(160)}),n.Ik({decision:n.k5(["approved","rejected"]),resolutionNote:n.Yj().trim().min(4).max(1200),idempotencyKey:n.Yj().trim().min(8).max(160)}),n.Ik({id:n.uR(),billingPeriodKst:n.Yj().regex(/^\d{4}-(0[1-9]|1[0-2])$/),thresholdPercent:n.KC([n.eu(80),n.eu(100)]),chargedAmountKrw:n.ai().int().nonnegative(),monthlyCapKrw:n.ai().int().positive(),createdAt:a.w$({offset:!0})}),n.Ik({id:n.uR(),thresholdUnits:n.KC([n.eu(20),n.eu(25),n.eu(30)]),lifetimeValidUnits:n.ai().int().nonnegative(),valueReportPeriodKst:n.Yj().regex(/^\d{4}-(0[1-9]|1[0-2])$/),createdAt:a.w$({offset:!0})}).refine(e=>e.lifetimeValidUnits>=e.thresholdUnits,{message:"usage_trial_milestone_units_invalid"});let U=["requested","scheduled","completed","cancelled"];n.Ik({id:n.uR(),hospitalId:n.Yj().trim().min(1),hospitalName:n.Yj().trim().min(1).optional(),status:n.k5(U),amountKrw:n.eu(5e5),vatBasisPoints:n.eu(1e3),requestedBy:n.uR(),requestedAt:a.w$({offset:!0}),completedAt:a.w$({offset:!0}).nullable(),cancelledAt:a.w$({offset:!0}).nullable(),billedPeriodKst:n.Yj().regex(/^\d{4}-(0[1-9]|1[0-2])$/).nullable(),processedBy:n.uR().nullable(),processingNote:n.Yj().trim().min(4).max(1200).nullable()}),n.Ik({id:n.uR(),hospitalId:n.Yj().trim().min(1),hospitalName:n.Yj().trim().min(1).optional(),status:n.k5(U),amountKrw:n.eu(1e6),vatBasisPoints:n.eu(1e3),requestedBy:n.uR(),requestedAt:a.w$({offset:!0}),completedAt:a.w$({offset:!0}).nullable(),cancelledAt:a.w$({offset:!0}).nullable(),billedPeriodKst:n.Yj().regex(/^\d{4}-(0[1-9]|1[0-2])$/).nullable(),processedBy:n.uR().nullable(),processingNote:n.Yj().trim().min(4).max(1200).nullable()}),n.Ik({hospitalId:n.Yj().trim().min(1).max(160),idempotencyKey:n.Yj().trim().min(8).max(160)}),n.Ik({nextStatus:n.k5(["completed","cancelled"]),note:n.Yj().trim().min(4).max(1200),idempotencyKey:n.Yj().trim().min(8).max(160)})},34067:(e,t,i)=>{function n(e){if(Number.isNaN(e.getTime()))throw Error("instant_invalid");
1let t=new Intl.DateTimeFormat("en-CA",{timeZone:"Asia/Seoul",year:"numeric",month:"2-digit",day:"2-digit"}).formatToParts(e),i=t.find(e=>"year"===e.type)?.value,n=t.find(e=>"month"===e.type)?.value,a=t.find(e=>"day"===e.type)?.value;if(!i||!n||!a)throw Error("kst_date_unavailable");return`${i}-${n}-${a}`}i.d(t,{nV:()=>s,pq:()=>n}),Object.freeze({previewDaysKst:[1,2,3],finalizeDayKst:4,issueAndFirstCardAttemptDayKst:5,cardRetryOffsetsDays:[1,3,7],bankTransferDueDayKst:10,cureNoticeAfterPastDueDays:30,restrictionCandidateAfterPastDueDays:37,restrictionRequiresHqApproval:!0}),Object.freeze({restricts:["new_billable_booking_approval","conversion_crm","multilingual_add_on"],preserves:["existing_booking_read","patient_support","payment_read","refund","reconciliation"]});let a=["past_due","disputed","manual_review"];function s(e,t){return a.includes(e.status)||function(e,t){if("payment_pending"!==e.status)return!1;let i="string"==typeof e.dueAt?e.dueAt.slice(0,10):"";return/^\d{4}-\d{2}-\d{2}$/.test(i)&&i<t}(e,t)}},73988:(e,t,i)=>{i.d(t,{p:()=>m});var n=i(95155),a=i(12115),s=i(44478),o=i(35756),l=i(92289),r=i(6296),d=i(52504),u=i(59611),c=i(45249);function m({open:e,onOpenChange:t,hospitalId:i,hospitalName:p,onApproved:f,purpose:h}){let[_,v]=(0,a.useState)("password"),[g,b]=(0,a.useState)(""),[x,y]=(0,a.useState)(""),[j,w]=(0,a.useState)(null),[k,I]=(0,a.useState)(null),[Y,K]=(0,a.useState)(!1),[$,A]=(0,a.useState)(null),[R,P]=(0,a.useState)(!1),[C,z]=(0,a.useState)(null);(0,a.useEffect)(()=>{if(!e){v("password"),b(""),y(""),w(null),I(null),A(null),K(!1),P(!1),z(null);return}let t=!1;return u.supabase.auth.getUserIdentities().then(({data:e})=>{t||z((e?.identities??[]).map(e=>e.provider))}).catch(()=>{t||z([])}),()=>{t=!0}},[e]);let N=null===C||C.includes("email"),U=N?_:"email",S=async e=>{let t=await (0,d.v$)("/api/admin/hospital-activation/step-up",{method:"POST",body:JSON.stringify({hospitalId:i,...e})}),n=await t.json().catch(()=>null);return t.ok&&n?.success?n:(A(n?.code==="hospital_owner_approval_required"?"병원 소유자 계정으로 로그인해야 확인할 수 있습니다.":n?.code==="owner_step_up_invalid_credentials"?"현재 비밀번호가 일치하지 않습니다.":n?.code==="owner_step_up_invalid_code"?"인증 코드가 일치하지 않거나 만료되었습니다. 새 코드를 받아 주세요.":n?.code==="owner_step_up_rate_limited"?"확인 시도가 많습니다. 15분 뒤 다시 시도해 주세요.":n?.message||"소유자 확인을 완료하지 못했습니다."),null)},q=async e=>{if(e.preventDefault(),!Y){if(!R)return void A("위 안내에 동의하는 체크를 먼저 해주세요.");if("password"===U&&!g)return void A("비밀번호를 입력해 주세요.");
1if("email"===U&&j&&!/^\d{6}$/.test(x))return void A("6자리 인증 코드를 입력해 주세요.");K(!0),A(null);try{if("email"===U&&!j){let e=await S({action:"request_email_code"}),t=e?.data?.challengeToken;t&&(w(t),I(e?.data?.maskedEmail??null));return}let e=await S("password"===U?{action:"password",password:g}:{action:"verify_email_code",challengeToken:j,code:x}),i=e?.data?.stepUpToken;if(!i)return;await f(i)?t(!1):A("확인 정보가 만료되었거나 조건이 변경되었습니다. 다시 확인해 주세요.")}catch{A("네트워크 연결을 확인한 뒤 다시 시도해 주세요.")}finally{K(!1)}}},O=R&&("password"===U?!!g:!j||/^\d{6}$/.test(x));return(0,n.jsx)(c.lG,{open:e,onOpenChange:e=>!Y&&t(e),children:(0,n.jsxs)(c.Cf,{className:"max-w-md",children:[(0,n.jsxs)(c.c7,{children:[(0,n.jsxs)(c.L3,{className:"flex items-center gap-2 text-base",children:[(0,n.jsx)(s.A,{className:"h-5 w-5 text-teal-700","aria-hidden":"true"}),"self_service_terms"===h?"서비스 이용약관 최종 확인":"이전 KAI 버전 복원"]}),(0,n.jsx)(c.rr,{className:"text-sm leading-6",children:"self_service_terms"===h?`${p||"이 병원"}의 서비스 이용약관과 카드 자동결제 조건을 병원 대표 관리자 권한으로 확인합니다.`:`${p||"이 병원"}의 직전 검증 버전으로 즉시 복원합니다.`})]}),(0,n.jsxs)("form",{className:"space-y-4",onSubmit:q,children:[N&&(0,n.jsxs)("div",{className:"grid grid-cols-2 border border-slate-200 p-1","aria-label":"소유자 확인 방법",children:[(0,n.jsxs)(c.$n,{type:"button",size:"sm",variant:"password"===U?"default":"ghost",onClick:()=>v("password"),disabled:Y,children:[(0,n.jsx)(o.A,{className:"mr-2 h-4 w-4","aria-hidden":"true"}),"비밀번호"]}),(0,n.jsxs)(c.$n,{type:"button",size:"sm",variant:"email"===U?"default":"ghost",onClick:()=>v("email"),disabled:Y,children:[(0,n.jsx)(l.A,{className:"mr-2 h-4 w-4","aria-hidden":"true"}),"이메일 코드"]})]}),"password"===U?(0,n.jsxs)("div",{className:"space-y-2",children:[(0,n.jsx)(c.JU,{htmlFor:"activation-owner-password",children:"현재 비밀번호"}),(0,n.jsx)(c.pd,{id:"activation-owner-password",type:"password",autoComplete:"current-password",value:g,onChange:e=>b(e.target.value),maxLength:128,disabled:Y,autoFocus:!0})]}):(0,n.jsxs)("div",{className:"space-y-2",children:[(0,n.jsx)(c.JU,{htmlFor:"activation-owner-email-code",children:"업무 이메일 인증 코드"}),j?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(c.pd,{id:"activation-owner-email-code",inputMode:"numeric",autoComplete:"one-time-code",value:x,onChange:e=>y(e.target.value.replace(/\D/g,"").slice(0,6)),placeholder:"6자리 코드",disabled:Y,autoFocus:!0}),(0,n.jsxs)("p",{className:"text-xs text-slate-500",children:[k||"등록된 업무 이메일","로 보낸 코드는 5분 동안 한 번만 사용할 수 있습니다."]})]}):(0,n.jsx)("p",{className:"text-sm leading-6 text-slate-600",children:"Google로 가입했거나 비밀번호가 없는 경우 등록된 업무 이메일로 확인할 수 있습니다."})]}),(0,n.jsxs)("label",{className:"flex cursor-pointer items-start gap-3 border border-slate-200 bg-slate-50 p-3 text-sm leading-5 text-slate-700",children:[(0,n.jsx)(c.Sc,{checked:R,onCheckedChange:e=>P(!0===e),disabled:Y,className:"mt-0.5"}),(0,n.jsx)("span",{children:"self_service_terms"===h?"병원 서비스 이용약관, 가격\xb7과금 및 카드 자동결제 정책, 개인정보 처리위탁 부속서와 데이터\xb7콘텐츠 활용정책을 확인했습니다.":"현재 활성 버전을 직전 검증 버전으로 복원합니다. 이후 새 변경은 다시 품질검사를 거칩니다."})]}),(0,n.jsx)("p",{className:"text-xs leading-5 text-slate-500",children:"비밀번호와 인증 코드는 저장되지 않습니다. 확인 결과는 5분 동안 한 번만 사용할 수 있으며 확인 이력은 변경할 수 없습니다."}),$&&(0,n.jsx)("p",{role:"alert",className:"border border-rose-200 bg-rose-50 px-3 py-2 text-sm text-rose-800",children:$}),(0,n.jsxs)("div",{className:"flex justify-end gap-2",children:[(0,n.jsx)(c.$n,{type:"button",variant:"outline",onClick:()=>t(!1),disabled:Y,children:"취소"}),(0,n.jsxs)(c.$n,{type:"submit",className:"bg-slate-950 text-white hover:bg-slate-800",disabled:!O||Y,children:[Y&&(0,n.jsx)(r.A,{className:"mr-2 h-4 w-4 animate-spin","aria-hidden":"true"}),"email"!==U||j?"self_service_terms"===h?"확인 후 동의":"확인 후 복원":"인증 코드 받기"]})]})]})]})})}}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.