@bolta-io/cli 0.5.1 → 0.7.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.
Files changed (59) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/CLAUDE.md +67 -5
  3. package/README.md +59 -8
  4. package/dist/bin/bolta.js +5 -1
  5. package/dist/bin/bolta.js.map +1 -1
  6. package/dist/src/client/bolta-client.d.ts +7 -1
  7. package/dist/src/client/bolta-client.d.ts.map +1 -1
  8. package/dist/src/client/bolta-client.js +110 -6
  9. package/dist/src/client/bolta-client.js.map +1 -1
  10. package/dist/src/commands/bank-account-holder/check-bulk.d.ts +4 -0
  11. package/dist/src/commands/bank-account-holder/check-bulk.d.ts.map +1 -0
  12. package/dist/src/commands/bank-account-holder/check-bulk.js +26 -0
  13. package/dist/src/commands/bank-account-holder/check-bulk.js.map +1 -0
  14. package/dist/src/commands/bank-account-holder/check.d.ts +7 -0
  15. package/dist/src/commands/bank-account-holder/check.d.ts.map +1 -0
  16. package/dist/src/commands/bank-account-holder/check.js +25 -0
  17. package/dist/src/commands/bank-account-holder/check.js.map +1 -0
  18. package/dist/src/commands/bank-account-holder/index.d.ts +3 -0
  19. package/dist/src/commands/bank-account-holder/index.d.ts.map +1 -0
  20. package/dist/src/commands/bank-account-holder/index.js +49 -0
  21. package/dist/src/commands/bank-account-holder/index.js.map +1 -0
  22. package/dist/src/commands/document/get.d.ts +3 -0
  23. package/dist/src/commands/document/get.d.ts.map +1 -0
  24. package/dist/src/commands/document/get.js +24 -0
  25. package/dist/src/commands/document/get.js.map +1 -0
  26. package/dist/src/commands/document/index.d.ts +3 -0
  27. package/dist/src/commands/document/index.d.ts.map +1 -0
  28. package/dist/src/commands/document/index.js +40 -0
  29. package/dist/src/commands/document/index.js.map +1 -0
  30. package/dist/src/commands/document/issue.d.ts +8 -0
  31. package/dist/src/commands/document/issue.d.ts.map +1 -0
  32. package/dist/src/commands/document/issue.js +28 -0
  33. package/dist/src/commands/document/issue.js.map +1 -0
  34. package/dist/src/commands/examples/index.d.ts.map +1 -1
  35. package/dist/src/commands/examples/index.js +50 -0
  36. package/dist/src/commands/examples/index.js.map +1 -1
  37. package/dist/src/commands/guide/index.d.ts.map +1 -1
  38. package/dist/src/commands/guide/index.js +174 -3
  39. package/dist/src/commands/guide/index.js.map +1 -1
  40. package/dist/src/commands/invoice/reference-id.js +2 -2
  41. package/dist/src/commands/invoice/reference-id.js.map +1 -1
  42. package/dist/src/commands/invoice/status.js +2 -2
  43. package/dist/src/commands/invoice/status.js.map +1 -1
  44. package/dist/src/commands/schema/index.d.ts.map +1 -1
  45. package/dist/src/commands/schema/index.js +2 -0
  46. package/dist/src/commands/schema/index.js.map +1 -1
  47. package/dist/src/types/api.d.ts +75 -0
  48. package/dist/src/types/api.d.ts.map +1 -1
  49. package/dist/src/utils/input.js +33 -8
  50. package/dist/src/utils/input.js.map +1 -1
  51. package/dist/src/validators/parse.d.ts +2 -2
  52. package/dist/src/validators/parse.d.ts.map +1 -1
  53. package/dist/src/validators/parse.js.map +1 -1
  54. package/dist/src/validators/schemas.d.ts +207 -21
  55. package/dist/src/validators/schemas.d.ts.map +1 -1
  56. package/dist/src/validators/schemas.js +230 -3
  57. package/dist/src/validators/schemas.js.map +1 -1
  58. package/llms.txt +57 -7
  59. package/package.json +4 -2
@@ -741,7 +741,7 @@ export declare const createTaxInvoiceIssueRequestSchema: z.ZodEffects<z.ZodObjec
741
741
  }[];
742
742
  description?: string | null | undefined;
743
743
  }>;
744
- export declare const taxInvoiceClientReferenceIdSchema: z.ZodEffects<z.ZodString, string, string>;
744
+ export declare const clientReferenceIdHeaderSchema: z.ZodEffects<z.ZodString, string, string>;
745
745
  export declare const clientReferenceIdSchema: z.ZodString;
