@mj-biz-apps/sales-server 6.18.0 → 6.20.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.
@@ -689,7 +689,7 @@ __decorate([
689
689
  __metadata("design:type", Array)
690
690
  ], mjBizAppsSalesDealContactRole_.prototype, "ReadableFields___", void 0);
691
691
  mjBizAppsSalesDealContactRole_ = __decorate([
692
- ObjectType({ description: "The buying committee on the CUSTOMER side: which contact plays which role on this deal. A junction rather than a field on SalesContact because one contact holds different roles on different deals." })
692
+ ObjectType({ description: "The customer's buying team: which contact plays which role on a deal." })
693
693
  ], mjBizAppsSalesDealContactRole_);
694
694
  export { mjBizAppsSalesDealContactRole_ };
695
695
  //****************************************************************************
@@ -931,7 +931,7 @@ __decorate([
931
931
  __metadata("design:type", Date)
932
932
  ], mjBizAppsSalesDealPaymentSchedule_.prototype, "PaymentDate", void 0);
933
933
  __decorate([
934
- Field(() => Float, { nullable: true, description: "The instalment amount as agreed. Unconstrained in sign: a refund or credit instalment is legitimately negative, and this table records what was agreed rather than asserting a shape for it." }),
934
+ Field(() => Float, { nullable: true, description: "The instalment amount as agreed. Can be negative for a refund or credit." }),
935
935
  __metadata("design:type", Number)
936
936
  ], mjBizAppsSalesDealPaymentSchedule_.prototype, "Amount", void 0);
