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}