746
746
  export declare const cashReceiptRecipientSchema: z.ZodDiscriminatedUnion<"type", [z.ZodObject<{
747
747
  type: z.ZodLiteral<"SELF">;
@@ -756,20 +756,20 @@ export declare const cashReceiptRecipientSchema: z.ZodDiscriminatedUnion<"type",
756
756
  type: z.ZodLiteral<"PHONE">;
757
757
  value: z.ZodString;
758
758
  }, "strict", z.ZodTypeAny, {
759
- value: string;
760
759
  type: "PHONE";
761
- }, {
762
760
  value: string;
761
+ }, {
763
762
  type: "PHONE";
763
+ value: string;
764
764
  }>, z.ZodObject<{
765
765
  type: z.ZodLiteral<"BUSINESS_REGISTRATION_NUMBER">;
766
766
  value: z.ZodPipeline<z.ZodEffects<z.ZodString, string, string>, z.ZodString>;
767
767
  }, "strict", z.ZodTypeAny, {
768
- value: string;
769
768
  type: "BUSINESS_REGISTRATION_NUMBER";
770
- }, {
771
769
  value: string;
770
+ }, {
772
771
  type: "BUSINESS_REGISTRATION_NUMBER";
772
+ value: string;
773
773
  }>]>;
774
774
  export declare const createCashReceiptSchema: z.ZodEffects<z.ZodObject<{
775
775
  itemName: z.ZodString;
@@ -802,20 +802,20 @@ export declare const createCashReceiptSchema: z.ZodEffects<z.ZodObject<{
802
802
  type: z.ZodLiteral<"PHONE">;
803
803
  value: z.ZodString;
804
804
  }, "strict", z.ZodTypeAny, {
805
- value: string;
806
805
  type: "PHONE";
807
- }, {
808
806
  value: string;
807
+ }, {
809
808
  type: "PHONE";
809
+ value: string;
810
810
  }>, z.ZodObject<{
811
811
  type: z.ZodLiteral<"BUSINESS_REGISTRATION_NUMBER">;
812
812
  value: z.ZodPipeline<z.ZodEffects<z.ZodString, string, string>, z.ZodString>;
813
813
  }, "strict", z.ZodTypeAny, {
814
- value: string;
815
814
  type: "BUSINESS_REGISTRATION_NUMBER";
816
- }, {
817
815
  value: string;
816
+ }, {
818
817
  type: "BUSINESS_REGISTRATION_NUMBER";
818
+ value: string;
819
819
  }>]>;
