@qcobro/common 1.20.2 → 1.22.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/dist/schemas/email.d.ts +10 -5
- package/dist/schemas/email.d.ts.map +1 -1
- package/dist/schemas/email.js +10 -5
- package/dist/schemas/email.js.map +1 -1
- package/dist/types/email.d.ts +4 -4
- package/dist/types/email.d.ts.map +1 -1
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -1
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/outreach.d.ts +13 -0
- package/dist/utils/outreach.d.ts.map +1 -1
- package/dist/utils/outreach.js +54 -0
- package/dist/utils/outreach.js.map +1 -1
- package/package.json +1 -1
package/dist/schemas/email.d.ts
CHANGED
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
/**
|
|
3
|
-
* The structured decision the EMAIL
|
|
4
|
-
* model can't drive the loop with malformed output. `outcome` mirrors the
|
|
5
|
-
* outcomes; `objective` carries promise details when the reply implies one.
|
|
3
|
+
* The structured decision the EMAIL/WHATSAPP autopilots return for an inbound reply.
|
|
4
|
+
* Validated so a model can't drive the loop with malformed output. `outcome` mirrors the
|
|
5
|
+
* contact-log outcomes; `objective` carries promise details when the reply implies one.
|
|
6
|
+
*
|
|
7
|
+
* `replyBody`/`outcome`/`objective` use `.nullish()`, not `.optional()`: Gemini's
|
|
8
|
+
* `responseMimeType: "application/json"` mode fills every key it considered rather than
|
|
9
|
+
* omitting the ones that don't apply, so a plain reply with no outcome comes back as
|
|
10
|
+
* `"outcome": null` (not an absent key) — `.optional()` alone rejects that.
|
|
6
11
|
*/
|
|
7
12
|
export declare const emailAutopilotDecisionSchema: z.ZodObject<{
|
|
8
13
|
action: z.ZodEnum<{
|
|
@@ -11,8 +16,8 @@ export declare const emailAutopilotDecisionSchema: z.ZodObject<{
|
|
|
11
16
|
resolve: "resolve";
|
|
12
17
|
escalate: "escalate";
|
|
13
18
|
}>;
|
|
14
|
-
replyBody: z.ZodOptional<z.ZodString
|
|
15
|
-
outcome: z.ZodOptional<z.ZodString
|
|
19
|
+
replyBody: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
20
|
+
outcome: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
16
21
|
objective: z.ZodOptional<z.ZodNullable<z.ZodObject<{
|
|
17
22
|
type: z.ZodString;
|
|
18
23
|
amount: z.ZodOptional<z.ZodNumber>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"email.d.ts","sourceRoot":"","sources":["../../src/schemas/email.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB
|
|
1
|
+
{"version":3,"file":"email.d.ts","sourceRoot":"","sources":["../../src/schemas/email.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;;;;;GASG;AACH,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;iBAYvC,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;iBAS7B,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC"}
|
package/dist/schemas/email.js
CHANGED
|
@@ -1,13 +1,18 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
/**
|
|
3
|
-
* The structured decision the EMAIL
|
|
4
|
-
* model can't drive the loop with malformed output. `outcome` mirrors the
|
|
5
|
-
* outcomes; `objective` carries promise details when the reply implies one.
|
|
3
|
+
* The structured decision the EMAIL/WHATSAPP autopilots return for an inbound reply.
|
|
4
|
+
* Validated so a model can't drive the loop with malformed output. `outcome` mirrors the
|
|
5
|
+
* contact-log outcomes; `objective` carries promise details when the reply implies one.
|
|
6
|
+
*
|
|
7
|
+
* `replyBody`/`outcome`/`objective` use `.nullish()`, not `.optional()`: Gemini's
|
|
8
|
+
* `responseMimeType: "application/json"` mode fills every key it considered rather than
|
|
9
|
+
* omitting the ones that don't apply, so a plain reply with no outcome comes back as
|
|
10
|
+
* `"outcome": null` (not an absent key) — `.optional()` alone rejects that.
|
|
6
11
|
*/
|
|
7
12
|
export const emailAutopilotDecisionSchema = z.object({
|
|
8
13
|
action: z.enum(["reply", "ignore", "resolve", "escalate"]),
|
|
9
|
-
replyBody: z.string().
|
|
10
|
-
outcome: z.string().
|
|
14
|
+
replyBody: z.string().nullish(),
|
|
15
|
+
outcome: z.string().nullish(),
|
|
11
16
|
objective: z
|
|
12
17
|
.object({
|
|
13
18
|
type: z.string(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"email.js","sourceRoot":"","sources":["../../src/schemas/email.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB
|
|
1
|
+
{"version":3,"file":"email.js","sourceRoot":"","sources":["../../src/schemas/email.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC,MAAM,CAAC;IACnD,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IAC1D,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE;IAC/B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE;IAC7B,SAAS,EAAE,CAAC;SACT,MAAM,CAAC;QACN,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;QAChB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC7B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC9B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAC5B,CAAC;SACD,OAAO,EAAE;CACb,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACnC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IAC5B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC1C,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;CACrD,CAAC,CAAC"}
|
package/dist/types/email.d.ts
CHANGED
|
@@ -27,10 +27,10 @@ export type EmailAutopilotAction = "reply" | "ignore" | "resolve" | "escalate";
|
|
|
27
27
|
/** Structured result of the autopilot decision step over a thread. */
|
|
28
28
|
export interface EmailAutopilotDecision {
|
|
29
29
|
action: EmailAutopilotAction;
|
|
30
|
-
/** Present when `action === "reply"`. */
|
|
31
|
-
replyBody?: string;
|
|
32
|
-
/** Outcome to record on the gestión, when the reply implies one. */
|
|
33
|
-
outcome?: string;
|
|
30
|
+
/** Present when `action === "reply"`. Gemini's JSON mode may send `null` instead of omitting. */
|
|
31
|
+
replyBody?: string | null;
|
|
32
|
+
/** Outcome to record on the gestión, when the reply implies one. May come back `null`. */
|
|
33
|
+
outcome?: string | null;
|
|
34
34
|
/** Promise/objective details to capture, when applicable. */
|
|
35
35
|
objective?: {
|
|
36
36
|
type: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"email.d.ts","sourceRoot":"","sources":["../../src/types/email.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,sCAAsC;AACtC,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,UAAU,GAAG,SAAS,CAAC;IAClC,4DAA4D;IAC5D,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qFAAqF;AACrF,MAAM,WAAW,WAAW;IAC1B,gEAAgE;IAChE,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,kBAAkB,EAAE,CAAC;IAC/B,8EAA8E;IAC9E,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,gEAAgE;AAChE,MAAM,MAAM,oBAAoB,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAC;AAE/E,sEAAsE;AACtE,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,oBAAoB,CAAC;IAC7B,
|
|
1
|
+
{"version":3,"file":"email.d.ts","sourceRoot":"","sources":["../../src/types/email.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,sCAAsC;AACtC,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,UAAU,GAAG,SAAS,CAAC;IAClC,4DAA4D;IAC5D,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qFAAqF;AACrF,MAAM,WAAW,WAAW;IAC1B,gEAAgE;IAChE,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,kBAAkB,EAAE,CAAC;IAC/B,8EAA8E;IAC9E,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,gEAAgE;AAChE,MAAM,MAAM,oBAAoB,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAC;AAE/E,sEAAsE;AACtE,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,oBAAoB,CAAC;IAC7B,iGAAiG;IACjG,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,0FAA0F;IAC1F,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,6DAA6D;IAC7D,SAAS,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CACvF;AAED,gDAAgD;AAChD,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,kBAAkB,EAAE,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,sFAAsF;AACtF,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,GAAG,EAAE,qBAAqB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;CACrE;AAED,sEAAsE;AACtE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,EAAE,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,yFAAyF;IACzF,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC"}
|
package/dist/utils/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { withErrorHandlingAndValidation } from "./withErrorHandlingAndValidation.js";
|
|
2
|
-
export { renderTemplate, extractTemplateTokens, buildOutreachContext, pickRandomNumber, snakeToCamel, renderWhatsAppTemplate } from "./outreach.js";
|
|
2
|
+
export { renderTemplate, extractTemplateTokens, buildOutreachContext, buildAutopilotContextLines, pickRandomNumber, snakeToCamel, renderWhatsAppTemplate } from "./outreach.js";
|
|
3
3
|
export { localParts, localDateString, isSameLocalDay, localWeekdayISO, localTimeHHMM, isWithinScheduleWindow, type ScheduleWindow } from "./time.js";
|
|
4
4
|
export { bucketOf, perTickCapacity, type PacingBucket } from "./pacing.js";
|
|
5
5
|
export { normalizePhoneE164 } from "./normalizePhone.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,8BAA8B,EAAE,MAAM,qCAAqC,CAAC;AACrF,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,oBAAoB,EACpB,gBAAgB,EAChB,YAAY,EACZ,sBAAsB,EACvB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,UAAU,EACV,eAAe,EACf,cAAc,EACd,eAAe,EACf,aAAa,EACb,sBAAsB,EACtB,KAAK,cAAc,EACpB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,8BAA8B,EAAE,MAAM,qCAAqC,CAAC;AACrF,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,oBAAoB,EACpB,0BAA0B,EAC1B,gBAAgB,EAChB,YAAY,EACZ,sBAAsB,EACvB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,UAAU,EACV,eAAe,EACf,cAAc,EACd,eAAe,EACf,aAAa,EACb,sBAAsB,EACtB,KAAK,cAAc,EACpB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC"}
|
package/dist/utils/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { withErrorHandlingAndValidation } from "./withErrorHandlingAndValidation.js";
|
|
2
|
-
export { renderTemplate, extractTemplateTokens, buildOutreachContext, pickRandomNumber, snakeToCamel, renderWhatsAppTemplate } from "./outreach.js";
|
|
2
|
+
export { renderTemplate, extractTemplateTokens, buildOutreachContext, buildAutopilotContextLines, pickRandomNumber, snakeToCamel, renderWhatsAppTemplate } from "./outreach.js";
|
|
3
3
|
export { localParts, localDateString, isSameLocalDay, localWeekdayISO, localTimeHHMM, isWithinScheduleWindow } from "./time.js";
|
|
4
4
|
export { bucketOf, perTickCapacity } from "./pacing.js";
|
|
5
5
|
export { normalizePhoneE164 } from "./normalizePhone.js";
|
package/dist/utils/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,8BAA8B,EAAE,MAAM,qCAAqC,CAAC;AACrF,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,oBAAoB,EACpB,gBAAgB,EAChB,YAAY,EACZ,sBAAsB,EACvB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,UAAU,EACV,eAAe,EACf,cAAc,EACd,eAAe,EACf,aAAa,EACb,sBAAsB,EAEvB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAqB,MAAM,aAAa,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,8BAA8B,EAAE,MAAM,qCAAqC,CAAC;AACrF,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,oBAAoB,EACpB,0BAA0B,EAC1B,gBAAgB,EAChB,YAAY,EACZ,sBAAsB,EACvB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,UAAU,EACV,eAAe,EACf,cAAc,EACd,eAAe,EACf,aAAa,EACb,sBAAsB,EAEvB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAqB,MAAM,aAAa,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC"}
|
package/dist/utils/outreach.d.ts
CHANGED
|
@@ -37,6 +37,19 @@ export declare function extractTemplateTokens(template: string): string[];
|
|
|
37
37
|
export declare function buildOutreachContext(account: PortfolioAccountRecord, opts: {
|
|
38
38
|
currency: string;
|
|
39
39
|
}): Record<string, unknown>;
|
|
40
|
+
/**
|
|
41
|
+
* Builds the "Contexto — ..." bullet lines an autopilot prompt (WhatsApp/Email) shows the
|
|
42
|
+
* model, from a {@link buildOutreachContext} result. Only factual account/loan data the
|
|
43
|
+
* customer already has a right to see — never `negotiationOptions` (internal, freeform
|
|
44
|
+
* admin notes on negotiation flexibility, not safe for the model to repeat verbatim).
|
|
45
|
+
*
|
|
46
|
+
* Skips fields that aren't meaningful for the current account (e.g. `daysPastDue` when the
|
|
47
|
+
* account isn't past due) so the model isn't fed noise, but always includes the ones that
|
|
48
|
+
* let it answer basic loan questions (balance, terms, due status, last payment) instead of
|
|
49
|
+
* just the outstanding balance — the model otherwise has nothing to work with beyond the
|
|
50
|
+
* balance and can't answer "how much do I owe in total" or "when's my next payment due".
|
|
51
|
+
*/
|
|
52
|
+
export declare function buildAutopilotContextLines(context: Record<string, unknown> | undefined): string[];
|
|
40
53
|
/** Default number selector: a uniform random pick from the pool. */
|
|
41
54
|
export declare const pickRandomNumber: NumberSelector;
|
|
42
55
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"outreach.d.ts","sourceRoot":"","sources":["../../src/utils/outreach.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAyDlF;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAQzF;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAQhE;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,sBAAsB,EAC/B,IAAI,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,GACzB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAQzB;AAED,oEAAoE;AACpE,eAAO,MAAM,gBAAgB,EAAE,cACsB,CAAC;AAEtD;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAElD;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,qBAAqB,EAAE,CAAA;CAAE,CAa3D"}
|
|
1
|
+
{"version":3,"file":"outreach.d.ts","sourceRoot":"","sources":["../../src/utils/outreach.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAyDlF;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAQzF;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAQhE;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,sBAAsB,EAC/B,IAAI,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,GACzB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAQzB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,MAAM,EAAE,CA6CjG;AAED,oEAAoE;AACpE,eAAO,MAAM,gBAAgB,EAAE,cACsB,CAAC;AAEtD;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAElD;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,qBAAqB,EAAE,CAAA;CAAE,CAa3D"}
|
package/dist/utils/outreach.js
CHANGED
|
@@ -111,6 +111,60 @@ export function buildOutreachContext(account, opts) {
|
|
|
111
111
|
isDue: account.daysPastDue > 0
|
|
112
112
|
};
|
|
113
113
|
}
|
|
114
|
+
/**
|
|
115
|
+
* Builds the "Contexto — ..." bullet lines an autopilot prompt (WhatsApp/Email) shows the
|
|
116
|
+
* model, from a {@link buildOutreachContext} result. Only factual account/loan data the
|
|
117
|
+
* customer already has a right to see — never `negotiationOptions` (internal, freeform
|
|
118
|
+
* admin notes on negotiation flexibility, not safe for the model to repeat verbatim).
|
|
119
|
+
*
|
|
120
|
+
* Skips fields that aren't meaningful for the current account (e.g. `daysPastDue` when the
|
|
121
|
+
* account isn't past due) so the model isn't fed noise, but always includes the ones that
|
|
122
|
+
* let it answer basic loan questions (balance, terms, due status, last payment) instead of
|
|
123
|
+
* just the outstanding balance — the model otherwise has nothing to work with beyond the
|
|
124
|
+
* balance and can't answer "how much do I owe in total" or "when's my next payment due".
|
|
125
|
+
*/
|
|
126
|
+
export function buildAutopilotContextLines(context) {
|
|
127
|
+
if (!context)
|
|
128
|
+
return [];
|
|
129
|
+
const lines = [];
|
|
130
|
+
const currency = typeof context.currency === "string" ? ` ${context.currency}` : "";
|
|
131
|
+
if (typeof context.firstName === "string" && context.firstName) {
|
|
132
|
+
lines.push(`Cliente: ${context.firstName}`);
|
|
133
|
+
}
|
|
134
|
+
if (typeof context.outstandingBalance === "number") {
|
|
135
|
+
lines.push(`Saldo pendiente: ${context.outstandingBalance}${currency}`);
|
|
136
|
+
}
|
|
137
|
+
if (typeof context.principalAmount === "number" && context.principalAmount > 0) {
|
|
138
|
+
lines.push(`Monto original del préstamo: ${context.principalAmount}${currency}`);
|
|
139
|
+
}
|
|
140
|
+
if (typeof context.termsAmount === "number" && context.termsAmount > 0) {
|
|
141
|
+
const freq = typeof context.termsFrequency === "string" && context.termsFrequency
|
|
142
|
+
? ` (${context.termsFrequency})`
|
|
143
|
+
: "";
|
|
144
|
+
lines.push(`Cuota: ${context.termsAmount}${currency}${freq}`);
|
|
145
|
+
}
|
|
146
|
+
if (typeof context.termsLength === "number" && context.termsLength > 0) {
|
|
147
|
+
lines.push(`Plazo: ${context.termsLength} cuotas`);
|
|
148
|
+
}
|
|
149
|
+
if (typeof context.daysPastDue === "number" && context.daysPastDue > 0) {
|
|
150
|
+
lines.push(`Días de atraso: ${context.daysPastDue}`);
|
|
151
|
+
}
|
|
152
|
+
if (typeof context.missedInstallments === "number" && context.missedInstallments > 0) {
|
|
153
|
+
lines.push(`Cuotas incumplidas: ${context.missedInstallments}`);
|
|
154
|
+
}
|
|
155
|
+
if (context.lastPaymentDate) {
|
|
156
|
+
const date = context.lastPaymentDate instanceof Date
|
|
157
|
+
? context.lastPaymentDate
|
|
158
|
+
: new Date(context.lastPaymentDate);
|
|
159
|
+
if (!Number.isNaN(date.getTime())) {
|
|
160
|
+
const amount = typeof context.lastPaymentAmount === "number"
|
|
161
|
+
? ` de ${context.lastPaymentAmount}${currency}`
|
|
162
|
+
: "";
|
|
163
|
+
lines.push(`Último pago${amount}: ${date.toISOString().slice(0, 10)}`);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
return lines;
|
|
167
|
+
}
|
|
114
168
|
/** Default number selector: a uniform random pick from the pool. */
|
|
115
169
|
export const pickRandomNumber = (numbers) => numbers[Math.floor(Math.random() * numbers.length)];
|
|
116
170
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"outreach.js","sourceRoot":"","sources":["../../src/utils/outreach.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,YAAY,CAAC;AAIpC;;;;GAIG;AACH,UAAU,CAAC,cAAc,CAAC,UAAU,EAAE,CAAC,CAAU,EAAE,CAAU,EAAE,EAAE;IAC/D,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACpB,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACpB,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9D,CAAC,CAAC,CAAC;AAEH;;;GAGG;AACH,UAAU,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAU,EAAE,CAAU,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAErE;;;;;;;GAOG;AACH,UAAU,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAU,EAAE,CAAU,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACnF,UAAU,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC,CAAU,EAAE,CAAU,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACrF,UAAU,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAU,EAAE,CAAU,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACpF,UAAU,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAU,EAAE,CAAU,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACnF,UAAU,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC,CAAU,EAAE,CAAU,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAErF,MAAM,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAEnC,SAAS,MAAM,CAAC,KAAc;IAC5B,IAAI,KAAK,YAAY,IAAI;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;IAC/E,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACxE,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/B,OAAO,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;AACxD,CAAC;AAED;;;;;GAKG;AACH,UAAU,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC,KAAc,EAAE,EAAE;IACxD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC3B,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvE,CAAC,CAAC,CAAC;AACH,UAAU,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC,KAAc,EAAE,EAAE;IACxD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC3B,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvE,CAAC,CAAC,CAAC;AAEH;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,cAAc,CAAC,QAAgB,EAAE,OAAgC;IAC/E,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAClE,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,wBAAwB,OAAO,GAAG,CAAC;IAC5C,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CAAC,QAAgB;IACpD,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,EAAE,GAAG,kCAAkC,CAAC;IAC9C,IAAI,KAA6B,CAAC;IAClC,OAAO,CAAC,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAC5C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,oBAAoB,CAClC,OAA+B,EAC/B,IAA0B;IAE1B,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAChE,OAAO;QACL,GAAG,OAAO;QACV,SAAS;QACT,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,KAAK,EAAE,OAAO,CAAC,WAAW,GAAG,CAAC;KAC/B,CAAC;AACJ,CAAC;AAED,oEAAoE;AACpE,MAAM,CAAC,MAAM,gBAAgB,GAAmB,CAAC,OAAO,EAAE,EAAE,CAC1D,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;AAEtD;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,OAAO,KAAK,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC,EAAE,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;AAC7E,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CACpC,IAAY,EACZ,OAAgC;IAEhC,MAAM,MAAM,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACzD,aAAa,EAAE,KAAK;QACpB,IAAI,EAAE,cAAc,CAAC,KAAK,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC;KAC5D,CAAC,CAAC,CAAC;IACJ,IAAI,YAAY,GAAG,IAAI,CAAC;IACxB,KAAK,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,MAAM,EAAE,CAAC;QAC7C,YAAY,GAAG,YAAY,CAAC,OAAO,CACjC,IAAI,MAAM,CAAC,aAAa,aAAa,YAAY,EAAE,GAAG,CAAC,EACvD,IAAI,CACL,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC;AAClC,CAAC"}
|
|
1
|
+
{"version":3,"file":"outreach.js","sourceRoot":"","sources":["../../src/utils/outreach.ts"],"names":[],"mappings":"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"}
|