@campfire-interactive/master-data-client 5.29.0 → 5.30.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/client.d.ts +4 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +5 -0
- package/dist/client.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/programs.d.ts +65 -0
- package/dist/programs.d.ts.map +1 -0
- package/dist/programs.js +193 -0
- package/dist/programs.js.map +1 -0
- package/dist/quoteAsks.d.ts +18 -2
- package/dist/quoteAsks.d.ts.map +1 -1
- package/dist/quoteAsks.js +23 -2
- package/dist/quoteAsks.js.map +1 -1
- package/dist/rfqs.d.ts +103 -0
- package/dist/rfqs.d.ts.map +1 -0
- package/dist/rfqs.js +148 -0
- package/dist/rfqs.js.map +1 -0
- package/dist/standardAttributes.d.ts +75 -0
- package/dist/standardAttributes.d.ts.map +1 -0
- package/dist/standardAttributes.js +183 -0
- package/dist/standardAttributes.js.map +1 -0
- package/dist/types.d.ts +172 -5
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +31 -31
package/dist/types.d.ts
CHANGED
|
@@ -239,10 +239,15 @@ export interface Quote {
|
|
|
239
239
|
customerCompanyId: string;
|
|
240
240
|
programId: string | null;
|
|
241
241
|
/**
|
|
242
|
-
* The
|
|
242
|
+
* The RFQ this quote is one competing answer to — see {@link Rfq}.
|
|
243
243
|
* Null means it competes with nothing and is awardable on its own, which is a
|
|
244
244
|
* legitimate state, not missing data.
|
|
245
245
|
*/
|
|
246
|
+
rfqId: string | null;
|
|
247
|
+
/**
|
|
248
|
+
* @deprecated The old spelling of {@link Quote.rfqId}, carrying the SAME
|
|
249
|
+
* value. Both are returned during the deprecation window; read `rfqId`.
|
|
250
|
+
*/
|
|
246
251
|
askId: string | null;
|
|
247
252
|
/**
|
|
248
253
|
* @deprecated A DERIVED MIRROR of the quote's lines — read `quoteLines.list()`
|
|
@@ -530,7 +535,156 @@ export interface SetEffectivePriceInput {
|
|
|
530
535
|
/** Which app is writing — gated to 'omsf' | 'cpq' | 'admin' server-side. */
|
|
531
536
|
callerRole: 'omsf' | 'cpq' | 'admin';
|
|
532
537
|
}
|
|
538
|
+
/**
|
|
539
|
+
* Five states, where the old `QuoteAskStatus` had three.
|
|
540
|
+
*
|
|
541
|
+
* `won` and `lost` split the old `resolved`, which could not say whether
|
|
542
|
+
* anybody had actually won — a resolved ask with no `resolvedByQuoteId` was a
|
|
543
|
+
* legal row and both consumer UIs papered over it. On this table the split is
|
|
544
|
+
* enforced by a CHECK: `won` implies a winner and nothing else may carry one.
|
|
545
|
+
*
|
|
546
|
+
* `merged` is new. It names the absorbed half of a duplicate and implies
|
|
547
|
+
* `mergedIntoRfqId`, also by CHECK.
|
|
548
|
+
*/
|
|
549
|
+
export type RfqStatus = 'open' | 'won' | 'lost' | 'cancelled' | 'merged';
|
|
550
|
+
/**
|
|
551
|
+
* What made this RFQ. Never null and with no `unknown` member, deliberately:
|
|
552
|
+
* "did a machine mint this?" has to stay answerable, and a nullable column
|
|
553
|
+
* would answer it with a shrug.
|
|
554
|
+
*/
|
|
555
|
+
export type RfqSource = 'email' | 'manual' | 'cpq_fallback' | 'import';
|
|
556
|
+
export interface Rfq {
|
|
557
|
+
id: string;
|
|
558
|
+
tenantId: string;
|
|
559
|
+
/** `RFQ-YYYY-NNN`, minted server-side from an atomic per-(tenant, year)
|
|
560
|
+
* counter. Three digits is a MINIMUM width, not a maximum. */
|
|
561
|
+
rfqNumber: string;
|
|
562
|
+
customerCompanyId: string;
|
|
563
|
+
name: string | null;
|
|
564
|
+
/** The OEM's OWN number for this request — `GM-2026-4471`. Theirs, not ours,
|
|
565
|
+
* so it is free text and not unique. */
|
|
566
|
+
customerReference: string | null;
|
|
567
|
+
/** When the REQUEST arrived — not when it was recorded. A separate fact from
|
|
568
|
+
* `createdAt`, which is a job's timestamp once RFQs are minted
|
|
569
|
+
* automatically. This is the denominator of every response-time question. */
|
|
570
|
+
receivedAt: string | null;
|
|
571
|
+
dueDate: string | null;
|
|
572
|
+
/**
|
|
573
|
+
* WHAT THE CUSTOMER ASKED FOR — not what we offered.
|
|
574
|
+
*
|
|
575
|
+
* {@link Quote.sopDate} is our answer and may legitimately differ, because we
|
|
576
|
+
* cannot always hit their date. This holds what the request said, unchanged.
|
|
577
|
+
* Two answers to two different questions, which is why both exist; the
|
|
578
|
+
* `requested` prefix says whose claim this one is.
|
|
579
|
+
*
|
|
580
|
+
* `YYYY-MM-DD`, or null when the request never stated it.
|
|
581
|
+
*/
|
|
582
|
+
requestedSopDate: string | null;
|
|
583
|
+
/**
|
|
584
|
+
* How much of {@link Rfq.requestedSopDate} to believe. An extraction that
|
|
585
|
+
* read "SOP mid-2027" says `year`; one that read `2027-04` says `month`.
|
|
586
|
+
* Rendering the bare date without consulting this invents a precision the
|
|
587
|
+
* customer never gave.
|
|
588
|
+
*/
|
|
589
|
+
requestedSopPrecision: SopEopPrecision | null;
|
|
590
|
+
requestedEopDate: string | null;
|
|
591
|
+
/** See {@link Rfq.requestedSopPrecision}. */
|
|
592
|
+
requestedEopPrecision: SopEopPrecision | null;
|
|
593
|
+
source: RfqSource;
|
|
594
|
+
/** Opaque provenance for whatever minted this — an OMSF inbound-RFQ id, an
|
|
595
|
+
* import batch. Untyped and unvalidated on purpose: it crosses a service
|
|
596
|
+
* boundary. */
|
|
597
|
+
sourceRef: string | null;
|
|
598
|
+
status: RfqStatus;
|
|
599
|
+
/** Which quote won. Present exactly when `status` is `won`. A recorded fact
|
|
600
|
+
* — closing the siblings is a later phase. */
|
|
601
|
+
wonByQuoteId: string | null;
|
|
602
|
+
/** What absorbed this RFQ. Present exactly when `status` is `merged`. */
|
|
603
|
+
mergedIntoRfqId: string | null;
|
|
604
|
+
/** When the RFQ stopped being open. Set for every non-open status,
|
|
605
|
+
* `cancelled` and `merged` included; null while open. */
|
|
606
|
+
closedAt: string | null;
|
|
607
|
+
/** Reporting only — NEVER used to decide competition. An opportunity spans
|
|
608
|
+
* rounds; an RFQ is one round. */
|
|
609
|
+
opportunityId: string | null;
|
|
610
|
+
createdBy: string;
|
|
611
|
+
updatedBy: string;
|
|
612
|
+
createdAt: string;
|
|
613
|
+
updatedAt: string;
|
|
614
|
+
}
|
|
615
|
+
export interface RfqSummary extends Rfq {
|
|
616
|
+
/** How many quotes compete in this RFQ. Deliberately not a value aggregate. */
|
|
617
|
+
quoteCount: number;
|
|
618
|
+
}
|
|
619
|
+
/**
|
|
620
|
+
* A RANGE across the RFQ's quotes — deliberately not a total.
|
|
621
|
+
*
|
|
622
|
+
* The quotes are ALTERNATIVES: three of four lose on every multi-scenario RFQ
|
|
623
|
+
* by construction, so adding them multiply-counts the same business.
|
|
624
|
+
*/
|
|
625
|
+
export interface RfqRange {
|
|
626
|
+
quoteCount: number;
|
|
627
|
+
minValue: number | null;
|
|
628
|
+
maxValue: number | null;
|
|
629
|
+
minBlendedMarginPct: number | null;
|
|
630
|
+
maxBlendedMarginPct: number | null;
|
|
631
|
+
}
|
|
632
|
+
export interface RfqCompetingQuote {
|
|
633
|
+
id: string;
|
|
634
|
+
quoteNumber: string;
|
|
635
|
+
name: string | null;
|
|
636
|
+
status: QuoteStatus;
|
|
637
|
+
lines: QuoteLine[];
|
|
638
|
+
rollUp: QuoteLineRollUp;
|
|
639
|
+
}
|
|
640
|
+
export interface RfqDetail extends Rfq {
|
|
641
|
+
quotes: RfqCompetingQuote[];
|
|
642
|
+
range: RfqRange;
|
|
643
|
+
}
|
|
644
|
+
export interface CreateRfqInput {
|
|
645
|
+
customerCompanyId: string;
|
|
646
|
+
name?: string | null;
|
|
647
|
+
customerReference?: string | null;
|
|
648
|
+
/** When the request arrived. Send it when you know it — see {@link Rfq}. */
|
|
649
|
+
receivedAt?: string | null;
|
|
650
|
+
dueDate?: string | null;
|
|
651
|
+
/** What the customer asked for, not what you will offer — see {@link Rfq}. */
|
|
652
|
+
requestedSopDate?: string | null;
|
|
653
|
+
/** Send this whenever the source was coarser than a day. */
|
|
654
|
+
requestedSopPrecision?: SopEopPrecision | null;
|
|
655
|
+
requestedEopDate?: string | null;
|
|
656
|
+
requestedEopPrecision?: SopEopPrecision | null;
|
|
657
|
+
/** Defaults to `manual`. */
|
|
658
|
+
source?: RfqSource;
|
|
659
|
+
sourceRef?: string | null;
|
|
660
|
+
opportunityId?: string | null;
|
|
661
|
+
}
|
|
662
|
+
export interface UpdateRfqInput {
|
|
663
|
+
name?: string | null;
|
|
664
|
+
customerReference?: string | null;
|
|
665
|
+
receivedAt?: string | null;
|
|
666
|
+
dueDate?: string | null;
|
|
667
|
+
requestedSopDate?: string | null;
|
|
668
|
+
requestedSopPrecision?: SopEopPrecision | null;
|
|
669
|
+
requestedEopDate?: string | null;
|
|
670
|
+
requestedEopPrecision?: SopEopPrecision | null;
|
|
671
|
+
sourceRef?: string | null;
|
|
672
|
+
opportunityId?: string | null;
|
|
673
|
+
status?: RfqStatus;
|
|
674
|
+
/** Required when `status` is `won`; must be one of this RFQ's own quotes. */
|
|
675
|
+
wonByQuoteId?: string | null;
|
|
676
|
+
/** Required when `status` is `merged`. Prefer `rfqs.merge(id, target)`. */
|
|
677
|
+
mergedIntoRfqId?: string | null;
|
|
678
|
+
}
|
|
679
|
+
export interface ListRfqsOptions {
|
|
680
|
+
status?: RfqStatus;
|
|
681
|
+
source?: RfqSource;
|
|
682
|
+
customerCompanyId?: string;
|
|
683
|
+
opportunityId?: string;
|
|
684
|
+
}
|
|
685
|
+
/** @deprecated Use {@link RfqStatus}. `resolved` splits into `won` / `lost`. */
|
|
533
686
|
export type QuoteAskStatus = 'open' | 'resolved' | 'cancelled';
|
|
687
|
+
/** @deprecated Use {@link Rfq}. Same row, same id. */
|
|
534
688
|
export interface QuoteAsk {
|
|
535
689
|
id: string;
|
|
536
690
|
tenantId: string;
|
|
@@ -551,6 +705,7 @@ export interface QuoteAsk {
|
|
|
551
705
|
createdAt: string;
|
|
552
706
|
updatedAt: string;
|
|
553
707
|
}
|
|
708
|
+
/** @deprecated Use {@link RfqSummary}. */
|
|
554
709
|
export interface QuoteAskSummary extends QuoteAsk {
|
|
555
710
|
/** How many quotes compete in this ask. Deliberately not a value aggregate. */
|
|
556
711
|
quoteCount: number;
|
|
@@ -561,6 +716,7 @@ export interface QuoteAskSummary extends QuoteAsk {
|
|
|
561
716
|
* The quotes are ALTERNATIVES: three of four lose on every multi-scenario RFQ by
|
|
562
717
|
* construction, so adding them multiply-counts the same business.
|
|
563
718
|
*/
|
|
719
|
+
/** @deprecated Use {@link RfqRange}. Identical shape. */
|
|
564
720
|
export interface QuoteAskRange {
|
|
565
721
|
quoteCount: number;
|
|
566
722
|
minValue: number | null;
|
|
@@ -568,6 +724,7 @@ export interface QuoteAskRange {
|
|
|
568
724
|
minBlendedMarginPct: number | null;
|
|
569
725
|
maxBlendedMarginPct: number | null;
|
|
570
726
|
}
|
|
727
|
+
/** @deprecated Use {@link RfqCompetingQuote}. */
|
|
571
728
|
export interface QuoteAskCompetingQuote {
|
|
572
729
|
id: string;
|
|
573
730
|
quoteNumber: string;
|
|
@@ -576,16 +733,19 @@ export interface QuoteAskCompetingQuote {
|
|
|
576
733
|
lines: QuoteLine[];
|
|
577
734
|
rollUp: QuoteLineRollUp;
|
|
578
735
|
}
|
|
736
|
+
/** @deprecated Use {@link RfqDetail}. */
|
|
579
737
|
export interface QuoteAskDetail extends QuoteAsk {
|
|
580
738
|
quotes: QuoteAskCompetingQuote[];
|
|
581
739
|
range: QuoteAskRange;
|
|
582
740
|
}
|
|
741
|
+
/** @deprecated Use {@link CreateRfqInput}. Creates with `source: 'manual'`. */
|
|
583
742
|
export interface CreateQuoteAskInput {
|
|
584
743
|
customerCompanyId: string;
|
|
585
744
|
name?: string | null;
|
|
586
745
|
opportunityId?: string | null;
|
|
587
746
|
dueDate?: string | null;
|
|
588
747
|
}
|
|
748
|
+
/** @deprecated Use {@link UpdateRfqInput}. */
|
|
589
749
|
export interface UpdateQuoteAskInput {
|
|
590
750
|
name?: string | null;
|
|
591
751
|
dueDate?: string | null;
|
|
@@ -594,6 +754,7 @@ export interface UpdateQuoteAskInput {
|
|
|
594
754
|
/** Required when resolving; must be one of this ask's own quotes. */
|
|
595
755
|
resolvedByQuoteId?: string | null;
|
|
596
756
|
}
|
|
757
|
+
/** @deprecated Use {@link ListRfqsOptions}. */
|
|
597
758
|
export interface ListQuoteAsksOptions {
|
|
598
759
|
status?: QuoteAskStatus;
|
|
599
760
|
customerCompanyId?: string;
|
|
@@ -865,9 +1026,12 @@ export interface CreateQuoteInput {
|
|
|
865
1026
|
name?: string;
|
|
866
1027
|
customerCompanyId: string;
|
|
867
1028
|
programId?: string;
|
|
868
|
-
/** Join the quote to an
|
|
869
|
-
*
|
|
1029
|
+
/** Join the quote to an RFQ ({@link Rfq}). Optional — a quote with no RFQ
|
|
1030
|
+
* competes with nothing and is awardable on its own. Validated to exist
|
|
870
1031
|
* in-tenant AND to belong to the same customer as the quote. */
|
|
1032
|
+
rfqId?: string | null;
|
|
1033
|
+
/** @deprecated The old spelling of `rfqId`. Still accepted; when both are
|
|
1034
|
+
* sent, `rfqId` wins. */
|
|
871
1035
|
askId?: string | null;
|
|
872
1036
|
partId?: string;
|
|
873
1037
|
/** Historical/parent quote this one was copied from. Validated to exist
|
|
@@ -933,8 +1097,11 @@ export interface UpdateQuoteInput {
|
|
|
933
1097
|
quoteNumber?: string;
|
|
934
1098
|
name?: string | null;
|
|
935
1099
|
programId?: string | null;
|
|
936
|
-
/** Join the quote to an
|
|
937
|
-
*
|
|
1100
|
+
/** Join the quote to an RFQ ({@link Rfq}), or `null` to detach it (it then
|
|
1101
|
+
* competes with nothing). Validated to match the quote's customer. */
|
|
1102
|
+
rfqId?: string | null;
|
|
1103
|
+
/** @deprecated The old spelling of `rfqId`. Still accepted; when both are
|
|
1104
|
+
* sent, `rfqId` wins. Detaching through either clears both. */
|
|
938
1105
|
askId?: string | null;
|
|
939
1106
|
partId?: string | null;
|
|
940
1107
|
/** Set to a quote id to record provenance, or `null` to clear it. */
|