820
820
  amount: z.ZodObject<{
821
821
  supplyAmount: z.ZodNumber;
@@ -842,11 +842,11 @@ export declare const createCashReceiptSchema: z.ZodEffects<z.ZodObject<{
842
842
  type: "SELF";
843
843
  value?: "" | null | undefined;
844
844
  } | {
845
- value: string;
846
845
  type: "PHONE";
847
- } | {
848
846
  value: string;
847
+ } | {
849
848
  type: "BUSINESS_REGISTRATION_NUMBER";
849
+ value: string;
850
850
  };
851
851
  amount: {
852
852
  supplyAmount: number;
@@ -865,11 +865,11 @@ export declare const createCashReceiptSchema: z.ZodEffects<z.ZodObject<{
865
865
  type: "SELF";
866
866
  value?: "" | null | undefined;
867
867
  } | {
868
- value: string;
869
868
  type: "PHONE";
870
- } | {
871
869
  value: string;
870
+ } | {
872
871
  type: "BUSINESS_REGISTRATION_NUMBER";
872
+ value: string;
873
873
  };
874
874
  amount: {
875
875
  supplyAmount: number;
@@ -888,11 +888,11 @@ export declare const createCashReceiptSchema: z.ZodEffects<z.ZodObject<{
888
888
  type: "SELF";
889
889
  value?: "" | null | undefined;
890
890
  } | {
891
- value: string;
892
891
  type: "PHONE";
893
- } | {
894
892
  value: string;
893
+ } | {
895
894
  type: "BUSINESS_REGISTRATION_NUMBER";
895
+ value: string;
896
896
  };
897
897
  amount: {
898
898
  supplyAmount: number;
@@ -911,11 +911,11 @@ export declare const createCashReceiptSchema: z.ZodEffects<z.ZodObject<{
911
911
  type: "SELF";
912
912
  value?: "" | null | undefined;
913
913
  } | {
914
- value: string;
915
914
  type: "PHONE";
916
- } | {
917
915
  value: string;
916
+ } | {
918
917
  type: "BUSINESS_REGISTRATION_NUMBER";
918
+ value: string;
919
919
  };
920
920
  amount: {
921
921
  supplyAmount: number;
@@ -923,6 +923,135 @@ export declare const createCashReceiptSchema: z.ZodEffects<z.ZodObject<{
923
923
  taxFreeAmount?: number | null | undefined;
924
924
  };
925
925
  }>;
926
+ export declare const documentIssuanceKeySchema: z.ZodString;
927
+ export declare const createDocumentIssuanceSchema: z.ZodEffects<z.ZodObject<{
928
+ businessRegistrationNumber: z.ZodPipeline<z.ZodEffects<z.ZodString, string, string>, z.ZodString>;
929
+ document: z.ZodDiscriminatedUnion<"type", [z.ZodObject<{
930
+ type: z.ZodLiteral<"BUSINESS_REGISTRATION_PROOF">;
931
+ language: z.ZodEnum<["KO", "EN"]>;
932
+ }, "strip", z.ZodTypeAny, {
933
+ type: "BUSINESS_REGISTRATION_PROOF";
934
+ language: "KO" | "EN";
935
+ }, {
936
+ type: "BUSINESS_REGISTRATION_PROOF";
937
+ language: "KO" | "EN";
938
+ }>, z.ZodObject<{
939
+ type: z.ZodLiteral<"BUSINESS_REGISTRATION_CERTIFICATE">;
940
+ reason: z.ZodPipeline<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>, z.ZodEffects<z.ZodString, string, string>>;
941
+ }, "strip", z.ZodTypeAny, {
942
+ type: "BUSINESS_REGISTRATION_CERTIFICATE";
943
+ reason: string;
944
+ }, {
945
+ type: "BUSINESS_REGISTRATION_CERTIFICATE";
946
+ reason: string;
947
+ }>, z.ZodObject<{
948
+ type: z.ZodLiteral<"TAX_PAYMENT_CERTIFICATE">;
949
+ purpose: z.ZodEnum<["PAYMENT_RECEIPT", "OTHER"]>;
950
+ }, "strip", z.ZodTypeAny, {
951
+ type: "TAX_PAYMENT_CERTIFICATE";
952
+ purpose: "PAYMENT_RECEIPT" | "OTHER";
953
+ }, {
954
+ type: "TAX_PAYMENT_CERTIFICATE";
955
+ purpose: "PAYMENT_RECEIPT" | "OTHER";
956
+ }>, z.ZodObject<{
957
+ type: z.ZodLiteral<"VAT_TAX_BASE_PROOF">;
958
+ from: z.ZodString;
959
+ to: z.ZodString;
960
+ }, "strip", z.ZodTypeAny, {
961
+ type: "VAT_TAX_BASE_PROOF";
962
+ from: string;
963
+ to: string;
964
+ }, {
965
+ type: "VAT_TAX_BASE_PROOF";
966
+ from: string;
967
+ to: string;
968
+ }>, z.ZodObject<{
969
+ type: z.ZodLiteral<"STANDARD_FINANCIAL_STATEMENT_PROOF">;
970
+ fiscalYearEnd: z.ZodString;
971
+ }, "strip", z.ZodTypeAny, {
972
+ type: "STANDARD_FINANCIAL_STATEMENT_PROOF";
973
+ fiscalYearEnd: string;
974
+ }, {
975
+ type: "STANDARD_FINANCIAL_STATEMENT_PROOF";
976
+ fiscalYearEnd: string;
977
+ }>]>;
978
+ }, "strip", z.ZodTypeAny, {
979
+ businessRegistrationNumber: string;
980
+ document: {
981
+ type: "BUSINESS_REGISTRATION_PROOF";
982
+ language: "KO" | "EN";
983
+ } | {
984
+ type: "BUSINESS_REGISTRATION_CERTIFICATE";
985
+ reason: string;
986
+ } | {
987
+ type: "TAX_PAYMENT_CERTIFICATE";
988
+ purpose: "PAYMENT_RECEIPT" | "OTHER";
989
+ } | {
990
+ type: "VAT_TAX_BASE_PROOF";
991
+ from: string;
992
+ to: string;
993
+ } | {
994
+ type: "STANDARD_FINANCIAL_STATEMENT_PROOF";
995
+ fiscalYearEnd: string;
996
+ };
997
+ }, {
998
+ businessRegistrationNumber: string;
999
+ document: {
1000
+ type: "BUSINESS_REGISTRATION_PROOF";
1001
+ language: "KO" | "EN";
1002
+ } | {
1003
+ type: "BUSINESS_REGISTRATION_CERTIFICATE";
1004
+ reason: string;
1005
+ } | {
1006
+ type: "TAX_PAYMENT_CERTIFICATE";
1007
+ purpose: "PAYMENT_RECEIPT" | "OTHER";
1008
+ } | {
1009
+ type: "VAT_TAX_BASE_PROOF";
1010
+ from: string;
1011
+ to: string;
1012
+ } | {
1013
+ type: "STANDARD_FINANCIAL_STATEMENT_PROOF";
1014
+ fiscalYearEnd: string;
1015
+ };
1016
+ }>, {
1017
+ businessRegistrationNumber: string;
1018
+ document: {
1019
+ type: "BUSINESS_REGISTRATION_PROOF";
1020
+ language: "KO" | "EN";
1021
+ } | {
1022
+ type: "BUSINESS_REGISTRATION_CERTIFICATE";
1023
+ reason: string;
1024
+ } | {
1025
+ type: "TAX_PAYMENT_CERTIFICATE";
1026
+ purpose: "PAYMENT_RECEIPT" | "OTHER";
1027
+ } | {
1028
+ type: "VAT_TAX_BASE_PROOF";
1029
+ from: string;
1030
+ to: string;
1031
+ } | {
1032
+ type: "STANDARD_FINANCIAL_STATEMENT_PROOF";
1033
+ fiscalYearEnd: string;
1034
+ };
1035
+ }, {
1036
+ businessRegistrationNumber: string;
1037
+ document: {
1038
+ type: "BUSINESS_REGISTRATION_PROOF";
1039
+ language: "KO" | "EN";
1040
+ } | {
1041
+ type: "BUSINESS_REGISTRATION_CERTIFICATE";
1042
+ reason: string;
1043
+ } | {
1044
+ type: "TAX_PAYMENT_CERTIFICATE";
1045
+ purpose: "PAYMENT_RECEIPT" | "OTHER";
1046
+ } | {
1047
+ type: "VAT_TAX_BASE_PROOF";
1048
+ from: string;
1049
+ to: string;
1050
+ } | {
1051
+ type: "STANDARD_FINANCIAL_STATEMENT_PROOF";
1052
+ fiscalYearEnd: string;
1053
+ };
1054
+ }>;
926
1055
  export declare const createIssuerSchema: z.ZodObject<{
927
1056
  identificationNumber: z.ZodPipeline<z.ZodEffects<z.ZodString, string, string>, z.ZodString>;
928
1057
  organizationName: z.ZodString;
@@ -974,31 +1103,88 @@ export declare const bankAccountTransactionQuerySchema: z.ZodEffects<z.ZodObject
974
1103
  from?: string | undefined;
975
1104
  to?: string | undefined;
976
1105
  bankAccountId?: string | undefined;
977
- transactionType?: "DEPOSIT" | "WITHDRAW" | "OTHER" | undefined;
1106
+ transactionType?: "OTHER" | "DEPOSIT" | "WITHDRAW" | undefined;
978
1107
  cursor?: string | undefined;
979
1108
  limit?: number | undefined;
980
1109
  }, {
981
1110
  from?: string | undefined;
982
1111
  to?: string | undefined;
983
1112
  bankAccountId?: string | undefined;
984
- transactionType?: "DEPOSIT" | "WITHDRAW" | "OTHER" | undefined;
1113
+ transactionType?: "OTHER" | "DEPOSIT" | "WITHDRAW" | undefined;
985
1114
  cursor?: string | undefined;
986
1115
  limit?: number | undefined;
987
1116
  }>, {
988
1117
  from?: string | undefined;
989
1118
  to?: string | undefined;
990
1119
  bankAccountId?: string | undefined;
991
- transactionType?: "DEPOSIT" | "WITHDRAW" | "OTHER" | undefined;
1120
+ transactionType?: "OTHER" | "DEPOSIT" | "WITHDRAW" | undefined;
992
1121
  cursor?: string | undefined;
993
1122
  limit?: number | undefined;
994
1123
  }, {
995
1124
  from?: string | undefined;
996
1125
  to?: string | undefined;
997
1126
  bankAccountId?: string | undefined;
998
- transactionType?: "DEPOSIT" | "WITHDRAW" | "OTHER" | undefined;
1127
+ transactionType?: "OTHER" | "DEPOSIT" | "WITHDRAW" | undefined;
999
1128
  cursor?: string | undefined;
1000
1129
  limit?: number | undefined;
1001
1130
  }>;
1131
+ /** 서버가 한 요청에 받는 계좌 수 상한. */
1132
+ export declare const BANK_ACCOUNT_HOLDER_BULK_MAX = 100;
1133
+ /** JavaScript number로 원 단위 금액을 정확히 표현할 수 있는 상한. */
1134
+ export declare const BANK_ACCOUNT_HOLDER_AMOUNT_MAX: number;
1135
+ export declare const bankAccountHolderInquirySchema: z.ZodObject<{
1136
+ amount: z.ZodOptional<z.ZodNumber>;
1137
+ bankCode: z.ZodString;
1138
+ accountNumber: z.ZodPipeline<z.ZodEffects<z.ZodString, string, string>, z.ZodString>;
1139
+ }, "strip", z.ZodTypeAny, {
1140
+ bankCode: string;
1141
+ accountNumber: string;
1142
+ amount?: number | undefined;
1143
+ }, {
1144
+ bankCode: string;
1145
+ accountNumber: string;
1146
+ amount?: number | undefined;
1147
+ }>;
1148
+ export declare const bankAccountHolderCliInquirySchema: z.ZodObject<{
1149
+ amount: z.ZodOptional<z.ZodPipeline<z.ZodEffects<z.ZodString, number, string>, z.ZodNumber>>;
1150
+ bankCode: z.ZodString;
1151
+ accountNumber: z.ZodPipeline<z.ZodEffects<z.ZodString, string, string>, z.ZodString>;
1152
+ }, "strip", z.ZodTypeAny, {
1153
+ bankCode: string;
1154
+ accountNumber: string;
1155
+ amount?: number | undefined;
1156
+ }, {
1157
+ bankCode: string;
1158
+ accountNumber: string;
1159
+ amount?: string | undefined;
1160
+ }>;
1161
+ export declare const bankAccountHolderBulkInquirySchema: z.ZodObject<{
1162
+ accounts: z.ZodArray<z.ZodObject<{
1163
+ amount: z.ZodOptional<z.ZodNumber>;
1164
+ bankCode: z.ZodString;
1165
+ accountNumber: z.ZodPipeline<z.ZodEffects<z.ZodString, string, string>, z.ZodString>;
1166
+ }, "strip", z.ZodTypeAny, {
1167
+ bankCode: string;
1168
+ accountNumber: string;
1169
+ amount?: number | undefined;
1170
+ }, {
1171
+ bankCode: string;
1172
+ accountNumber: string;
1173
+ amount?: number | undefined;
1174
+ }>, "many">;
1175
+ }, "strip", z.ZodTypeAny, {
1176
+ accounts: {
1177
+ bankCode: string;
1178
+ accountNumber: string;
1179
+ amount?: number | undefined;
1180
+ }[];
1181
+ }, {
1182
+ accounts: {
1183
+ bankCode: string;
1184
+ accountNumber: string;
1185
+ amount?: number | undefined;
1186
+ }[];
1187
+ }>;
1002
1188
  export declare const amendTerminationSchema: z.ZodObject<{
1003
1189
  date: z.ZodString;
1004
1190
  }, "strip", z.ZodTypeAny, {
@@ -1 +1 @@
1
- {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../../src/validators/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAyBxB,eAAO,MAAM,aAAa;;;;;;;;;;;;EAOxB,CAAC;AA8FH,eAAO,MAAM,uBAAuB,iDAMlC,CAAC;AAMH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EASnC,CAAC;AAEH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EASnC,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;EAY/B,CAAC;AAiDH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwBjC,CAAC;AAEH,eAAO,MAAM,kCAAkC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAe7C,CAAC;AAEH,eAAO,MAAM,iCAAiC,2CAc3C,CAAC;AAMJ,eAAO,MAAM,uBAAuB,aAKiB,CAAC;AAyCtD,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;IAIrC,CAAC;AAcH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+BhC,CAAC;AAML,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;EAK7B,CAAC;AAOH,eAAO,MAAM,qCAAqC;;;;;;EAEhD,CAAC;AAWH,eAAO,MAAM,iCAAiC;;;;;;EAE5C,CAAC;AAEH,4BAA4B;AAC5B,eAAO,MAAM,qCAAqC,MAAM,CAAC;AAGzD,eAAO,MAAM,yCAAyC;;;;;;EAapD,CAAC;AAMH,eAAO,MAAM,kCAAkC,MAAM,CAAC;AAEtD,eAAO,MAAM,iCAAiC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsB1C,CAAC;AAML,eAAO,MAAM,sBAAsB;;;;;;EAEjC,CAAC;AAOH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAWpC,CAAC;AAML,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAwT9C,CAAC"}
1
+ {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../../src/validators/schemas.ts"],"names":[],"mappings":"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"}
@@ -8,7 +8,7 @@ const NTS_PARTY_TEXT_MAX_LENGTH = 40;
8
8
  const NTS_PERSON_NAME_MAX_LENGTH = 30;
9
9
  const NTS_CALL_TEXT_MAX_LENGTH = 20;
10
10
  const TAX_INVOICE_ITEM_MAX_COUNT = 16;
11
- const TAX_INVOICE_CLIENT_REFERENCE_ID_MAX_LENGTH = 255;
11
+ const CLIENT_REFERENCE_ID_HEADER_MAX_LENGTH = 255;
12
12
  const CASH_RECEIPT_TEXT_MAX_LENGTH = 20;
13
13
  const CASH_RECEIPT_REPRESENTATIVE_MAX_LENGTH = 10;
14
14
  const CASH_RECEIPT_AMOUNT_MAX = 9_999_999_999;
@@ -207,10 +207,10 @@ export const createTaxInvoiceIssueRequestSchema = taxInvoiceBaseSchema.superRefi
207
207
  });
208
208
  }
209
209
  });
210
- export const taxInvoiceClientReferenceIdSchema = z
210
+ export const clientReferenceIdHeaderSchema = z
211
211
  .string()
212
212
  .min(1, 'reference-id는 1자 이상이어야 합니다')
213
- .max(TAX_INVOICE_CLIENT_REFERENCE_ID_MAX_LENGTH, `reference-id는 최대 ${TAX_INVOICE_CLIENT_REFERENCE_ID_MAX_LENGTH}자입니다`)
213
+ .max(CLIENT_REFERENCE_ID_HEADER_MAX_LENGTH, `reference-id는 최대 ${CLIENT_REFERENCE_ID_HEADER_MAX_LENGTH}자입니다`)
214
214
  .regex(/^[\x20-\x7E]*$/u, 'reference-id에는 출력 가능한 ASCII 문자(U+0020~U+007E)만 사용할 수 있습니다')
215
215
  .refine((value) => !value.startsWith(' ') && !value.endsWith(' '), 'reference-id의 앞뒤에는 공백을 사용할 수 없습니다');
216
216
  // ========================
@@ -299,6 +299,75 @@ export const createCashReceiptSchema = z
299
299
  }
300
300
  });
