evo360-types 1.3.557 → 1.3.559
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/apps/evo-finops/zod-schemas.d.ts +85 -0
- package/dist/apps/evo-finops/zod-schemas.js +50 -1
- package/dist/apps/evo-finops/zod-schemas.ts +58 -0
- package/dist/types/evo-finops/common/contract.d.ts +92 -0
- package/dist/types/evo-finops/common/contract.js +14 -1
- package/dist/types/evo-finops/common/contract.ts +95 -0
- package/package.json +1 -1
|
@@ -12993,3 +12993,88 @@ export declare const zNexVendasJourneyPaymentSchema: z.ZodObject<{
|
|
|
12993
12993
|
payment_link_id?: string | null | undefined;
|
|
12994
12994
|
}[] | null | undefined;
|
|
12995
12995
|
}>;
|
|
12996
|
+
/**
|
|
12997
|
+
* Franquia de uma métrica no contrato. `included` é número discreto e inteiro
|
|
12998
|
+
* (não fração): 0 = nada incluso.
|
|
12999
|
+
*/
|
|
13000
|
+
export declare const zNexFinopsContractAllowanceSchema: z.ZodObject<{
|
|
13001
|
+
included: z.ZodNumber;
|
|
13002
|
+
/** Reservado para a feat-150 cheia (preço do excedente). Não usar ainda. */
|
|
13003
|
+
unit_price_excess: z.ZodNullable<z.ZodOptional<z.ZodNumber>>;
|
|
13004
|
+
}, "strip", z.ZodTypeAny, {
|
|
13005
|
+
included: number;
|
|
13006
|
+
unit_price_excess?: number | null | undefined;
|
|
13007
|
+
}, {
|
|
13008
|
+
included: number;
|
|
13009
|
+
unit_price_excess?: number | null | undefined;
|
|
13010
|
+
}>;
|
|
13011
|
+
/**
|
|
13012
|
+
* Mapa de franquias por métrica. A chave é `string` de propósito (ver
|
|
13013
|
+
* `NexFinopsMetricCatalog`): métrica nova é linha de catálogo, não publish do
|
|
13014
|
+
* evo-types. Métrica ausente = não contratada ⇒ não alerta.
|
|
13015
|
+
*/
|
|
13016
|
+
export declare const zNexFinopsContractAllowancesSchema: z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
13017
|
+
included: z.ZodNumber;
|
|
13018
|
+
/** Reservado para a feat-150 cheia (preço do excedente). Não usar ainda. */
|
|
13019
|
+
unit_price_excess: z.ZodNullable<z.ZodOptional<z.ZodNumber>>;
|
|
13020
|
+
}, "strip", z.ZodTypeAny, {
|
|
13021
|
+
included: number;
|
|
13022
|
+
unit_price_excess?: number | null | undefined;
|
|
13023
|
+
}, {
|
|
13024
|
+
included: number;
|
|
13025
|
+
unit_price_excess?: number | null | undefined;
|
|
13026
|
+
}>>;
|
|
13027
|
+
/**
|
|
13028
|
+
* Gatilho de alerta: **fração** da franquia, não percentual — `0.8` é 80%.
|
|
13029
|
+
* `0` é rejeitado porque dispararia em qualquer consumo.
|
|
13030
|
+
*/
|
|
13031
|
+
export declare const zNexFinopsAlertThresholdSchema: z.ZodNumber;
|
|
13032
|
+
/** Doc `platform/evo-billing/usage-alerts/config` — default herdado por todos os contratos. */
|
|
13033
|
+
export declare const zNexFinopsUsageAlertDefaultsSchema: z.ZodObject<{
|
|
13034
|
+
enabled: z.ZodBoolean;
|
|
13035
|
+
thresholds: z.ZodArray<z.ZodNumber, "many">;
|
|
13036
|
+
}, "strip", z.ZodTypeAny, {
|
|
13037
|
+
enabled: boolean;
|
|
13038
|
+
thresholds: number[];
|
|
13039
|
+
}, {
|
|
13040
|
+
enabled: boolean;
|
|
13041
|
+
thresholds: number[];
|
|
13042
|
+
}>;
|
|
13043
|
+
/**
|
|
13044
|
+
* Fragmento de escrita dos campos de franquia/alerta do contrato, para compor
|
|
13045
|
+
* (`.merge()`) nos schemas de create/update/upsert de contrato do
|
|
13046
|
+
* `@evo/nex-model`. Campo que não entra no schema de patch é aceito e
|
|
13047
|
+
* descartado em silêncio.
|
|
13048
|
+
*
|
|
13049
|
+
* `alerts_enabled` e `alert_thresholds` ausentes significam **herda o default
|
|
13050
|
+
* global** — nunca `false`/lista vazia.
|
|
13051
|
+
*/
|
|
13052
|
+
export declare const zNexFinopsContractAllowancesWriteSchema: z.ZodObject<{
|
|
13053
|
+
allowances: z.ZodNullable<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
13054
|
+
included: z.ZodNumber;
|
|
13055
|
+
/** Reservado para a feat-150 cheia (preço do excedente). Não usar ainda. */
|
|
13056
|
+
unit_price_excess: z.ZodNullable<z.ZodOptional<z.ZodNumber>>;
|
|
13057
|
+
}, "strip", z.ZodTypeAny, {
|
|
13058
|
+
included: number;
|
|
13059
|
+
unit_price_excess?: number | null | undefined;
|
|
13060
|
+
}, {
|
|
13061
|
+
included: number;
|
|
13062
|
+
unit_price_excess?: number | null | undefined;
|
|
13063
|
+
}>>>>;
|
|
13064
|
+
alerts_enabled: z.ZodNullable<z.ZodOptional<z.ZodBoolean>>;
|
|
13065
|
+
alert_thresholds: z.ZodNullable<z.ZodOptional<z.ZodArray<z.ZodNumber, "many">>>;
|
|
13066
|
+
}, "strip", z.ZodTypeAny, {
|
|
13067
|
+
allowances?: Record<string, {
|
|
13068
|
+
included: number;
|
|
13069
|
+
unit_price_excess?: number | null | undefined;
|
|
13070
|
+
}> | null | undefined;
|
|
13071
|
+
alerts_enabled?: boolean | null | undefined;
|
|
13072
|
+
alert_thresholds?: number[] | null | undefined;
|
|
13073
|
+
}, {
|
|
13074
|
+
allowances?: Record<string, {
|
|
13075
|
+
included: number;
|
|
13076
|
+
unit_price_excess?: number | null | undefined;
|
|
13077
|
+
}> | null | undefined;
|
|
13078
|
+
alerts_enabled?: boolean | null | undefined;
|
|
13079
|
+
alert_thresholds?: number[] | null | undefined;
|
|
13080
|
+
}>;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.zProviderInvoiceLinksSchema = exports.zServiceTaxInfoSchema = exports.zServiceLineItemSchema = exports.zServiceInvoiceStateSchema = exports.zProviderServiceInvoiceStatusSchema = exports.zExternalLinkSchema = exports.zExternalObjectTypeSchema = exports.zInvoiceSourceRefSchema = exports.zInvoiceSourceTypeSchema = exports.zInvoiceTakerRefSchema = exports.zInvoiceTakerSnapshotSchema = exports.zInvoiceTakerSnapshotAddressSchema = exports.zTakerDocumentSchema = exports.zTakerTaxProfileSchema = exports.zTakerProviderRefsSchema = exports.zTakerAddressSchema = exports.zInvoiceTakerTypeSchema = exports.zServiceSchema = exports.zCustomerServiceTaxInfoSchema = exports.zIssuerTaxProfileSchema = exports.zIssuerNfseConfigSchema = exports.zIssuerMunicipalCredentialsRefSchema = exports.zIssuerTaxRegimeSchema = exports.zIssuerCompanyIdentitySchema = exports.zIssuerCompanyAddressSchema = exports.zTaxProfileSyncStateSchema = exports.zAsaasProviderSchema = exports.zAsaasProviderAsaasBlockSchema = exports.zAsaasProviderCapabilitiesSchema = exports.zAsaasPaymentsCapabilitiesSchema = exports.zAsaasNfseCapabilitiesSchema = exports.zAsaasEnvAuthConfigSchema = exports.zAsaasSubaccountInputSchema = exports.zAsaasAccountScopeSchema = exports.zAsaasWebhookConfigSchema = exports.zRetryPolicySchema = exports.zAsaasWebhookEventSchema = exports.zAsaasAccountScopeModeSchema = exports.zProviderRemoteRefsSchema = exports.zProviderFiscalInfoPayloadSchema = exports.zProviderCredentialsInputSchema = exports.zProviderCredentialsSecretRefsSchema = exports.zProviderMunicipalOptionsSnapshotSchema = exports.zProviderOptionItemSchema = exports.zProviderMunicipalAuthTypeSchema = exports.zFinopsProviderBaseSchema = exports.zProviderStatusSchema = exports.zFinopsActionSchema = exports.zFinopsProviderTypeSchema = exports.zProviderEnvSchema = void 0;
|
|
4
|
-
exports.zNexVendasJourneyPaymentSchema = exports.zNexVendasJourneyPaymentSupersededSchema = exports.zNexVendasJourneyPaymentWebhookEventSchema = exports.zNexVendasJourneyBoletoSchema = exports.zNexVendasJourneyPaymentChooseSchema = exports.zNexVendasJourneyPaymentStateSchema = exports.zNexVendasJourneyPaymentKindSchema = exports.zNexVendasJourneyPaymentMethodSchema = exports.zNexFinopsContractAsaasInfoSchema = exports.zNexFinopsAsaasSubscriptionStatusSchema = exports.zNexFinopsPaymentMethodSchema = exports.zNexFinopsProposalSchema = exports.zNexFinopsProposalWriteSchema = exports.zNexFinopsProposalPrefillSchema = exports.zNexFinopsProposalLoyaltyPeriodSchema = exports.zNexFinopsProposalPaymentMethodSchema = exports.zNexFinopsProposalStatusSchema = exports.zServiceInvoiceSchema = exports.zPaymentLinkSchema = exports.zPaymentLinkDocumentStateSchema = exports.zAsaasPaymentLinkSubscriptionCycleSchema = exports.zAsaasPaymentLinkChargeTypeSchema = exports.zAsaasPaymentLinkBillingTypeSchema = exports.zProviderPayloadSnapshotSchema = exports.zProviderTraceSchema = exports.zProviderInvoiceErrorSchema = exports.zProviderInvoiceIdentifiersSchema = void 0;
|
|
4
|
+
exports.zNexFinopsContractAllowancesWriteSchema = exports.zNexFinopsUsageAlertDefaultsSchema = exports.zNexFinopsAlertThresholdSchema = exports.zNexFinopsContractAllowancesSchema = exports.zNexFinopsContractAllowanceSchema = exports.zNexVendasJourneyPaymentSchema = exports.zNexVendasJourneyPaymentSupersededSchema = exports.zNexVendasJourneyPaymentWebhookEventSchema = exports.zNexVendasJourneyBoletoSchema = exports.zNexVendasJourneyPaymentChooseSchema = exports.zNexVendasJourneyPaymentStateSchema = exports.zNexVendasJourneyPaymentKindSchema = exports.zNexVendasJourneyPaymentMethodSchema = exports.zNexFinopsContractAsaasInfoSchema = exports.zNexFinopsAsaasSubscriptionStatusSchema = exports.zNexFinopsPaymentMethodSchema = exports.zNexFinopsProposalSchema = exports.zNexFinopsProposalWriteSchema = exports.zNexFinopsProposalPrefillSchema = exports.zNexFinopsProposalLoyaltyPeriodSchema = exports.zNexFinopsProposalPaymentMethodSchema = exports.zNexFinopsProposalStatusSchema = exports.zServiceInvoiceSchema = exports.zPaymentLinkSchema = exports.zPaymentLinkDocumentStateSchema = exports.zAsaasPaymentLinkSubscriptionCycleSchema = exports.zAsaasPaymentLinkChargeTypeSchema = exports.zAsaasPaymentLinkBillingTypeSchema = exports.zProviderPayloadSnapshotSchema = exports.zProviderTraceSchema = exports.zProviderInvoiceErrorSchema = exports.zProviderInvoiceIdentifiersSchema = void 0;
|
|
5
5
|
const zod_1 = require("zod");
|
|
6
6
|
const zod_schemas_1 = require("../shared/zod-schemas");
|
|
7
7
|
// ---- Provider enums and base ----
|
|
@@ -853,3 +853,52 @@ exports.zNexVendasJourneyPaymentSchema = zod_1.z
|
|
|
853
853
|
last_error: zod_1.z.string().optional().nullable(),
|
|
854
854
|
})
|
|
855
855
|
.strip();
|
|
856
|
+
// ---- Nexus FinOps / Franquias e alertas de consumo (feat-150 F0) ----
|
|
857
|
+
/**
|
|
858
|
+
* Franquia de uma métrica no contrato. `included` é número discreto e inteiro
|
|
859
|
+
* (não fração): 0 = nada incluso.
|
|
860
|
+
*/
|
|
861
|
+
exports.zNexFinopsContractAllowanceSchema = zod_1.z
|
|
862
|
+
.object({
|
|
863
|
+
included: zod_1.z.number().int().nonnegative(),
|
|
864
|
+
/** Reservado para a feat-150 cheia (preço do excedente). Não usar ainda. */
|
|
865
|
+
unit_price_excess: zod_1.z.number().nonnegative().optional().nullable(),
|
|
866
|
+
})
|
|
867
|
+
.strip();
|
|
868
|
+
/**
|
|
869
|
+
* Mapa de franquias por métrica. A chave é `string` de propósito (ver
|
|
870
|
+
* `NexFinopsMetricCatalog`): métrica nova é linha de catálogo, não publish do
|
|
871
|
+
* evo-types. Métrica ausente = não contratada ⇒ não alerta.
|
|
872
|
+
*/
|
|
873
|
+
exports.zNexFinopsContractAllowancesSchema = zod_1.z.record(zod_1.z.string().min(1).max(64), exports.zNexFinopsContractAllowanceSchema);
|
|
874
|
+
/**
|
|
875
|
+
* Gatilho de alerta: **fração** da franquia, não percentual — `0.8` é 80%.
|
|
876
|
+
* `0` é rejeitado porque dispararia em qualquer consumo.
|
|
877
|
+
*/
|
|
878
|
+
exports.zNexFinopsAlertThresholdSchema = zod_1.z
|
|
879
|
+
.number()
|
|
880
|
+
.gt(0, "threshold must be a fraction greater than 0 (0.8 = 80%)")
|
|
881
|
+
.lte(1, "threshold must be a fraction less than or equal to 1 (1 = 100%)");
|
|
882
|
+
/** Doc `platform/evo-billing/usage-alerts/config` — default herdado por todos os contratos. */
|
|
883
|
+
exports.zNexFinopsUsageAlertDefaultsSchema = zod_1.z
|
|
884
|
+
.object({
|
|
885
|
+
enabled: zod_1.z.boolean(),
|
|
886
|
+
thresholds: zod_1.z.array(exports.zNexFinopsAlertThresholdSchema),
|
|
887
|
+
})
|
|
888
|
+
.strip();
|
|
889
|
+
/**
|
|
890
|
+
* Fragmento de escrita dos campos de franquia/alerta do contrato, para compor
|
|
891
|
+
* (`.merge()`) nos schemas de create/update/upsert de contrato do
|
|
892
|
+
* `@evo/nex-model`. Campo que não entra no schema de patch é aceito e
|
|
893
|
+
* descartado em silêncio.
|
|
894
|
+
*
|
|
895
|
+
* `alerts_enabled` e `alert_thresholds` ausentes significam **herda o default
|
|
896
|
+
* global** — nunca `false`/lista vazia.
|
|
897
|
+
*/
|
|
898
|
+
exports.zNexFinopsContractAllowancesWriteSchema = zod_1.z
|
|
899
|
+
.object({
|
|
900
|
+
allowances: exports.zNexFinopsContractAllowancesSchema.optional().nullable(),
|
|
901
|
+
alerts_enabled: zod_1.z.boolean().optional().nullable(),
|
|
902
|
+
alert_thresholds: zod_1.z.array(exports.zNexFinopsAlertThresholdSchema).optional().nullable(),
|
|
903
|
+
})
|
|
904
|
+
.strip();
|
|
@@ -932,3 +932,61 @@ export const zNexVendasJourneyPaymentSchema = z
|
|
|
932
932
|
last_error: z.string().optional().nullable(),
|
|
933
933
|
})
|
|
934
934
|
.strip();
|
|
935
|
+
|
|
936
|
+
// ---- Nexus FinOps / Franquias e alertas de consumo (feat-150 F0) ----
|
|
937
|
+
|
|
938
|
+
/**
|
|
939
|
+
* Franquia de uma métrica no contrato. `included` é número discreto e inteiro
|
|
940
|
+
* (não fração): 0 = nada incluso.
|
|
941
|
+
*/
|
|
942
|
+
export const zNexFinopsContractAllowanceSchema = z
|
|
943
|
+
.object({
|
|
944
|
+
included: z.number().int().nonnegative(),
|
|
945
|
+
/** Reservado para a feat-150 cheia (preço do excedente). Não usar ainda. */
|
|
946
|
+
unit_price_excess: z.number().nonnegative().optional().nullable(),
|
|
947
|
+
})
|
|
948
|
+
.strip();
|
|
949
|
+
|
|
950
|
+
/**
|
|
951
|
+
* Mapa de franquias por métrica. A chave é `string` de propósito (ver
|
|
952
|
+
* `NexFinopsMetricCatalog`): métrica nova é linha de catálogo, não publish do
|
|
953
|
+
* evo-types. Métrica ausente = não contratada ⇒ não alerta.
|
|
954
|
+
*/
|
|
955
|
+
export const zNexFinopsContractAllowancesSchema = z.record(
|
|
956
|
+
z.string().min(1).max(64),
|
|
957
|
+
zNexFinopsContractAllowanceSchema,
|
|
958
|
+
);
|
|
959
|
+
|
|
960
|
+
/**
|
|
961
|
+
* Gatilho de alerta: **fração** da franquia, não percentual — `0.8` é 80%.
|
|
962
|
+
* `0` é rejeitado porque dispararia em qualquer consumo.
|
|
963
|
+
*/
|
|
964
|
+
export const zNexFinopsAlertThresholdSchema = z
|
|
965
|
+
.number()
|
|
966
|
+
.gt(0, "threshold must be a fraction greater than 0 (0.8 = 80%)")
|
|
967
|
+
.lte(1, "threshold must be a fraction less than or equal to 1 (1 = 100%)");
|
|
968
|
+
|
|
969
|
+
/** Doc `platform/evo-billing/usage-alerts/config` — default herdado por todos os contratos. */
|
|
970
|
+
export const zNexFinopsUsageAlertDefaultsSchema = z
|
|
971
|
+
.object({
|
|
972
|
+
enabled: z.boolean(),
|
|
973
|
+
thresholds: z.array(zNexFinopsAlertThresholdSchema),
|
|
974
|
+
})
|
|
975
|
+
.strip();
|
|
976
|
+
|
|
977
|
+
/**
|
|
978
|
+
* Fragmento de escrita dos campos de franquia/alerta do contrato, para compor
|
|
979
|
+
* (`.merge()`) nos schemas de create/update/upsert de contrato do
|
|
980
|
+
* `@evo/nex-model`. Campo que não entra no schema de patch é aceito e
|
|
981
|
+
* descartado em silêncio.
|
|
982
|
+
*
|
|
983
|
+
* `alerts_enabled` e `alert_thresholds` ausentes significam **herda o default
|
|
984
|
+
* global** — nunca `false`/lista vazia.
|
|
985
|
+
*/
|
|
986
|
+
export const zNexFinopsContractAllowancesWriteSchema = z
|
|
987
|
+
.object({
|
|
988
|
+
allowances: zNexFinopsContractAllowancesSchema.optional().nullable(),
|
|
989
|
+
alerts_enabled: z.boolean().optional().nullable(),
|
|
990
|
+
alert_thresholds: z.array(zNexFinopsAlertThresholdSchema).optional().nullable(),
|
|
991
|
+
})
|
|
992
|
+
.strip();
|
|
@@ -44,6 +44,66 @@ export interface INexFinopsContractServiceItem {
|
|
|
44
44
|
/** Valor unitário (decimal, BRL). */
|
|
45
45
|
amount: number;
|
|
46
46
|
}
|
|
47
|
+
/**
|
|
48
|
+
* Franquia de uma métrica dentro do contrato.
|
|
49
|
+
*
|
|
50
|
+
* Franquia é **número discreto** e **não tem default global**: é o que foi
|
|
51
|
+
* vendido àquele cliente. Só o gatilho (percentual) e o liga/desliga têm
|
|
52
|
+
* default de plataforma — ver `INexFinopsUsageAlertDefaults`.
|
|
53
|
+
*/
|
|
54
|
+
export interface INexFinopsContractAllowance {
|
|
55
|
+
/** Quantidade incluída no ciclo. 0 = nada incluso; ausente = não contratado. */
|
|
56
|
+
included: number;
|
|
57
|
+
/** Reservado para a feat-150 cheia (preço do excedente). Não usar ainda. */
|
|
58
|
+
unit_price_excess?: number | null;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Catálogo de métricas com franquia. É o que a tela do Nexus renderiza (`v-for`)
|
|
62
|
+
* e o que o motor de alerta itera.
|
|
63
|
+
*
|
|
64
|
+
* Métrica nova = **uma linha aqui**. Nenhuma migração, nenhum campo novo.
|
|
65
|
+
*/
|
|
66
|
+
export declare const NexFinopsMetricCatalog: {
|
|
67
|
+
readonly attendances: {
|
|
68
|
+
readonly label: "Atendimentos";
|
|
69
|
+
readonly unit: "contatos";
|
|
70
|
+
};
|
|
71
|
+
readonly sms: {
|
|
72
|
+
readonly label: "SMS enviados";
|
|
73
|
+
readonly unit: "mensagens";
|
|
74
|
+
};
|
|
75
|
+
readonly email: {
|
|
76
|
+
readonly label: "E-mails enviados";
|
|
77
|
+
readonly unit: "mensagens";
|
|
78
|
+
};
|
|
79
|
+
};
|
|
80
|
+
/**
|
|
81
|
+
* Chaves conhecidas do catálogo — para iterar e para tipar escolha de métrica
|
|
82
|
+
* na UI.
|
|
83
|
+
*
|
|
84
|
+
* ⚠️ NÃO usar para tipar a chave de `INexFinopsContract.allowances`: o mapa é
|
|
85
|
+
* deliberadamente aberto (`string`) para que uma métrica nova seja só uma linha
|
|
86
|
+
* de catálogo, sem publish do evo-types antes de o dado poder existir.
|
|
87
|
+
*/
|
|
88
|
+
export type NexFinopsMetricKey = keyof typeof NexFinopsMetricCatalog;
|
|
89
|
+
/** Doc de config global dos alertas de consumo (convenção `/platform/<app>`). */
|
|
90
|
+
export declare const EVO_BILLING_USAGE_ALERTS_CONFIG_PATH = "platform/evo-billing/usage-alerts/config";
|
|
91
|
+
/**
|
|
92
|
+
* Default de plataforma dos alertas de consumo, herdado por todos os contratos.
|
|
93
|
+
* Vive em `EVO_BILLING_USAGE_ALERTS_CONFIG_PATH`.
|
|
94
|
+
*
|
|
95
|
+
* O contrato pode sobrescrever os dois campos (`alerts_enabled`,
|
|
96
|
+
* `alert_thresholds`); franquia nunca tem default aqui.
|
|
97
|
+
*/
|
|
98
|
+
export interface INexFinopsUsageAlertDefaults {
|
|
99
|
+
/** Alertas ligados para todos os contratos, salvo override. Nasce `true`. */
|
|
100
|
+
enabled: boolean;
|
|
101
|
+
/**
|
|
102
|
+
* Frações da franquia que disparam aviso — **frações, não percentuais**:
|
|
103
|
+
* `0.8` = 80%. Nasce `[0.8, 1.0]`.
|
|
104
|
+
*/
|
|
105
|
+
thresholds: number[];
|
|
106
|
+
}
|
|
47
107
|
export interface INexFinopsContract extends IFireGlobalDoc {
|
|
48
108
|
customer_id: string;
|
|
49
109
|
customer_ref?: string | null;
|
|
@@ -71,6 +131,38 @@ export interface INexFinopsContract extends IFireGlobalDoc {
|
|
|
71
131
|
/** Método com que o primeiro pagamento foi feito. `accepted_payment_methods` é a oferta; este é o fato. */
|
|
72
132
|
payment_method?: NexFinopsPaymentMethod | null;
|
|
73
133
|
asaas?: INexFinopsContractAsaasInfo | null;
|
|
134
|
+
/**
|
|
135
|
+
* Franquia incluída no ciclo, por métrica. A CHAVE é o id da métrica (ver
|
|
136
|
+
* `NexFinopsMetricCatalog`) e é deliberadamente `string`: métrica nova é um
|
|
137
|
+
* item de catálogo, não uma mudança de schema.
|
|
138
|
+
*
|
|
139
|
+
* Métrica ausente do mapa = **não contratada** ⇒ não gera alerta. Alertar em
|
|
140
|
+
* qualquer consumo sem franquia produziria alarme falso em massa.
|
|
141
|
+
*
|
|
142
|
+
* Vigência: a franquia herda `starts_at`/`ends_at` do contrato — mudar
|
|
143
|
+
* franquia é alterar o contrato.
|
|
144
|
+
*
|
|
145
|
+
* ⚠️ NÃO existe congelamento por competência ainda. Enquanto a feat-150 cheia
|
|
146
|
+
* não resolver isso, `allowances` **não pode** ser usado para recalcular
|
|
147
|
+
* competência fechada: reabrir junho leria a franquia de hoje, não a de junho.
|
|
148
|
+
*/
|
|
149
|
+
allowances?: Record<string, INexFinopsContractAllowance> | null;
|
|
150
|
+
/**
|
|
151
|
+
* Override do liga/desliga global de alertas de consumo.
|
|
152
|
+
*
|
|
153
|
+
* ⚠️ **Ausente ≠ `false`.** Ausente = HERDA o default global
|
|
154
|
+
* (`INexFinopsUsageAlertDefaults.enabled`); `false` explícito é o kill-switch
|
|
155
|
+
* por cliente. Ler ausente como `false` desliga alerta de todo mundo.
|
|
156
|
+
*/
|
|
157
|
+
alerts_enabled?: boolean | null;
|
|
158
|
+
/**
|
|
159
|
+
* Override dos gatilhos globais. Frações da franquia (`0.8` = 80%), válidas
|
|
160
|
+
* para todas as métricas do contrato.
|
|
161
|
+
*
|
|
162
|
+
* ⚠️ **Ausente ≠ lista vazia.** Ausente = HERDA
|
|
163
|
+
* `INexFinopsUsageAlertDefaults.thresholds`.
|
|
164
|
+
*/
|
|
165
|
+
alert_thresholds?: number[] | null;
|
|
74
166
|
}
|
|
75
167
|
export declare const NEX_FINOPS_CONTRACT_STATUS_TRANSITIONS: Record<NexFinopsContractStatus, NexFinopsContractStatus[]>;
|
|
76
168
|
/**
|
|
@@ -1,6 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.NEX_FINOPS_BILLABLE_CONTRACT_STATUSES = exports.NEX_FINOPS_CONTRACT_STATUS_TRANSITIONS = void 0;
|
|
3
|
+
exports.NEX_FINOPS_BILLABLE_CONTRACT_STATUSES = exports.NEX_FINOPS_CONTRACT_STATUS_TRANSITIONS = exports.EVO_BILLING_USAGE_ALERTS_CONFIG_PATH = exports.NexFinopsMetricCatalog = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Catálogo de métricas com franquia. É o que a tela do Nexus renderiza (`v-for`)
|
|
6
|
+
* e o que o motor de alerta itera.
|
|
7
|
+
*
|
|
8
|
+
* Métrica nova = **uma linha aqui**. Nenhuma migração, nenhum campo novo.
|
|
9
|
+
*/
|
|
10
|
+
exports.NexFinopsMetricCatalog = {
|
|
11
|
+
attendances: { label: 'Atendimentos', unit: 'contatos' },
|
|
12
|
+
sms: { label: 'SMS enviados', unit: 'mensagens' },
|
|
13
|
+
email: { label: 'E-mails enviados', unit: 'mensagens' },
|
|
14
|
+
};
|
|
15
|
+
/** Doc de config global dos alertas de consumo (convenção `/platform/<app>`). */
|
|
16
|
+
exports.EVO_BILLING_USAGE_ALERTS_CONFIG_PATH = 'platform/evo-billing/usage-alerts/config';
|
|
4
17
|
// ── Status transitions ──
|
|
5
18
|
exports.NEX_FINOPS_CONTRACT_STATUS_TRANSITIONS = {
|
|
6
19
|
draft: ['active', 'canceled'],
|
|
@@ -54,6 +54,64 @@ export interface INexFinopsContractServiceItem {
|
|
|
54
54
|
amount: number;
|
|
55
55
|
}
|
|
56
56
|
|
|
57
|
+
// ── Franquias e alertas de consumo (feat-150 F0) ──
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Franquia de uma métrica dentro do contrato.
|
|
61
|
+
*
|
|
62
|
+
* Franquia é **número discreto** e **não tem default global**: é o que foi
|
|
63
|
+
* vendido àquele cliente. Só o gatilho (percentual) e o liga/desliga têm
|
|
64
|
+
* default de plataforma — ver `INexFinopsUsageAlertDefaults`.
|
|
65
|
+
*/
|
|
66
|
+
export interface INexFinopsContractAllowance {
|
|
67
|
+
/** Quantidade incluída no ciclo. 0 = nada incluso; ausente = não contratado. */
|
|
68
|
+
included: number;
|
|
69
|
+
/** Reservado para a feat-150 cheia (preço do excedente). Não usar ainda. */
|
|
70
|
+
unit_price_excess?: number | null;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Catálogo de métricas com franquia. É o que a tela do Nexus renderiza (`v-for`)
|
|
75
|
+
* e o que o motor de alerta itera.
|
|
76
|
+
*
|
|
77
|
+
* Métrica nova = **uma linha aqui**. Nenhuma migração, nenhum campo novo.
|
|
78
|
+
*/
|
|
79
|
+
export const NexFinopsMetricCatalog = {
|
|
80
|
+
attendances: { label: 'Atendimentos', unit: 'contatos' },
|
|
81
|
+
sms: { label: 'SMS enviados', unit: 'mensagens' },
|
|
82
|
+
email: { label: 'E-mails enviados', unit: 'mensagens' },
|
|
83
|
+
} as const;
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Chaves conhecidas do catálogo — para iterar e para tipar escolha de métrica
|
|
87
|
+
* na UI.
|
|
88
|
+
*
|
|
89
|
+
* ⚠️ NÃO usar para tipar a chave de `INexFinopsContract.allowances`: o mapa é
|
|
90
|
+
* deliberadamente aberto (`string`) para que uma métrica nova seja só uma linha
|
|
91
|
+
* de catálogo, sem publish do evo-types antes de o dado poder existir.
|
|
92
|
+
*/
|
|
93
|
+
export type NexFinopsMetricKey = keyof typeof NexFinopsMetricCatalog;
|
|
94
|
+
|
|
95
|
+
/** Doc de config global dos alertas de consumo (convenção `/platform/<app>`). */
|
|
96
|
+
export const EVO_BILLING_USAGE_ALERTS_CONFIG_PATH = 'platform/evo-billing/usage-alerts/config';
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Default de plataforma dos alertas de consumo, herdado por todos os contratos.
|
|
100
|
+
* Vive em `EVO_BILLING_USAGE_ALERTS_CONFIG_PATH`.
|
|
101
|
+
*
|
|
102
|
+
* O contrato pode sobrescrever os dois campos (`alerts_enabled`,
|
|
103
|
+
* `alert_thresholds`); franquia nunca tem default aqui.
|
|
104
|
+
*/
|
|
105
|
+
export interface INexFinopsUsageAlertDefaults {
|
|
106
|
+
/** Alertas ligados para todos os contratos, salvo override. Nasce `true`. */
|
|
107
|
+
enabled: boolean;
|
|
108
|
+
/**
|
|
109
|
+
* Frações da franquia que disparam aviso — **frações, não percentuais**:
|
|
110
|
+
* `0.8` = 80%. Nasce `[0.8, 1.0]`.
|
|
111
|
+
*/
|
|
112
|
+
thresholds: number[];
|
|
113
|
+
}
|
|
114
|
+
|
|
57
115
|
// ── Main Document ──
|
|
58
116
|
|
|
59
117
|
export interface INexFinopsContract extends IFireGlobalDoc {
|
|
@@ -106,6 +164,43 @@ export interface INexFinopsContract extends IFireGlobalDoc {
|
|
|
106
164
|
/** Método com que o primeiro pagamento foi feito. `accepted_payment_methods` é a oferta; este é o fato. */
|
|
107
165
|
payment_method?: NexFinopsPaymentMethod | null;
|
|
108
166
|
asaas?: INexFinopsContractAsaasInfo | null;
|
|
167
|
+
|
|
168
|
+
// ── Franquias e alertas de consumo (feat-150 F0) ──
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Franquia incluída no ciclo, por métrica. A CHAVE é o id da métrica (ver
|
|
172
|
+
* `NexFinopsMetricCatalog`) e é deliberadamente `string`: métrica nova é um
|
|
173
|
+
* item de catálogo, não uma mudança de schema.
|
|
174
|
+
*
|
|
175
|
+
* Métrica ausente do mapa = **não contratada** ⇒ não gera alerta. Alertar em
|
|
176
|
+
* qualquer consumo sem franquia produziria alarme falso em massa.
|
|
177
|
+
*
|
|
178
|
+
* Vigência: a franquia herda `starts_at`/`ends_at` do contrato — mudar
|
|
179
|
+
* franquia é alterar o contrato.
|
|
180
|
+
*
|
|
181
|
+
* ⚠️ NÃO existe congelamento por competência ainda. Enquanto a feat-150 cheia
|
|
182
|
+
* não resolver isso, `allowances` **não pode** ser usado para recalcular
|
|
183
|
+
* competência fechada: reabrir junho leria a franquia de hoje, não a de junho.
|
|
184
|
+
*/
|
|
185
|
+
allowances?: Record<string, INexFinopsContractAllowance> | null;
|
|
186
|
+
|
|
187
|
+
/**
|
|
188
|
+
* Override do liga/desliga global de alertas de consumo.
|
|
189
|
+
*
|
|
190
|
+
* ⚠️ **Ausente ≠ `false`.** Ausente = HERDA o default global
|
|
191
|
+
* (`INexFinopsUsageAlertDefaults.enabled`); `false` explícito é o kill-switch
|
|
192
|
+
* por cliente. Ler ausente como `false` desliga alerta de todo mundo.
|
|
193
|
+
*/
|
|
194
|
+
alerts_enabled?: boolean | null;
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* Override dos gatilhos globais. Frações da franquia (`0.8` = 80%), válidas
|
|
198
|
+
* para todas as métricas do contrato.
|
|
199
|
+
*
|
|
200
|
+
* ⚠️ **Ausente ≠ lista vazia.** Ausente = HERDA
|
|
201
|
+
* `INexFinopsUsageAlertDefaults.thresholds`.
|
|
202
|
+
*/
|
|
203
|
+
alert_thresholds?: number[] | null;
|
|
109
204
|
}
|
|
110
205
|
|
|
111
206
|
// ── Status transitions ──
|