docs(API): Swagger API 문서 업데이트

- AdminFcmApi, BillApi, ExpectedExpenseApi 개선
- PositionApi, ProcessApi, QuoteApi 개선
- ReceivablesApi, ShipmentApi, StockApi, VendorLedgerApi 개선

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2026-01-13 19:48:54 +09:00
parent fc6d88bd26
commit e571f8c38e
10 changed files with 172 additions and 20 deletions

View File

@@ -144,6 +144,7 @@
* @OA\Property(
* property="data",
* type="array",
*
* @OA\Items(ref="#/components/schemas/AdminFcmToken")
* )
* )
@@ -159,6 +160,7 @@
* @OA\Property(
* property="data",
* type="array",
*
* @OA\Items(ref="#/components/schemas/AdminFcmSendLog")
* )
* )
@@ -177,6 +179,7 @@ class AdminFcmApi
* header="X-Sender-Id",
* description="발송자 ID (MNG 관리자 ID)",
* required=false,
*
* @OA\Schema(type="integer", example=10)
* ),
*
@@ -216,6 +219,7 @@ class AdminFcmApi
*
* @OA\JsonContent(ref="#/components/schemas/ErrorResponse")
* ),
*
* @OA\Response(response=401, description="인증 실패", @OA\JsonContent(ref="#/components/schemas/ErrorResponse"))
* )
*/
@@ -559,4 +563,4 @@ public function deleteToken() {}
* )
*/
public function history() {}
}
}

View File