301
301
  // ========================
302
+ // Document Issuance Schemas
303
+ // ========================
304
+ export const documentIssuanceKeySchema = z
305
+ .string()
306
+ .uuid('issuanceKey는 UUID 형식이어야 합니다');
307
+ const documentReissueReasonSchema = z
308
+ .string()
309
+ .refine((value) => ![...value].some((character) => /[\p{Cc}]/u.test(character)), 'reason에는 제어 문자를 사용할 수 없습니다')
310
+ .transform((value) => value.trim())
311
+ .pipe(z
312
+ .string()
313
+ .min(1, 'reason은 1자 이상이어야 합니다')
314
+ .refine((value) => [...value].length <= 10, 'reason은 최대 10자입니다'));
315
+ const documentYearMonthSchema = z
316
+ .string()
317
+ .regex(/^\d{4}-(0[1-9]|1[0-2])$/, '연월은 YYYY-MM 형식이어야 합니다');
318
+ const documentIssuanceDocumentSchema = z.discriminatedUnion('type', [
319
+ z.object({
320
+ type: z.literal('BUSINESS_REGISTRATION_PROOF'),
321
+ language: z.enum(['KO', 'EN'], {
322
+ errorMap: () => ({ message: 'language는 KO 또는 EN이어야 합니다' }),
323
+ }),
324
+ }),
325
+ z.object({
326
+ type: z.literal('BUSINESS_REGISTRATION_CERTIFICATE'),
327
+ reason: documentReissueReasonSchema,
328
+ }),
329
+ z.object({
330
+ type: z.literal('TAX_PAYMENT_CERTIFICATE'),
331
+ purpose: z.enum(['PAYMENT_RECEIPT', 'OTHER'], {
332
+ errorMap: () => ({ message: 'purpose는 PAYMENT_RECEIPT 또는 OTHER여야 합니다' }),
333
+ }),
334
+ }),
335
+ z.object({
336
+ type: z.literal('VAT_TAX_BASE_PROOF'),
337
+ from: z.string().regex(/^\d{4}-(01|07)$/, 'from은 YYYY-01 또는 YYYY-07 형식이어야 합니다'),
338
+ to: z.string().regex(/^\d{4}-(06|12)$/, 'to는 YYYY-06 또는 YYYY-12 형식이어야 합니다'),
339
+ }),
340
+ z.object({
341
+ type: z.literal('STANDARD_FINANCIAL_STATEMENT_PROOF'),
342
+ fiscalYearEnd: documentYearMonthSchema,
343
+ }),
344
+ ]);
345
+ export const createDocumentIssuanceSchema = z
346
+ .object({
347
+ businessRegistrationNumber: businessIdentificationNumberSchema,
348
+ document: documentIssuanceDocumentSchema,
349
+ })
350
+ .superRefine((data, ctx) => {
351
+ if (data.document.type !== 'VAT_TAX_BASE_PROOF')
352
+ return;
353
+ if (data.document.from > data.document.to) {
354
+ ctx.addIssue({
355
+ code: z.ZodIssueCode.custom,
356
+ path: ['document', 'from'],
357
+ message: 'from은 to보다 늦을 수 없습니다',
358
+ });
359
+ }
360
+ const fromYear = Number(data.document.from.slice(0, 4));
361
+ const toYear = Number(data.document.to.slice(0, 4));
362
+ if (toYear - fromYear > 4) {
363
+ ctx.addIssue({
364
+ code: z.ZodIssueCode.custom,
365
+ path: ['document', 'to'],
366
+ message: '과세기간은 최대 5개 연도까지 입력할 수 있습니다',
367
+ });
368
+ }
369
+ });
370
+ // ========================
302
371
  // Issuer Schemas