937
937
  __decorate([
@@ -940,7 +940,7 @@ __decorate([
940
940
  __metadata("design:type", String)
941
941
  ], mjBizAppsSalesDealPaymentSchedule_.prototype, "Description", void 0);
942
942
  __decorate([
943
- Field(() => Int, { nullable: true, description: "Explicit ordering, because instalment order is not always date order — \"on execution\" and \"on signature of SOW 2\" can share a date or have none yet. Server-maintained and re-sequenced on every save, mirroring how accounting re-sequences JournalEntryLine.LineNumber." }),
943
+ Field(() => Int, { nullable: true, description: "Position of the instalment in the schedule, for instalments that share a date or have none yet." }),
944
944
  __metadata("design:type", Number)
945
945
  ], mjBizAppsSalesDealPaymentSchedule_.prototype, "DisplayOrder", void 0);
946
946
  __decorate([
@@ -961,7 +961,7 @@ __decorate([
961
961
  __metadata("design:type", Array)
962
962
  ], mjBizAppsSalesDealPaymentSchedule_.prototype, "ReadableFields___", void 0);
963
963
  mjBizAppsSalesDealPaymentSchedule_ = __decorate([
964
- ObjectType({ description: "The EXCEPTION payment schedule for a deal. THE ABSENCE OF ROWS IS THE COMMON CASE and that is the design: the standard term is 100% payable on execution, so a deal on standard terms carries no rows here and rows exist only where something else was negotiated. Storing the default on every deal would let a later change to \"default\" silently rewrite history, and would turn \"did this deal negotiate payment terms?\" into arithmetic instead of a row count. This app does NOT check that the schedule sums to the deal amount — that is computing money, and the authoritative total lives in orders." })
964
+ ObjectType({ description: "Payment instalments agreed for a deal when they differ from the standard terms. A deal on standard terms has no rows here." })
965
965
  ], mjBizAppsSalesDealPaymentSchedule_);
966
966
  export { mjBizAppsSalesDealPaymentSchedule_ };
967
967
  //****************************************************************************
@@ -1208,11 +1208,11 @@ __decorate([
1208
1208
  __metadata("design:type", String)
1209
1209
  ], mjBizAppsSalesDealRole_.prototype, "Description", void 0);
1210
1210
  __decorate([
1211
- Field(() => Boolean, { nullable: true, description: "Identifies the role that DEFINES ownership. Exactly one team member per deal may hold a role with this flag, enforced server-side, and Deal.OwnerEmployeeID is the denormalized stamp of whoever does." }),
1211
+ Field(() => Boolean, { nullable: true, description: "Marks the role that owns the deal. Only one team member per deal can hold it, and that person is shown as the deal's owner." }),
1212
1212
  __metadata("design:type", Boolean)
1213
1213
  ], mjBizAppsSalesDealRole_.prototype, "IsOwnerRole", void 0);
1214
1214
  __decorate([
1215
- Field(() => Boolean, { nullable: true, description: "Whether two people may hold this role on one deal. Two sales engineers, yes; two owners, no. Enforced server-side FROM THIS FLAG, never hardcoded against a role name." }),
1215
+ Field(() => Boolean, { nullable: true, description: "Whether more than one person can hold this role on the same deal, for example two sales engineers." }),
1216
1216
  __metadata("design:type", Boolean)
1217
1217
  ], mjBizAppsSalesDealRole_.prototype, "AllowsMultiplePerDeal", void 0);
1218
1218
  __decorate([
@@ -1755,7 +1755,7 @@ __decorate([
1755
1755
  __metadata("design:type", String)
1756
1756
  ], mjBizAppsSalesDealStageEvent_.prototype, "ChangedByUserID", void 0);
1757
1757
  __decorate([
1758
- Field({ nullable: true, description: "The ORIGINAL time of the transition, not the row's insert time. A distinct column rather than a reliance on __mj_CreatedAt because the HubSpot import must preserve historical timestamps — a 2023 transition has to land as 2023." }),
1758
+ Field({ nullable: true, description: "When the stage change happened. For imported deals this is the original date, not the import date." }),
1759
1759
  __metadata("design:type", Date)
1760
1760
  ], mjBizAppsSalesDealStageEvent_.prototype, "ChangedAt", void 0);
1761
1761
  __decorate([
@@ -1763,11 +1763,11 @@ __decorate([
1763
1763
  __metadata("design:type", Number)
1764
1764
  ], mjBizAppsSalesDealStageEvent_.prototype, "DaysInPreviousStage", void 0);
1765
1765
  __decorate([
1766
- Field(() => Float, { nullable: true, description: "Deal.Amount as it stood at this transition. Point-in-time truth: \"what did we think the forecast was on the 1st\" is unanswerable from Deal alone once amounts change." }),
1766
+ Field(() => Float, { nullable: true, description: "The deal amount at the time of this stage change." }),
1767
1767
  __metadata("design:type", Number)
1768
1768
  ], mjBizAppsSalesDealStageEvent_.prototype, "AmountAtTransition", void 0);
1769
1769
  __decorate([
1770
- Field(() => Boolean, { nullable: true, description: "Whether AmountAtTransition came from the orders engine (1) or was stated by a person (0). NULL means the transition was recorded before this was tracked — it is not backfillable, because Deal.AmountIsComputed describes the deal as it is now, not as it was at the close." }),
1770
+ Field(() => Boolean, { nullable: true, description: "On when the amount at this stage change was the order total, off when it was entered by hand. Empty for changes recorded before this was tracked." }),
1771
1771
  __metadata("design:type", Boolean)
1772
1772
  ], mjBizAppsSalesDealStageEvent_.prototype, "AmountAtTransitionIsComputed", void 0);
1773
1773
  __decorate([
@@ -1821,7 +1821,7 @@ __decorate([
1821
1821
  __metadata("design:type", Array)
1822
1822
  ], mjBizAppsSalesDealStageEvent_.prototype, "ReadableFields___", void 0);
1823
1823
  mjBizAppsSalesDealStageEvent_ = __decorate([
1824
- ObjectType({ description: "APPEND-ONLY transition log, never edited. The source for stage conversion, velocity, dwell time, slippage and skipped-stage analysis. Stamping the amount and probability AT each transition is what lets historical roll-ups reconstruct correctly after a deal's amount changes." })
1824
+ ObjectType({ description: "A record of a deal moving from one stage to another, with the amount and probability at that moment. These rows are never edited." })
1825
1825
  ], mjBizAppsSalesDealStageEvent_);
1826
1826
  export { mjBizAppsSalesDealStageEvent_ };
1827
1827
  //****************************************************************************
@@ -2013,7 +2013,7 @@ __decorate([
2013
2013
  __metadata("design:type", String)
2014
2014
  ], mjBizAppsSalesDealStatusType_.prototype, "ID", void 0);
2015
2015
  __decorate([
2016
- Field({ nullable: true, description: "Stable identifier the engine and metadata seeds key on. Renaming Name is cosmetic; renaming Code changes an identifier." }),
2016
+ Field({ nullable: true, description: "Short fixed identifier for the status. Renaming the status is safe; changing its code is not." }),
2017
2017
  MaxLength(40),
2018
2018
  __metadata("design:type", String)
2019
2019
  ], mjBizAppsSalesDealStatusType_.prototype, "Code", void 0);
@@ -2043,7 +2043,7 @@ __decorate([
2043
2043
  __metadata("design:type", Boolean)
2044
2044
  ], mjBizAppsSalesDealStatusType_.prototype, "IsLost", void 0);
2045
2045
  __decorate([
2046
- Field(() => Boolean, { nullable: true, description: "When 1, a deal in this status FREEZES: the header (except Description and NextStep), its lines and its team members become immutable, enforced in DealEntityServer.Save() — not in the UI, so an Action, an agent or a raw BaseEntity.Save() hits the same wall. Mirrors journal-entry immutability in accounting, and for the same reason: the deal is now the provenance of a contract and an order." }),
2046
+ Field(() => Boolean, { nullable: true, description: "When on, a deal in this status is locked until it is reopened: its lines, payment schedule, team and every field except Description and Next Step become read-only." }),
2047
2047
  __metadata("design:type", Boolean)
2048
2048
  ], mjBizAppsSalesDealStatusType_.prototype, "LocksDeal", void 0);
2049
2049
  __decorate([
@@ -2067,7 +2067,7 @@ __decorate([
2067
2067
  __metadata("design:type", Array)
2068
2068
  ], mjBizAppsSalesDealStatusType_.prototype, "ReadableFields___", void 0);
2069
2069
  mjBizAppsSalesDealStatusType_ = __decorate([
2070
- ObjectType({ description: "The OUTCOME vocabulary for deals (Open, Won, Lost, Abandoned, On Hold ...). Behaviour comes from the flags on this row, NEVER from the Name — Sales.CloseDeal is named for the outcome type rather than a hardcoded \"won\" precisely so it can resolve everything from IsWon/IsLost/LocksDeal. Renaming a status is a metadata change with no code impact." })
2070
+ ObjectType({ description: "The outcomes a deal can be in, such as Open, Won, Lost or On Hold. The flags on each status decide how a deal in it behaves." })
2071
2071
  ], mjBizAppsSalesDealStatusType_);
2072
2072
  export { mjBizAppsSalesDealStatusType_ };
2073
2073
  //****************************************************************************
@@ -2345,12 +2345,12 @@ __decorate([
2345
2345
  __metadata("design:type", String)
2346
2346
  ], mjBizAppsSalesDealTeamMember_.prototype, "DealID", void 0);
2347
2347
  __decorate([
2348
- Field({ nullable: true, description: "The internal rep, as an MJ Employee. Exactly one of EmployeeID / PersonID is set. Employee is the common case." }),
2348
+ Field({ nullable: true, description: "The team member, when they are an employee. Set this or Person, not both." }),
2349
2349
  MaxLength(36),
2350
2350
  __metadata("design:type", String)
2351
2351
  ], mjBizAppsSalesDealTeamMember_.prototype, "EmployeeID", void 0);
2352
2352
  __decorate([
2353
- Field({ nullable: true, description: "A NON-EMPLOYEE team member — a partner rep or contractor — as a common.Person. Exactly one of EmployeeID / PersonID is set (D-6). Needed because Partner Manager is a seeded DealRole and an Employee row cannot express someone outside the company." }),
2353
+ Field({ nullable: true, description: "The team member, when they are not an employee, such as a partner rep. Set this or Employee, not both." }),
2354
2354
  MaxLength(36),
2355
2355
  __metadata("design:type", String)
2356
2356
  ], mjBizAppsSalesDealTeamMember_.prototype, "PersonID", void 0);
@@ -2412,7 +2412,7 @@ __decorate([
2412
2412
  __metadata("design:type", Array)
2413
2413
  ], mjBizAppsSalesDealTeamMember_.prototype, "ReadableFields___", void 0);
2414
2414
  mjBizAppsSalesDealTeamMember_ = __decorate([
2415
- ObjectType({ description: "The internal people on a deal and the role each holds — the SINGLE SOURCE OF TRUTH for deal membership, INCLUDING the owner (the member whose DealRole has IsOwnerRole = 1). WATCH THE ATTRIBUTION DOUBLE-COUNT: a deal with an AE, an SE and an SDR has three rows, so summing Deal.Amount across this table triple-counts the deal. Every by-rep rollup must either filter to the owner role or weight by AttributionPct." })
2415
+ ObjectType({ description: "The internal people on a deal and the role each holds, including the owner. Totals by rep must count only the owner role or weight by attribution, or a deal is counted once per member." })
2416
2416
  ], mjBizAppsSalesDealTeamMember_);
2417
2417
  export { mjBizAppsSalesDealTeamMember_ };
2418
2418
  //****************************************************************************
@@ -3026,26 +3026,26 @@ __decorate([
3026
3026
  __metadata("design:type", String)
3027
3027
  ], mjBizAppsSalesDeal_.prototype, "PrimaryContactID", void 0);
3028
3028
  __decorate([
3029
- Field({ nullable: true, description: "The contact who receives the invoice, which is routinely NOT the person negotiating. NULL means the billing contact IS the primary contact — a real default, not \"unknown\" — so an AD never types the same name twice and changing the primary contact leaves no stale billing copy." }),
3029
+ Field({ nullable: true, description: "The contact who receives the invoice. Leave empty to use the primary contact." }),
3030
3030
  MaxLength(36),
3031
3031
  __metadata("design:type", String)
3032
3032
  ], mjBizAppsSalesDeal_.prototype, "BillingContactID", void 0);
3033
3033
  __decorate([
3034
- Field({ nullable: true, description: "The SELLING company. Must match Pipeline.CompanyID; enforced by the entity server, since a CHECK cannot reach across the FK to compare them. FK to __mj.Company." }),
3034
+ Field({ nullable: true, description: "The company selling the deal. It must match the pipeline's company." }),
3035
3035
  MaxLength(36),
3036
3036
  __metadata("design:type", String)
3037
3037
  ], mjBizAppsSalesDeal_.prototype, "CompanyID", void 0);
3038
3038
  __decorate([
3039
- Field({ nullable: true, description: "DENORMALIZED, SERVER-MAINTAINED. The Employee holding the role where DealRole.IsOwnerRole = 1, written by DealEntityServer.Save() whenever team membership changes. DealTeamMember is the source of truth; this exists so \"my deals\" and per-rep boards need no join. NEVER SET THIS DIRECTLY — it will diverge." }),
3039
+ Field({ nullable: true, description: "The deal owner: the team member in the owner role. Updated automatically from the deal team." }),
3040
3040
  MaxLength(36),
3041
3041
  __metadata("design:type", String)
3042
3042
  ], mjBizAppsSalesDeal_.prototype, "OwnerEmployeeID", void 0);
3043
3043
  __decorate([
3044
- Field(() => Float, { nullable: true, description: "The deal value. A CACHED ANSWER returned by Orders.PreviewOrder for this deal's line set — NOT computed here. For a simple (header-only) deal it is hand-entered and AmountIsComputed is 0. Never sum the order's lines into this column; sales does no arithmetic." }),
3044
+ Field(() => Float, { nullable: true, description: "The deal value. For a deal with product lines it is the order total calculated by Orders; for a deal without lines it is entered by hand." }),
3045
3045
  __metadata("design:type", Number)
3046
3046
  ], mjBizAppsSalesDeal_.prototype, "Amount", void 0);
3047
3047
  __decorate([
3048
- Field(() => Boolean, { nullable: true, description: "1 when Amount came from Orders.PreviewOrder; 0 when a human typed it (a simple, header-only deal). Distinguishes a traceable figure from a stated one." }),
3048
+ Field(() => Boolean, { nullable: true, description: "On when Amount is the order total calculated by Orders; off when it was entered by hand." }),
3049
3049
  __metadata("design:type", Boolean)
3050
3050
  ], mjBizAppsSalesDeal_.prototype, "AmountIsComputed", void 0);
3051
3051
  __decorate([
@@ -3053,7 +3053,7 @@ __decorate([
3053
3053
  __metadata("design:type", Date)
3054
3054
  ], mjBizAppsSalesDeal_.prototype, "AmountComputedAt", void 0);
3055
3055
  __decorate([
3056
- Field({ nullable: true, description: "Fingerprint of the embedded order's line set Amount was computed from. Compare it against the current lines to detect a STALE amount, so the UI can say the products changed after the amount was calculated, instead of showing a number nobody can trace. Without this column Amount becomes a hand-edited field within a month." }),
3056
+ Field({ nullable: true, description: "Fingerprint of the order lines the amount was calculated from, used to tell when the amount is out of date." }),
3057
3057
  MaxLength(128),
3058
3058
  __metadata("design:type", String)
3059
3059
  ], mjBizAppsSalesDeal_.prototype, "AmountSourceHash", void 0);
@@ -3075,15 +3075,15 @@ __decorate([
3075
3075
  __metadata("design:type", Number)
3076
3076
  ], mjBizAppsSalesDeal_.prototype, "TermMonths", void 0);
3077
3077
  __decorate([
3078
- Field(() => Int, { nullable: true, description: "Estimated project timeline in WEEKS, from the SOW template. A separate column from TermMonths on purpose: a subscription term is a COMMITMENT that drives renewal dates and escalation, a project estimate is a FORECAST that drives neither. One column plus a unit flag would force every consumer to branch on the unit before using the number." }),
3078
+ Field(() => Int, { nullable: true, description: "Estimated project length in weeks, from the statement of work. It does not affect the term or renewal dates." }),
3079
3079
  __metadata("design:type", Number)
3080
3080
  ], mjBizAppsSalesDeal_.prototype, "EstimatedProjectWeeks", void 0);
3081
3081
  __decorate([
3082
- Field({ nullable: true, description: "The date the agreement was signed. Deliberately NOT constrained against StartDate: work that begins before signature is common and legitimate, so ordering the two would reject real deals." }),
3082
+ Field({ nullable: true, description: "The date the agreement was signed. It can be after the start date when work begins before signature." }),
3083
3083
  __metadata("design:type", Date)
3084
3084
  ], mjBizAppsSalesDeal_.prototype, "ExecutionDate", void 0);
3085
3085
  __decorate([
3086
- Field({ nullable: true, description: "The date service or the subscription actually begins (order-form / SOW start). May precede ExecutionDate for backdated work — see that column." }),
3086
+ Field({ nullable: true, description: "The date the service or subscription begins. It can be before the execution date." }),
3087
3087
  __metadata("design:type", Date)
3088
3088
  ], mjBizAppsSalesDeal_.prototype, "StartDate", void 0);
3089
3089
  __decorate([
@@ -3123,12 +3123,12 @@ __decorate([
3123
3123
  __metadata("design:type", String)
3124
3124
  ], mjBizAppsSalesDeal_.prototype, "CampaignID", void 0);
3125
3125
  __decorate([
3126
- Field({ nullable: true, description: "SOFT reference (no FK) to a bizapps-contracts Contract. The link points DOWN the dependency graph; there is deliberately no Contract.DealID, because it is ONE contract to MANY deals — the original sale, every renewal, every expansion." }),
3126
+ Field({ nullable: true, description: "The contract this deal belongs to, in BizApps Contracts." }),
3127
3127
  MaxLength(36),
3128
3128
  __metadata("design:type", String)
3129
3129
  ], mjBizAppsSalesDeal_.prototype, "ContractID", void 0);
3130
3130
  __decorate([
3131
- Field({ nullable: true, description: "SOFT reference (no FK) to the contract this deal RENEWS. What makes the renewal chain navigable from the sales side without contracts knowing anything about it. Required when DealType.RequiresRenewalSource is set." }),
3131
+ Field({ nullable: true, description: "The contract this deal renews. Required for deal types that are renewals." }),
3132
3132
  MaxLength(36),
3133
3133
  __metadata("design:type", String)
3134
3134
  ], mjBizAppsSalesDeal_.prototype, "RenewsContractID", void 0);
@@ -3137,24 +3137,24 @@ __decorate([
3137
3137
  __metadata("design:type", Boolean)
3138
3138
  ], mjBizAppsSalesDeal_.prototype, "AutoRenew", void 0);
3139
3139
  __decorate([
3140
- Field(() => Float, { nullable: true, description: "An OVERRIDE, and NULL is meaningful: it means \"use the standard annual increase\", whose default (5%) lives on the contracts ContractType, not here. That is a different fact from \"we negotiated a number that happens to equal today's standard\", and only the NULL survives a later change to policy. Copying the default in at write time would freeze this year's terms into next year's renewals silently." }),
3140
+ Field(() => Float, { nullable: true, description: "Annual price increase agreed for this deal, as a percent. Leave empty to use the contract type's standard increase." }),
3141
3141
  __metadata("design:type", Number)
3142
3142
  ], mjBizAppsSalesDeal_.prototype, "AnnualIncreasePctOverride", void 0);
3143
3143
  __decorate([
3144
- Field(() => Int, { nullable: true, description: "An OVERRIDE of the standard cancellation-notice period (default 90 days, owned by the contracts ContractType). NULL means \"use the standard\" — see AnnualIncreasePctOverride for why that distinction is load-bearing." }),
3144
+ Field(() => Int, { nullable: true, description: "Cancellation notice period agreed for this deal, in days. Leave empty to use the contract type's standard notice period." }),
3145
3145
  __metadata("design:type", Number)
3146
3146
  ], mjBizAppsSalesDeal_.prototype, "CancellationNoticeDaysOverride", void 0);
3147
3147
  __decorate([
3148
- Field({ nullable: true, description: "PLACEHOLDER LABEL (default ACH), and a string only for as long as nothing branches on it. Payment method becomes vocabulary the moment code cares — ACH and card differ in settlement timing and fees — but ORDERS owns that concept and will expose PaymentType. Pointing at orders' vocabulary later beats standing up a competing copy here and reconciling two. No code may branch on this value." }),
3148
+ Field({ nullable: true, description: "How the customer expects to pay, for example ACH. For reference only." }),
3149
3149
  MaxLength(50),
3150
3150
  __metadata("design:type", String)
3151
3151
  ], mjBizAppsSalesDeal_.prototype, "PaymentMethod", void 0);
3152
3152
  __decorate([
3153
- Field(() => Boolean, { nullable: true, description: "Did this deal move off the standard agreement? Asserted by the rep at deal creation, defaulting to no. Copied onto the contract as HasModifications at Closed Won, where it routes finance's review: a true flag means capture each deviation, a false one still means read the document because the rep may have forgotten. NOT derived from ContractVariances — an empty variances field means nothing was written down, which is a different claim from nothing being negotiated." }),
3153
+ Field(() => Boolean, { nullable: true, description: "Whether the deal moved off the standard agreement. Copied to the contract when the deal is won, where it tells finance to review the changes." }),
3154
3154
  __metadata("design:type", Boolean)
3155
3155
  ], mjBizAppsSalesDeal_.prototype, "StandardAgreementModified", void 0);
3156
3156
  __decorate([
3157
- Field({ nullable: true, description: "Free-text summary of what this deal negotiated AWAY from standard terms — the red-line list, in the AD's own words. The input to a human legal review; nothing should attempt to parse it." }),
3157
+ Field({ nullable: true, description: "Summary of the terms negotiated away from the standard agreement, for legal review." }),
3158
3158
  __metadata("design:type", String)
3159
3159
  ], mjBizAppsSalesDeal_.prototype, "ContractVariances", void 0);
3160
3160
  __decorate([
@@ -3312,7 +3312,7 @@ __decorate([
3312
3312
  __metadata("design:type", Array)
3313
3313
  ], mjBizAppsSalesDeal_.prototype, "ReadableFields___", void 0);
3314
3314
  mjBizAppsSalesDeal_ = __decorate([
3315
- ObjectType({ description: "A deal (opportunity). Amount is a CACHED answer from Orders.PreviewOrder carrying its own provenance, never a locally computed total — this app performs no pricing arithmetic of any kind. Closing a deal is a transaction that CREATES a contract and/or orders, not a notification that someone should." })
3315
+ ObjectType({ description: "A sales opportunity with an account. Its amount comes from the deal's order, and winning it follows the pipeline's close-won policy." })
3316
3316
  ], mjBizAppsSalesDeal_);
3317
3317
  export { mjBizAppsSalesDeal_ };
3318
3318
  //****************************************************************************
@@ -3927,7 +3927,7 @@ __decorate([
3927
3927
  __metadata("design:type", Array)
3928
3928
  ], mjBizAppsSalesForecastCategoryType_.prototype, "ReadableFields___", void 0);
3929
3929
  mjBizAppsSalesForecastCategoryType_ = __decorate([
3930
- ObjectType({ description: "How a deal rolls into the forecast (Omitted, Pipeline, Best Case, Commit, Closed). The Include* flags are read directly by the forecast measures; a query that compared a category NAME would be exactly the violation the CI grep exists to catch." })
3930
+ ObjectType({ description: "How a deal counts in the forecast: Omitted, Pipeline, Best Case, Commit or Closed. The Include flags on each category decide which forecast totals it adds to." })
3931
3931
  ], mjBizAppsSalesForecastCategoryType_);
3932
3932
  export { mjBizAppsSalesForecastCategoryType_ };
3933
3933
  //****************************************************************************
@@ -4211,7 +4211,7 @@ __decorate([
4211
4211
  __metadata("design:type", Date)
4212
4212
  ], mjBizAppsSalesForecastSnapshot_.prototype, "CapturedAt", void 0);
4213
4213
  __decorate([
4214
- Field(() => Float, { nullable: true, description: "Total of deals in forecast categories flagged IncludeInCommit as at CapturedAt. Named CommitAmount rather than the plan's Commit because COMMIT is a reserved word in both T-SQL and PostgreSQL, and production is PostgreSQL." }),
4214
+ Field(() => Float, { nullable: true, description: "Total of deals in commit forecast categories when the snapshot was taken." }),
4215
4215
  __metadata("design:type", Number)
4216
4216
  ], mjBizAppsSalesForecastSnapshot_.prototype, "CommitAmount", void 0);
4217
4217
  __decorate([
@@ -4227,7 +4227,7 @@ __decorate([
4227
4227
  __metadata("design:type", Number)
4228
4228
  ], mjBizAppsSalesForecastSnapshot_.prototype, "ClosedAmount", void 0);
4229
4229
  __decorate([
4230
- Field({ nullable: true, description: "The full breakdown behind the four bucket totals, so a snapshot can be interrogated rather than merely displayed." }),
4230
+ Field({ nullable: true, description: "The detail behind the snapshot's totals, stored as JSON." }),
4231
4231
  __metadata("design:type", String)
4232
4232
  ], mjBizAppsSalesForecastSnapshot_.prototype, "SnapshotJSON", void 0);
4233
4233
  __decorate([
@@ -4258,7 +4258,7 @@ __decorate([
4258
4258
  __metadata("design:type", Array)
4259
4259
  ], mjBizAppsSalesForecastSnapshot_.prototype, "ReadableFields___", void 0);
4260
4260
  mjBizAppsSalesForecastSnapshot_ = __decorate([
4261
- ObjectType({ description: "A point-in-time capture of the forecast, written by a Scheduled Job. Snapshots matter more than the live number: \"what did we think on the first of the month\" is the question a forecast review actually asks, and it is unanswerable after the fact without them. The live figure reads Deal; the historical one reads this table." })
4261
+ ObjectType({ description: "The forecast for a pipeline and owner as captured on a given day, so past forecasts can be compared with today's." })
4262
4262
  ], mjBizAppsSalesForecastSnapshot_);
4263
4263
  export { mjBizAppsSalesForecastSnapshot_ };
4264
4264
  //****************************************************************************
@@ -4888,7 +4888,7 @@ __decorate([
4888
4888
  __metadata("design:type", Array)
4889
4889
  ], mjBizAppsSalesLifecycleStageType_.prototype, "ReadableFields___", void 0);
4890
4890
  mjBizAppsSalesLifecycleStageType_ = __decorate([
4891
- ObjectType({ description: "Where a Person or Organization sits on the journey from stranger to evangelist. This table is what makes \"Lead\" a STAGE rather than an entity: a lead is a common.Person carrying a LifecycleStageTypeID, not a second identity table for humans." })
4891
+ ObjectType({ description: "Where a person or organization is in the customer journey, from Subscriber to Customer. A lead is a contact at the Lead stage, not a separate record." })
4892
4892
  ], mjBizAppsSalesLifecycleStageType_);
4893
4893
  export { mjBizAppsSalesLifecycleStageType_ };
4894
4894
  //****************************************************************************
@@ -5164,7 +5164,7 @@ __decorate([
5164
5164
  __metadata("design:type", String)
5165
5165
  ], mjBizAppsSalesLossReason_.prototype, "Category", void 0);
5166
5166
  __decorate([
5167
- Field(() => Boolean, { nullable: true, description: "When 1, Sales.CloseDeal refuses a close against this reason unless Deal.LossNotes is supplied." }),
5167
+ Field(() => Boolean, { nullable: true, description: "When on, a deal closed as lost with this reason must also have loss notes." }),
5168
5168
  __metadata("design:type", Boolean)
5169
5169
  ], mjBizAppsSalesLossReason_.prototype, "RequiresNotes", void 0);
5170
5170
  __decorate([
@@ -5192,7 +5192,7 @@ __decorate([
5192
5192
  __metadata("design:type", Array)
5193
5193
  ], mjBizAppsSalesLossReason_.prototype, "ReadableFields___", void 0);
5194
5194
  mjBizAppsSalesLossReason_ = __decorate([
5195
- ObjectType({ description: "Why a deal was lost. Loss reason is this app's ONLY mandatory field and the friction is deliberate: loss reasons are the highest-value and most consistently-skipped data in any CRM." })
5195
+ ObjectType({ description: "Why a deal was lost. Closing a deal as lost requires one." })
5196
5196
  ], mjBizAppsSalesLossReason_);
5197
5197
  export { mjBizAppsSalesLossReason_ };
5198
5198
  //****************************************************************************
@@ -5477,7 +5477,7 @@ __decorate([
5477
5477
  __metadata("design:type", String)
5478
5478
  ], mjBizAppsSalesPipelineStage_.prototype, "ForecastCategoryTypeID", void 0);
5479
5479
  __decorate([
5480
- Field({ nullable: true, description: "The status a deal takes on when it ENTERS this stage. The stage names the vocabulary; the status carries the behaviour flags." }),
5480
+ Field({ nullable: true, description: "The status a deal takes on when it enters this stage." }),
5481
5481
  MaxLength(36),
5482
5482
  __metadata("design:type", String)
5483
5483
  ], mjBizAppsSalesPipelineStage_.prototype, "DealStatusTypeID", void 0);
@@ -5495,7 +5495,7 @@ __decorate([
5495
5495
  __metadata("design:type", String)
5496
5496
  ], mjBizAppsSalesPipelineStage_.prototype, "EntryCriteria", void 0);
5497
5497
  __decorate([
5498
- Field({ nullable: true, description: "Declarative JSON predicate evaluated SERVER-SIDE before a deal may leave this stage. A stage that cannot be exited without a signed mutual action plan is a config row, not a code branch." }),
5498
+ Field({ nullable: true, description: "Conditions for leaving this stage, stored as JSON for reference. The app does not check them." }),
5499
5499
  __metadata("design:type", String)
5500
5500
  ], mjBizAppsSalesPipelineStage_.prototype, "ExitCriteria", void 0);
5501
5501
  __decorate([
@@ -5503,7 +5503,7 @@ __decorate([
5503
5503
  __metadata("design:type", String)
5504
5504
  ], mjBizAppsSalesPipelineStage_.prototype, "RequiredFields", void 0);
5505
5505
  __decorate([
5506
- Field({ nullable: true, description: "\"What good looks like at this stage\", shown in the deal workspace. Sales enablement as a config field." }),
5506
+ Field({ nullable: true, description: "Guidance for reps on what a deal should have at this stage, in Markdown." }),
5507
5507
  __metadata("design:type", String)
5508
5508
  ], mjBizAppsSalesPipelineStage_.prototype, "GuidanceMarkdown", void 0);
5509
5509
  __decorate([
@@ -5538,7 +5538,7 @@ __decorate([
5538
5538
  __metadata("design:type", Array)
5539
5539
  ], mjBizAppsSalesPipelineStage_.prototype, "ReadableFields___", void 0);
5540
5540
  mjBizAppsSalesPipelineStage_ = __decorate([
5541
- ObjectType({ description: "An ordered stage within a pipeline. Stages carry NO IsWon/IsClosed of their own — they point at a DealStatusType that does. That indirection is what makes \"Closed Won\" a label rather than a behaviour, and lets a pipeline call its winning stage Signed, Booked or Enrolled with no code aware of the difference." })
5541
+ ObjectType({ description: "An ordered stage within a pipeline. Each stage sets the status a deal takes on when it enters the stage." })
5542
5542
  ], mjBizAppsSalesPipelineStage_);
5543
5543
  export { mjBizAppsSalesPipelineStage_ };
5544
5544
  //****************************************************************************
@@ -5843,7 +5843,7 @@ __decorate([
5843
5843
  __metadata("design:type", String)
5844
5844
  ], mjBizAppsSalesPipeline_.prototype, "ID", void 0);
5845
5845
  __decorate([
5846
- Field({ nullable: true, description: "The owning company. NOT NULL by design — this is what makes every forecast and bookings rollup sliceable by company for free, and every deal inherits it. FK to __mj.Company." }),
5846
+ Field({ nullable: true, description: "The company that owns this pipeline. Every deal in the pipeline belongs to this company." }),
5847
5847
  MaxLength(36),
5848
5848
  __metadata("design:type", String)
5849
5849
  ], mjBizAppsSalesPipeline_.prototype, "CompanyID", void 0);
@@ -5853,7 +5853,7 @@ __decorate([
5853
5853
  __metadata("design:type", String)
5854
5854
  ], mjBizAppsSalesPipeline_.prototype, "Name", void 0);
5855
5855
  __decorate([
5856
- Field({ nullable: true, description: "Stable identifier, unique PER COMPANY rather than globally: two operating companies may each run a pipeline they both call NEWBIZ." }),
5856
+ Field({ nullable: true, description: "Short identifier for the pipeline, unique within its company." }),
5857
5857
  MaxLength(40),
5858
5858
  __metadata("design:type", String)
5859
5859
  ], mjBizAppsSalesPipeline_.prototype, "Code", void 0);
@@ -5872,11 +5872,11 @@ __decorate([
5872
5872
  __metadata("design:type", String)
5873
5873
  ], mjBizAppsSalesPipeline_.prototype, "DefaultForecastCategoryTypeID", void 0);
5874
5874
  __decorate([
5875
- Field(() => Boolean, { nullable: true, description: "Pipeline-level default for whether deals carry catalog lines (priced mode) or are header-only with a hand-entered Amount (simple mode). Overridable per deal. Partner-referral and sponsorship pipelines may never carry lines." }),
5875
+ Field(() => Boolean, { nullable: true, description: "Whether deals in this pipeline carry product lines priced by Orders, or a single amount entered by hand." }),
5876
5876
  __metadata("design:type", Boolean)
5877
5877
  ], mjBizAppsSalesPipeline_.prototype, "RequiresDealLines", void 0);
5878
5878
  __decorate([
5879
- Field({ nullable: true, description: "JSON declaring the DEFAULT outcome of winning a deal in this pipeline: whether to create a contract, which contract type, where subscription lines go, where one-time lines go, and what state the resulting order lands in. A deal may override it; one remote operation (Sales.CloseDeal) reads and executes it. JSON rather than columns because the policy shape is still being learned." }),
5879
+ Field({ nullable: true, description: "What happens when a deal in this pipeline is won, stored as JSON: whether a contract is created and of which type, and which follow-up tasks are raised." }),
5880
5880
  __metadata("design:type", String)
5881
5881
  ], mjBizAppsSalesPipeline_.prototype, "CloseWonPolicy", void 0);
5882
5882
  __decorate([
@@ -6207,7 +6207,7 @@ export { mjBizAppsSalesPipelineResolver };
6207
6207
  let mjBizAppsSalesSalesAccount_ = class mjBizAppsSalesSalesAccount_ {
6208
6208
  };
6209
6209
  __decorate([
6210
- Field({ description: "Same value as the parent __mj_BizAppsCommon.Organization.ID. The primary key IS the foreign key; this is not a separate surrogate identity." }),
6210
+ Field({ description: "The account's ID, the same as its organization's ID." }),
6211
6211
  MaxLength(36),
6212
6212
  __metadata("design:type", String)
6213
6213
  ], mjBizAppsSalesSalesAccount_.prototype, "ID", void 0);
@@ -6232,7 +6232,7 @@ __decorate([
6232
6232
  __metadata("design:type", String)
6233
6233
  ], mjBizAppsSalesSalesAccount_.prototype, "LeadSourceTypeID", void 0);
6234
6234
  __decorate([
6235
- Field({ nullable: true, description: "A LABEL, not a routing engine. Territory assignment as a rules engine is a product in its own right and is on the not-doing list." }),
6235
+ Field({ nullable: true, description: "Sales territory label for the account. It is not used to route or assign accounts." }),
6236
6236
  MaxLength(100),
6237
6237
  __metadata("design:type", String)
6238
6238
  ], mjBizAppsSalesSalesAccount_.prototype, "Territory", void 0);
@@ -6251,12 +6251,12 @@ __decorate([
6251
6251
  __metadata("design:type", String)
6252
6252
  ], mjBizAppsSalesSalesAccount_.prototype, "IndustryCode", void 0);
6253
6253
  __decorate([
6254
- Field({ nullable: true, description: "A BAND, not a number, for the same reason as AnnualRevenueBand." }),
6254
+ Field({ nullable: true, description: "Approximate number of employees as a range, for example 50-200." }),
6255
6255
  MaxLength(50),
6256
6256
  __metadata("design:type", String)
6257
6257
  ], mjBizAppsSalesSalesAccount_.prototype, "EmployeeCountBand", void 0);
6258
6258
  __decorate([
6259
- Field({ nullable: true, description: "A BAND, not a number (\"$1M-$5M\"), on purpose. A rep's guess stored as an exact figure is false precision that later gets treated as fact." }),
6259
+ Field({ nullable: true, description: "Approximate annual revenue as a range, for example $1M-$5M." }),
6260
6260
  MaxLength(50),
6261
6261
  __metadata("design:type", String)
6262
6262
  ], mjBizAppsSalesSalesAccount_.prototype, "AnnualRevenueBand", void 0);
@@ -6383,7 +6383,7 @@ __decorate([
6383
6383
  __metadata("design:type", Array)
6384
6384
  ], mjBizAppsSalesSalesAccount_.prototype, "ReadableFields___", void 0);
6385
6385
  mjBizAppsSalesSalesAccount_ = __decorate([
6386
- ObjectType({ description: "CRM attributes for an organization we sell to. An IsA extension of __mj_BizAppsCommon.Organization sharing its UUID — the account and the organization ARE one record, so a customer that is also a vendor and a member stays one row in the Organization graph." })
6386
+ ObjectType({ description: "Sales details for an organization you sell to. The account and its organization are one record." })
6387
6387
  ], mjBizAppsSalesSalesAccount_);
6388
6388
  export { mjBizAppsSalesSalesAccount_ };
6389
6389
  //****************************************************************************
@@ -6787,7 +6787,7 @@ export { mjBizAppsSalesSalesAccountResolver };
6787
6787
  let mjBizAppsSalesSalesContact_ = class mjBizAppsSalesSalesContact_ {
6788
6788
  };
6789
6789
  __decorate([
6790
- Field({ description: "Same value as the parent __mj_BizAppsCommon.Person.ID. The primary key IS the foreign key." }),
6790
+ Field({ description: "The contact's ID, the same as its person's ID." }),
6791
6791
  MaxLength(36),
6792
6792
  __metadata("design:type", String)
6793
6793
  ], mjBizAppsSalesSalesContact_.prototype, "ID", void 0);
@@ -6802,7 +6802,7 @@ __decorate([
6802
6802
  __metadata("design:type", String)
6803
6803
  ], mjBizAppsSalesSalesContact_.prototype, "LifecycleStageTypeID", void 0);
6804
6804
  __decorate([
6805
- Field({ nullable: true, description: "The contact's DEFAULT buying role. The role that matters per-deal lives on DealContactRole, because one contact holds different roles on different deals." }),
6805
+ Field({ nullable: true, description: "The contact's usual buying role. The role on a particular deal is set in that deal's buying team." }),
6806
6806
  MaxLength(36),
6807
6807
  __metadata("design:type", String)
6808
6808
  ], mjBizAppsSalesSalesContact_.prototype, "BuyingRoleTypeID", void 0);
@@ -6944,7 +6944,7 @@ __decorate([
6944
6944
  __metadata("design:type", Array)
6945
6945
  ], mjBizAppsSalesSalesContact_.prototype, "ReadableFields___", void 0);
6946
6946
  mjBizAppsSalesSalesContact_ = __decorate([
6947
- ObjectType({ description: "CRM attributes for a person we sell to. An IsA extension of __mj_BizAppsCommon.Person sharing its UUID. There is deliberately no Lead entity — a lead is a Person at a lifecycle stage." })
6947
+ ObjectType({ description: "Sales details for a person you sell to. The contact and its person are one record." })
6948
6948
  ], mjBizAppsSalesSalesContact_);
6949
6949
  export { mjBizAppsSalesSalesContact_ };
6950
6950
  //****************************************************************************