@@ -12,6 +12,7 @@
* schema="Bill",
* type="object",
* required={"id", "tenant_id", "bill_number", "bill_type", "amount", "issue_date", "maturity_date", "status"},
*
* @OA\Property(property="id", type="integer", example=1),
* @OA\Property(property="tenant_id", type="integer", example=1),
* @OA\Property(property="bill_number", type="string", example="202412000001", description="어음번호"),
@@ -49,6 +50,7 @@
* @OA\Property(
* property="installments",
* type="array",
*
* @OA\Items(ref="#/components/schemas/BillInstallment")
* )
* )
@@ -56,6 +58,7 @@
* @OA\Schema(
* schema="BillInstallment",
* type="object",
*
* @OA\Property(property="id", type="integer", example=1),
* @OA\Property(property="bill_id", type="integer", example=1),
* @OA\Property(property="installment_date", type="string", format="date", example="2024-12-15", description="차수 일자"),
@@ -68,11 +71,14 @@
* @OA\Schema(
* schema="BillPagination",
* type="object",
*
* @OA\Property(
* property="data",
* type="array",
*
* @OA\Items(ref="#/components/schemas/Bill")
* ),
*
* @OA\Property(property="current_page", type="integer", example=1),
* @OA\Property(property="last_page", type="integer", example=5),
* @OA\Property(property="per_page", type="integer", example=20),
@@ -85,6 +91,7 @@
* schema="BillCreateRequest",
* type="object",
* required={"bill_type", "amount", "issue_date", "maturity_date"},
*
* @OA\Property(property="bill_number", type="string", nullable=true, example="202412000001", description="어음번호 (미입력시 자동생성)"),
* @OA\Property(property="bill_type", type="string", enum={"received", "issued"}, example="received", description="어음 구분"),
* @OA\Property(property="client_id", type="integer", nullable=true, example=10, description="거래처 ID"),
@@ -101,8 +108,10 @@
* property="installments",
* type="array",
* nullable=true,
*
* @OA\Items(
* type="object",
*
* @OA\Property(property="date", type="string", format="date", example="2024-12-15"),
* @OA\Property(property="amount", type="number", example=5000000),
* @OA\Property(property="note", type="string", nullable=true, example="1차 분할")
@@ -113,6 +122,7 @@
* @OA\Schema(
* schema="BillUpdateRequest",
* type="object",
*
* @OA\Property(property="bill_number", type="string", nullable=true, example="202412000001"),
* @OA\Property(property="bill_type", type="string", enum={"received", "issued"}, nullable=true),
* @OA\Property(property="client_id", type="integer", nullable=true),
@@ -131,14 +141,17 @@
* @OA\Schema(
* schema="BillSummary",
* type="object",
*
* @OA\Property(property="total_amount", type="number", example=50000000, description="총 금액"),
* @OA\Property(property="total_count", type="integer", example=10, description="총 건수"),
* @OA\Property(
* property="by_type",
* type="object",
* description="구분별 합계",
*
* @OA\AdditionalProperties(
* type="object",
*
* @OA\Property(property="bill_type", type="string"),
* @OA\Property(property="total", type="number"),
* @OA\Property(property="count", type="integer")
@@ -162,6 +175,7 @@ class BillApi
* summary="어음 목록 조회",
* description="어음 목록을 페이지네이션하여 조회합니다.",
* security={{"ApiKeyAuth": {}}, {"BearerAuth": {}}},
*
* @OA\Parameter(name="search", in="query", description="검색어 (어음번호, 거래처명, 메모)", @OA\Schema(type="string")),
* @OA\Parameter(name="bill_type", in="query", description="어음 구분", @OA\Schema(type="string", enum={"received", "issued"})),
* @OA\Parameter(name="status", in="query", description="상태", @OA\Schema(type="string")),
@@ -175,10 +189,13 @@ class BillApi
* @OA\Parameter(name="sort_dir", in="query", description="정렬 방향", @OA\Schema(type="string", enum={"asc", "desc"}, default="desc")),
* @OA\Parameter(name="per_page", in="query", description="페이지당 건수", @OA\Schema(type="integer", default=20)),
* @OA\Parameter(name="page", in="query", description="페이지 번호", @OA\Schema(type="integer", default=1)),
*
* @OA\Response(
* response=200,
* description="성공",
*
* @OA\JsonContent(
*
* @OA\Property(property="success", type="boolean", example=true),
* @OA\Property(property="message", type="string", example="데이터를 조회했습니다."),
* @OA\Property(property="data", ref="#/components/schemas/BillPagination")
@@ -196,19 +213,25 @@ public function index() {}
* summary="어음 등록",
* description="새로운 어음을 등록합니다.",
* security={{"ApiKeyAuth": {}}, {"BearerAuth": {}}},
*
* @OA\RequestBody(
* required=true,
*
* @OA\JsonContent(ref="#/components/schemas/BillCreateRequest")
* ),
*
* @OA\Response(
* response=201,
* description="생성 성공",
*
* @OA\JsonContent(
*
* @OA\Property(property="success", type="boolean", example=true),
* @OA\Property(property="message", type="string", example="생성되었습니다."),
* @OA\Property(property="data", ref="#/components/schemas/Bill")
* )
* ),
*
* @OA\Response(response=422, description="유효성 검사 실패")
* )
*/
@@ -222,16 +245,21 @@ public function store() {}
* summary="어음 상세 조회",
* description="특정 어음의 상세 정보를 조회합니다.",
* security={{"ApiKeyAuth": {}}, {"BearerAuth": {}}},
*
* @OA\Parameter(name="id", in="path", required=true, description="어음 ID", @OA\Schema(type="integer")),
*
* @OA\Response(
* response=200,
* description="성공",
*
* @OA\JsonContent(
*
* @OA\Property(property="success", type="boolean", example=true),
* @OA\Property(property="message", type="string", example="데이터를 조회했습니다."),
* @OA\Property(property="data", ref="#/components/schemas/Bill")
* )
* ),
*
* @OA\Response(response=404, description="어음을 찾을 수 없음")
* )
*/
@@ -245,20 +273,27 @@ public function show() {}
* summary="어음 수정",
* description="기존 어음 정보를 수정합니다.",
* security={{"ApiKeyAuth": {}}, {"BearerAuth": {}}},
*
* @OA\Parameter(name="id", in="path", required=true, description="어음 ID", @OA\Schema(type="integer")),
*
* @OA\RequestBody(
* required=true,
*
* @OA\JsonContent(ref="#/components/schemas/BillUpdateRequest")
* ),
*
* @OA\Response(
* response=200,
* description="수정 성공",
*
* @OA\JsonContent(
*
* @OA\Property(property="success", type="boolean", example=true),
* @OA\Property(property="message", type="string", example="수정되었습니다."),
* @OA\Property(property="data", ref="#/components/schemas/Bill")
* )
* ),
*
* @OA\Response(response=404, description="어음을 찾을 수 없음"),
* @OA\Response(response=422, description="유효성 검사 실패")
* )
@@ -273,16 +308,21 @@ public function update() {}
* summary="어음 삭제",
* description="어음을 삭제합니다. (Soft Delete)",
* security={{"ApiKeyAuth": {}}, {"BearerAuth": {}}},
*
* @OA\Parameter(name="id", in="path", required=true, description="어음 ID", @OA\Schema(type="integer")),
*
* @OA\Response(
* response=200,
* description="삭제 성공",
*
* @OA\JsonContent(
*
* @OA\Property(property="success", type="boolean", example=true),
* @OA\Property(property="message", type="string", example="삭제되었습니다."),
* @OA\Property(property="data", type="null")
* )
* ),
*
* @OA\Response(response=404, description="어음을 찾을 수 없음")
* )
*/
@@ -296,23 +336,31 @@ public function destroy() {}
* summary="어음 상태 변경",
* description="어음의 상태를 변경합니다.",
* security={{"ApiKeyAuth": {}}, {"BearerAuth": {}}},
*
* @OA\Parameter(name="id", in="path", required=true, description="어음 ID", @OA\Schema(type="integer")),
*
* @OA\RequestBody(
* required=true,
*
* @OA\JsonContent(
* required={"status"},
*
* @OA\Property(property="status", type="string", example="paymentComplete", description="변경할 상태")
* )
* ),
*
* @OA\Response(
* response=200,
* description="상태 변경 성공",
*
* @OA\JsonContent(
*
* @OA\Property(property="success", type="boolean", example=true),
* @OA\Property(property="message", type="string", example="수정되었습니다."),
* @OA\Property(property="data", ref="#/components/schemas/Bill")
* )
* ),
*
* @OA\Response(response=404, description="어음을 찾을 수 없음"),
* @OA\Response(response=422, description="유효성 검사 실패")
* )
@@ -327,15 +375,19 @@ public function updateStatus() {}
* summary="어음 요약 조회",
* description="기간별 어음 요약 정보를 조회합니다.",
* security={{"ApiKeyAuth": {}}, {"BearerAuth": {}}},
*
* @OA\Parameter(name="bill_type", in="query", description="어음 구분", @OA\Schema(type="string", enum={"received", "issued"})),
* @OA\Parameter(name="issue_start_date", in="query", description="발행일 시작", @OA\Schema(type="string", format="date")),
* @OA\Parameter(name="issue_end_date", in="query", description="발행일 종료", @OA\Schema(type="string", format="date")),
* @OA\Parameter(name="maturity_start_date", in="query", description="만기일 시작", @OA\Schema(type="string", format="date")),
* @OA\Parameter(name="maturity_end_date", in="query", description="만기일 종료", @OA\Schema(type="string", format="date")),
*
* @OA\Response(
* response=200,
* description="성공",
*
* @OA\JsonContent(
*
* @OA\Property(property="success", type="boolean", example=true),
* @OA\Property(property="message", type="string", example="데이터를 조회했습니다."),
* @OA\Property(property="data", ref="#/components/schemas/BillSummary")

View File

@@ -11,6 +11,7 @@
* @OA\Schema(
* schema="ExpectedExpense",
* type="object",
*
* @OA\Property(property="id", type="integer", example=1),
* @OA\Property(property="tenant_id", type="integer", example=1),
* @OA\Property(property="expected_payment_date", type="string", format="date", example="2025-01-15"),
@@ -46,6 +47,7 @@
* @OA\Schema(
* schema="ExpectedExpensePagination",
* type="object",
*
* @OA\Property(property="current_page", type="integer", example=1),
* @OA\Property(property="data", type="array", @OA\Items(ref="#/components/schemas/ExpectedExpense")),
* @OA\Property(property="first_page_url", type="string"),
@@ -64,6 +66,7 @@
* schema="ExpectedExpenseCreateRequest",
* type="object",
* required={"expected_payment_date", "transaction_type", "amount"},
*
* @OA\Property(property="expected_payment_date", type="string", format="date", example="2025-01-15"),
* @OA\Property(property="settlement_date", type="string", format="date", nullable=true, example="2025-01-10"),
* @OA\Property(property="transaction_type", type="string", enum={"purchase","advance","suspense","rent","salary","insurance","tax","utilities","other"}, example="purchase"),
@@ -80,6 +83,7 @@
* @OA\Schema(
* schema="ExpectedExpenseUpdateRequest",
* type="object",
*
* @OA\Property(property="expected_payment_date", type="string", format="date", example="2025-01-20"),
* @OA\Property(property="settlement_date", type="string", format="date", nullable=true),
* @OA\Property(property="transaction_type", type="string", enum={"purchase","advance","suspense","rent","salary","insurance","tax","utilities","other"}),
@@ -96,6 +100,7 @@
* @OA\Schema(
* schema="ExpectedExpenseSummary",
* type="object",
*
* @OA\Property(property="total_amount", type="number", format="float", example=15000000),
* @OA\Property(property="total_count", type="integer", example=12),
* @OA\Property(property="by_payment_status", type="object"),
@@ -111,6 +116,7 @@ class ExpectedExpenseApi
* summary="미지급비용 목록 조회",
* tags={"ExpectedExpense"},
* security={{"ApiKeyAuth": {}}, {"BearerAuth": {}}},
*
* @OA\Parameter(name="search", in="query", description="검색어 (거래처명, 계정과목, 적요)", @OA\Schema(type="string")),
* @OA\Parameter(name="start_date", in="query", description="시작일", @OA\Schema(type="string", format="date")),
* @OA\Parameter(name="end_date", in="query", description="종료일", @OA\Schema(type="string", format="date")),
@@ -122,10 +128,13 @@ class ExpectedExpenseApi
* @OA\Parameter(name="sort_dir", in="query", description="정렬 방향", @OA\Schema(type="string", enum={"asc","desc"}, default="asc")),
* @OA\Parameter(name="per_page", in="query", description="페이지당 항목 수", @OA\Schema(type="integer", default=50)),
* @OA\Parameter(name="page", in="query", description="페이지 번호", @OA\Schema(type="integer", default=1)),
*
* @OA\Response(
* response=200,
* description="성공",
*
* @OA\JsonContent(
*
* @OA\Property(property="success", type="boolean", example=true),
* @OA\Property(property="message", type="string"),
* @OA\Property(property="data", ref="#/components/schemas/ExpectedExpensePagination")
@@ -141,14 +150,19 @@ public function index() {}
* summary="미지급비용 등록",
* tags={"ExpectedExpense"},
* security={{"ApiKeyAuth": {}}, {"BearerAuth": {}}},
*
* @OA\RequestBody(
* required=true,
*
* @OA\JsonContent(ref="#/components/schemas/ExpectedExpenseCreateRequest")
* ),
*
* @OA\Response(
* response=201,
* description="생성 성공",
*
* @OA\JsonContent(
*
* @OA\Property(property="success", type="boolean", example=true),
* @OA\Property(property="message", type="string"),
* @OA\Property(property="data", ref="#/components/schemas/ExpectedExpense")
@@ -164,11 +178,15 @@ public function store() {}
* summary="미지급비용 상세 조회",
* tags={"ExpectedExpense"},
* security={{"ApiKeyAuth": {}}, {"BearerAuth": {}}},
*
* @OA\Parameter(name="id", in="path", required=true, description="미지급비용 ID", @OA\Schema(type="integer")),
*
* @OA\Response(
* response=200,
* description="성공",
*
* @OA\JsonContent(
*
* @OA\Property(property="success", type="boolean", example=true),
* @OA\Property(property="message", type="string"),
* @OA\Property(property="data", ref="#/components/schemas/ExpectedExpense")
@@ -184,15 +202,21 @@ public function show() {}
* summary="미지급비용 수정",
* tags={"ExpectedExpense"},
* security={{"ApiKeyAuth": {}}, {"BearerAuth": {}}},
*
* @OA\Parameter(name="id", in="path", required=true, description="미지급비용 ID", @OA\Schema(type="integer")),
*
* @OA\RequestBody(
* required=true,
*
* @OA\JsonContent(ref="#/components/schemas/ExpectedExpenseUpdateRequest")
* ),
*
* @OA\Response(
* response=200,
* description="수정 성공",
*
* @OA\JsonContent(
*
* @OA\Property(property="success", type="boolean", example=true),
* @OA\Property(property="message", type="string"),
* @OA\Property(property="data", ref="#/components/schemas/ExpectedExpense")
@@ -208,11 +232,15 @@ public function update() {}
* summary="미지급비용 삭제",
* tags={"ExpectedExpense"},
* security={{"ApiKeyAuth": {}}, {"BearerAuth": {}}},
*
* @OA\Parameter(name="id", in="path", required=true, description="미지급비용 ID", @OA\Schema(type="integer")),
*
* @OA\Response(
* response=200,
* description="삭제 성공",
*
* @OA\JsonContent(
*
* @OA\Property(property="success", type="boolean", example=true),
* @OA\Property(property="message", type="string")
* )
@@ -227,16 +255,22 @@ public function destroy() {}
* summary="미지급비용 일괄 삭제",
* tags={"ExpectedExpense"},
* security={{"ApiKeyAuth": {}}, {"BearerAuth": {}}},
*
* @OA\RequestBody(
* required=true,
*
* @OA\JsonContent(
*
* @OA\Property(property="ids", type="array", @OA\Items(type="integer"), example={1, 2, 3})
* )
* ),
*
* @OA\Response(
* response=200,
* description="일괄 삭제 성공",
*
* @OA\JsonContent(
*
* @OA\Property(property="success", type="boolean", example=true),
* @OA\Property(property="message", type="string"),
* @OA\Property(property="data", type="object",
@@ -254,17 +288,23 @@ public function destroyMany() {}
* summary="예상 지급일 일괄 변경",
* tags={"ExpectedExpense"},
* security={{"ApiKeyAuth": {}}, {"BearerAuth": {}}},
*
* @OA\RequestBody(
* required=true,
*
* @OA\JsonContent(
*
* @OA\Property(property="ids", type="array", @OA\Items(type="integer"), example={1, 2, 3}),
* @OA\Property(property="expected_payment_date", type="string", format="date", example="2025-02-01")
* )
* ),
*
* @OA\Response(
* response=200,
* description="일괄 변경 성공",
*
* @OA\JsonContent(
*
* @OA\Property(property="success", type="boolean", example=true),
* @OA\Property(property="message", type="string"),
* @OA\Property(property="data", type="object",
@@ -282,13 +322,17 @@ public function updateExpectedPaymentDate() {}
* summary="미지급비용 요약 (기간별 합계)",
* tags={"ExpectedExpense"},
* security={{"ApiKeyAuth": {}}, {"BearerAuth": {}}},
*
* @OA\Parameter(name="start_date", in="query", description="시작일", @OA\Schema(type="string", format="date")),
* @OA\Parameter(name="end_date", in="query", description="종료일", @OA\Schema(type="string", format="date")),
* @OA\Parameter(name="payment_status", in="query", description="지급상태", @OA\Schema(type="string")),
*
* @OA\Response(
* response=200,
* description="성공",
*
* @OA\JsonContent(
*
* @OA\Property(property="success", type="boolean", example=true),
* @OA\Property(property="message", type="string"),
* @OA\Property(property="data", ref="#/components/schemas/ExpectedExpenseSummary")

View File

@@ -12,6 +12,7 @@
* schema="Position",
* type="object",
* required={"id", "tenant_id", "type", "name", "sort_order", "is_active"},
*
* @OA\Property(property="id", type="integer", example=1),
* @OA\Property(property="tenant_id", type="integer", example=287),
* @OA\Property(property="type", type="string", enum={"rank", "title"}, example="rank", description="유형: rank(직급), title(직책)"),
@@ -26,6 +27,7 @@
* schema="PositionCreateRequest",
* type="object",
* required={"type", "name"},
*
* @OA\Property(property="type", type="string", enum={"rank", "title"}, example="rank", description="유형: rank(직급), title(직책)"),
* @OA\Property(property="name", type="string", example="과장", description="명칭"),
* @OA\Property(property="sort_order", type="integer", example=3, description="정렬 순서 (생략시 자동)"),
@@ -35,6 +37,7 @@
* @OA\Schema(
* schema="PositionUpdateRequest",
* type="object",
*
* @OA\Property(property="name", type="string", example="과장", description="명칭"),
* @OA\Property(property="sort_order", type="integer", example=3, description="정렬 순서"),
* @OA\Property(property="is_active", type="boolean", example=true, description="활성화 여부")
@@ -44,12 +47,15 @@
* schema="PositionReorderRequest",
* type="object",
* required={"items"},
*
* @OA\Property(
* property="items",
* type="array",
*
* @OA\Items(
* type="object",
* required={"id", "sort_order"},
*
* @OA\Property(property="id", type="integer", example=1),
* @OA\Property(property="sort_order", type="integer", example=1)
* )
@@ -64,15 +70,19 @@ class PositionApi
* tags={"Position"},
* summary="직급/직책 목록 조회",
* security={{"ApiKeyAuth": {}}, {"BearerAuth": {}}},
*
* @OA\Parameter(name="type", in="query", description="유형 필터 (rank: 직급, title: 직책)", @OA\Schema(type="string", enum={"rank", "title"})),
* @OA\Parameter(name="is_active", in="query", description="활성화 필터", @OA\Schema(type="boolean")),
* @OA\Parameter(name="q", in="query", description="검색어 (명칭)", @OA\Schema(type="string")),
* @OA\Parameter(name="per_page", in="query", description="페이지당 개수 (생략시 전체)", @OA\Schema(type="integer")),
* @OA\Parameter(name="page", in="query", description="페이지 번호", @OA\Schema(type="integer")),
*
* @OA\Response(
* response=200,
* description="성공",
*
* @OA\JsonContent(
*
* @OA\Property(property="success", type="boolean", example=true),
* @OA\Property(property="message", type="string"),
* @OA\Property(property="data", type="array", @OA\Items(ref="#/components/schemas/Position"))
@@ -88,19 +98,25 @@ public function index() {}
* tags={"Position"},
* summary="직급/직책 생성",
* security={{"ApiKeyAuth": {}}, {"BearerAuth": {}}},
*
* @OA\RequestBody(
* required=true,
*
* @OA\JsonContent(ref="#/components/schemas/PositionCreateRequest")
* ),
*
* @OA\Response(
* response=200,
* description="성공",
*
* @OA\JsonContent(
*
* @OA\Property(property="success", type="boolean", example=true),
* @OA\Property(property="message", type="string"),
* @OA\Property(property="data", ref="#/components/schemas/Position")
* )
* ),
*
* @OA\Response(response=409, description="중복 오류")
* )
*/
@@ -112,16 +128,21 @@ public function store() {}
* tags={"Position"},
* summary="직급/직책 단건 조회",
* security={{"ApiKeyAuth": {}}, {"BearerAuth": {}}},
*
* @OA\Parameter(name="id", in="path", required=true, @OA\Schema(type="integer")),
*
* @OA\Response(
* response=200,
* description="성공",
*
* @OA\JsonContent(
*
* @OA\Property(property="success", type="boolean", example=true),
* @OA\Property(property="message", type="string"),
* @OA\Property(property="data", ref="#/components/schemas/Position")
* )
* ),
*
* @OA\Response(response=404, description="찾을 수 없음")
* )
*/
@@ -133,20 +154,27 @@ public function show() {}
* tags={"Position"},
* summary="직급/직책 수정",
* security={{"ApiKeyAuth": {}}, {"BearerAuth": {}}},
*
* @OA\Parameter(name="id", in="path", required=true, @OA\Schema(type="integer")),
*
* @OA\RequestBody(
* required=true,
*
* @OA\JsonContent(ref="#/components/schemas/PositionUpdateRequest")
* ),
*
* @OA\Response(
* response=200,
* description="성공",
*
* @OA\JsonContent(
*
* @OA\Property(property="success", type="boolean", example=true),
* @OA\Property(property="message", type="string"),
* @OA\Property(property="data", ref="#/components/schemas/Position")
* )
* ),
*
* @OA\Response(response=404, description="찾을 수 없음"),
* @OA\Response(response=409, description="중복 오류")
* )
@@ -159,11 +187,15 @@ public function update() {}
* tags={"Position"},
* summary="직급/직책 삭제",
* security={{"ApiKeyAuth": {}}, {"BearerAuth": {}}},
*
* @OA\Parameter(name="id", in="path", required=true, @OA\Schema(type="integer")),
*
* @OA\Response(
* response=200,
* description="성공",
*
* @OA\JsonContent(
*
* @OA\Property(property="success", type="boolean", example=true),
* @OA\Property(property="message", type="string"),
* @OA\Property(property="data", type="object",
@@ -172,6 +204,7 @@ public function update() {}
* )
* )
* ),
*
* @OA\Response(response=404, description="찾을 수 없음")
* )
*/
@@ -183,14 +216,19 @@ public function destroy() {}
* tags={"Position"},
* summary="직급/직책 순서 변경 (벌크)",
* security={{"ApiKeyAuth": {}}, {"BearerAuth": {}}},
*
* @OA\RequestBody(
* required=true,
*
* @OA\JsonContent(ref="#/components/schemas/PositionReorderRequest")
* ),
*
* @OA\Response(
* response=200,
* description="성공",
*
* @OA\JsonContent(
*
* @OA\Property(property="success", type="boolean", example=true),
* @OA\Property(property="message", type="string"),
* @OA\Property(property="data", type="object",
@@ -202,4 +240,4 @@ public function destroy() {}
* )
*/
public function reorder() {}
}
}

View File

@@ -13,6 +13,7 @@
* @OA\Schema(
* schema="ProcessItem",
* type="object",
*
* @OA\Property(property="id", type="integer", example=1),
* @OA\Property(property="process_id", type="integer", example=1),
* @OA\Property(property="item_id", type="integer", example=123),
@@ -28,6 +29,7 @@
* @OA\Schema(
* schema="ProcessClassificationRule",
* type="object",
*
* @OA\Property(property="id", type="integer", example=1),
* @OA\Property(property="process_id", type="integer", example=1),
* @OA\Property(property="registration_type", type="string", example="pattern"),
@@ -42,6 +44,7 @@
* @OA\Schema(
* schema="Process",
* type="object",
*
* @OA\Property(property="id", type="integer", example=1),
* @OA\Property(property="tenant_id", type="integer", example=1),
* @OA\Property(property="process_code", type="string", example="P-001"),
@@ -63,6 +66,7 @@
* schema="ProcessCreateRequest",
* type="object",
* required={"process_name", "process_type"},
*
* @OA\Property(property="process_name", type="string", maxLength=100, example="스크린 생산"),
* @OA\Property(property="description", type="string", nullable=true),
* @OA\Property(property="process_type", type="string", enum={"생산", "검사", "포장", "조립"}),
@@ -75,9 +79,11 @@
* @OA\Property(property="is_active", type="boolean", nullable=true),
* @OA\Property(property="classification_rules", type="array", nullable=true,
* description="패턴 기반 분류 규칙",
*
* @OA\Items(
* type="object",
* required={"rule_type", "matching_type", "condition_value"},
*
* @OA\Property(property="rule_type", type="string", enum={"품목코드", "품목명", "품목구분"}),
* @OA\Property(property="matching_type", type="string", enum={"startsWith", "endsWith", "contains", "equals"}),
* @OA\Property(property="condition_value", type="string", maxLength=255),
@@ -88,6 +94,7 @@
* ),
* @OA\Property(property="item_ids", type="array", nullable=true,
* description="개별 품목 ID 배열",
*
* @OA\Items(type="integer", example=123)
* )
* )
@@ -100,13 +107,17 @@ class ProcessApi
* tags={"Process"},
* summary="공정 목록 조회",
* security={{"ApiKeyAuth": {}}, {"BearerAuth": {}}},
*
* @OA\Parameter(name="page", in="query", @OA\Schema(type="integer", default=1)),
* @OA\Parameter(name="size", in="query", @OA\Schema(type="integer", default=20)),
* @OA\Parameter(name="q", in="query", description="검색어", @OA\Schema(type="string")),
* @OA\Parameter(name="status", in="query", @OA\Schema(type="string", enum={"active", "inactive"})),
* @OA\Parameter(name="process_type", in="query", @OA\Schema(type="string", enum={"생산", "검사", "포장", "조립"})),
*
* @OA\Response(response=200, description="성공",
*
* @OA\JsonContent(
*
* @OA\Property(property="success", type="boolean", example=true),
* @OA\Property(property="data", type="array", @OA\Items(ref="#/components/schemas/Process"))
* )
@@ -121,9 +132,13 @@ public function index() {}
* tags={"Process"},
* summary="공정 상세 조회",
* security={{"ApiKeyAuth": {}}, {"BearerAuth": {}}},
*
* @OA\Parameter(name="id", in="path", required=true, @OA\Schema(type="integer")),
*
* @OA\Response(response=200, description="성공",
*
* @OA\JsonContent(
*
* @OA\Property(property="success", type="boolean", example=true),
* @OA\Property(property="data", ref="#/components/schemas/Process")
* )
@@ -138,11 +153,16 @@ public function show() {}
* tags={"Process"},
* summary="공정 생성",
* security={{"ApiKeyAuth": {}}, {"BearerAuth": {}}},
*
* @OA\RequestBody(required=true,
*
* @OA\JsonContent(ref="#/components/schemas/ProcessCreateRequest")
* ),
*
* @OA\Response(response=201, description="생성됨",
*
* @OA\JsonContent(
*
* @OA\Property(property="success", type="boolean", example=true),
* @OA\Property(property="message", type="string", example="message.created"),
* @OA\Property(property="data", ref="#/components/schemas/Process")
@@ -158,12 +178,18 @@ public function store() {}
* tags={"Process"},
* summary="공정 수정",
* security={{"ApiKeyAuth": {}}, {"BearerAuth": {}}},
*
* @OA\Parameter(name="id", in="path", required=true, @OA\Schema(type="integer")),
*
* @OA\RequestBody(required=true,
*
* @OA\JsonContent(ref="#/components/schemas/ProcessCreateRequest")
* ),
*
* @OA\Response(response=200, description="성공",
*
* @OA\JsonContent(
*
* @OA\Property(property="success", type="boolean", example=true),
* @OA\Property(property="message", type="string", example="message.updated"),
* @OA\Property(property="data", ref="#/components/schemas/Process")

View File

@@ -277,8 +277,10 @@
* description="다건 BOM 기반 자동산출 요청. React QuoteFormItem 필드명(camelCase)과 API 변수명(약어) 모두 지원합니다.",
*
* @OA\Property(property="items", type="array", minItems=1, description="견적 품목 배열",
*
* @OA\Items(ref="#/components/schemas/QuoteBomBulkItemInput")
* ),
*
* @OA\Property(property="debug", type="boolean", example=false, description="디버그 모드 (10단계 디버깅 정보 포함)")
* )
*
@@ -321,7 +323,9 @@
* @OA\Property(property="grand_total", type="number", format="float", example=1500000, description="성공한 품목 총계")
* ),
* @OA\Property(property="items", type="array", description="품목별 산출 결과",
*
* @OA\Items(type="object",
*
* @OA\Property(property="index", type="integer", example=0, description="요청 배열에서의 인덱스"),
* @OA\Property(property="finished_goods_code", type="string", example="SC-1000"),
* @OA\Property(property="inputs", type="object", description="정규화된 입력 변수"),

View File

@@ -52,6 +52,7 @@
*
* @OA\Items(type="integer", example=1)
* ),
*
* @OA\Property(
* property="categories",
* type="array",

View File

@@ -77,7 +77,6 @@
* type="object",
* description="출하 상세 정보 (품목 포함)",
* allOf={
*
* @OA\Schema(ref="#/components/schemas/Shipment"),
* @OA\Schema(
*
@@ -114,31 +113,24 @@
* @OA\Property(
* property="scheduled",
* type="object",
*
* @OA\Property(property="label", type="string", example="출고예정"),
* @OA\Property(property="count", type="integer", example=30)
* ),
*
* @OA\Property(
* property="ready",
* type="object",
*
* @OA\Property(property="label", type="string", example="출하대기"),
* @OA\Property(property="count", type="integer", example=20)
* ),
*
* @OA\Property(
* property="shipping",
* type="object",
*
* @OA\Property(property="label", type="string", example="배송중"),
* @OA\Property(property="count", type="integer", example=15)
* ),
*
* @OA\Property(
* property="completed",
* type="object",
*
* @OA\Property(property="label", type="string", example="배송완료"),
* @OA\Property(property="count", type="integer", example=35)
* )

View File

@@ -64,7 +64,6 @@
* type="object",
* description="재고 상세 정보 (LOT 포함)",
* allOf={
*
* @OA\Schema(ref="#/components/schemas/Stock"),
* @OA\Schema(
*
@@ -98,43 +97,34 @@
* @OA\Property(
* property="raw_material",
* type="object",
*
* @OA\Property(property="label", type="string", example="원자재"),
* @OA\Property(property="count", type="integer", example=50),
* @OA\Property(property="total_qty", type="number", format="float", example=5000.0)
* ),
*
* @OA\Property(
* property="bent_part",
* type="object",
*
* @OA\Property(property="label", type="string", example="절곡부품"),
* @OA\Property(property="count", type="integer", example=30),
* @OA\Property(property="total_qty", type="number", format="float", example=2500.0)
* ),
*
* @OA\Property(
* property="purchased_part",
* type="object",
*
* @OA\Property(property="label", type="string", example="구매부품"),
* @OA\Property(property="count", type="integer", example=40),
* @OA\Property(property="total_qty", type="number", format="float", example=3000.0)
* ),
*
* @OA\Property(
* property="sub_material",
* type="object",
*
* @OA\Property(property="label", type="string", example="부자재"),
* @OA\Property(property="count", type="integer", example=20),
* @OA\Property(property="total_qty", type="number", format="float", example=1500.0)
* ),
*
* @OA\Property(
* property="consumable",
* type="object",
*
* @OA\Property(property="label", type="string", example="소모품"),
* @OA\Property(property="count", type="integer", example=10),
* @OA\Property(property="total_qty", type="number", format="float", example=500.0)

View File

@@ -94,6 +94,7 @@
* schema="VendorLedgerPagination",
* description="거래처원장 목록 페이지네이션",
* type="object",
*
* @OA\Property(property="current_page", type="integer", example=1),
* @OA\Property(property="data", type="array", @OA\Items(ref="#/components/schemas/VendorLedgerItem")),
* @OA\Property(property="first_page_url", type="string"),