303
372
  // ========================
304
373
  export const createIssuerSchema = z.object({
@@ -365,6 +434,56 @@ export const bankAccountTransactionQuerySchema = z
365
434
  message: 'from은 to보다 늦을 수 없습니다',
366
435
  });
367
436
  // ========================
437
+ // Bank Account Holder Schemas
438
+ // ========================
439
+ /** 서버가 한 요청에 받는 계좌 수 상한. */
440
+ export const BANK_ACCOUNT_HOLDER_BULK_MAX = 100;
441
+ /** JavaScript number로 원 단위 금액을 정확히 표현할 수 있는 상한. */
442
+ export const BANK_ACCOUNT_HOLDER_AMOUNT_MAX = Number.MAX_SAFE_INTEGER;
443
+ // 지원하는 은행은 서버가 UNSUPPORTED_BANK로 판정한다. 목록을 CLI에 두면 은행이 늘 때마다 다시 배포해야 한다.
444
+ const bankCodeSchema = z
445
+ .string({ required_error: '은행코드는 필수입니다', invalid_type_error: '은행코드는 3자리 숫자 문자열입니다' })
446
+ .regex(/^\d{3}$/, '은행코드는 3자리 숫자입니다');
447
+ // 서버 패턴 ^-*(?:\d-*){6,20}$ 와 같은 뜻이다. 하이픈을 뗀 값으로 보내면 응답의 accountNumber와 형태가 맞는다.
448
+ const bankAccountNumberSchema = z
449
+ .string({ required_error: '계좌번호는 필수입니다', invalid_type_error: '계좌번호는 문자열이어야 합니다' })
450
+ .transform((value) => value.replace(/[-\s]/g, ''))
451
+ .pipe(z.string().regex(/^\d{6,20}$/, '계좌번호는 하이픈을 빼고 6~20자리 숫자여야 합니다'));
452
+ const BANK_ACCOUNT_HOLDER_AMOUNT_ERROR = `amount는 1 이상 ${BANK_ACCOUNT_HOLDER_AMOUNT_MAX} 이하의 10진 정수입니다`;
453
+ // --data의 JSON은 숫자만 받는다. boolean이나 배열을 Number 규칙으로 강제 변환하면 다른 금액을 조회할 수 있다.
454
+ const bankAccountHolderAmountSchema = z
455
+ .number({ invalid_type_error: BANK_ACCOUNT_HOLDER_AMOUNT_ERROR })
456
+ .int('amount는 1 이상의 정수입니다')
457
+ .min(1, 'amount는 1 이상의 정수입니다')
458
+ .max(BANK_ACCOUNT_HOLDER_AMOUNT_MAX, BANK_ACCOUNT_HOLDER_AMOUNT_ERROR);
459
+ // 단건 --amount 옵션은 문자열로 들어온다. 10진 숫자만 변환하고 지수·16진수·공백은 거부한다.
460
+ const bankAccountHolderCliAmountSchema = z
461
+ .string({ invalid_type_error: BANK_ACCOUNT_HOLDER_AMOUNT_ERROR })
462
+ .regex(/^\d+$/, BANK_ACCOUNT_HOLDER_AMOUNT_ERROR)
463
+ .transform(Number)
464
+ .pipe(bankAccountHolderAmountSchema);
465
+ const bankAccountHolderInquiryShape = {
466
+ bankCode: bankCodeSchema,
467
+ accountNumber: bankAccountNumberSchema,
468
+ };
469
+ export const bankAccountHolderInquirySchema = z.object({
470
+ ...bankAccountHolderInquiryShape,
471
+ amount: bankAccountHolderAmountSchema.optional(),
472
+ });
473
+ export const bankAccountHolderCliInquirySchema = z.object({
474
+ ...bankAccountHolderInquiryShape,
475
+ amount: bankAccountHolderCliAmountSchema.optional(),
476
+ });
477
+ // 서버는 과금만 중복을 줄여 계산하고 results는 요청한 순서와 개수를 그대로 돌려준다.
478
+ // 여기서 배열을 줄이면 보낸 accounts와 받은 results의 인덱스가 어긋난다.
479
+ // 중복을 줄이는 businessRegistrationStatusBulkCheckSchema와 다르게 두는 이유다.
480
+ export const bankAccountHolderBulkInquirySchema = z.object({
481
+ accounts: z
482
+ .array(bankAccountHolderInquirySchema)
483
+ .min(1, '조회할 계좌를 1개 이상 입력하세요')
484
+ .max(BANK_ACCOUNT_HOLDER_BULK_MAX, `계좌는 최대 ${BANK_ACCOUNT_HOLDER_BULK_MAX}개입니다. 나눠서 조회하세요`),
485
+ });
486
+ // ========================
368
487
  // Amendment Schemas
