{"version":3,"file":"static/chunks/2967-d728cab69e82a8d5.js","mappings":"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","sources":["webpack://_N_E/ignored|/codebuild/output/src595765437/src/bolta-app-v1/node_modules/object-inspect|./util.inspect","webpack://_N_E/./src/clients/apiClients.ts","webpack://_N_E/./src/clients/profiles/apis.ts","webpack://_N_E/./src/clients/useQueryEffect.ts","webpack://_N_E/./src/clients/profiles/hooks/useProfileQueryEffect.ts","webpack://_N_E/./src/clients/profiles/hooks/index.ts","webpack://_N_E/./src/clients/profiles/queries.ts","webpack://_N_E/./src/clients/profiles/select.ts","webpack://_N_E/./src/features/workspaces/hooks/useMatchedWorkspace.ts","webpack://_N_E/./src/features/workspaces/hooks/index.ts","webpack://_N_E/./src/features/workspaces/index.ts","webpack://_N_E/./src/hooks/useIsoMorphicEffect.ts","webpack://_N_E/./src/hooks/useLatestValue.ts","webpack://_N_E/./src/i18n/i18n.constants.ts","webpack://_N_E/./src/i18n/ko/ko.common.ts","webpack://_N_E/./src/i18n/ko/ko.settings.ts","webpack://_N_E/./src/i18n/ko/ko.purchase-invoices.ts","webpack://_N_E/./src/i18n/ko/ko.validations.ts","webpack://_N_E/./src/i18n/ko/ko.request-payment.ts","webpack://_N_E/./src/i18n/ko/ko.invoices.ts","webpack://_N_E/./src/i18n/ko/ko.developers.ts","webpack://_N_E/./src/i18n/ko/ko.invitations.ts","webpack://_N_E/./src/i18n/ko/ko.request-form.ts","webpack://_N_E/./src/i18n/ko/ko.invoices-payments.ts","webpack://_N_E/./src/i18n/ko/index.ts","webpack://_N_E/./src/i18n/createI18n.ts","webpack://_N_E/./src/i18n/index.ts","webpack://_N_E/./src/store/profiles/index.ts","webpack://_N_E/./src/store/profiles/store.ts","webpack://_N_E/./src/utils/format/dates/toDateFormat.ts","webpack://_N_E/./src/utils/format/dates/index.ts","webpack://_N_E/./src/utils/format/formatBusinessRegistrationNumber.ts","webpack://_N_E/./src/utils/format/formatCurrency.ts","webpack://_N_E/./src/utils/format/formatNumber.ts","webpack://_N_E/./src/utils/format/formatTaxRegistrationId.ts","webpack://_N_E/./src/utils/format/index.ts","webpack://_N_E/./src/utils/formats.ts"],"sourcesContent":["/* (ignored) */","import axios, { InternalAxiosRequestConfig } from \"axios\"\nimport qs from \"qs\"\n\nconst isServer = () => typeof window === \"undefined\"\n\nconst overwriteCookies = async (config: InternalAxiosRequestConfig) => {\n const { cookies } = await import(\"next/headers\")\n const existsCookies = cookies()\n .getAll()\n .map(cookie => `${cookie.name}=${cookie.value}`)\n .join(\";\")\n if (existsCookies) {\n config.headers.cookie = existsCookies\n }\n}\n\n/**\n * withCredentials 옵션이 없는 기본 apiClient\n * - Public API 호출에 사용합니다.\n * - 인증없이 사용이 가능한 API에 사용합니다.\n */\nconst apiPublicClient = axios.create({\n baseURL: process.env.NEXT_PUBLIC_API_URL,\n headers: {\n Accept: \"application/json\",\n },\n withCredentials: true,\n})\n\napiPublicClient.defaults.paramsSerializer = function (paramObj) {\n return qs.stringify(paramObj, {\n arrayFormat: \"repeat\",\n })\n}\n\n/**\n * withCredentials 옵션이 있는 apiClient\n * - Dashboard 내부에서 Profile/Workspace이 수반되는 경우에 사용합니다.\n */\nconst apiPrivateClient = axios.create({\n baseURL: process.env.NEXT_PUBLIC_API_URL,\n headers: {\n Accept: \"application/json\",\n },\n withCredentials: true,\n})\n\napiPrivateClient.defaults.paramsSerializer = function (paramObj) {\n return qs.stringify(paramObj, {\n arrayFormat: \"repeat\",\n })\n}\n\napiPrivateClient.interceptors.request.use(async config => {\n if (isServer()) {\n await overwriteCookies(config)\n }\n return config\n})\n\n/**\n * Open API 호출에 사용합니다.\n * - API Key를 Authorization 헤더에 담아 호출합니다.\n */\nconst apiOpenApiClient = axios.create({\n baseURL: process.env.NEXT_PUBLIC_OPEN_API_URL,\n headers: {\n Accept: \"application/json\",\n },\n})\n\napiOpenApiClient.defaults.paramsSerializer = function (paramObj) {\n return qs.stringify(paramObj, {\n arrayFormat: \"repeat\",\n })\n}\n\napiOpenApiClient.interceptors.request.use(async config => {\n return config\n})\n\napiOpenApiClient.defaults.paramsSerializer = function (paramObj) {\n return qs.stringify(paramObj, {\n arrayFormat: \"repeat\",\n })\n}\n\nexport { apiOpenApiClient, apiPrivateClient, apiPublicClient }\n","import { apiPrivateClient } from \"@/clients/apiClients\"\nimport { BaseResponse } from \"@/clients/types\"\nimport { Profile } from \"@/clients/bolta-apis\"\n\nexport type GetProfileV2Api = {\n Response: Profile.GetProfileV2.ResponseBody\n}\n\nexport async function getProfileV2Api() {\n const {\n data: { body },\n } = await apiPrivateClient>({\n method: \"GET\",\n url: \"/api/v2/profiles\",\n })\n return body\n}\n","import { QueryKey, useQuery, UseQueryOptions } from \"@tanstack/react-query\"\n\nimport { useLatestValue } from \"@/hooks/useLatestValue\"\nimport { useIsoMorphicEffect } from \"@/hooks/useIsoMorphicEffect\"\n\nimport { ApiErrorResponse } from \"./types\"\n\ntype UseQuerySuccessCallback = (data: TData) => void\ntype UseQueryErrorCallback = (error: TError) => void\ntype UseQuerySettledCallback = (\n data: TData | undefined,\n error: TError | null,\n) => void\n\nexport type UseQueryEffectCallbackOptions = {\n onSuccess?: UseQuerySuccessCallback\n onError?: UseQueryErrorCallback\n onSettled?: UseQuerySettledCallback\n}\n\nexport type UseQueryEffectOptions<\n TQueryFnData = unknown,\n TError = ApiErrorResponse,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n> = UseQueryOptions & {\n onSuccess?: UseQuerySuccessCallback\n onError?: UseQueryErrorCallback\n onSettled?: UseQuerySettledCallback\n}\n\nexport const useQueryEffect = <\n TQueryFnData = unknown,\n TError = ApiErrorResponse,\n TData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n>({\n onSuccess,\n onError,\n onSettled,\n ...options\n}: UseQueryEffectOptions) => {\n const latestOnSuccess = useLatestValue(onSuccess)\n const latestOnError = useLatestValue(onError)\n const latestOnSettled = useLatestValue(onSettled)\n\n const response = useQuery(options)\n const { data, isSuccess, error, isError } = response\n\n const isSettled = isSuccess || isError\n\n useIsoMorphicEffect(() => {\n if (isSuccess) {\n latestOnSuccess.current?.(data)\n }\n }, [data, isSuccess, latestOnSuccess])\n\n useIsoMorphicEffect(() => {\n if (isError) {\n latestOnError.current?.(error)\n }\n }, [error, isError, latestOnError])\n\n useIsoMorphicEffect(() => {\n if (isSettled) {\n latestOnSettled.current?.(data, error)\n }\n }, [data, error, isSettled, latestOnSettled])\n\n return response\n}\n","import * as React from \"react\"\nimport { isNil } from \"@fxts/core\"\n\nimport {\n useQueryEffect,\n UseQueryEffectCallbackOptions,\n} from \"@/clients/useQueryEffect\"\nimport { ProfileModel } from \"@/features/profiles\"\nimport { useProfileStore } from \"@/store/profiles\"\nimport { ApiErrorResponse } from \"@/clients/types\"\nimport { useMatchedWorkspace } from \"@/features/workspaces\"\n\nimport { profileQueries } from \"../queries\"\n\nexport function useProfileQueryEffect({\n onError,\n onSuccess,\n onSettled,\n}: UseQueryEffectCallbackOptions = {}) {\n const setProfile = useProfileStore(state => state.setProfile)\n const setWorkspaceGroup = useProfileStore(state => state.setWorkspaceGroup)\n const [status, setStatus] = React.useState(undefined)\n\n const { getMatchedWorkspaceGroup } = useMatchedWorkspace()\n\n const handleSuccess = React.useCallback(\n (profile: ProfileModel) => {\n setProfile(profile)\n const validWorkspaceGroup = getMatchedWorkspaceGroup(profile)\n if (validWorkspaceGroup) {\n setWorkspaceGroup(validWorkspaceGroup)\n }\n onSuccess?.(profile)\n setStatus(undefined)\n },\n [onSuccess, setProfile, setWorkspaceGroup, getMatchedWorkspaceGroup],\n )\n\n const handleError = React.useCallback(\n (e: ApiErrorResponse) => {\n setStatus(e.status)\n onError?.(e)\n },\n [onError],\n )\n\n const response = useQueryEffect({\n ...profileQueries.profile(),\n enabled: isNil(status),\n onError: handleError,\n onSuccess: handleSuccess,\n onSettled,\n })\n\n return response\n}\n","export * from \"./useProfileQueryEffect\"\n","import { queryOptions } from \"@tanstack/react-query\"\n\nimport { ApiErrorResponse } from \"@/clients/types\"\nimport { ProfileModel } from \"@/features/profiles\"\n\nimport { toSelectProfileModel } from \"./select\"\nimport { GetProfileV2Api, getProfileV2Api } from \"./apis\"\n\nexport const profileQueries = {\n _id: [\"profiles\"],\n profile: () => {\n return queryOptions({\n queryKey: [...profileQueries._id],\n queryFn: getProfileV2Api,\n select: toSelectProfileModel,\n })\n },\n}\n","import { map, pipe, toArray } from \"@fxts/core\"\n\nimport { ProfileModel } from \"@/features/profiles\"\nimport { formatBusinessRegistrationNumber, formatPhoneNumber } from \"@/utils/formats\"\nimport { formatTaxRegistrationId } from \"@/utils/format\"\nimport { AuthorizedFeatureRole } from \"@/features/auth\"\n\nimport { GetProfileV2Api } from \"./apis\"\n\nexport const toSelectProfileModel = (\n data: T,\n): ProfileModel => {\n return {\n ...data,\n workspaceGroups: pipe(\n data.workspaceGroups,\n map(workspaceGroup => ({\n ...workspaceGroup,\n collaborator: {\n ...workspaceGroup.collaborator,\n },\n authorizedFeatures: workspaceGroup.authorizedFeatures.map(\n feature => feature as AuthorizedFeatureRole,\n ),\n workspace: {\n ...workspaceGroup.workspace,\n businessRegistrationNumber: formatBusinessRegistrationNumber(\n workspaceGroup.workspace.businessRegistrationNumber,\n ),\n staff: {\n ...workspaceGroup.workspace.staff,\n telephone: formatPhoneNumber(\n workspaceGroup.workspace.staff.telephone || \"\",\n ),\n },\n taxRegistrationId: formatTaxRegistrationId(\n workspaceGroup.workspace.taxRegistrationId || \"\",\n ),\n },\n })),\n toArray,\n ),\n }\n}\n\nexport function selectCurrentWorkspaceInfo(\n profile: ProfileModel,\n workspaceId: number,\n) {\n return profile.workspaceGroups.find(workspaceGroup => {\n return workspaceGroup.workspace.id === workspaceId\n })\n}\n","import { find, pipe } from \"@fxts/core\"\nimport * as React from \"react\"\n\nimport { useProfileStore } from \"@/store/profiles\"\nimport { ProfileModel } from \"@/features/profiles\"\n\nexport const useMatchedWorkspace = () => {\n const workspaceId = useProfileStore(state => state.getCurrentWorkspaceId())\n\n const getMatchedWorkspaceGroup = React.useCallback(\n (profile: ProfileModel) => {\n const workspaceGroup = pipe(\n profile.workspaceGroups,\n find(workspaceGroup => workspaceGroup.workspace.id === workspaceId),\n )\n if (workspaceGroup) {\n return workspaceGroup\n }\n return profile.workspaceGroups[0]\n },\n [workspaceId],\n )\n\n return {\n getMatchedWorkspaceGroup,\n } as const\n}\n","export * from \"./useMatchedWorkspace\"\n","export * from \"./hooks\"\nexport * from \"./models\"\n","import * as React from \"react\"\n\nexport const useIsoMorphicEffect =\n typeof window === \"undefined\" ? React.useEffect : React.useLayoutEffect\n","\"use client\"\nimport { useRef } from \"react\"\n\nimport { useIsoMorphicEffect } from \"./useIsoMorphicEffect\"\n\nexport function useLatestValue(value: T) {\n const cache = useRef(value)\n\n useIsoMorphicEffect(() => {\n cache.current = value\n }, [value])\n\n return cache\n}\n","import { CurrencyFormatMap, LocaleType, NumberFormatMap } from \"./i18n.types\"\n\nexport const LOCALES: LocaleType[] = [\"ko\"]\n\nexport const DEFAULT_LOCALE: LocaleType = \"ko\"\n\nexport const CURRENCY_FORMATS: CurrencyFormatMap = {\n ko: {\n style: \"decimal\", //\"currency\",\n currency: \"KRW\",\n },\n}\n\nexport const NUMBER_FORMATS: NumberFormatMap = {\n ko: {\n style: \"decimal\",\n },\n}\n","/**\n * 자동정렬하면 언어별 라인수차이로 인해 가독성 및 놓치는 메세지를 인지하기 어렵습니다.\n * 따라서 prettier의 max-len을 무시하기 위해 주석을 추가합니다. (mex-len만 별도로 끄는게 불가능)\n */\n/* eslint-disable prettier/prettier */\nimport { MessageGroup } from \"../i18n.types\"\n\nconst messages: MessageGroup = {\n \"error.apis.unexpected\": \"알 수 없는 오류가 발생했습니다.\",\n \"error.apis.noPermission\": \"해당 기능을 이용 할 수 있는 권한이 없습니다.\",\n \"error.page.500\": \"예기치 못한 에러가 발생했습니다.\",\n \"error.invalidEmail\": \"올바르지 않은 이메일 형식입니다.\",\n\n \"unit.number\": \"{{value}}번\",\n \"unit.millions\": \"{{value}}만\",\n \"unit.billions\": \"{{value}}억\",\n \"currency.won\": \"{{value}}원\",\n \"currency.won.unit\": \"₩{{value}}\",\n \"currency.millions\": \"{{value}}만원\",\n \"currency.billions\": \"{{value}}억원\",\n \"dates.weekday.sunday\": \"일요일\",\n \"dates.weekday.monday\": \"월요일\",\n \"dates.weekday.tuesday\": \"화요일\",\n \"dates.weekday.wednesday\": \"수요일\",\n \"dates.weekday.thursday\": \"목요일\",\n \"dates.weekday.friday\": \"금요일\",\n \"dates.weekday.saturday\": \"토요일\",\n\n \"count.max\": \"최대 {{value}}개\",\n \"count.min\": \"최소 {{value}}개\",\n \"files.upload.error\": \"파일 업로드 중 오류가 발생했습니다.\",\n\n \"nav.issuance\": \"간편발행\",\n \"nav.invoices\": \"매출 세금계산서\",\n \"nav.customers\": \"고객 관리\",\n \"nav.requestForm\": \"발행정보 요청서\",\n \"nav.receivedInvoices\": \"매입 세금계산서\",\n \"nav.receivedInvoicesRequests\": \"세금계산서 역발행\",\n \"nav.transactions\": \"입출금 내역 관리\",\n \"nav.requestPayment\": \"지급요청 관리\",\n \"nav.requestPaymentRequests\": \"지급요청 목록\",\n \"nav.requestPaymentTemplates\": \"지급 양식 만들기\",\n \"nav.requestPaymentBudgets\": \"예산 관리\",\n \"nav.apiIntegration\": \"API 연동\",\n \"nav.developers\": \"개발자센터\",\n \"nav.developers.apiKeys\": \"API 키\",\n \"nav.developers.apiEventLogs\": \"이벤트 로그\",\n \"nav.developers.management\": \"개발자 관리\",\n\n \"certification.success.register\": \"인증서가 등록되었습니다.\",\n \"certification.success.join\": \"인증서를 통해 워크스페이스에 참여했습니다.\",\n \"certification.error.businessNumber\": \"다른 사업자등록번호로 발급된 인증서입니다.\\n다른 인증서로 등록해 주세요.\",\n \"certification.error.taxInvoice\": \"세금계산서 발행이 가능한 인증서로 등록해 주세요.\",\n \"certification.error.individual\": \"사업자용 인증서를 등록해 주세요.\",\n \"certification.error.unexpected\": \"예상하지 못한 오류가 발생했습니다. 지속적으로 문제 발생 시 문의해 주세요.\",\n \"auth.workspace.certification.needCertification\": \"인증 필요\",\n \"auth.workspace.certification.successCertification\": \"인증 완료\",\n \"auth.workspace.certification.representative\": \"대표자명\",\n \"auth.workspace.certification.businessNumber\": \"사업자등록번호\",\n \"auth.workspace.certification.button\": \"공동인증서 인증\",\n \"auth.workspace.certification.notice\": \"공동인증서 인증을 할 수 없는 팀원이라면,\\n워크스페이스에서 '초대권한'을 가진 팀원에게 초대를 요청해 주세요.\",\n \"workspace.certification.badge\": \"인증필요\",\n \"workspace.certification.representative\": \"대표자명\",\n \"workspace.certification.businessNumber\": \"사업자등록번호\",\n \"workspace.certification.button\": \"공동인증서 인증\",\n \"workspace.certification.notice\": \"공동인증서 인증을 할 수 없는 팀원이라면,\\n워크스페이스에서 '초대권한'을 가진 팀원에게 초대를 요청해 주세요.\",\n\n \"customer.form.title.create\": \"고객 정보 등록\",\n \"customer.form.title.edit\": \"고객 정보\",\n \"customer.form.subtitle\": \"사업자등록증 기준으로 정보를 입력해 주세요.\",\n \"customer.form.required\": \"필수 정보\",\n \"customer.form.organizationName\": \"회사명\",\n \"customer.form.representativeName\": \"대표자명\",\n \"customer.form.businessRegistrationNumber\": \"사업자등록번호\",\n \"customer.form.businessRegistrationNumber.placeholder\": \"000-00-00000\",\n \"customer.form.additional\": \"추가 정보\",\n \"customer.form.address\": \"사업장 주소\",\n \"customer.form.address.placeholder\": \"서울특별시 관악구 관악로\",\n \"customer.form.taxRegistrationId\": \"종사업장 번호\",\n \"customer.form.taxRegistrationId.tooltip\": \"사업자등록증에 기재되어 있는 경우에 입력해 주세요.\",\n \"customer.form.taxRegistrationId.placeholder\": \"4자리 숫자\",\n \"customer.form.businessType\": \"업태\",\n \"customer.form.businessType.placeholder\": \"정보통신업\",\n \"customer.form.businessItem\": \"종목\",\n \"customer.form.businessItem.placeholder\": \"소프트웨어 개발 및 공급업\",\n \"customer.form.memo\": \"고객 메모\",\n \"customer.form.memo.placeholder\": \"메모 내용을 입력해 주세요.\",\n \"customer.form.staff\": \"담당자 정보\",\n \"customer.form.staff.title\": \"담당자{{index}}\",\n \"customer.form.staff.delete\": \"삭제\",\n \"customer.form.staff.email\": \"이메일\",\n \"customer.form.staff.email.placeholder\": \"이메일\",\n \"customer.form.staff.name\": \"이름\",\n \"customer.form.staff.name.placeholder\": \"이름\",\n \"customer.form.staff.telephone\": \"휴대전화번호\",\n \"customer.form.staff.telephone.placeholder\": \"숫자만 입력\",\n \"customer.form.staff.add\": \"담당자 추가\",\n \"customer.form.cancel\": \"취소\",\n \"customer.form.submit.create\": \"등록\",\n \"customer.form.submit.edit\": \"저장\",\n \"customer.form.error.loading\": \"데이터 로딩 중 오류가 발생했습니다.\",\n \"customer.created.success\": \"고객 정보가 등록되었습니다\",\n \"customer.updated.success\": \"고객 정보가 저장되었습니다\",\n\n \"plan.usageBar.refresh.message\": \"이번 달 사용량이 모두 소진되었습니다.\\n{{date}}에 사용량이 초기화됩니다.\",\n \"plan.usageBar.title\": \"사용량\",\n \"plan.usageBar.unlimited\": \"무제한\",\n \"plan.usageBar.legend.issuanceCount\": \"발행\",\n \"plan.usageBar.legend.issuanceRequestCount\": \"요청\",\n \"plan.scheduleIssuance.description\": \"예약발행은 베이직 플랜부터 이용할 수 있습니다. 플랜을 업그레이드하세요.\",\n \"plan.recurringIssuance.description\": \"반복발행은 베이직 플랜부터 이용할 수 있습니다. 플랜을 업그레이드하세요.\",\n \"plan.salesInvoice.bulkIssuance.description\": \"대량 발행은 플러스 플랜부터 이용할 수 있습니다. 플랜을 업그레이드하세요.\",\n \"plan.purchaseInvoice.bulkIssuance.description\": \"역발행 대량 요청은 플러스 플랜부터 이용할 수 있습니다. 플랜을 업그레이드하세요.\",\n \"coming.soon\": \"준비 중\",\n \"coming.soon.apis.logs\": \"현재 API로그는 준비 중 입니다.\",\n}\n\nexport default messages\n","/**\n * 자동정렬하면 언어별 라인수차이로 인해 가독성 및 놓치는 메세지를 인지하기 어렵습니다.\n * 따라서 prettier의 max-len을 무시하기 위해 주석을 추가합니다. (mex-len만 별도로 끄는게 불가능)\n */\n/* eslint-disable prettier/prettier */\nimport { MessageGroup } from \"../i18n.types\"\n\nconst messages: MessageGroup = {\n \"settings.account.name\": \"계정 정보\",\n \"settings.workspace.name\": \"사업자 정보\",\n \"settings.certification.name\": \"공동인증서 관리\",\n \"settings.workspace.title\": \"사업자 정보\",\n \"settings.workspace.additionalInfo\": \"추가 정보\",\n \"settings.workspace.staffInfo.title\": \"담당자 정보\",\n \"settings.workspace.staffInfo.description\": \"세금계산서 발행 시 입력되는 담당자 정보입니다.\",\n \"settings.workspace.fields.organizationName.label\": \"회사명\",\n \"settings.workspace.fields.organizationName.placeholder\": \"회사명\",\n \"settings.workspace.fields.representativeName.label\": \"대표자명\",\n \"settings.workspace.fields.representativeName.placeholder\": \"대표자명\",\n \"settings.workspace.fields.businessRegistrationNumber.label\": \"사업자등록번호\",\n \"settings.workspace.fields.address.label\": \"사업장 주소\",\n \"settings.workspace.fields.address.placeholder\": \"서울특별시 관악구 관악로\",\n \"settings.workspace.fields.taxRegistrationId.label\": \"종사업장 번호\",\n \"settings.workspace.fields.taxRegistrationId.placeholder\": \"4자리 숫자\",\n \"settings.workspace.fields.taxRegistrationId.tooltip\": \"사업자등록증에 기재되어 있는 경우에 입력해 주세요.\",\n \"settings.workspace.fields.businessType.label\": \"업태\",\n \"settings.workspace.fields.businessType.placeholder\": \"정보통신업\",\n \"settings.workspace.fields.businessItem.label\": \"종목\",\n \"settings.workspace.fields.businessItem.placeholder\": \"소프트웨어 개발 및 공급업\",\n \"settings.workspace.fields.staff.email.label\": \"이메일\",\n \"settings.workspace.fields.staff.email.placeholder\": \"이메일\",\n \"settings.workspace.fields.staff.displayName.label\": \"이름\",\n \"settings.workspace.fields.staff.displayName.placeholder\": \"이름\",\n \"settings.workspace.fields.staff.telephone.label\": \"휴대전화번호\",\n \"settings.workspace.fields.staff.telephone.placeholder\": \"숫자만입력\",\n \"settings.workspace.submit\": \"저장\",\n \"settings.workspace.messages.success\": \"회사 정보가 저장되었습니다.\",\n \"settings.workspace.messages.noPermission\": \"수정 권한이 없습니다.\"\n}\n\nexport default messages\n","/**\n * 자동정렬하면 언어별 라인수차이로 인해 가독성 및 놓치는 메세지를 인지하기 어렵습니다.\n * 따라서 prettier의 max-len을 무시하기 위해 주석을 추가합니다. (mex-len만 별도로 끄는게 불가능)\n */\n/* eslint-disable prettier/prettier */\nimport { MessageGroup } from \"../i18n.types\"\n\nconst messages: MessageGroup = {\n \"purchase-tax-invoice.new.title\": \"발행 요청\",\n \"purchase-tax-invoice.new.steps.writing\": \"정보 작성\",\n \"purchase-tax-invoice.new.steps.preview\": \"정보 확인\",\n \"purchase-tax-invoice.new.steps.completed\": \"요청 완료\",\n \"purchase-tax-invoice.list.title\": \"세금계산서 역발행\",\n \"purchase-tax-invoice.list.description\": \"받아야 할 세금계산서를 직접 요청할 수 있습니다.\",\n \"purchase-tax-invoice.list.bulkButton\": \"대량 요청\",\n \"purchase-tax-invoice.list.newButton\": \"발행 요청\",\n \"purchase-tax-invoice.list.waiting.empty.message\": \"대기중인 요청이 없습니다.\",\n \"purchase-tax-invoice.list.completed.empty.message\": \"승인완료한 요청이 없습니다.\",\n \"purchase-tax-invoice.list.empty.button\": \"발행 요청\",\n \"purchase-tax-invoice.list.tabs.waiting\": \"대기중\",\n \"purchase-tax-invoice.list.tabs.approved\": \"승인완료\",\n \"purchase-tax-invoice.table.bulk.cancel\": \"발행취소\",\n \"purchase-tax-invoice.table.status\": \"상태\",\n \"purchase-tax-invoice.table.customerName\": \"거래처명\",\n \"purchase-tax-invoice.table.itemName\": \"품목명\",\n \"purchase-tax-invoice.table.assignees\": \"담당자 이메일\",\n \"purchase-tax-invoice.table.totalAmount\": \"발행금액(부가세포함)\",\n \"purchase-tax-invoice.table.createdAt\": \"생성일자\",\n \"purchase-tax-invoice.supplier.label\": \"공급자\",\n \"purchase-tax-invoice.receiver.label\": \"공급받는자\",\n \"purchase-tax-invoice.organizationName\": \"회사명\",\n \"purchase-tax-invoice.representative\": \"대표자명\",\n \"purchase-tax-invoice.businessRegistrationNumber\": \"사업자등록번호\",\n \"purchase-tax-invoice.title\": \"발행 정보\",\n \"purchase-tax-invoice.trade-date\": \"거래일자\",\n \"purchase-tax-invoice.description\": \"공급받는자가 발행 요청한 세금계산서 정보입니다.\",\n \"purchase-tax-invoice.status\": \"상태\",\n \"purchase-tax-invoice.status.noMember\": \"회원정보 없음\",\n \"purchase-tax-invoice.status.noCertification\": \"공동인증서가 등록되어 있지 않습니다.\",\n \"purchase-tax-invoice.confirm\": \"정보 확인\",\n \"purchase-tax-invoice.tooltip.authenticated\": \"인증서 로그인 없이, 바로 승인할 수 있어요!\",\n \"purchase-tax-invoice.tooltip.unauthenticated\": \"비회원은 승인 시, 공동인증서 인증이 필요해요.\",\n \"purchase-tax-invoice.unavailable.expiredDate\": \"{{date}}까지 승인되지 않으면 자동으로 요청이 취소돼요.\",\n \"purchase-tax-invoice.unavailable.chip\": \"안내\",\n \"purchase-tax-invoice.date\": \"거래일자\",\n \"purchase-tax-invoice.summary.approve\": \"승인\",\n \"purchase-tax-invoice.summary.businessRegistrationNumber\": \"사업자등록번호\",\n \"purchase-tax-invoice.summary.companyName\": \"회사명\",\n \"purchase-tax-invoice.summary.date\": \"거래일자(작성일자)\",\n \"purchase-tax-invoice.summary.reject\": \"거절\",\n \"purchase-tax-invoice.summary.representative\": \"대표자명\",\n \"purchase-tax-invoice.summary.taxAmount\": \"세액\",\n \"purchase-tax-invoice.summary.title\": \"발행정보 확인\",\n \"purchase-tax-invoice.summary.description\": \"정보 확인 후 승인버튼을 눌러 세금계산서를 발행해 주세요.\",\n \"purchase-tax-invoice.summary.totalAmount\": \"총액\",\n \"purchase-tax-invoice.summary.totalSupplyCost\": \"공급가액\",\n \"purchase-tax-invoice.summary.organizationName\": \"회사명\",\n \"purchase-tax-invoice.notification.title\": \"공동인증서 안내\",\n \"purchase-tax-invoice.notification.description\": \"비회원인 경우 승인 시 공동인증서가 필요해요.\\n볼타에 가입하신 후 공동인증서 등록해두면, 다음부터\\n인증서 로그인 없이 승인하실 수 있습니다.\",\n \"purchase-tax-invoice.form.writing.title\": \"정보 작성\",\n \"purchase-tax-invoice.form.writing.description\": \"거래정보와 추가 전달사항을 작성해 주세요.\",\n \"purchase-tax-invoice.form.customer.title\": \"요청하는 거래처가 어디인가요?\",\n \"purchase-tax-invoice.form.customer\": \"거래처\",\n \"purchase-tax-invoice.form.customer.placeholder\": \"기존 거래처를 선택하거나 신규로 추가해 주세요.\",\n \"purchase-tax-invoice.form.assignee\": \"담당자\",\n \"purchase-tax-invoice.form.assignee.placeholder\": \"담당자를 입력해 주세요.\",\n \"purchase-tax-invoice.form.customer.edit.message\": \"정보 수정이 필요한가요?\",\n \"purchase-tax-invoice.form.requestedAt.title\": \"거래한 날짜가 언제인가요?\",\n \"purchase-tax-invoice.form.requestedAt.date\": \"거래일자(작성일자)\",\n \"purchase-tax-invoice.form.requestedAt.placeholder\": \"YYYY.MM.DD\",\n \"purchase-tax-invoice.form.requestedAt.notice.label\": \"안내\",\n \"purchase-tax-invoice.form.requestedAt.notice.deadlineDate\": \"{{date}}까지 승인되지 않으면 자동으로 요청이 취소돼요\",\n \"purchase-tax-invoice.form.requestedAt.notice.deadlineDate.tooltip\": \"거래일자 기준 발행마감일이 지난 경우\\n요청이 자동으로 취소됩니다.\",\n \"purchase-tax-invoice.form.items.title\": \"공급받은 품목이 무엇인가요?\",\n \"purchase-tax-invoice.form.items.add\": \"추가\",\n \"purchase-tax-invoice.form.items.remove\": \"삭제\",\n \"purchase-tax-invoice.form.items.item\": \"품목\",\n \"purchase-tax-invoice.form.items.itemNumber\": \"품목 {{number}}\",\n \"purchase-tax-invoice.form.items.name\": \"품목명\",\n \"purchase-tax-invoice.form.items.name.placeholder\": \"품목명을 입력해 주세요.\",\n \"purchase-tax-invoice.form.items.purchasedAt\": \"공급일\",\n \"purchase-tax-invoice.form.items.unitPrice\": \"단가\",\n \"purchase-tax-invoice.form.items.quantity\": \"수량\",\n \"purchase-tax-invoice.form.items.tax\": \"세액\",\n \"purchase-tax-invoice.form.items.totalPrice\": \"합계금액\",\n \"purchase-tax-invoice.form.submit\": \"다음\",\n \"purchase-tax-invoice.form.additionalInfo.title\": \"추가로 전달할 사항이 있나요?\",\n \"purchase-tax-invoice.form.additionalInfo.memo\": \"전달 사항\",\n \"purchase-tax-invoice.form.additionalInfo.memo.placeholder\": \"전달할 사항을 작성해 주세요\",\n \"purchase-tax-invoice.form.additionalInfo.attachments\": \"증빙자료\",\n \"purchase-tax-invoice.form.additionalInfo.attachments.description\": \"(PNG,JPG,PDF파일 / 최대 3개)\",\n \"purchase-tax-invoice.form.preview.title\": \"정보 확인\",\n \"purchase-tax-invoice.form.preview.description\": \"요청 내용 확인 후 정보 확인을 눌러 발행 요청을 해주세요.\",\n \"purchase-tax-invoice.form.preview.items.etc\": \"외 {{count}}개\",\n \"purchase-tax-invoice.form.preview.subTitle\": \"요청 내용\",\n \"purchase-tax-invoice.form.preview.supplier.title\": \"공급자 정보\",\n \"purchase-tax-invoice.form.preview.supplier.organizationName\": \"상호명\",\n \"purchase-tax-invoice.form.preview.supplier.representativeName\": \"대표자명\",\n \"purchase-tax-invoice.form.preview.supplier.businessRegistrationNumber\": \"사업자등록번호\",\n \"purchase-tax-invoice.form.preview.supplier.assignee\": \"담당자\",\n \"purchase-tax-invoice.form.preview.supplier.address\": \"사업장 주소\",\n \"purchase-tax-invoice.form.preview.supplier.taxRegistrationId\": \"종사업장 번호\",\n \"purchase-tax-invoice.form.preview.supplier.businessType\": \"업태\",\n \"purchase-tax-invoice.form.preview.supplier.businessItem\": \"종목\",\n \"purchase-tax-invoice.form.preview.transaction.title\": \"거래 정보\",\n \"purchase-tax-invoice.form.preview.transaction.requestedAt\": \"거래일자(작성일자)\",\n \"purchase-tax-invoice.form.preview.transaction.items.title\": \"품목\",\n \"purchase-tax-invoice.form.preview.transaction.items.etc\": \"외 {{count}}개\",\n \"purchase-tax-invoice.form.preview.transaction.itemPrice\": \"공급가액\",\n \"purchase-tax-invoice.form.preview.transaction.tax\": \"세액\",\n \"purchase-tax-invoice.form.preview.transaction.totalPrice\": \"합계금액\",\n \"purchase-tax-invoice.form.preview.additional.title\": \"추가 정보\",\n \"purchase-tax-invoice.form.preview.additional.memo\": \"전달사항\",\n \"purchase-tax-invoice.form.preview.additional.attachments\": \"증빙자료\",\n \"purchase-tax-invoice.form.preview.preview.title\": \"세금계산서 미리보기\",\n \"purchase-tax-invoice.form.preview.preview.description\": \"발행 요청을 누르면 공급자에게 승인 요청 이메일이 발송됩니다.\",\n \"purchase-tax-invoice.form.preview.preview.cancel\": \"취소\",\n \"purchase-tax-invoice.form.preview.preview.submit\": \"발행 요청\",\n \"purchase-tax-invoice.form.preview.navigation.prev\": \"이전\",\n \"purchase-tax-invoice.form.preview.navigation.confirm\": \"정보 확인\",\n \"purchase-tax-invoice.completed.description\": \"{{email}} 이메일로\\n세금계산서 발행 요청 내용을 전달했습니다.\",\n \"purchase-tax-invoice.completed.title\": \"발행 요청 완료\",\n \"purchase-tax-invoice.completed.list\": \"요청 목록\",\n \"purchase-tax-invoice.completed.add\": \"추가 요청\",\n \"purchase-tax-invoice.detail.title\": \"요청 상세\",\n \"purchase-tax-invoice.detail.delete\": \"내역 삭제\",\n \"purchase-tax-invoice.detail.confirm.delete.title\": \"요청 삭제\",\n \"purchase-tax-invoice.detail.confirm.delete.success\": \"요청 삭제가 완료되었습니다.\",\n \"purchase-tax-invoice.detail.confirm.delete.description\": \"삭제된 요청은 더 이상 확인할 수 없습니다.\",\n \"purchase-tax-invoice.detail.confirm.delete.confirmText\": \"네, 삭제할게요\",\n \"purchase-tax-invoice.detail.confirm.cancel.success\": \"요청 취소가 완료되었습니다.\",\n \"purchase-tax-invoice.detail.cancel\": \"요청 취소\",\n \"purchase-tax-invoice.detail.confirm.cancel.title\": \"요청 취소\",\n \"purchase-tax-invoice.detail.confirm.cancel.description\": \"취소된 요청은 더 이상 확인할 수 없습니다.\",\n \"purchase-tax-invoice.detail.confirm.cancel.confirmText\": \"네, 취소할게요\",\n \"purchase-tax-invoice.detail.resendEmail\": \"이메일 재전송\",\n \"purchase-tax-invoice.detail.modal.resendEmail.title\": \"이메일 재전송\",\n \"purchase-tax-invoice.detail.modal.resendEmail.description\": \"세금계산서 정보를 재전송 할 수 있습니다.\",\n \"purchase-tax-invoice.detail.modal.resendEmail.input.label\": \"이메일\",\n \"purchase-tax-invoice.detail.modal.resendEmail.input.placeholder\": \"이메일을 입력해 주세요.\",\n \"purchase-tax-invoice.detail.modal.resendEmail.error.maxEmail\": \"최대 {{count}}명까지 입력 가능합니다.\",\n \"purchase-tax-invoice.detail.modal.resendEmail.button.cancel\": \"취소\",\n \"purchase-tax-invoice.detail.modal.resendEmail.button.confirm\": \"재전송\",\n \"purchase-tax-invoice.detail.confirm.resendEmail.confirm.success\": \"이메일 재전송이 완료되었습니다.\",\n \"purchase-tax-invoice.detail.resendEmail.error.emptyEmail\": \"이메일을 입력해 주세요.\",\n \"purchase-tax-invoice.detail.content.title\": \"작성 내용\",\n \"purchase-tax-invoice.detail.content.viewDetail\": \"상세보기\",\n \"purchase-tax-invoice.detail.content.organizationName\": \"상호명\",\n \"purchase-tax-invoice.detail.content.businessRegistrationNumber\": \"사업자등록번호\",\n \"purchase-tax-invoice.detail.content.assigneeEmail\": \"담당자 이메일\",\n \"purchase-tax-invoice.detail.content.requestedAt\": \"작성일자\",\n \"purchase-tax-invoice.detail.content.itemPrice\": \"공급가액\",\n \"purchase-tax-invoice.detail.content.tax\": \"세액\",\n \"purchase-tax-invoice.detail.content.totalPrice\": \"합계 금액\",\n \"purchase-tax-invoice.detail.content.receipt\": \"(영수)\",\n \"purchase-tax-invoice.detail.content.invoice\": \"(청구)\",\n \"purchase-tax-invoice.detail.additional.title\": \"추가 사항\",\n \"purchase-tax-invoice.detail.additional.memo\": \"전달사항\",\n \"purchase-tax-invoice.detail.additional.attachments\": \"증빙자료\",\n \"purchase-tax-invoice.detail.additional.memo.empty\": \"전달사항이 없습니다.\",\n \"purchase-tax-invoice.detail.additional.attachments.empty\": \"증빙자료가 없습니다.\",\n \"purchase-tax-invoice.detail.status.pending\": \"승인대기\",\n \"purchase-tax-invoice.detail.status.pendingMessage\": \"요청승인 대기 중\",\n \"purchase-tax-invoice.detail.status.unavailable.title\": \"유효하지 않은 요청입니다.\",\n \"purchase-tax-invoice.detail.status.unavailable.message\": \"접근할 수 없는 요청입니다.\\n요청이 삭제되었거나 만료되었습니다.\",\n \"purchase-tax-invoice.detail.notification.memo\": \"전달사항\",\n \"purchase-tax-invoice.detail.notification.attachments\": \"증빙자료\",\n \"purchase-tax-invoice.detail.items.title\": \"품목\",\n \"purchase-tax-invoice.detail.items.empty\": \"품목이 없습니다.\",\n \"purchase-tax-invoice.detail.items.name\": \"품목명\",\n \"purchase-tax-invoice.detail.items.quantity\": \"수량\",\n \"purchase-tax-invoice.detail.items.price\": \"단가\",\n \"purchase-tax-invoice.detail.items.supplyCost\": \"공급가액\",\n \"purchase-tax-invoice.detail.items.tax\": \"세액\",\n \"purchase-tax-invoice.detail.items.totalPrice\": \"합계\",\n \"purchase-tax-invoice.detail.preview.title\": \"세금계산서 미리보기\",\n \"purchase-tax-invoice.detail.preview.description\": \"발행 요청을 누르면 공급자에게 승인 요청 이메일이 발송됩니다.\",\n \"purchase-tax-invoice.detail.preview.cancel\": \"취소\",\n \"purchase-tax-invoice.detail.preview.submit\": \"발행 요청\",\n \"purchase-tax-invoice.summary.reject.success\": \"발행요청이 거절되었습니다.\",\n \"purchase-tax-invoice.approved.authenticated.title\": \"매출세금계산서 발행 완료\",\n \"purchase-tax-invoice.approved.authenticated.description\": \"세금계산서가 국세청에 전송되었습니다.\\n발행된 세금계산서는 발행목록에서 확인하실 수 있습니다.\",\n \"purchase-tax-invoice.approved.authenticated.button\": \"매출세금계산서 확인\",\n \"purchase-tax-invoice.approved.anonymous.title\": \"매출세금계산서 발행 완료\",\n \"purchase-tax-invoice.approved.anonymous.description\": \"세금계산서 발행이 완료되었습니다.\\n홈택스 전송까지 최대 15분까지 소요됩니다.\",\n \"purchase-tax-invoice.approved.anonymous.button\": \"회원가입하고 간편 승인하기\",\n \"purchase-tax-invoice.approved.anonymous.info\": \"볼타에 가입하고 인증서를 등록하시면,\\n다음부터는 인증서 없이 간편하게 승인할 수 있습니다.\",\n \"purchase-tax-invoice-request.status.REQUEST_APPROVED.badge\": \"요청승인\",\n \"purchase-tax-invoice-request.status.REQUEST_APPROVED.message\": \"세금계산서 정보는 에서 확인해 주세요.\",\n \"purchase-tax-invoice-request.status.REQUEST_PENDING.badge\": \"승인대기\",\n \"purchase-tax-invoice-request.status.REQUEST_PENDING.message\": \"요청승인 대기 중\",\n \"purchase-tax-invoice-request.status.REQUEST_REJECTED.badge\": \"요청거절\",\n \"purchase-tax-invoice-request.status.REQUEST_REJECTED.message\": \"공급자가 요청을 거절했습니다.\",\n \"purchase-tax-invoice-request.status.REQUEST_CANCELED.badge\": \"요청취소\",\n \"purchase-tax-invoice-request.status.REQUEST_CANCELED.message\": \"요청이 취소되었습니다.\",\n \"purchase-tax-invoice.not-registered.message\": \"공급자 워크스페이스에 속하지 않은 계정입니다. 계정을 확인해주세요.\",\n \"purchase-tax-invoice.not-registered.logout\": \"로그아웃\",\n \"purchase-tax-invoice.reject.message\": \"발행요청이 거절되었습니다.\",\n \"purchase-tax-invoice.list.fields.balance.short\": \"미지급 : {{amount}}원\",\n\n \"purchase-tax-invoice.bulk.title\": \"대량 요청\",\n \"purchase-tax-invoice.bulk.subtitle\": \"최대 500건의 세금계산서를 요청할 수 있습니다.\",\n \"purchase-tax-invoice.bulk.template.step1\": \"엑셀 양식 다운로드 후 항목에 맞게 양식을 작성해주세요.\",\n \"purchase-tax-invoice.bulk.template.step2\": \"작성 한 파일을 업로드 해주세요.\",\n \"purchase-tax-invoice.bulk.template.download\": \"양식 다운로드\",\n \"purchase-tax-invoice.bulk.uploader.title\": \"엑셀 파일 업로드\",\n \"purchase-tax-invoice.bulk.uploader.description\": \"(Xlsx.파일 / 최대 1개)\",\n \"purchase-tax-invoice.excel.downloaded\": \"엑셀 파일을 다운로드 받았습니다.\",\n \"purchase-tax-invoice.bulk.cancel\": \"취소\",\n \"purchase-tax-invoice.bulk.submit\": \"요청\",\n 'purchase-tax-invoice.bulk.validation.message': '{{field}} 항목을 확인해주세요.',\n \"purchase-tax-invoice.bulk.validation.taxType\": \"종류 일반(10%) 또는 면세\",\n \"purchase-tax-invoice.bulk.validation.purpose\": \"영수/청구 선택\",\n \"purchase-tax-invoice.bulk.validation.writeDate\": \"작성일자\",\n \"purchase-tax-invoice.bulk.validation.businessRegistrationNumber\": \"사업자등록번호\",\n \"purchase-tax-invoice.bulk.validation.organizationName\": \"상호/법인명\",\n \"purchase-tax-invoice.bulk.validation.representativeName\": \"대표자명\",\n \"purchase-tax-invoice.bulk.validation.assigneeEmail1\": \"받아볼 분 이메일1\",\n \"purchase-tax-invoice.bulk.validation.purchaseAt1\": \"공급일자1\",\n \"purchase-tax-invoice.bulk.validation.itemName1\": \"품목1\",\n \"purchase-tax-invoice.bulk.validation.quantity1\": \"수량1\",\n \"purchase-tax-invoice.bulk.validation.unitPrice1\": \"단가1\",\n \"purchase-tax-invoice.bulk.validation.supplyCost1\": \"공급가액1\",\n \"purchase-tax-invoice.bulk.validation.tax1\": \"세액1\",\n \"purchase-tax-invoice.bulk.validation.purchaseAt2\": \"공급일자2\",\n \"purchase-tax-invoice.bulk.validation.itemName2\": \"품목2\",\n \"purchase-tax-invoice.bulk.validation.quantity2\": \"수량2\",\n \"purchase-tax-invoice.bulk.validation.unitPrice2\": \"단가2\",\n \"purchase-tax-invoice.bulk.validation.supplyCost2\": \"공급가액2\",\n \"purchase-tax-invoice.bulk.validation.tax2\": \"세액2\",\n \"purchase-tax-invoice.bulk.success\": \"세금계산서 대량 요청 완료\",\n \"purchase-tax-invoice.bulk.error\": \"세금계산서 대량 요청 처리 중 오류가 발생했습니다.\",\n}\n\n\nexport default messages\n","/**\n * 자동정렬하면 언어별 라인수차이로 인해 가독성 및 놓치는 메세지를 인지하기 어렵습니다.\n * 따라서 prettier의 max-len을 무시하기 위해 주석을 추가합니다. (mex-len만 별도로 끄는게 불가능)\n */\n/* eslint-disable prettier/prettier */\nimport { MessageGroup } from \"../i18n.types\"\n\nconst messages: MessageGroup = {\n \"validation.required\": \"필수 입력 항목입니다.\",\n \"validation.maxLength\": \"{{value}}자 이내로 작성해 주세요\",\n \"validation.min\": \"{{value}} 이상 입력 가능합니다.\",\n \"validation.max\": \"최대 {{value}}까지 입력 가능합니다.\",\n \"validation.maxItems\": \"최대 {{value}}개 까지 입력 가능합니다.\",\n \"validation.minItems\": \"최소 {{value}}개 이상 입력 가능합니다.\",\n \"validation.pattern\": \"숫자를 입력해 주세요.\",\n \"validation.nonZero\": \"0원은 입력할 수 없습니다.\",\n \"validation.email\": \"올바르지 않은 이메일 형식입니다.\",\n \"validation.url\": \"올바르지 않은 URL 형식입니다.\",\n}\n\nexport default messages\n","/**\n * 자동정렬하면 언어별 라인수차이로 인해 가독성 및 놓치는 메세지를 인지하기 어렵습니다.\n * 따라서 prettier의 max-len을 무시하기 위해 주석을 추가합니다. (mex-len만 별도로 끄는게 불가능)\n */\n/* eslint-disable prettier/prettier */\nimport { MessageGroup } from \"../i18n.types\"\n\nconst messages: MessageGroup = {\n \"request-payment.write.title\": \"지급요청서 작성하기\",\n \"request-payment.rewrite.error.invalid\": \"접근할 수 없는 요청서입니다.\",\n \"request-payment.sheet.title\": \"지급 문서\",\n \"request-payment.tab.detail\": \"상세 내용\",\n \"request-payment.tab.history\": \"활동 이력\",\n \"request-payment.action.approve\": \"승인\",\n \"request-payment.action.reject\": \"거절\",\n \"request-payment.action.reject.immediate\": \"즉시 거절\",\n \"request-payment.action.reject.with.comment\": \"거절 사유 작성\",\n \"request-payment.action.delete\": \"문서 삭제\",\n \"request-payment.action.edit\": \"내용 변경\",\n \"request-payment.action.transfer.reject\": \"이체거절\",\n \"request-payment.action.transfer.complete\": \"이체완료\",\n \"request-payment.notification.approved\": \"요청서가 승인되었습니다.\",\n \"request-payment.notification.rejected\": \"요청 거절 처리되었습니다.\",\n \"request-payment.notification.deleted\": \"요청서가 삭제되었습니다.\",\n \"request-payment.notification.transfer.completed\": \"이체 완료처리 되었습니다.\",\n \"request-payment.notification.transfer.rejected\": \"이체 거절 처리되었습니다.\",\n \"request-payment.confirmation.delete.title\": \"지급 요청서 삭제\",\n \"request-payment.confirmation.delete.confirm\": \"네, 삭제할게요\",\n \"request-payment.confirmation.delete.message\": \"삭제된 요청서는 더 이상 확인할 수 없습니다.\",\n}\n\nexport default messages\n","/**\n * 자동정렬하면 언어별 라인수차이로 인해 가독성 및 놓치는 메세지를 인지하기 어렵습니다.\n * 따라서 prettier의 max-len을 무시하기 위해 주석을 추가합니다. (mex-len만 별도로 끄는게 불가능)\n */\n/* eslint-disable prettier/prettier */\nimport { MessageGroup } from \"../i18n.types\"\n\nconst messages: MessageGroup = {\n \"invoice.list.fields.balance.short\": \"미입금 : {{amount}}원\",\n \"invoice.openApi.edit.disabled\": \"Open API로 발행한 세금계산서는 내용변경이 불가능합니다.\",\n \"invoice.openApi.edit.unavailable.title\": \"세금계산서 내용변경 불가능\",\n \"invoice.openApi.edit.unavailable.message\": \"Open API로 발행한 세금계산서는 내용변경이 불가능합니다.\",\n \"invoice.list.bulks.maxSelect\": \"최대 {{count}}건까지만 선택할 수 있습니다.\",\n\n \"invoice.options.willBeReleased\": \"해당 옵션은 현재 준비중 입니다.\",\n \"invoice.options.repeat\": \"반복\",\n \"invoice.options.repeat.monthly\": \"매월\",\n \"invoice.options.repeat.quarterly\": \"분기별\",\n \"invoice.options.repeat.yearly\": \"매년\",\n \"invoice.options.repeat.dayOfMonth\": \"{{day}}일\",\n \"invoice.options.repeat.monthly.dayOfMonth\": \"매월 {{day}}일\",\n \"invoice.options.repeat.quarterly.dayOfMonth\": \"분기별 {{day}}일\",\n \"invoice.options.repeat.yearly.dayOfMonth\": \"매년 {{day}}일\",\n \"invoice.options.repeat.monthly.dayOfMonth.preview\": \"매월 {{day}}일, 마지막 발행일: {{date}}\",\n \"invoice.options.repeat.quarterly.dayOfMonth.preview\": \"분기별 {{day}}일, 마지막 발행일: {{date}}\",\n \"invoice.options.repeat.yearly.dayOfMonth.preview\": \"매년 {{day}}일, 마지막 발행일: {{date}}\",\n \"invoice.options.repeat.form.title\": \"반복 설정\",\n \"invoice.options.repeat.form.repeatType\": \"반복 주기\",\n \"invoice.options.repeat.form.repeatType.monthly\": \"매월\",\n \"invoice.options.repeat.form.repeatType.quarterly\": \"분기별\",\n \"invoice.options.repeat.form.repeatType.yearly\": \"매년\",\n \"invoice.options.repeat.form.endDate\": \"종료 일자\",\n \"invoice.options.repeat.form.preview.title\": \"발행 일정({{value}}건)\",\n \"invoice.options.repeat.form.preview.more\": \"일정 미리보기\",\n \"invoice.options.repeat.form.preview.allDates\": \"일정 미리보기\",\n \"invoice.options.repeat.form.preview.noDates\": \"반복 일정이 없습니다.\",\n \"invoice.options.repeat.form.created.toast\": \"반복 발행 일정이 설정되었습니다.\",\n \"invoice.options.repeat.form.updated.toast\": \"반복 발행 일정이 수정되었습니다.\",\n \"invoice.options.repeat.form.deleted.toast\": \"반복 발행 일정이 삭제되었습니다.\",\n \"invoice.options.memo\": \"메모\",\n\n \"invoice.options.labels\": \"라벨\",\n\n \"invoice.options.payments\": \"입금내역\",\n\n}\n\nexport default messages\n","/**\n * 자동정렬하면 언어별 라인수차이로 인해 가독성 및 놓치는 메세지를 인지하기 어렵습니다.\n * 따라서 prettier의 max-len을 무시하기 위해 주석을 추가합니다. (mex-len만 별도로 끄는게 불가능)\n */\n/* eslint-disable prettier/prettier */\nimport { MessageGroup } from \"../i18n.types\"\n\nconst messages: MessageGroup = {\n \"developers.register.dialog.title\": \"개발자 등록\",\n \"developers.register.dialog.description\": \"이메일을 통해 개발자 계정을 등록할 수 있습니다.\",\n \"developers.register.emails.confirm.success\": \"개발자 등록 요청이 완료되었습니다.\",\n \"developers.register.dialog.email.label\": \"이메일\",\n \"developers.register.dialog.email.maxCount\": \"(최대 5개)\",\n \"developers.register.dialog.email.placeholder\": \"이메일을 입력해 주세요.\",\n \"developers.register.dialog.email.maxEmail\": \"최대 {{count}}명까지 입력 가능합니다.\",\n \"developers.register.dialog.showFeatures\": \"포함 기능 보기\",\n \"developers.register.dialog.cancel\": \"취소\",\n \"developers.register.dialog.submit\": \"등록\",\n \"developers.empty.title\": \"등록된 개발자가 없습니다.\",\n \"developers.page.title\": \"개발자 관리\",\n \"developers.page.description\": \"개발자를 등록하여 API 키, 웹훅 기능을 이용하실 수 있습니다.\",\n \"developers.register.button\": \"개발자 등록\",\n \"developers.field.name\": \"이름\",\n \"developers.field.email\": \"이메일\",\n \"developers.field.email.badge.me\": \"본인\",\n \"developers.table.action\": \"관리\",\n \"developers.table.action.exclude\": \"내보내기\",\n \"developers.exclude.confirmation.title\": \"개발자 내보내기\",\n \"developers.exclude.confirmation.description\": \"팀원을 개발자 센터에서 내보낼까요?\\n내보낸 팀원은 개발자센터에 접근할 수 없습니다.\",\n \"developers.exclude.confirmation.cancel\": \"취소\",\n \"developers.exclude.confirmation.submit\": \"네, 내보낼게요.\",\n \"developers.exclude.confirmation.success\": \"개발자 내보내기를 완료했습니다.\",\n \"developers.apiKeys.title\": \"API 키\",\n \"developers.apiKeys.description\": \"테스트와 라이브 환경별로 API 키를 각각 생성할 수 있습니다.\",\n \"developers.apiKeys.toolbar.new\": \"API 키 생성\",\n \"developers.apiKeys.tabs.test\": \"테스트\",\n \"developers.apiKeys.tabs.live\": \"라이브\",\n \"developers.apiKeys.field.description\": \"용도\",\n \"developers.apiKeys.field.apiKey\": \"API 키\",\n \"developers.apiKeys.field.action\": \"관리\",\n \"developers.apiKeys.field.action.editor\": \"옵션 수정\",\n \"developers.apiKeys.field.action.delete\": \"키 삭제\",\n \"developers.apiKeys.empty\": \"등록된 API 키가 없습니다.\",\n \"developers.apiKeys.action.edit\": \"수정하기\",\n \"developers.apiKeys.action.delete\": \"삭제하기\",\n \"developers.apiKeys.success.create\": \"API 키가 생성되었습니다.\",\n \"developers.apiKeys.success.update\": \"API 키가 수정되었습니다.\",\n \"developers.apiKeys.success.delete\": \"API 키가 삭제되었습니다.\",\n \"developers.apiKeys.error.create\": \"API 키 생성에 실패했습니다.\",\n \"developers.apiKeys.error.update\": \"API 키 수정에 실패했습니다.\",\n \"developers.apiKeys.error.delete\": \"API 키 삭제에 실패했습니다.\",\n \"developers.apiKeys.delete.confirm.title\": \"API 키 삭제\",\n \"developers.apiKeys.delete.confirm.description\": \"삭제된 API 키는 더 이상 사용할 수 없습니다.\",\n \"developers.apiKeys.delete.confirm.submit\": \"네, 삭제할게요\",\n \"developers.apiKeys.form.mode\": \"환경 구분\",\n \"developers.apiKeys.form.mode.test\": \"테스트\",\n \"developers.apiKeys.form.mode.live\": \"라이브\",\n \"developers.apiKeys.new.mode.test\": \"테스트 키\",\n \"developers.apiKeys.new.mode.live\": \"라이브 키\",\n \"developers.apiKeys.form.key\": \"API 키\",\n \"developers.apiKeys.form.description\": \"용도(설명)\",\n \"developers.apiKeys.form.description.placeholder\": \"용도를 입력해 주세요.\",\n \"developers.apiKeys.form.dialog.title.create\": \"API 키 생성\",\n \"developers.apiKeys.form.dialog.title.edit\": \"API 키 수정\",\n \"developers.apiKeys.form.dialog.description\": \"API 요청 시 필요한 인증에 사용되는 키입니다.\",\n \"developers.apiKeys.form.dialog.cancel\": \"취소\",\n \"developers.apiKeys.form.dialog.submit.create\": \"생성\",\n \"developers.apiKeys.form.dialog.submit.update\": \"수정\",\n \"developers.apiKeys.form.webhookDestinationUrl\": \"웹훅 수신 URL\",\n \"developers.apiKeys.form.webhookDestinationUrl.https\": \"(HTTPS 형식만 가능)\",\n \"developers.apiKeys.form.webhookDestinationUrl.placeholder\": \"수신 URL을 입력해 주세요.\",\n \"developers.apiKeys.form.certificateRedirectUrl\": \"인증서 등록 완료 리다이렉트 URL\",\n \"developers.apiKeys.form.certificateRedirectUrl.placeholder\": \"URL을 입력해 주세요.\",\n\n \"developers.apiLogs.title\": \"이벤트 로그\",\n \"developers.apiLogs.description\": \"API 키를 선택하여 발행 이벤트 상태를 조회할 수 있습니다.\",\n \"developers.apiLogs.toolbar.new\": \"이벤트 로그 조회\",\n \"developers.apiLogs.table.column.status\": \"전송 상태\",\n \"developers.apiLogs.table.column.receiverUrl\": \"수신 URL\",\n \"developers.apiLogs.table.column.eventType\": \"eventType\",\n \"developers.apiLogs.table.column.eventTime\": \"이벤트 발생 시간\",\n \"developers.apiLogs.select.openApiKey.placeholder\": \"API 키 선택\",\n \"developers.apiLogs.empty\": \"수신된 이벤트가 없습니다.\",\n \"developers.apiLogs.form.openApiKey\": \"API 키 선택\",\n \"developers.apiLogs.form.dialog.title\": \"이벤트 로그 조회\",\n \"developers.apiLogs.form.dialog.description\": \"API 키의 발행 이벤트 상태를 조회할 수 있습니다.\",\n \"developers.apiLogs.form.dialog.cancel\": \"취소\",\n \"developers.apiLogs.form.dialog.submit\": \"저장\",\n \"developers.apiLogs.success.create\": \"웹훅 수신 URL이 등록되었습니다.\",\n \"developers.apiLogs.success.update\": \"웹훅 수신 URL이 수정되었습니다.\",\n \"developers.apiLogs.success.delete\": \"웹훅 수신 URL이 삭제되었습니다.\",\n \"developers.apiLogs.select.status.placeholder\": \"전송 상태 선택\",\n \"developers.apiLogs.tabs.webhooks\": \"웹훅\",\n \"developers.apiLogs.tabs.apis\": \"API\",\n \"developers.apiLogs.payload.empty\": \"수신된 데이터가 없습니다.\",\n \"developers.apiLogs.status.ALL\": \"전체\",\n \"developers.apiLogs.status.SUCCESS\": \"성공\",\n \"developers.apiLogs.status.FAILURE\": \"실패\",\n}\n\nexport default messages\n\n","/**\n * 자동정렬하면 언어별 라인수차이로 인해 가독성 및 놓치는 메세지를 인지하기 어렵습니다.\n * 따라서 prettier의 max-len을 무시하기 위해 주석을 추가합니다. (mex-len만 별도로 끄는게 불가능)\n */\n/* eslint-disable prettier/prettier */\nimport { MessageGroup } from \"../i18n.types\"\n\nconst messages: MessageGroup = {\n \"invitations.title\": \"워크스페이스 참여\",\n \"invitations.description.hasInvitations\": \"초대 받은 워크스페이스가 있습니다.\\n초대 목록에서 워크스페이스를 선택하고 참여하기를 클릭해 주세요.\",\n \"invitations.description.noInvitations\": \"워크스페이스 관리자에게 초대를 요청해주세요\",\n \"invitations.invitationList.title\": \"초대 목록\",\n \"invitations.invitationList.joinButton\": \"참여하기\",\n \"invitations.invitationList.invitedBy\": \"초대한 사람\",\n \"invitations.invitationList.exitButton\": \"초대 목록에서 나가기\",\n \"invitations.modal.title\": \"초대 대기\",\n \"invitations.modal.description\": \"아직 워크스페이스에 참여하지 않은 팀원이에요.\",\n \"invitations.list.total\": \"전체 {{count}}건\",\n \"invitations.list.empty\": \"초대 대기 중인 팀원이 없습니다.\",\n \"invitations.status.pending\": \"초대중\",\n \"invitations.table.header.status\": \"상태\",\n \"invitations.table.header.email\": \"이메일\",\n \"invitations.table.header.role\": \"권한\",\n \"invitations.action.resend\": \"메일 재전송\",\n \"invitations.action.cancel\": \"초대 취소\",\n \"invitations.cancel.title\": \"팀원 초대를 취소할까요?\",\n \"invitations.cancel.description\": \"취소된 팀원은 기존 이메일로 가입할 수 없으며,\\n새로 초대해야 합니다.\",\n \"invitations.cancel.confirm\": \"네, 취소할게요.\",\n \"invitations.snackbar.resent\": \"팀원 초대 메일을 재전송했습니다.\",\n \"invitations.snackbar.canceled\": \"팀원 초대를 취소했습니다.\",\n \"invitations.type.DEVELOPER_CENTER\": \"개발자센터\",\n \"invitations.type.DASHBOARD\": \"워크스페이스\",\n}\n\nexport default messages\n","/**\n * 자동정렬하면 언어별 라인수차이로 인해 가독성 및 놓치는 메세지를 인지하기 어렵습니다.\n * 따라서 prettier의 max-len을 무시하기 위해 주석을 추가합니다. (mex-len만 별도로 끄는게 불가능)\n */\n/* eslint-disable prettier/prettier */\nimport { MessageGroup } from \"../i18n.types\"\n\nconst messages: MessageGroup = {\n \"request-form.title\": \"발행정보 요청서\",\n \"request-form.description\": \"세금계산서 발행에 필요한 정보 요청서를 만들어 링크로 공유할 수 있습니다.\",\n \"request-form.subTitle\": \"요청서 정보\",\n \"request-form.create\": \"요청서 만들기\",\n \"request-form.preview.unavailable\": \"미리보기에서는 테스트할 수 없습니다.\",\n \"request-form.createdAt\": \"생성일자 : {{date}}\",\n \"request-form.link.copy.tooltip\": \"링크 복사\",\n \"request-form.link.copy.success\": \"요청서 링크가 복사되었습니다.\",\n \"request-form.empty\": \"등록된 요청서가 없습니다.\",\n \"request-form.invalid.title\": \"유효하지 않은 요청서\",\n \"request-form.invalid.description\": \"삭제되었거나 잘못된 경로의 요청서 입니다.\\n담당자에게 다른 링크를 문의해 주세요.\",\n \"request-form.submit.success.title\": \"발행정보 제출 완료\",\n \"request-form.submit.success.description\": \"세금계산서 발행이 완료되면 담당자님 메일로 알려드릴게요.\",\n \"request-form.pre-fill.info.title\": \"제출 정보 보관하는 방법\",\n \"request-form.pre-fill.info.description\": \"아래 링크로 접속하면 일부 항목이 미리 입력되어 편리하게 정보를 제출할 수 있어요.\",\n \"request-form.pre-fill.copy.tooltip\": \"클릭하면 링크가 복사됩니다.\",\n \"request-form.pre-fill.copy.success.tooltip\": \"링크가 복사되었습니다.\"\n}\n\nexport default messages\n","/**\n * 자동정렬하면 언어별 라인수차이로 인해 가독성 및 놓치는 메세지를 인지하기 어렵습니다.\n * 따라서 prettier의 max-len을 무시하기 위해 주석을 추가합니다. (mex-len만 별도로 끄는게 불가능)\n */\n/* eslint-disable prettier/prettier */\nimport { MessageGroup } from \"../i18n.types\"\n\nconst messages: MessageGroup = {\n \"invoice-payment-search.title.received\": \"지급 내역 선택\",\n \"invoice-payment-search.title.purchased\": \"입금 내역 선택\",\n \"invoice-payment-search.manual-button\": \"직접 입력\",\n \"invoice-payment-search.search-placeholder\": \"금액/적요로 검색해 주세요.\",\n \"invoice-payment-search.balance-hint\": \"잔액: {{amount}}원\",\n \"invoice-payment-search.no-results\": \"검색 결과가 없습니다.\",\n \"invoice-payment-search.load-more\": \"더보기\",\n \"invoice-payment-search.matched-tooltip\": \"다른 {{type}}에 선택된 항목입니다.\",\n \"invoice-payment-search.matched-tooltip-type.received\": \"지급내역\",\n \"invoice-payment-search.matched-tooltip-type.purchased\": \"입금내역\",\n \"invoice-payment-search.unlinked-only\": \"미연결 내역만 보기\",\n \"invoice-payment-matched.add-button.received\": \"지급 내역 추가\",\n \"invoice-payment-matched.add-button.purchased\": \"입금 내역 추가\",\n \"invoice-payment-matched.delete-button\": \"삭제\",\n \"invoice-payment-not-connected.title.received\": \"계좌를 연결하고 지급 내역을 확인해 보세요\",\n \"invoice-payment-not-connected.title.purchased\": \"계좌를 연결하고 입금 내역을 확인해 보세요\",\n \"invoice-payment-not-connected.manual-button\": \"직접 입력하기\",\n \"invoice-payment-manual-form.title.received\": \"지급 내역 직접 입력\",\n \"invoice-payment-manual-form.title.purchased\": \"입금 내역 직접 입력\",\n \"invoice-payment-manual-form.submit-button\": \"저장\",\n \"invoice-payment-manual-form.cancel-button\": \"취소\",\n \"invoice-payment-permission-error\": \"입출금조회 권한이 없습니다.\",\n \"invoice-payment-success.received\": \"지급 내역이 추가되었습니다.\",\n \"invoice-payment-success.purchased\": \"입금 내역이 추가되었습니다.\",\n \"invoice-payment-delete.received\": \"지급 내역이 삭제되었습니다.\",\n \"invoice-payment-delete.purchased\": \"입금 내역이 삭제되었습니다.\",\n}\n\nexport default messages\n","import { MessageNamespace } from \"../i18n.types\"\nimport common from \"./ko.common\"\nimport settings from \"./ko.settings\"\nimport purchaseInvoices from \"./ko.purchase-invoices\"\nimport validations from \"./ko.validations\"\nimport requestPayment from \"./ko.request-payment\"\nimport invoices from \"./ko.invoices\"\nimport developers from \"./ko.developers\"\nimport invitations from \"./ko.invitations\"\nimport requestForm from \"./ko.request-form\"\nimport invoicesPayments from \"./ko.invoices-payments\"\n\nconst ns: MessageNamespace = {\n common: {\n ...common,\n ...settings,\n ...purchaseInvoices,\n ...validations,\n ...requestPayment,\n ...invoices,\n ...developers,\n ...invitations,\n ...requestForm,\n ...invoicesPayments,\n },\n}\n\nexport default ns\n","import i18next from \"i18next\"\nimport { initReactI18next } from \"react-i18next\"\n\nimport { DEFAULT_LOCALE } from \"./i18n.constants\"\nimport { LocaleType } from \"./i18n.types\"\nimport ko from \"./ko\"\n\nexport function createI18n(locale: LocaleType) {\n const i18n = i18next.createInstance()\n i18n.use(initReactI18next).init({\n debug: false,\n defaultNS: \"common\",\n fallbackLng: DEFAULT_LOCALE,\n /**\n * @see https://www.i18next.com/translation-function/interpolation\n */\n interpolation: {\n escapeValue: false,\n },\n lng: locale || DEFAULT_LOCALE,\n resources: {\n ko,\n },\n })\n return i18n\n}\n","export * from \"./createI18n\"\nexport * from \"./i18n.constants\"\nexport * from \"./i18n.types\"\n","export * from \"./store\"\n","import { create } from \"zustand\"\nimport { persist } from \"zustand/middleware\"\n\nimport {\n ProfileInvitationModel,\n ProfileModel,\n ProfileWorkspaceCertificationModel,\n ProfileWorkspaceGroupModel,\n ProfileWorkspaceModel,\n} from \"@/features/profiles\"\nimport { AuthorizedFeatureRole } from \"@/features/auth\"\n\ninterface ProfileState {\n profile: ProfileModel | null\n workspaceGroup: ProfileWorkspaceGroupModel | null\n setProfile: (profile: ProfileModel | null) => void\n getProfileAccountId: () => number\n setWorkspaceGroup: (workspaceGroup: ProfileWorkspaceGroupModel | null) => void\n getProfileWorkspaceGroups: () => ProfileWorkspaceGroupModel[]\n getWorkspaceCertificates: () => ProfileWorkspaceCertificationModel[]\n getInvitations: () => ProfileInvitationModel[]\n getCurrentWorkspace: () => ProfileWorkspaceModel | null\n getCurrentWorkspaceId: () => number\n getAuthorizedFeatures: () => AuthorizedFeatureRole[]\n hasAuthorizedFeature: (feature: AuthorizedFeatureRole) => boolean\n}\n\n/**\n * @todo useProfileStore는 latestWorkspace만 유지될 수 있도록 수정해야 합니다.\n * 독립적인 profile global store을 운영/유지보수 할 이유가 없습니다.\n * 어차피 대시보드 전/후에 필요한 api로서 계속 호출되어 관리가 필요하기 때문에, persist될 필요도 없습니다.\n * 오히려 persist되고, profileStore를 업데이트하지 않을 경우에 대한 문제가 생기기 때문에 삭제예정입니다.\n */\nexport const useProfileStore = create()(\n persist(\n (set, get) => ({\n profile: null,\n workspaceGroup: null,\n setProfile: profile => set({ profile }),\n getProfileAccountId: () => {\n return get().profile?.account.id || -1\n },\n setWorkspaceGroup: workspaceGroup => set({ workspaceGroup }),\n getProfileWorkspaceGroups: () => {\n return get().profile?.workspaceGroups || []\n },\n getInvitations: () => {\n return get().profile?.invitations || []\n },\n getWorkspaceCertificates: () => {\n return get().workspaceGroup?.certificates || []\n },\n getCurrentWorkspace: () => {\n return get().workspaceGroup?.workspace || null\n },\n getAuthorizedFeatures: () => {\n return get().workspaceGroup?.authorizedFeatures || []\n },\n hasAuthorizedFeature: feature => {\n const features = get().getAuthorizedFeatures()\n const isEmptyFeatures = features.length === 0\n if (isEmptyFeatures) {\n return false\n }\n return features.includes(feature)\n },\n getCurrentWorkspaceId: () => {\n return get().workspaceGroup?.workspace.id || 0\n },\n }),\n {\n name: \"profile\",\n },\n ),\n)\n","import dayjs from \"dayjs\"\n\n/**\n * Time을 제외한 Date input을 포메팅하는 함수\n * - ISO 8601에 적합하지 않은 YYYY.MM.DD가 input으로 오면 safari에서 파싱이 안되므로, dayjs에 적합한 포멧 설정을 추가하여 문제없이 변환되도록 합니다.\n */\nexport const toDateFormat = (date: string | number) => {\n const formats = [\n // ISO 8601 format\n \"YYYY-MM-DDTHH:mm:ssZ\",\n // ko-KR format\n \"YYYY-MM-DD\",\n \"YYYY.MM.DD\",\n \"YYYY/MM/DD\",\n \"YYYYMMDD\",\n // en-US format\n \"MM-DD-YYYY\",\n \"MM.DD.YYYY\",\n \"MM/DD/YYYY\",\n \"MMDDYYYY\",\n ]\n\n const parsed = dayjs(date, formats, true)\n if (parsed.isValid()) {\n return parsed\n }\n\n return dayjs(date, undefined, true)\n}\n","export * from \"./toDateFormat\"\n","// 사업자등록번호\nexport const formatBusinessRegistrationNumber = (value: string, max = 10) => {\n if (!value) return value\n\n const numbers = value.replace(/[^\\d]/g, \"\")\n\n let parts = [] as string[]\n if (numbers.length > 3) {\n parts.push(numbers.slice(0, 3))\n if (numbers.length > 5) {\n parts.push(numbers.slice(3, 5))\n parts.push(numbers.slice(5, max || 10))\n } else {\n parts.push(numbers.slice(3))\n }\n } else {\n parts = [numbers]\n }\n\n return parts.join(\"-\")\n}\n\nexport const unformatBusinessRegistrationNumber = (value: string) => {\n return value.replace(/-/g, \"\")\n}\n","import { CURRENCY_FORMATS, LocaleType } from \"@/i18n\"\n\nexport function formatCurrency(value: number, locale: LocaleType = \"ko\"): string {\n const formatOption = CURRENCY_FORMATS[locale] || CURRENCY_FORMATS.ko\n const formattedValue = Intl.NumberFormat(\"ko-KR\", formatOption).format(value)\n\n return formattedValue\n}\n","import { NUMBER_FORMATS, LocaleType } from \"@/i18n\"\n\nexport function formatNumber(value: number, locale: LocaleType = \"ko\"): string {\n const formatOption = NUMBER_FORMATS[locale] || NUMBER_FORMATS.ko\n const formattedValue = Intl.NumberFormat(\"ko-KR\", formatOption).format(value)\n\n return formattedValue\n}\n","/**\n * 종사업장 번호 숫자 4자리\n * @example 0000\n */\nexport const formatTaxRegistrationId = (value: string) => {\n if (!value) return value\n\n const numbers = value.replace(/[^\\d]/g, \"\")\n return numbers.slice(0, 4)\n}\n","export * from \"./dates\"\nexport * from \"./formatBusinessRegistrationNumber\"\nexport * from \"./formatCurrency\"\nexport * from \"./formatNumber\"\nexport * from \"./formatTaxRegistrationId\"\n","/**\n * @deprecated use formatCurrency instead\n * 세자리마다 콤마(,)를 추가하는 함수\n */\nexport const formatNumber = (\n num: number | string | null | undefined,\n noNegative?: boolean,\n): string => {\n if (num === \"-\") {\n return noNegative ? \"\" : num\n }\n\n if (num === 0) {\n return \"0\"\n }\n\n if (!num || num === null || num === undefined) {\n return \"\"\n }\n\n let formattedNum = num\n let isNegative = false\n\n if (typeof num === \"string\") {\n // 숫자, 쉼표, 마이너스 기호만 포함되어 있는지 확인\n if (!/^[-0-9,]+$/.test(num)) {\n return \"\" // 유효하지 않은 형식일 경우 빈 문자열 반환\n }\n\n // 음수인지 확인\n if (num.startsWith(\"-\")) {\n isNegative = true\n formattedNum = num.substring(1) // '-' 기호 제거\n }\n\n formattedNum = formattedNum.toString().replace(/,/g, \"\")\n formattedNum = Number(formattedNum)\n } else if (typeof num === \"number\" && num < 0) {\n // 숫자 타입이고 음수일 경우\n isNegative = true\n formattedNum = Math.abs(num) // 음수를 양수로 변환\n }\n\n // 숫자를 문자열로 변환하고 천 단위마다 쉼표 추가\n const result = formattedNum.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\n\n // NaN일 경우 빈 문자열 반환\n if (result === \"NaN\") {\n return \"\"\n }\n\n // 음수일 경우 앞에 '-' 추가\n return isNegative && !noNegative ? `-${result}` : result\n}\n\nexport const removeComma = (str: string): string => {\n return str.replace(/,/g, \"\")\n}\n\n/**\n * 사업자등록번호\n * 000-00-00000\n * @deprecated use ./src/utils/format/formatBusinessRegistrationNumber.ts instead\n */\nexport const formatBusinessRegistrationNumber = (value: string, max = 10) => {\n if (!value) return value\n\n const numbers = value.replace(/[^\\d]/g, \"\")\n\n let parts = [] as string[]\n if (numbers.length > 3) {\n parts.push(numbers.slice(0, 3))\n if (numbers.length > 5) {\n parts.push(numbers.slice(3, 5))\n parts.push(numbers.slice(5, max || 10))\n } else {\n parts.push(numbers.slice(3))\n }\n } else {\n parts = [numbers]\n }\n\n return parts.join(\"-\")\n}\n\n// 전화번호\n// 000-0000-0000\nexport const formatPhoneNumber = (value: string) => {\n if (!value) return value\n\n const numbers = value.replace(/[^\\d]/g, \"\")\n\n let parts = [] as string[]\n if (numbers.length > 3) {\n parts.push(numbers.slice(0, 3))\n if (numbers.length > 7) {\n parts.push(numbers.slice(3, 7))\n parts.push(numbers.slice(7, 11))\n } else {\n parts.push(numbers.slice(3))\n }\n } else {\n parts = [numbers]\n }\n\n return parts.join(\"-\")\n}\n\n/**\n *\n * @param value \"010-1234-5678\"\n * @returns \"01012345678\"\n */\nexport const toPhoneNumber = (value: string): string => {\n return value.replace(/[^0-9]/g, \"\")\n}\n\n// 승인번호\n// 00000000-00000000-00000aaa\nexport const formatApprovalNumber = (value: string) => {\n if (!value) return value\n\n // -를 제외한 숫자와 문자만 남깁니다.\n const validChars = value.replace(/-/g, \"\")\n\n let parts = [] as string[]\n if (validChars.length > 8) {\n parts.push(validChars.slice(0, 8))\n if (validChars.length > 16) {\n parts.push(validChars.slice(8, 16))\n parts.push(validChars.slice(16, 24))\n } else {\n parts.push(validChars.slice(8))\n }\n } else {\n parts = [validChars]\n }\n\n return parts.join(\"-\")\n}\n\n// 크레딧카드번호\n// 0000-0000-0000-0000\nexport const formatCreditCardNumber = (value: string) => {\n if (!value) return value\n\n // 숫자와 별표만 남깁니다.\n const validCharacters = value.replace(/[^\\d*]/g, \"\")\n\n const parts = [] as string[]\n for (let i = 0; i < validCharacters.length; i += 4) {\n // 4자리씩 끊어서 parts 배열에 추가합니다.\n parts.push(validCharacters.slice(i, i + 4))\n }\n\n return parts.join(\"-\")\n}\n"],"names":["isServer","overwriteCookies","config","cookies","__webpack_require__","e","then","bind","existsCookies","getAll","map","cookie","name","concat","value","join","headers","apiPublicClient","axios","create","baseURL","process","Accept","withCredentials","defaults","paramsSerializer","paramObj","qs","arrayFormat","apiPrivateClient","interceptors","request","use","apiOpenApiClient","getProfileV2Api","data","body","method","url","useQueryEffect","onSuccess","onError","onSettled","options","param","latestOnSuccess","useLatestValue","latestOnError","latestOnSettled","response","useQuery","isSuccess","error","isError","isSettled","useIsoMorphicEffect","current","useProfileQueryEffect","arguments","length","setProfile","useProfileStore","state","setWorkspaceGroup","status","setStatus","React","undefined","getMatchedWorkspaceGroup","useMatchedWorkspace","handleSuccess","profile","validWorkspaceGroup","handleError","profileQueries","enabled","isNil","_id","queryOptions","queryKey","queryFn","select","toSelectProfileModel","workspaceGroups","pipe","workspaceGroup","collaborator","authorizedFeatures","feature","workspace","businessRegistrationNumber","formatBusinessRegistrationNumber","staff","telephone","formatPhoneNumber","taxRegistrationId","formatTaxRegistrationId","toArray","selectCurrentWorkspaceInfo","workspaceId","find","id","getCurrentWorkspaceId","cache","useRef","CURRENCY_FORMATS","ko","style","currency","NUMBER_FORMATS","ns","common","createI18n","locale","i18n","i18next","initReactI18next","init","debug","defaultNS","fallbackLng","interpolation","escapeValue","lng","resources","persist","set","get","getProfileAccountId","account","getProfileWorkspaceGroups","getInvitations","invitations","getWorkspaceCertificates","certificates","getCurrentWorkspace","getAuthorizedFeatures","hasAuthorizedFeature","features","includes","toDateFormat","parsed","dayjs","date","isValid","max","numbers","replace","parts","push","slice","unformatBusinessRegistrationNumber","formatCurrency","formatOption","Intl","NumberFormat","format","formatNumber","num","noNegative","formattedNum","isNegative","test","startsWith","substring","Number","toString","Math","abs","result","toPhoneNumber","formatApprovalNumber","validChars","formatCreditCardNumber","validCharacters","i"],"sourceRoot":""}