@connextable/popbill 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","names":["document.TaxInvoiceTaxationType","document.TaxInvoiceIssueType","document.TaxInvoicePurposeType","document.TaxInvoiceModificationReasonCode","document.TaxInvoiceBusinessStatus","document.TaxInvoiceDocumentInput","response.TaxInvoiceIssueResult","response.TaxInvoiceBulkSubmitResult","response.TaxInvoiceBulkIssueSubmissionResult","response.TaxInvoiceOperationResult","response.TaxInvoiceInfo","response.TaxInvoiceDocumentOutput","response.TaxInvoiceInvoiceManagementKeyUsage","response.TaxInvoiceXmlResult","response.TaxInvoiceSearchResult","response.TaxInvoiceLogEntry","response.TaxInvoiceAccessUrl","response.TaxInvoiceAttachedFile","response.TaxInvoiceEmailSendSetting","response.TaxInvoiceSendToNationalTaxServiceSetting","response.TaxInvoiceTaxCertificateExpiration","response.TaxInvoiceTaxCertificateInfo"],"sources":["../src/services/tax-invoice/types/document.ts","../src/services/tax-invoice/types/response.ts","../src/services/tax-invoice/types/index.ts","../src/client/types.ts","../src/client/index.ts","../src/services/tax-invoice/methods.ts"],"mappings":";;;;KAGY;;;;qBAKC;;;;WAIX;;;;WAIA;;;;;KAMU,oCAAoC,8CAA8C;;;;qBAKjF;;;;WAIX;;;;WAIA;;;;WAIA;;;;;KAMU,8BAA8B,mCAAmC;;;;qBAKhE;;;;WAIX;;;;WAIA;;;;WAIA;;;;;KAMU,gCAAgC,qCAAqC;;;;qBAKpE;;;;WAIX;;;;WAIA;;;;WAIA;;;;;KAMU,iCAAiC,sCAAsC;;;;qBAKtE;;;;WAIX;;;;WAIA;;;;WAIA;;;;;KAMU,kCAAkC,uCAAuC;;;;qBAKxE;;;;WAIX;;;;WAIA;;;;WAIA;;;;WAIA;;;;WAIA;;;;WAIA;;;;;KAMU,mCAAmC,6CAA6C;;;;qBAK/E;;;;WAIX;;;;WAIA;;;;WAIA;;;;WAIA;;;;WAIA;;;;WAIA;;;;;KAMU,2CAA2C,gDAAgD;;;;UAKtF;;;;EAIf;;;;EAIA,kBAAkB;;;;EAIlB;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA;;;;;UAMe;;;;EAIf;;;;EAIA;;;;EAIA;;;;;UAMe;;;;EAIf;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA;;;;;UAMe,6BAA6B;;;;EAI5C,gBAAgB;;;;EAIhB;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA,iBAAiB;;;;EAIjB,qBAAqB;;;;;UAMN;;;;EAIf;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA;;;;;UAMe;;;;EAIf,yBAAyB;;;;EAIzB;;;;;UAMe;;;;EAIf;;;;EAIA,cAAc;;;;EAId,kBAAkB;;;;EAIlB,YAAY;;;;EAIZ,cAAc;;;;EAId;;;;EAIA,UAAU;;;;EAIV,WAAW;;;;EAIX,QAAQ;;;;EAIR,UAAU;;;;EAIV,iBAAiB;;;;EAIjB,eAAe;;;;EAIf;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA,YAAY;;;;EAIZ,qBAAqB;;;;;iBC5fN;;;;EAIf;;;;EAIA;;;;;iBAMe,8BAA8B;;;;EAI7C;;;;EAIA;;;;;iBAMe,mCAAmC;;;;EAIlD;;;;;qBAMW;;;;WAIX;;;;WAIA;;;;WAIA;;;;;YAMU,wDACF,6DAA6D;;;;iBAKtD;;;;EAIf;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA;;;;;iBAMe,4CAA4C;;;;EAI3D;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA,mBAAmB;;;;EAInB;;;;EAIA;;;;EAIA;;;;EAIA,eAAe;;;;;iBAMA;;;;EAIf;;;;EAIA,SAASA;;;;EAIT;;;;EAIA;;;;EAIA,WAAWC;;;;EAIX;;;;EAIA;;;;EAIA,aAAaC;;;;EAIb;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA,mBAAmBC;;;;EAInB;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA,sBAAsBC;;;;EAItB;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA;;;;;iBAMe,iCAAiCC;;;;EAIhD;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA;;;;;iBAMe;;;;EAIf;;;;EAIA;;;;;iBAMe;;;;EAIf,kBAAkB;;;;EAIlB;;;;EAIA;;;;EAIA;;;;;iBAMe;;;;EAIf,iBAAiB;;;;EAIjB;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA,kBAAkB;;;;;iBAMH;;;;EAIf;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA;;;;;iBAMe;;;;EAIf;;;;;iBAMe;;;;EAIf;;;;EAIA;;;;EAIA;;;;EAIA;;;;;iBAMe;;;;EAIf;;;;EAIA;;;;;iBAMe;;;;EAIf;;;;;iBAMe;;;;EAIf;;;;;iBAMe;;;;EAIf;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA;;;;;qBC7gBW;;;;WAIX;;;;WAIA;;;;WAIA;;;;;YAMU,oCAAoC,yCAAyC;YAC7E,oCAAoC,QAC9C,kCACO,2BAA2B,eAAe,2BAA2B;YAElE,iDAAiD,2BAA2B;YAC5E,gDAAgD,2BAA2B;;;;qBAK1E;;;;WAIX;;;;WAIA;;;;WAIA;;;;WAIA;;;;WAIA;;;;WAIA;;;;;YAMU,6BAA6B,kCAAkC;;;;qBAK9D;;;;WAIX;;;;WAIA;;;;WAIA;;;;;YAMU,6BAA6B,iCAAiC;;;;YAK9D,sBAAsB,uBAAuB;;;;qBAK5C;;;;WAIX;;;;WAIA;;;;;YAMU,8BAA8B,kCAAkC;;;;;;;YAQhE;;;;qBAKC;;;;WAIX;;;;WAIA;;;;;YAMU,0CAA0C,+CAA+C;;;;qBAKxF;;;;WAIX;;;;WAIA;;;;WAIA;;;;;YAMU,2CAA2C,gDAAgD;;;;qBAK1F;;;;WAIX;;;;WAIA;;;;WAIA;;;;;YAMU,wCAAwC,6CAA6C;;;;qBAKpF;;;;WAIX;;;;WAIA;;;;WAIA;;;;;YAMU,wDACF,6DAA6D;;;;qBAK1D;;;;WAIX;;;;WAIA;;;;;YAMU,gEACF,sEAAsE;;;;qBAKnE;;;;WAIX;;;;WAIA;;;;;YAMU,+CAA+C,oDAAoD;;;;qBAKlG;;;;WAIX;;;;WAIA;;;;;YAMU,+CAA+C,oDAAoD;;;;qBAKlG;;;;WAIX;;;;WAIA;;;;WAIA;;;;WAIA;;;;WAIA;;;;WAIA;;;;;YAMU,uCAAuC,4CAA4C;;;;qBAKlF;;;;WAIX;;;;WAIA;;;;WAIA;;;;WAIA;;;;WAIA;;;;WAIA;;;;;YAMU,sCAAsC,2CAA2C;;;;qBAKhF;;;;WAIX;;;;WAIA;;;;WAIA;;;;WAIA;;;;WAIA;;;;WAIA;;;;WAIA;;;;WAIA;;;;WAIA;;;;WAIA;;;;WAIA;;;;WAIA;;;;WAIA;;;;WAIA;;;;WAIA;;;;WAIA;;;;WAIA;;;;WAIA;;;;WAIA;;;;;YAMU,8BAA8B,mCAAmC;;;;qBAKhE;;;;;;;;;;;YAKD,6BAA6B;;;;iBAKxB;;;;EAIf;;;;;iBAMe,0BAA0B,iBAAiB,4BAA4B,mCAAmC;;;;EAIzH,wBAAwB;;;;EAIxB;;;;;iBAMe,qCAAqC;;;;EAIpD,oBAAoB;;;;EAIpB;;;;EAIA;;;;EAIA;;;;EAIA;;;;EAIA;;;;;iBAMe,6BAA6B;;;;EAI5C;;;;EAIA,qBAAqB;;;;EAIrB;;;;;iBAMe,0CAA0C;;;;EAIzD;;;;;iBAMe,6BAA6B;;;;EAI5C,oBAAoB;;;;;iBAML,2BAA2B,0BAA0B;;;;EAIpE,wBAAwB;;;;EAIxB,oBAAoB;;;;;iBAML,0BAA0B,0BAA0B;;;;EAInE,wBAAwB;;;;EAIxB;;;;EAIA;;;;EAIA;;;;;iBAMe,iCAAiC,0BAA0B;;;;EAI1E,wBAAwB;;;;EAIxB;;;;;iBAMe,4CAA4C;;;;EAI3D,oBAAoB;;;;EAIpB;;;;;iBAMe,iCAAiC,0BAA0B;;;;EAI1E,wBAAwB;;;;EAIxB;;;;;iBAMe,uCAAuC,0BAA0B;;;;EAIhF,wBAAwB;;;;EAIxB;;;;;iBAMe,uCAAuC,0BAA0B;;;;EAIhF,wBAAwB;;;;EAIxB;;;;;iBAMe,6CAA6C,0BAA0B;;;;EAItF,wBAAwB;;;;;iBAMT,6BAA6B;;;;EAI5C,wBAAwB;;;;EAIxB;;;;;iBAMe,4BAA4B;;;;EAI3C,wBAAwB;;;;EAIxB,gBAAgB;;;;EAIhB,WAAW;;;;EAIX,SAAS;;;;EAIT,mBAAmB;;;;EAInB,kBAAkB;;;;EAIlB,mBAAmB;;;;EAInB;;;;EAIA,WAAW;;;;EAIX;;;;EAIA;;;;EAIA,gCAAgC;;;;EAIhC,wCAAwC;;;;EAIxC;;;;EAIA;;;;EAIA,uBAAuB;;;;EAIvB,iBAAiB;;;;EAIjB,wBAAwB;;;;EAIxB,sBAAsB;;;;EAItB;;;;;iBAMe,iCAAiC;;;;EAIhD,oBAAoB;;;;;iBAML,oCAAoC;;;;EAInD,wBAAwB;;;;EAIxB;;;;;YAMU,2CAA2C;;;;iBAKtC,gCAAgC;;;;EAI/C;;;;EAIA;;;;;iBAMe,kCAAkC;;;;EAIjD;;;;EAIA,UAAU;;;;;iBAMK,gCAAgC;;;;EAI/C;;;;;iBAMe,gCAAgC;;;;EAI/C;;;;;iBAMe,8BAA8B;;;;EAI7C;;;;EAIA;;;;EAIA;;;;;iBAMe,8BAA8B;;;;EAI7C;;;;EAIA;;;;;iBAMe,oCAAoC;;;;EAInD,mBAAmB;;;;EAInB;;;;;iBAMe,oCAAoC;;;;EAInD,mBAAmB;;;;EAInB;;;;;iBAMe,wCAAwC;;;;EAIvD,wBAAwB;;;;EAIxB;;;;EAIA;;;;;iBAMe,qCAAqC;;;;EAIpD,WAAW;;;;EAIX;;;;;;;;iBASe;;;;;;EAMf,wBAAwB,OAAO,+BAA+B,QAAQC;;;;;;EAOtE,gBAAgB,OAAO,uBAAuB,QAAQC;;;;;;EAOtD,6BAA6B,OAAO,oCAAoC,QAAQC;;;;;;EAOhF,gBAAgB,OAAO,uBAAuB,QAAQC;;;;;;EAOtD,cAAc,OAAO,qBAAqB,QAAQA;;;;;;EAOlD,aAAa,OAAO,oBAAoB,QAAQH;;;;;;EAOhD,oBAAoB,OAAO,2BAA2B,QAAQG;;;;;;EAO9D,+BAA+B,OAAO,sCAAsC,QAAQA;;;;;;EAOpF,oBAAoB,OAAO,2BAA2B,QAAQA;;;;;;EAO9D,0BAA0B,OAAO,iCAAiC,QAAQA;;;;;;EAO1E,0BAA0B,OAAO,iCAAiC,QAAQA;;;;;;EAO1E,cAAc,OAAO,4BAA4B,QAAQA;;;;;;EAOzD,iBAAiB,OAAO,uCAAuC,QAAQA;;;;;;EAOvE,eAAe,OAAO,4BAA4B,QAAQC;;;;;;EAO1D,gBAAgB,OAAO,uBAAuB,QAAQA;;;;;;EAOtD,qBAAqB,OAAO,4BAA4B,QAAQC;;;;;;EAOhE,+BAA+B,OAAO,4BAA4B,QAAQC;;;;;;EAO1E,cAAc,OAAO,4BAA4B,QAAQC;;;;;;EAOzD,eAAe,OAAO,sBAAsB,QAAQC;;;;;;EAOpD,eAAe,OAAO,4BAA4B,QAAQC;;;;;;EAO1D,oBAAoB,OAAO,2BAA2B,QAAQC;;;;;;EAO9D,mBAAmB,OAAO,4BAA4B,QAAQA;;;;;;EAO9D,kBAAkB,OAAO,4BAA4B,QAAQA;;;;;;EAO7D,2BAA2B,OAAO,4BAA4B,QAAQA;;;;;;EAOtE,wBAAwB,OAAO,4BAA4B,QAAQA;;;;;;EAOnE,uBAAuB,OAAO,8BAA8B,QAAQA;;;;;;EAOpE,kBAAkB,OAAO,4BAA4B,QAAQA;;;;;;EAO7D,iBAAiB,OAAO,4BAA4B,QAAQA;;;;;;EAO5D,oCAAoC,OAAO,2CAA2C,QAAQA;;;;;;EAO9F,mBAAmB,OAAO,0BAA0B,QAAQP;;;;;;EAO5D,qBAAqB,OAAO,4BAA4B,QAAQA;;;;;;EAOhE,mBAAmB,OAAO,0BAA0B,QAAQA;;;;;;EAO5D,iBAAiB,OAAO,4BAA4B,QAAQQ;;;;;;EAO5D,mBAAmB,OAAO,0BAA0B,QAAQR;;;;;;EAO5D,iBAAiB,OAAO,wBAAwB,QAAQA;;;;;;EAOxD,iBAAiB,OAAO,wBAAwB,QAAQA;;;;;;EAOxD,uBAAuB,OAAO,8BAA8B,QAAQA;;;;;;EAOpE,uBAAuB,OAAO,8BAA8B,QAAQA;;;;;;EAOpE,2BAA2B,OAAO,kCAAkC,QAAQA;;;;;;EAO5E,qBAAqB,OAAO,4BAA4B,QAAQS;;;;;;EAOhE,wBAAwB,OAAO,+BAA+B,QAAQT;;;;;;EAOtE,qBAAqB,OAAO,4BAA4B,QAAQU;;;;;;EAOhE,iCAAiC,OAAO,4BAA4B,QAAQH;;;;;;EAO5E,gCAAgC,OAAO,4BAA4B,QAAQI;;;;;;EAO3E,8BAA8B,OAAO,4BAA4B,QAAQX;;;;;;EAOzE,sBAAsB,OAAO,4BAA4B,QAAQY;;UCnvClD;EACf;EACA;EACA;;;;;;EAOA;;;;;;EAOA;;;;;;EAOA;;;;;;EAOA;;;;;;EAOA;;;;;;EAOA;;;;;;EAOA;;;;;;EAOA;;;;EAKA,WAAW,OAAO;;;;;UAMH;EACf;IACE,YAAY;;;;;;wBC/CA,oBAAoB,QAAQ,sBAAsB;;;;;qBCtBrD"}
package/dist/index.mjs CHANGED
@@ -1,7 +1,7 @@
1
1
  import { PopbillErrorStage, PopbillErrorType, createInputValidationError, normalizePopbillError } from "@connextable/popbill-compat/errors";
2
2
  import { normalizeOptionalString, normalizeRequiredString, toBoolean } from "@connextable/popbill-utils";
3
3
  import { createTaxinvoicePromiseService } from "@connextable/popbill-compat/factory";
4
- //#region src/services/tax-invoice/adapters/error.ts
4
+ // src/services/tax-invoice/adapters/error.ts
5
5
  /**
6
6
  * TaxInvoice facade 메서드를 실행하고 예외를 `PopbillApiError`로 표준화합니다.
7
7
  */