369
488
  // ========================
370
489
  export const amendTerminationSchema = z.object({
@@ -698,6 +817,114 @@ export const jsonSchemas = {
698
817
  },
699
818
  },
700
819
  },
820
+ 'bank-account-holder-check-bulk': {
821
+ type: 'object',
822
+ description: '예금주 일괄 조회 스키마. --data, --file, --stdin 입력에 사용합니다. results는 accounts와 같은 순서, 같은 개수로 돌아오므로 중복 계좌를 줄이지 마세요.',
823
+ required: ['accounts'],
824
+ properties: {
825
+ accounts: {
826
+ type: 'array',
827
+ minItems: 1,
828
+ maxItems: BANK_ACCOUNT_HOLDER_BULK_MAX,
829
+ description: `조회할 계좌 (1~${BANK_ACCOUNT_HOLDER_BULK_MAX}개)`,
830
+ items: {
831
+ type: 'object',
832
+ required: ['bankCode', 'accountNumber'],
833
+ properties: {
834
+ bankCode: {
835
+ type: 'string',
836
+ pattern: '^\\d{3}$',
837
+ description: "금융결제원 3자리 은행코드. 지원 은행은 'bolta guide bank-account-holder'로 확인하세요",
838
+ example: '088',
839
+ },
840
+ accountNumber: {
841
+ type: 'string',
842
+ description: '계좌번호 (하이픈 허용, 하이픈을 뺀 숫자가 6~20자리)',
843
+ example: '1000000001',
844
+ },
845
+ amount: {
846
+ type: 'integer',
847
+ minimum: 1,
848
+ maximum: BANK_ACCOUNT_HOLDER_AMOUNT_MAX,
849
+ description: '금액 확인형 가상계좌의 입금 금액(원). 일반 계좌는 비워 두세요',
850
+ example: 20000,
851
+ },
852
+ },
853
+ },
854
+ },
855
+ },
856
+ },
857
+ 'document-issue': {
858
+ type: 'object',
859
+ description: '홈택스 국세 증명 서류 발급 요청. document.type에 맞는 입력을 사용하세요.',
860
+ required: ['businessRegistrationNumber', 'document'],
861
+ properties: {
862
+ businessRegistrationNumber: {
863
+ type: 'string',
864
+ description: 'API 키가 속한 사업자의 사업자등록번호 (10자리, 하이픈 허용)',
865
+ example: '1234567890',
866
+ },
867
+ document: {
868
+ oneOf: [
869
+ {
870
+ type: 'object',
871
+ title: '사업자등록증명',
872
+ required: ['type', 'language'],
873
+ properties: {
874
+ type: { type: 'string', const: 'BUSINESS_REGISTRATION_PROOF' },
875
+ language: { type: 'string', enum: ['KO', 'EN'], description: '서류 언어' },
876
+ },
877
+ },
878
+ {
879
+ type: 'object',
880
+ title: '사업자등록증 재발급',
881
+ required: ['type', 'reason'],
882
+ properties: {
883
+ type: { type: 'string', const: 'BUSINESS_REGISTRATION_CERTIFICATE' },
884
+ reason: {
885
+ type: 'string',
886
+ minLength: 1,
887
+ maxLength: 10,
888
+ description: '재발급 사유. 앞뒤 공백을 제거한 뒤 1~10자이며 제어 문자는 사용할 수 없습니다.',
889
+ },
890
+ },
891
+ },
892
+ {
893
+ type: 'object',
894
+ title: '납세증명서',
895
+ required: ['type', 'purpose'],
896
+ properties: {
897
+ type: { type: 'string', const: 'TAX_PAYMENT_CERTIFICATE' },
898
+ purpose: {
899
+ type: 'string',
900
+ enum: ['PAYMENT_RECEIPT', 'OTHER'],
901
+ description: 'PAYMENT_RECEIPT(대금수령) | OTHER(기타)',
902
+ },
903
+ },
904
+ },
905
+ {
906
+ type: 'object',
907
+ title: '부가가치세 과세표준증명',
908
+ required: ['type', 'from', 'to'],
909
+ properties: {
910
+ type: { type: 'string', const: 'VAT_TAX_BASE_PROOF' },
911
+ from: { type: 'string', pattern: '^\\d{4}-(01|07)$', description: '과세기간 시작 연월' },
912
+ to: { type: 'string', pattern: '^\\d{4}-(06|12)$', description: '과세기간 종료 연월' },
913
+ },
914
+ },
915
+ {
916
+ type: 'object',
917
+ title: '표준재무제표증명',
918
+ required: ['type', 'fiscalYearEnd'],
919
+ properties: {
920
+ type: { type: 'string', const: 'STANDARD_FINANCIAL_STATEMENT_PROOF' },
921
+ fiscalYearEnd: { type: 'string', pattern: '^\\d{4}-(0[1-9]|1[0-2])$', description: '사업연도 종료 연월' },
922
+ },
923
+ },
924
+ ],
925
+ },
926
+ },
927
+ },
701
928
  };
702
929
  const invoiceIssueRequestJsonSchema = JSON.parse(JSON.stringify(jsonSchemas['invoice-issue']));
703
930
  invoiceIssueRequestJsonSchema.description =