Skip to main content

domain/
operations.rs

1//! Portfolio and cross-service operating contracts for pet-resort automation.
2//!
3//! This module models the external source-of-truth chain at the broad operations layer:
4//! portfolio facts, Gingr/adjacent-system access patterns, service-line offerings,
5//! pain areas, and labor/capacity optimization levers become validated domain vocabulary
6//! before analytics, daily briefs, staff tasks, or agent workflows can use them.
7//!
8//! Service-specific daily brief, lead, reputation, staff, grooming, training, and retail
9//! vocabulary lives in those owner modules; this module keeps the shared operations
10//! namespace visible without flattening source facts into vague strings.
11
12use bon::Builder;
13use chrono::NaiveDate;
14use nutype::nutype;
15use serde::{Deserialize, Deserializer, Serialize};
16
17use crate::entities::LocationId;
18
19#[nutype(
20    sanitize(trim),
21    validate(not_empty, len_char_max = 160),
22    derive(
23        Debug,
24        Clone,
25        PartialEq,
26        Eq,
27        PartialOrd,
28        Ord,
29        Hash,
30        Serialize,
31        Deserialize
32    )
33)]
34/// Validated operations metric label used for KPI/read-model dimensions.
35///
36/// Metric names label source-derived facts such as labor-to-revenue risk,
37/// occupancy, utilization, or conversion measures without treating free text as
38/// authoritative workflow state.
39pub struct MetricName(String);
40
41/// Operating day boundary for operations contracts.
42pub mod operating_day {
43    use super::*;
44
45    #[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]
46    /// Typed date domain value that keeps raw primitives out of operations workflows.
47    pub struct Date(NaiveDate);
48
49    impl Date {
50        /// Promotes boundary input into a validated operations domain value.
51        pub const fn try_new(value: NaiveDate) -> Result<Self> {
52            Ok(Self(value))
53        }
54
55        /// Exposes the validated scalar for serialization and adapter boundaries.
56        pub const fn get(self) -> NaiveDate {
57            self.0
58        }
59    }
60
61    #[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]
62    /// Typed key domain value that keeps raw primitives out of operations workflows.
63    pub struct Key {
64        location_id: LocationId,
65        service_line: super::service_core::ServiceLine,
66        date: Date,
67    }
68
69    impl Key {
70        /// Assembles this operations value from already-validated domain parts.
71        pub const fn new(
72            location_id: LocationId,
73            service_line: super::service_core::ServiceLine,
74            date: Date,
75        ) -> Self {
76            Self {
77                location_id,
78                service_line,
79                date,
80            }
81        }
82
83        /// Returns this operations value's location id.
84        pub const fn location_id(&self) -> LocationId {
85            self.location_id
86        }
87
88        /// Returns this operations value's service line.
89        pub const fn service_line(&self) -> super::service_core::ServiceLine {
90            self.service_line
91        }
92
93        /// Returns this operations value's date.
94        pub const fn date(&self) -> Date {
95            self.date
96        }
97    }
98
99    #[derive(Debug, Clone, Copy, PartialEq, Eq, thiserror::Error)]
100    /// Validation failures returned by operations domain constructors.
101    pub enum Error {}
102
103    /// Result type returned by fallible operations operations.
104    pub type Result<T> = std::result::Result<T, Error>;
105}
106
107/// Operational observations and recommendations produced from validated source facts.
108pub mod operational {
109    use super::*;
110
111    #[nutype(
112        sanitize(trim),
113        validate(not_empty, len_char_max = 500),
114        derive(
115            Debug,
116            Clone,
117            PartialEq,
118            Eq,
119            PartialOrd,
120            Ord,
121            Hash,
122            Serialize,
123            Deserialize
124        )
125    )]
126    /// Human-readable operational observation attached to evidence-backed workflows.
127    ///
128    /// Observations describe what a source/read-model chain found—such as labor
129    /// mismatch, customer-experience risk, or revenue leakage—without granting
130    /// an agent authority to act without the target workflow gate.
131    pub struct Observation(String);
132
133    #[nutype(
134        sanitize(trim),
135        validate(not_empty, len_char_max = 500),
136        derive(
137            Debug,
138            Clone,
139            PartialEq,
140            Eq,
141            PartialOrd,
142            Ord,
143            Hash,
144            Serialize,
145            Deserialize
146        )
147    )]
148    /// Human-readable recommendation proposed for staff or manager review.
149    ///
150    /// Recommendations are labor-cost levers only after the surrounding workflow
151    /// decides whether they remain drafts, become staff tasks, or require manager
152    /// approval.
153    pub struct Recommendation(String);
154
155    #[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
156    /// Portfolio pain area that can become a bounded automation or labor-improvement lane.
157    pub enum PainArea {
158        /// Labor efficiency operations signal for labor, capacity, or task planning.
159        LaborEfficiency,
160        /// Customer communication load operations signal for labor, capacity, or task planning.
161        CustomerCommunicationLoad,
162        /// Reservation capacity optimization operations signal for labor, capacity, or task planning.
163        ReservationCapacityOptimization,
164        /// Data fragmentation operations signal for labor, capacity, or task planning.
165        DataFragmentation,
166        /// Sales retention marketing operations signal for labor, capacity, or task planning.
167        SalesRetentionMarketing,
168        /// Training and standards operations signal for labor, capacity, or task planning.
169        TrainingAndStandards,
170    }
171}
172
173/// Portfolio facts for the NVA Pet Resorts operating context.
174pub mod pet_resort {
175    use super::*;
176
177    #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Builder)]
178    /// Validated portfolio context used to scope cross-resort automation and reporting.
179    pub struct Portfolio {
180        /// Operator fact promoted into this operations contract.
181        pub operator: Operator,
182        /// Resort count fact promoted into this operations contract.
183        pub resort_count: ResortCount,
184        /// Structure fact promoted into this operations contract.
185        pub structure: PortfolioStructure,
186        /// Business lines fact promoted into this operations contract.
187        pub business_lines: Vec<BusinessLine>,
188        /// Brands fact promoted into this operations contract.
189        pub brands: Vec<Brand>,
190    }
191
192    #[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
193    /// Domain vocabulary for operator decisions in operations workflows.
194    pub enum Operator {
195        /// National veterinary associates operations signal for labor, capacity, or task planning.
196        NationalVeterinaryAssociates,
197    }
198
199    #[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
200    /// Domain vocabulary for portfolio structure decisions in operations workflows.
201    pub enum PortfolioStructure {
202        /// Federated multi brand operations signal for labor, capacity, or task planning.
203        FederatedMultiBrand,
204        /// Single brand operations signal for labor, capacity, or task planning.
205        SingleBrand,
206        /// Provider role or status could not be mapped confidently.
207        Unknown,
208    }
209
210    #[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
211    /// Domain vocabulary for business line decisions in operations workflows.
212    pub enum BusinessLine {
213        /// General practice veterinary hospitals operations signal for labor, capacity, or task planning.
214        GeneralPracticeVeterinaryHospitals,
215        /// Pet resorts operations signal for labor, capacity, or task planning.
216        PetResorts,
217        /// Equine operations signal for labor, capacity, or task planning.
218        Equine,
219        /// Specialty emergency hospitals operations signal for labor, capacity, or task planning.
220        SpecialtyEmergencyHospitals,
221    }
222
223    #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
224    /// Domain vocabulary for brand decisions in operations workflows.
225    pub enum Brand {
226        /// Nva pet resorts operations signal for labor, capacity, or task planning.
227        NvaPetResorts,
228        /// Pet suites operations signal for labor, capacity, or task planning.
229        PetSuites,
230        /// Pooch hotel operations signal for labor, capacity, or task planning.
231        PoochHotel,
232        /// Elite suites operations signal for labor, capacity, or task planning.
233        EliteSuites,
234        /// The bark side operations signal for labor, capacity, or task planning.
235        TheBarkSide,
236        /// Woofdorf astoria operations signal for labor, capacity, or task planning.
237        WoofdorfAstoria,
238        /// Doggie district operations signal for labor, capacity, or task planning.
239        DoggieDistrict,
240        /// Contact or display name used by staff.
241        Other {
242            /// Name carried by this variant.
243            name: crate::location::Name,
244        },
245    }
246
247    #[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
248    /// Domain vocabulary for operating term decisions in operations workflows.
249    pub enum OperatingTerm {
250        /// Pawgress reports operations signal for labor, capacity, or task planning.
251        PawgressReports,
252        /// Boarding reservations operations signal for labor, capacity, or task planning.
253        BoardingReservations,
254        /// Daycare packages operations signal for labor, capacity, or task planning.
255        DaycarePackages,
256        /// Pet points rewards operations signal for labor, capacity, or task planning.
257        PetPointsRewards,
258        /// Gingr customer portal operations signal for labor, capacity, or task planning.
259        GingrCustomerPortal,
260        /// Lead capture and conversion operations signal for labor, capacity, or task planning.
261        LeadCaptureAndConversion,
262        /// Website email social outreach operations signal for labor, capacity, or task planning.
263        WebsiteEmailSocialOutreach,
264        /// Local market plans operations signal for labor, capacity, or task planning.
265        LocalMarketPlans,
266        /// Sales labor expenses customer satisfaction kpis operations signal for labor, capacity, or task planning.
267        SalesLaborExpensesCustomerSatisfactionKpis,
268        /// Osha cash handling operational compliance operations signal for labor, capacity, or task planning.
269        OshaCashHandlingOperationalCompliance,
270        /// Training certification completion operations signal for labor, capacity, or task planning.
271        TrainingCertificationCompletion,
272        /// Resort level ebitda profitability operations signal for labor, capacity, or task planning.
273        ResortLevelEbitdaProfitability,
274        /// Grooming cadence operations signal for labor, capacity, or task planning.
275        GroomingCadence,
276        /// Daycare eligibility rules operations signal for labor, capacity, or task planning.
277        DaycareEligibilityRules,
278        /// Guest experience operations signal for labor, capacity, or task planning.
279        GuestExperience,
280        /// Team member engagement retention operations signal for labor, capacity, or task planning.
281        TeamMemberEngagementRetention,
282    }
283}
284
285#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize)]
286/// Nonzero count of resorts in the operating portfolio.
287pub struct ResortCount(u16);
288
289impl ResortCount {
290    /// Promotes boundary input into a validated operations domain value.
291    pub const fn try_new(value: u16) -> Result<Self, ResortCountError> {
292        if value == 0 {
293            return Err(ResortCountError::ZeroResorts);
294        }
295        Ok(Self(value))
296    }
297
298    /// Exposes the validated scalar for serialization and adapter boundaries.
299    pub const fn get(self) -> u16 {
300        self.0
301    }
302}
303
304impl<'de> Deserialize<'de> for ResortCount {
305    fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
306    where
307        D: Deserializer<'de>,
308    {
309        Self::try_new(u16::deserialize(deserializer)?).map_err(serde::de::Error::custom)
310    }
311}
312
313#[derive(Debug, Clone, Copy, PartialEq, Eq, thiserror::Error)]
314/// Domain vocabulary for resort count error decisions in operations workflows.
315pub enum ResortCountError {
316    #[error("pet resort portfolios require at least one resort")]
317    /// Zero resorts operations signal for labor, capacity, or task planning.
318    ZeroResorts,
319}
320
321#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
322/// Service offering whose source facts drive capacity, labor, upsell, and care workflows.
323pub enum ServiceOffering {
324    /// Overnight stay service line.
325    Boarding {
326        /// Accommodation fact promoted into this operations contract.
327        accommodation: lodging_offer::Accommodation,
328        /// Included care fact promoted into this operations contract.
329        included_care: Vec<lodging_offer::CareFeature>,
330        /// Add ons fact promoted into this operations contract.
331        add_ons: Vec<lodging_offer::AddOn>,
332    },
333    /// Daycare operations signal for labor, capacity, or task planning.
334    Daycare {
335        /// Format fact promoted into this operations contract.
336        format: DaycareFormat,
337        /// Eligibility rules fact promoted into this operations contract.
338        eligibility_rules: Vec<DaycareEligibilityRule>,
339    },
340    /// Grooming service line or care-note category.
341    Grooming {
342        /// Requested service that drives scheduling and labor estimates.
343        service: crate::grooming::Service,
344        /// Cadence fact promoted into this operations contract.
345        cadence: crate::grooming::rebooking::Cadence,
346    },
347    /// Training service line or care-note category.
348    Training {
349        /// Program fact promoted into this operations contract.
350        program: crate::training::Program,
351    },
352    /// Retail partner product operations signal for labor, capacity, or task planning.
353    RetailPartnerProduct {
354        /// Partner fact promoted into this operations contract.
355        partner: crate::retail::Partner,
356        /// Category fact promoted into this operations contract.
357        category: crate::retail::product::Category,
358    },
359}
360
361/// Boarding/lodging offer vocabulary that affects room capacity and care labor.
362pub mod lodging_offer {
363    use super::*;
364
365    #[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
366    /// Domain vocabulary for accommodation decisions in operations workflows.
367    pub enum Accommodation {
368        /// Classic suite operations signal for labor, capacity, or task planning.
369        ClassicSuite,
370        /// Luxury suite operations signal for labor, capacity, or task planning.
371        LuxurySuite,
372        /// Cat condo operations signal for labor, capacity, or task planning.
373        CatCondo,
374    }
375
376    #[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
377    /// Domain vocabulary for care feature decisions in operations workflows.
378    pub enum CareFeature {
379        /// Daily housekeeping operations signal for labor, capacity, or task planning.
380        DailyHousekeeping,
381        /// Potty walks operations signal for labor, capacity, or task planning.
382        PottyWalks,
383        /// Bedding operations signal for labor, capacity, or task planning.
384        Bedding,
385        /// Progress report shared with the customer during care.
386        PawgressReport,
387        /// Feeding support operations signal for labor, capacity, or task planning.
388        FeedingSupport,
389        /// Medication support operations signal for labor, capacity, or task planning.
390        MedicationSupport,
391    }
392
393    #[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
394    /// Domain vocabulary for add on decisions in operations workflows.
395    pub enum AddOn {
396        /// Playtime operations signal for labor, capacity, or task planning.
397        Playtime,
398        /// Bath offered before departure from boarding.
399        ExitBath,
400        /// Premium suite operations signal for labor, capacity, or task planning.
401        PremiumSuite,
402        /// Grooming service line or care-note category.
403        Grooming,
404        /// Training session operations signal for labor, capacity, or task planning.
405        TrainingSession,
406    }
407}
408
409#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
410/// Daycare format whose eligibility and supervision needs affect staffing.
411pub enum DaycareFormat {
412    /// All day play operations signal for labor, capacity, or task planning.
413    AllDayPlay,
414    /// Half day play operations signal for labor, capacity, or task planning.
415    HalfDayPlay,
416    /// Daytime boarding care with lodging-style supervision.
417    DayBoarding,
418    /// Day play plus room operations signal for labor, capacity, or task planning.
419    DayPlayPlusRoom,
420    /// Cat individual playtime operations signal for labor, capacity, or task planning.
421    CatIndividualPlaytime,
422}
423
424#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
425/// Daycare rule that gates group-play workflow and protects staffing/safety decisions.
426pub enum DaycareEligibilityRule {
427    /// Temperament review required operations signal for labor, capacity, or task planning.
428    TemperamentReviewRequired,
429    /// Spay neuter required for group play operations signal for labor, capacity, or task planning.
430    SpayNeuterRequiredForGroupPlay,
431    /// Vaccine proof required operations signal for labor, capacity, or task planning.
432    VaccineProofRequired,
433    /// Staff to pet ratio required operations signal for labor, capacity, or task planning.
434    StaffToPetRatioRequired,
435}
436
437#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Builder)]
438/// Validated technology/source-system context for integrations and read models.
439pub struct TechnologyEcosystem {
440    /// Core portal fact promoted into this operations contract.
441    pub core_portal: service_core::OperatingSystem,
442    /// Data access fact promoted into this operations contract.
443    pub data_access: Vec<DataAccessPattern>,
444    /// Adjacent systems fact promoted into this operations contract.
445    pub adjacent_systems: Vec<AdjacentSystem>,
446}
447
448#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
449/// Way operational source facts can enter the platform before validation.
450pub enum DataAccessPattern {
451    /// Api operations signal for labor, capacity, or task planning.
452    Api,
453    /// Webhook operations signal for labor, capacity, or task planning.
454    Webhook,
455    /// Data export operations signal for labor, capacity, or task planning.
456    DataExport,
457    /// Warehouse operations signal for labor, capacity, or task planning.
458    Warehouse,
459    /// Business intelligence dashboard operations signal for labor, capacity, or task planning.
460    BusinessIntelligenceDashboard,
461    /// Provider role or status could not be mapped confidently.
462    Unknown,
463}
464
465#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
466/// Adjacent enterprise system that can provide labor, revenue, marketing, or review evidence.
467pub enum AdjacentSystem {
468    /// Avature recruiting operations signal for labor, capacity, or task planning.
469    AvatureRecruiting,
470    /// Ga4 operations signal for labor, capacity, or task planning.
471    Ga4,
472    /// Amplitude operations signal for labor, capacity, or task planning.
473    Amplitude,
474    /// Google tag manager operations signal for labor, capacity, or task planning.
475    GoogleTagManager,
476    /// Hris operations signal for labor, capacity, or task planning.
477    Hris,
478    /// Labor scheduling source for staffing plans.
479    LaborScheduling,
480    /// Payroll source for labor-cost reconciliation.
481    Payroll,
482    /// Marketing automation operations signal for labor, capacity, or task planning.
483    MarketingAutomation,
484    /// Ticketing operations signal for labor, capacity, or task planning.
485    Ticketing,
486    /// Call center telephony operations signal for labor, capacity, or task planning.
487    CallCenterTelephony,
488    /// Reviews operations signal for labor, capacity, or task planning.
489    Reviews,
490    /// Email sms marketing operations signal for labor, capacity, or task planning.
491    EmailSmsMarketing,
492    /// Reporting or BI data source.
493    BusinessIntelligence,
494    /// Data lake operations signal for labor, capacity, or task planning.
495    DataLake,
496}
497
498#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
499/// Bounded AI use case mapped to a measurable workflow and human-approval boundary.
500pub enum AiUseCase {
501    /// Resort manager daily briefing operations signal for labor, capacity, or task planning.
502    ResortManagerDailyBriefing,
503    /// Regional ops exception reporting operations signal for labor, capacity, or task planning.
504    RegionalOpsExceptionReporting,
505    /// Customer inbox and call deflection operations signal for labor, capacity, or task planning.
506    CustomerInboxAndCallDeflection,
507    /// Lead conversion operations signal for labor, capacity, or task planning.
508    LeadConversion,
509    /// Grooming rebooking operations signal for labor, capacity, or task planning.
510    GroomingRebooking,
511    /// Post stay pawgress report assistant operations signal for labor, capacity, or task planning.
512    PostStayPawgressReportAssistant,
513    /// Review reputation triage operations signal for labor, capacity, or task planning.
514    ReviewReputationTriage,
515    /// Sop knowledge assistant operations signal for labor, capacity, or task planning.
516    SopKnowledgeAssistant,
517    /// Data quality ops hygiene operations signal for labor, capacity, or task planning.
518    DataQualityOpsHygiene,
519    /// Incident report drafting operations signal for labor, capacity, or task planning.
520    IncidentReportDrafting,
521    /// Training onboarding assistant operations signal for labor, capacity, or task planning.
522    TrainingOnboardingAssistant,
523    /// Lapsed customer winback operations signal for labor, capacity, or task planning.
524    LapsedCustomerWinback,
525    /// Boarding pre arrival checklist automation operations signal for labor, capacity, or task planning.
526    BoardingPreArrivalChecklistAutomation,
527    /// Capacity alerts operations signal for labor, capacity, or task planning.
528    CapacityAlerts,
529    /// Labor revenue anomaly detection operations signal for labor, capacity, or task planning.
530    LaborRevenueAnomalyDetection,
531    /// Website reservation assistant operations signal for labor, capacity, or task planning.
532    WebsiteReservationAssistant,
533    /// Vaccination document collection operations signal for labor, capacity, or task planning.
534    VaccinationDocumentCollection,
535    /// Demand forecasting operations signal for labor, capacity, or task planning.
536    DemandForecasting,
537    /// Staffing recommendations operations signal for labor, capacity, or task planning.
538    StaffingRecommendations,
539    /// Regional performance benchmarking operations signal for labor, capacity, or task planning.
540    RegionalPerformanceBenchmarking,
541}
542
543#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
544/// Portfolio-level hygiene issue type that can explain unreliable labor/read-model signals.
545pub enum DataQualityIssue {
546    /// Missing pet vaccination records operations signal for labor, capacity, or task planning.
547    MissingPetVaccinationRecords,
548    /// Incomplete pet profiles operations signal for labor, capacity, or task planning.
549    IncompletePetProfiles,
550    /// Duplicate customers operations signal for labor, capacity, or task planning.
551    DuplicateCustomers,
552    /// Missing temperament notes operations signal for labor, capacity, or task planning.
553    MissingTemperamentNotes,
554    /// Open invoices operations signal for labor, capacity, or task planning.
555    OpenInvoices,
556    /// Unclosed reservations operations signal for labor, capacity, or task planning.
557    UnclosedReservations,
558    /// Unused packages operations signal for labor, capacity, or task planning.
559    UnusedPackages,
560    /// Staff notes too vague operations signal for labor, capacity, or task planning.
561    StaffNotesTooVague,
562    /// Inconsistent service naming across sites operations signal for labor, capacity, or task planning.
563    InconsistentServiceNamingAcrossSites,
564}
565
566#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
567/// Resort operating function whose workload can be reduced or coordinated by automation.
568pub enum OperatingFunction {
569    /// Front desk operations signal for labor, capacity, or task planning.
570    FrontDesk,
571    /// Call center operations signal for labor, capacity, or task planning.
572    CallCenter,
573    /// General managers operations signal for labor, capacity, or task planning.
574    GeneralManagers,
575    /// Assistant general managers operations signal for labor, capacity, or task planning.
576    AssistantGeneralManagers,
577    /// Regional operations operations signal for labor, capacity, or task planning.
578    RegionalOperations,
579    /// Grooming service line or care-note category.
580    Grooming,
581    /// Training service line or care-note category.
582    Training,
583    /// Marketing operations signal for labor, capacity, or task planning.
584    Marketing,
585    /// Information technology operations signal for labor, capacity, or task planning.
586    InformationTechnology,
587}
588
589#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
590/// Training/standards workflow where AI can reduce lookup or documentation labor.
591pub enum StaffTrainingWorkflow {
592    /// New hire onboarding operations signal for labor, capacity, or task planning.
593    NewHireOnboarding,
594    /// Sop lookup operations signal for labor, capacity, or task planning.
595    SopLookup,
596    /// Incident documentation operations signal for labor, capacity, or task planning.
597    IncidentDocumentation,
598    /// Pet behavior note consistency operations signal for labor, capacity, or task planning.
599    PetBehaviorNoteConsistency,
600    /// Manager coaching operations signal for labor, capacity, or task planning.
601    ManagerCoaching,
602    /// Regulatory safety policy operations signal for labor, capacity, or task planning.
603    RegulatorySafetyPolicy,
604    /// Customer complaint handling operations signal for labor, capacity, or task planning.
605    CustomerComplaintHandling,
606    /// Training quiz generation operations signal for labor, capacity, or task planning.
607    TrainingQuizGeneration,
608    /// Shift lead copilot operations signal for labor, capacity, or task planning.
609    ShiftLeadCopilot,
610    /// Shift summary operations signal for labor, capacity, or task planning.
611    ShiftSummary,
612}
613
614#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
615/// High-volume customer communication workflow suitable for drafting or triage.
616pub enum CustomerCommunicationWorkflow {
617    /// Availability question operations signal for labor, capacity, or task planning.
618    AvailabilityQuestion,
619    /// Vaccine requirement question operations signal for labor, capacity, or task planning.
620    VaccineRequirementQuestion,
621    /// Multi pet boarding question operations signal for labor, capacity, or task planning.
622    MultiPetBoardingQuestion,
623    /// Group play eligibility question operations signal for labor, capacity, or task planning.
624    GroupPlayEligibilityQuestion,
625    /// Daycare readiness question operations signal for labor, capacity, or task planning.
626    DaycareReadinessQuestion,
627    /// Add bath request operations signal for labor, capacity, or task planning.
628    AddBathRequest,
629    /// Pet update request operations signal for labor, capacity, or task planning.
630    PetUpdateRequest,
631    /// Checkout time question operations signal for labor, capacity, or task planning.
632    CheckoutTimeQuestion,
633    /// Cancel or change reservation operations signal for labor, capacity, or task planning.
634    CancelOrChangeReservation,
635    /// Loyalty points question operations signal for labor, capacity, or task planning.
636    LoyaltyPointsQuestion,
637    /// Training options question operations signal for labor, capacity, or task planning.
638    TrainingOptionsQuestion,
639    /// Anxiety or special handling question operations signal for labor, capacity, or task planning.
640    AnxietyOrSpecialHandlingQuestion,
641}
642
643#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
644/// Constraint that limits capacity utilization or creates labor mismatch risk.
645pub enum CapacityConstraintKind {
646    /// Room or suite availability operations signal for labor, capacity, or task planning.
647    RoomOrSuiteAvailability,
648    /// Play yard availability operations signal for labor, capacity, or task planning.
649    PlayYardAvailability,
650    /// Groomer slot availability operations signal for labor, capacity, or task planning.
651    GroomerSlotAvailability,
652    /// Trainer availability operations signal for labor, capacity, or task planning.
653    TrainerAvailability,
654    /// Staff ratio operations signal for labor, capacity, or task planning.
655    StaffRatio,
656    /// Pet temperament operations signal for labor, capacity, or task planning.
657    PetTemperament,
658    /// Holiday peak operations signal for labor, capacity, or task planning.
659    HolidayPeak,
660    /// Check in checkout bottleneck operations signal for labor, capacity, or task planning.
661    CheckInCheckoutBottleneck,
662}
663
664#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
665/// Labor, capacity, or revenue optimization lever supported by validated source facts.
666pub enum OptimizationOpportunity {
667    /// Demand forecasting operations signal for labor, capacity, or task planning.
668    DemandForecasting,
669    /// No show prediction operations signal for labor, capacity, or task planning.
670    NoShowPrediction,
671    /// Dynamic waitlist filling operations signal for labor, capacity, or task planning.
672    DynamicWaitlistFilling,
673    /// Capacity recommendation operations signal for labor, capacity, or task planning.
674    CapacityRecommendation,
675    /// Add on recommendation operations signal for labor, capacity, or task planning.
676    AddOnRecommendation,
677    /// Holiday planning operations signal for labor, capacity, or task planning.
678    HolidayPlanning,
679    /// Over under staffing alert operations signal for labor, capacity, or task planning.
680    OverUnderStaffingAlert,
681    /// Revenue optimization without care degradation operations signal for labor, capacity, or task planning.
682    RevenueOptimizationWithoutCareDegradation,
683}
684
685/// Core service-line boundary joining source systems to service contracts.
686pub mod service_core {
687    use super::*;
688
689    #[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
690    /// Domain vocabulary for operating system decisions in operations workflows.
691    pub enum OperatingSystem {
692        /// Gingr reservation and pet-care operating system.
693        Gingr,
694        /// Mixed systems operations signal for labor, capacity, or task planning.
695        MixedSystems,
696        /// Provider role or status could not be mapped confidently.
697        Unknown,
698    }
699
700    #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Builder)]
701    /// Service-line contract bundle for one resort/location's operating model.
702    pub struct ServiceContracts {
703        /// Location id fact promoted into this operations contract.
704        pub location_id: LocationId,
705        /// Boarding fact promoted into this operations contract.
706        pub boarding: crate::boarding::Contract,
707        /// Daycare fact promoted into this operations contract.
708        pub daycare: crate::daycare::Contract,
709        /// Grooming fact promoted into this operations contract.
710        pub grooming: crate::grooming::Contract,
711        /// Training fact promoted into this operations contract.
712        pub training: crate::training::Contract,
713        /// Retail fact promoted into this operations contract.
714        pub retail: crate::retail::Contract,
715    }
716
717    impl ServiceContracts {
718        /// Returns the five service lines whose demand and staffing drive daily labor plans.
719        pub fn core_services(&self) -> [ServiceLine; 5] {
720            [
721                ServiceLine::Boarding,
722                ServiceLine::Daycare,
723                ServiceLine::Grooming,
724                ServiceLine::Training,
725                ServiceLine::Retail,
726            ]
727        }
728    }
729
730    #[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]
731    /// Core pet-resort service line used to partition demand, capacity, and labor metrics.
732    pub enum ServiceLine {
733        /// Overnight stay service line.
734        Boarding,
735        /// Daycare operations signal for labor, capacity, or task planning.
736        Daycare,
737        /// Grooming service line or care-note category.
738        Grooming,
739        /// Training service line or care-note category.
740        Training,
741        /// Retail operations signal for labor, capacity, or task planning.
742        Retail,
743    }
744}