boondmanager-mcp-server 2.12.2 → 2.14.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/README.md +2 -1
- package/dist/constants.d.ts +1 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +8 -0
- package/dist/constants.js.map +1 -1
- package/dist/instructions.d.ts +1 -1
- package/dist/instructions.d.ts.map +1 -1
- package/dist/instructions.js +1 -0
- package/dist/instructions.js.map +1 -1
- package/dist/prompts/index.d.ts.map +1 -1
- package/dist/prompts/index.js +61 -0
- package/dist/prompts/index.js.map +1 -1
- package/dist/resources/index.d.ts +8 -2
- package/dist/resources/index.d.ts.map +1 -1
- package/dist/resources/index.js +84 -3
- package/dist/resources/index.js.map +1 -1
- package/dist/resources/templates.d.ts +109 -0
- package/dist/resources/templates.d.ts.map +1 -0
- package/dist/resources/templates.js +171 -0
- package/dist/resources/templates.js.map +1 -0
- package/dist/schemas/index.d.ts +85 -14
- package/dist/schemas/index.d.ts.map +1 -1
- package/dist/schemas/index.js +128 -14
- package/dist/schemas/index.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +3 -1
- package/dist/server.js.map +1 -1
- package/dist/services/boond-client.d.ts +14 -1
- package/dist/services/boond-client.d.ts.map +1 -1
- package/dist/services/boond-client.js +21 -1
- package/dist/services/boond-client.js.map +1 -1
- package/dist/tools/crud-factory.d.ts +5 -1
- package/dist/tools/crud-factory.d.ts.map +1 -1
- package/dist/tools/crud-factory.js +4 -3
- package/dist/tools/crud-factory.js.map +1 -1
- package/dist/tools/expenses.d.ts.map +1 -1
- package/dist/tools/expenses.js +152 -6
- package/dist/tools/expenses.js.map +1 -1
- package/manifest.json +2 -2
- package/package.json +2 -2
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import { McpError, ErrorCode } from "@modelcontextprotocol/sdk/types.js";
|
|
2
|
+
import { MAX_RESOURCE_BYTES } from "../constants.js";
|
|
3
|
+
import { apiRequest, projectEntity } from "../services/boond-client.js";
|
|
4
|
+
import { progressReporterFrom } from "../services/progress.js";
|
|
5
|
+
import { EntityIdSchema } from "../schemas/index.js";
|
|
6
|
+
/** Tabs cheap enough to aggregate: an identity/detail pair, never a collection. */
|
|
7
|
+
const IDENTITY_TABS = ["information"];
|
|
8
|
+
const IDENTITY_AND_SKILLS_TABS = ["information", "technical-data"];
|
|
9
|
+
export const ENTITY_TEMPLATES = [
|
|
10
|
+
{
|
|
11
|
+
name: "entity/candidate",
|
|
12
|
+
uriTemplate: "boond://candidate/{id}",
|
|
13
|
+
domain: "candidates",
|
|
14
|
+
entityName: "candidat",
|
|
15
|
+
apiPath: "/candidates",
|
|
16
|
+
tabs: IDENTITY_AND_SKILLS_TABS,
|
|
17
|
+
title: "Fiche candidat",
|
|
18
|
+
description: "Fiche complète d'un candidat (identité, informations, compétences/technical-data) en une seule lecture. " +
|
|
19
|
+
"L'id est numérique. Les actions et positionnements restent des outils (`boond_candidates_actions`, `_positionings`).",
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
name: "entity/resource",
|
|
23
|
+
uriTemplate: "boond://resource/{id}",
|
|
24
|
+
domain: "resources",
|
|
25
|
+
entityName: "ressource",
|
|
26
|
+
apiPath: "/resources",
|
|
27
|
+
tabs: IDENTITY_AND_SKILLS_TABS,
|
|
28
|
+
title: "Fiche ressource (collaborateur)",
|
|
29
|
+
description: "Fiche complète d'une ressource/collaborateur (identité, informations, compétences) en une seule lecture. " +
|
|
30
|
+
"L'id est numérique. Temps, absences et positionnements restent des outils.",
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
name: "entity/contact",
|
|
34
|
+
uriTemplate: "boond://contact/{id}",
|
|
35
|
+
domain: "contacts",
|
|
36
|
+
entityName: "contact",
|
|
37
|
+
apiPath: "/contacts",
|
|
38
|
+
tabs: IDENTITY_TABS,
|
|
39
|
+
title: "Fiche contact",
|
|
40
|
+
description: "Fiche complète d'un contact client (identité, informations) en une seule lecture. L'id est numérique.",
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
name: "entity/company",
|
|
44
|
+
uriTemplate: "boond://company/{id}",
|
|
45
|
+
domain: "companies",
|
|
46
|
+
entityName: "société",
|
|
47
|
+
apiPath: "/companies",
|
|
48
|
+
tabs: IDENTITY_TABS,
|
|
49
|
+
title: "Fiche société",
|
|
50
|
+
description: "Fiche complète d'une société cliente (identité, informations) en une seule lecture. L'id est numérique.",
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
name: "entity/opportunity",
|
|
54
|
+
uriTemplate: "boond://opportunity/{id}",
|
|
55
|
+
domain: "opportunities",
|
|
56
|
+
entityName: "opportunité",
|
|
57
|
+
apiPath: "/opportunities",
|
|
58
|
+
tabs: IDENTITY_TABS,
|
|
59
|
+
title: "Fiche opportunité",
|
|
60
|
+
description: "Fiche complète d'une opportunité commerciale (identité, informations) en une seule lecture. L'id est numérique.",
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
name: "entity/project",
|
|
64
|
+
uriTemplate: "boond://project/{id}",
|
|
65
|
+
domain: "projects",
|
|
66
|
+
entityName: "projet",
|
|
67
|
+
apiPath: "/projects",
|
|
68
|
+
tabs: IDENTITY_TABS,
|
|
69
|
+
title: "Fiche projet",
|
|
70
|
+
description: "Fiche complète d'un projet/mission (identité, informations) en une seule lecture. L'id est numérique.",
|
|
71
|
+
},
|
|
72
|
+
];
|
|
73
|
+
/** Exposed for tests and the catalogue generator; mirrors `REGISTERED_RESOURCES`. */
|
|
74
|
+
export const REGISTERED_RESOURCE_TEMPLATES = ENTITY_TEMPLATES.map((t) => ({
|
|
75
|
+
name: t.name,
|
|
76
|
+
uriTemplate: t.uriTemplate,
|
|
77
|
+
title: t.title,
|
|
78
|
+
domain: t.domain,
|
|
79
|
+
}));
|
|
80
|
+
/** Project a tab response: an object stays an object, a collection stays a list. */
|
|
81
|
+
function projectTab(response) {
|
|
82
|
+
if (Array.isArray(response.data))
|
|
83
|
+
return response.data.map(projectEntity);
|
|
84
|
+
return response.data ? projectEntity(response.data) : null;
|
|
85
|
+
}
|
|
86
|
+
function errorMessage(reason) {
|
|
87
|
+
return reason instanceof Error ? reason.message : String(reason);
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Serialise, and if the body is over the ceiling drop sections until it fits.
|
|
91
|
+
*
|
|
92
|
+
* Order of sacrifice, least to most informative: declared tabs from the last
|
|
93
|
+
* to the first (so `information` outlives `technical-data`), then the base
|
|
94
|
+
* record's `relationships`, then its `attributes`. In practice only the first
|
|
95
|
+
* rung is ever reached; the others exist so the ceiling is a guarantee rather
|
|
96
|
+
* than an intention.
|
|
97
|
+
*/
|
|
98
|
+
function serializeWithinBudget(aggregate, tabOrder) {
|
|
99
|
+
const dropped = [];
|
|
100
|
+
const reason = `Corps au-delà de MAX_RESOURCE_BYTES (${MAX_RESOURCE_BYTES} octets) : sections abandonnées pour garder un JSON valide.`;
|
|
101
|
+
const render = () => {
|
|
102
|
+
const body = { ...aggregate };
|
|
103
|
+
if (dropped.length > 0)
|
|
104
|
+
body._omitted = { sections: [...dropped], reason };
|
|
105
|
+
return JSON.stringify(body, null, 2);
|
|
106
|
+
};
|
|
107
|
+
const overBudget = (json) => Buffer.byteLength(json, "utf8") > MAX_RESOURCE_BYTES;
|
|
108
|
+
let json = render();
|
|
109
|
+
if (!overBudget(json))
|
|
110
|
+
return json;
|
|
111
|
+
for (const tab of [...tabOrder].reverse()) {
|
|
112
|
+
if (!(tab in aggregate.sections))
|
|
113
|
+
continue;
|
|
114
|
+
delete aggregate.sections[tab];
|
|
115
|
+
dropped.push(tab);
|
|
116
|
+
json = render();
|
|
117
|
+
if (!overBudget(json))
|
|
118
|
+
return json;
|
|
119
|
+
}
|
|
120
|
+
for (const field of ["relationships", "attributes"]) {
|
|
121
|
+
if (aggregate.entity[field] === undefined)
|
|
122
|
+
continue;
|
|
123
|
+
delete aggregate.entity[field];
|
|
124
|
+
dropped.push(`entity.${field}`);
|
|
125
|
+
json = render();
|
|
126
|
+
if (!overBudget(json))
|
|
127
|
+
return json;
|
|
128
|
+
}
|
|
129
|
+
return json;
|
|
130
|
+
}
|
|
131
|
+
export async function readEntityAggregate(template, rawId, uri, extra) {
|
|
132
|
+
// `Variables` is `string | string[]`: a repeated URI segment would arrive as
|
|
133
|
+
// an array, which `EntityIdSchema` rejects rather than silently join.
|
|
134
|
+
const parsed = EntityIdSchema.safeParse(rawId);
|
|
135
|
+
if (!parsed.success) {
|
|
136
|
+
throw new McpError(ErrorCode.InvalidParams, `Identifiant de ${template.entityName} invalide dans « ${uri} » : attendu un id numérique (ex. ${template.uriTemplate.replace("{id}", "1234")}).`);
|
|
137
|
+
}
|
|
138
|
+
const id = parsed.data;
|
|
139
|
+
const report = progressReporterFrom(extra);
|
|
140
|
+
const total = 1 + template.tabs.length;
|
|
141
|
+
let done = 0;
|
|
142
|
+
const step = (label) => {
|
|
143
|
+
done += 1;
|
|
144
|
+
report(done, total, `${template.entityName} ${id} : ${label} (${done}/${total})`);
|
|
145
|
+
};
|
|
146
|
+
const base = apiRequest(`${template.apiPath}/${id}`).finally(() => step("fiche"));
|
|
147
|
+
const tabs = template.tabs.map((tab) => apiRequest(`${template.apiPath}/${id}/${tab}`).finally(() => step(tab)));
|
|
148
|
+
// The base record is awaited through allSettled together with the tabs so a
|
|
149
|
+
// tab failure cannot leave an unhandled rejection behind, then rethrown: with
|
|
150
|
+
// no record there is nothing to aggregate.
|
|
151
|
+
const [baseResult, ...tabResults] = await Promise.allSettled([base, ...tabs]);
|
|
152
|
+
if (baseResult.status === "rejected")
|
|
153
|
+
throw baseResult.reason;
|
|
154
|
+
const entity = Array.isArray(baseResult.value.data) ? baseResult.value.data[0] : baseResult.value.data;
|
|
155
|
+
if (!entity) {
|
|
156
|
+
throw new McpError(ErrorCode.InvalidParams, `${template.entityName} ${id} introuvable.`);
|
|
157
|
+
}
|
|
158
|
+
const aggregate = { uri, entity: projectEntity(entity), sections: {} };
|
|
159
|
+
const errors = {};
|
|
160
|
+
template.tabs.forEach((tab, i) => {
|
|
161
|
+
const result = tabResults[i];
|
|
162
|
+
if (result.status === "fulfilled")
|
|
163
|
+
aggregate.sections[tab] = projectTab(result.value);
|
|
164
|
+
else
|
|
165
|
+
errors[tab] = errorMessage(result.reason);
|
|
166
|
+
});
|
|
167
|
+
if (Object.keys(errors).length > 0)
|
|
168
|
+
aggregate._errors = errors;
|
|
169
|
+
return serializeWithinBudget(aggregate, template.tabs);
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=templates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/resources/templates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAmB,MAAM,iBAAiB,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAiErD,mFAAmF;AACnF,MAAM,aAAa,GAAG,CAAC,aAAa,CAAU,CAAC;AAC/C,MAAM,wBAAwB,GAAG,CAAC,aAAa,EAAE,gBAAgB,CAAU,CAAC;AAE5E,MAAM,CAAC,MAAM,gBAAgB,GAA8B;IACzD;QACE,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,wBAAwB;QACrC,MAAM,EAAE,YAAY;QACpB,UAAU,EAAE,UAAU;QACtB,OAAO,EAAE,aAAa;QACtB,IAAI,EAAE,wBAAwB;QAC9B,KAAK,EAAE,gBAAgB;QACvB,WAAW,EACT,0GAA0G;YAC1G,sHAAsH;KACzH;IACD;QACE,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE,uBAAuB;QACpC,MAAM,EAAE,WAAW;QACnB,UAAU,EAAE,WAAW;QACvB,OAAO,EAAE,YAAY;QACrB,IAAI,EAAE,wBAAwB;QAC9B,KAAK,EAAE,iCAAiC;QACxC,WAAW,EACT,2GAA2G;YAC3G,4EAA4E;KAC/E;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE,sBAAsB;QACnC,MAAM,EAAE,UAAU;QAClB,UAAU,EAAE,SAAS;QACrB,OAAO,EAAE,WAAW;QACpB,IAAI,EAAE,aAAa;QACnB,KAAK,EAAE,eAAe;QACtB,WAAW,EACT,uGAAuG;KAC1G;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE,sBAAsB;QACnC,MAAM,EAAE,WAAW;QACnB,UAAU,EAAE,SAAS;QACrB,OAAO,EAAE,YAAY;QACrB,IAAI,EAAE,aAAa;QACnB,KAAK,EAAE,eAAe;QACtB,WAAW,EACT,yGAAyG;KAC5G;IACD;QACE,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EAAE,0BAA0B;QACvC,MAAM,EAAE,eAAe;QACvB,UAAU,EAAE,aAAa;QACzB,OAAO,EAAE,gBAAgB;QACzB,IAAI,EAAE,aAAa;QACnB,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EACT,iHAAiH;KACpH;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE,sBAAsB;QACnC,MAAM,EAAE,UAAU;QAClB,UAAU,EAAE,QAAQ;QACpB,OAAO,EAAE,WAAW;QACpB,IAAI,EAAE,aAAa;QACnB,KAAK,EAAE,cAAc;QACrB,WAAW,EACT,uGAAuG;KAC1G;CACF,CAAC;AAEF,qFAAqF;AACrF,MAAM,CAAC,MAAM,6BAA6B,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACxE,IAAI,EAAE,CAAC,CAAC,IAAI;IACZ,WAAW,EAAE,CAAC,CAAC,WAAW;IAC1B,KAAK,EAAE,CAAC,CAAC,KAAK;IACd,MAAM,EAAE,CAAC,CAAC,MAAM;CACjB,CAAC,CAAC,CAAC;AAsCJ,oFAAoF;AACpF,SAAS,UAAU,CAAC,QAAyB;IAC3C,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC1E,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC7D,CAAC;AAED,SAAS,YAAY,CAAC,MAAe;IACnC,OAAO,MAAM,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACnE,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,qBAAqB,CAAC,SAA0B,EAAE,QAA2B;IACpF,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,MAAM,GAAG,wCAAwC,kBAAkB,6DAA6D,CAAC;IAEvI,MAAM,MAAM,GAAG,GAAW,EAAE;QAC1B,MAAM,IAAI,GAAoB,EAAE,GAAG,SAAS,EAAE,CAAC;QAC/C,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,IAAI,CAAC,QAAQ,GAAG,EAAE,QAAQ,EAAE,CAAC,GAAG,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QAC3E,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACvC,CAAC,CAAC;IAEF,MAAM,UAAU,GAAG,CAAC,IAAY,EAAW,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,kBAAkB,CAAC;IAEnG,IAAI,IAAI,GAAG,MAAM,EAAE,CAAC;IACpB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAEnC,KAAK,MAAM,GAAG,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;QAC1C,IAAI,CAAC,CAAC,GAAG,IAAI,SAAS,CAAC,QAAQ,CAAC;YAAE,SAAS;QAC3C,OAAO,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC/B,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClB,IAAI,GAAG,MAAM,EAAE,CAAC;QAChB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;IACrC,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,CAAC,eAAe,EAAE,YAAY,CAAU,EAAE,CAAC;QAC7D,IAAI,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,SAAS;YAAE,SAAS;QACpD,OAAO,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/B,OAAO,CAAC,IAAI,CAAC,UAAU,KAAK,EAAE,CAAC,CAAC;QAChC,IAAI,GAAG,MAAM,EAAE,CAAC;QAChB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;IACrC,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,QAAwB,EACxB,KAAc,EACd,GAAW,EACX,KAAe;IAEf,6EAA6E;IAC7E,sEAAsE;IACtE,MAAM,MAAM,GAAG,cAAc,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,QAAQ,CAChB,SAAS,CAAC,aAAa,EACvB,kBAAkB,QAAQ,CAAC,UAAU,oBAAoB,GAAG,qCAAqC,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAClJ,CAAC;IACJ,CAAC;IACD,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;IAEvB,MAAM,MAAM,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAG,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;IACvC,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,MAAM,IAAI,GAAG,CAAC,KAAa,EAAQ,EAAE;QACnC,IAAI,IAAI,CAAC,CAAC;QACV,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAC,UAAU,IAAI,EAAE,MAAM,KAAK,KAAK,IAAI,IAAI,KAAK,GAAG,CAAC,CAAC;IACpF,CAAC,CAAC;IAEF,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,QAAQ,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAClF,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAC,OAAO,IAAI,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAEjH,4EAA4E;IAC5E,8EAA8E;IAC9E,2CAA2C;IAC3C,MAAM,CAAC,UAAU,EAAE,GAAG,UAAU,CAAC,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;IAC9E,IAAI,UAAU,CAAC,MAAM,KAAK,UAAU;QAAE,MAAM,UAAU,CAAC,MAAM,CAAC;IAE9D,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC;IACvG,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,QAAQ,CAAC,SAAS,CAAC,aAAa,EAAE,GAAG,QAAQ,CAAC,UAAU,IAAI,EAAE,eAAe,CAAC,CAAC;IAC3F,CAAC;IAED,MAAM,SAAS,GAAoB,EAAE,GAAG,EAAE,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IACxF,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;QAC/B,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAC7B,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW;YAAE,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;;YACjF,MAAM,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC;QAAE,SAAS,CAAC,OAAO,GAAG,MAAM,CAAC;IAE/D,OAAO,qBAAqB,CAAC,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;AACzD,CAAC"}
|
package/dist/schemas/index.d.ts
CHANGED
|
@@ -685,25 +685,92 @@ export declare const AbsenceSearchSchema: z.ZodObject<{
|
|
|
685
685
|
pageSize: z.ZodDefault<z.ZodNumber>;
|
|
686
686
|
fields: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
687
687
|
}, z.core.$strict>;
|
|
688
|
+
export declare const ExpenseLineSchema: z.ZodObject<{
|
|
689
|
+
startDate: z.ZodString;
|
|
690
|
+
expenseTypeReference: z.ZodOptional<z.ZodNumber>;
|
|
691
|
+
amountIncludingTax: z.ZodOptional<z.ZodNumber>;
|
|
692
|
+
tax: z.ZodOptional<z.ZodNumber>;
|
|
693
|
+
isKilometricExpense: z.ZodDefault<z.ZodBoolean>;
|
|
694
|
+
numberOfKilometers: z.ZodOptional<z.ZodNumber>;
|
|
695
|
+
activityType: z.ZodDefault<z.ZodEnum<{
|
|
696
|
+
production: "production";
|
|
697
|
+
absence: "absence";
|
|
698
|
+
internal: "internal";
|
|
699
|
+
}>>;
|
|
700
|
+
projectId: z.ZodString;
|
|
701
|
+
deliveryId: z.ZodString;
|
|
702
|
+
batchId: z.ZodOptional<z.ZodString>;
|
|
703
|
+
reinvoiced: z.ZodDefault<z.ZodBoolean>;
|
|
704
|
+
currency: z.ZodDefault<z.ZodNumber>;
|
|
705
|
+
exchangeRate: z.ZodDefault<z.ZodNumber>;
|
|
706
|
+
title: z.ZodOptional<z.ZodString>;
|
|
707
|
+
file: z.ZodOptional<z.ZodString>;
|
|
708
|
+
}, z.core.$strict>;
|
|
688
709
|
export declare const ExpenseCreateSchema: z.ZodObject<{
|
|
689
710
|
resourceId: z.ZodString;
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
711
|
+
agencyId: z.ZodOptional<z.ZodString>;
|
|
712
|
+
term: z.ZodString;
|
|
713
|
+
exchangeRateAgency: z.ZodDefault<z.ZodNumber>;
|
|
714
|
+
currencyAgency: z.ZodOptional<z.ZodNumber>;
|
|
715
|
+
informationComments: z.ZodOptional<z.ZodString>;
|
|
716
|
+
advance: z.ZodOptional<z.ZodNumber>;
|
|
717
|
+
ratePerKilometerTypeReference: z.ZodOptional<z.ZodNumber>;
|
|
718
|
+
actualExpenses: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
719
|
+
startDate: z.ZodString;
|
|
720
|
+
expenseTypeReference: z.ZodOptional<z.ZodNumber>;
|
|
721
|
+
amountIncludingTax: z.ZodOptional<z.ZodNumber>;
|
|
722
|
+
tax: z.ZodOptional<z.ZodNumber>;
|
|
723
|
+
isKilometricExpense: z.ZodDefault<z.ZodBoolean>;
|
|
724
|
+
numberOfKilometers: z.ZodOptional<z.ZodNumber>;
|
|
725
|
+
activityType: z.ZodDefault<z.ZodEnum<{
|
|
726
|
+
production: "production";
|
|
727
|
+
absence: "absence";
|
|
728
|
+
internal: "internal";
|
|
729
|
+
}>>;
|
|
730
|
+
projectId: z.ZodString;
|
|
731
|
+
deliveryId: z.ZodString;
|
|
732
|
+
batchId: z.ZodOptional<z.ZodString>;
|
|
733
|
+
reinvoiced: z.ZodDefault<z.ZodBoolean>;
|
|
734
|
+
currency: z.ZodDefault<z.ZodNumber>;
|
|
735
|
+
exchangeRate: z.ZodDefault<z.ZodNumber>;
|
|
736
|
+
title: z.ZodOptional<z.ZodString>;
|
|
737
|
+
file: z.ZodOptional<z.ZodString>;
|
|
738
|
+
}, z.core.$strict>>>;
|
|
699
739
|
}, z.core.$strict>;
|
|
700
740
|
export declare const ExpenseUpdateSchema: z.ZodObject<{
|
|
701
741
|
id: z.ZodString;
|
|
702
|
-
term: z.ZodOptional<z.ZodString>;
|
|
703
|
-
amount: z.ZodOptional<z.ZodNumber>;
|
|
704
742
|
exchangeRateAgency: z.ZodOptional<z.ZodNumber>;
|
|
705
|
-
|
|
706
|
-
|
|
743
|
+
currencyAgency: z.ZodOptional<z.ZodNumber>;
|
|
744
|
+
informationComments: z.ZodOptional<z.ZodString>;
|
|
745
|
+
advance: z.ZodOptional<z.ZodNumber>;
|
|
746
|
+
closed: z.ZodOptional<z.ZodBoolean>;
|
|
747
|
+
ratePerKilometerTypeReference: z.ZodOptional<z.ZodNumber>;
|
|
748
|
+
actualExpenses: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
749
|
+
startDate: z.ZodString;
|
|
750
|
+
expenseTypeReference: z.ZodOptional<z.ZodNumber>;
|
|
751
|
+
amountIncludingTax: z.ZodOptional<z.ZodNumber>;
|
|
752
|
+
tax: z.ZodOptional<z.ZodNumber>;
|
|
753
|
+
isKilometricExpense: z.ZodDefault<z.ZodBoolean>;
|
|
754
|
+
numberOfKilometers: z.ZodOptional<z.ZodNumber>;
|
|
755
|
+
activityType: z.ZodDefault<z.ZodEnum<{
|
|
756
|
+
production: "production";
|
|
757
|
+
absence: "absence";
|
|
758
|
+
internal: "internal";
|
|
759
|
+
}>>;
|
|
760
|
+
projectId: z.ZodString;
|
|
761
|
+
deliveryId: z.ZodString;
|
|
762
|
+
batchId: z.ZodOptional<z.ZodString>;
|
|
763
|
+
reinvoiced: z.ZodDefault<z.ZodBoolean>;
|
|
764
|
+
currency: z.ZodDefault<z.ZodNumber>;
|
|
765
|
+
exchangeRate: z.ZodDefault<z.ZodNumber>;
|
|
766
|
+
title: z.ZodOptional<z.ZodString>;
|
|
767
|
+
file: z.ZodOptional<z.ZodString>;
|
|
768
|
+
}, z.core.$strict>>>;
|
|
769
|
+
}, z.core.$strict>;
|
|
770
|
+
export declare const ExpenseDefaultSchema: z.ZodObject<{
|
|
771
|
+
resourceId: z.ZodString;
|
|
772
|
+
term: z.ZodString;
|
|
773
|
+
agencyId: z.ZodOptional<z.ZodString>;
|
|
707
774
|
}, z.core.$strict>;
|
|
708
775
|
export declare const ExpenseSearchSchema: z.ZodObject<{
|
|
709
776
|
keywords: z.ZodOptional<z.ZodString>;
|
|
@@ -1000,10 +1067,10 @@ export declare const DocumentCreateSchema: z.ZodObject<{
|
|
|
1000
1067
|
parentType: z.ZodEnum<{
|
|
1001
1068
|
delivery: "delivery";
|
|
1002
1069
|
resource: "resource";
|
|
1070
|
+
project: "project";
|
|
1003
1071
|
order: "order";
|
|
1004
1072
|
company: "company";
|
|
1005
1073
|
candidate: "candidate";
|
|
1006
|
-
project: "project";
|
|
1007
1074
|
positioning: "positioning";
|
|
1008
1075
|
product: "product";
|
|
1009
1076
|
invoice: "invoice";
|
|
@@ -1050,4 +1117,8 @@ export type ReportingProjectsInput = z.infer<typeof ReportingProjectsSchema>;
|
|
|
1050
1117
|
export type ReportingResourcesInput = z.infer<typeof ReportingResourcesSchema>;
|
|
1051
1118
|
export type ReportingSynthesisInput = z.infer<typeof ReportingSynthesisSchema>;
|
|
1052
1119
|
export type ReportingProductionPlansInput = z.infer<typeof ReportingProductionPlansSchema>;
|
|
1120
|
+
export type ExpenseLineInput = z.infer<typeof ExpenseLineSchema>;
|
|
1121
|
+
export type ExpenseCreateInput = z.infer<typeof ExpenseCreateSchema>;
|
|
1122
|
+
export type ExpenseUpdateInput = z.infer<typeof ExpenseUpdateSchema>;
|
|
1123
|
+
export type ExpenseDefaultInput = z.infer<typeof ExpenseDefaultSchema>;
|
|
1053
1124
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"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"}
|
package/dist/schemas/index.js
CHANGED
|
@@ -1062,28 +1062,142 @@ export const AbsenceSearchSchema = z
|
|
|
1062
1062
|
})
|
|
1063
1063
|
.strict();
|
|
1064
1064
|
// ---- Expense schemas (Notes de frais) ----
|
|
1065
|
+
/**
|
|
1066
|
+
* The write model for `/expenses-reports` was verified field by field against
|
|
1067
|
+
* the live API (the RAML documents `post: description: Create an expenses` and
|
|
1068
|
+
* nothing else, and `/application/dictionary` publishes the attribute list but
|
|
1069
|
+
* not the required set).
|
|
1070
|
+
*
|
|
1071
|
+
* The entity is a **monthly container per resource** (`term` + `resource`) whose
|
|
1072
|
+
* lines live in the `actualExpenses` array — there is no such thing as a
|
|
1073
|
+
* standalone expense line endpoint. Consequences that the previous schema got
|
|
1074
|
+
* wrong, each one a 422:
|
|
1075
|
+
*
|
|
1076
|
+
* - `amount` / `expenseDate` / `typeOf` / `currency` are **line** attributes,
|
|
1077
|
+
* not report attributes. A report-level payload carrying them created nothing.
|
|
1078
|
+
* - `exchangeRateAgency` is **required** on create (`1002` otherwise).
|
|
1079
|
+
* - `note` is spelled `informationComments`.
|
|
1080
|
+
* - `state` is accepted and then **ignored**, on POST *and* PUT: the state is
|
|
1081
|
+
* moved by the validation workflow, never by a write. Exposing it as an input
|
|
1082
|
+
* promised something the API does not do, so it is gone from both schemas.
|
|
1083
|
+
* - `data.type` is ignored by the API, so the historical `"expense"` type string
|
|
1084
|
+
* was never the bug.
|
|
1085
|
+
*
|
|
1086
|
+
* A line's required set is larger than it looks: besides `startDate`,
|
|
1087
|
+
* `activityType`, `project`, `delivery` and the amount, the API also demands
|
|
1088
|
+
* `batch`, `isKilometricExpense`, `reinvoiced`, `currency` and `exchangeRate` —
|
|
1089
|
+
* it reports them in waves, one 422 per group, so a caller discovering them by
|
|
1090
|
+
* trial and error needs five round-trips. They are therefore `.default()`ed here
|
|
1091
|
+
* on their overwhelmingly common values rather than left to the model.
|
|
1092
|
+
*
|
|
1093
|
+
* `batch` is the sharp edge: it must be **present** and its `id` must be
|
|
1094
|
+
* `null` when the line is not attached to a batch. `{ id: "0" }` and `{ id: 0 }`
|
|
1095
|
+
* are both rejected (`1002`), which is why `batchId` maps to `{ id: null }`
|
|
1096
|
+
* rather than being dropped like every other undefined value.
|
|
1097
|
+
*
|
|
1098
|
+
* HT/VAT: `amountIncludingTax` (TTC) and `tax` (a **rate** in %, not an amount)
|
|
1099
|
+
* are what persist. `amountExcludingTax` and `taxAmount` are accepted on write
|
|
1100
|
+
* and silently recomputed — they are not echoed back — so there is nothing to
|
|
1101
|
+
* add for them and nothing is lost by omitting them.
|
|
1102
|
+
*/
|
|
1103
|
+
const EXPENSE_ACTIVITY_TYPES = ["production", "internal", "absence"];
|
|
1104
|
+
export const ExpenseLineSchema = z
|
|
1105
|
+
.object({
|
|
1106
|
+
startDate: z
|
|
1107
|
+
.string()
|
|
1108
|
+
.regex(/^\d{4}-\d{2}-\d{2}$/)
|
|
1109
|
+
.describe("Date du frais (YYYY-MM-DD). Doit tomber dans le mois `term` de la note de frais."),
|
|
1110
|
+
expenseTypeReference: z
|
|
1111
|
+
.number()
|
|
1112
|
+
.int()
|
|
1113
|
+
.optional()
|
|
1114
|
+
.describe("Code du type de frais (`reference`), à lire via `boond_expenses_default` — " +
|
|
1115
|
+
"les types de frais sont définis par agence et ne figurent PAS dans `boond_application_dictionary`. " +
|
|
1116
|
+
"À omettre pour un frais kilométrique."),
|
|
1117
|
+
amountIncludingTax: z
|
|
1118
|
+
.number()
|
|
1119
|
+
.optional()
|
|
1120
|
+
.describe("Montant TTC. Ignoré pour un frais kilométrique (recalculé = km × barème)."),
|
|
1121
|
+
tax: z
|
|
1122
|
+
.number()
|
|
1123
|
+
.optional()
|
|
1124
|
+
.describe("Taux de TVA en % (ex: 20 pour 20 %) — un taux, pas un montant. Défaut API: 0."),
|
|
1125
|
+
isKilometricExpense: z
|
|
1126
|
+
.boolean()
|
|
1127
|
+
.default(false)
|
|
1128
|
+
.describe("`true` pour un frais kilométrique : renseigner `numberOfKilometers` et omettre `expenseTypeReference`."),
|
|
1129
|
+
numberOfKilometers: z.number().optional().describe("Nombre de kilomètres (frais kilométrique uniquement)."),
|
|
1130
|
+
activityType: z.enum(EXPENSE_ACTIVITY_TYPES).default("production").describe("Type d'activité rattachée au frais."),
|
|
1131
|
+
projectId: z
|
|
1132
|
+
.string()
|
|
1133
|
+
.min(1)
|
|
1134
|
+
.describe("ID du projet à imputer. Obligatoire — les couples (projet, prestation) autorisés sont donnés par `boond_expenses_default`."),
|
|
1135
|
+
deliveryId: z
|
|
1136
|
+
.string()
|
|
1137
|
+
.min(1)
|
|
1138
|
+
.describe("ID de la prestation (delivery) à imputer. Obligatoire — voir `boond_expenses_default`."),
|
|
1139
|
+
batchId: z.string().optional().describe("ID du lot. Absent = aucun lot."),
|
|
1140
|
+
reinvoiced: z.boolean().default(false).describe("Frais refacturable au client."),
|
|
1141
|
+
currency: z.number().int().default(0).describe("ID de devise (`setting.currency`, 0 = EUR)."),
|
|
1142
|
+
exchangeRate: z.number().default(1).describe("Taux de change vers la devise agence."),
|
|
1143
|
+
title: z.string().optional().describe("Description libre de la ligne (marchand, motif, invités...)."),
|
|
1144
|
+
file: z
|
|
1145
|
+
.string()
|
|
1146
|
+
.optional()
|
|
1147
|
+
.describe("ID du justificatif déjà téléversé, suffixé (ex: `52979_proof`). " +
|
|
1148
|
+
"Un fichier doit d'abord être créé via `boond_documents_create` (`parentType: 'expensesReport'`)."),
|
|
1149
|
+
})
|
|
1150
|
+
.strict();
|
|
1065
1151
|
export const ExpenseCreateSchema = z
|
|
1066
1152
|
.object({
|
|
1067
|
-
resourceId: z.string().min(1).describe("ID de la ressource"),
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1153
|
+
resourceId: z.string().min(1).describe("ID de la ressource (le collaborateur qui a engagé les frais)."),
|
|
1154
|
+
agencyId: z
|
|
1155
|
+
.string()
|
|
1156
|
+
.optional()
|
|
1157
|
+
.describe("ID de l'agence — voir `boond_expenses_default`. Déduit de la ressource si omis."),
|
|
1158
|
+
term: z
|
|
1159
|
+
.string()
|
|
1160
|
+
.regex(/^\d{4}-\d{2}$/)
|
|
1161
|
+
.describe("Mois de la note de frais (YYYY-MM). Une note de frais = un mois × une ressource."),
|
|
1162
|
+
exchangeRateAgency: z.number().default(1).describe("Taux de change agence. Obligatoire côté API."),
|
|
1163
|
+
currencyAgency: z.number().int().optional().describe("ID de devise de l'agence (`setting.currency`)."),
|
|
1164
|
+
informationComments: z.string().optional().describe("Commentaires de la note de frais."),
|
|
1165
|
+
advance: z.number().optional().describe("Avance à reprendre."),
|
|
1166
|
+
ratePerKilometerTypeReference: z
|
|
1167
|
+
.number()
|
|
1168
|
+
.int()
|
|
1169
|
+
.optional()
|
|
1170
|
+
.describe("Code du barème kilométrique (`reference`) — voir `boond_expenses_default`."),
|
|
1171
|
+
actualExpenses: z
|
|
1172
|
+
.array(ExpenseLineSchema)
|
|
1173
|
+
.optional()
|
|
1174
|
+
.describe("Lignes de frais réels. Omettre pour créer une note de frais vide."),
|
|
1077
1175
|
})
|
|
1078
1176
|
.strict();
|
|
1079
1177
|
export const ExpenseUpdateSchema = z
|
|
1080
1178
|
.object({
|
|
1081
1179
|
id: z.string().min(1).describe("ID de la note de frais à modifier"),
|
|
1082
|
-
term: z.string().optional().describe("Période de la note de frais (YYYY-MM)"),
|
|
1083
|
-
amount: z.number().optional().describe("Montant"),
|
|
1084
1180
|
exchangeRateAgency: z.number().optional().describe("Taux de change agence"),
|
|
1085
|
-
|
|
1086
|
-
|
|
1181
|
+
currencyAgency: z.number().int().optional().describe("ID de devise de l'agence"),
|
|
1182
|
+
informationComments: z.string().optional().describe("Commentaires"),
|
|
1183
|
+
advance: z.number().optional().describe("Avance à reprendre"),
|
|
1184
|
+
closed: z.boolean().optional().describe("Clôturer la note de frais"),
|
|
1185
|
+
ratePerKilometerTypeReference: z.number().int().optional().describe("Code du barème kilométrique"),
|
|
1186
|
+
actualExpenses: z
|
|
1187
|
+
.array(ExpenseLineSchema)
|
|
1188
|
+
.optional()
|
|
1189
|
+
.describe("⚠️ REMPLACE l'intégralité des lignes existantes. Pour ajouter une ligne, relire la note via " +
|
|
1190
|
+
"`boond_expenses_get` et renvoyer l'ensemble des lignes. Omettre pour ne toucher qu'aux autres champs."),
|
|
1191
|
+
})
|
|
1192
|
+
.strict();
|
|
1193
|
+
export const ExpenseDefaultSchema = z
|
|
1194
|
+
.object({
|
|
1195
|
+
resourceId: z.string().min(1).describe("ID de la ressource"),
|
|
1196
|
+
term: z
|
|
1197
|
+
.string()
|
|
1198
|
+
.regex(/^\d{4}-\d{2}$/)
|
|
1199
|
+
.describe("Mois ciblé (YYYY-MM)"),
|
|
1200
|
+
agencyId: z.string().optional().describe("ID de l'agence (optionnel — déduit de la ressource)"),
|
|
1087
1201
|
})
|
|
1088
1202
|
.strict();
|
|
1089
1203
|
export const ExpenseSearchSchema = z
|