@tocca-systems/twp-cli 0.47.0 → 0.49.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.
- package/CHANGELOG.public.md +14 -0
- package/README.md +100 -8
- package/dist/analysis-NCD6YTJM.js +4 -0
- package/dist/{api-command-PQ435C3B.js → api-command-IBK6R4XU.js} +3 -3
- package/dist/{app-227MZT5L.js → app-7I767FND.js} +4 -4
- package/dist/attendance-correct-M6KD6PSN.js +51 -0
- package/dist/{attendance-lists-NVRU2NLY.js → attendance-lists-3T7S7QF5.js} +1 -1
- package/dist/{backlog-F6TNQG4I.js → backlog-IXUASOE3.js} +1 -1
- package/dist/{budget-FOFE3YUJ.js → budget-EJIZFFB7.js} +1 -1
- package/dist/{chunk-PSWDEV6M.js → chunk-36TEJJ5S.js} +1 -1
- package/dist/{chunk-KPXJALCL.js → chunk-4QKACT6A.js} +1 -1
- package/dist/{chunk-4OSCQLZT.js → chunk-5ALOH2TR.js} +1 -1
- package/dist/{chunk-ZTIR3NSH.js → chunk-5YXEGJU7.js} +1 -1
- package/dist/{chunk-Y5EN7RYN.js → chunk-67JAB5QG.js} +1 -1
- package/dist/{chunk-CEBL5R62.js → chunk-6KB2R3S2.js} +33 -8
- package/dist/{chunk-ACPGM5KP.js → chunk-6WNPHORR.js} +1 -1
- package/dist/{chunk-E7MUDY4P.js → chunk-74SXPFUT.js} +51 -27
- package/dist/{chunk-VIU2HPWM.js → chunk-AC6G5UPA.js} +1 -1
- package/dist/{chunk-XWW63XJJ.js → chunk-BS2ACFJA.js} +62 -58
- package/dist/{chunk-DPGQ36DA.js → chunk-BSEPVMVA.js} +1 -1
- package/dist/{chunk-LLOXVVFK.js → chunk-FC2SFCKD.js} +13 -10
- package/dist/{chunk-3B5PVPGU.js → chunk-HJPIGVGD.js} +1 -1
- package/dist/{chunk-ZFTKBOGN.js → chunk-QHNZUMRK.js} +1 -1
- package/dist/{chunk-YLXW7TIU.js → chunk-QOUDJ7XO.js} +18 -18
- package/dist/{chunk-P7JCZYAI.js → chunk-QYWYZG73.js} +1 -1
- package/dist/{chunk-JBX4OEHV.js → chunk-SPGS7DHD.js} +1 -1
- package/dist/{chunk-4ZTWRAHM.js → chunk-VWNFYFLA.js} +1 -1
- package/dist/chunk-ZVJXYKRY.js +9 -0
- package/dist/cli.js +88 -10
- package/dist/{commands-EIWS357Q.js → commands-DJIQE34F.js} +2 -2
- package/dist/{company-X37NKBWH.js → company-VCPUUYVV.js} +2 -2
- package/dist/{completion-YSP6UE25.js → completion-XFXG7RPT.js} +1 -1
- package/dist/{contract-YRMK73XV.js → contract-SMIPLH7R.js} +1 -1
- package/dist/{department-WKV46OIM.js → department-4RCU4E27.js} +1 -1
- package/dist/{deposit-75KCQBCE.js → deposit-UF7OKRG2.js} +1 -1
- package/dist/{estimate-LA7WXYTV.js → estimate-HE5H6XXY.js} +2 -2
- package/dist/{inquiry-NHDMHZXX.js → inquiry-SCPVERFM.js} +1 -1
- package/dist/{invoice-WVCRD2MT.js → invoice-CF2TPYSA.js} +2 -2
- package/dist/{job-title-FSVZSCMO.js → job-title-W2EKNKTY.js} +1 -1
- package/dist/{knowledge-J6TFEPMP.js → knowledge-ZZEHU744.js} +1 -1
- package/dist/{leave-MWDZOGQH.js → leave-5VY2IK7K.js} +1 -1
- package/dist/{media-66FCDEMZ.js → media-4MASY32I.js} +86 -26
- package/dist/{notification-ZZV4M24X.js → notification-AOSKQX3Z.js} +1 -1
- package/dist/{oneshot-C2GOGRLM.js → oneshot-Y4A2ZC3E.js} +1 -1
- package/dist/{position-G24ALWEO.js → position-TPKLP2SP.js} +1 -1
- package/dist/{project-WKWOVDVA.js → project-JFZCKGYY.js} +1 -1
- package/dist/{prospect-SS2Z4UNJ.js → prospect-3ALNTGPY.js} +1 -1
- package/dist/{purchase-YPTIOSG6.js → purchase-SEHUEXE5.js} +2 -2
- package/dist/{receivable-G7TYHCBD.js → receivable-QYSSI7TB.js} +1 -1
- package/dist/{registry-RPVLCPFY.js → registry-BA7RGQ2R.js} +1 -1
- package/dist/report-RV7DOZFB.js +127 -0
- package/dist/{run-VGH3UT6R.js → run-ZXMGPUUK.js} +2 -2
- package/dist/{sales-ai-review-57QGRYMZ.js → sales-ai-review-AXZKRXKB.js} +1 -1
- package/dist/{sales-master-7SWNOWZS.js → sales-master-RC77V74V.js} +1 -1
- package/dist/{sales-numbering-TQS3PUV7.js → sales-numbering-WU5FAPCO.js} +1 -1
- package/dist/{supplier-payment-IORFZDHV.js → supplier-payment-OCAK6N3S.js} +1 -1
- package/dist/{task-TK37X5JF.js → task-7QESG57Q.js} +2 -2
- package/dist/{user-O4N3RNPO.js → user-67X5FJTN.js} +2 -2
- package/dist/worker-agent-MKXRTVBM.js +81 -0
- package/dist/{workflow-JSBBY3V5.js → workflow-KHNGCPQB.js} +1 -1
- package/package.json +1 -1
- package/dist/analysis-KUCETWIJ.js +0 -3
- package/dist/attendance-K2U7RYDU.js +0 -3
- package/dist/chunk-WPY6OQOT.js +0 -9
- package/dist/report-EILA6LJW.js +0 -73
- /package/dist/{commands-SWR442MR.js → commands-UMKI65IW.js} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{USER_REF_FLAG,USER_REF_HELP,userPath}from"./chunk-IXFMXUNT.js";import{MANHOUR_DESCRIPTION,MANHOUR_FROM_FLAG,MANHOUR_TO_FLAG,manhourNotes,manhourQuery,manhourRows,workloadDistributionNotes,workloadDistributionRows}from"./chunk-
|
|
4
|
-
import{LIST_FLAGS,LIST_PAGING_HELP,envelopePaging,nonEmpty,positiveInteger}from"./chunk-IOGMOXYF.js";import{requireResolved,singleRef,withResolved}from"./chunk-LXIAOCUW.js";import{isRecord,pick}from"./chunk-VTQAI52S.js";import{ApiResponseError,UsageError}from"./chunk-UFND7FBC.js";var PROJECT_FLAG={name:"--project",summary:"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u30B3\u30FC\u30C9\u307E\u305F\u306F ID\uFF08\u7701\u7565\u6642\u306F TWP_PROJECT / .twp/config.json / ~/.twp/config.json\uFF09",takesValue:true,placeholder:"<\u30B3\u30FC\u30C9|ID>"};var ROLE_FLAG={name:"--role",summary:"\u5F79\u5272\uFF08member / manager \u306A\u3069\u30FB\u5024\u306F\u30B5\u30FC\u30D0\u304C\u691C\u67FB\u3059\u308B\uFF09",takesValue:true,placeholder:"<\u5F79\u5272>"};var START_DATE_FLAG={name:"\
|
|
3
|
+
import{USER_REF_FLAG,USER_REF_HELP,userPath}from"./chunk-IXFMXUNT.js";import{FROM_FLAG,MANHOUR_DESCRIPTION,MANHOUR_FROM_FLAG,MANHOUR_TO_FLAG,MONTH_FLAG,TO_FLAG,dataOf,listIn,manhourNotes,manhourQuery,manhourRows,monthRange,rangeNotes,recordOf,workloadDistributionNotes,workloadDistributionRows}from"./chunk-74SXPFUT.js";import{boundedText,isoDate}from"./chunk-XDHLO54T.js";import{readBody}from"./chunk-ORUDW52G.js";import{PROJECT_MEMBERS_LIMIT,resolveNamed}from"./chunk-BS2ACFJA.js";
|
|
4
|
+
import{collapsesInUrlPath,safeProjectIdPolicy}from"./chunk-GMBJTG6A.js";import{LIST_FLAGS,LIST_PAGING_HELP,envelopePaging,nonEmpty,positiveInteger}from"./chunk-IOGMOXYF.js";import{requireResolved,singleRef,withResolved}from"./chunk-LXIAOCUW.js";import{isRecord,pick}from"./chunk-VTQAI52S.js";import{ApiResponseError,UsageError}from"./chunk-UFND7FBC.js";var PROJECT_FLAG={name:"--project",summary:"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u30B3\u30FC\u30C9\u307E\u305F\u306F ID\uFF08\u7701\u7565\u6642\u306F TWP_PROJECT / .twp/config.json / ~/.twp/config.json\uFF09",takesValue:true,placeholder:"<\u30B3\u30FC\u30C9|ID>"};var ROLE_FLAG={name:"--role",summary:"\u5F79\u5272\uFF08member / manager \u306A\u3069\u30FB\u5024\u306F\u30B5\u30FC\u30D0\u304C\u691C\u67FB\u3059\u308B\uFF09",takesValue:true,placeholder:"<\u5F79\u5272>"};var START_DATE_FLAG={name:"\
|
|
5
5
|
--start-date",summary:"\u53C2\u753B\u958B\u59CB\u65E5\uFF08YYYY-MM-DD\uFF09",takesValue:true,placeholder:"<YYYY-MM-DD>"};var END_DATE_FLAG={name:"--end-date",summary:"\u53C2\u753B\u7D42\u4E86\u65E5\uFF08YYYY-MM-DD\uFF09",takesValue:true,placeholder:"<YYYY-MM-DD>"};var PERIOD_FILE_FLAG={name:"--period-file",summary:"\u7A3C\u50CD\u671F\u9593\uFF08assignment_periods\uFF09\u306E JSON \u914D\u5217\u30D5\u30A1\u30A4\u30EB\uFF08- \u3067\u6A19\u6E96\u5165\u529B\uFF09",takesValue:true,placeholder:"<\u30D1\u30B9>"};
|
|
6
6
|
var MEMO_FLAG={name:"--memo",summary:"\u30E1\u30E2\uFF0810,000 \u6587\u5B57\u307E\u3067\uFF09",takesValue:true,placeholder:"<\u6587\u5B57\u5217>"};var CLEAR_FLAG={name:"--clear",summary:"\u5225\u540D\u3092\u6D88\u3059",takesValue:false};var MEMO_MAX_CHARS=1e4;var PERIOD_FILE_MAX_CHARS=2e5;var ALIAS_MAX_CHARS=255;var PERIOD_KEYS=["id","start_date","end_date","daily_hours","total_hours","input_mode"];var PERIOD_REQUIRED=["start_date","end_date","daily_hours"];var ROLE_HELP="--role \u306E\u5024\u306F\u30B5\u30FC\u30D0\u304C\u691C\u67FB\u3057\u307E\u3059\uFF08CLI\
|
|
7
7
|
\u306F\u691C\u67FB\u3057\u307E\u305B\u3093\uFF09\u30022026-10-01 \u6642\u70B9\u306E\u5024\u306F\n member\uFF08\u30E1\u30F3\u30D0\u30FC\uFF09/ manager\uFF08\u7BA1\u7406\u8005\uFF09/ approver\uFF08\u7BA1\u7406\u8005\uFF08\u627F\u8A8D\u8005\uFF09\uFF09/ manager_no_punch\uFF08\u7BA1\u7406\u8005\uFF08\u6253\u523B\u7121\uFF09\uFF09\u3067\u3059\u3002\n \u5024\u306F\u5897\u3048\u308B\u3053\u3068\u304C\u3042\u308A\u307E\u3059\u3002\u4ECA\u306E\u30E1\u30F3\u30D0\u30FC\u306E\u5024\u306F twp project members \u306E role \u5217\u3067\u78BA\u304B\u3081\u3089\u308C\u307E\u3059\u3002";
|
|
@@ -58,10 +58,35 @@ T",path:membersPath(input,`/${userPath(input,`/${name}`)}`)}),plannedNotes:targe
|
|
|
58
58
|
flags:[CLEAR_FLAG,PROJECT_FLAG],async prepare(input,ctx){const usage="twp project member alias help";if(input.args.length>1)throw new UsageError(`\u53D7\u3051\u53D6\u308C\u308B\u5225\u540D\u306F1\u3064\u3060\u3051\u3067\u3059: ${input.args.slice(1).join(" ")}`,usage);const alias=input.args[0];if(input.flags.has(CLEAR_FLAG.name)&&alias!==void 0)throw new UsageError(`\u5225\u540D\u3068 ${CLEAR_FLAG.name} \u306F\u540C\u6642\u306B\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093`,usage);if(!input.flags.has(
|
|
59
59
|
CLEAR_FLAG.name)){if(alias===void 0||alias.trim()==="")throw new UsageError(`\u5225\u540D\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u6D88\u3059\u306A\u3089 ${CLEAR_FLAG.name}\uFF09`,usage);if([...alias].length>ALIAS_MAX_CHARS)throw new UsageError(`\u5225\u540D\u304C\u9577\u3059\u304E\u307E\u3059\uFF08${[...alias].length} \u6587\u5B57\u30FB\u4E0A\u9650 ${ALIAS_MAX_CHARS} \u6587\u5B57\uFF09`,usage)}return withResolved(input,{projectId:await ctx.projectId(nonEmpty(input.flags,PROJECT_FLAG.
|
|
60
60
|
name))})},plan:input=>({method:"PATCH",path:membersPath(input,"/me/alias"),body:{alias:input.flags.has(CLEAR_FLAG.name)?null:input.args[0]}}),invalidates,summarize:body=>memberSummary(body,"\u5225\u540D\u306E\u66F4\u65B0"),raw:body=>memberResult(body,"\u5225\u540D\u306E\u66F4\u65B0")};var projectMemberResource={name:"member",summary:"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u30E1\u30F3\u30D0\u30FC\u306E\u30A2\u30B5\u30A4\u30F3\uFF08\u8FFD\u52A0\u30FB\u5F79\u5272\u3068\u7A3C\u50CD\u671F\u9593\u306E\u5909\u66F4\u30FB\u524A\u9664\u30FB\u6607\u683C\u30FB\u964D\u683C\u30FB\u81EA\u5206\u306E\u5225\u540D\uFF09",
|
|
61
|
-
operations:[createOperation,updateOperation,deleteOperation,roleChange("promote"),roleChange("demote"),aliasOperation]};
|
|
61
|
+
operations:[createOperation,updateOperation,deleteOperation,roleChange("promote"),roleChange("demote"),aliasOperation]};async function projectArg(input,ctx,usage){const[ref,...rest]=input.args;if(rest.length>0){throw new UsageError(`\u53D7\u3051\u53D6\u308C\u308B\u5F15\u6570\u306F\u30D7\u30ED\u30B8\u30A7\u30AF\u30C81\u3064\u3060\u3051\u3067\u3059: ${rest.join(" ")}`,usage)}return withResolved(input,{projectId:await ctx.projectId(ref)})}function projectPath(input,suffix){return`/api/v2/projects/${encodeURIComponent(requireResolved(input,"projectId"))}/${suffix}`}function managerOnly(what){return body=>body?.error===
|
|
62
|
+
"permission_denied"&&(body.error_description??"").includes("\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u7BA1\u7406\u8005")?`\u3053\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E${what}\u3092\u8AAD\u3080\u6A29\u9650\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u7BA1\u7406\u8005\uFF08manager\uFF09\u304B\u30C6\u30CA\u30F3\u30C8\u7BA1\u7406\u8005\u3060\u3051\u304C\u8AAD\u3081\u307E\u3059\u3002`:void 0}var RISK_USAGE="twp project risk [<ID|\u30B3\u30FC\u30C9>]";function riskData(body){
|
|
63
|
+
const data=dataOf(body,"\u30EA\u30B9\u30AF\u5206\u6790");if(!isRecord(data))throw new ApiResponseError("\u30EA\u30B9\u30AF\u5206\u6790\u306E\u5FDC\u7B54\u306E data \u304C\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002");return data}function riskRows(body){const data=riskData(body);const rows=[];for(const[key,level]of[["high_risk_tasks","high"],["medium_risk_tasks","medium"]]){for(const task of listIn(
|
|
64
|
+
{result:true,[key]:data[key]},key,"\u30EA\u30B9\u30AF\u5206\u6790")){const risks=Array.isArray(task["risks"])?task["risks"].map(recordOf):[];rows.push({level,key:task["key"]??null,subject:task["subject"]??null,risks:risks.map(r=>String(r["detail"]??r["type"]??"?")).join(" / "),types:risks.map(r=>String(r["type"]??"?")).join(","),due_date:task["due_date"]??null,priority:task["priority"]??null,status_id:task["status_id"]??null,assignee_id:task["assignee_id"]??null,id:task["id"]??null})}}return rows}
|
|
65
|
+
var riskOperation={name:"risk",summary:"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u30EA\u30B9\u30AF\u5206\u6790\uFF08\u671F\u9650\u8D85\u904E\u30FB\u671F\u9650\u9593\u8FD1\u30FB\u6EDE\u7559\u306A\u3069\u306E\u30BF\u30B9\u30AF\uFF09\u3092\u8868\u793A\u3059\u308B",usage:RISK_USAGE,description:"\u753B\u9762\u306E\u300C\u30EA\u30B9\u30AF\u5206\u6790\u300D\u3068\u540C\u3058 GET /api/v2/projects/{id}/risk-analysis \u3067\u3059\u3002\u7701\u7565\u3059\u308B\u3068\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306F\u65E2\u5B9A\u3067\u3059\u3002\n\u672A\u5B8C\u4E86\u30BF\u30B9\u30AF\u306E\u3046\u3061\u3001\u30EA\u30B9\u30AF\u306E\u3042\u308B\u3082\u306E\u3092\u9AD8\u30EA\u30B9\u30AF \u2192 \u4E2D\u30EA\u30B9\u30AF\u306E\u9806\u306B1\u30BF\u30B9\u30AF1\u884C\u3067\u4E26\u3079\u307E\u3059\u3002\nrisks \u306F\u30EA\u30B9\u30AF\u306E\u5185\u5BB9\uFF08\u4F8B: 38\u65E5\u8D85\u904E / 22\u65E5\u9593\u672A\u66F4\u65B0\uFF09\u3001types \u306F\u305D\u306E\u7A2E\u5225\uFF08overdue / stale \u7B49\uFF09\u3067\u3059\u3002\n\u5224\u5B9A\u306F\u30B5\u30FC\u30D0\u306E\u307E\u307E\u3067\u3001CLI \u306F\u518D\
|
|
66
|
+
\u8A08\u7B97\u3057\u307E\u305B\u3093\u3002",flags:[],prepare:(input,ctx)=>projectArg(input,ctx,RISK_USAGE),plan:input=>({method:"GET",path:projectPath(input,"risk-analysis")}),summarize:body=>riskRows(body),raw:body=>{riskRows(body);return riskData(body)},notes:body=>{const data=riskData(body);const summary=recordOf(data["summary"]);return[`\u672A\u5B8C\u4E86 ${String(summary["total_incomplete"]??"-")} \u4EF6 / \u9AD8\u30EA\u30B9\u30AF ${String(summary["high_risk_count"]??"-")} \u4EF6 / \u4E2D\u30EA\u30B9\u30AF ${String(
|
|
67
|
+
summary["medium_risk_count"]??"-")} \u4EF6\uFF08\u5206\u6790: ${String(data["analyzed_at"]??"-")}\uFF09`]}};var PROFIT_USAGE="twp project profit [<ID|\u30B3\u30FC\u30C9>] [--month <YYYY-MM> | --from <YYYY-MM> --to <YYYY-MM>]";function profitData(body){const data=dataOf(body,"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u53CE\u652F\u5206\u6790");if(!isRecord(data)||!isRecord(data["monthly"])){throw new ApiResponseError("\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u53CE\u652F\u5206\u6790\u306E\u5FDC\u7B54\u306B monthly \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}
|
|
68
|
+
return data}function numberAt(record,...path){let value=record;for(const key of path)value=isRecord(value)?value[key]:void 0;return value??null}function profitRows(body){const monthly=profitData(body)["monthly"];return Object.keys(monthly).sort().map(ym=>{const m=monthly[ym];return{year_month:ym,revenue_estimate:numberAt(m,"revenue","total"),revenue_invoice:numberAt(m,"revenue","invoice","total"),revenue_manual:numberAt(m,"revenue","manual","total"),labor_cost_plan:numberAt(m,"labor_cost","assig\
|
|
69
|
+
nment_plan"),labor_cost_actual:numberAt(m,"labor_cost","actual"),procurement_cost:numberAt(m,"procurement_cost","total"),landing_revenue:numberAt(m,"landing","revenue"),landing_cost:numberAt(m,"landing","cost"),landing_profit:numberAt(m,"landing","profit"),landing_profit_rate:numberAt(m,"landing","profit_rate")}})}var profitOperation={name:"profit",summary:"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u53CE\u652F\u5206\u6790\uFF08\u6708\u3054\u3068\u306E\u58F2\u4E0A\u30FB\u539F\u4FA1\u30FB\u7740\u5730\u5229\u76CA\uFF09\u3092\u8868\u793A\u3059\u308B\uFF08\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u7BA1\u7406\u8005\uFF09",
|
|
70
|
+
usage:PROFIT_USAGE,description:"\u753B\u9762\u306E\u300C\u53CE\u652F\u5206\u6790\u300D\u3068\u540C\u3058 GET /api/v2/projects/{id}/profit-analysis \u3067\u3059\u3002\u7701\u7565\u3059\u308B\u3068\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306F\u65E2\u5B9A\u3067\u3059\u3002\n\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u7BA1\u7406\u8005\uFF08manager\uFF09\u3068\u30C6\u30CA\u30F3\u30C8\u7BA1\u7406\u8005\u3060\u3051\u304C\u8AAD\u3081\u307E\u3059\u3002\n\u671F\u9593\u3092\u6307\u5B9A\u3057\u306A\u3051\u308C\u3070\u5F53\u6708\uFF08\u3053\u306E\u7AEF\u672B\u306E\u6642\u8A08\uFF09\u3067\u3059\u3002\u753B\u9762\u306F\u4F1A\u8A08\u5E74\u5EA6\u3067\u958B\u304F\u306E\u3067\u3001\u5E74\u5EA6\u3067\u898B\u308B\u306A\u3089 --from / --to \u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002\n\u58F2\u4E0A\u306F\u753B\u9762\u306E\u65E2\u5B9A\u3068\u540C\u3058\u78BA\u5EA6\uFF08\u78BA\u5B9A\u30FBA\uFF09\u3067\u96C6\u8A08\u3055\u308C\u307E\u3059\u3002\n--output table / text / tsv \u306F\u6708\u3054\u3068\u306B1\u884C\u3067\u3001\u5217\u306F\u753B\u9762\u306E\u6708\u5225\u8868\u3068\u540C\u3058\u3067\u3059\uFF08revenue_estimate\uFF1D\u898B\u7A4D\u58F2\u4E0A\u30FBrevenue_invoice\uFF1D\u8ACB\u6C42\u30FB\nrevenue_manual\uFF1D\u624B\u5165\u529B\u30FBlabor_cost_plan / actual\uFF1D\u4EBA\u4EF6\u8CBB\u306E\u8A08\u753B\u3068\u5B9F\u7E3E\u30FBprocurement_cost\uFF1D\u8ABF\u9054\u8CBB\u30FBlanding_*\uFF1D\u7740\u5730\uFF09\u3002\n\u898B\u7A4D\u306E\u5185\u8A33\u30FB\u30E6\u30FC\u30B6\u30FC\u5225\u306E\u7A3C\u50CD\uFF08actual_by_user\uFF09\u306F --output json \u304B --query \u3067\u8AAD\u3081\u307E\u3059\u3002\u5024\u306F\u30B5\u30FC\u30D0\u306E\u96C6\u8A08\u306E\u307E\u307E\u3067\u3059\u3002",
|
|
71
|
+
flags:[MONTH_FLAG,FROM_FLAG,TO_FLAG],forbidden:managerOnly("\u53CE\u652F\u5206\u6790"),async prepare(input,ctx){monthRange(input,PROFIT_USAGE);return projectArg(input,ctx,PROFIT_USAGE)},plan(input){const range=monthRange(input,PROFIT_USAGE);return{method:"GET",path:projectPath(input,"profit-analysis"),query:{start_ym:range.from,end_ym:range.to}}},plannedNotes:input=>rangeNotes(monthRange(input,PROFIT_USAGE)),summarize:body=>profitRows(body),raw:body=>profitData(body),notes:body=>{const data=profitData(
|
|
72
|
+
body);const s=recordOf(data["summary"]);const period=recordOf(data["period"]);return[`\u671F\u9593: ${String(period["start_ym"]??"-")} \u301C ${String(period["end_ym"]??"-")}`,`\u5408\u8A08: \u58F2\u4E0A ${String(s["total_revenue"]??"-")} / \u4EBA\u4EF6\u8CBB ${String(s["total_labor_cost"]??"-")} / \u8ABF\u9054\u8CBB ${String(s["total_procurement_cost"]??"-")} / \u539F\u4FA1 ${String(s["total_cost"]??"-")} / \u7C97\u5229 ${String(s["gross_profit"]??"-")}\uFF08${String(s["gross_profit_rate"]??"-")}\
|
|
73
|
+
%\uFF09`]}};var PROCESS_LIST_LIMIT=1e3;function processCreateForbidden(body){return body?.error==="forbidden"&&(body.error_description??"").includes("\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u7BA1\u7406\u8005")?"\u5DE5\u7A0B\u3092\u767B\u9332\u3067\u304D\u308B\u306E\u306F\u3001\u3053\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u7BA1\u7406\u8005\uFF08manager\uFF09\u3068\u30C6\u30CA\u30F3\u30C8\u7BA1\u7406\u8005\u3060\u3051\u3067\u3059\uFF08\u30B5\u30FC\u30D0\u306E\u6587\u9762\u306F\u5171\u901A\u306E\u3082\u306E\u3067\u3059\uFF09\u3002":
|
|
74
|
+
void 0}var PROCESS_COLUMNS=["id","process_id","process_code","process_name","sort_order","status","description","updated_at"];var PROCESS_LIST_USAGE="twp project process list [<ID|\u30B3\u30FC\u30C9>] [--status active|inactive]";var PROCESS_CREATE_USAGE="twp project process create [<ID|\u30B3\u30FC\u30C9>] --process <\u5DE5\u7A0B\u30DE\u30B9\u30BF\u306E\u540D\u524D|\u30B3\u30FC\u30C9|ID> [--description <\u8AAC\u660E>] [--sort-order <0\u301C9999>] [--status active|inactive]";var STATUS_FLAG={name:"\
|
|
75
|
+
--status",summary:"\u72B6\u614B\uFF08active\uFF1D\u6709\u52B9 / inactive\uFF1D\u7121\u52B9\uFF09",takesValue:true,placeholder:"<active|inactive>"};var PROCESS_FLAG={name:"--process",summary:"\u5DE5\u7A0B\u30DE\u30B9\u30BF\uFF08\u540D\u524D\u30FB\u30B3\u30FC\u30C9\u30FBID\uFF09",takesValue:true,placeholder:"<\u5DE5\u7A0B\u30DE\u30B9\u30BF>"};var DESCRIPTION_FLAG={name:"--description",summary:"\u8AAC\u660E\uFF081000\u6587\u5B57\u307E\u3067\uFF09",takesValue:true,placeholder:"<\u8AAC\u660E>"};var SORT_ORDER_FLAG={
|
|
76
|
+
name:"--sort-order",summary:"\u4E26\u3073\u9806\uFF080\u301C9999\u30FB\u65E2\u5B9A 0\uFF09",takesValue:true,placeholder:"<\u6570>"};function processStatus(input,usage){const raw=input.flags.get(STATUS_FLAG.name)?.trim();if(raw===void 0)return void 0;if(raw!=="active"&&raw!=="inactive"){throw new UsageError(`--status \u306F active \u304B inactive \u3067\u3059\uFF08\u53D7\u3051\u53D6\u3063\u305F\u5024: ${raw}\uFF09`,usage)}return raw}function sortOrder(input){const raw=input.flags.get(SORT_ORDER_FLAG.
|
|
77
|
+
name);if(raw===void 0)return void 0;const value=raw.trim();if(!/^\d+$/.test(value)||Number(value)>9999){throw new UsageError(`--sort-order \u306F 0\u301C9999 \u306E\u6574\u6570\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u53D7\u3051\u53D6\u3063\u305F\u5024: ${raw}\uFF09`,PROCESS_CREATE_USAGE)}return Number(value)}function createBody(input){const description=nonEmpty(input.flags,DESCRIPTION_FLAG.name);const length=description===void 0?0:[...description].length;if(length>1e3){throw new UsageError(
|
|
78
|
+
`--description \u306F1000\u6587\u5B57\u307E\u3067\u3067\u3059\uFF08${String(length)}\u6587\u5B57\uFF09`,PROCESS_CREATE_USAGE)}return{process_id:requireResolved(input,"processId"),sort_order:sortOrder(input),status:processStatus(input,PROCESS_CREATE_USAGE),description}}function processRows(body){return listIn(body,"list","\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u5DE5\u7A0B")}function processItem(body){const process=isRecord(body)?body["process"]:void 0;if(!isRecord(body)||body["result"]!==true||
|
|
79
|
+
!isRecord(process)){throw new ApiResponseError("\u5DE5\u7A0B\u306E\u4F5C\u6210\u306E\u5FDC\u7B54\u306B process \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}return process}async function processMasterNames(ctx){try{const rows=await ctx.resolver.processMasters();return JSON.stringify(Object.fromEntries(rows.map(row=>[row.id,{name:row.name,code:row.code??null}])))}catch{return"{}"}}function withProcessNames(body,input){const raw=input.
|
|
80
|
+
resolved?.["processMasterNames"];if(raw===void 0||!isRecord(body)||!Array.isArray(body["list"]))return body;const names=JSON.parse(raw);return{...body,list:body["list"].map(row=>{if(!isRecord(row))return row;const hit=typeof row["process_id"]==="string"?names[row["process_id"]]:void 0;if(hit===void 0)return row;return{...row,process_name:row["process_name"]??hit.name,process_code:row["process_code"]??hit.code}})}}var projectProcessResource={name:"process",summary:"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u5DE5\u7A0B\uFF08\u4E00\u89A7\u30FB\u767B\u9332\uFF09",
|
|
81
|
+
operations:[{name:"list",summary:"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u5DE5\u7A0B\u3092\u8868\u793A\u3059\u308B",usage:PROCESS_LIST_USAGE,description:"GET /api/v2/projects/{id}/processes\u3002\u7701\u7565\u3059\u308B\u3068\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306F\u65E2\u5B9A\u3067\u3059\u3002\nprocess_id \u306F\u5DE5\u7A0B\u30DE\u30B9\u30BF\uFF08\u753B\u9762\u306E\u300C\u30DE\u30B9\u30BF\u8A2D\u5B9A > \u5DE5\u7A0B\u300D\uFF09\u306E ID \u3067\u3059\u3002\u30B5\u30FC\u30D0\u306E\u4E00\u89A7\u306F\u5DE5\u7A0B\u30DE\u30B9\u30BF\u306E\u540D\u524D\u30FB\u30B3\u30FC\u30C9\u3092\u8FD4\u3055\u306A\u3044\u305F\u3081\u3001\nprocess_name / process_code \u306F\u5DE5\u7A0B\u30DE\u30B9\u30BF\u3092\u5F15\u3044\u3066\u88DC\u3044\u307E\u3059\uFF08\u5DE5\u7A0B\u30DE\u30B9\u30BF\u3092\u5F15\u3051\u306A\u304B\u3063\u305F\u3068\u304D\u306F\u7A7A\u306E\u307E\u307E\uFF09\u3002",
|
|
82
|
+
flags:[STATUS_FLAG],async prepare(input,ctx){processStatus(input,PROCESS_LIST_USAGE);const withProject=await projectArg(input,ctx,PROCESS_LIST_USAGE);return withResolved(withProject,{processMasterNames:await processMasterNames(ctx)})},plan:input=>({method:"GET",path:projectPath(input,"processes"),query:{status:processStatus(input,PROCESS_LIST_USAGE),limit:PROCESS_LIST_LIMIT}}),narrow:(body,input)=>withProcessNames(body,input),summarize:body=>processRows(body).map(row=>pick(row,PROCESS_COLUMNS)),
|
|
83
|
+
raw:body=>processRows(body),notes:body=>{const count=isRecord(body)?body["count"]:void 0;const shown=processRows(body).length;return typeof count==="number"&&count>shown?[`\u5DE5\u7A0B\u306F ${String(count)} \u4EF6\u3042\u308A\u307E\u3059\u304C\u3001${String(shown)} \u4EF6\u3060\u3051\u3092\u8868\u793A\u3057\u3066\u3044\u307E\u3059\uFF08\u30B5\u30FC\u30D0\u306E\u4E0A\u9650\uFF09\u3002`]:[]}},{name:"create",summary:"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306B\u5DE5\u7A0B\u3092\u767B\u9332\u3059\u308B\uFF08\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u7BA1\u7406\u8005\uFF09",
|
|
84
|
+
usage:PROCESS_CREATE_USAGE,description:"POST /api/v2/projects/{id}/processes\u3002\u7701\u7565\u3059\u308B\u3068\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306F\u65E2\u5B9A\u3067\u3059\u3002\n--process \u3067\u5DE5\u7A0B\u30DE\u30B9\u30BF\u3092\u6307\u5B9A\u3057\u307E\u3059\uFF08\u540D\u524D\u30FB\u30B3\u30FC\u30C9\u30FBID\u3002\u5019\u88DC\u306F twp api /api/v2/project/processes \u3067\u78BA\u8A8D\u3067\u304D\u307E\u3059\uFF09\u3002\n\u767B\u9332\u3067\u304D\u308B\u306E\u306F\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u7BA1\u7406\u8005\u3068\u30C6\u30CA\u30F3\u30C8\u7BA1\u7406\u8005\u3067\u3059\u3002\u72B6\u614B\u306E\u65E2\u5B9A\u306F active\u3001\u4E26\u3073\u9806\u306E\u65E2\u5B9A\u306F 0 \u3067\u3059\uFF08\u30B5\u30FC\u30D0\u304C\u6C7A\u3081\u307E\u3059\uFF09\u3002\n\u4E26\u3073\u66FF\u3048\uFF08reorder\uFF09\u30FB\u66F4\u65B0\u30FB\u524A\u9664\u306F\u3053\u306E\u30B3\u30DE\u30F3\u30C9\u306B\u306F\u3042\u308A\u307E\u305B\u3093\u3002\n\u767B\u9332\u306E\u5FDC\u7B54\u306B\u306F\u5DE5\u7A0B\u30DE\u30B9\u30BF\u306E\u540D\u524D\u30FB\u30B3\u30FC\u30C9\u304C\u5165\u308A\u307E\u305B\u3093\uFF08process_id \u3060\u3051\u3002\u540D\u524D\u306F twp project process list \u3067\u78BA\u8A8D\u3067\u304D\u307E\u3059\u3002\u4E00\u89A7\u306F\u5DE5\u7A0B\u30DE\u30B9\u30BF\u3092\u5F15\u3044\u3066\u88DC\u3044\u307E\u3059\uFF09\u3002",
|
|
85
|
+
flags:[PROCESS_FLAG,DESCRIPTION_FLAG,SORT_ORDER_FLAG,STATUS_FLAG],forbidden:processCreateForbidden,async prepare(input,ctx){const process=nonEmpty(input.flags,PROCESS_FLAG.name);if(process===void 0)throw new UsageError("--process \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044",PROCESS_CREATE_USAGE);createBody(withResolved(input,{processId:"-"}));const withProject=await projectArg(input,ctx,PROCESS_CREATE_USAGE);return withResolved(withProject,{processId:(await ctx.resolver.processMaster(
|
|
86
|
+
process,PROCESS_FLAG.name)).id})},plan:input=>({method:"POST",path:projectPath(input,"processes"),body:createBody(input)}),summarize:body=>pick(processItem(body),PROCESS_COLUMNS),raw:body=>processItem(body)}]};var projectAnalysisOperations=[riskOperation,profitOperation];var LIST_COLUMNS=["id","code","name","status","effective_status"];var GET_COLUMNS=["id","code","name","status","effective_status","display_flg","closed_flg","task_enabled_flg","start_date","end_date","created_at","updated_at"];var MEMBER_COLUMNS2=["user_id","user_name","user_email","role","alias","department_name"];function memberItems(body){const list=isRecord(body)?body["list"]:void 0;if(!Array.isArray(list)){throw new ApiResponseError("\u30E1\u30F3\u30D0\u30FC\u4E00\u89A7\u306E\u5FDC\u7B54\u306B list \u914D\u5217\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}
|
|
62
87
|
return list}var listPaging=envelopePaging({label:"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u4E00\u89A7"});function listItems(body){return listPaging.items(body)}function projectObject(body){const project=isRecord(body)?body["project"]:void 0;if(!isRecord(project)){throw new ApiResponseError("\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u8A73\u7D30\u306E\u5FDC\u7B54\u306B project \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}return project}
|
|
63
|
-
var MANHOURS_USAGE="twp project manhours [<ID|\u30B3\u30FC\u30C9>] [--from <YYYY-MM-DD>] [--to <YYYY-MM-DD>]";var projectDomain={name:"project",summary:"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u4E00\u89A7\u30FB\u8A73\u7D30\u30FB\u30E1\u30F3\u30D0\u30FC\u306E\u30A2\u30B5\u30A4\u30F3",operations:[{name:"list",summary:"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3092\u4E00\u89A7\u3059\u308B",usage:"
|
|
64
|
-
description:"--output json \u306F API \u304C\u8FD4\u3059\u5168\u30D5\u30A3\u30FC\u30EB\u30C9\u3092\u51FA\u3057\u307E\u3059\u3002\n--output table / text / tsv \u306F\u8981\u7D04\u5217\uFF08id / code / name / status / effective_status\uFF09\u3067\u3059\u3002\n\u6B32\u3057\u3044\u5217\u3060\u3051\u3092\u6A5F\u68B0\u51E6\u7406\u3057\u305F\u3044\u3068\u304D\u306F --query \u3067\u9078\u3093\u3067\u304F\u3060\u3055\u3044\uFF08--query \u306F\u751F\u30C7\u30FC\u30BF\u306B\u5BFE\u3057\u3066\u8A55\u4FA1\u3055\u308C\u307E\u3059\uFF09\u3002\n\n"+
|
|
88
|
+
var MANHOURS_USAGE="twp project manhours [<ID|\u30B3\u30FC\u30C9>] [--from <YYYY-MM-DD>] [--to <YYYY-MM-DD>]";var projectDomain={name:"project",summary:"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u4E00\u89A7\u30FB\u8A73\u7D30\u30FB\u30E1\u30F3\u30D0\u30FC\u306E\u30A2\u30B5\u30A4\u30F3\u30FB\u5DE5\u6570\u30FB\u30EA\u30B9\u30AF\u5206\u6790\u30FB\u53CE\u652F\u5206\u6790\u30FB\u5DE5\u7A0B",operations:[{name:"list",summary:"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3092\u4E00\u89A7\u3059\u308B",usage:"tw\
|
|
89
|
+
p project list [--all] [--limit <\u4EF6\u6570>] [--cursor <\u30AB\u30FC\u30BD\u30EB>] [--keyword <\u8A9E>] [--status <\u72B6\u614B>]",description:"--output json \u306F API \u304C\u8FD4\u3059\u5168\u30D5\u30A3\u30FC\u30EB\u30C9\u3092\u51FA\u3057\u307E\u3059\u3002\n--output table / text / tsv \u306F\u8981\u7D04\u5217\uFF08id / code / name / status / effective_status\uFF09\u3067\u3059\u3002\n\u6B32\u3057\u3044\u5217\u3060\u3051\u3092\u6A5F\u68B0\u51E6\u7406\u3057\u305F\u3044\u3068\u304D\u306F --query \u3067\u9078\u3093\u3067\u304F\u3060\u3055\u3044\uFF08--query \u306F\u751F\u30C7\u30FC\u30BF\u306B\u5BFE\u3057\u3066\u8A55\u4FA1\u3055\u308C\u307E\u3059\uFF09\u3002\n\n"+
|
|
65
90
|
LIST_PAGING_HELP,flags:[...LIST_FLAGS,{name:"--keyword",summary:"\u30B3\u30FC\u30C9\u30FB\u540D\u79F0\u306E\u90E8\u5206\u4E00\u81F4\u3067\u7D5E\u308A\u8FBC\u3080",takesValue:true,placeholder:"<\u8A9E>"},{name:"--status",summary:"\u30B9\u30C6\u30FC\u30BF\u30B9\u3067\u7D5E\u308A\u8FBC\u3080\uFF08\u4F8B: active\uFF09",takesValue:true,placeholder:"<\u72B6\u614B>"}],paging:listPaging,plan(input){if(input.args.length>0){throw new UsageError(`list \u306F\u4F4D\u7F6E\u5F15\u6570\u3092\u53D6\u308A\u307E\u305B\u3093: ${input.
|
|
66
91
|
args.join(" ")}`,"twp project list help")}return{method:"GET",path:"/api/v2/projects",query:{limit:positiveInteger(input.flags,"--limit"),cursor:nonEmpty(input.flags,"--cursor"),keyword:nonEmpty(input.flags,"--keyword"),status:nonEmpty(input.flags,"--status")}}},summarize:body=>listItems(body).map(row=>pick(row,LIST_COLUMNS)),raw:body=>listItems(body)},{name:"get",summary:"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C81\u4EF6\u306E\u8A73\u7D30\u3092\u8868\u793A\u3059\u308B",usage:"twp project get <ID|\u30B3\u30FC\u30C9>",
|
|
67
92
|
description:'ID\uFF08UUID / ULID\uFF09\u306A\u3089\u305D\u306E\u307E\u307E\u3001\u305D\u308C\u4EE5\u5916\u306F\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u30B3\u30FC\u30C9\u3068\u3057\u3066\u89E3\u6C7A\u3057\u307E\u3059\uFF081\u5F80\u5FA9\uFF09\u3002\n\u30B3\u30FC\u30C9\u304C\u898B\u3064\u304B\u3089\u306A\u3044\u5834\u5408\u3001\u30B5\u30FC\u30D0\u306F\u300C\u5B58\u5728\u3057\u306A\u3044\u300D\u3068\u300C\u95B2\u89A7\u6A29\u9650\u304C\u7121\u3044\u300D\u3092\u610F\u56F3\u7684\u306B\u533A\u5225\u3057\u307E\u305B\u3093\u3002\n\u30B3\u30FC\u30C9\u304C literally "help" \u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3092\u5F15\u304F\u3068\u304D\u3060\u3051 `twp project get -- help` \u3068\u66F8\u304D\u307E\u3059\n\uFF08\u5148\u982D\u306E help \u306F\u30D8\u30EB\u30D7\u8981\u6C42\u3068\u3057\u3066\u89E3\u91C8\u3055\u308C\u308B\u305F\u3081\uFF09\u3002',
|
|
@@ -76,6 +101,6 @@ usage:MANHOURS_USAGE,description:"GET /api/v2/projects/{id}/manhours\u3002\u7701
|
|
|
76
101
|
MANHOUR_DESCRIPTION,flags:[MANHOUR_FROM_FLAG,MANHOUR_TO_FLAG],forbidden:body=>body?.error==="permission_denied"&&(body.error_description??"").includes("\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u7BA1\u7406\u8005")?"\u3053\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u5DE5\u6570\u3092\u8AAD\u3080\u6A29\u9650\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u7BA1\u7406\u8005\uFF08manager\uFF09\u304B\u30C6\u30CA\u30F3\u30C8\u7BA1\u7406\u8005\u3060\u3051\u304C\u8AAD\u3081\u307E\u3059\u3002":
|
|
77
102
|
void 0,prepare:(input,ctx)=>projectRefInput(input,ctx,"manhours"),plan(input){const projectId=requireResolved(input,"projectId");return{method:"GET",path:`/api/v2/projects/${encodeURIComponent(projectId)}/manhours`,query:manhourQuery(input,MANHOURS_USAGE)}},summarize:body=>manhourRows(body,"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u5DE5\u6570"),raw:body=>{manhourRows(body,"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u5DE5\u6570");return body},notes:body=>manhourNotes(body)},{name:"workload",summary:"\
|
|
78
103
|
\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u30E1\u30F3\u30D0\u30FC\u3054\u3068\u306E\u30BF\u30B9\u30AF\u4EF6\u6570\u30FB\u898B\u7A4D\u6642\u9593\u3092\u8868\u793A\u3059\u308B",usage:"twp project workload [<ID|\u30B3\u30FC\u30C9>]",description:"GET /api/v2/projects/{id}/analytics/workload\uFF08\u753B\u9762\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u5206\u6790\u306E\u300C\u30E1\u30F3\u30D0\u30FC\u5225\u8CA0\u8377\u300D\uFF09\u3002\n\u7701\u7565\u3059\u308B\u3068\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306F\u65E2\u5B9A\u3067\u3059\u3002\u672A\u5B8C\u4E86\u306E\u30BF\u30B9\u30AF\u304C\u5BFE\u8C61\u3067\u3001\u62C5\u5F53\u8005\u306E\u7121\u3044\u30BF\u30B9\u30AF\u306F\u300C\uFF08\u672A\u5272\u308A\u5F53\u3066\uFF09\u300D\u306E\u884C\u306B\u5165\u308A\u307E\u3059\u3002\n--output table / text / tsv \u306E by_status \u306F\u300C\u30B9\u30C6\u30FC\u30BF\u30B9\u540D:\u4EF6\u6570\u300D\u3092\u7A7A\u767D\u533A\u5207\u308A\u3067\u4E26\u3079\u305F\u3082\u306E\u3067\u3059\uFF08\u5185\u8A33\u306F --output json\uFF09\u3002",
|
|
79
|
-
flags:[],prepare:(input,ctx)=>projectRefInput(input,ctx,"workload"),plan(input){const projectId=requireResolved(input,"projectId");return{method:"GET",path:`/api/v2/projects/${encodeURIComponent(projectId)}/analytics/workload`}},summarize:body=>workloadDistributionRows(body),raw:body=>{workloadDistributionRows(body);return body},notes:body=>workloadDistributionNotes(body)}],subresources:[projectMemberResource]};var ASSIGNED_PROJECT_COLUMNS=["id",
|
|
80
|
-
"member_end_date"];function assignedProjectItems(body){const list=isRecord(body)?body["list"]:void 0;if(!Array.isArray(list)){throw new ApiResponseError("\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u4E00\u89A7\u306E\u5FDC\u7B54\u306B list \u914D\u5217\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}return list}async function projectRefInput(input,ctx,operation){const[ref,...rest]=input.
|
|
81
|
-
`${operation} \u304C\u53D7\u3051\u53D6\u308C\u308B\u5F15\u6570\u306F1\u3064\u3060\u3051\u3067\u3059: ${rest.join(" ")}`,`twp project ${operation} help`)}return withResolved(input,{projectId:await ctx.projectId(ref)})}export{projectDomain,ASSIGNED_PROJECT_COLUMNS,assignedProjectItems};
|
|
104
|
+
flags:[],prepare:(input,ctx)=>projectRefInput(input,ctx,"workload"),plan(input){const projectId=requireResolved(input,"projectId");return{method:"GET",path:`/api/v2/projects/${encodeURIComponent(projectId)}/analytics/workload`}},summarize:body=>workloadDistributionRows(body),raw:body=>{workloadDistributionRows(body);return body},notes:body=>workloadDistributionNotes(body)},...projectAnalysisOperations],subresources:[projectMemberResource,projectProcessResource]};var ASSIGNED_PROJECT_COLUMNS=["id",
|
|
105
|
+
"code","name","status","role","member_start_date","member_end_date"];function assignedProjectItems(body){const list=isRecord(body)?body["list"]:void 0;if(!Array.isArray(list)){throw new ApiResponseError("\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u4E00\u89A7\u306E\u5FDC\u7B54\u306B list \u914D\u5217\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}return list}async function projectRefInput(input,ctx,operation){const[ref,...rest]=input.
|
|
106
|
+
args;if(rest.length>0){throw new UsageError(`${operation} \u304C\u53D7\u3051\u53D6\u308C\u308B\u5F15\u6570\u306F1\u3064\u3060\u3051\u3067\u3059: ${rest.join(" ")}`,`twp project ${operation} help`)}return withResolved(input,{projectId:await ctx.projectId(ref)})}export{projectDomain,ASSIGNED_PROJECT_COLUMNS,assignedProjectItems};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{salesAdminForbidden}from"./chunk-
|
|
3
|
+
import{salesAdminForbidden}from"./chunk-AC6G5UPA.js";import{featureLicenseGuidance,licenseForbidden}from"./chunk-QYWYZG73.js";import{booleanText,boundedText}from"./chunk-XDHLO54T.js";import{SALES_ESTIMATE_FORMATS_PATH,SALES_ESTIMATE_NO_RULES_PATH,SALES_INVOICE_NO_RULES_PATH,SALES_PURCHASE_NO_RULES_PATH,SALES_ROUNDING_SETTING_PATH,isExactNumericId}from"./chunk-BS2ACFJA.js";import{repeatedValues}from"./chunk-F7K37QG6.js";import{LIST_PAGING_HELP,PAGE_NUMBER_LIST_FLAGS,
|
|
4
4
|
nonEmpty,pageNumberPaging,pageNumberQuery,pageRangeNotes}from"./chunk-IOGMOXYF.js";import{requireResolved,withResolved}from"./chunk-LXIAOCUW.js";import{acknowledgement,isRecord,pick}from"./chunk-VTQAI52S.js";import{ApiResponseError,UsageError}from"./chunk-UFND7FBC.js";var INT_MAX=2147483647;var MEMBER_FORBIDDEN=licenseForbidden(featureLicenseGuidance("\u8CA9\u58F2\u7BA1\u7406"));function envelope(body,what){if(!isRecord(body)||body["result"]!==true)throw new ApiResponseError(`${what}\u306E\u5FDC\u7B54\u306E\u5F62\u304C\u60F3\u5B9A\u3068\u9055\u3044\u307E\u3059\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`);return body}function recordOf(body,what){const data=envelope(body,what)["data"];if(!isRecord(data)||typeof data["id"]!==
|
|
5
5
|
"string")throw new ApiResponseError(`${what}\u306E\u5FDC\u7B54\u306B data.id \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`);return data}function serverMessage(body){const message=isRecord(body)?body["message"]:void 0;return typeof message==="string"&&message!==""?[message]:[]}function text(value){return typeof value==="string"||typeof value==="number"?String(value):""}function integerValue(flag,raw,min,max=INT_MAX){const trimmed=raw.
|
|
6
6
|
trim();const value=/^\d+$/.test(trimmed)?Number(trimmed):Number.NaN;if(!Number.isSafeInteger(value)||value<min||value>max)throw new UsageError(`${flag} \u306F ${min} \u4EE5\u4E0A ${max} \u4EE5\u4E0B\u306E\u6574\u6570\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044: ${raw}`);return value}var RULE_COLUMNS=["id","rule_name","prefix","digit_count","current_number","count_up_num","next_number","sort_order"];function nextNumber(rule,purchaseFormat){const current=rule["current_number"];const step=rule["\
|
|
@@ -1,32 +1,32 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{hoursMinutes}from"./chunk-
|
|
3
|
+
import{hoursMinutes}from"./chunk-QOUDJ7XO.js";import{dateFlag,monthFlag}from"./chunk-4B3T4UE7.js";import{repeatedValues}from"./chunk-F7K37QG6.js";import{requireResolved,withResolved}from"./chunk-LXIAOCUW.js";import{isRecord,pick}from"./chunk-VTQAI52S.js";import{ApiResponseError,UsageError}from"./chunk-UFND7FBC.js";var ANALYSIS_PATH="/api/v2/analysis";var ACCESSIBLE_PAGES_HINT="\u958B\u3051\u308B\u5206\u6790\u30DA\u30FC\u30B8\u306F twp api /api/v2/analysis/accessible-pages \u3067\u78BA\u8A8D\u3067\u304D\u307E\u3059\u3002";var LICENSE_GUIDANCE="\u5206\u6790\u3092\u4F7F\u3046\u6A29\u9650\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u30C6\u30CA\u30F3\u30C8\u304C\u5206\u6790\u3092\u5951\u7D04\u3057\u3066\u3044\u306A\u3044\u304B\u3001\u3042\u306A\u305F\u306E\u5206\u6790\u306E\u6A29\u9650\u304C\u300C\u306A\u3057\u300D\u306B\u306A\u3063\u3066\u3044\u307E\u3059\u3002\u30C6\u30CA\u30F3\u30C8\u7BA1\u7406\u8005\u306B\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002";
|
|
4
4
|
var PAGE_GUIDANCE=`\u3053\u306E\u5206\u6790\u30DA\u30FC\u30B8\u306E\u95B2\u89A7\u5BFE\u8C61\u306B\u542B\u307E\u308C\u3066\u3044\u307E\u305B\u3093\u3002\u5206\u6790\u306E\u7BA1\u7406\u8005\u306B\u5BFE\u8C61\u3078\u306E\u8FFD\u52A0\u3092\u4F9D\u983C\u3057\u3066\u304F\u3060\u3055\u3044\u3002${ACCESSIBLE_PAGES_HINT}`;var PAGE_DENIED_MARK="\u5206\u6790\u30DA\u30FC\u30B8";function analysisForbidden(levelGuidance2){return body=>{if(body?.error==="permission_denied"){const text=body.error_description??"";
|
|
5
5
|
if(text.includes(PAGE_DENIED_MARK))return PAGE_GUIDANCE;if(text.includes("\u3053\u306E\u6A5F\u80FD"))return LICENSE_GUIDANCE;return void 0}if(body?.error==="forbidden")return levelGuidance2;return void 0}}function levelGuidance(page,features){return`${page}\u3092\u958B\u304F\u6A29\u9650\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u5206\u6790\u62C5\u5F53\u8005\u30D5\u30E9\u30B0\u3001\u307E\u305F\u306F${features}\u306E\u6A29\u9650\uFF08\u300C\u306A\u3057\u300D\u4EE5\u5916\uFF09\u304C\u8981\u308A\u307E\u3059\u3002\u30C6\u30CA\u30F3\u30C8\u7BA1\u7406\u8005\u306B\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`}
|
|
6
6
|
var FROM_FLAG={name:"--from",summary:"\u958B\u59CB\u306E\u5E74\u6708\uFF08YYYY-MM\uFF09",takesValue:true,placeholder:"<YYYY-MM>"};var TO_FLAG={name:"--to",summary:"\u7D42\u4E86\u306E\u5E74\u6708\uFF08YYYY-MM\uFF09",takesValue:true,placeholder:"<YYYY-MM>"};var MONTH_FLAG={name:"--month",summary:"1\u304B\u6708\u3060\u3051\uFF08YYYY-MM\uFF09\u3002--from / --to \u3068\u306F\u4F75\u7528\u4E0D\u53EF",takesValue:true,placeholder:"<YYYY-MM>"};var YEAR_FLAG={name:"--year",summary:"1\u5E74\u5206\uFF081\u301C12\u6708\u30FBYYYY\uFF09\u3002--from \
|
|
7
7
|
/ --to / --month \u3068\u306F\u4F75\u7528\u4E0D\u53EF",takesValue:true,placeholder:"<YYYY>"};function currentMonth(now=new Date){return`${String(now.getFullYear())}-${String(now.getMonth()+1).padStart(2,"0")}`}function monthRange(input,usage){const from=monthFlag(input.flags,FROM_FLAG.name);const to=monthFlag(input.flags,TO_FLAG.name);const month=monthFlag(input.flags,MONTH_FLAG.name);if(month!==void 0){if(from!==void 0||to!==void 0){throw new UsageError("--month \u3068 --from / --to \u306F\u4F75\u7528\u3067\u304D\u307E\u305B\u3093",
|
|
8
8
|
usage)}return{from:month,to:month,defaulted:false}}if(from===void 0&&to===void 0){const now=currentMonth();return{from:now,to:now,defaulted:true}}if(from===void 0||to===void 0){throw new UsageError("--from \u3068 --to \u306F\u4E21\u65B9\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF081\u304B\u6708\u3060\u3051\u306A\u3089 --month\uFF09",usage)}if(from>to){throw new UsageError(`--from\uFF08${from}\uFF09\u304C --to\uFF08${to}\uFF09\u3088\u308A\u5F8C\u306B\u306A\u3063\u3066\u3044\u307E\u3059`,usage)}
|
|
9
|
-
return{from,to,defaulted:false}}function rangeNotes(range){return range.defaulted?[`\u671F\u9593\u306E\u6307\u5B9A\u304C\u7121\u3044\u306E\u3067\u5F53\u6708\uFF08${range.from}\u30FB\u3053\u306E\u7AEF\u672B\u306E\u6642\u8A08\uFF09\u3092\u96C6\u8A08\u3057\u307E\u3059\u3002\u5225\u306E\u6708\u306F --month / --from --to \u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002`]:[]}function
|
|
10
|
-
|
|
11
|
-
`${label}\u306E\u5FDC\u7B54\u306B
|
|
12
|
-
entry)&&typeof entry["year_month"]==="string")values.set(entry["year_month"],entry[field]??null)}}const out={};for(const month of months)out[month]=values.has(month)?
|
|
13
|
-
1;for(let n=0;index<=last&&n<120;index++,n++){months.push(`${String(Math.floor(index/12))}-${String(index%12+1).padStart(2,"0")}`)}return months}function responseMonths(body){
|
|
14
|
-
return[];const text=parts.map(([key,name])=>`${name} ${String(summary[key]??"-")}`).join(" / ");return[`${label}: ${text}`]}function periodNote(body){if(!isRecord(body))return[];
|
|
15
|
-
|
|
16
|
-
--
|
|
17
|
-
"project";if(raw!=="project"&&raw!=="user"){throw new UsageError(`--scope \u306F project \u304B user \u3067\u3059\uFF08\u53D7\u3051\u53D6\u3063\u305F\u5024: ${raw}\uFF09`,OPERATING_USAGE)}return raw}function checkOperatingFilters(input,scope){
|
|
18
|
-
join(" / ")} \u304C\u52B9\u304D\u307E\u305B\u3093\uFF08\u30B5\u30FC\u30D0\u304C\u7121\u8996\u3057\u307E\u3059\uFF09`,scope==="project"?"--user / --department \u306F --scope user \u3068\u4E00\u7DD2\u306B\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002":
|
|
19
|
-
OPERATING_USAGE);return{query:{start_ym:range.from,end_ym:range.to},range}}if([FROM_FLAG,TO_FLAG,MONTH_FLAG].some(flag=>input.flags.has(flag.name))){throw new UsageError("--year \u3068 --month / --from / --to \u306F\u4F75\u7528\u3067\u304D\u307E\u305B\u3093",
|
|
20
|
-
\uFF09`,OPERATING_USAGE)}return{query:{year:value},range:null}}async function resolveFilters(input,ctx){const resolved={};const project=input.flags.get(PROJECT_FILTER_FLAG.name);const user=input.flags.get(USER_FLAG.
|
|
21
|
-
resolver.department(department,DEPARTMENT_FLAG.name)).id;return withResolved(input,resolved)}function resolvedOrUndefined(input,key){return input.resolved?.[key]}var operatingHoursList={name:"list",summary:"\u7A3C\u50CD\u5206\u6790\
|
|
22
|
-
\u592724\u304B\u6708\uFF08\u30B5\u30FC\u30D0\u304C\u691C\u67FB\u3057\u307E\u3059\uFF09\u3002\n--scope project\uFF08\u65E2\u5B9A\uFF09\u306F --project \u3060\u3051\u3001--scope user \u306F --user / --department \u3060\u3051\u3067\u7D5E\u308A\u8FBC\u3081\u307E\u3059\u3002\n--output table / text / tsv \u306F\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\uFF08\u307E\u305F\u306F\u30E6\u30FC\u30B6\u30FC\uFF09\u3054\u3068\u306B1\u884C\u3067\u3001\u6708\u3054\u3068\u306E\u6642\u9593\u3092 YYYY-MM \u5217\u306B\u4E26\u3079\u307E\u3059\u3002\n\u30E1\u30F3\u30D0\u30FC\u5225\uFF08by_user\uFF09\u30FB\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u5225\uFF08by_project\uFF09\u30FB\u4E88\u6E2C\u306E\u6839\u62E0\uFF08forecast_basis\uFF09\
|
|
23
|
-
flags:[SCOPE_FLAG,MONTH_FLAG,FROM_FLAG,TO_FLAG,YEAR_FLAG,PROJECT_FILTER_FLAG,USER_FLAG,DEPARTMENT_FLAG],forbidden:analysisForbidden(levelGuidance("\u7A3C\u50CD\u5206\u6790","\u52E4\u6020\u3068\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u4E21\u65B9")),async prepare(input,ctx){noArgs(input,
|
|
24
|
-
input);checkOperatingFilters(input,scope);const{query}=operatingPeriod(input);return{method:"GET",path:`${ANALYSIS_PATH}/operating-hours`,query:{scope,...query,project_id:resolvedOrUndefined(input,"projectId"),user_id:resolvedOrUndefined(input,"userId"),department_id:resolvedOrUndefined(
|
|
25
|
-
const scope=isRecord(body)?body["scope"]:void 0;return[...periodNote(body),...scope==="user"?summaryNote(body,"\u5408\u8A08",[["total_hours","\u7A3C\u50CD"],["total_overtime_hours","\u6B8B\u696D"],["user_count","\u4EBA\u6570"]]):summaryNote(body,"\u5408\u8A08",[["total_hours","\u7A3C\u50CD"],
|
|
26
|
-
body,"projects","\u7A3C\u50CD\u5206\u6790").map(row=>({project_code:row["project_code"]??null,project_name:row["project_name"]??null,...monthColumns(row,"hours",months),total_hours:row["total_hours"]??null,members:Array.isArray(row["by_user"])?row["by_user"].length:null,project_id:row["
|
|
27
|
-
row,"hours",months),total_hours:row["total_hours"]??null,total_standard_hours:row["total_standard_hours"]??null,total_overtime_hours:row["total_overtime_hours"]??null,forecast_hours:row["forecast_hours"]??null,forecast_deviation_hours:row["forecast_deviation_hours"]??null,user_id:row["
|
|
28
|
-
var PROJECT_ASSIGNMENT_USAGE="twp analysis project-assignment list [--month <YYYY-MM> | --from <YYYY-MM> --to <YYYY-MM>] [--project <\u30B3\u30FC\u30C9>]";var projectAssignmentList={name:"list",summary:"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u30A2\u30B5\u30A4\u30F3\uFF08\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3054\u3068\u306E\
|
|
29
|
-
|
|
9
|
+
return{from,to,defaulted:false}}function rangeNotes(range){return range.defaulted?[`\u671F\u9593\u306E\u6307\u5B9A\u304C\u7121\u3044\u306E\u3067\u5F53\u6708\uFF08${range.from}\u30FB\u3053\u306E\u7AEF\u672B\u306E\u6642\u8A08\uFF09\u3092\u96C6\u8A08\u3057\u307E\u3059\u3002\u5225\u306E\u6708\u306F --month / --from --to \u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002`]:[]}function kpiMonthNotes(range){return range.defaulted?[`\u6708\u306E\u6307\u5B9A\u304C\u7121\u3044\u306E\u3067\u5F53\u6708\uFF08${range.
|
|
10
|
+
from}\u30FB\u3053\u306E\u7AEF\u672B\u306E\u6642\u8A08\uFF09\u3092\u96C6\u8A08\u3057\u307E\u3059\u3002\u5225\u306E\u6708\u306F --month \u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002`]:[]}function noArgs(input,usage){if(input.args.length>0){throw new UsageError(`\u4F4D\u7F6E\u5F15\u6570\u306F\u53D7\u3051\u53D6\u308A\u307E\u305B\u3093: ${input.args.join(" ")}`,usage)}}function listIn(body,key,label){const list=isRecord(body)?body[key]:void 0;if(!isRecord(body)||body["result"]!==true||
|
|
11
|
+
!Array.isArray(list)){throw new ApiResponseError(`${label}\u306E\u5FDC\u7B54\u306B ${key} \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}return list.map(row=>isRecord(row)?row:{})}function dataOf(body,label){if(!isRecord(body)||body["result"]!==true||!("data"in body)){throw new ApiResponseError(`${label}\u306E\u5FDC\u7B54\u306B data \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}
|
|
12
|
+
return body["data"]}function dataList(body,key,label){return listIn({result:true,[key]:dataOf(body,label)?.[key]},key,label)}function recordOf(value){return isRecord(value)?value:{}}function monthColumns(row,field,months){const values=new Map;const entries=row["by_month"];if(Array.isArray(entries)){for(const entry of entries){if(isRecord(entry)&&typeof entry["year_month"]==="string")values.set(entry["year_month"],entry[field]??null)}}const out={};for(const month of months)out[month]=values.has(month)?
|
|
13
|
+
values.get(month):null;return out}function monthsBetween(from,to){const pattern=/^(\d{4})-(\d{2})$/;const a=typeof from==="string"?pattern.exec(from):null;const b=typeof to==="string"?pattern.exec(to):null;if(a===null||b===null)return[];const months=[];let index=Number(a[1])*12+Number(a[2])-1;const last=Number(b[1])*12+Number(b[2])-1;for(let n=0;index<=last&&n<120;index++,n++){months.push(`${String(Math.floor(index/12))}-${String(index%12+1).padStart(2,"0")}`)}return months}function responseMonths(body){
|
|
14
|
+
if(!isRecord(body))return[];const listed=body["year_months"];if(Array.isArray(listed)&&listed.every(m=>typeof m==="string"))return listed;return monthsBetween(body["start_ym"],body["end_ym"])}function summaryNote(body,label,parts){const summary=isRecord(body)&&isRecord(body["summary"])?body["summary"]:null;if(summary===null)return[];const text=parts.map(([key,name])=>`${name} ${String(summary[key]??"-")}`).join(" / ");return[`${label}: ${text}`]}function periodNote(body){if(!isRecord(body))return[];
|
|
15
|
+
const from=body["start_ym"];const to=body["end_ym"];return typeof from==="string"&&typeof to==="string"?[`\u671F\u9593: ${from} \u301C ${to}`]:[]}var SCOPE_FLAG={name:"--scope",summary:"\u96C6\u8A08\u306E\u8EF8\uFF08project\uFF1D\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u5225\u30FB\u65E2\u5B9A / user\uFF1D\u30E6\u30FC\u30B6\u30FC\u5225\uFF09",takesValue:true,placeholder:"<project|user>"};var PROJECT_FILTER_FLAG={name:"--project",summary:"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3067\u7D5E\u308A\u8FBC\u3080\uFF08\u30B3\u30FC\u30C9\u30FBID\uFF09",
|
|
16
|
+
takesValue:true,placeholder:"<\u30B3\u30FC\u30C9|ID>"};var USER_FLAG={name:"--user",summary:"\u30E6\u30FC\u30B6\u30FC\u3067\u7D5E\u308A\u8FBC\u3080\uFF08\u6C0F\u540D\u30FB\u30E1\u30FC\u30EB\u30FBID\u30FBme\uFF09",takesValue:true,placeholder:"<\u30E6\u30FC\u30B6\u30FC>"};var DEPARTMENT_FLAG={name:"--department",summary:"\u90E8\u7F72\u3067\u7D5E\u308A\u8FBC\u3080\uFF08\u540D\u524D\u30FB\u30B3\u30FC\u30C9\u30FBID\uFF09",takesValue:true,placeholder:"<\u90E8\u7F72>"};var OPERATING_USAGE="twp analysis\
|
|
17
|
+
operating-hours list [--scope project|user] [--month <YYYY-MM> | --from <YYYY-MM> --to <YYYY-MM> | --year <YYYY>] [--project <\u30B3\u30FC\u30C9>] [--user <\u30E6\u30FC\u30B6\u30FC>] [--department <\u90E8\u7F72>]";function operatingScope(input){const raw=input.flags.get(SCOPE_FLAG.name)?.trim()??"project";if(raw!=="project"&&raw!=="user"){throw new UsageError(`--scope \u306F project \u304B user \u3067\u3059\uFF08\u53D7\u3051\u53D6\u3063\u305F\u5024: ${raw}\uFF09`,OPERATING_USAGE)}return raw}function checkOperatingFilters(input,scope){
|
|
18
|
+
const misplaced=scope==="project"?[USER_FLAG.name,DEPARTMENT_FLAG.name].filter(name=>input.flags.has(name)):[PROJECT_FILTER_FLAG.name].filter(name=>input.flags.has(name));if(misplaced.length>0){throw new UsageError(`--scope ${scope} \u3067\u306F ${misplaced.join(" / ")} \u304C\u52B9\u304D\u307E\u305B\u3093\uFF08\u30B5\u30FC\u30D0\u304C\u7121\u8996\u3057\u307E\u3059\uFF09`,scope==="project"?"--user / --department \u306F --scope user \u3068\u4E00\u7DD2\u306B\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002":
|
|
19
|
+
"--project \u306F --scope project\uFF08\u65E2\u5B9A\uFF09\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}}function operatingPeriod(input){const year=input.flags.get(YEAR_FLAG.name);if(year===void 0){const range=monthRange(input,OPERATING_USAGE);return{query:{start_ym:range.from,end_ym:range.to},range}}if([FROM_FLAG,TO_FLAG,MONTH_FLAG].some(flag=>input.flags.has(flag.name))){throw new UsageError("--year \u3068 --month / --from / --to \u306F\u4F75\u7528\u3067\u304D\u307E\u305B\u3093",
|
|
20
|
+
OPERATING_USAGE)}const value=year.trim();if(!/^\d{4}$/.test(value)||Number(value)<2e3||Number(value)>2100){throw new UsageError(`--year \u306F 2000\u301C2100 \u306E\u897F\u66A64\u6841\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u53D7\u3051\u53D6\u3063\u305F\u5024: ${year}\uFF09`,OPERATING_USAGE)}return{query:{year:value},range:null}}async function resolveFilters(input,ctx){const resolved={};const project=input.flags.get(PROJECT_FILTER_FLAG.name);const user=input.flags.get(USER_FLAG.
|
|
21
|
+
name);const department=input.flags.get(DEPARTMENT_FLAG.name);if(project!==void 0)resolved["projectId"]=(await ctx.resolver.project(project)).id;if(user!==void 0)resolved["userId"]=(await ctx.resolver.user(user,USER_FLAG.name)).id;if(department!==void 0)resolved["departmentId"]=(await ctx.resolver.department(department,DEPARTMENT_FLAG.name)).id;return withResolved(input,resolved)}function resolvedOrUndefined(input,key){return input.resolved?.[key]}var operatingHoursList={name:"list",summary:"\u7A3C\u50CD\u5206\u6790\
|
|
22
|
+
\uFF08\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u5225\u30FB\u30E6\u30FC\u30B6\u30FC\u5225\u306E\u7A3C\u50CD\u6642\u9593\uFF09\u3092\u8868\u793A\u3059\u308B",usage:OPERATING_USAGE,description:"\u753B\u9762\u306E\u300C\u7A3C\u50CD\u5206\u6790\u300D\u3068\u540C\u3058 GET /api/v2/analysis/operating-hours \u3067\u3059\u3002\n\u671F\u9593\u3092\u6307\u5B9A\u3057\u306A\u3051\u308C\u3070\u5F53\u6708\uFF08\u3053\u306E\u7AEF\u672B\u306E\u6642\u8A08\uFF09\u3067\u3059\u3002\u671F\u9593\u306F\u6700\u592724\u304B\u6708\uFF08\u30B5\u30FC\u30D0\u304C\u691C\u67FB\u3057\u307E\u3059\uFF09\u3002\n--scope project\uFF08\u65E2\u5B9A\uFF09\u306F --project \u3060\u3051\u3001--scope user \u306F --user / --department \u3060\u3051\u3067\u7D5E\u308A\u8FBC\u3081\u307E\u3059\u3002\n--output table / text / tsv \u306F\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\uFF08\u307E\u305F\u306F\u30E6\u30FC\u30B6\u30FC\uFF09\u3054\u3068\u306B1\u884C\u3067\u3001\u6708\u3054\u3068\u306E\u6642\u9593\u3092 YYYY-MM \u5217\u306B\u4E26\u3079\u307E\u3059\u3002\n\u30E1\u30F3\u30D0\u30FC\u5225\uFF08by_user\uFF09\u30FB\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u5225\uFF08by_project\uFF09\u30FB\u4E88\u6E2C\u306E\u6839\u62E0\uFF08forecast_basis\uFF09\
|
|
23
|
+
\u306F --output json \u304B --query \u3067\u8AAD\u3081\u307E\u3059\u3002\n\u5024\u306F\u30B5\u30FC\u30D0\u306E\u96C6\u8A08\u306E\u307E\u307E\u3067\u3001CLI \u306F\u518D\u8A08\u7B97\u3057\u307E\u305B\u3093\u3002",flags:[SCOPE_FLAG,MONTH_FLAG,FROM_FLAG,TO_FLAG,YEAR_FLAG,PROJECT_FILTER_FLAG,USER_FLAG,DEPARTMENT_FLAG],forbidden:analysisForbidden(levelGuidance("\u7A3C\u50CD\u5206\u6790","\u52E4\u6020\u3068\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u4E21\u65B9")),async prepare(input,ctx){noArgs(input,
|
|
24
|
+
OPERATING_USAGE);const scope=operatingScope(input);checkOperatingFilters(input,scope);operatingPeriod(input);return resolveFilters(input,ctx)},plan(input){noArgs(input,OPERATING_USAGE);const scope=operatingScope(input);checkOperatingFilters(input,scope);const{query}=operatingPeriod(input);return{method:"GET",path:`${ANALYSIS_PATH}/operating-hours`,query:{scope,...query,project_id:resolvedOrUndefined(input,"projectId"),user_id:resolvedOrUndefined(input,"userId"),department_id:resolvedOrUndefined(
|
|
25
|
+
input,"departmentId")}}},plannedNotes:input=>{const{range}=operatingPeriod(input);return range===null?[]:rangeNotes(range)},summarize:body=>operatingRows(body),raw:body=>{operatingRows(body);return body},notes:body=>{const scope=isRecord(body)?body["scope"]:void 0;return[...periodNote(body),...scope==="user"?summaryNote(body,"\u5408\u8A08",[["total_hours","\u7A3C\u50CD"],["total_overtime_hours","\u6B8B\u696D"],["user_count","\u4EBA\u6570"]]):summaryNote(body,"\u5408\u8A08",[["total_hours","\u7A3C\u50CD"],
|
|
26
|
+
["project_count","\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u6570"]])]}};function operatingRows(body){const scope=isRecord(body)?body["scope"]:void 0;const months=responseMonths(body);if(scope==="project"){return listIn(body,"projects","\u7A3C\u50CD\u5206\u6790").map(row=>({project_code:row["project_code"]??null,project_name:row["project_name"]??null,...monthColumns(row,"hours",months),total_hours:row["total_hours"]??null,members:Array.isArray(row["by_user"])?row["by_user"].length:null,project_id:row["\
|
|
27
|
+
project_id"]??null}))}if(scope==="user"){return listIn(body,"users","\u7A3C\u50CD\u5206\u6790").map(row=>({department_name:row["department_name"]??null,user_name:row["user_name"]??null,email:row["email"]??null,...monthColumns(row,"hours",months),total_hours:row["total_hours"]??null,total_standard_hours:row["total_standard_hours"]??null,total_overtime_hours:row["total_overtime_hours"]??null,forecast_hours:row["forecast_hours"]??null,forecast_deviation_hours:row["forecast_deviation_hours"]??null,user_id:row["\
|
|
28
|
+
user_id"]??null}))}throw new ApiResponseError("\u7A3C\u50CD\u5206\u6790\u306E\u5FDC\u7B54\u306E scope \u304C project / user \u306E\u3069\u3061\u3089\u3067\u3082\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}var PROJECT_ASSIGNMENT_USAGE="twp analysis project-assignment list [--month <YYYY-MM> | --from <YYYY-MM> --to <YYYY-MM>] [--project <\u30B3\u30FC\u30C9>]";var projectAssignmentList={name:"list",summary:"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u30A2\u30B5\u30A4\u30F3\uFF08\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3054\u3068\u306E\
|
|
29
|
+
\u30A2\u30B5\u30A4\u30F3\u6642\u9593\uFF09\u3092\u8868\u793A\u3059\u308B",usage:PROJECT_ASSIGNMENT_USAGE,description:"\u753B\u9762\u306E\u300C\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u30A2\u30B5\u30A4\u30F3\u300D\u306E\u30BF\u30A4\u30E0\u30E9\u30A4\u30F3\u3068\u540C\u3058 GET /api/v2/analysis/project-assignment \u3067\u3059\uFF08\u7BC4\u56F2\u6307\u5B9A\uFF09\u3002\n\u671F\u9593\u3092\u6307\u5B9A\u3057\u306A\u3051\u308C\u3070\u5F53\u6708\uFF08\u3053\u306E\u7AEF\u672B\u306E\u6642\u8A08\uFF09\u3067\u3059\u3002\u5BFE\u8C61\u306F\u7A3C\u50CD\u4E2D\uFF08active\uFF09\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3067\u3059\u3002\n--output table / text / tsv \u306F\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3054\u3068\u306B1\u884C\u3067\u3001\u6708\u3054\u3068\u306E\u30A2\u30B5\u30A4\u30F3\u6642\u9593\u3092 YYYY-MM \u5217\u306B\u4E26\u3079\u307E\u3059\u3002\n\u30E1\u30F3\u30D0\u30FC\u3054\u3068\u306E\u5185\u8A33\uFF08members\uFF09\u306F --output json \u304B --query \u3067\u8AAD\u3081\u307E\u3059\u3002",
|
|
30
30
|
flags:[MONTH_FLAG,FROM_FLAG,TO_FLAG,PROJECT_FILTER_FLAG],forbidden:analysisForbidden(levelGuidance("\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u30A2\u30B5\u30A4\u30F3\u5206\u6790","\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8")),async prepare(input,ctx){noArgs(input,PROJECT_ASSIGNMENT_USAGE);monthRange(input,PROJECT_ASSIGNMENT_USAGE);return resolveFilters(input,ctx)},plan(input){noArgs(input,PROJECT_ASSIGNMENT_USAGE);const range=monthRange(input,PROJECT_ASSIGNMENT_USAGE);return{method:"GET",path:`${ANALYSIS_PATH}\
|
|
31
31
|
/project-assignment`,query:{start_ym:range.from,end_ym:range.to,project_id:resolvedOrUndefined(input,"projectId")}}},plannedNotes:input=>rangeNotes(monthRange(input,PROJECT_ASSIGNMENT_USAGE)),summarize:body=>listIn(body,"projects","\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u30A2\u30B5\u30A4\u30F3\u5206\u6790").map(row=>({project_code:row["project_code"]??null,project_name:row["project_name"]??null,...monthColumns(row,"assigned_hours",responseMonths(body)),total_assigned_hours:row["total_assigned_hour\
|
|
32
32
|
s"]??null,total_estimated_hours:row["total_estimated_hours"]??null,member_count:row["member_count"]??null,project_id:row["project_id"]??null})),raw:body=>{listIn(body,"projects","\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u30A2\u30B5\u30A4\u30F3\u5206\u6790");return body},notes:body=>[...periodNote(body),...summaryNote(body,"\u5408\u8A08",[["project_count","\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u6570"],["total_assigned_hours","\u30A2\u30B5\u30A4\u30F3\u6642\u9593"],["total_estimated_hours","\u3046\u3061\u898B\u8FBC\u307F"]])]};
|
|
@@ -72,11 +72,35 @@ notes:body=>[`\u5E73\u5747\u30B9\u30B3\u30A2: ${String(healthData(body,"\u5065\u
|
|
|
72
72
|
destructive:true,confirmation:"AI \u30AF\u30EC\u30B8\u30C3\u30C8\u3092\u6D88\u8CBB\u3059\u308B\u64CD\u4F5C",flags:[HEALTH_PROJECT_FLAG,HEALTH_DATE_FLAG],forbidden:HEALTH_FORBIDDEN,prepare:(input,ctx)=>healthProject(input,ctx,INSIGHTS_USAGE,i=>dateFlag(i.flags,HEALTH_DATE_FLAG.name)),plan(input){noArgs(input,INSIGHTS_USAGE);return{method:"GET",path:`${ANALYSIS_PATH}/project-health/insights`,query:{project_id:requireResolved(input,"projectId"),date:dateFlag(input.flags,HEALTH_DATE_FLAG.name)}}},plannedNotes:input=>[
|
|
73
73
|
`\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8 ${input.flags.get(HEALTH_PROJECT_FLAG.name)??"\uFF08\u65E2\u5B9A\uFF09"}\uFF08ID: ${input.resolved?.["projectId"]??"-"}\uFF09\u30FB${dateFlag(input.flags,HEALTH_DATE_FLAG.name)??"\u4ECA\u65E5"} \u306E\u6240\u898B\u3092\u751F\u6210\u3057\u307E\u3059`,"\u30C6\u30CA\u30F3\u30C8\u306E AI \u30AF\u30EC\u30B8\u30C3\u30C8\u3092\u6D88\u8CBB\u3057\u307E\u3059\uFF08\u305D\u306E\u65E5\u306E\u30B9\u30B3\u30A2\u304C\u7121\u3051\u308C\u3070\u6D88\u8CBB\u3057\u307E\u305B\u3093\uFF09"],
|
|
74
74
|
summarize:body=>insightRows(body).map(row=>pick(row,INSIGHT_COLUMNS)),raw:body=>{insightRows(body);return healthData(body,"\u5065\u5168\u6027\u306E\u6240\u898B")},notes:body=>{const message=healthData(body,"\u5065\u5168\u6027\u306E\u6240\u898B")["message"];return typeof message==="string"&&message!==""?[message]:[]}}]};function healthProjects(body){return listIn({result:true,projects:healthData(body,"\u5065\u5168\u6027\u30B9\u30B3\u30A2")["projects"]},"projects","\u5065\u5168\u6027\u30B9\u30B3\u30A2")}
|
|
75
|
-
function historyRows(body){return listIn({result:true,history:healthData(body,"\u5065\u5168\u6027\u30B9\u30B3\u30A2\u306E\u63A8\u79FB")["history"]},"history","\u5065\u5168\u6027\u30B9\u30B3\u30A2\u306E\u63A8\u79FB")}function insightRows(body){return listIn({result:true,insights:healthData(body,"\u5065\u5168\u6027\u306E\u6240\u898B")["insights"]},"insights","\u5065\u5168\u6027\u306E\u6240\u898B")}var
|
|
75
|
+
function historyRows(body){return listIn({result:true,history:healthData(body,"\u5065\u5168\u6027\u30B9\u30B3\u30A2\u306E\u63A8\u79FB")["history"]},"history","\u5065\u5168\u6027\u30B9\u30B3\u30A2\u306E\u63A8\u79FB")}function insightRows(body){return listIn({result:true,insights:healthData(body,"\u5065\u5168\u6027\u306E\u6240\u898B")["insights"]},"insights","\u5065\u5168\u6027\u306E\u6240\u898B")}var PROFIT_USAGE="twp analysis profit list --fiscal-year <YYYY> [--scope project|user] [--segment <ID\
|
|
76
|
+
>]";var FISCAL_YEAR_FLAG={name:"--fiscal-year",summary:"\u4F1A\u8A08\u5E74\u5EA6\uFF08YYYY\u30FB\u5FC5\u9808\uFF09",takesValue:true,placeholder:"<YYYY>"};var SEGMENT_FLAG={name:"--segment",summary:"\u30BB\u30B0\u30E1\u30F3\u30C8\u3067\u7D5E\u308A\u8FBC\u3080\uFF08ID\uFF09",takesValue:true,placeholder:"<ID>"};var PROFIT_SCOPE_FLAG={name:"--scope",summary:"\u96C6\u8A08\u306E\u8EF8\uFF08project\uFF1D\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u5225\u30FB\u65E2\u5B9A / user\uFF1D\u30E6\u30FC\u30B6\u30FC\u5225\u306E\u539F\u4FA1\uFF09",
|
|
77
|
+
takesValue:true,placeholder:"<project|user>"};function fiscalYear(input){const raw=input.flags.get(FISCAL_YEAR_FLAG.name);if(raw===void 0){throw new UsageError("--fiscal-year \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u53CE\u652F\u5206\u6790\u306F\u4F1A\u8A08\u5E74\u5EA6\u3067\u3057\u304B\u96C6\u8A08\u3067\u304D\u307E\u305B\u3093\uFF09",PROFIT_USAGE)}const value=raw.trim();if(!/^\d{4}$/.test(value)||Number(value)<2e3||Number(value)>2100){throw new UsageError(`--fiscal-year \u306F 20\
|
|
78
|
+
00\u301C2100 \u306E\u897F\u66A64\u6841\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u53D7\u3051\u53D6\u3063\u305F\u5024: ${raw}\uFF09`,PROFIT_USAGE)}return value}function profitScope(input){const raw=input.flags.get(PROFIT_SCOPE_FLAG.name)?.trim()??"project";if(raw!=="project"&&raw!=="user"){throw new UsageError(`--scope \u306F project \u304B user \u3067\u3059\uFF08\u53D7\u3051\u53D6\u3063\u305F\u5024: ${raw}\uFF09`,PROFIT_USAGE)}return raw}function profitRows(body){const scope=isRecord(
|
|
79
|
+
body)?body["scope"]:void 0;if(scope==="project"){return listIn(body,"projects","\u53CE\u652F\u5206\u6790").map(row=>pick(row,["project_code","project_name","customer_company_name","revenue","invoice_revenue","labor_cost","procurement_cost","total_cost","gross_profit","gross_profit_rate","gross_profit_invoice","project_id"]))}if(scope==="user"){return listIn(body,"users","\u53CE\u652F\u5206\u6790").map(row=>pick(row,["user_name","total_cost","user_id"]))}throw new ApiResponseError("\u53CE\u652F\u5206\u6790\u306E\u5FDC\u7B54\u306E scope\
|
|
80
|
+
\u304C project / user \u306E\u3069\u3061\u3089\u3067\u3082\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}var PROFIT_FORBIDDEN=body=>analysisForbidden(levelGuidance("\u53CE\u652F\u5206\u6790","\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3068\u8CA9\u58F2\u7BA1\u7406\u306E\u4E21\u65B9\uFF08\u304B\u3064\u539F\u4FA1\u7BA1\u7406\u8005\uFF09"))(body);var profitResource={name:"profit",summary:"\u53CE\u652F\u5206\u6790\uFF08\u5168\u793E\u30FB\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u5225\u306E\u58F2\u4E0A\u30FB\u539F\u4FA1\u30FB\u7C97\u5229\uFF09",
|
|
81
|
+
operations:[{name:"list",summary:"\u4F1A\u8A08\u5E74\u5EA6\u306E\u53CE\u652F\u5206\u6790\uFF08\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u5225\u30FB\u30E6\u30FC\u30B6\u30FC\u5225\uFF09\u3092\u8868\u793A\u3059\u308B",usage:PROFIT_USAGE,description:"\u753B\u9762\u306E\u300C\u53CE\u652F\u5206\u6790\u300D\u3068\u540C\u3058 GET /api/v2/analysis/profit \u3067\u3059\u3002\u671F\u9593\u306F\u4F1A\u8A08\u5E74\u5EA6\uFF08--fiscal-year\u30FB\u5FC5\u9808\uFF09\u3060\u3051\u3067\u6307\u5B9A\u3057\u307E\u3059\u3002\n--scope project\uFF08\u65E2\u5B9A\uFF09\u306F\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3054\u3068\u306E\u58F2\u4E0A\u30FB\u539F\u4FA1\u30FB\u7C97\u5229\u3001--scope user \u306F\u30E6\u30FC\u30B6\u30FC\u3054\u3068\u306E\u539F\u4FA1\u3067\u3059\u3002\n\u58F2\u4E0A\u306F\u5168\u78BA\u5EA6\u3067\u96C6\u8A08\u3055\u308C\u307E\u3059\uFF08\u30B5\u30FC\u30D0\u306E\u65E2\u5B9A\u3002\u753B\u9762\u3067\u78BA\u5EA6\u3092\u7D5E\u3063\u3066\u3044\u308B\u3068\u305D\u306E\u5206\u3060\u3051\u6570\u5024\u304C\u9055\u3044\u307E\u3059\uFF09\u3002\n\u5024\u306F\u30B5\u30FC\u30D0\u306E\u4E8B\u524D\u8A08\u7B97\u306E\u307E\u307E\u3067\u3001CLI \u306F\u518D\u8A08\u7B97\u3057\u307E\u305B\u3093\uFF08\u518D\u8A08\u7B97\u4E2D\u306A\u3089 notes \u3067\u8A00\u3044\u307E\u3059\uFF09\u3002",
|
|
82
|
+
flags:[FISCAL_YEAR_FLAG,PROFIT_SCOPE_FLAG,SEGMENT_FLAG],forbidden:PROFIT_FORBIDDEN,plan(input){noArgs(input,PROFIT_USAGE);return{method:"GET",path:`${ANALYSIS_PATH}/profit`,query:{scope:profitScope(input),fiscal_year:fiscalYear(input),segment_id:input.flags.get(SEGMENT_FLAG.name)?.trim()}}},summarize:body=>profitRows(body),raw:body=>{profitRows(body);return body},notes:body=>{const scope=isRecord(body)?body["scope"]:void 0;const freshness=isRecord(body)?recordOf(body["data_freshness"]):{};return[
|
|
83
|
+
...periodNote(body),...scope==="user"?summaryNote(body,"\u5408\u8A08",[["total_cost","\u539F\u4FA1"],["user_count","\u4EBA\u6570"]]):summaryNote(body,"\u5408\u8A08",[["total_revenue","\u58F2\u4E0A"],["total_cost","\u539F\u4FA1"],["gross_profit","\u7C97\u5229"],["gross_profit_rate","\u7C97\u5229\u7387%"],["project_count","\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u6570"]]),...freshness["has_pending_recalculations"]===true?["\u518D\u8A08\u7B97\u5F85\u3061\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u304C\u3042\u308A\u307E\u3059\uFF08\u6570\u5024\u306F\u6700\u65B0\u3067\u306A\u3044\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059\uFF09"]:
|
|
84
|
+
[]]}}]};var KPI_DEPARTMENT_FLAG={name:"--department",summary:"\u90E8\u7F72\uFF08\u540D\u524D\u30FB\u30B3\u30FC\u30C9\u30FBID\u30FB\u5FC5\u9808\uFF09",takesValue:true,placeholder:"<\u90E8\u7F72>"};var KPI_MONTH_FLAG={name:"--month",summary:"\u5BFE\u8C61\u306E\u6708\uFF08YYYY-MM\uFF09\u3002\u7121\u3051\u308C\u3070\u5F53\u6708",takesValue:true,placeholder:"<YYYY-MM>"};var KPI_USER_FLAG={name:"--user",summary:"\u30E6\u30FC\u30B6\u30FC\u3067\u7D5E\u308A\u8FBC\u3080\uFF08\u6C0F\u540D\u30FB\u30E1\u30FC\u30EB\u30FBID\u30FBme\u3002CLI \u304C\u884C\u3092\u7D5E\u308A\u307E\u3059\uFF09",
|
|
85
|
+
takesValue:true,placeholder:"<\u30E6\u30FC\u30B6\u30FC>"};var KPI_LIST_USAGE="twp analysis staff-kpi list --department <\u90E8\u7F72> [--month <YYYY-MM>] [--user <\u30E6\u30FC\u30B6\u30FC>]";var KPI_ESTIMATES_USAGE="twp analysis staff-kpi estimates --department <\u90E8\u7F72> [--month <YYYY-MM>]";var KPI_SETTINGS_USAGE="twp analysis staff-kpi settings --department <\u90E8\u7F72>";var KPI_FORBIDDEN=body=>{const message=isRecord(body)?body["message"]:void 0;if(typeof message==="string"&&message.includes(
|
|
86
|
+
"\u3053\u306E\u90E8\u7F72")){return"\u3053\u306E\u90E8\u7F72\u306E\u4EBA\u6750KPI\u3092\u95B2\u89A7\u3059\u308B\u7BC4\u56F2\u306B\u542B\u307E\u308C\u3066\u3044\u307E\u305B\u3093\u3002\u95B2\u89A7\u3067\u304D\u308B\u90E8\u7F72\u306F\u753B\u9762\u306E\u4EBA\u6750KPI\u306E\u90E8\u7F72\u9078\u629E\u3067\u78BA\u8A8D\u3067\u304D\u307E\u3059\u3002"}return analysisForbidden(levelGuidance("\u4EBA\u6750KPI","\u4EBA\u6750KPI\u306E\u5BFE\u8C61\u6A5F\u80FD"))(body)};function kpiMonth(input){const month=monthFlag(
|
|
87
|
+
input.flags,KPI_MONTH_FLAG.name);if(month!==void 0)return{from:month,to:month,defaulted:false};const now=currentMonth();return{from:now,to:now,defaulted:true}}function kpiDepartment(input,usage){const raw=input.flags.get(KPI_DEPARTMENT_FLAG.name);if(raw===void 0||raw.trim()===""){throw new UsageError("--department \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u4EBA\u6750KPI\u306F\u90E8\u7F72\u3054\u3068\u306B\u96C6\u8A08\u3055\u308C\u307E\u3059\uFF09",usage)}return raw}async function resolveKpi(input,ctx,usage,withUser){
|
|
88
|
+
noArgs(input,usage);const department=kpiDepartment(input,usage);const resolved={departmentId:(await ctx.resolver.department(department,KPI_DEPARTMENT_FLAG.name)).id};const user=withUser?input.flags.get(KPI_USER_FLAG.name):void 0;if(user!==void 0)resolved["userId"]=(await ctx.resolver.user(user,KPI_USER_FLAG.name)).id;return withResolved(input,resolved)}function kpiRows(body,label){const data=dataOf(body,label);if(!Array.isArray(data))throw new ApiResponseError(`${label}\u306E\u5FDC\u7B54\u306E data \u304C\u914D\u5217\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\
|
|
89
|
+
\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`);return data.map(recordOf)}function stringKeys(value){return Array.isArray(value)?value.filter(k=>typeof k==="string"):[]}function staffKpiRows(body){const rows=kpiRows(body,"\u4EBA\u6750KPI");const meta=isRecord(body)?recordOf(body["meta"]):{};const columns=[...new Set([...stringKeys(meta["item_keys"]),...stringKeys(meta["action_item_keys"])])];for(const row of rows){for(const key of Object.keys(recordOf(row["actual_kpi_values"])))if(!columns.includes(
|
|
90
|
+
key))columns.push(key)}return rows.map(row=>{const values=recordOf(row["actual_kpi_values"]);const out={user_id:row["user_id"]??null};for(const key of columns)out[key]=values[key]??null;return out})}function incompleteReasonText(reason){if(!isRecord(reason))return String(reason);const label=typeof reason["label"]==="string"?reason["label"]:String(reason["reason"]??"?");return reason["count"]===void 0?label:`${label} ${String(reason["count"])}${typeof reason["unit"]==="string"?reason["unit"]:""}`}
|
|
91
|
+
function narrowKpiUser(body,userId){if(userId===void 0)return body;const rows=kpiRows(body,"\u4EBA\u6750KPI");return{...body,data:rows.filter(row=>row["user_id"]===userId)}}var staffKpiResource={name:"staff-kpi",summary:"\u4EBA\u6750KPI\uFF08\u62C5\u5F53\u8005\u3054\u3068\u306E\u5B9F\u7E3E\u30FB\u96C6\u8A08\u5BFE\u8C61\u306E\u898B\u7A4D\u30FB\u8A2D\u5B9A\uFF09",operations:[{name:"list",summary:"\u90E8\u7F72\u306E\u4EBA\u6750KPI\uFF08\u62C5\u5F53\u8005\u3054\u3068\u306E\u5B9F\u7E3E\u5024\uFF09\u3092\u8868\u793A\u3059\u308B",
|
|
92
|
+
usage:KPI_LIST_USAGE,description:"\u753B\u9762\u306E\u300C\u4EBA\u6750KPI\u300D\u3068\u540C\u3058 GET /api/v2/analysis/staff-kpi \u3067\u3059\u3002--department \u306F\u5FC5\u9808\u3001--month \u3092\u7701\u304F\u3068\u5F53\u6708\uFF08\u3053\u306E\u7AEF\u672B\u306E\u6642\u8A08\uFF09\u3067\u3059\u3002\n\u5148\u306E\u6708\u306F6\u304B\u6708\u5148\u307E\u3067\u898B\u8FBC\u307F\uFF08meta.source=forecast\uFF09\u3067\u30017\u304B\u6708\u4EE5\u4E0A\u5148\u306F\u30B5\u30FC\u30D0\u304C\u65AD\u308A\u307E\u3059\u3002--user \u306F\u30B5\u30FC\u30D0\u306B\u7D5E\u308A\u8FBC\u307F\u306E\u53E3\u304C\u7121\u3044\u305F\u3081\u3001CLI \u304C\u5FDC\u7B54\u306E\u884C\u3092\u7D5E\u308A\u307E\u3059\u3002\n--output table / text / tsv \u306F\u62C5\u5F53\u8005\u3054\u3068\u306B1\u884C\u3067\u3001\u5B9F\u7E3E\u5024\uFF08actual_kpi_values\uFF09\u3092\u9805\u76EE\u30AD\u30FC\u306E\u5217\u306B\u4E26\u3079\u307E\u3059\u3002\n\u76EE\u6A19\u5024\u30FB\u9664\u5916\u4EF6\u6570\uFF08excluded\uFF09\u30FB\u96C6\u8A08\u306E\u6CE8\u610F\uFF08meta.incomplete_reasons\uFF09\u306F --output json \u304B --query \u3067\u8AAD\u3081\u307E\u3059\u3002\n\u5FDC\u7B54\u306B\u30E6\u30FC\u30B6\u30FC\u540D\u306F\u542B\u307E\u308C\u307E\u305B\u3093\uFF08user_id \u306F twp user list \u306E id \u3068\u540C\u3058\u5024\u3067\u3059\uFF09\u3002",
|
|
93
|
+
flags:[KPI_DEPARTMENT_FLAG,KPI_MONTH_FLAG,KPI_USER_FLAG],forbidden:KPI_FORBIDDEN,prepare:(input,ctx)=>resolveKpi(input,ctx,KPI_LIST_USAGE,true),plan:input=>({method:"GET",path:`${ANALYSIS_PATH}/staff-kpi`,query:{year_month:kpiMonth(input).from,department_id:requireResolved(input,"departmentId")}}),plannedNotes:input=>[...kpiMonthNotes(kpiMonth(input)),...input.resolved?.["userId"]!==void 0?[`--user \u306E\u884C\u3060\u3051\u306B CLI \u304C\u7D5E\u308A\u307E\u3059\uFF08user_id: ${input.resolved["\
|
|
94
|
+
userId"]}\uFF09`]:[]],narrow:(body,input)=>narrowKpiUser(body,input.resolved?.["userId"]),summarize:body=>staffKpiRows(body),raw:body=>{kpiRows(body,"\u4EBA\u6750KPI");return body},notes:body=>{const meta=isRecord(body)?recordOf(body["meta"]):{};const reasons=Array.isArray(meta["incomplete_reasons"])?meta["incomplete_reasons"].map(incompleteReasonText):[];return[`\u5BFE\u8C61\u6708: ${String(meta["year_month"]??"-")} / \u96C6\u8A08\u5143: ${String(meta["source"]??"-")}`,...meta["incomplete"]===true?
|
|
95
|
+
[`\u96C6\u8A08\u306B\u6B20\u3051\u304C\u3042\u308A\u307E\u3059: ${reasons.length>0?reasons.join(" / "):"\uFF08\u7406\u7531\u306F\u30B5\u30FC\u30D0\u304C\u8FD4\u3057\u3066\u3044\u307E\u305B\u3093\uFF09"}`]:[]]}},{name:"estimates",summary:"\u4EBA\u6750KPI\u306E\u96C6\u8A08\u5BFE\u8C61\u306B\u306A\u3063\u305F\u898B\u7A4D\u3092\u8868\u793A\u3059\u308B",usage:KPI_ESTIMATES_USAGE,description:"GET /api/v2/analysis/staff-kpi/estimates\uFF08\u753B\u9762\u306E\u300C\u5BFE\u8C61\u6848\u4EF6\u3092\u8868\u793A\u300D\uFF09\u3002--department \u306F\u5FC5\u9808\u3001--month \u3092\u7701\u304F\u3068\u5F53\u6708\u3067\u3059\u3002\n1\u4EF6\u305A\u3064\u3001\u30B5\u30FC\u30D0\u304C\u8FD4\u3057\u305F\u9805\u76EE\u306E\u307E\u307E\u4E26\u3079\u307E\
|
|
96
|
+
\u3059\u3002",flags:[KPI_DEPARTMENT_FLAG,KPI_MONTH_FLAG],forbidden:KPI_FORBIDDEN,prepare:(input,ctx)=>resolveKpi(input,ctx,KPI_ESTIMATES_USAGE,false),plan:input=>({method:"GET",path:`${ANALYSIS_PATH}/staff-kpi/estimates`,query:{year_month:kpiMonth(input).from,department_id:requireResolved(input,"departmentId")}}),plannedNotes:input=>kpiMonthNotes(kpiMonth(input)),summarize:body=>kpiRows(body,"\u4EBA\u6750KPI\u306E\u5BFE\u8C61\u898B\u7A4D"),raw:body=>kpiRows(body,"\u4EBA\u6750KPI\u306E\u5BFE\u8C61\u898B\u7A4D"),
|
|
97
|
+
notes:body=>{const meta=isRecord(body)?recordOf(body["meta"]):{};return[`\u5BFE\u8C61\u6708: ${String(meta["year_month"]??"-")} / ${String(meta["count"]??"-")} \u4EF6`]}},{name:"settings",summary:"\u90E8\u7F72\u306E\u4EBA\u6750KPI\u306E\u8A2D\u5B9A\uFF08\u500D\u7387\u30FB\u65E5\u5831\u306E\u63D0\u51FA\u671F\u9650\u306A\u3069\uFF09\u3092\u8868\u793A\u3059\u308B",usage:KPI_SETTINGS_USAGE,description:"GET /api/v2/analysis/staff-kpi/settings\u3002--department \u306F\u5FC5\u9808\u3067\u3059\u3002\u8A2D\u5B9A\u30FB\u76EE\u6A19\u306E\u5909\u66F4\u306F\u753B\u9762\u304B\u3089\u884C\u3063\u3066\u304F\u3060\u3055\u3044\u3002\n\u9805\u76EE\u30AD\u30FC\u306E\u4E00\u89A7\uFF08meta\uFF09\u306F --\
|
|
98
|
+
output json \u304B --query \u3067\u8AAD\u3081\u307E\u3059\u3002",flags:[KPI_DEPARTMENT_FLAG],forbidden:KPI_FORBIDDEN,prepare:(input,ctx)=>resolveKpi(input,ctx,KPI_SETTINGS_USAGE,false),plan:input=>({method:"GET",path:`${ANALYSIS_PATH}/staff-kpi/settings`,query:{department_id:requireResolved(input,"departmentId")}}),summarize:body=>kpiSettings(body),raw:body=>{kpiSettings(body);return body}}]};function kpiSettings(body){const data=dataOf(body,"\u4EBA\u6750KPI\u306E\u8A2D\u5B9A");if(!isRecord(data))
|
|
99
|
+
throw new ApiResponseError("\u4EBA\u6750KPI\u306E\u8A2D\u5B9A\u306E\u5FDC\u7B54\u306E data \u304C\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002");return data}var analysisDomain={name:"analysis",summary:"\u5206\u6790\uFF08\u7A3C\u50CD\u5206\u6790\u30FB\u30A2\u30B5\u30A4\u30F3\u5206\u6790\u30FB\u30AD\u30E3\u30D1\u30B7\u30C6\u30A3\u30FB\u8CA0\u8377\u30FB\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u5065\u5168\u6027\u30FB\u53CE\u652F\u5206\u6790\u30FB\u4EBA\u6750KPI\uFF09\u306E\u8AAD\u307F\u53D6\u308A",
|
|
76
100
|
operations:[],subresources:[{name:"operating-hours",summary:"\u7A3C\u50CD\u5206\u6790\uFF08\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u5225\u30FB\u30E6\u30FC\u30B6\u30FC\u5225\u306E\u7A3C\u50CD\u6642\u9593\uFF09",operations:[operatingHoursList]},{name:"project-assignment",summary:"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u30A2\u30B5\u30A4\u30F3\uFF08\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3054\u3068\u306E\u30A2\u30B5\u30A4\u30F3\u6642\u9593\uFF09",operations:[projectAssignmentList]},{name:"staff-assignment",
|
|
77
|
-
summary:"\u4EBA\u6750\u5225\u30A2\u30B5\u30A4\u30F3\uFF08\u30E6\u30FC\u30B6\u30FC\u3054\u3068\u306E\u30A2\u30B5\u30A4\u30F3\u6642\u9593\u3068\u7A3C\u50CD\u7387\uFF09",operations:[staffAssignmentList]},capacityResource,workloadResource,projectHealthResource]};var MANHOUR_FROM_FLAG={name:"--from",summary:"\u958B\u59CB\u65E5\uFF08YYYY-MM-DD\uFF09\u3002\u7121\u3051\u308C\u3070\u4ECA\u6708\u306E\u521D\u65E5\uFF08\u30B5\u30FC\u30D0\u304C\u6C7A\u3081\u307E\u3059\uFF09",takesValue:true,
|
|
78
|
-
|
|
79
|
-
\uFF09\u3088\u308A\u5F8C\u306B\u306A\u3063\u3066\u3044\u307E\u3059`,usage)}return{start_date:start,end_date:end}}var MANHOUR_DESCRIPTION="\u671F\u9593\u3092\u7701\u304F\u3068\u4ECA\u6708\u3067\u3059\uFF08\u30C6\u30CA\u30F3\u30C8\u306E\u696D\u52D9\u65E5\u306E\u533A\u5207\u308A\u3067\u30B5\u30FC\u30D0\u304C\u6C7A\u3081\u307E\u3059\uFF09\u3002\n--output table / text / tsv \u306F\u30E6\u30FC\u30B6\u30FC\u3054\u3068\u306E\u5408\u8A08\uFF08\u5206\u3068 h:mm\uFF09\u3067\u3001\u65E5\u5225\uFF08by_date\uFF09\u306F --output json \u304B --query \u3067\u8AAD\u3081\u307E\u3059\u3002\n\u5FDC\u7B54\u306B\u30E6\u30FC\u30B6\u30FC\u540D\u306F\u542B\u307E\u308C\u307E\u305B\u3093\uFF08user_id \u306F twp project members \u306E user_id \u3068\u540C\u3058\u5024\u3067\u3059\uFF09\u3002";
|
|
101
|
+
summary:"\u4EBA\u6750\u5225\u30A2\u30B5\u30A4\u30F3\uFF08\u30E6\u30FC\u30B6\u30FC\u3054\u3068\u306E\u30A2\u30B5\u30A4\u30F3\u6642\u9593\u3068\u7A3C\u50CD\u7387\uFF09",operations:[staffAssignmentList]},capacityResource,workloadResource,projectHealthResource,profitResource,staffKpiResource]};var MANHOUR_FROM_FLAG={name:"--from",summary:"\u958B\u59CB\u65E5\uFF08YYYY-MM-DD\uFF09\u3002\u7121\u3051\u308C\u3070\u4ECA\u6708\u306E\u521D\u65E5\uFF08\u30B5\u30FC\u30D0\u304C\u6C7A\u3081\u307E\u3059\uFF09",takesValue:true,
|
|
102
|
+
placeholder:"<YYYY-MM-DD>"};var MANHOUR_TO_FLAG={name:"--to",summary:"\u7D42\u4E86\u65E5\uFF08YYYY-MM-DD\uFF09\u3002\u7121\u3051\u308C\u3070\u4ECA\u6708\u306E\u672B\u65E5\uFF08\u30B5\u30FC\u30D0\u304C\u6C7A\u3081\u307E\u3059\uFF09",takesValue:true,placeholder:"<YYYY-MM-DD>"};function manhourQuery(input,usage){const start=dateFlag(input.flags,MANHOUR_FROM_FLAG.name);const end=dateFlag(input.flags,MANHOUR_TO_FLAG.name);if(start!==void 0&&end!==void 0&&start>end){throw new UsageError(`--from\uFF08${start}\
|
|
103
|
+
\uFF09\u304C --to\uFF08${end}\uFF09\u3088\u308A\u5F8C\u306B\u306A\u3063\u3066\u3044\u307E\u3059`,usage)}return{start_date:start,end_date:end}}var MANHOUR_DESCRIPTION="\u671F\u9593\u3092\u7701\u304F\u3068\u4ECA\u6708\u3067\u3059\uFF08\u30C6\u30CA\u30F3\u30C8\u306E\u696D\u52D9\u65E5\u306E\u533A\u5207\u308A\u3067\u30B5\u30FC\u30D0\u304C\u6C7A\u3081\u307E\u3059\uFF09\u3002\n--output table / text / tsv \u306F\u30E6\u30FC\u30B6\u30FC\u3054\u3068\u306E\u5408\u8A08\uFF08\u5206\u3068 h:mm\uFF09\u3067\u3001\u65E5\u5225\uFF08by_date\uFF09\u306F --output json \u304B --query \u3067\u8AAD\u3081\u307E\u3059\u3002\n\u5FDC\u7B54\u306B\u30E6\u30FC\u30B6\u30FC\u540D\u306F\u542B\u307E\u308C\u307E\u305B\u3093\uFF08user_id \u306F twp project members \u306E user_id \u3068\u540C\u3058\u5024\u3067\u3059\uFF09\u3002";
|
|
80
104
|
function manhourRows(body,label){return listIn(body,"by_user",label).map(row=>({user_id:row["user_id"]??null,total_minutes:row["total_minutes"]??null,total:hoursMinutes(row["total_minutes"])??null}))}function manhourNotes(body){if(!isRecord(body))return[];return[`\u671F\u9593: ${String(body["start_date"]??"-")} \u301C ${String(body["end_date"]??"-")} / \u5408\u8A08 ${String(hoursMinutes(body["total_minutes"])??"-")}`]}function workloadDistributionRows(body){return listIn(body,"members","\u30E1\u30F3\u30D0\u30FC\u5225\u306E\u8CA0\u8377").
|
|
81
105
|
map(row=>({user_name:row["user_name"]??(row["user_id"]===null?"\uFF08\u672A\u5272\u308A\u5F53\u3066\uFF09":null),total_tasks:row["total_tasks"]??null,estimated_hours:row["estimated_hours"]??null,by_status:Array.isArray(row["by_status"])?row["by_status"].map(recordOf).map(s=>`${String(s["status_name"]??s["status_id"]??"?")}:${String(s["count"]??"?")}`).join(" "):null,user_id:row["user_id"]??null}))}function workloadDistributionNotes(body){if(!isRecord(body))return[];return[`\u672A\u5B8C\u4E86 ${String(
|
|
82
|
-
body["total_active_tasks"]??"-")} \u4EF6 / \u5168\u30BF\u30B9\u30AF ${String(body["total_tasks"]??"-")} \u4EF6`]}export{analysisForbidden,currentMonth,monthsBetween,analysisDomain,MANHOUR_FROM_FLAG,MANHOUR_TO_FLAG,manhourQuery,MANHOUR_DESCRIPTION,manhourRows,manhourNotes,workloadDistributionRows,workloadDistributionNotes};
|
|
106
|
+
body["total_active_tasks"]??"-")} \u4EF6 / \u5168\u30BF\u30B9\u30AF ${String(body["total_tasks"]??"-")} \u4EF6`]}export{analysisForbidden,FROM_FLAG,TO_FLAG,MONTH_FLAG,currentMonth,monthRange,rangeNotes,noArgs,listIn,dataOf,recordOf,monthsBetween,profitRows,staffKpiRows,analysisDomain,MANHOUR_FROM_FLAG,MANHOUR_TO_FLAG,manhourQuery,MANHOUR_DESCRIPTION,manhourRows,manhourNotes,workloadDistributionRows,workloadDistributionNotes};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{readCsvFileText}from"./chunk-OHXZO5WK.js";import{featureLicenseGuidance,invoiceFilters}from"./chunk-
|
|
3
|
+
import{readCsvFileText}from"./chunk-OHXZO5WK.js";import{featureLicenseGuidance,invoiceFilters}from"./chunk-QYWYZG73.js";import{boundedText,isoDate}from"./chunk-XDHLO54T.js";import{readBody}from"./chunk-ORUDW52G.js";import{SALES_DEPOSITS_PATH,isExactNumericId,resolveNamed}from"./chunk-BS2ACFJA.js";import{repeatedValues}from"./chunk-F7K37QG6.js";import{ApiError}from"./chunk-IF2K4PM5.js";import{LIST_PAGING_HELP,PAGE_NUMBER_LIST_FLAGS,PAGE_NUMBER_PAGING_HELP,
|
|
4
4
|
STABLE_PAGE_ORDER,nonEmpty,pageNumberPaging,pageNumberQuery,pageRangeNotes}from"./chunk-IOGMOXYF.js";import{requireResolved,withResolved}from"./chunk-LXIAOCUW.js";import{acknowledgement,isRecord,pick}from"./chunk-VTQAI52S.js";import{ApiResponseError,UsageError}from"./chunk-UFND7FBC.js";var PATH=SALES_DEPOSITS_PATH;function salesAdminForbidden(what){return body=>body?.error==="permission_denied"?featureLicenseGuidance("\u8CA9\u58F2\u7BA1\u7406"):`${what}\u306B\u306F\u8CA9\u58F2\u7BA1\u7406\u306E\u6A29\u9650\u304C\u300C\u7BA1\u7406\u8005\u300D\u3067\u3042\u308B\u3053\u3068\u304C\u8981\u308A\u307E\u3059\u3002\u30C6\u30CA\u30F3\u30C8\u7BA1\u7406\u8005\u306B\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`}var FORBIDDEN=salesAdminForbidden("\u5165\u91D1");var ALLOCATION_STATUSES={
|
|
5
5
|
allocated:"\u5F15\u5F53\u6E08",shortage:"\u672A\u5165\u91D1\u6709",excess:"\u5165\u91D1\u8D85\u904E\u6709",transfer_fee_resolved:"\u624B\u6570\u6599\u51E6\u7406\u6E08"};var EXCESS_REASONS={transfer_fee:"\u632F\u8FBC\u624B\u6570\u6599",agency_fee:"\u4EE3\u884C\u624B\u6570\u6599\uFF08\u53E3\u5EA7\u632F\u66FF \u57FA\u672C\u5229\u7528\u6599\uFF09",partial:"\u4E00\u90E8\u5165\u91D1",offset:"\u76F8\u6BBA",overpayment:"\u904E\u5165\u91D1",other:"\u305D\u306E\u4ED6"};var EXCESS_TAX_CATEGORIES={taxable_purchase_10:"\
|
|
6
6
|
\u8AB2\u7A0E\u4ED5\u5165 10%",not_applicable:"\u5BFE\u8C61\u5916"};var BULK_MAX_ROWS=100;var PLAN_MAX_ITEMS=50;var PLAN_MAX_ALLOCATIONS=100;var FILE_MAX_BYTES=1024*1024;var EXCESS_NOTE_MAX_CHARS=255;var PLAN_MEMO_MAX_CHARS=1e3;var CONTENT_MAX_CHARS=1e6;var LIST_COLUMNS=["id","deposit_date","company_name","payee_name","deposit_amount","allocated_amount","unallocated_amount","allocation_status"];var GET_COLUMNS=[...LIST_COLUMNS,"memo","excess_reason","excess_amount","excess_note","excess_tax_categ\
|