@@ -20,14 +20,13 @@ async function invokeTaxInvoiceMethod(context, operation, handler) {
20
20
  function safelyDispatchError(handler, error) {
21
21
  if (!handler) return;
22
22
  try {
23
- handler(error);
23
+ Promise.resolve(handler(error)).catch(() => void 0);
24
24
  } catch {}
25
25
  }
26
26
  function toThrowablePopbillError(error) {
27
27
  return Object.assign(new Error(error.message), error);
28
28
  }
29
- //#endregion
30
- //#region src/services/tax-invoice/mappers/document.ts
29
+ // src/services/tax-invoice/mappers/document.ts
31
30
  /**
32
31
  * modern 세금계산서 문서 입력을 compat 세금계산서 API 모델로 변환합니다.
33
32
  */
@@ -195,8 +194,7 @@ function removeUndefinedProperties$1(sourceObject) {
195
194
  const definedEntries = Object.entries(sourceObject).filter(([, value]) => value !== void 0);
196
195
  return Object.fromEntries(definedEntries);
197
196
  }
198
- //#endregion
199
- //#region src/services/tax-invoice/mappers/invoice-info.ts
197
+ // src/services/tax-invoice/mappers/invoice-info.ts
200
198
  /**
201
199
  * compat `getInfo` 응답을 modern TaxInvoiceInfo로 변환합니다.
202
200
  */
@@ -242,14 +240,13 @@ function mapTaxInvoiceInfo(response) {
242
240
  }
243
241
  function toRequiredStateCode(value) {
244
242
  if (typeof value === "number" && Number.isFinite(value)) return value;
245
- if (typeof value === "string") {
243
+ if (typeof value === "string" && value.trim() !== "") {
246
244
  const normalizedNumber = Number(value);
247
245
  if (Number.isFinite(normalizedNumber)) return normalizedNumber;
248
246
  }
249
247
  throw new Error(`유효하지 않은 stateCode 응답값입니다. (${String(value)})`);
250
248
  }
251
- //#endregion
252
- //#region src/services/tax-invoice/types/document.ts
249
+ // src/services/tax-invoice/types/document.ts
253
250
  /**
254
251
  * 세금계산서 과금 방향 값입니다.
255
252
  */
@@ -389,8 +386,7 @@ const TaxInvoiceModificationReasonCodes = {
389
386
  */
390
387
  DuplicateIssuanceByMistake: 6
391
388
  };
392
- //#endregion
393
- //#region src/services/tax-invoice/types/response.ts
389
+ // src/services/tax-invoice/types/response.ts
394
390
  /**
395
391
  * 초대량 처리 상태 값입니다.
396
392
  */
@@ -408,8 +404,7 @@ const TaxInvoiceBulkIssueSubmissionTransactionStates = {
408
404
  */
409
405
  Completed: 2
410
406
  };
411
- //#endregion
412
- //#region src/services/tax-invoice/types/index.ts
407
+ // src/services/tax-invoice/types/index.ts
413
408
  /**
414
409
  * 세금계산서 문서번호 유형 상수입니다.
415
410
  */
@@ -732,8 +727,7 @@ const TaxInvoiceEmailTypes = {
732
727
  * 수정세금계산서 사유코드입니다.
733
728
  */
734
729
  const TaxInvoiceModificationCodes = TaxInvoiceModificationReasonCodes;
735
- //#endregion
736
- //#region src/services/tax-invoice/mappers/response.ts
730
+ // src/services/tax-invoice/mappers/response.ts
737
731
  /**
738
732
  * 공통 API 처리결과를 도메인 처리결과로 변환합니다.
739
733
  */
@@ -750,7 +744,7 @@ function mapTaxInvoiceIssueResult(taxInvoiceApiResponse) {
750
744
  return removeUndefinedProperties({
751
745
  ...mapTaxInvoiceOperationResult(taxInvoiceApiResponse),
752
746
  nationalTaxServiceConfirmationNumber: taxInvoiceApiResponse.ntsConfirmNum,
753
- issuedAt: taxInvoiceApiResponse.issueDT
747
+ issuedAt: taxInvoiceApiResponse.issueDT ?? void 0
754
748
  });
755
749
  }
756
750
  /**
@@ -770,10 +764,11 @@ function mapTaxInvoiceBulkIssueSubmissionResult(taxInvoiceApiResponse) {
770
764
  ...mapTaxInvoiceOperationResult(taxInvoiceApiResponse),
771
765
  receiptIdentifier: taxInvoiceApiResponse.receiptID,
772
766
  submissionIdentifier: taxInvoiceApiResponse.submitID,
767
+ receivedAt: taxInvoiceApiResponse.receiptDT,
773
768
  submittedDocumentCount: toOptionalNumber(taxInvoiceApiResponse.submitCount),
774
769
  succeededDocumentCount: toOptionalNumber(taxInvoiceApiResponse.successCount),
775
770
  failedDocumentCount: toOptionalNumber(taxInvoiceApiResponse.failCount),
776
- transactionState: toOptionalNumber(taxInvoiceApiResponse.txState),
771
+ transactionState: toTaxInvoiceBulkIssueSubmissionTransactionState(taxInvoiceApiResponse.txState),
777
772
  transactionStartedAt: taxInvoiceApiResponse.txStartDT,
778
773
  transactionCompletedAt: taxInvoiceApiResponse.txEndDT,
779
774
  transactionResultCode: toOptionalNumber(taxInvoiceApiResponse.txResultCode),
@@ -958,7 +953,7 @@ function mapTaxInvoiceTaxCertificateInfo(taxInvoiceApiResponse) {
958
953
  issuerDistinguishedName: taxInvoiceApiResponse.issuerDN,
959
954
  subjectDistinguishedName: taxInvoiceApiResponse.subjectDN,
960
955
  issuerName: taxInvoiceApiResponse.issuerName,
961
- policyObjectIdentifier: taxInvoiceApiResponse.OID,
956
+ policyObjectIdentifier: taxInvoiceApiResponse.OID ?? taxInvoiceApiResponse.oid,
962
957
  registeredContactName: taxInvoiceApiResponse.regContactName,
963
958
  registeredContactIdentifier: taxInvoiceApiResponse.regContactID
964
959
  });
@@ -1072,8 +1067,8 @@ function mapTrusteeOutput(taxInvoiceApiResponse) {
1072
1067
  * 문자열/숫자 값을 숫자로 안전하게 변환합니다.
1073
1068
  */
1074
1069
  function toOptionalNumber(value) {
1075
- if (value === void 0) return;
1076
1070
  if (typeof value === "number") return Number.isFinite(value) ? value : void 0;
1071
+ if (typeof value !== "string" || value.trim() === "") return;
1077
1072
  const normalizedNumber = Number(value);
1078
1073
  return Number.isFinite(normalizedNumber) ? normalizedNumber : void 0;
1079
1074
  }
@@ -1083,6 +1078,13 @@ function toRequiredNumber(value, fieldName) {
1083
1078
  throw new Error(`유효하지 않은 ${fieldName} 응답값입니다. (${String(value)})`);
1084
1079
  }
1085
1080
  /**
1081
+ * 초대량 처리 상태를 지원하는 도메인 상태값으로 정규화합니다.
1082
+ */
1083
+ function toTaxInvoiceBulkIssueSubmissionTransactionState(value) {
1084
+ const transactionState = toOptionalNumber(value);
1085
+ return transactionState === 0 || transactionState === 1 || transactionState === 2 ? transactionState : void 0;
1086
+ }
1087
+ /**
1086
1088
  * 불리언 문자열/값을 불리언으로 안전하게 변환합니다.
1087
1089
  */
1088
1090
  function toOptionalBoolean(value) {
@@ -1110,8 +1112,7 @@ function removeUndefinedProperties(sourceObject) {
1110
1112
  const definedEntries = Object.entries(sourceObject).filter(([, value]) => value !== void 0);
1111
1113
  return Object.fromEntries(definedEntries);
1112
1114
  }
1113
- //#endregion
1114
- //#region src/services/tax-invoice/service.ts
1115
+ // src/services/tax-invoice/service.ts
1115
1116
  const KOREA_TIME_ZONE = "Asia/Seoul";
1116
1117
  const SEARCH_STATE_CODE_PATTERN = /^\d[\d*][\d*]$/;
1117
1118
  const KOREA_DATE_FORMATTER = new Intl.DateTimeFormat("en-US", {
@@ -1481,15 +1482,14 @@ function normalizeCodeValue(codeValue, allowedValues, fieldName, operation) {
1481
1482
  stage: PopbillErrorStage.ValidateInput
1482
1483
  });
1483
1484
  }
1484
- //#endregion
1485
- //#region src/internal/compat/tax-invoice-service.ts
1485
+ // src/internal/compat/tax-invoice-service.ts
1486
1486
  const DEFAULT_REQUEST_TIMEOUT_MILLISECONDS$1 = 18e4;
1487
1487
  const DEFAULT_ACCEPT_ENCODING$1 = "gzip";
1488
1488
  /**
1489
1489
  * `@connextable/popbill-compat` Taxinvoice promise 서비스를 client 단위 인스턴스로 생성합니다.
1490
1490
  */
1491
1491
  function createCompatTaxInvoiceService(input) {
1492
- return createTaxinvoicePromiseService({
1492
+ const compatConfig = {
1493
1493
  LinkID: input.linkId,
1494
1494
  SecretKey: input.secretKey,
1495
1495
  IsTest: input.isTest ?? false,
@@ -1500,11 +1500,12 @@ function createCompatTaxInvoiceService(input) {
1500
1500
  requestTimeoutMs: input.requestTimeoutMilliseconds ?? DEFAULT_REQUEST_TIMEOUT_MILLISECONDS$1,
1501
1501
  acceptLanguage: normalizeOptionalString(input.acceptLanguage),
1502
1502
  acceptEncoding: input.acceptEncoding === void 0 ? DEFAULT_ACCEPT_ENCODING$1 : input.acceptEncoding
1503
- });
1503
+ };
1504
+ return createTaxinvoicePromiseService(compatConfig);
1504
1505
  }
1505
- //#endregion
1506
- //#region src/client/index.ts
1506
+ // src/client/index.ts
1507
1507
  const DEFAULT_REQUEST_TIMEOUT_MILLISECONDS = 18e4;
1508
+ const MAX_REQUEST_TIMEOUT_MILLISECONDS = 2147483647;
1508
1509
  const DEFAULT_ACCEPT_ENCODING = "gzip";
1509
1510
  /**
1510
1511
  * modern Popbill client를 생성합니다.
@@ -1538,11 +1539,10 @@ function normalizeClientConfiguration(config) {
1538
1539
  }
1539
1540
  function normalizeRequestTimeoutMilliseconds(requestTimeoutMs) {
1540
1541
  if (requestTimeoutMs === void 0) return DEFAULT_REQUEST_TIMEOUT_MILLISECONDS;
1541
- if (!Number.isInteger(requestTimeoutMs) || requestTimeoutMs <= 0) throw new Error("requestTimeoutMs는 1 이상의 정수여야 합니다.");
1542
+ if (!Number.isInteger(requestTimeoutMs) || requestTimeoutMs <= 0 || requestTimeoutMs > MAX_REQUEST_TIMEOUT_MILLISECONDS) throw new Error(`requestTimeoutMs는 1 이상 ${MAX_REQUEST_TIMEOUT_MILLISECONDS} 이하의 정수여야 합니다.`);
1542
1543
  return requestTimeoutMs;
1543
1544
  }
1544
- //#endregion
1545
- //#region src/services/tax-invoice/methods.ts
1545
+ // src/services/tax-invoice/methods.ts
1546
1546
  /**
1547
1547
  * TaxInvoice modern facade 공개 메서드 목록입니다.
1548
1548
  * 문서 섹션(발행/전송, 정보확인, 보기/인쇄, 부가기능, 인증서 관리) 순서를 유지합니다.
@@ -1595,5 +1595,6 @@ const TAX_INVOICE_METHODS = [
1595
1595
  "checkTaxCertificateValidation",
1596
1596
  "getTaxCertificateInfo"
1597
1597
  ];
1598
- //#endregion
1599
1598
  export { PopbillErrorStage, PopbillErrorType, TAX_INVOICE_METHODS, TaxInvoiceBoxScopes, TaxInvoiceBulkIssueSubmissionTransactionStates, TaxInvoiceBusinessStatusValues, TaxInvoiceChargeDirectionValues, TaxInvoiceCloseDownStateCodes, TaxInvoiceDateType, TaxInvoiceDocumentKeyTypes, TaxInvoiceEmailTypes, TaxInvoiceIssueTypes, TaxInvoiceModificationCodes, TaxInvoiceModificationReasonCodes, TaxInvoicePurposeTypes, TaxInvoiceRecipientTypes, TaxInvoiceSearchInteroperabilityTypes, TaxInvoiceSearchInvoiceTypeCodes, TaxInvoiceSearchIssueTypeCodes, TaxInvoiceSearchRegistrationTypeCodes, TaxInvoiceSearchTaxRegistrationIdentifierAvailabilities, TaxInvoiceSearchTaxRegistrationIdentifierTypes, TaxInvoiceSearchTaxationTypeCodes, TaxInvoiceSortOrder, TaxInvoiceStatementItemCodes, TaxInvoiceTaxationTypes, createPopbillClient };
1599
+
1600
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":["removeUndefinedProperties","documentMappers.mapTaxInvoiceDocument","responseMappers.mapTaxInvoiceIssueResult","documentMappers.mapTaxInvoiceDocuments","responseMappers.mapTaxInvoiceBulkSubmitResult","responseMappers.mapTaxInvoiceBulkIssueSubmissionResult","responseMappers.mapTaxInvoiceOperationResult","invoiceInfoMappers.mapTaxInvoiceInfo","responseMappers.mapTaxInvoiceInfos","responseMappers.mapTaxInvoiceDocumentOutput","responseMappers.mapTaxInvoiceInvoiceManagementKeyUsage","responseMappers.mapTaxInvoiceXmlResult","responseMappers.mapTaxInvoiceSearchResult","responseMappers.mapTaxInvoiceLogs","responseMappers.mapTaxInvoiceAccessUrlFromString","responseMappers.mapTaxInvoiceAccessUrl","responseMappers.mapTaxInvoiceAttachedFiles","responseMappers.mapTaxInvoiceEmailSendSettings","responseMappers.mapTaxInvoiceSendToNationalTaxServiceSetting","responseMappers.mapTaxInvoiceTaxCertificateExpiration","responseMappers.mapTaxInvoiceTaxCertificateInfo","taxInvoiceTypes.TaxInvoiceDateType","taxInvoiceTypes.TaxInvoiceSearchInvoiceTypeCodes","taxInvoiceTypes.TaxInvoiceSearchTaxationTypeCodes","taxInvoiceTypes.TaxInvoiceSortOrder","taxInvoiceTypes.TaxInvoiceSearchTaxRegistrationIdentifierTypes","taxInvoiceTypes.TaxInvoiceSearchTaxRegistrationIdentifierAvailabilities","taxInvoiceTypes.TaxInvoiceSearchInteroperabilityTypes","taxInvoiceTypes.TaxInvoiceSearchIssueTypeCodes","taxInvoiceTypes.TaxInvoiceSearchRegistrationTypeCodes","taxInvoiceTypes.TaxInvoiceCloseDownStateCodes","taxInvoiceTypes.TaxInvoiceStatementItemCodes","taxInvoiceTypes.TaxInvoiceEmailTypes","DEFAULT_REQUEST_TIMEOUT_MILLISECONDS","DEFAULT_ACCEPT_ENCODING"],"sources":["../src/services/tax-invoice/adapters/error.ts","../src/services/tax-invoice/mappers/document.ts","../src/services/tax-invoice/mappers/invoice-info.ts","../src/services/tax-invoice/types/document.ts","../src/services/tax-invoice/types/response.ts","../src/services/tax-invoice/types/index.ts","../src/services/tax-invoice/mappers/response.ts","../src/services/tax-invoice/service.ts","../src/internal/compat/tax-invoice-service.ts","../src/client/index.ts","../src/services/tax-invoice/methods.ts"],"sourcesContent":["import { normalizePopbillError } from '@connextable/popbill-compat/errors'\nimport type { PopbillApiError } from '@/errors'\n\n/**\n * TaxInvoice facade 메서드 공통 에러 처리 컨텍스트입니다.\n */\nexport interface TaxInvoiceErrorHandlingContext {\n onError?: (error: PopbillApiError) => void\n}\n\n/**\n * TaxInvoice facade 메서드를 실행하고 예외를 `PopbillApiError`로 표준화합니다.\n */\nexport async function invokeTaxInvoiceMethod<T>(context: TaxInvoiceErrorHandlingContext, operation: string, handler: () => Promise<T>): Promise<T> {\n try {\n return await handler()\n } catch (error) {\n const normalizedError = normalizePopbillError(error, { operation })\n const throwableError = toThrowablePopbillError(normalizedError)\n safelyDispatchError(context.onError, throwableError)\n throw throwableError\n }\n}\n\n/**\n * 에러 훅이 예외를 던져도 원래 API 에러를 보존하기 위해 안전하게 호출합니다.\n */\nfunction safelyDispatchError(handler: ((error: PopbillApiError) => void) | undefined, error: PopbillApiError): void {\n if (!handler) {\n return\n }\n\n try {\n void Promise.resolve(handler(error)).catch(() => undefined)\n } catch {\n // onError 훅 예외는 삼켜서 원래 API 에러를 유지합니다.\n }\n}\n\nfunction toThrowablePopbillError(error: PopbillApiError): Error & PopbillApiError {\n return Object.assign(new Error(error.message), error)\n}\n","import type {\n TaxInvoiceAdditionalContactInput,\n TaxInvoiceBuyerInput,\n TaxInvoiceDocumentInput,\n TaxInvoiceLineItemInput,\n TaxInvoicePartyInput,\n} from '@/services/tax-invoice/types'\nimport type * as Spec from '@connextable/popbill-spec'\n\n/**\n * modern 세금계산서 문서 입력을 compat 세금계산서 API 모델로 변환합니다.\n */\nexport function mapTaxInvoiceDocument(taxInvoiceDocumentInput: TaxInvoiceDocumentInput): Spec.TaxInvoiceApiModel {\n return removeUndefinedProperties({\n writeSpecification: taxInvoiceDocumentInput.writeSpecificationEnabled,\n writeDate: taxInvoiceDocumentInput.writtenDate,\n chargeDirection: taxInvoiceDocumentInput.chargeDirection,\n issueType: taxInvoiceDocumentInput.issueType,\n purposeType: taxInvoiceDocumentInput.purposeType,\n issueTiming: taxInvoiceDocumentInput.issueTimingCode,\n taxType: taxInvoiceDocumentInput.taxType,\n ...mapSupplierFields(taxInvoiceDocumentInput.supplier),\n ...mapBuyerFields(taxInvoiceDocumentInput.buyer),\n ...mapTrusteeFields(taxInvoiceDocumentInput.trustee),\n taxTotal: taxInvoiceDocumentInput.paymentSummary?.totalTaxAmount,\n supplyCostTotal: taxInvoiceDocumentInput.paymentSummary?.totalSupplyCostAmount,\n totalAmount: taxInvoiceDocumentInput.paymentSummary?.totalAmount,\n cash: taxInvoiceDocumentInput.paymentSummary?.cashAmount,\n chkBill: taxInvoiceDocumentInput.paymentSummary?.checkAmount,\n note: taxInvoiceDocumentInput.paymentSummary?.promissoryNoteAmount,\n credit: taxInvoiceDocumentInput.paymentSummary?.creditAmount,\n modifyCode: taxInvoiceDocumentInput.modification?.modificationReasonCode,\n orgNTSConfirmNum: taxInvoiceDocumentInput.modification?.originalNationalTaxServiceConfirmationNumber,\n serialNum: taxInvoiceDocumentInput.taxInvoiceSerialNumber,\n remark1: taxInvoiceDocumentInput.remarkOne,\n remark2: taxInvoiceDocumentInput.remarkTwo,\n remark3: taxInvoiceDocumentInput.remarkThree,\n kwon: taxInvoiceDocumentInput.bookVolumeNumber,\n ho: taxInvoiceDocumentInput.bookIssueNumber,\n businessLicenseYN: taxInvoiceDocumentInput.includeBusinessLicenseImage,\n bankBookYN: taxInvoiceDocumentInput.includeBankBookImage,\n detailList: taxInvoiceDocumentInput.lineItems?.map(mapLineItem),\n addContactList: taxInvoiceDocumentInput.additionalContacts?.map(mapAdditionalContact),\n })\n}\n\n/**\n * modern 세금계산서 문서 입력 목록을 compat 세금계산서 API 모델 목록으로 변환합니다.\n */\nexport function mapTaxInvoiceDocuments(taxInvoiceDocumentInputs: TaxInvoiceDocumentInput[]): Spec.TaxInvoiceApiModel[] {\n return taxInvoiceDocumentInputs.map(mapTaxInvoiceDocument)\n}\n\n/**\n * 공급자 입력을 raw 공급자 필드로 변환합니다.\n */\nfunction mapSupplierFields(supplierInput: TaxInvoicePartyInput | undefined): Partial<Spec.TaxInvoiceApiModel> {\n if (!supplierInput) {\n return {}\n }\n\n return removeUndefinedProperties({\n invoicerCorpNum: supplierInput.businessNumber,\n invoicerMgtKey: supplierInput.managementKey,\n invoicerTaxRegID: supplierInput.taxRegistrationIdentifier,\n invoicerCorpName: supplierInput.companyName,\n invoicerCEOName: supplierInput.chiefExecutiveOfficerName,\n invoicerAddr: supplierInput.address,\n invoicerBizClass: supplierInput.businessClass,\n invoicerBizType: supplierInput.businessType,\n invoicerContactName: supplierInput.contactName,\n invoicerTEL: supplierInput.telephoneNumber,\n invoicerHP: supplierInput.mobilePhoneNumber,\n invoicerEmail: supplierInput.emailAddress,\n invoicerSMSSendYN: supplierInput.sendTextMessage,\n invoicerPrintYN: supplierInput.printEnabled,\n invoicerRDN: supplierInput.residentRegistrationNumber,\n invoicerOLN: supplierInput.foreignerRegistrationNumber,\n invoicerTaxNum: supplierInput.branchBusinessNumber,\n invoicerPSerialNum: supplierInput.branchSerialNumber,\n invoicerCorpCls: supplierInput.corporationClassification,\n invoicerDeptName: supplierInput.departmentName,\n })\n}\n\n/**\n * 공급받는자 입력을 raw 공급받는자 필드로 변환합니다.\n */\nfunction mapBuyerFields(buyerInput: TaxInvoiceBuyerInput | undefined): Partial<Spec.TaxInvoiceApiModel> {\n if (!buyerInput) {\n return {}\n }\n\n return removeUndefinedProperties({\n invoiceeType: buyerInput.recipientType,\n invoiceeCorpNum: buyerInput.businessNumber,\n invoiceeMgtKey: buyerInput.managementKey,\n invoiceeTaxRegID: buyerInput.taxRegistrationIdentifier,\n invoiceeCorpName: buyerInput.companyName,\n invoiceeCEOName: buyerInput.chiefExecutiveOfficerName,\n invoiceeAddr: buyerInput.address,\n invoiceeBizClass: buyerInput.businessClass,\n invoiceeBizType: buyerInput.businessType,\n invoiceeContactName1: buyerInput.contactName,\n invoiceeTEL1: buyerInput.telephoneNumber,\n invoiceeHP1: buyerInput.mobilePhoneNumber,\n invoiceeEmail1: buyerInput.emailAddress,\n invoiceeContactName2: buyerInput.secondaryContactName,\n invoiceeTEL2: buyerInput.secondaryTelephoneNumber,\n invoiceeHP2: buyerInput.secondaryMobilePhoneNumber,\n invoiceeEmail2: buyerInput.secondaryEmailAddress,\n invoiceeSMSSendYN: buyerInput.sendTextMessage,\n invoiceePrintYN: buyerInput.printEnabled,\n invoiceeRDN: buyerInput.residentRegistrationNumber,\n invoiceeOLN: buyerInput.foreignerRegistrationNumber,\n invoiceeTaxNum: buyerInput.branchBusinessNumber,\n invoiceePSerialNum: buyerInput.branchSerialNumber,\n invoiceeCorpCls: buyerInput.corporationClassification,\n invoiceeDeptName1: buyerInput.primaryDepartmentName ?? buyerInput.departmentName,\n invoiceeDeptName2: buyerInput.secondaryDepartmentName,\n closeDownState: buyerInput.businessStatus,\n closeDownStateDate: buyerInput.businessStatusDate,\n })\n}\n\n/**\n * 수탁자 입력을 raw 수탁자 필드로 변환합니다.\n */\nfunction mapTrusteeFields(trusteeInput: TaxInvoicePartyInput | undefined): Partial<Spec.TaxInvoiceApiModel> {\n if (!trusteeInput) {\n return {}\n }\n\n return removeUndefinedProperties({\n trusteeCorpNum: trusteeInput.businessNumber,\n trusteeMgtKey: trusteeInput.managementKey,\n trusteeTaxRegID: trusteeInput.taxRegistrationIdentifier,\n trusteeCorpName: trusteeInput.companyName,\n trusteeCEOName: trusteeInput.chiefExecutiveOfficerName,\n trusteeAddr: trusteeInput.address,\n trusteeBizClass: trusteeInput.businessClass,\n trusteeBizType: trusteeInput.businessType,\n trusteeContactName: trusteeInput.contactName,\n trusteeTEL: trusteeInput.telephoneNumber,\n trusteeHP: trusteeInput.mobilePhoneNumber,\n trusteeEmail: trusteeInput.emailAddress,\n trusteeSMSSendYN: trusteeInput.sendTextMessage,\n trusteePrintYN: trusteeInput.printEnabled,\n trusteeRDN: trusteeInput.residentRegistrationNumber,\n trusteeOLN: trusteeInput.foreignerRegistrationNumber,\n trusteeTaxNum: trusteeInput.branchBusinessNumber,\n trusteePSerialNum: trusteeInput.branchSerialNumber,\n trusteeCorpCls: trusteeInput.corporationClassification,\n trusteeDeptName: trusteeInput.departmentName,\n })\n}\n\n/**\n * 상세 품목 입력을 raw 상세 품목 모델로 변환합니다.\n */\nfunction mapLineItem(lineItemInput: TaxInvoiceLineItemInput): NonNullable<Spec.TaxInvoiceApiModel['detailList']>[number] {\n return {\n serialNum: lineItemInput.lineNumber,\n purchaseDT: lineItemInput.transactionDate,\n itemName: lineItemInput.itemName,\n spec: lineItemInput.specification,\n qty: lineItemInput.quantity,\n unitCost: lineItemInput.unitCostAmount,\n supplyCost: lineItemInput.supplyCostAmount,\n tax: lineItemInput.taxAmount,\n remark: lineItemInput.remark,\n }\n}\n\n/**\n * 추가 담당자 입력을 raw 추가 담당자 모델로 변환합니다.\n */\nfunction mapAdditionalContact(\n additionalContactInput: TaxInvoiceAdditionalContactInput\n): NonNullable<Spec.TaxInvoiceApiModel['addContactList']>[number] {\n return {\n serialNum: additionalContactInput.sequenceNumber,\n contactName: additionalContactInput.contactName,\n email: additionalContactInput.emailAddress,\n }\n}\n\n/**\n * 객체에서 `undefined` 값만 제거하여 API 요청 본문을 정리합니다.\n */\nfunction removeUndefinedProperties<T extends Record<string, unknown>>(sourceObject: T): T {\n const definedEntries = Object.entries(sourceObject).filter(([, value]) => value !== undefined)\n return Object.fromEntries(definedEntries) as T\n}\n","import { toBoolean } from '@connextable/popbill-utils'\nimport type { TaxInvoiceInfo } from '@/services/tax-invoice/types'\nimport type * as Spec from '@connextable/popbill-spec'\n\n/**\n * compat `getInfo` 응답을 modern TaxInvoiceInfo로 변환합니다.\n */\nexport function mapTaxInvoiceInfo(response: Spec.TaxInvoiceGetInfoApiResponse): TaxInvoiceInfo {\n return {\n itemKey: response.itemKey,\n taxType: response.taxType,\n writtenDate: response.writeDate,\n registeredAt: response.regDT,\n issueType: response.issueType,\n totalSupplyCost: response.supplyCostTotal,\n totalTax: response.taxTotal,\n purposeType: response.purposeType,\n issuedAt: response.issueDT,\n isLateIssued: toBoolean(response.lateIssueYN),\n isOpen: toBoolean(response.openYN),\n openedAt: response.openDT,\n stateMemo: response.stateMemo,\n stateCode: toRequiredStateCode(response.stateCode),\n stateChangedAt: response.stateDT,\n nationalTaxServiceConfirmationNumber: response.ntsconfirmNum,\n nationalTaxServiceResult: response.ntsresult,\n nationalTaxServiceSentAt: response.ntssendDT,\n nationalTaxServiceResultReceivedAt: response.ntsresultDT,\n nationalTaxServiceSendErrorCode: response.ntssendErrCode,\n modificationCode: response.modifyCode,\n isApiLinkedDocument: toBoolean(response.interOPYN),\n supplierCompanyName: response.invoicerCorpName,\n supplierBusinessNumber: response.invoicerCorpNum,\n supplierManagementKey: response.invoicerMgtKey,\n isSupplierPrinted: toBoolean(response.invoicerPrintYN),\n buyerCompanyName: response.invoiceeCorpName,\n buyerBusinessNumber: response.invoiceeCorpNum,\n buyerManagementKey: response.invoiceeMgtKey,\n isBuyerPrinted: toBoolean(response.invoiceePrintYN),\n buyerBusinessStatus: response.closeDownState,\n buyerBusinessStatusDate: response.closeDownStateDate,\n trusteeCompanyName: response.trusteeCorpName,\n trusteeBusinessNumber: response.trusteeCorpNum,\n trusteeManagementKey: response.trusteeMgtKey,\n isTrusteePrinted: response.trusteePrintYN === undefined ? undefined : toBoolean(response.trusteePrintYN),\n }\n}\n\nfunction toRequiredStateCode(value: number | string): number {\n if (typeof value === 'number' && Number.isFinite(value)) {\n return value\n }\n\n if (typeof value === 'string' && value.trim() !== '') {\n const normalizedNumber = Number(value)\n if (Number.isFinite(normalizedNumber)) {\n return normalizedNumber\n }\n }\n\n throw new Error(`유효하지 않은 stateCode 응답값입니다. (${String(value)})`)\n}\n","/**\n * 작성일/일시 문자열 타입입니다.\n */\nexport type TaxInvoiceDateString = string\n\n/**\n * 세금계산서 과금 방향 값입니다.\n */\nexport const TaxInvoiceChargeDirectionValues = {\n /**\n * 값: `정과금`, 의미: 공급자에게 과금되는 일반 방향\n */\n NormalCharge: '정과금',\n /**\n * 값: `역과금`, 의미: 공급받는자에게 과금되는 역방향\n */\n ReverseCharge: '역과금',\n} as const\n\n/**\n * 세금계산서 과금 방향 타입입니다.\n */\nexport type TaxInvoiceChargeDirection = (typeof TaxInvoiceChargeDirectionValues)[keyof typeof TaxInvoiceChargeDirectionValues]\n\n/**\n * 세금계산서 발행 형태 값입니다.\n */\nexport const TaxInvoiceIssueTypes = {\n /**\n * 값: `정발행`, 의미: 공급자 중심의 일반 발행\n */\n Normal: '정발행',\n /**\n * 값: `역발행`, 의미: 공급받는자 요청 기반 발행\n */\n Reverse: '역발행',\n /**\n * 값: `위수탁`, 의미: 수탁자 대행 발행\n */\n Trustee: '위수탁',\n} as const\n\n/**\n * 세금계산서 발행 형태 타입입니다.\n */\nexport type TaxInvoiceIssueType = (typeof TaxInvoiceIssueTypes)[keyof typeof TaxInvoiceIssueTypes]\n\n/**\n * 세금계산서 영수/청구 값입니다.\n */\nexport const TaxInvoicePurposeTypes = {\n /**\n * 값: `영수`, 의미: 영수 목적\n */\n Receipt: '영수',\n /**\n * 값: `청구`, 의미: 청구 목적\n */\n Claim: '청구',\n /**\n * 값: `없음`, 의미: 목적 구분 없음\n */\n None: '없음',\n} as const\n\n/**\n * 세금계산서 영수/청구 타입입니다.\n */\nexport type TaxInvoicePurposeType = (typeof TaxInvoicePurposeTypes)[keyof typeof TaxInvoicePurposeTypes]\n\n/**\n * 세금계산서 과세 유형 값입니다.\n */\nexport const TaxInvoiceTaxationTypes = {\n /**\n * 값: `과세`, 의미: 일반 과세\n */\n Taxable: '과세',\n /**\n * 값: `영세`, 의미: 영세율\n */\n ZeroRated: '영세',\n /**\n * 값: `면세`, 의미: 면세\n */\n Exempt: '면세',\n} as const\n\n/**\n * 세금계산서 과세 유형 타입입니다.\n */\nexport type TaxInvoiceTaxationType = (typeof TaxInvoiceTaxationTypes)[keyof typeof TaxInvoiceTaxationTypes]\n\n/**\n * 공급받는자 구분 값입니다.\n */\nexport const TaxInvoiceRecipientTypes = {\n /**\n * 값: `사업자`, 의미: 사업자 번호 기반\n */\n Business: '사업자',\n /**\n * 값: `개인`, 의미: 주민등록번호 기반\n */\n Individual: '개인',\n /**\n * 값: `외국인`, 의미: 외국인 식별번호 기반\n */\n Foreigner: '외국인',\n} as const\n\n/**\n * 공급받는자 구분 타입입니다.\n */\nexport type TaxInvoiceRecipientType = (typeof TaxInvoiceRecipientTypes)[keyof typeof TaxInvoiceRecipientTypes]\n\n/**\n * 공급받는자 휴폐업 상태 값입니다.\n */\nexport const TaxInvoiceBusinessStatusValues = {\n /**\n * 값: `null`, 의미: 미확인\n */\n NotChecked: null,\n /**\n * 값: `0`, 의미: 미등록\n */\n NotRegistered: 0,\n /**\n * 값: `1`, 의미: 사업중\n */\n Operating: 1,\n /**\n * 값: `2`, 의미: 폐업\n */\n Closed: 2,\n /**\n * 값: `3`, 의미: 휴업\n */\n Suspended: 3,\n /**\n * 값: `4`, 의미: 확인실패\n */\n CheckFailed: 4,\n} as const\n\n/**\n * 공급받는자 휴폐업 상태 타입입니다.\n */\nexport type TaxInvoiceBusinessStatus = (typeof TaxInvoiceBusinessStatusValues)[keyof typeof TaxInvoiceBusinessStatusValues]\n\n/**\n * 수정세금계산서 사유코드 값입니다.\n */\nexport const TaxInvoiceModificationReasonCodes = {\n /**\n * 값: `1`, 의미: 기재사항 착오 정정\n */\n CorrectingEntryErrors: 1,\n /**\n * 값: `2`, 의미: 공급가액 변동\n */\n SupplyAmountAdjustment: 2,\n /**\n * 값: `3`, 의미: 환입\n */\n Return: 3,\n /**\n * 값: `4`, 의미: 계약의 해제\n */\n ContractCancellation: 4,\n /**\n * 값: `5`, 의미: 내국신용장 사후 개설\n */\n PostIssuedDomesticLetterOfCredit: 5,\n /**\n * 값: `6`, 의미: 착오에 의한 이중 발급\n */\n DuplicateIssuanceByMistake: 6,\n} as const\n\n/**\n * 수정세금계산서 사유코드 타입입니다.\n */\nexport type TaxInvoiceModificationReasonCode = (typeof TaxInvoiceModificationReasonCodes)[keyof typeof TaxInvoiceModificationReasonCodes]\n\n/**\n * 세금계산서 상세 품목 입력입니다.\n */\nexport interface TaxInvoiceLineItemInput {\n /**\n * 상세 품목의 순번입니다.\n */\n lineNumber: number\n /**\n * 거래일자(yyyyMMdd)입니다.\n */\n transactionDate?: TaxInvoiceDateString\n /**\n * 품목명입니다.\n */\n itemName?: string\n /**\n * 규격입니다.\n */\n specification?: string\n /**\n * 수량입니다.\n */\n quantity?: string\n /**\n * 단가입니다.\n */\n unitCostAmount?: string\n /**\n * 공급가액입니다.\n */\n supplyCostAmount?: string\n /**\n * 세액입니다.\n */\n taxAmount?: string\n /**\n * 품목 비고입니다.\n */\n remark?: string\n}\n\n/**\n * 세금계산서 추가 담당자 입력입니다.\n */\nexport interface TaxInvoiceAdditionalContactInput {\n /**\n * 추가 담당자의 순번입니다.\n */\n sequenceNumber: number\n /**\n * 추가 담당자 이름입니다.\n */\n contactName?: string\n /**\n * 추가 담당자 이메일 주소입니다.\n */\n emailAddress: string\n}\n\n/**\n * 세금계산서 당사자 공통 입력입니다.\n */\nexport interface TaxInvoicePartyInput {\n /**\n * 사업자번호입니다.\n */\n businessNumber?: string\n /**\n * 문서 관리번호입니다.\n */\n managementKey?: string\n /**\n * 종사업장 식별번호입니다.\n */\n taxRegistrationIdentifier?: string\n /**\n * 상호입니다.\n */\n companyName?: string\n /**\n * 대표자 성명입니다.\n */\n chiefExecutiveOfficerName?: string\n /**\n * 주소입니다.\n */\n address?: string\n /**\n * 업태입니다.\n */\n businessClass?: string\n /**\n * 종목입니다.\n */\n businessType?: string\n /**\n * 담당자 이름입니다.\n */\n contactName?: string\n /**\n * 담당자 전화번호입니다.\n */\n telephoneNumber?: string\n /**\n * 담당자 휴대폰번호입니다.\n */\n mobilePhoneNumber?: string\n /**\n * 담당자 이메일 주소입니다.\n */\n emailAddress?: string\n /**\n * 담당자 휴대폰 문자 발송 여부입니다.\n */\n sendTextMessage?: boolean\n /**\n * 인쇄 여부입니다.\n */\n printEnabled?: boolean\n /**\n * 주민등록번호입니다.\n */\n residentRegistrationNumber?: string\n /**\n * 외국인 등록번호입니다.\n */\n foreignerRegistrationNumber?: string\n /**\n * 종사업자번호입니다.\n */\n branchBusinessNumber?: string\n /**\n * 종사업자 일련번호입니다.\n */\n branchSerialNumber?: string\n /**\n * 법인 구분값입니다.\n */\n corporationClassification?: string\n /**\n * 부서명입니다.\n */\n departmentName?: string\n}\n\n/**\n * 세금계산서 공급받는자 입력입니다.\n */\nexport interface TaxInvoiceBuyerInput extends TaxInvoicePartyInput {\n /**\n * 공급받는자 구분입니다.\n */\n recipientType?: TaxInvoiceRecipientType\n /**\n * 예비 담당자 이름입니다.\n */\n secondaryContactName?: string\n /**\n * 예비 담당자 전화번호입니다.\n */\n secondaryTelephoneNumber?: string\n /**\n * 예비 담당자 휴대폰번호입니다.\n */\n secondaryMobilePhoneNumber?: string\n /**\n * 예비 담당자 이메일 주소입니다.\n */\n secondaryEmailAddress?: string\n /**\n * 주 담당 부서명입니다.\n */\n primaryDepartmentName?: string\n /**\n * 예비 담당 부서명입니다.\n */\n secondaryDepartmentName?: string\n /**\n * 휴폐업 상태입니다.\n */\n businessStatus?: TaxInvoiceBusinessStatus\n /**\n * 휴폐업일자(yyyyMMdd)입니다.\n */\n businessStatusDate?: TaxInvoiceDateString\n}\n\n/**\n * 세금계산서 결제/합계 금액 입력입니다.\n */\nexport interface TaxInvoicePaymentSummaryInput {\n /**\n * 세액 합계입니다.\n */\n totalTaxAmount?: string\n /**\n * 공급가액 합계입니다.\n */\n totalSupplyCostAmount?: string\n /**\n * 합계 금액입니다.\n */\n totalAmount?: string\n /**\n * 현금 금액입니다.\n */\n cashAmount?: string\n /**\n * 수표 금액입니다.\n */\n checkAmount?: string\n /**\n * 어음 금액입니다.\n */\n promissoryNoteAmount?: string\n /**\n * 외상 금액입니다.\n */\n creditAmount?: string\n}\n\n/**\n * 세금계산서 수정 사유 입력입니다.\n */\nexport interface TaxInvoiceModificationInput {\n /**\n * 수정 사유코드입니다.\n */\n modificationReasonCode?: TaxInvoiceModificationReasonCode\n /**\n * 원본 문서의 국세청 승인번호입니다.\n */\n originalNationalTaxServiceConfirmationNumber?: string\n}\n\n/**\n * 세금계산서 문서 입력입니다.\n */\nexport interface TaxInvoiceDocumentInput {\n /**\n * 거래명세서 동시작성 여부입니다.\n */\n writeSpecificationEnabled?: boolean\n /**\n * 작성일자(yyyyMMdd)입니다.\n */\n writtenDate?: TaxInvoiceDateString\n /**\n * 과금 방향입니다.\n */\n chargeDirection?: TaxInvoiceChargeDirection\n /**\n * 발행 형태입니다.\n */\n issueType?: TaxInvoiceIssueType\n /**\n * 영수/청구 구분입니다.\n */\n purposeType?: TaxInvoicePurposeType\n /**\n * 발행시기 코드입니다.\n */\n issueTimingCode?: string\n /**\n * 과세 유형입니다.\n */\n taxType?: TaxInvoiceTaxationType\n /**\n * 공급자 정보입니다.\n */\n supplier?: TaxInvoicePartyInput\n /**\n * 공급받는자 정보입니다.\n */\n buyer?: TaxInvoiceBuyerInput\n /**\n * 수탁자 정보입니다.\n */\n trustee?: TaxInvoicePartyInput\n /**\n * 금액 정보입니다.\n */\n paymentSummary?: TaxInvoicePaymentSummaryInput\n /**\n * 수정세금계산서 정보입니다.\n */\n modification?: TaxInvoiceModificationInput\n /**\n * 기재상 일련번호입니다.\n */\n taxInvoiceSerialNumber?: string\n /**\n * 비고1입니다.\n */\n remarkOne?: string\n /**\n * 비고2입니다.\n */\n remarkTwo?: string\n /**\n * 비고3입니다.\n */\n remarkThree?: string\n /**\n * 책번호 권 항목입니다.\n */\n bookVolumeNumber?: number | string\n /**\n * 책번호 호 항목입니다.\n */\n bookIssueNumber?: number | string\n /**\n * 사업자등록증 이미지 첨부 여부입니다.\n */\n includeBusinessLicenseImage?: boolean\n /**\n * 통장사본 이미지 첨부 여부입니다.\n */\n includeBankBookImage?: boolean\n /**\n * 상세 품목 목록입니다.\n */\n lineItems?: TaxInvoiceLineItemInput[]\n /**\n * 추가 담당자 목록입니다.\n */\n additionalContacts?: TaxInvoiceAdditionalContactInput[]\n}\n","import type * as document from './document'\n\n/**\n * 세금계산서 공통 처리 결과입니다.\n */\nexport interface TaxInvoiceOperationResult {\n /**\n * 처리 결과 코드입니다.\n */\n resultCode: number\n /**\n * 처리 결과 메시지입니다.\n */\n resultMessage: string\n}\n\n/**\n * 발행 처리 결과입니다.\n */\nexport interface TaxInvoiceIssueResult extends TaxInvoiceOperationResult {\n /**\n * 국세청 승인번호입니다.\n */\n nationalTaxServiceConfirmationNumber?: string\n /**\n * 발행일시(yyyyMMddHHmmss)입니다.\n */\n issuedAt?: string\n}\n\n/**\n * 초대량 접수 결과입니다.\n */\nexport interface TaxInvoiceBulkSubmitResult extends TaxInvoiceOperationResult {\n /**\n * 접수 식별자입니다.\n */\n receiptIdentifier?: string\n}\n\n/**\n * 초대량 처리 상태 값입니다.\n */\nexport const TaxInvoiceBulkIssueSubmissionTransactionStates = {\n /**\n * 값: `0`, 의미: 미처리 상태\n */\n NotProcessed: 0,\n /**\n * 값: `1`, 의미: 처리중 상태\n */\n Processing: 1,\n /**\n * 값: `2`, 의미: 완료 상태\n */\n Completed: 2,\n} as const\n\n/**\n * 초대량 처리 상태 타입입니다.\n */\nexport type TaxInvoiceBulkIssueSubmissionTransactionState =\n (typeof TaxInvoiceBulkIssueSubmissionTransactionStates)[keyof typeof TaxInvoiceBulkIssueSubmissionTransactionStates]\n\n/**\n * 초대량 발행 개별 처리 결과입니다.\n */\nexport interface TaxInvoiceBulkIssueSubmissionResultItem {\n /**\n * 문서번호 유형 코드입니다.\n */\n invoiceDocumentKeyTypeCode?: string\n /**\n * 공급자 문서번호입니다.\n */\n supplierInvoiceManagementKey?: string\n /**\n * 수탁자 문서번호입니다.\n */\n trusteeInvoiceManagementKey?: string\n /**\n * 개별 처리 결과 코드입니다.\n */\n resultCode?: number\n /**\n * 개별 처리 결과 메시지입니다.\n */\n resultMessage?: string\n /**\n * 국세청 승인번호입니다.\n */\n nationalTaxServiceConfirmationNumber?: string\n /**\n * 접수일시(yyyyMMddHHmmss)입니다.\n */\n receivedAt?: string\n /**\n * 발행일시(yyyyMMddHHmmss)입니다.\n */\n issuedAt?: string\n}\n\n/**\n * 초대량 접수결과 조회 결과입니다.\n */\nexport interface TaxInvoiceBulkIssueSubmissionResult extends TaxInvoiceOperationResult {\n /**\n * 접수 식별자입니다.\n */\n receiptIdentifier?: string\n /**\n * 접수일시(yyyyMMddHHmmss)입니다.\n */\n receivedAt?: string\n /**\n * 제출 식별자입니다.\n */\n submissionIdentifier?: string\n /**\n * 제출 건수입니다.\n */\n submittedDocumentCount?: number\n /**\n * 성공 건수입니다.\n */\n succeededDocumentCount?: number\n /**\n * 실패 건수입니다.\n */\n failedDocumentCount?: number\n /**\n * 처리 상태입니다.\n */\n transactionState?: TaxInvoiceBulkIssueSubmissionTransactionState\n /**\n * 처리 시작일시(yyyyMMddHHmmss)입니다.\n */\n transactionStartedAt?: string\n /**\n * 처리 완료일시(yyyyMMddHHmmss)입니다.\n */\n transactionCompletedAt?: string\n /**\n * 처리 결과 코드입니다.\n */\n transactionResultCode?: number\n /**\n * 개별 처리 결과 목록입니다.\n */\n issueResults?: TaxInvoiceBulkIssueSubmissionResultItem[]\n}\n\n/**\n * 문서 요약정보 조회 결과입니다.\n */\nexport interface TaxInvoiceInfo {\n /**\n * 팝빌 문서 식별키(ItemKey)입니다.\n */\n itemKey: string\n /**\n * 과세유형입니다.\n */\n taxType: document.TaxInvoiceTaxationType\n /**\n * 작성일자(yyyyMMdd)입니다.\n */\n writtenDate: string\n /**\n * 등록일시(yyyyMMddHHmmss)입니다.\n */\n registeredAt: string\n /**\n * 발행유형입니다.\n */\n issueType: document.TaxInvoiceIssueType\n /**\n * 공급가액 합계입니다.\n */\n totalSupplyCost: string\n /**\n * 세액 합계입니다.\n */\n totalTax: string\n /**\n * 영수/청구 구분입니다.\n */\n purposeType: document.TaxInvoicePurposeType\n /**\n * 발행일시(yyyyMMddHHmmss)입니다.\n */\n issuedAt?: string\n /**\n * 지연발행 여부입니다.\n */\n isLateIssued: boolean\n /**\n * 개봉 여부입니다.\n */\n isOpen: boolean\n /**\n * 개봉일시(yyyyMMddHHmmss)입니다.\n */\n openedAt?: string\n /**\n * 상태 메모입니다.\n */\n stateMemo?: string\n /**\n * 상태 코드입니다.\n */\n stateCode: number\n /**\n * 상태 변경일시(yyyyMMddHHmmss)입니다.\n */\n stateChangedAt: string\n /**\n * 국세청 승인번호입니다.\n */\n nationalTaxServiceConfirmationNumber?: string\n /**\n * 국세청 전송 결과 코드입니다.\n */\n nationalTaxServiceResult?: string\n /**\n * 국세청 전송일시(yyyyMMddHHmmss)입니다.\n */\n nationalTaxServiceSentAt?: string\n /**\n * 국세청 결과 수신일시(yyyyMMddHHmmss)입니다.\n */\n nationalTaxServiceResultReceivedAt?: string\n /**\n * 국세청 전송 오류 코드입니다.\n */\n nationalTaxServiceSendErrorCode?: string\n /**\n * 수정사유코드입니다.\n */\n modificationCode?: document.TaxInvoiceModificationReasonCode\n /**\n * 연동 문서 여부입니다.\n */\n isApiLinkedDocument: boolean\n /**\n * 공급자 상호입니다.\n */\n supplierCompanyName: string\n /**\n * 공급자 사업자번호입니다.\n */\n supplierBusinessNumber: string\n /**\n * 공급자 문서번호입니다.\n */\n supplierManagementKey?: string\n /**\n * 공급자 인쇄 여부입니다.\n */\n isSupplierPrinted: boolean\n /**\n * 공급받는자 상호입니다.\n */\n buyerCompanyName: string\n /**\n * 공급받는자 사업자번호입니다.\n */\n buyerBusinessNumber: string\n /**\n * 공급받는자 문서번호입니다.\n */\n buyerManagementKey?: string\n /**\n * 공급받는자 인쇄 여부입니다.\n */\n isBuyerPrinted: boolean\n /**\n * 공급받는자 휴폐업 상태입니다.\n */\n buyerBusinessStatus?: document.TaxInvoiceBusinessStatus\n /**\n * 공급받는자 휴폐업일자(yyyyMMdd)입니다.\n */\n buyerBusinessStatusDate?: string\n /**\n * 수탁자 상호입니다.\n */\n trusteeCompanyName?: string\n /**\n * 수탁자 사업자번호입니다.\n */\n trusteeBusinessNumber?: string\n /**\n * 수탁자 문서번호입니다.\n */\n trusteeManagementKey?: string\n /**\n * 수탁자 인쇄 여부입니다.\n */\n isTrusteePrinted?: boolean\n}\n\n/**\n * 문서 상세조회 결과입니다.\n */\nexport interface TaxInvoiceDocumentOutput extends document.TaxInvoiceDocumentInput {\n /**\n * 발행일시(yyyyMMddHHmmss)입니다.\n */\n issuedAt?: string\n /**\n * 상태 코드입니다.\n */\n stateCode?: number\n /**\n * 상태 변경일시(yyyyMMddHHmmss)입니다.\n */\n stateChangedAt?: string\n /**\n * 지연발행 여부입니다.\n */\n isLateIssued?: boolean\n /**\n * 개봉 여부입니다.\n */\n isOpen?: boolean\n /**\n * 개봉일시(yyyyMMddHHmmss)입니다.\n */\n openedAt?: string\n /**\n * 국세청 승인번호입니다.\n */\n nationalTaxServiceConfirmationNumber?: string\n /**\n * 국세청 전송 결과 코드입니다.\n */\n nationalTaxServiceResultCode?: string\n /**\n * 국세청 전송일시(yyyyMMddHHmmss)입니다.\n */\n nationalTaxServiceSentAt?: string\n /**\n * 국세청 결과 수신일시(yyyyMMddHHmmss)입니다.\n */\n nationalTaxServiceResultReceivedAt?: string\n /**\n * 국세청 전송 오류 코드입니다.\n */\n nationalTaxServiceSendErrorCode?: string\n /**\n * API 연동 문서 여부입니다.\n */\n isApiLinkedDocument?: boolean\n}\n\n/**\n * 문서번호 사용 여부 조회 결과입니다.\n */\nexport interface TaxInvoiceInvoiceManagementKeyUsage {\n /**\n * 문서번호 사용 여부입니다.\n */\n isInUse: boolean\n /**\n * 사용중인 경우 팝빌 문서 식별키입니다.\n */\n itemKey?: string\n}\n\n/**\n * XML 조회 결과입니다.\n */\nexport interface TaxInvoiceXmlResult {\n /**\n * 처리 결과입니다.\n */\n operationResult?: TaxInvoiceOperationResult\n /**\n * 팝빌 문서 식별키입니다.\n */\n itemKey?: string\n /**\n * 문서번호입니다.\n */\n invoiceManagementKey?: string\n /**\n * XML 원문입니다.\n */\n xmlContent?: string\n}\n\n/**\n * 검색 조회 결과입니다.\n */\nexport interface TaxInvoiceSearchResult {\n /**\n * 처리 결과입니다.\n */\n operationResult: TaxInvoiceOperationResult\n /**\n * 총 검색 건수입니다.\n */\n totalCount?: number\n /**\n * 페이지당 건수입니다.\n */\n pageSize?: number\n /**\n * 현재 페이지 번호입니다.\n */\n pageNumber?: number\n /**\n * 전체 페이지 수입니다.\n */\n pageCount?: number\n /**\n * 문서 요약 목록입니다.\n */\n invoiceSummaries: TaxInvoiceInfo[]\n}\n\n/**\n * 문서 상태 이력 항목입니다.\n */\nexport interface TaxInvoiceLogEntry {\n /**\n * 문서 이력 유형 코드입니다.\n */\n documentLogTypeCode?: number\n /**\n * 로그 메시지입니다.\n */\n logMessage?: string\n /**\n * 처리 유형 코드입니다.\n */\n processTypeCode?: string\n /**\n * 처리 회사명입니다.\n */\n processCompanyName?: string\n /**\n * 처리 담당자명입니다.\n */\n processContactName?: string\n /**\n * 처리 설명입니다.\n */\n processDescription?: string\n /**\n * 등록일시(yyyyMMddHHmmss)입니다.\n */\n registeredAt?: string\n /**\n * 처리 IP 주소입니다.\n */\n ipAddress?: string\n}\n\n/**\n * URL 응답 결과입니다.\n */\nexport interface TaxInvoiceAccessUrl {\n /**\n * 접근 URL입니다.\n */\n accessUrl: string\n}\n\n/**\n * 첨부파일 메타데이터입니다.\n */\nexport interface TaxInvoiceAttachedFile {\n /**\n * 첨부 순번입니다.\n */\n sequenceNumber?: number\n /**\n * 파일 식별자입니다.\n */\n fileIdentifier?: string\n /**\n * 표시 이름입니다.\n */\n displayName?: string\n /**\n * 등록일시(yyyyMMddHHmmss)입니다.\n */\n registeredAt?: string\n}\n\n/**\n * 이메일 전송 설정 항목입니다.\n */\nexport interface TaxInvoiceEmailSendSetting {\n /**\n * 메일 유형 코드입니다.\n */\n emailTypeCode?: string\n /**\n * 전송 활성화 여부입니다.\n */\n sendEnabled?: boolean\n}\n\n/**\n * 국세청 전송 설정입니다.\n */\nexport interface TaxInvoiceSendToNationalTaxServiceSetting {\n /**\n * 즉시 전송 여부입니다.\n */\n sendToNationalTaxServiceEnabled: boolean\n}\n\n/**\n * 인증서 만료일 조회 결과입니다.\n */\nexport interface TaxInvoiceTaxCertificateExpiration {\n /**\n * 만료일시(yyyyMMddHHmmss)입니다.\n */\n expirationDateTime: string\n}\n\n/**\n * 인증서 정보 조회 결과입니다.\n */\nexport interface TaxInvoiceTaxCertificateInfo {\n /**\n * 등록일시(yyyyMMddHHmmss)입니다.\n */\n registeredAt?: string\n /**\n * 만료일시(yyyyMMddHHmmss)입니다.\n */\n expiredAt?: string\n /**\n * 발급자 DN입니다.\n */\n issuerDistinguishedName?: string\n /**\n * 인증서 DN입니다.\n */\n subjectDistinguishedName?: string\n /**\n * 인증서 종류명입니다.\n */\n issuerName?: string\n /**\n * 인증서 정책 OID입니다.\n */\n policyObjectIdentifier?: string\n /**\n * 등록 담당자 이름입니다.\n */\n registeredContactName?: string\n /**\n * 등록 담당자 아이디입니다.\n */\n registeredContactIdentifier?: string\n}\n","import {\n TaxInvoiceModificationReasonCodes,\n type TaxInvoiceDateString,\n type TaxInvoiceDocumentInput,\n type TaxInvoiceModificationReasonCode,\n} from './document'\nimport type * as response from './response'\nexport {\n TaxInvoiceBusinessStatusValues,\n TaxInvoiceChargeDirectionValues,\n TaxInvoiceIssueTypes,\n TaxInvoiceModificationReasonCodes,\n TaxInvoicePurposeTypes,\n TaxInvoiceRecipientTypes,\n TaxInvoiceTaxationTypes,\n} from './document'\nexport type {\n TaxInvoiceAdditionalContactInput,\n TaxInvoiceBusinessStatus,\n TaxInvoiceChargeDirection,\n TaxInvoiceDateString,\n TaxInvoiceDocumentInput,\n TaxInvoiceIssueType,\n TaxInvoiceLineItemInput,\n TaxInvoiceModificationReasonCode,\n TaxInvoicePartyInput,\n TaxInvoicePurposeType,\n TaxInvoiceRecipientType,\n TaxInvoiceTaxationType,\n TaxInvoiceBuyerInput,\n} from './document'\nexport * from './response'\n\n/**\n * 세금계산서 문서번호 유형 상수입니다.\n */\nexport const TaxInvoiceDocumentKeyTypes = {\n /**\n * 코드: `SELL`, 설명: 매출 문서번호 유형\n */\n Sales: 'SELL',\n /**\n * 코드: `BUY`, 설명: 매입 문서번호 유형\n */\n Purchase: 'BUY',\n /**\n * 코드: `TRUSTEE`, 설명: 위수탁 문서번호 유형\n */\n Trustee: 'TRUSTEE',\n} as const\n\n/**\n * 세금계산서 문서번호 유형입니다.\n */\nexport type TaxInvoiceDocumentKeyType = (typeof TaxInvoiceDocumentKeyTypes)[keyof typeof TaxInvoiceDocumentKeyTypes]\nexport type TaxInvoiceOutboundDocumentKeyType = Extract<\n TaxInvoiceDocumentKeyType,\n typeof TaxInvoiceDocumentKeyTypes.Sales | typeof TaxInvoiceDocumentKeyTypes.Trustee\n>\nexport type TaxInvoiceReverseRequestDocumentKeyType = typeof TaxInvoiceDocumentKeyTypes.Purchase\nexport type TaxInvoiceReverseRefuseDocumentKeyType = typeof TaxInvoiceDocumentKeyTypes.Sales\n\n/**\n * 세금계산서 문서함 범위 상수입니다.\n */\nexport const TaxInvoiceBoxScopes = {\n /**\n * 코드: `TBOX`, 설명: 임시 문서함\n */\n TemporaryDocumentBox: 'TBOX',\n /**\n * 코드: `SWBOX`, 설명: 매출 발행 대기함\n */\n SalesIssueWaitingBox: 'SWBOX',\n /**\n * 코드: `SBOX`, 설명: 매출 문서함\n */\n SalesDocumentBox: 'SBOX',\n /**\n * 코드: `PWBOX`, 설명: 매입 발행 대기함\n */\n PurchaseIssueWaitingBox: 'PWBOX',\n /**\n * 코드: `PBOX`, 설명: 매입 문서함\n */\n PurchaseDocumentBox: 'PBOX',\n /**\n * 코드: `WRITE`, 설명: 정발행 작성\n */\n WriteInvoice: 'WRITE',\n} as const\n\n/**\n * 세금계산서 문서함 범위 값입니다.\n */\nexport type TaxInvoiceBoxScope = (typeof TaxInvoiceBoxScopes)[keyof typeof TaxInvoiceBoxScopes]\n\n/**\n * 검색일자 유형 상수입니다.\n */\nexport const TaxInvoiceDateType = {\n /**\n * 코드: `R`, 설명: 등록일자\n */\n Registered: 'R',\n /**\n * 코드: `W`, 설명: 작성일자\n */\n Written: 'W',\n /**\n * 코드: `I`, 설명: 발행일자\n */\n Issued: 'I',\n} as const\n\n/**\n * 검색일자 유형입니다.\n */\nexport type TaxInvoiceDateType = (typeof TaxInvoiceDateType)[keyof typeof TaxInvoiceDateType]\n\n/**\n * `packages/popbill` 검색 입력에서 허용하는 일자 타입입니다.\n */\nexport type TaxInvoiceDateInput = TaxInvoiceDateString | Date\n\n/**\n * 검색 정렬 방향 상수입니다.\n */\nexport const TaxInvoiceSortOrder = {\n /**\n * 코드: `D`, 설명: 내림차순\n */\n Descending: 'D',\n /**\n * 코드: `A`, 설명: 오름차순\n */\n Ascending: 'A',\n} as const\n\n/**\n * 검색 정렬 방향 코드입니다.\n */\nexport type TaxInvoiceSortOrder = (typeof TaxInvoiceSortOrder)[keyof typeof TaxInvoiceSortOrder]\n\n/**\n * 검색 상태코드 패턴입니다.\n *\n * 첫 자리는 숫자, 2/3번째 자리는 숫자 또는 `*`를 허용합니다.\n * 예) `300`, `3**`, `60*`\n */\nexport type TaxInvoiceSearchStateCode = string\n\n/**\n * 검색 문서유형 코드 상수입니다.\n */\nexport const TaxInvoiceSearchInvoiceTypeCodes = {\n /**\n * 코드: `N`, 설명: 세금계산서\n */\n Normal: 'N',\n /**\n * 코드: `M`, 설명: 수정세금계산서\n */\n Modified: 'M',\n} as const\n\n/**\n * 검색 문서유형 코드입니다.\n */\nexport type TaxInvoiceSearchInvoiceTypeCode = (typeof TaxInvoiceSearchInvoiceTypeCodes)[keyof typeof TaxInvoiceSearchInvoiceTypeCodes]\n\n/**\n * 검색 과세형태 코드 상수입니다.\n */\nexport const TaxInvoiceSearchTaxationTypeCodes = {\n /**\n * 코드: `T`, 설명: 과세\n */\n Taxable: 'T',\n /**\n * 코드: `N`, 설명: 면세\n */\n Exempt: 'N',\n /**\n * 코드: `Z`, 설명: 영세\n */\n ZeroRated: 'Z',\n} as const\n\n/**\n * 검색 과세형태 코드입니다.\n */\nexport type TaxInvoiceSearchTaxationTypeCode = (typeof TaxInvoiceSearchTaxationTypeCodes)[keyof typeof TaxInvoiceSearchTaxationTypeCodes]\n\n/**\n * 검색 발행형태 코드 상수입니다.\n */\nexport const TaxInvoiceSearchIssueTypeCodes = {\n /**\n * 코드: `N`, 설명: 정발행\n */\n Normal: 'N',\n /**\n * 코드: `R`, 설명: 역발행\n */\n Reverse: 'R',\n /**\n * 코드: `T`, 설명: 위수탁\n */\n Trustee: 'T',\n} as const\n\n/**\n * 검색 발행형태 코드입니다.\n */\nexport type TaxInvoiceSearchIssueTypeCode = (typeof TaxInvoiceSearchIssueTypeCodes)[keyof typeof TaxInvoiceSearchIssueTypeCodes]\n\n/**\n * 검색 종사업장번호 주체 코드 상수입니다.\n */\nexport const TaxInvoiceSearchTaxRegistrationIdentifierTypes = {\n /**\n * 코드: `S`, 설명: 공급자\n */\n Supplier: 'S',\n /**\n * 코드: `B`, 설명: 공급받는자\n */\n Buyer: 'B',\n /**\n * 코드: `T`, 설명: 수탁자\n */\n Trustee: 'T',\n} as const\n\n/**\n * 검색 종사업장번호 주체 코드입니다.\n */\nexport type TaxInvoiceSearchTaxRegistrationIdentifierType =\n (typeof TaxInvoiceSearchTaxRegistrationIdentifierTypes)[keyof typeof TaxInvoiceSearchTaxRegistrationIdentifierTypes]\n\n/**\n * 검색 종사업장번호 유무 코드 상수입니다.\n */\nexport const TaxInvoiceSearchTaxRegistrationIdentifierAvailabilities = {\n /**\n * 코드: `0`, 설명: 종사업장번호 없음\n */\n No: '0',\n /**\n * 코드: `1`, 설명: 종사업장번호 있음\n */\n Yes: '1',\n} as const\n\n/**\n * 검색 종사업장번호 유무 코드입니다.\n */\nexport type TaxInvoiceSearchTaxRegistrationIdentifierAvailability =\n (typeof TaxInvoiceSearchTaxRegistrationIdentifierAvailabilities)[keyof typeof TaxInvoiceSearchTaxRegistrationIdentifierAvailabilities]\n\n/**\n * 검색 작성유형 코드 상수입니다.\n */\nexport const TaxInvoiceSearchInteroperabilityTypes = {\n /**\n * 코드: `0`, 설명: 팝빌 웹 작성\n */\n PopbillWeb: '0',\n /**\n * 코드: `1`, 설명: API 작성\n */\n Api: '1',\n} as const\n\n/**\n * 검색 작성유형 코드입니다.\n */\nexport type TaxInvoiceSearchInteroperabilityType = (typeof TaxInvoiceSearchInteroperabilityTypes)[keyof typeof TaxInvoiceSearchInteroperabilityTypes]\n\n/**\n * 검색 등록유형 코드 상수입니다.\n */\nexport const TaxInvoiceSearchRegistrationTypeCodes = {\n /**\n * 코드: `P`, 설명: 팝빌 등록(발행)\n */\n Popbill: 'P',\n /**\n * 코드: `H`, 설명: 홈택스/ASP 등록(발행)\n */\n HomeTax: 'H',\n} as const\n\n/**\n * 검색 등록유형 코드입니다.\n */\nexport type TaxInvoiceSearchRegistrationTypeCode = (typeof TaxInvoiceSearchRegistrationTypeCodes)[keyof typeof TaxInvoiceSearchRegistrationTypeCodes]\n\n/**\n * 검색 조건의 휴폐업 상태 상수입니다.\n */\nexport const TaxInvoiceCloseDownStateCodes = {\n /**\n * 코드: `N`, 설명: 미확인\n */\n NotChecked: 'N',\n /**\n * 코드: `0`, 설명: 미등록\n */\n NotRegistered: '0',\n /**\n * 코드: `1`, 설명: 사업중\n */\n Operating: '1',\n /**\n * 코드: `2`, 설명: 폐업\n */\n Closed: '2',\n /**\n * 코드: `3`, 설명: 휴업\n */\n Suspended: '3',\n /**\n * 코드: `4`, 설명: 확인실패\n */\n CheckFailed: '4',\n} as const\n\n/**\n * 검색 조건의 휴폐업 상태 코드입니다.\n */\nexport type TaxInvoiceCloseDownStateCode = (typeof TaxInvoiceCloseDownStateCodes)[keyof typeof TaxInvoiceCloseDownStateCodes]\n\n/**\n * 전자명세서 문서유형 코드 상수입니다.\n */\nexport const TaxInvoiceStatementItemCodes = {\n /**\n * 코드: `121`, 설명: 거래명세서\n */\n TradeStatement: 121,\n /**\n * 코드: `122`, 설명: 청구서\n */\n Invoice: 122,\n /**\n * 코드: `123`, 설명: 견적서\n */\n Estimate: 123,\n /**\n * 코드: `124`, 설명: 발주서\n */\n PurchaseOrder: 124,\n /**\n * 코드: `125`, 설명: 입금표\n */\n Deposit: 125,\n /**\n * 코드: `126`, 설명: 영수증\n */\n Receipt: 126,\n} as const\n\n/**\n * 전자명세서 문서유형 코드입니다.\n */\nexport type TaxInvoiceStatementItemCode = (typeof TaxInvoiceStatementItemCodes)[keyof typeof TaxInvoiceStatementItemCodes]\n\n/**\n * 메일 전송 유형 코드 상수입니다.\n */\nexport const TaxInvoiceEmailTypes = {\n /**\n * 코드: `ETC_CERT_EXPIRATION`, 설명: 인증서 만료 안내\n */\n EtcCertExpiration: 'ETC_CERT_EXPIRATION',\n /**\n * 코드: `TAX_CANCEL_ISSUE`, 설명: 발행취소\n */\n TaxCancelIssue: 'TAX_CANCEL_ISSUE',\n /**\n * 코드: `TAX_CANCEL_REQUEST`, 설명: 역발행 요청 취소\n */\n TaxCancelRequest: 'TAX_CANCEL_REQUEST',\n /**\n * 코드: `TAX_CHECK`, 설명: 수신확인\n */\n TaxCheck: 'TAX_CHECK',\n /**\n * 코드: `TAX_CLOSEDOWN`, 설명: 휴폐업 알림\n */\n TaxClosedown: 'TAX_CLOSEDOWN',\n /**\n * 코드: `TAX_ISSUE`, 설명: 발행완료(수신자)\n */\n TaxIssue: 'TAX_ISSUE',\n /**\n * 코드: `TAX_ISSUE_INVOICER`, 설명: 발행완료(공급자)\n */\n TaxIssueInvoicer: 'TAX_ISSUE_INVOICER',\n /**\n * 코드: `TAX_NTSFAIL_INVOICER`, 설명: 국세청 전송실패(공급자)\n */\n TaxNtsFailInvoicer: 'TAX_NTSFAIL_INVOICER',\n /**\n * 코드: `TAX_REFUSE`, 설명: 역발행 거부\n */\n TaxRefuse: 'TAX_REFUSE',\n /**\n * 코드: `TAX_REQUEST`, 설명: 역발행 요청\n */\n TaxRequest: 'TAX_REQUEST',\n /**\n * 코드: `TAX_REVERSE_ISSUE`, 설명: 역발행 완료\n */\n TaxReverseIssue: 'TAX_REVERSE_ISSUE',\n /**\n * 코드: `TAX_TRUST_CANCEL_ISSUE`, 설명: 위수탁 발행취소\n */\n TaxTrustCancelIssue: 'TAX_TRUST_CANCEL_ISSUE',\n /**\n * 코드: `TAX_TRUST_CANCEL_ISSUE_INVOICER`, 설명: 위수탁 발행취소(공급자)\n */\n TaxTrustCancelIssueInvoicer: 'TAX_TRUST_CANCEL_ISSUE_INVOICER',\n /**\n * 코드: `TAX_TRUST_ISSUE`, 설명: 위수탁 발행완료\n */\n TaxTrustIssue: 'TAX_TRUST_ISSUE',\n /**\n * 코드: `TAX_TRUST_ISSUE_INVOICER`, 설명: 위수탁 발행완료(공급자)\n */\n TaxTrustIssueInvoicer: 'TAX_TRUST_ISSUE_INVOICER',\n /**\n * 코드: `TAX_TRUST_ISSUE_TRUSTEE`, 설명: 위수탁 발행완료(수탁자)\n */\n TaxTrustIssueTrustee: 'TAX_TRUST_ISSUE_TRUSTEE',\n /**\n * 코드: `TAX_ACCEPT`, 설명: 역발행 승인(legacy)\n */\n TaxAccept: 'TAX_ACCEPT',\n /**\n * 코드: `TAX_DENY`, 설명: 역발행 거부(legacy)\n */\n TaxDeny: 'TAX_DENY',\n /**\n * 코드: `TAX_CANCEL_SEND`, 설명: 발행안함 취소(legacy)\n */\n TaxCancelSend: 'TAX_CANCEL_SEND',\n} as const\n\n/**\n * 메일 전송 유형 코드입니다.\n */\nexport type TaxInvoiceEmailType = (typeof TaxInvoiceEmailTypes)[keyof typeof TaxInvoiceEmailTypes]\n\n/**\n * 수정세금계산서 사유코드입니다.\n */\nexport const TaxInvoiceModificationCodes = TaxInvoiceModificationReasonCodes\n\n/**\n * 수정세금계산서 사유코드입니다.\n */\nexport type TaxInvoiceModificationCode = TaxInvoiceModificationReasonCode\n\n/**\n * 사업자번호 입력이 필요한 요청의 공통 필드입니다.\n */\nexport interface TaxInvoiceBusinessRequest {\n /**\n * 팝빌 회원 사업자번호입니다.\n */\n businessNumber: string\n}\n\n/**\n * 문서 식별(문서번호 유형 + 문서번호)이 필요한 요청의 공통 필드입니다.\n */\nexport interface TaxInvoiceDocumentRequest<TKeyType extends TaxInvoiceDocumentKeyType = TaxInvoiceDocumentKeyType> extends TaxInvoiceBusinessRequest {\n /**\n * 문서번호 유형입니다.\n */\n invoiceDocumentKeyType: TKeyType\n /**\n * 파트너가 관리하는 문서번호입니다.\n */\n invoiceManagementKey: string\n}\n\n/**\n * 즉시 발행 요청 입력입니다.\n */\nexport interface IssueInvoiceImmediatelyInput extends TaxInvoiceBusinessRequest {\n /**\n * 발행할 세금계산서 문서 원본입니다.\n */\n taxInvoiceDocument: TaxInvoiceDocumentInput\n /**\n * 거래명세서 동시작성 여부입니다.\n */\n writeSpecification?: boolean\n /**\n * 지연발행 허용 여부입니다.\n */\n forceIssue?: boolean\n /**\n * 상태 이력에 남길 메모입니다.\n */\n historyMemo?: string\n /**\n * 발행 안내 메일 제목입니다.\n */\n emailSubject?: string\n /**\n * 거래명세서 관리번호입니다.\n */\n dealInvoiceManagementKey?: string\n}\n\n/**\n * 초대량 발행 접수 요청 입력입니다.\n */\nexport interface SubmitBulkIssueInput extends TaxInvoiceBusinessRequest {\n /**\n * 초대량 접수 식별자(SubmitID)입니다.\n */\n submissionIdentifier: string\n /**\n * 접수할 세금계산서 문서 목록입니다.\n */\n taxInvoiceDocuments: TaxInvoiceDocumentInput[]\n /**\n * 지연발행 허용 여부입니다.\n */\n forceIssue?: boolean\n}\n\n/**\n * 초대량 접수결과 조회 요청 입력입니다.\n */\nexport interface GetBulkIssueSubmissionResultInput extends TaxInvoiceBusinessRequest {\n /**\n * 조회할 초대량 접수 식별자(SubmitID)입니다.\n */\n submissionIdentifier: string\n}\n\n/**\n * 임시저장 요청 입력입니다.\n */\nexport interface RegisterInvoiceInput extends TaxInvoiceBusinessRequest {\n /**\n * 임시저장할 세금계산서 문서 원본입니다.\n */\n taxInvoiceDocument: TaxInvoiceDocumentInput\n}\n\n/**\n * 문서 수정 요청 입력입니다.\n */\nexport interface UpdateInvoiceInput extends TaxInvoiceDocumentRequest<TaxInvoiceOutboundDocumentKeyType> {\n /**\n * 수정 대상 문서번호 유형입니다. 매출(`SELL`) 또는 위수탁(`TRUSTEE`)만 사용할 수 있습니다.\n */\n invoiceDocumentKeyType: TaxInvoiceOutboundDocumentKeyType\n /**\n * 수정할 세금계산서 문서 원본입니다.\n */\n taxInvoiceDocument: TaxInvoiceDocumentInput\n}\n\n/**\n * 저장된 문서 발행 요청 입력입니다.\n */\nexport interface IssueInvoiceInput extends TaxInvoiceDocumentRequest<TaxInvoiceOutboundDocumentKeyType> {\n /**\n * 발행 대상 문서번호 유형입니다. 매출(`SELL`) 또는 위수탁(`TRUSTEE`)만 사용할 수 있습니다.\n */\n invoiceDocumentKeyType: TaxInvoiceOutboundDocumentKeyType\n /**\n * 상태 이력에 남길 메모입니다.\n */\n historyMemo: string\n /**\n * 발행 안내 메일 제목입니다.\n */\n emailSubject?: string\n /**\n * 지연발행 허용 여부입니다.\n */\n forceIssue?: boolean\n}\n\n/**\n * 발행취소 요청 입력입니다.\n */\nexport interface CancelIssuedInvoiceInput extends TaxInvoiceDocumentRequest<TaxInvoiceOutboundDocumentKeyType> {\n /**\n * 발행취소 대상 문서번호 유형입니다. 매출(`SELL`) 또는 위수탁(`TRUSTEE`)만 사용할 수 있습니다.\n */\n invoiceDocumentKeyType: TaxInvoiceOutboundDocumentKeyType\n /**\n * 상태 이력에 남길 메모입니다.\n */\n historyMemo: string\n}\n\n/**\n * 역발행 즉시 요청 입력입니다.\n */\nexport interface RequestReverseIssueImmediatelyInput extends TaxInvoiceBusinessRequest {\n /**\n * 역발행 요청할 세금계산서 문서 원본입니다.\n */\n taxInvoiceDocument: TaxInvoiceDocumentInput\n /**\n * 상태 이력에 남길 메모입니다.\n */\n historyMemo: string\n}\n\n/**\n * 역발행 요청 입력입니다.\n */\nexport interface RequestReverseIssueInput extends TaxInvoiceDocumentRequest<TaxInvoiceReverseRequestDocumentKeyType> {\n /**\n * 역발행 요청 대상 문서번호 유형입니다. 매입(`BUY`)만 사용할 수 있습니다.\n */\n invoiceDocumentKeyType: TaxInvoiceReverseRequestDocumentKeyType\n /**\n * 상태 이력에 남길 메모입니다.\n */\n historyMemo: string\n}\n\n/**\n * 역발행 요청취소 입력입니다.\n */\nexport interface CancelReverseIssueRequestInput extends TaxInvoiceDocumentRequest<TaxInvoiceReverseRequestDocumentKeyType> {\n /**\n * 역발행 요청취소 대상 문서번호 유형입니다. 매입(`BUY`)만 사용할 수 있습니다.\n */\n invoiceDocumentKeyType: TaxInvoiceReverseRequestDocumentKeyType\n /**\n * 상태 이력에 남길 메모입니다.\n */\n historyMemo: string\n}\n\n/**\n * 역발행 요청거부 입력입니다.\n */\nexport interface RefuseReverseIssueRequestInput extends TaxInvoiceDocumentRequest<TaxInvoiceReverseRefuseDocumentKeyType> {\n /**\n * 역발행 요청거부 대상 문서번호 유형입니다. 매출(`SELL`)만 사용할 수 있습니다.\n */\n invoiceDocumentKeyType: TaxInvoiceReverseRefuseDocumentKeyType\n /**\n * 상태 이력에 남길 메모입니다.\n */\n historyMemo: string\n}\n\n/**\n * 국세청 즉시 전송 입력입니다.\n */\nexport interface SendInvoiceToNationalTaxServiceInput extends TaxInvoiceDocumentRequest<TaxInvoiceOutboundDocumentKeyType> {\n /**\n * 국세청 전송 대상 문서번호 유형입니다. 매출(`SELL`) 또는 위수탁(`TRUSTEE`)만 사용할 수 있습니다.\n */\n invoiceDocumentKeyType: TaxInvoiceOutboundDocumentKeyType\n}\n\n/**\n * 다건 상태 조회 요청 입력입니다.\n */\nexport interface GetInvoicesInfoInput extends TaxInvoiceBusinessRequest {\n /**\n * 조회 대상 문서번호 유형입니다.\n */\n invoiceDocumentKeyType: TaxInvoiceDocumentKeyType\n /**\n * 조회 대상 문서번호 목록입니다.\n */\n invoiceManagementKeys: string[]\n}\n\n/**\n * 검색 요청 입력입니다.\n */\nexport interface SearchInvoicesInput extends TaxInvoiceBusinessRequest {\n /**\n * 조회 대상 문서번호 유형입니다.\n */\n invoiceDocumentKeyType: TaxInvoiceDocumentKeyType\n /**\n * 검색 기준 일자 유형입니다.\n */\n searchDateType: TaxInvoiceDateType\n /**\n * 검색 시작일자(yyyyMMdd)입니다. `Date` 입력 시 KST 기준으로 변환됩니다.\n */\n startDate: TaxInvoiceDateInput\n /**\n * 검색 종료일자(yyyyMMdd)입니다. `Date` 입력 시 KST 기준으로 변환됩니다.\n */\n endDate: TaxInvoiceDateInput\n /**\n * 세금계산서 상태코드 필터입니다. 2/3번째 자리는 와일드카드(`*`)를 허용합니다. 예) `3**`, `60*`\n */\n invoiceStateCodes: TaxInvoiceSearchStateCode[]\n /**\n * 문서 유형 필터입니다.\n */\n invoiceTypeCodes: TaxInvoiceSearchInvoiceTypeCode[]\n /**\n * 과세형태 필터입니다.\n */\n taxationTypeCodes: TaxInvoiceSearchTaxationTypeCode[]\n /**\n * 지연발행 문서만 조회할지 여부입니다.\n */\n lateIssueOnly: boolean | null\n /**\n * 정렬 방향입니다.\n */\n sortOrder: TaxInvoiceSortOrder\n /**\n * 조회할 페이지 번호입니다.\n */\n pageNumber: number\n /**\n * 페이지당 조회 건수입니다.\n */\n pageSize: number\n /**\n * 종사업장번호 주체 필터입니다.\n */\n taxRegistrationIdentifierType?: TaxInvoiceSearchTaxRegistrationIdentifierType\n /**\n * 종사업장번호 존재 여부 필터입니다.\n */\n taxRegistrationIdentifierAvailability?: TaxInvoiceSearchTaxRegistrationIdentifierAvailability\n /**\n * 종사업장번호 필터입니다.\n */\n taxRegistrationIdentifier?: string\n /**\n * 검색어(상호/사업자번호/문서번호 등)입니다.\n */\n queryText?: string\n /**\n * 작성유형(연동/API) 필터입니다.\n */\n interoperabilityType?: TaxInvoiceSearchInteroperabilityType\n /**\n * 발행형태 필터입니다.\n */\n issueTypeCodes?: TaxInvoiceSearchIssueTypeCode[]\n /**\n * 등록유형 필터입니다.\n */\n registrationTypeCodes?: TaxInvoiceSearchRegistrationTypeCode[]\n /**\n * 휴폐업상태 필터입니다.\n */\n closeDownStateCodes?: TaxInvoiceCloseDownStateCode[]\n /**\n * 문서번호 또는 국세청승인번호 필터입니다.\n */\n invoiceManagementKeyOrNationalTaxServiceConfirmationNumber?: string\n}\n\n/**\n * 문서함 URL 조회 요청 입력입니다.\n */\nexport interface GetTaxInvoiceBoxURLInput extends TaxInvoiceBusinessRequest {\n /**\n * 조회할 세금계산서 문서함 범위입니다.\n */\n taxInvoiceBoxScope: TaxInvoiceBoxScope\n}\n\n/**\n * 다건 인쇄 URL 요청 입력입니다.\n */\nexport interface GetBulkInvoicePrintURLInput extends TaxInvoiceBusinessRequest {\n /**\n * 인쇄 대상 문서번호 유형입니다.\n */\n invoiceDocumentKeyType: TaxInvoiceDocumentKeyType\n /**\n * 인쇄 대상 문서번호 목록입니다.\n */\n invoiceManagementKeys: string[]\n}\n\n/**\n * 인감 및 첨부문서 등록 URL 조회 요청 입력입니다.\n */\nexport type GetSealAndAttachmentRegistrationURLInput = TaxInvoiceBusinessRequest\n\n/**\n * 파일 경로 기반 첨부 요청 입력입니다.\n */\nexport interface AttachFileFromPathInput extends TaxInvoiceDocumentRequest {\n /**\n * 팝빌에 표시할 첨부파일명입니다.\n */\n displayName: string\n /**\n * 업로드할 파일의 로컬 경로입니다.\n */\n filePath: string\n}\n\n/**\n * 바이너리 기반 첨부 요청 입력입니다.\n */\nexport interface AttachFileFromBinaryInput extends TaxInvoiceDocumentRequest {\n /**\n * 업로드할 파일명입니다.\n */\n fileName: string\n /**\n * 업로드할 파일 바이너리 데이터입니다.\n */\n fileData: Buffer\n}\n\n/**\n * 첨부파일 삭제 요청 입력입니다.\n */\nexport interface DeleteAttachedFileInput extends TaxInvoiceDocumentRequest {\n /**\n * 삭제할 첨부파일 식별자(FileID)입니다.\n */\n fileIdentifier: string\n}\n\n/**\n * 이메일 재전송 요청 입력입니다.\n */\nexport interface ResendInvoiceEmailInput extends TaxInvoiceDocumentRequest {\n /**\n * 재전송할 수신자 이메일 주소입니다.\n */\n receiverEmailAddress: string\n}\n\n/**\n * 문자 재전송 요청 입력입니다.\n */\nexport interface ResendInvoiceSMSInput extends TaxInvoiceDocumentRequest {\n /**\n * 발신자 전화번호입니다.\n */\n senderPhoneNumber: string\n /**\n * 수신자 전화번호입니다.\n */\n receiverPhoneNumber: string\n /**\n * 재전송할 문자 본문입니다.\n */\n messageBody: string\n}\n\n/**\n * 팩스 재전송 요청 입력입니다.\n */\nexport interface ResendInvoiceFAXInput extends TaxInvoiceDocumentRequest {\n /**\n * 발신 팩스번호입니다.\n */\n senderNumber: string\n /**\n * 수신 팩스번호입니다.\n */\n receiverNumber: string\n}\n\n/**\n * 전자명세서 첨부 요청 입력입니다.\n */\nexport interface AttachInvoiceStatementInput extends TaxInvoiceDocumentRequest {\n /**\n * 첨부할 전자명세서 문서 유형 코드입니다.\n */\n statementItemCode: TaxInvoiceStatementItemCode\n /**\n * 첨부할 전자명세서 관리번호입니다.\n */\n statementManagementKey: string\n}\n\n/**\n * 전자명세서 첨부해제 요청 입력입니다.\n */\nexport interface DetachInvoiceStatementInput extends TaxInvoiceDocumentRequest {\n /**\n * 첨부해제할 전자명세서 문서 유형 코드입니다.\n */\n statementItemCode: TaxInvoiceStatementItemCode\n /**\n * 첨부해제할 전자명세서 관리번호입니다.\n */\n statementManagementKey: string\n}\n\n/**\n * 문서번호 할당 요청 입력입니다.\n */\nexport interface AssignInvoiceManagementKeyInput extends TaxInvoiceBusinessRequest {\n /**\n * 할당 대상 문서번호 유형입니다.\n */\n invoiceDocumentKeyType: TaxInvoiceDocumentKeyType\n /**\n * 팝빌 문서 식별키(ItemKey)입니다.\n */\n itemKey: string\n /**\n * 새로 할당할 문서번호입니다.\n */\n invoiceManagementKey: string\n}\n\n/**\n * 이메일 전송설정 수정 입력입니다.\n */\nexport interface UpdateEmailSendSettingsInput extends TaxInvoiceBusinessRequest {\n /**\n * 수정할 메일 전송 유형 코드입니다.\n */\n emailType: TaxInvoiceEmailType\n /**\n * 전송 활성화 여부입니다.\n */\n sendEnabled: boolean\n}\n\n/**\n * TaxInvoice modern facade 서비스 인터페이스입니다.\n *\n * 모든 메서드는 `input`만 받으며,\n * 실패 시 `PopbillApiError`를 throw 합니다.\n */\nexport interface TaxInvoiceService {\n /**\n * 등록과 동시에 세금계산서를 즉시 발행합니다.\n *\n * Compat: `registIssue`\n */\n issueInvoiceImmediately(input: IssueInvoiceImmediatelyInput): Promise<response.TaxInvoiceIssueResult>\n\n /**\n * 초대량 발행을 접수합니다.\n *\n * Compat: `bulkSubmit`\n */\n submitBulkIssue(input: SubmitBulkIssueInput): Promise<response.TaxInvoiceBulkSubmitResult>\n\n /**\n * 초대량 발행 접수결과를 조회합니다.\n *\n * Compat: `getBulkResult`\n */\n getBulkIssueSubmissionResult(input: GetBulkIssueSubmissionResultInput): Promise<response.TaxInvoiceBulkIssueSubmissionResult>\n\n /**\n * 세금계산서를 임시저장합니다.\n *\n * Compat: `register`\n */\n registerInvoice(input: RegisterInvoiceInput): Promise<response.TaxInvoiceOperationResult>\n\n /**\n * 임시저장 문서를 수정합니다.\n *\n * Compat: `update`\n */\n updateInvoice(input: UpdateInvoiceInput): Promise<response.TaxInvoiceOperationResult>\n\n /**\n * 저장된 문서를 발행합니다.\n *\n * Compat: `issue`\n */\n issueInvoice(input: IssueInvoiceInput): Promise<response.TaxInvoiceIssueResult>\n\n /**\n * 발행된 문서를 취소합니다.\n *\n * Compat: `cancelIssue`\n */\n cancelIssuedInvoice(input: CancelIssuedInvoiceInput): Promise<response.TaxInvoiceOperationResult>\n\n /**\n * 등록과 동시에 역발행 요청을 보냅니다.\n *\n * Compat: `registRequest`\n */\n requestReverseIssueImmediately(input: RequestReverseIssueImmediatelyInput): Promise<response.TaxInvoiceOperationResult>\n\n /**\n * 저장된 문서로 역발행 요청을 보냅니다.\n *\n * Compat: `request`\n */\n requestReverseIssue(input: RequestReverseIssueInput): Promise<response.TaxInvoiceOperationResult>\n\n /**\n * 역발행 요청을 취소합니다.\n *\n * Compat: `cancelRequest`\n */\n cancelReverseIssueRequest(input: CancelReverseIssueRequestInput): Promise<response.TaxInvoiceOperationResult>\n\n /**\n * 역발행 요청을 거부합니다.\n *\n * Compat: `refuse`\n */\n refuseReverseIssueRequest(input: RefuseReverseIssueRequestInput): Promise<response.TaxInvoiceOperationResult>\n\n /**\n * 문서를 삭제합니다.\n *\n * Compat: `delete`\n */\n deleteInvoice(input: TaxInvoiceDocumentRequest): Promise<response.TaxInvoiceOperationResult>\n\n /**\n * 문서를 국세청으로 즉시 전송합니다.\n *\n * Compat: `sendToNTS`\n */\n sendInvoiceToNTS(input: SendInvoiceToNationalTaxServiceInput): Promise<response.TaxInvoiceOperationResult>\n\n /**\n * 문서 1건의 상태 요약정보를 조회합니다.\n *\n * Compat: `getInfo`\n */\n getInvoiceInfo(input: TaxInvoiceDocumentRequest): Promise<response.TaxInvoiceInfo>\n\n /**\n * 문서 다건의 상태 요약정보를 조회합니다.\n *\n * Compat: `getInfos`\n */\n getInvoicesInfo(input: GetInvoicesInfoInput): Promise<response.TaxInvoiceInfo[]>\n\n /**\n * 문서 1건의 상세정보를 조회합니다.\n *\n * Compat: `getDetailInfo`\n */\n getInvoiceDetailInfo(input: TaxInvoiceDocumentRequest): Promise<response.TaxInvoiceDocumentOutput>\n\n /**\n * 문서번호 사용 여부를 확인합니다.\n *\n * Compat: `checkMgtKeyInUse`\n */\n checkInvoiceManagementKeyInUse(input: TaxInvoiceDocumentRequest): Promise<response.TaxInvoiceInvoiceManagementKeyUsage>\n\n /**\n * 문서 XML 정보를 조회합니다.\n *\n * Compat: `getXML`\n */\n getInvoiceXML(input: TaxInvoiceDocumentRequest): Promise<response.TaxInvoiceXmlResult>\n\n /**\n * 검색조건으로 문서를 조회합니다.\n *\n * Compat: `search`\n */\n searchInvoices(input: SearchInvoicesInput): Promise<response.TaxInvoiceSearchResult>\n\n /**\n * 문서 상태 변경이력을 조회합니다.\n *\n * Compat: `getLogs`\n */\n getInvoiceLogs(input: TaxInvoiceDocumentRequest): Promise<response.TaxInvoiceLogEntry[]>\n\n /**\n * 세금계산서 문서함 팝업 URL을 조회합니다.\n *\n * Compat: `getURL`\n */\n getTaxInvoiceBoxURL(input: GetTaxInvoiceBoxURLInput): Promise<response.TaxInvoiceAccessUrl>\n\n /**\n * 문서 팝업 URL을 조회합니다.\n *\n * Compat: `getPopUpURL`\n */\n getInvoicePopupURL(input: TaxInvoiceDocumentRequest): Promise<response.TaxInvoiceAccessUrl>\n\n /**\n * 보기 전용 팝업 URL을 조회합니다.\n *\n * Compat: `getViewURL`\n */\n getInvoiceViewURL(input: TaxInvoiceDocumentRequest): Promise<response.TaxInvoiceAccessUrl>\n\n /**\n * 공급자 인쇄 팝업 URL을 조회합니다.\n *\n * Compat: `getPrintURL`\n */\n getSupplierInvoicePrintURL(input: TaxInvoiceDocumentRequest): Promise<response.TaxInvoiceAccessUrl>\n\n /**\n * 공급받는자 인쇄 팝업 URL을 조회합니다.\n *\n * Compat: `getEPrintURL`\n */\n getBuyerInvoicePrintURL(input: TaxInvoiceDocumentRequest): Promise<response.TaxInvoiceAccessUrl>\n\n /**\n * 다건 인쇄 팝업 URL을 조회합니다.\n *\n * Compat: `getMassPrintURL`\n */\n getBulkInvoicePrintURL(input: GetBulkInvoicePrintURLInput): Promise<response.TaxInvoiceAccessUrl>\n\n /**\n * 메일 보기 URL을 조회합니다.\n *\n * Compat: `getMailURL`\n */\n getInvoiceMailURL(input: TaxInvoiceDocumentRequest): Promise<response.TaxInvoiceAccessUrl>\n\n /**\n * PDF 다운로드 URL을 조회합니다.\n *\n * Compat: `getPDFURL`\n */\n getInvoicePDFURL(input: TaxInvoiceDocumentRequest): Promise<response.TaxInvoiceAccessUrl>\n\n /**\n * 인감 및 첨부문서 등록 URL을 조회합니다.\n *\n * Compat: `getSealURL`\n */\n getSealAndAttachmentRegistrationURL(input: GetSealAndAttachmentRegistrationURLInput): Promise<response.TaxInvoiceAccessUrl>\n\n /**\n * 파일 경로 기반 첨부를 수행합니다.\n *\n * Compat: `attachFile`\n */\n attachFileFromPath(input: AttachFileFromPathInput): Promise<response.TaxInvoiceOperationResult>\n\n /**\n * 바이너리 기반 첨부를 수행합니다.\n *\n * Compat: `attachFileBinary`\n */\n attachFileFromBinary(input: AttachFileFromBinaryInput): Promise<response.TaxInvoiceOperationResult>\n\n /**\n * 첨부파일을 삭제합니다.\n *\n * Compat: `deleteFile`\n */\n deleteAttachedFile(input: DeleteAttachedFileInput): Promise<response.TaxInvoiceOperationResult>\n\n /**\n * 첨부파일 목록을 조회합니다.\n *\n * Compat: `getFiles`\n */\n getAttachedFiles(input: TaxInvoiceDocumentRequest): Promise<response.TaxInvoiceAttachedFile[]>\n\n /**\n * 안내 메일을 재전송합니다.\n *\n * Compat: `sendEmail`\n */\n resendInvoiceEmail(input: ResendInvoiceEmailInput): Promise<response.TaxInvoiceOperationResult>\n\n /**\n * 안내 문자를 재전송합니다.\n *\n * Compat: `sendSMS`\n */\n resendInvoiceSMS(input: ResendInvoiceSMSInput): Promise<response.TaxInvoiceOperationResult>\n\n /**\n * 안내 팩스를 재전송합니다.\n *\n * Compat: `sendFAX`\n */\n resendInvoiceFAX(input: ResendInvoiceFAXInput): Promise<response.TaxInvoiceOperationResult>\n\n /**\n * 전자명세서를 첨부합니다.\n *\n * Compat: `attachStatement`\n */\n attachInvoiceStatement(input: AttachInvoiceStatementInput): Promise<response.TaxInvoiceOperationResult>\n\n /**\n * 전자명세서 첨부를 해제합니다.\n *\n * Compat: `detachStatement`\n */\n detachInvoiceStatement(input: DetachInvoiceStatementInput): Promise<response.TaxInvoiceOperationResult>\n\n /**\n * 문서번호를 할당합니다.\n *\n * Compat: `assignMgtKey`\n */\n assignInvoiceManagementKey(input: AssignInvoiceManagementKeyInput): Promise<response.TaxInvoiceOperationResult>\n\n /**\n * 이메일 발송설정을 조회합니다.\n *\n * Compat: `listEmailConfig`\n */\n getEmailSendSettings(input: TaxInvoiceBusinessRequest): Promise<response.TaxInvoiceEmailSendSetting[]>\n\n /**\n * 이메일 발송설정을 수정합니다.\n *\n * Compat: `updateEmailConfig`\n */\n updateEmailSendSettings(input: UpdateEmailSendSettingsInput): Promise<response.TaxInvoiceOperationResult>\n\n /**\n * 국세청 전송설정을 조회합니다.\n *\n * Compat: `getSendToNTSConfig`\n */\n getSendToNTSSettings(input: TaxInvoiceBusinessRequest): Promise<response.TaxInvoiceSendToNationalTaxServiceSetting>\n\n /**\n * 인증서 등록 URL을 조회합니다.\n *\n * Compat: `getTaxCertURL`\n */\n getTaxCertificateRegistrationURL(input: TaxInvoiceBusinessRequest): Promise<response.TaxInvoiceAccessUrl>\n\n /**\n * 인증서 만료일을 조회합니다.\n *\n * Compat: `getCertificateExpireDate`\n */\n getTaxCertificateExpirationDate(input: TaxInvoiceBusinessRequest): Promise<response.TaxInvoiceTaxCertificateExpiration>\n\n /**\n * 인증서 유효성을 점검합니다.\n *\n * Compat: `checkCertValidation`\n */\n checkTaxCertificateValidation(input: TaxInvoiceBusinessRequest): Promise<response.TaxInvoiceOperationResult>\n\n /**\n * 인증서 정보를 조회합니다.\n *\n * Compat: `getTaxCertInfo`\n */\n getTaxCertificateInfo(input: TaxInvoiceBusinessRequest): Promise<response.TaxInvoiceTaxCertificateInfo>\n}\n","import { toBoolean } from '@connextable/popbill-utils'\nimport { mapTaxInvoiceInfo } from './invoice-info'\nimport { TaxInvoiceChargeDirectionValues } from '@/services/tax-invoice/types'\nimport type {\n TaxInvoiceAccessUrl,\n TaxInvoiceAttachedFile,\n TaxInvoiceBulkIssueSubmissionResult,\n TaxInvoiceBulkIssueSubmissionResultItem,\n TaxInvoiceBulkIssueSubmissionTransactionState,\n TaxInvoiceBulkSubmitResult,\n TaxInvoiceBuyerInput,\n TaxInvoiceChargeDirection,\n TaxInvoiceDocumentOutput,\n TaxInvoiceEmailSendSetting,\n TaxInvoiceInfo,\n TaxInvoiceInvoiceManagementKeyUsage,\n TaxInvoiceIssueResult,\n TaxInvoiceLogEntry,\n TaxInvoiceOperationResult,\n TaxInvoicePartyInput,\n TaxInvoiceSearchResult,\n TaxInvoiceSendToNationalTaxServiceSetting,\n TaxInvoiceTaxCertificateExpiration,\n TaxInvoiceTaxCertificateInfo,\n TaxInvoiceXmlResult,\n} from '@/services/tax-invoice/types'\nimport type * as Spec from '@connextable/popbill-spec'\n\n/**\n * 공통 API 처리결과를 도메인 처리결과로 변환합니다.\n */\nexport function mapTaxInvoiceOperationResult(\n taxInvoiceApiResponse: Spec.TaxInvoiceApiResponseBase | { code: number | string; message: string }\n): TaxInvoiceOperationResult {\n return {\n resultCode: toRequiredNumber(taxInvoiceApiResponse.code, 'code'),\n resultMessage: taxInvoiceApiResponse.message,\n }\n}\n\n/**\n * 발행 결과를 도메인 발행 결과로 변환합니다.\n */\nexport function mapTaxInvoiceIssueResult(taxInvoiceApiResponse: Spec.TaxInvoiceIssueApiResponse): TaxInvoiceIssueResult {\n return removeUndefinedProperties({\n ...mapTaxInvoiceOperationResult(taxInvoiceApiResponse),\n nationalTaxServiceConfirmationNumber: taxInvoiceApiResponse.ntsConfirmNum,\n issuedAt: taxInvoiceApiResponse.issueDT ?? undefined,\n })\n}\n\n/**\n * 초대량 접수 결과를 도메인 결과로 변환합니다.\n */\nexport function mapTaxInvoiceBulkSubmitResult(taxInvoiceApiResponse: Spec.TaxInvoiceBulkSubmitApiResponse): TaxInvoiceBulkSubmitResult {\n return removeUndefinedProperties({\n ...mapTaxInvoiceOperationResult(taxInvoiceApiResponse),\n receiptIdentifier: taxInvoiceApiResponse.receiptID,\n })\n}\n\n/**\n * 초대량 접수결과 조회 응답을 도메인 결과로 변환합니다.\n */\nexport function mapTaxInvoiceBulkIssueSubmissionResult(\n taxInvoiceApiResponse: Spec.TaxInvoiceGetBulkResultApiResponse\n): TaxInvoiceBulkIssueSubmissionResult {\n return removeUndefinedProperties({\n ...mapTaxInvoiceOperationResult(taxInvoiceApiResponse),\n receiptIdentifier: taxInvoiceApiResponse.receiptID,\n submissionIdentifier: taxInvoiceApiResponse.submitID,\n receivedAt: taxInvoiceApiResponse.receiptDT,\n submittedDocumentCount: toOptionalNumber(taxInvoiceApiResponse.submitCount),\n succeededDocumentCount: toOptionalNumber(taxInvoiceApiResponse.successCount),\n failedDocumentCount: toOptionalNumber(taxInvoiceApiResponse.failCount),\n transactionState: toTaxInvoiceBulkIssueSubmissionTransactionState(taxInvoiceApiResponse.txState),\n transactionStartedAt: taxInvoiceApiResponse.txStartDT,\n transactionCompletedAt: taxInvoiceApiResponse.txEndDT,\n transactionResultCode: toOptionalNumber(taxInvoiceApiResponse.txResultCode),\n issueResults: taxInvoiceApiResponse.issueResult?.map(mapTaxInvoiceBulkIssueSubmissionResultItem),\n })\n}\n\n/**\n * 다건 문서 요약 응답을 도메인 목록으로 변환합니다.\n */\nexport function mapTaxInvoiceInfos(taxInvoiceApiResponse: Spec.TaxInvoiceGetInfosApiResponse): TaxInvoiceInfo[] {\n return taxInvoiceApiResponse.map(mapTaxInvoiceInfo)\n}\n\n/**\n * 문서 상세 응답을 도메인 문서 상세로 변환합니다.\n */\nexport function mapTaxInvoiceDocumentOutput(taxInvoiceApiResponse: Spec.TaxInvoiceGetDetailInfoApiResponse): TaxInvoiceDocumentOutput {\n return removeUndefinedProperties({\n writeSpecificationEnabled: taxInvoiceApiResponse.writeSpecification,\n writtenDate: taxInvoiceApiResponse.writeDate,\n chargeDirection: toTaxInvoiceChargeDirection(taxInvoiceApiResponse.chargeDirection),\n issueType: taxInvoiceApiResponse.issueType,\n purposeType: taxInvoiceApiResponse.purposeType,\n issueTimingCode: taxInvoiceApiResponse.issueTiming,\n taxType: taxInvoiceApiResponse.taxType,\n supplier: mapSupplierOutput(taxInvoiceApiResponse),\n buyer: mapBuyerOutput(taxInvoiceApiResponse),\n trustee: mapTrusteeOutput(taxInvoiceApiResponse),\n paymentSummary: removeUndefinedProperties({\n totalTaxAmount: taxInvoiceApiResponse.taxTotal,\n totalSupplyCostAmount: taxInvoiceApiResponse.supplyCostTotal,\n totalAmount: taxInvoiceApiResponse.totalAmount,\n cashAmount: taxInvoiceApiResponse.cash,\n checkAmount: taxInvoiceApiResponse.chkBill,\n promissoryNoteAmount: taxInvoiceApiResponse.note,\n creditAmount: taxInvoiceApiResponse.credit,\n }),\n modification: removeUndefinedProperties({\n modificationReasonCode: taxInvoiceApiResponse.modifyCode,\n originalNationalTaxServiceConfirmationNumber: taxInvoiceApiResponse.orgNTSConfirmNum,\n }),\n taxInvoiceSerialNumber: taxInvoiceApiResponse.serialNum,\n remarkOne: taxInvoiceApiResponse.remark1,\n remarkTwo: taxInvoiceApiResponse.remark2,\n remarkThree: taxInvoiceApiResponse.remark3,\n bookVolumeNumber: taxInvoiceApiResponse.kwon,\n bookIssueNumber: taxInvoiceApiResponse.ho,\n includeBusinessLicenseImage: toOptionalBoolean(taxInvoiceApiResponse.businessLicenseYN),\n includeBankBookImage: toOptionalBoolean(taxInvoiceApiResponse.bankBookYN),\n lineItems: taxInvoiceApiResponse.detailList?.map((lineItem) =>\n removeUndefinedProperties({\n lineNumber: lineItem.serialNum,\n transactionDate: lineItem.purchaseDT,\n itemName: lineItem.itemName,\n specification: lineItem.spec,\n quantity: lineItem.qty,\n unitCostAmount: lineItem.unitCost,\n supplyCostAmount: lineItem.supplyCost,\n taxAmount: lineItem.tax,\n remark: lineItem.remark,\n })\n ),\n additionalContacts: taxInvoiceApiResponse.addContactList?.map((additionalContact) =>\n removeUndefinedProperties({\n sequenceNumber: additionalContact.serialNum,\n contactName: additionalContact.contactName,\n emailAddress: additionalContact.email,\n })\n ),\n issuedAt: taxInvoiceApiResponse.issueDT,\n stateCode: toOptionalNumber(taxInvoiceApiResponse.stateCode),\n stateChangedAt: taxInvoiceApiResponse.stateDT,\n isLateIssued: toOptionalBoolean(taxInvoiceApiResponse.lateIssueYN),\n isOpen: toOptionalBoolean(taxInvoiceApiResponse.openYN),\n openedAt: taxInvoiceApiResponse.openDT,\n nationalTaxServiceConfirmationNumber: taxInvoiceApiResponse.ntsconfirmNum,\n nationalTaxServiceResultCode: taxInvoiceApiResponse.ntsresult,\n nationalTaxServiceSentAt: taxInvoiceApiResponse.ntssendDT,\n nationalTaxServiceResultReceivedAt: taxInvoiceApiResponse.ntsresultDT,\n nationalTaxServiceSendErrorCode: taxInvoiceApiResponse.ntssendErrCode,\n isApiLinkedDocument: toOptionalBoolean(taxInvoiceApiResponse.interOPYN),\n })\n}\n\n/**\n * 문서번호 사용 여부 응답을 도메인 결과로 변환합니다.\n */\nexport function mapTaxInvoiceInvoiceManagementKeyUsage(taxInvoiceApiResponse: boolean | { itemKey?: string }): TaxInvoiceInvoiceManagementKeyUsage {\n if (typeof taxInvoiceApiResponse === 'boolean') {\n return {\n isInUse: taxInvoiceApiResponse,\n }\n }\n\n return removeUndefinedProperties({\n isInUse: typeof taxInvoiceApiResponse.itemKey === 'string' && taxInvoiceApiResponse.itemKey.length > 0,\n itemKey: taxInvoiceApiResponse.itemKey,\n })\n}\n\n/**\n * XML 조회 응답을 도메인 결과로 변환합니다.\n */\nexport function mapTaxInvoiceXmlResult(taxInvoiceApiResponse: Spec.TaxInvoiceGetXmlApiResponse): TaxInvoiceXmlResult {\n return removeUndefinedProperties({\n operationResult:\n taxInvoiceApiResponse.code === undefined || taxInvoiceApiResponse.message === undefined\n ? undefined\n : mapTaxInvoiceOperationResult({\n code: taxInvoiceApiResponse.code,\n message: taxInvoiceApiResponse.message,\n }),\n itemKey: taxInvoiceApiResponse.itemKey,\n invoiceManagementKey: taxInvoiceApiResponse.mgtKey,\n xmlContent: taxInvoiceApiResponse.retObject,\n })\n}\n\n/**\n * 검색 응답을 도메인 검색 결과로 변환합니다.\n */\nexport function mapTaxInvoiceSearchResult(taxInvoiceApiResponse: Spec.TaxInvoiceSearchApiResponse): TaxInvoiceSearchResult {\n return removeUndefinedProperties({\n operationResult: mapTaxInvoiceOperationResult(taxInvoiceApiResponse),\n totalCount: toOptionalNumber(taxInvoiceApiResponse.total),\n pageSize: toOptionalNumber(taxInvoiceApiResponse.perPage),\n pageNumber: toOptionalNumber(taxInvoiceApiResponse.pageNum),\n pageCount: toOptionalNumber(taxInvoiceApiResponse.pageCount),\n invoiceSummaries: (taxInvoiceApiResponse.list ?? []).map(mapTaxInvoiceInfo),\n })\n}\n\n/**\n * 문서 로그 응답을 도메인 로그 목록으로 변환합니다.\n */\nexport function mapTaxInvoiceLogs(taxInvoiceApiResponse: Spec.TaxInvoiceGetLogsApiResponse): TaxInvoiceLogEntry[] {\n return taxInvoiceApiResponse.map((logEntry) =>\n removeUndefinedProperties({\n documentLogTypeCode: toOptionalNumber(logEntry.docLogType),\n logMessage: logEntry.log,\n processTypeCode: logEntry.procType,\n processCompanyName: logEntry.procCorpName,\n processContactName: logEntry.procContactName,\n processDescription: logEntry.procMemo,\n registeredAt: logEntry.regDT,\n ipAddress: logEntry.ip,\n })\n )\n}\n\n/**\n * URL 문자열을 URL 응답으로 래핑합니다.\n */\nexport function mapTaxInvoiceAccessUrlFromString(accessUrl: string): TaxInvoiceAccessUrl {\n return { accessUrl }\n}\n\n/**\n * URL 객체를 URL 응답으로 변환합니다.\n */\nexport function mapTaxInvoiceAccessUrl(taxInvoiceApiResponse: { url: string }): TaxInvoiceAccessUrl {\n return { accessUrl: taxInvoiceApiResponse.url }\n}\n\n/**\n * 첨부파일 목록 응답을 도메인 목록으로 변환합니다.\n */\nexport function mapTaxInvoiceAttachedFiles(taxInvoiceApiResponse: Spec.TaxInvoiceGetFilesApiResponse): TaxInvoiceAttachedFile[] {\n return taxInvoiceApiResponse.map((attachedFile) =>\n removeUndefinedProperties({\n sequenceNumber: attachedFile.serialNum,\n fileIdentifier: attachedFile.attachedFile,\n displayName: attachedFile.displayName,\n registeredAt: attachedFile.regDT,\n })\n )\n}\n\n/**\n * 이메일 전송설정 응답을 도메인 목록으로 변환합니다.\n */\nexport function mapTaxInvoiceEmailSendSettings(taxInvoiceApiResponse: Spec.TaxInvoiceListEmailConfigApiResponse): TaxInvoiceEmailSendSetting[] {\n return taxInvoiceApiResponse.map((emailSendSetting) =>\n removeUndefinedProperties({\n emailTypeCode: emailSendSetting.emailType,\n sendEnabled: toOptionalBoolean(emailSendSetting.sendYN),\n })\n )\n}\n\n/**\n * 국세청 전송설정 응답을 도메인 설정으로 변환합니다.\n */\nexport function mapTaxInvoiceSendToNationalTaxServiceSetting(\n taxInvoiceApiResponse: Spec.TaxInvoiceGetSendToNTSConfigApiResponse\n): TaxInvoiceSendToNationalTaxServiceSetting {\n return {\n sendToNationalTaxServiceEnabled: toBoolean(taxInvoiceApiResponse.sendToNTS),\n }\n}\n\n/**\n * 인증서 만료일 문자열을 도메인 결과로 래핑합니다.\n */\nexport function mapTaxInvoiceTaxCertificateExpiration(expirationDateTime: string): TaxInvoiceTaxCertificateExpiration {\n return { expirationDateTime }\n}\n\n/**\n * 인증서 정보 응답을 도메인 정보로 변환합니다.\n */\nexport function mapTaxInvoiceTaxCertificateInfo(taxInvoiceApiResponse: Spec.TaxInvoiceGetTaxCertInfoApiResponse): TaxInvoiceTaxCertificateInfo {\n return removeUndefinedProperties({\n registeredAt: taxInvoiceApiResponse.regDT,\n expiredAt: taxInvoiceApiResponse.expireDT,\n issuerDistinguishedName: taxInvoiceApiResponse.issuerDN,\n subjectDistinguishedName: taxInvoiceApiResponse.subjectDN,\n issuerName: taxInvoiceApiResponse.issuerName,\n policyObjectIdentifier: taxInvoiceApiResponse.OID ?? taxInvoiceApiResponse.oid,\n registeredContactName: taxInvoiceApiResponse.regContactName,\n registeredContactIdentifier: taxInvoiceApiResponse.regContactID,\n })\n}\n\n/**\n * 초대량 개별 처리 결과를 도메인 항목으로 변환합니다.\n */\nfunction mapTaxInvoiceBulkIssueSubmissionResultItem(\n taxInvoiceApiResponse: NonNullable<Spec.TaxInvoiceGetBulkResultApiResponse['issueResult']>[number]\n): TaxInvoiceBulkIssueSubmissionResultItem {\n return removeUndefinedProperties({\n invoiceDocumentKeyTypeCode: taxInvoiceApiResponse.keyType,\n supplierInvoiceManagementKey: taxInvoiceApiResponse.invoicerMgtKey,\n trusteeInvoiceManagementKey: taxInvoiceApiResponse.trusteeMgtKey,\n resultCode: toOptionalNumber(taxInvoiceApiResponse.code),\n resultMessage: taxInvoiceApiResponse.message,\n nationalTaxServiceConfirmationNumber: taxInvoiceApiResponse.ntsconfirmNum,\n receivedAt: taxInvoiceApiResponse.receiptDT,\n issuedAt: taxInvoiceApiResponse.issueDT,\n })\n}\n\n/**\n * 공급자 응답 필드를 도메인 공급자 정보로 변환합니다.\n */\nfunction mapSupplierOutput(taxInvoiceApiResponse: Spec.TaxInvoiceApiModel): TaxInvoicePartyInput | undefined {\n return compactOptionalObject({\n businessNumber: taxInvoiceApiResponse.invoicerCorpNum,\n managementKey: taxInvoiceApiResponse.invoicerMgtKey,\n taxRegistrationIdentifier: taxInvoiceApiResponse.invoicerTaxRegID,\n companyName: taxInvoiceApiResponse.invoicerCorpName,\n chiefExecutiveOfficerName: taxInvoiceApiResponse.invoicerCEOName,\n address: taxInvoiceApiResponse.invoicerAddr,\n businessClass: taxInvoiceApiResponse.invoicerBizClass,\n businessType: taxInvoiceApiResponse.invoicerBizType,\n contactName: taxInvoiceApiResponse.invoicerContactName,\n telephoneNumber: taxInvoiceApiResponse.invoicerTEL,\n mobilePhoneNumber: taxInvoiceApiResponse.invoicerHP,\n emailAddress: taxInvoiceApiResponse.invoicerEmail,\n sendTextMessage: toOptionalBoolean(taxInvoiceApiResponse.invoicerSMSSendYN),\n printEnabled: toOptionalBoolean(taxInvoiceApiResponse.invoicerPrintYN),\n residentRegistrationNumber: taxInvoiceApiResponse.invoicerRDN,\n foreignerRegistrationNumber: taxInvoiceApiResponse.invoicerOLN,\n branchBusinessNumber: taxInvoiceApiResponse.invoicerTaxNum,\n branchSerialNumber: taxInvoiceApiResponse.invoicerPSerialNum,\n corporationClassification: taxInvoiceApiResponse.invoicerCorpCls,\n departmentName: taxInvoiceApiResponse.invoicerDeptName,\n })\n}\n\n/**\n * 공급받는자 응답 필드를 도메인 공급받는자 정보로 변환합니다.\n */\nfunction mapBuyerOutput(taxInvoiceApiResponse: Spec.TaxInvoiceApiModel): TaxInvoiceBuyerInput | undefined {\n return compactOptionalObject({\n recipientType: taxInvoiceApiResponse.invoiceeType,\n businessNumber: taxInvoiceApiResponse.invoiceeCorpNum,\n managementKey: taxInvoiceApiResponse.invoiceeMgtKey,\n taxRegistrationIdentifier: taxInvoiceApiResponse.invoiceeTaxRegID,\n companyName: taxInvoiceApiResponse.invoiceeCorpName,\n chiefExecutiveOfficerName: taxInvoiceApiResponse.invoiceeCEOName,\n address: taxInvoiceApiResponse.invoiceeAddr,\n businessClass: taxInvoiceApiResponse.invoiceeBizClass,\n businessType: taxInvoiceApiResponse.invoiceeBizType,\n contactName: taxInvoiceApiResponse.invoiceeContactName1,\n telephoneNumber: taxInvoiceApiResponse.invoiceeTEL1,\n mobilePhoneNumber: taxInvoiceApiResponse.invoiceeHP1,\n emailAddress: taxInvoiceApiResponse.invoiceeEmail1,\n secondaryContactName: taxInvoiceApiResponse.invoiceeContactName2,\n secondaryTelephoneNumber: taxInvoiceApiResponse.invoiceeTEL2,\n secondaryMobilePhoneNumber: taxInvoiceApiResponse.invoiceeHP2,\n secondaryEmailAddress: taxInvoiceApiResponse.invoiceeEmail2,\n sendTextMessage: toOptionalBoolean(taxInvoiceApiResponse.invoiceeSMSSendYN),\n printEnabled: toOptionalBoolean(taxInvoiceApiResponse.invoiceePrintYN),\n residentRegistrationNumber: taxInvoiceApiResponse.invoiceeRDN,\n foreignerRegistrationNumber: taxInvoiceApiResponse.invoiceeOLN,\n branchBusinessNumber: taxInvoiceApiResponse.invoiceeTaxNum,\n branchSerialNumber: taxInvoiceApiResponse.invoiceePSerialNum,\n corporationClassification: taxInvoiceApiResponse.invoiceeCorpCls,\n departmentName: taxInvoiceApiResponse.invoiceeDeptName1,\n primaryDepartmentName: taxInvoiceApiResponse.invoiceeDeptName1,\n secondaryDepartmentName: taxInvoiceApiResponse.invoiceeDeptName2,\n businessStatus: taxInvoiceApiResponse.closeDownState,\n businessStatusDate: taxInvoiceApiResponse.closeDownStateDate,\n })\n}\n\n/**\n * 수탁자 응답 필드를 도메인 수탁자 정보로 변환합니다.\n */\nfunction mapTrusteeOutput(taxInvoiceApiResponse: Spec.TaxInvoiceApiModel): TaxInvoicePartyInput | undefined {\n return compactOptionalObject({\n businessNumber: taxInvoiceApiResponse.trusteeCorpNum,\n managementKey: taxInvoiceApiResponse.trusteeMgtKey,\n taxRegistrationIdentifier: taxInvoiceApiResponse.trusteeTaxRegID,\n companyName: taxInvoiceApiResponse.trusteeCorpName,\n chiefExecutiveOfficerName: taxInvoiceApiResponse.trusteeCEOName,\n address: taxInvoiceApiResponse.trusteeAddr,\n businessClass: taxInvoiceApiResponse.trusteeBizClass,\n businessType: taxInvoiceApiResponse.trusteeBizType,\n contactName: taxInvoiceApiResponse.trusteeContactName,\n telephoneNumber: taxInvoiceApiResponse.trusteeTEL,\n mobilePhoneNumber: taxInvoiceApiResponse.trusteeHP,\n emailAddress: taxInvoiceApiResponse.trusteeEmail,\n sendTextMessage: toOptionalBoolean(taxInvoiceApiResponse.trusteeSMSSendYN),\n printEnabled: toOptionalBoolean(taxInvoiceApiResponse.trusteePrintYN),\n residentRegistrationNumber: taxInvoiceApiResponse.trusteeRDN,\n foreignerRegistrationNumber: taxInvoiceApiResponse.trusteeOLN,\n branchBusinessNumber: taxInvoiceApiResponse.trusteeTaxNum,\n branchSerialNumber: taxInvoiceApiResponse.trusteePSerialNum,\n corporationClassification: taxInvoiceApiResponse.trusteeCorpCls,\n departmentName: taxInvoiceApiResponse.trusteeDeptName,\n })\n}\n\n/**\n * 문자열/숫자 값을 숫자로 안전하게 변환합니다.\n */\nfunction toOptionalNumber(value: number | string | undefined): number | undefined {\n if (typeof value === 'number') {\n return Number.isFinite(value) ? value : undefined\n }\n\n if (typeof value !== 'string' || value.trim() === '') {\n return undefined\n }\n\n const normalizedNumber = Number(value)\n return Number.isFinite(normalizedNumber) ? normalizedNumber : undefined\n}\n\nfunction toRequiredNumber(value: number | string | undefined, fieldName: string): number {\n const normalizedNumber = toOptionalNumber(value)\n if (normalizedNumber !== undefined) {\n return normalizedNumber\n }\n\n throw new Error(`유효하지 않은 ${fieldName} 응답값입니다. (${String(value)})`)\n}\n\n/**\n * 초대량 처리 상태를 지원하는 도메인 상태값으로 정규화합니다.\n */\nfunction toTaxInvoiceBulkIssueSubmissionTransactionState(\n value: number | string | undefined\n): TaxInvoiceBulkIssueSubmissionTransactionState | undefined {\n const transactionState = toOptionalNumber(value)\n return transactionState === 0 || transactionState === 1 || transactionState === 2 ? transactionState : undefined\n}\n\n/**\n * 불리언 문자열/값을 불리언으로 안전하게 변환합니다.\n */\nfunction toOptionalBoolean(value: boolean | string | undefined): boolean | undefined {\n if (value === undefined) {\n return undefined\n }\n\n return toBoolean(value)\n}\n\n/**\n * 과금 방향 문자열을 도메인 과금 방향으로 안전하게 정규화합니다.\n */\nfunction toTaxInvoiceChargeDirection(chargeDirection: string | undefined): TaxInvoiceChargeDirection | undefined {\n if (chargeDirection === TaxInvoiceChargeDirectionValues.NormalCharge) {\n return TaxInvoiceChargeDirectionValues.NormalCharge\n }\n\n if (chargeDirection === TaxInvoiceChargeDirectionValues.ReverseCharge) {\n return TaxInvoiceChargeDirectionValues.ReverseCharge\n }\n\n return undefined\n}\n\n/**\n * 모든 필드가 비어있으면 `undefined`를 반환하고, 아니면 정리된 객체를 반환합니다.\n */\nfunction compactOptionalObject<T extends Record<string, unknown>>(sourceObject: T): T | undefined {\n const normalizedObject = removeUndefinedProperties(sourceObject)\n return Object.keys(normalizedObject).length === 0 ? undefined : normalizedObject\n}\n\n/**\n * 객체에서 `undefined` 값만 제거합니다.\n */\nfunction removeUndefinedProperties<T extends Record<string, unknown>>(sourceObject: T): T {\n const definedEntries = Object.entries(sourceObject).filter(([, value]) => value !== undefined)\n return Object.fromEntries(definedEntries) as T\n}\n","import { invokeTaxInvoiceMethod } from './adapters/error'\nimport * as documentMappers from './mappers/document'\nimport * as invoiceInfoMappers from './mappers/invoice-info'\nimport * as responseMappers from './mappers/response'\nimport * as taxInvoiceTypes from './types'\nimport { createInputValidationError } from '@connextable/popbill-compat/errors'\nimport type { TaxinvoicePromiseService as CompatTaxInvoiceService } from '@connextable/popbill-compat/factory'\nimport { PopbillErrorStage, type PopbillApiError } from '@/errors'\n\nconst KOREA_TIME_ZONE = 'Asia/Seoul'\nconst SEARCH_STATE_CODE_PATTERN = /^\\d[\\d*][\\d*]$/\nconst KOREA_DATE_FORMATTER = new Intl.DateTimeFormat('en-US', {\n timeZone: KOREA_TIME_ZONE,\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n})\nconst SEARCH_INVOICES_OPERATION = 'taxInvoice.searchInvoices'\n\ninterface CreateTaxInvoiceServiceInput {\n compatTaxInvoiceService: CompatTaxInvoiceService\n defaultUserId: string\n onError?: (error: PopbillApiError) => void\n}\n\n/**\n * TaxInvoice modern facade 서비스를 생성합니다.\n *\n * 입력 DTO를 compat positional 인자로 변환하고,\n * compat 에러를 `PopbillApiError`로 표준화하여 재throw 합니다.\n */\nexport function createTaxInvoiceService(input: CreateTaxInvoiceServiceInput): taxInvoiceTypes.TaxInvoiceService {\n const compatTaxInvoiceService = input.compatTaxInvoiceService\n\n return {\n issueInvoiceImmediately(request) {\n return invokeTaxInvoiceMethod(input, 'taxInvoice.issueInvoiceImmediately', async () => {\n const taxInvoiceApiResponse = await compatTaxInvoiceService.registIssue(\n request.businessNumber,\n documentMappers.mapTaxInvoiceDocument(request.taxInvoiceDocument),\n request.writeSpecification,\n request.forceIssue,\n request.historyMemo,\n request.emailSubject,\n request.dealInvoiceManagementKey,\n input.defaultUserId\n )\n\n return responseMappers.mapTaxInvoiceIssueResult(taxInvoiceApiResponse)\n })\n },\n\n submitBulkIssue(request) {\n return invokeTaxInvoiceMethod(input, 'taxInvoice.submitBulkIssue', async () => {\n const taxInvoiceApiResponse = await compatTaxInvoiceService.bulkSubmit(\n request.businessNumber,\n request.submissionIdentifier,\n documentMappers.mapTaxInvoiceDocuments(request.taxInvoiceDocuments),\n request.forceIssue,\n input.defaultUserId\n )\n\n return responseMappers.mapTaxInvoiceBulkSubmitResult(taxInvoiceApiResponse)\n })\n },\n\n getBulkIssueSubmissionResult(request) {\n return invokeTaxInvoiceMethod(input, 'taxInvoice.getBulkIssueSubmissionResult', async () => {\n const taxInvoiceApiResponse = await compatTaxInvoiceService.getBulkResult(\n request.businessNumber,\n request.submissionIdentifier,\n input.defaultUserId\n )\n\n return responseMappers.mapTaxInvoiceBulkIssueSubmissionResult(taxInvoiceApiResponse)\n })\n },\n\n registerInvoice(request) {\n return invokeTaxInvoiceMethod(input, 'taxInvoice.registerInvoice', async () => {\n const taxInvoiceApiResponse = await compatTaxInvoiceService.register(\n request.businessNumber,\n documentMappers.mapTaxInvoiceDocument(request.taxInvoiceDocument),\n input.defaultUserId\n )\n\n return responseMappers.mapTaxInvoiceOperationResult(taxInvoiceApiResponse)\n })\n },\n\n updateInvoice(request) {\n return invokeTaxInvoiceMethod(input, 'taxInvoice.updateInvoice', async () => {\n const taxInvoiceApiResponse = await compatTaxInvoiceService.update(\n request.businessNumber,\n request.invoiceDocumentKeyType,\n request.invoiceManagementKey,\n documentMappers.mapTaxInvoiceDocument(request.taxInvoiceDocument),\n input.defaultUserId\n )\n\n return responseMappers.mapTaxInvoiceOperationResult(taxInvoiceApiResponse)\n })\n },\n\n issueInvoice(request) {\n return invokeTaxInvoiceMethod(input, 'taxInvoice.issueInvoice', async () => {\n const taxInvoiceApiResponse = await compatTaxInvoiceService.issue(\n request.businessNumber,\n request.invoiceDocumentKeyType,\n request.invoiceManagementKey,\n request.historyMemo,\n request.emailSubject,\n request.forceIssue,\n input.defaultUserId\n )\n\n return responseMappers.mapTaxInvoiceIssueResult(taxInvoiceApiResponse)\n })\n },\n\n cancelIssuedInvoice(request) {\n return invokeTaxInvoiceMethod(input, 'taxInvoice.cancelIssuedInvoice', async () => {\n const taxInvoiceApiResponse = await compatTaxInvoiceService.cancelIssue(\n request.businessNumber,\n request.invoiceDocumentKeyType,\n request.invoiceManagementKey,\n request.historyMemo,\n input.defaultUserId\n )\n\n return responseMappers.mapTaxInvoiceOperationResult(taxInvoiceApiResponse)\n })\n },\n\n requestReverseIssueImmediately(request) {\n return invokeTaxInvoiceMethod(input, 'taxInvoice.requestReverseIssueImmediately', async () => {\n const taxInvoiceApiResponse = await compatTaxInvoiceService.registRequest(\n request.businessNumber,\n documentMappers.mapTaxInvoiceDocument(request.taxInvoiceDocument),\n request.historyMemo,\n input.defaultUserId\n )\n\n return responseMappers.mapTaxInvoiceOperationResult(taxInvoiceApiResponse)\n })\n },\n\n requestReverseIssue(request) {\n return invokeTaxInvoiceMethod(input, 'taxInvoice.requestReverseIssue', async () => {\n const taxInvoiceApiResponse = await compatTaxInvoiceService.request(\n request.businessNumber,\n request.invoiceDocumentKeyType,\n request.invoiceManagementKey,\n request.historyMemo,\n input.defaultUserId\n )\n\n return responseMappers.mapTaxInvoiceOperationResult(taxInvoiceApiResponse)\n })\n },\n\n cancelReverseIssueRequest(request) {\n return invokeTaxInvoiceMethod(input, 'taxInvoice.cancelReverseIssueRequest', async () => {\n const taxInvoiceApiResponse = await compatTaxInvoiceService.cancelRequest(\n request.businessNumber,\n request.invoiceDocumentKeyType,\n request.invoiceManagementKey,\n request.historyMemo,\n input.defaultUserId\n )\n\n return responseMappers.mapTaxInvoiceOperationResult(taxInvoiceApiResponse)\n })\n },\n\n refuseReverseIssueRequest(request) {\n return invokeTaxInvoiceMethod(input, 'taxInvoice.refuseReverseIssueRequest', async () => {\n const taxInvoiceApiResponse = await compatTaxInvoiceService.refuse(\n request.businessNumber,\n request.invoiceDocumentKeyType,\n request.invoiceManagementKey,\n request.historyMemo,\n input.defaultUserId\n )\n\n return responseMappers.mapTaxInvoiceOperationResult(taxInvoiceApiResponse)\n })\n },\n\n deleteInvoice(request) {\n return invokeTaxInvoiceMethod(input, 'taxInvoice.deleteInvoice', async () => {\n const taxInvoiceApiResponse = await compatTaxInvoiceService.delete(\n request.businessNumber,\n request.invoiceDocumentKeyType,\n request.invoiceManagementKey,\n input.defaultUserId\n )\n\n return responseMappers.mapTaxInvoiceOperationResult(taxInvoiceApiResponse)\n })\n },\n\n sendInvoiceToNTS(request) {\n return invokeTaxInvoiceMethod(input, 'taxInvoice.sendInvoiceToNTS', async () => {\n const taxInvoiceApiResponse = await compatTaxInvoiceService.sendToNTS(\n request.businessNumber,\n request.invoiceDocumentKeyType,\n request.invoiceManagementKey,\n input.defaultUserId\n )\n\n return responseMappers.mapTaxInvoiceOperationResult(taxInvoiceApiResponse)\n })\n },\n\n async getInvoiceInfo(request) {\n return invokeTaxInvoiceMethod(input, 'taxInvoice.getInvoiceInfo', async () => {\n const apiResponse = await compatTaxInvoiceService.getInfo(\n request.businessNumber,\n request.invoiceDocumentKeyType,\n request.invoiceManagementKey,\n input.defaultUserId\n )\n\n return invoiceInfoMappers.mapTaxInvoiceInfo(apiResponse)\n })\n },\n\n getInvoicesInfo(request) {\n return invokeTaxInvoiceMethod(input, 'taxInvoice.getInvoicesInfo', async () => {\n const taxInvoiceApiResponse = await compatTaxInvoiceService.getInfos(\n request.businessNumber,\n request.invoiceDocumentKeyType,\n request.invoiceManagementKeys,\n input.defaultUserId\n )\n\n return responseMappers.mapTaxInvoiceInfos(taxInvoiceApiResponse)\n })\n },\n\n getInvoiceDetailInfo(request) {\n return invokeTaxInvoiceMethod(input, 'taxInvoice.getInvoiceDetailInfo', async () => {\n const taxInvoiceApiResponse = await compatTaxInvoiceService.getDetailInfo(\n request.businessNumber,\n request.invoiceDocumentKeyType,\n request.invoiceManagementKey,\n input.defaultUserId\n )\n\n return responseMappers.mapTaxInvoiceDocumentOutput(taxInvoiceApiResponse)\n })\n },\n\n checkInvoiceManagementKeyInUse(request) {\n return invokeTaxInvoiceMethod(input, 'taxInvoice.checkInvoiceManagementKeyInUse', async () => {\n const taxInvoiceApiResponse = await compatTaxInvoiceService.checkMgtKeyInUse(\n request.businessNumber,\n request.invoiceDocumentKeyType,\n request.invoiceManagementKey,\n input.defaultUserId\n )\n\n return responseMappers.mapTaxInvoiceInvoiceManagementKeyUsage(taxInvoiceApiResponse)\n })\n },\n\n getInvoiceXML(request) {\n return invokeTaxInvoiceMethod(input, 'taxInvoice.getInvoiceXML', async () => {\n const taxInvoiceApiResponse = await compatTaxInvoiceService.getXML(\n request.businessNumber,\n request.invoiceDocumentKeyType,\n request.invoiceManagementKey,\n input.defaultUserId\n )\n\n return responseMappers.mapTaxInvoiceXmlResult(taxInvoiceApiResponse)\n })\n },\n\n searchInvoices(request) {\n return invokeTaxInvoiceMethod(input, 'taxInvoice.searchInvoices', async () => {\n const normalizedSearchRequest = normalizeSearchInvoicesRequest(request)\n const taxInvoiceApiResponse = await compatTaxInvoiceService.search(\n request.businessNumber,\n request.invoiceDocumentKeyType,\n normalizedSearchRequest.searchDateType,\n normalizedSearchRequest.startDate,\n normalizedSearchRequest.endDate,\n normalizedSearchRequest.invoiceStateCodes,\n normalizedSearchRequest.invoiceTypeCodes,\n normalizedSearchRequest.taxationTypeCodes,\n normalizedSearchRequest.lateIssueOnly,\n normalizedSearchRequest.sortOrder,\n normalizedSearchRequest.pageNumber,\n normalizedSearchRequest.pageSize,\n normalizedSearchRequest.taxRegistrationIdentifierType,\n normalizedSearchRequest.taxRegistrationIdentifierAvailability,\n normalizedSearchRequest.taxRegistrationIdentifier,\n normalizedSearchRequest.queryText,\n normalizedSearchRequest.interoperabilityType,\n input.defaultUserId,\n normalizedSearchRequest.issueTypeCodes,\n normalizedSearchRequest.registrationTypeCodes,\n toCompatCloseDownStateCodes(normalizedSearchRequest.closeDownStateCodes),\n normalizedSearchRequest.invoiceManagementKeyOrNationalTaxServiceConfirmationNumber\n )\n\n return responseMappers.mapTaxInvoiceSearchResult(taxInvoiceApiResponse)\n })\n },\n\n getInvoiceLogs(request) {\n return invokeTaxInvoiceMethod(input, 'taxInvoice.getInvoiceLogs', async () => {\n const taxInvoiceApiResponse = await compatTaxInvoiceService.getLogs(\n request.businessNumber,\n request.invoiceDocumentKeyType,\n request.invoiceManagementKey,\n input.defaultUserId\n )\n\n return responseMappers.mapTaxInvoiceLogs(taxInvoiceApiResponse)\n })\n },\n\n getTaxInvoiceBoxURL(request) {\n return invokeTaxInvoiceMethod(input, 'taxInvoice.getTaxInvoiceBoxURL', async () => {\n const taxInvoiceApiResponse = await compatTaxInvoiceService.getURL(request.businessNumber, request.taxInvoiceBoxScope, input.defaultUserId)\n\n return responseMappers.mapTaxInvoiceAccessUrlFromString(taxInvoiceApiResponse)\n })\n },\n\n getInvoicePopupURL(request) {\n return invokeTaxInvoiceMethod(input, 'taxInvoice.getInvoicePopupURL', async () => {\n const taxInvoiceApiResponse = await compatTaxInvoiceService.getPopUpURL(\n request.businessNumber,\n request.invoiceDocumentKeyType,\n request.invoiceManagementKey,\n input.defaultUserId\n )\n\n return responseMappers.mapTaxInvoiceAccessUrlFromString(taxInvoiceApiResponse)\n })\n },\n\n getInvoiceViewURL(request) {\n return invokeTaxInvoiceMethod(input, 'taxInvoice.getInvoiceViewURL', async () => {\n const taxInvoiceApiResponse = await compatTaxInvoiceService.getViewURL(\n request.businessNumber,\n request.invoiceDocumentKeyType,\n request.invoiceManagementKey,\n input.defaultUserId\n )\n\n return responseMappers.mapTaxInvoiceAccessUrlFromString(taxInvoiceApiResponse)\n })\n },\n\n getSupplierInvoicePrintURL(request) {\n return invokeTaxInvoiceMethod(input, 'taxInvoice.getSupplierInvoicePrintURL', async () => {\n const taxInvoiceApiResponse = await compatTaxInvoiceService.getPrintURL(\n request.businessNumber,\n request.invoiceDocumentKeyType,\n request.invoiceManagementKey,\n input.defaultUserId\n )\n\n return responseMappers.mapTaxInvoiceAccessUrlFromString(taxInvoiceApiResponse)\n })\n },\n\n getBuyerInvoicePrintURL(request) {\n return invokeTaxInvoiceMethod(input, 'taxInvoice.getBuyerInvoicePrintURL', async () => {\n const taxInvoiceApiResponse = await compatTaxInvoiceService.getEPrintURL(\n request.businessNumber,\n request.invoiceDocumentKeyType,\n request.invoiceManagementKey,\n input.defaultUserId\n )\n\n return responseMappers.mapTaxInvoiceAccessUrlFromString(taxInvoiceApiResponse)\n })\n },\n\n getBulkInvoicePrintURL(request) {\n return invokeTaxInvoiceMethod(input, 'taxInvoice.getBulkInvoicePrintURL', async () => {\n const taxInvoiceApiResponse = await compatTaxInvoiceService.getMassPrintURL(\n request.businessNumber,\n request.invoiceDocumentKeyType,\n request.invoiceManagementKeys,\n input.defaultUserId\n )\n\n return responseMappers.mapTaxInvoiceAccessUrlFromString(taxInvoiceApiResponse)\n })\n },\n\n getInvoiceMailURL(request) {\n return invokeTaxInvoiceMethod(input, 'taxInvoice.getInvoiceMailURL', async () => {\n const taxInvoiceApiResponse = await compatTaxInvoiceService.getMailURL(\n request.businessNumber,\n request.invoiceDocumentKeyType,\n request.invoiceManagementKey,\n input.defaultUserId\n )\n\n return responseMappers.mapTaxInvoiceAccessUrlFromString(taxInvoiceApiResponse)\n })\n },\n\n getInvoicePDFURL(request) {\n return invokeTaxInvoiceMethod(input, 'taxInvoice.getInvoicePDFURL', async () => {\n const taxInvoiceApiResponse = await compatTaxInvoiceService.getPDFURL(\n request.businessNumber,\n request.invoiceDocumentKeyType,\n request.invoiceManagementKey,\n input.defaultUserId\n )\n\n return responseMappers.mapTaxInvoiceAccessUrlFromString(taxInvoiceApiResponse)\n })\n },\n\n getSealAndAttachmentRegistrationURL(request) {\n return invokeTaxInvoiceMethod(input, 'taxInvoice.getSealAndAttachmentRegistrationURL', async () => {\n const taxInvoiceApiResponse = await compatTaxInvoiceService.getSealURL(request.businessNumber, input.defaultUserId)\n return responseMappers.mapTaxInvoiceAccessUrl(taxInvoiceApiResponse)\n })\n },\n\n attachFileFromPath(request) {\n return invokeTaxInvoiceMethod(input, 'taxInvoice.attachFileFromPath', async () => {\n const taxInvoiceApiResponse = await compatTaxInvoiceService.attachFile(\n request.businessNumber,\n request.invoiceDocumentKeyType,\n request.invoiceManagementKey,\n request.displayName,\n request.filePath,\n input.defaultUserId\n )\n\n return responseMappers.mapTaxInvoiceOperationResult(taxInvoiceApiResponse)\n })\n },\n\n attachFileFromBinary(request) {\n return invokeTaxInvoiceMethod(input, 'taxInvoice.attachFileFromBinary', async () => {\n const taxInvoiceApiResponse = await compatTaxInvoiceService.attachFileBinary(\n request.businessNumber,\n request.invoiceDocumentKeyType,\n request.invoiceManagementKey,\n {\n fileName: request.fileName,\n fileData: request.fileData,\n },\n input.defaultUserId\n )\n\n return responseMappers.mapTaxInvoiceOperationResult(taxInvoiceApiResponse)\n })\n },\n\n deleteAttachedFile(request) {\n return invokeTaxInvoiceMethod(input, 'taxInvoice.deleteAttachedFile', async () => {\n const taxInvoiceApiResponse = await compatTaxInvoiceService.deleteFile(\n request.businessNumber,\n request.invoiceDocumentKeyType,\n request.invoiceManagementKey,\n request.fileIdentifier,\n input.defaultUserId\n )\n\n return responseMappers.mapTaxInvoiceOperationResult(taxInvoiceApiResponse)\n })\n },\n\n getAttachedFiles(request) {\n return invokeTaxInvoiceMethod(input, 'taxInvoice.getAttachedFiles', async () => {\n const taxInvoiceApiResponse = await compatTaxInvoiceService.getFiles(\n request.businessNumber,\n request.invoiceDocumentKeyType,\n request.invoiceManagementKey,\n input.defaultUserId\n )\n\n return responseMappers.mapTaxInvoiceAttachedFiles(taxInvoiceApiResponse)\n })\n },\n\n resendInvoiceEmail(request) {\n return invokeTaxInvoiceMethod(input, 'taxInvoice.resendInvoiceEmail', async () => {\n const taxInvoiceApiResponse = await compatTaxInvoiceService.sendEmail(\n request.businessNumber,\n request.invoiceDocumentKeyType,\n request.invoiceManagementKey,\n request.receiverEmailAddress,\n input.defaultUserId\n )\n\n return responseMappers.mapTaxInvoiceOperationResult(taxInvoiceApiResponse)\n })\n },\n\n resendInvoiceSMS(request) {\n return invokeTaxInvoiceMethod(input, 'taxInvoice.resendInvoiceSMS', async () => {\n const taxInvoiceApiResponse = await compatTaxInvoiceService.sendSMS(\n request.businessNumber,\n request.invoiceDocumentKeyType,\n request.invoiceManagementKey,\n request.senderPhoneNumber,\n request.receiverPhoneNumber,\n request.messageBody,\n input.defaultUserId\n )\n\n return responseMappers.mapTaxInvoiceOperationResult(taxInvoiceApiResponse)\n })\n },\n\n resendInvoiceFAX(request) {\n return invokeTaxInvoiceMethod(input, 'taxInvoice.resendInvoiceFAX', async () => {\n const taxInvoiceApiResponse = await compatTaxInvoiceService.sendFAX(\n request.businessNumber,\n request.invoiceDocumentKeyType,\n request.invoiceManagementKey,\n request.senderNumber,\n request.receiverNumber,\n input.defaultUserId\n )\n\n return responseMappers.mapTaxInvoiceOperationResult(taxInvoiceApiResponse)\n })\n },\n\n attachInvoiceStatement(request) {\n return invokeTaxInvoiceMethod(input, 'taxInvoice.attachInvoiceStatement', async () => {\n const statementItemCode = normalizeStatementItemCode(request.statementItemCode, 'taxInvoice.attachInvoiceStatement')\n const taxInvoiceApiResponse = await compatTaxInvoiceService.attachStatement(\n request.businessNumber,\n request.invoiceDocumentKeyType,\n request.invoiceManagementKey,\n statementItemCode,\n request.statementManagementKey,\n input.defaultUserId\n )\n\n return responseMappers.mapTaxInvoiceOperationResult(taxInvoiceApiResponse)\n })\n },\n\n detachInvoiceStatement(request) {\n return invokeTaxInvoiceMethod(input, 'taxInvoice.detachInvoiceStatement', async () => {\n const statementItemCode = normalizeStatementItemCode(request.statementItemCode, 'taxInvoice.detachInvoiceStatement')\n const taxInvoiceApiResponse = await compatTaxInvoiceService.detachStatement(\n request.businessNumber,\n request.invoiceDocumentKeyType,\n request.invoiceManagementKey,\n statementItemCode,\n request.statementManagementKey,\n input.defaultUserId\n )\n\n return responseMappers.mapTaxInvoiceOperationResult(taxInvoiceApiResponse)\n })\n },\n\n assignInvoiceManagementKey(request) {\n return invokeTaxInvoiceMethod(input, 'taxInvoice.assignInvoiceManagementKey', async () => {\n const taxInvoiceApiResponse = await compatTaxInvoiceService.assignMgtKey(\n request.businessNumber,\n request.invoiceDocumentKeyType,\n request.itemKey,\n request.invoiceManagementKey,\n input.defaultUserId\n )\n\n return responseMappers.mapTaxInvoiceOperationResult(taxInvoiceApiResponse)\n })\n },\n\n getEmailSendSettings(request) {\n return invokeTaxInvoiceMethod(input, 'taxInvoice.getEmailSendSettings', async () => {\n const taxInvoiceApiResponse = await compatTaxInvoiceService.listEmailConfig(request.businessNumber, input.defaultUserId)\n return responseMappers.mapTaxInvoiceEmailSendSettings(taxInvoiceApiResponse)\n })\n },\n\n updateEmailSendSettings(request) {\n return invokeTaxInvoiceMethod(input, 'taxInvoice.updateEmailSendSettings', async () => {\n const emailType = normalizeEmailType(request.emailType, 'taxInvoice.updateEmailSendSettings')\n const taxInvoiceApiResponse = await compatTaxInvoiceService.updateEmailConfig(\n request.businessNumber,\n emailType,\n request.sendEnabled,\n input.defaultUserId\n )\n\n return responseMappers.mapTaxInvoiceOperationResult(taxInvoiceApiResponse)\n })\n },\n\n getSendToNTSSettings(request) {\n return invokeTaxInvoiceMethod(input, 'taxInvoice.getSendToNTSSettings', async () => {\n const taxInvoiceApiResponse = await compatTaxInvoiceService.getSendToNTSConfig(request.businessNumber, input.defaultUserId)\n return responseMappers.mapTaxInvoiceSendToNationalTaxServiceSetting(taxInvoiceApiResponse)\n })\n },\n\n getTaxCertificateRegistrationURL(request) {\n return invokeTaxInvoiceMethod(input, 'taxInvoice.getTaxCertificateRegistrationURL', async () => {\n const taxInvoiceApiResponse = await compatTaxInvoiceService.getTaxCertURL(request.businessNumber, input.defaultUserId)\n return responseMappers.mapTaxInvoiceAccessUrl(taxInvoiceApiResponse)\n })\n },\n\n getTaxCertificateExpirationDate(request) {\n return invokeTaxInvoiceMethod(input, 'taxInvoice.getTaxCertificateExpirationDate', async () => {\n const taxInvoiceApiResponse = await compatTaxInvoiceService.getCertificateExpireDate(request.businessNumber, input.defaultUserId)\n return responseMappers.mapTaxInvoiceTaxCertificateExpiration(taxInvoiceApiResponse)\n })\n },\n\n checkTaxCertificateValidation(request) {\n return invokeTaxInvoiceMethod(input, 'taxInvoice.checkTaxCertificateValidation', async () => {\n const taxInvoiceApiResponse = await compatTaxInvoiceService.checkCertValidation(request.businessNumber, input.defaultUserId)\n return responseMappers.mapTaxInvoiceOperationResult(taxInvoiceApiResponse)\n })\n },\n\n getTaxCertificateInfo(request) {\n return invokeTaxInvoiceMethod(input, 'taxInvoice.getTaxCertificateInfo', async () => {\n const taxInvoiceApiResponse = await compatTaxInvoiceService.getTaxCertInfo(request.businessNumber, input.defaultUserId)\n return responseMappers.mapTaxInvoiceTaxCertificateInfo(taxInvoiceApiResponse)\n })\n },\n }\n}\n\ninterface NormalizedSearchInvoicesRequest {\n searchDateType: taxInvoiceTypes.TaxInvoiceDateType\n startDate: string\n endDate: string\n invoiceStateCodes: taxInvoiceTypes.TaxInvoiceSearchStateCode[]\n invoiceTypeCodes: taxInvoiceTypes.TaxInvoiceSearchInvoiceTypeCode[]\n taxationTypeCodes: taxInvoiceTypes.TaxInvoiceSearchTaxationTypeCode[]\n lateIssueOnly: boolean | null\n sortOrder: taxInvoiceTypes.TaxInvoiceSortOrder\n pageNumber: number\n pageSize: number\n taxRegistrationIdentifierType?: taxInvoiceTypes.TaxInvoiceSearchTaxRegistrationIdentifierType\n taxRegistrationIdentifierAvailability?: taxInvoiceTypes.TaxInvoiceSearchTaxRegistrationIdentifierAvailability\n taxRegistrationIdentifier?: string\n queryText?: string\n interoperabilityType?: taxInvoiceTypes.TaxInvoiceSearchInteroperabilityType\n issueTypeCodes?: taxInvoiceTypes.TaxInvoiceSearchIssueTypeCode[]\n registrationTypeCodes?: taxInvoiceTypes.TaxInvoiceSearchRegistrationTypeCode[]\n closeDownStateCodes?: taxInvoiceTypes.TaxInvoiceCloseDownStateCode[]\n invoiceManagementKeyOrNationalTaxServiceConfirmationNumber?: string\n}\n\nfunction normalizeSearchInvoicesRequest(request: taxInvoiceTypes.SearchInvoicesInput): NormalizedSearchInvoicesRequest {\n return {\n searchDateType: normalizeCodeValue(\n request.searchDateType,\n Object.values(taxInvoiceTypes.TaxInvoiceDateType),\n 'searchDateType',\n SEARCH_INVOICES_OPERATION\n ),\n startDate: normalizeSearchDateInput(request.startDate, 'startDate', SEARCH_INVOICES_OPERATION),\n endDate: normalizeSearchDateInput(request.endDate, 'endDate', SEARCH_INVOICES_OPERATION),\n invoiceStateCodes: normalizeSearchStateCodes(request.invoiceStateCodes),\n invoiceTypeCodes: normalizeCodeArray(\n request.invoiceTypeCodes,\n Object.values(taxInvoiceTypes.TaxInvoiceSearchInvoiceTypeCodes),\n 'invoiceTypeCodes',\n SEARCH_INVOICES_OPERATION\n ),\n taxationTypeCodes: normalizeCodeArray(\n request.taxationTypeCodes,\n Object.values(taxInvoiceTypes.TaxInvoiceSearchTaxationTypeCodes),\n 'taxationTypeCodes',\n SEARCH_INVOICES_OPERATION\n ),\n lateIssueOnly: request.lateIssueOnly,\n sortOrder: normalizeCodeValue(request.sortOrder, Object.values(taxInvoiceTypes.TaxInvoiceSortOrder), 'sortOrder', SEARCH_INVOICES_OPERATION),\n pageNumber: request.pageNumber,\n pageSize: request.pageSize,\n taxRegistrationIdentifierType: normalizeOptionalCodeValue(\n request.taxRegistrationIdentifierType,\n Object.values(taxInvoiceTypes.TaxInvoiceSearchTaxRegistrationIdentifierTypes),\n 'taxRegistrationIdentifierType',\n SEARCH_INVOICES_OPERATION\n ),\n taxRegistrationIdentifierAvailability: normalizeOptionalCodeValue(\n request.taxRegistrationIdentifierAvailability,\n Object.values(taxInvoiceTypes.TaxInvoiceSearchTaxRegistrationIdentifierAvailabilities),\n 'taxRegistrationIdentifierAvailability',\n SEARCH_INVOICES_OPERATION\n ),\n taxRegistrationIdentifier: request.taxRegistrationIdentifier,\n queryText: request.queryText,\n interoperabilityType: normalizeOptionalCodeValue(\n request.interoperabilityType,\n Object.values(taxInvoiceTypes.TaxInvoiceSearchInteroperabilityTypes),\n 'interoperabilityType',\n SEARCH_INVOICES_OPERATION\n ),\n issueTypeCodes: normalizeOptionalCodeArray(\n request.issueTypeCodes,\n Object.values(taxInvoiceTypes.TaxInvoiceSearchIssueTypeCodes),\n 'issueTypeCodes',\n SEARCH_INVOICES_OPERATION\n ),\n registrationTypeCodes: normalizeOptionalCodeArray(\n request.registrationTypeCodes,\n Object.values(taxInvoiceTypes.TaxInvoiceSearchRegistrationTypeCodes),\n 'registrationTypeCodes',\n SEARCH_INVOICES_OPERATION\n ),\n closeDownStateCodes: normalizeOptionalCodeArray(\n request.closeDownStateCodes,\n Object.values(taxInvoiceTypes.TaxInvoiceCloseDownStateCodes),\n 'closeDownStateCodes',\n SEARCH_INVOICES_OPERATION\n ),\n invoiceManagementKeyOrNationalTaxServiceConfirmationNumber: request.invoiceManagementKeyOrNationalTaxServiceConfirmationNumber,\n }\n}\n\nfunction toCompatCloseDownStateCodes(\n closeDownStateCodes: taxInvoiceTypes.TaxInvoiceCloseDownStateCode[] | undefined\n): (0 | 1 | 2 | 3 | 4)[] | undefined {\n return closeDownStateCodes as unknown as (0 | 1 | 2 | 3 | 4)[] | undefined\n}\n\nfunction normalizeSearchStateCodes(searchStateCodes: unknown): taxInvoiceTypes.TaxInvoiceSearchStateCode[] {\n if (!Array.isArray(searchStateCodes)) {\n throw createInputValidationError('invoiceStateCodes는 배열이어야 해.', {\n operation: SEARCH_INVOICES_OPERATION,\n stage: PopbillErrorStage.ValidateInput,\n })\n }\n\n return searchStateCodes.map((searchStateCode, index) => {\n if (typeof searchStateCode !== 'string' || !SEARCH_STATE_CODE_PATTERN.test(searchStateCode)) {\n throw createInputValidationError(\n `invoiceStateCodes[${index}]에 유효하지 않은 상태코드가 있어. 허용 패턴: 숫자 3자리 또는 2/3자리 와일드카드 (예: 300, 3**, 60*)`,\n {\n operation: SEARCH_INVOICES_OPERATION,\n stage: PopbillErrorStage.ValidateInput,\n }\n )\n }\n\n return searchStateCode\n })\n}\n\nfunction normalizeSearchDateInput(dateInput: taxInvoiceTypes.TaxInvoiceDateInput, fieldName: string, operation: string): string {\n if (dateInput instanceof Date) {\n if (!Number.isFinite(dateInput.getTime())) {\n throw createInputValidationError(`${fieldName}는 유효한 Date여야 해.`, {\n operation,\n stage: PopbillErrorStage.ValidateInput,\n })\n }\n\n return formatDateToKoreaDateString(dateInput)\n }\n\n if (typeof dateInput !== 'string') {\n throw createInputValidationError(`${fieldName}는 yyyyMMdd 문자열 또는 Date여야 해.`, {\n operation,\n stage: PopbillErrorStage.ValidateInput,\n })\n }\n\n const normalizedDateInput = dateInput.trim()\n if (!isValidDateString(normalizedDateInput)) {\n throw createInputValidationError(`${fieldName}는 yyyyMMdd 형식의 유효한 날짜여야 해.`, {\n operation,\n stage: PopbillErrorStage.ValidateInput,\n })\n }\n\n return normalizedDateInput\n}\n\nfunction formatDateToKoreaDateString(date: Date): string {\n let year = ''\n let month = ''\n let day = ''\n\n for (const datePart of KOREA_DATE_FORMATTER.formatToParts(date)) {\n if (datePart.type === 'year') {\n year = datePart.value\n continue\n }\n\n if (datePart.type === 'month') {\n month = datePart.value\n continue\n }\n\n if (datePart.type === 'day') {\n day = datePart.value\n }\n }\n\n return `${year}${month}${day}`\n}\n\nfunction isValidDateString(dateString: string): boolean {\n const match = /^(\\d{4})(\\d{2})(\\d{2})$/.exec(dateString)\n if (!match) {\n return false\n }\n\n const year = Number(match[1])\n const month = Number(match[2])\n const day = Number(match[3])\n const normalizedDate = new Date(Date.UTC(year, month - 1, day))\n\n return normalizedDate.getUTCFullYear() === year && normalizedDate.getUTCMonth() === month - 1 && normalizedDate.getUTCDate() === day\n}\n\nfunction normalizeStatementItemCode(\n statementItemCode: unknown,\n operation: 'taxInvoice.attachInvoiceStatement' | 'taxInvoice.detachInvoiceStatement'\n): taxInvoiceTypes.TaxInvoiceStatementItemCode {\n return normalizeCodeValue(statementItemCode, Object.values(taxInvoiceTypes.TaxInvoiceStatementItemCodes), 'statementItemCode', operation)\n}\n\nfunction normalizeEmailType(emailType: unknown, operation: 'taxInvoice.updateEmailSendSettings'): taxInvoiceTypes.TaxInvoiceEmailType {\n return normalizeCodeValue(emailType, Object.values(taxInvoiceTypes.TaxInvoiceEmailTypes), 'emailType', operation)\n}\n\nfunction normalizeOptionalCodeValue<T extends string | number>(\n codeValue: unknown,\n allowedValues: readonly T[],\n fieldName: string,\n operation: string\n): T | undefined {\n if (codeValue === undefined) {\n return undefined\n }\n\n return normalizeCodeValue(codeValue, allowedValues, fieldName, operation)\n}\n\nfunction normalizeOptionalCodeArray<T extends string | number>(\n codeValues: unknown,\n allowedValues: readonly T[],\n fieldName: string,\n operation: string\n): T[] | undefined {\n if (codeValues === undefined) {\n return undefined\n }\n\n return normalizeCodeArray(codeValues, allowedValues, fieldName, operation)\n}\n\nfunction normalizeCodeArray<T extends string | number>(codeValues: unknown, allowedValues: readonly T[], fieldName: string, operation: string): T[] {\n if (!Array.isArray(codeValues)) {\n throw createInputValidationError(`${fieldName}는 배열이어야 해.`, {\n operation,\n stage: PopbillErrorStage.ValidateInput,\n })\n }\n\n return codeValues.map((codeValue, index) => normalizeCodeValue(codeValue, allowedValues, `${fieldName}[${index}]`, operation))\n}\n\nfunction normalizeCodeValue<T extends string | number>(codeValue: unknown, allowedValues: readonly T[], fieldName: string, operation: string): T {\n for (const allowedValue of allowedValues) {\n if (codeValue === allowedValue) {\n return allowedValue\n }\n }\n\n throw createInputValidationError(\n `${fieldName}에 유효하지 않은 값이 있어. 허용값: ${allowedValues.map((allowedValue) => String(allowedValue)).join(', ')} (입력값: ${String(codeValue)})`,\n {\n operation,\n stage: PopbillErrorStage.ValidateInput,\n }\n )\n}\n","import { createTaxinvoicePromiseService, type CompatConfig, type TaxinvoicePromiseService } from '@connextable/popbill-compat/factory'\nimport { normalizeOptionalString } from '@connextable/popbill-utils'\n\nconst DEFAULT_REQUEST_TIMEOUT_MILLISECONDS = 180_000\nconst DEFAULT_ACCEPT_ENCODING = 'gzip'\n\n/**\n * TaxInvoice compat service 생성을 위한 입력 설정입니다.\n */\nexport interface CreateCompatTaxInvoiceServiceInput {\n linkId: string\n secretKey: string\n isTest?: boolean\n useStaticIp?: boolean\n useGaIp?: boolean\n useLocalTime?: boolean\n ipRestrictOnOff?: boolean\n requestTimeoutMilliseconds?: number\n acceptLanguage?: string\n acceptEncoding?: string | null\n}\n\n/**\n * `@connextable/popbill-compat` Taxinvoice promise 서비스를 client 단위 인스턴스로 생성합니다.\n */\nexport function createCompatTaxInvoiceService(input: CreateCompatTaxInvoiceServiceInput): TaxinvoicePromiseService {\n const compatConfig: CompatConfig = {\n LinkID: input.linkId,\n SecretKey: input.secretKey,\n IsTest: input.isTest ?? false,\n UseStaticIP: input.useStaticIp ?? false,\n UseGAIP: input.useGaIp ?? false,\n UseLocalTimeYN: input.useLocalTime ?? true,\n IPRestrictOnOff: input.ipRestrictOnOff ?? true,\n requestTimeoutMs: input.requestTimeoutMilliseconds ?? DEFAULT_REQUEST_TIMEOUT_MILLISECONDS,\n acceptLanguage: normalizeOptionalString(input.acceptLanguage),\n acceptEncoding: input.acceptEncoding === undefined ? DEFAULT_ACCEPT_ENCODING : input.acceptEncoding,\n }\n\n return createTaxinvoicePromiseService(compatConfig)\n}\n","import type { PopbillClient, PopbillClientConfig } from './types'\nimport { createTaxInvoiceService } from '@/services/tax-invoice'\nimport { createCompatTaxInvoiceService } from '@/internal/compat'\nimport type { PopbillApiError } from '@/errors'\nimport { normalizeOptionalString, normalizeRequiredString } from '@connextable/popbill-utils'\n\nconst DEFAULT_REQUEST_TIMEOUT_MILLISECONDS = 180_000\nconst MAX_REQUEST_TIMEOUT_MILLISECONDS = 2_147_483_647\nconst DEFAULT_ACCEPT_ENCODING = 'gzip'\n\ninterface ResolvedPopbillClientConfig {\n linkId: string\n secretKey: string\n userId: string\n isTest: boolean\n useStaticIp: boolean\n useGaIp: boolean\n useLocalTime: boolean\n ipRestrictOnOff: boolean\n acceptEncoding: string | null\n acceptLanguage?: string\n requestTimeoutMilliseconds: number\n onError?: (error: PopbillApiError) => void\n}\n\n/**\n * modern Popbill client를 생성합니다.\n */\nexport function createPopbillClient(config: PopbillClientConfig): PopbillClient {\n const normalizedConfig = normalizeClientConfiguration(config)\n const compatTaxInvoiceService = createCompatTaxInvoiceService(normalizedConfig)\n\n const taxInvoiceService = createTaxInvoiceService({\n compatTaxInvoiceService,\n defaultUserId: normalizedConfig.userId,\n onError: normalizedConfig.onError,\n })\n\n return {\n services: {\n taxInvoice: taxInvoiceService,\n },\n }\n}\n\n/**\n * 입력 설정을 런타임 안전성 기준으로 정규화합니다.\n */\nfunction normalizeClientConfiguration(config: PopbillClientConfig): ResolvedPopbillClientConfig {\n const linkId = normalizeRequiredString(config.linkId, 'linkId는 필수입니다.')\n const secretKey = normalizeRequiredString(config.secretKey, 'secretKey는 필수입니다.')\n const userId = normalizeRequiredString(config.userId, 'userId는 필수입니다.')\n\n return {\n linkId,\n secretKey,\n userId,\n isTest: config.isTest ?? false,\n useStaticIp: config.useStaticIp ?? false,\n useGaIp: config.useGaIp ?? false,\n useLocalTime: config.useLocalTime ?? true,\n ipRestrictOnOff: config.ipRestrictOnOff ?? true,\n acceptEncoding: config.acceptEncoding === undefined ? DEFAULT_ACCEPT_ENCODING : config.acceptEncoding,\n acceptLanguage: normalizeOptionalString(config.acceptLanguage),\n requestTimeoutMilliseconds: normalizeRequestTimeoutMilliseconds(config.requestTimeoutMs),\n onError: config.onError,\n }\n}\n\nfunction normalizeRequestTimeoutMilliseconds(requestTimeoutMs: number | undefined): number {\n if (requestTimeoutMs === undefined) {\n return DEFAULT_REQUEST_TIMEOUT_MILLISECONDS\n }\n\n if (!Number.isInteger(requestTimeoutMs) || requestTimeoutMs <= 0 || requestTimeoutMs > MAX_REQUEST_TIMEOUT_MILLISECONDS) {\n throw new Error(`requestTimeoutMs는 1 이상 ${MAX_REQUEST_TIMEOUT_MILLISECONDS} 이하의 정수여야 합니다.`)\n }\n\n return requestTimeoutMs\n}\n","import type { TaxInvoiceService } from './types'\n\n/**\n * TaxInvoice modern facade 공개 메서드 목록입니다.\n * 문서 섹션(발행/전송, 정보확인, 보기/인쇄, 부가기능, 인증서 관리) 순서를 유지합니다.\n */\nexport const TAX_INVOICE_METHODS = [\n // 발행/전송\n 'issueInvoiceImmediately',\n 'submitBulkIssue',\n 'getBulkIssueSubmissionResult',\n 'registerInvoice',\n 'updateInvoice',\n 'issueInvoice',\n 'cancelIssuedInvoice',\n 'requestReverseIssueImmediately',\n 'requestReverseIssue',\n 'cancelReverseIssueRequest',\n 'refuseReverseIssueRequest',\n 'deleteInvoice',\n 'sendInvoiceToNTS',\n\n // 정보확인\n 'getInvoiceInfo',\n 'getInvoicesInfo',\n 'getInvoiceDetailInfo',\n 'checkInvoiceManagementKeyInUse',\n 'getInvoiceXML',\n 'searchInvoices',\n 'getInvoiceLogs',\n 'getTaxInvoiceBoxURL',\n\n // 보기/인쇄\n 'getInvoicePopupURL',\n 'getInvoiceViewURL',\n 'getSupplierInvoicePrintURL',\n 'getBuyerInvoicePrintURL',\n 'getBulkInvoicePrintURL',\n 'getInvoiceMailURL',\n 'getInvoicePDFURL',\n\n // 부가기능\n 'getSealAndAttachmentRegistrationURL',\n 'attachFileFromPath',\n 'attachFileFromBinary',\n 'deleteAttachedFile',\n 'getAttachedFiles',\n 'resendInvoiceEmail',\n 'resendInvoiceSMS',\n 'resendInvoiceFAX',\n 'attachInvoiceStatement',\n 'detachInvoiceStatement',\n 'assignInvoiceManagementKey',\n 'getEmailSendSettings',\n 'updateEmailSendSettings',\n 'getSendToNTSSettings',\n\n // 인증서 관리\n 'getTaxCertificateRegistrationURL',\n 'getTaxCertificateExpirationDate',\n 'checkTaxCertificateValidation',\n 'getTaxCertificateInfo',\n] as const satisfies readonly (keyof TaxInvoiceService)[]\n"],"mappings":"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"}