# Extension and action examples

<!-- Maintained by scripts/generate-package-readmes.php -->

Use the action functions with records and Data objects supplied by your application.
They pass each argument to the package operation and return its result.

These adapters show container registration. Use the owning package registry when
a contract requires contributor discovery.

Contract adapters wrap an existing implementation. Call their registration function
from your service provider with that implementation; tagged contracts keep their declared tag.
Resolve the backend by its concrete class before registration so the replacement contract
does not resolve itself. Static contract metadata uses one backend class per adapter.

## Contract `Capell\Bookings\Contracts\BookingMessageChannel`

<!-- example: contract Capell\Bookings\Contracts\BookingMessageChannel -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

final class BookingMessageChannelAdapter implements \Capell\Bookings\Contracts\BookingMessageChannel
{
    public function __construct(private readonly \Capell\Bookings\Contracts\BookingMessageChannel $backend) {}

    #[\Override]
    public function send(\Capell\Bookings\Data\BookingMessageData $messageData): \Capell\Bookings\Data\BookingMessageResultData
    {
        return $this->backend->send($messageData);
    }
}

function registerBookingMessageChannelAdapter(\Capell\Bookings\Contracts\BookingMessageChannel $backend): void
{
    app()->bind(BookingMessageChannelAdapter::class, static fn (): BookingMessageChannelAdapter => new BookingMessageChannelAdapter($backend));
    app()->bind(\Capell\Bookings\Contracts\BookingMessageChannel::class, BookingMessageChannelAdapter::class);
}
```

## Contract `Capell\Bookings\Contracts\BookingsAiAdvisor`

<!-- example: contract Capell\Bookings\Contracts\BookingsAiAdvisor -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

final class BookingsAiAdvisorAdapter implements \Capell\Bookings\Contracts\BookingsAiAdvisor
{
    public function __construct(private readonly \Capell\Bookings\Contracts\BookingsAiAdvisor $backend) {}

    #[\Override]
    public function advise(string $task, array $context): array
    {
        return $this->backend->advise($task, $context);
    }
}

function registerBookingsAiAdvisorAdapter(\Capell\Bookings\Contracts\BookingsAiAdvisor $backend): void
{
    app()->bind(BookingsAiAdvisorAdapter::class, static fn (): BookingsAiAdvisorAdapter => new BookingsAiAdvisorAdapter($backend));
    app()->bind(\Capell\Bookings\Contracts\BookingsAiAdvisor::class, BookingsAiAdvisorAdapter::class);
}
```

## Contract `Capell\Bookings\Contracts\PublicBookingRequestRenderer`

<!-- example: contract Capell\Bookings\Contracts\PublicBookingRequestRenderer -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

final class PublicBookingRequestRendererAdapter implements \Capell\Bookings\Contracts\PublicBookingRequestRenderer
{
    public function __construct(private readonly \Capell\Bookings\Contracts\PublicBookingRequestRenderer $backend) {}

    #[\Override]
    public function render(\Illuminate\Http\Request $request): \Symfony\Component\HttpFoundation\Response
    {
        return $this->backend->render($request);
    }
}

function registerPublicBookingRequestRendererAdapter(\Capell\Bookings\Contracts\PublicBookingRequestRenderer $backend): void
{
    app()->bind(PublicBookingRequestRendererAdapter::class, static fn (): PublicBookingRequestRendererAdapter => new PublicBookingRequestRendererAdapter($backend));
    app()->bind(\Capell\Bookings\Contracts\PublicBookingRequestRenderer::class, PublicBookingRequestRendererAdapter::class);
}
```

## Contract `Capell\Bookings\Contracts\SocialEventProvider`

<!-- example: contract Capell\Bookings\Contracts\SocialEventProvider -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

final class SocialEventProviderAdapter implements \Capell\Bookings\Contracts\SocialEventProvider
{
    public function __construct(private readonly \Capell\Bookings\Contracts\SocialEventProvider $backend) {}

    #[\Override]
    public function publishGroupSession(\Capell\Bookings\Models\BookingGroupSession $groupSession, string $copy): array
    {
        return $this->backend->publishGroupSession($groupSession, $copy);
    }

    #[\Override]
    public function syncAttendance(\Capell\Bookings\Models\BookingGroupSession $groupSession): array
    {
        return $this->backend->syncAttendance($groupSession);
    }
}

function registerSocialEventProviderAdapter(\Capell\Bookings\Contracts\SocialEventProvider $backend): void
{
    app()->bind(SocialEventProviderAdapter::class, static fn (): SocialEventProviderAdapter => new SocialEventProviderAdapter($backend));
    app()->bind(\Capell\Bookings\Contracts\SocialEventProvider::class, SocialEventProviderAdapter::class);
}
```

## Contract `Capell\Bookings\Contracts\TravelTimeProvider`

<!-- example: contract Capell\Bookings\Contracts\TravelTimeProvider -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

final class TravelTimeProviderAdapter implements \Capell\Bookings\Contracts\TravelTimeProvider
{
    public function __construct(private readonly \Capell\Bookings\Contracts\TravelTimeProvider $backend) {}

    #[\Override]
    public function estimate(?\Capell\Bookings\Models\BookingLocation $origin, ?\Capell\Bookings\Models\BookingLocation $destination, ?\Carbon\CarbonImmutable $departAt = null): \Capell\Bookings\Data\TravelEstimateData
    {
        return $this->backend->estimate($origin, $destination, $departAt);
    }
}

function registerTravelTimeProviderAdapter(\Capell\Bookings\Contracts\TravelTimeProvider $backend): void
{
    app()->bind(TravelTimeProviderAdapter::class, static fn (): TravelTimeProviderAdapter => new TravelTimeProviderAdapter($backend));
    app()->bind(\Capell\Bookings\Contracts\TravelTimeProvider::class, TravelTimeProviderAdapter::class);
}
```

## Action `addReviewParticipant`

<!-- example: action addReviewParticipant -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runAddReviewParticipant(\Capell\Bookings\Models\BookingReviewRequest $reviewRequest, string $role, ?string $name = null, ?string $email = null, bool $required = true, ?int $portalAccountId = null, array $meta = []): \Capell\Bookings\Models\BookingReviewParticipant
{
    return \Capell\Bookings\Actions\AddReviewParticipantAction::run($reviewRequest, $role, $name, $email, $required, $portalAccountId, $meta);
}
```

## Action `applyLessonBundleCredit`

<!-- example: action applyLessonBundleCredit -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runApplyLessonBundleCredit(\Capell\Bookings\Models\BookingLessonBundle $bundle, \Capell\Bookings\Models\AppointmentRequest $appointmentRequest): \Capell\Bookings\Models\BookingLessonBundle
{
    return \Capell\Bookings\Actions\ApplyLessonBundleCreditAction::run($bundle, $appointmentRequest);
}
```

## Action `assignGroupSlotTimes`

<!-- example: action assignGroupSlotTimes -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runAssignGroupSlotTimes(\Capell\Bookings\Models\BookingGroupSession $groupSession): int
{
    return \Capell\Bookings\Actions\AssignGroupSlotTimesAction::run($groupSession);
}
```

## Action `attachLessonPhoto`

<!-- example: action attachLessonPhoto -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runAttachLessonPhoto(\Capell\Bookings\Models\LessonNote $lessonNote, int $mediaId, ?\Illuminate\Database\Eloquent\Model $portalAccount = null): \Capell\Bookings\Models\LessonNote
{
    return \Capell\Bookings\Actions\AttachLessonPhotoAction::run($lessonNote, $mediaId, $portalAccount);
}
```

## Action `buildAvailableBookingSlots`

<!-- example: action buildAvailableBookingSlots -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runBuildAvailableBookingSlots(?int $serviceId = null, ?int $staffMemberId = null, ?int $locationId = null, ?string $timezone = null, ?\Carbon\CarbonImmutable $from = null, int $days = 14, ?int $siteId = null): array
{
    return \Capell\Bookings\Actions\BuildAvailableBookingSlotsAction::run($serviceId, $staffMemberId, $locationId, $timezone, $from, $days, $siteId);
}
```

## Action `buildDayPlan`

<!-- example: action buildDayPlan -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runBuildDayPlan(int $staffMemberId, \Carbon\CarbonImmutable $date): \Capell\Bookings\Data\DayPlanData
{
    return \Capell\Bookings\Actions\BuildDayPlanAction::run($staffMemberId, $date);
}
```

## Action `buildInstructorFuelReport`

<!-- example: action buildInstructorFuelReport -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runBuildInstructorFuelReport(?int $staffMemberId = null, ?\Carbon\CarbonImmutable $from = null, ?\Carbon\CarbonImmutable $until = null): array
{
    return \Capell\Bookings\Actions\BuildInstructorFuelReportAction::run($staffMemberId, $from, $until);
}
```

## Action `buildOwnerDigest`

<!-- example: action buildOwnerDigest -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runBuildOwnerDigest(?int $siteId = null, ?\Carbon\CarbonImmutable $from = null, ?\Carbon\CarbonImmutable $to = null): array
{
    return \Capell\Bookings\Actions\BuildOwnerDigestAction::run($siteId, $from, $to);
}
```

## Action `buildPortalLessonRows`

<!-- example: action buildPortalLessonRows -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runBuildPortalLessonRows(int $siteId, \Illuminate\Database\Eloquent\Model $portalAccount): \Illuminate\Support\Collection
{
    return \Capell\Bookings\Actions\BuildPortalLessonRowsAction::run($siteId, $portalAccount);
}
```

## Action `buildPublicBookingRequestOptions`

<!-- example: action buildPublicBookingRequestOptions -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runBuildPublicBookingRequestOptions(): array
{
    return \Capell\Bookings\Actions\BuildPublicBookingRequestOptionsAction::run();
}
```

## Action `buildPublicBookingRequestProps`

<!-- example: action buildPublicBookingRequestProps -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runBuildPublicBookingRequestProps(\Illuminate\Http\Request $request, bool $lazySlots = true): array
{
    return \Capell\Bookings\Actions\BuildPublicBookingRequestPropsAction::run($request, $lazySlots);
}
```

## Action `buildServiceAreaHeatmap`

<!-- example: action buildServiceAreaHeatmap -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runBuildServiceAreaHeatmap(?int $siteId = null): array
{
    return \Capell\Bookings\Actions\BuildServiceAreaHeatmapAction::run($siteId);
}
```

## Action `buildStaffCalendarFeed`

<!-- example: action buildStaffCalendarFeed -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runBuildStaffCalendarFeed(\Capell\Bookings\Models\BookingStaffMember $staffMember): string
{
    return \Capell\Bookings\Actions\BuildStaffCalendarFeedAction::run($staffMember);
}
```

## Action `calculateCancellationFee`

<!-- example: action calculateCancellationFee -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runCalculateCancellationFee(\Capell\Bookings\Models\AppointmentRequest $appointmentRequest, ?\Carbon\CarbonImmutable $cancelledAt = null): int
{
    return \Capell\Bookings\Actions\CalculateCancellationFeeAction::run($appointmentRequest, $cancelledAt);
}
```

## Action `calculateFuelAllowance`

<!-- example: action calculateFuelAllowance -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runCalculateFuelAllowance(\Capell\Bookings\Models\AppointmentRequest $appointmentRequest, float $distanceMiles): \Capell\Bookings\Models\AppointmentRequest
{
    return \Capell\Bookings\Actions\CalculateFuelAllowanceAction::run($appointmentRequest, $distanceMiles);
}
```

## Action `cancelAppointmentRequest`

<!-- example: action cancelAppointmentRequest -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runCancelAppointmentRequest(\Capell\Bookings\Models\AppointmentRequest $appointmentRequest, ?string $reason = null): \Capell\Bookings\Models\AppointmentRequest
{
    return \Capell\Bookings\Actions\CancelAppointmentRequestAction::run($appointmentRequest, $reason);
}
```

## Action `captureMessagingConsent`

<!-- example: action captureMessagingConsent -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runCaptureMessagingConsent(\Illuminate\Database\Eloquent\Model $portalAccount, \Capell\Bookings\Enums\BookingMessageChannelEnum $channel, bool $granted, ?string $recipient = null, array $evidence = []): \Capell\Bookings\Models\MessagingConsent
{
    return \Capell\Bookings\Actions\CaptureMessagingConsentAction::run($portalAccount, $channel, $granted, $recipient, $evidence);
}
```

## Action `captureReviewParticipantResponse`

<!-- example: action captureReviewParticipantResponse -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runCaptureReviewParticipantResponse(\Capell\Bookings\Models\BookingReviewParticipant $reviewParticipant, string $token, int $rating, ?string $response = null): \Capell\Bookings\Models\BookingReviewParticipant
{
    return \Capell\Bookings\Actions\CaptureReviewParticipantResponseAction::run($reviewParticipant, $token, $rating, $response);
}
```

## Action `completeReviewLoopIfReady`

<!-- example: action completeReviewLoopIfReady -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runCompleteReviewLoopIfReady(\Capell\Bookings\Models\BookingReviewRequest $reviewRequest): \Capell\Bookings\Models\BookingReviewRequest
{
    return \Capell\Bookings\Actions\CompleteReviewLoopIfReadyAction::run($reviewRequest);
}
```

## Action `confirmAppointmentRequest`

<!-- example: action confirmAppointmentRequest -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runConfirmAppointmentRequest(\Capell\Bookings\Models\AppointmentRequest $appointmentRequest): \Capell\Bookings\Models\AppointmentRequest
{
    return \Capell\Bookings\Actions\ConfirmAppointmentRequestAction::run($appointmentRequest);
}
```

## Action `confirmBookingChange`

<!-- example: action confirmBookingChange -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runConfirmBookingChange(\Capell\Bookings\Models\BookingChangeProposal $proposal, string $party, bool $accepted): \Capell\Bookings\Models\BookingChangeProposal
{
    return \Capell\Bookings\Actions\ConfirmBookingChangeAction::run($proposal, $party, $accepted);
}
```

## Action `createAppointmentRequest`

<!-- example: action createAppointmentRequest -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runCreateAppointmentRequest(\Capell\Bookings\Data\AppointmentRequestData $appointmentRequestData): \Capell\Bookings\Models\AppointmentRequest
{
    return \Capell\Bookings\Actions\CreateAppointmentRequestAction::run($appointmentRequestData);
}
```

## Action `createAvailabilityException`

<!-- example: action createAvailabilityException -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runCreateAvailabilityException(\Capell\Bookings\Data\AvailabilityExceptionData $availabilityExceptionData): \Capell\Bookings\Models\BookingAvailabilityException
{
    return \Capell\Bookings\Actions\CreateAvailabilityExceptionAction::run($availabilityExceptionData);
}
```

## Action `createGroupSession`

<!-- example: action createGroupSession -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runCreateGroupSession(int $serviceId, string $title, \Carbon\CarbonImmutable $startsAt, \Carbon\CarbonImmutable $endsAt, ?int $siteId = null, ?int $staffMemberId = null, ?int $locationId = null, ?int $capacity = null, ?int $feePence = null, ?string $description = null): \Capell\Bookings\Models\BookingGroupSession
{
    return \Capell\Bookings\Actions\CreateGroupSessionAction::run($serviceId, $title, $startsAt, $endsAt, $siteId, $staffMemberId, $locationId, $capacity, $feePence, $description);
}
```

## Action `createMessagingConsentUrl`

<!-- example: action createMessagingConsentUrl -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runCreateMessagingConsentUrl(\Illuminate\Database\Eloquent\Model $portalAccount, ?\Carbon\CarbonImmutable $expiresAt = null): string
{
    return \Capell\Bookings\Actions\CreateMessagingConsentUrlAction::run($portalAccount, $expiresAt);
}
```

## Action `createPortalAccessToken`

<!-- example: action createPortalAccessToken -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runCreatePortalAccessToken(\Illuminate\Database\Eloquent\Model $portalAccount): string
{
    return \Capell\Bookings\Actions\CreatePortalAccessTokenAction::run($portalAccount);
}
```

## Action `createPortalLessonsUrl`

<!-- example: action createPortalLessonsUrl -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runCreatePortalLessonsUrl(\Illuminate\Database\Eloquent\Model $portalAccount, ?\Carbon\CarbonImmutable $expiresAt = null): string
{
    return \Capell\Bookings\Actions\CreatePortalLessonsUrlAction::run($portalAccount, $expiresAt);
}
```

## Action `createReviewLoop`

<!-- example: action createReviewLoop -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runCreateReviewLoop(\Capell\Bookings\Models\BookingReviewRequest $reviewRequest, array $participants = []): \Capell\Bookings\Models\BookingReviewRequest
{
    return \Capell\Bookings\Actions\CreateReviewLoopAction::run($reviewRequest, $participants);
}
```

## Action `createReviewRequestUrl`

<!-- example: action createReviewRequestUrl -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runCreateReviewRequestUrl(\Capell\Bookings\Models\BookingReviewRequest $reviewRequest, ?\Carbon\CarbonImmutable $expiresAt = null): string
{
    return \Capell\Bookings\Actions\CreateReviewRequestUrlAction::run($reviewRequest, $expiresAt);
}
```

## Action `createStaffCalendarFeedUrl`

<!-- example: action createStaffCalendarFeedUrl -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runCreateStaffCalendarFeedUrl(\Capell\Bookings\Models\BookingStaffMember $staffMember): string
{
    return \Capell\Bookings\Actions\CreateStaffCalendarFeedUrlAction::run($staffMember);
}
```

## Action `dispatchBookingMessage`

<!-- example: action dispatchBookingMessage -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runDispatchBookingMessage(\Capell\Bookings\Models\AppointmentRequest $appointmentRequest, \Capell\Bookings\Enums\BookingMessageChannelEnum $channel, string $type, string $body, ?string $subject = null, ?\Carbon\CarbonImmutable $sendAt = null, ?string $recipient = null, array $context = []): \Capell\Bookings\Models\BookingMessageLog
{
    return \Capell\Bookings\Actions\DispatchBookingMessageAction::run($appointmentRequest, $channel, $type, $body, $subject, $sendAt, $recipient, $context);
}
```

## Action `dispatchDueBookingMessages`

<!-- example: action dispatchDueBookingMessages -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runDispatchDueBookingMessages(?\Carbon\CarbonImmutable $now = null, ?int $leadMinutes = null, int $limit = 100): int
{
    return \Capell\Bookings\Actions\DispatchDueBookingMessagesAction::run($now, $leadMinutes, $limit);
}
```

## Action `dispatchReviewRequest`

<!-- example: action dispatchReviewRequest -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runDispatchReviewRequest(\Capell\Bookings\Models\BookingReviewRequest $reviewRequest): \Capell\Bookings\Models\BookingReviewRequest
{
    return \Capell\Bookings\Actions\DispatchReviewRequestAction::run($reviewRequest);
}
```

## Action `enforceWorkZone`

<!-- example: action enforceWorkZone -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runEnforceWorkZone(\Capell\Bookings\Models\BookingLocation $location): bool
{
    return \Capell\Bookings\Actions\EnforceWorkZoneAction::run($location);
}
```

## Action `erasePortalBookingData`

<!-- example: action erasePortalBookingData -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runErasePortalBookingData(int $siteId, \Illuminate\Database\Eloquent\Model $portalAccount): int
{
    return \Capell\Bookings\Actions\ErasePortalBookingDataAction::run($siteId, $portalAccount);
}
```

## Action `estimateTravelTime`

<!-- example: action estimateTravelTime -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runEstimateTravelTime(?\Capell\Bookings\Models\BookingLocation $origin, ?\Capell\Bookings\Models\BookingLocation $destination, ?\Carbon\CarbonImmutable $departAt = null): \Capell\Bookings\Data\TravelEstimateData
{
    return \Capell\Bookings\Actions\EstimateTravelTimeAction::run($origin, $destination, $departAt);
}
```

## Action `expireStaleHolds`

<!-- example: action expireStaleHolds -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runExpireStaleHolds(?\Carbon\CarbonImmutable $now = null): int
{
    return \Capell\Bookings\Actions\ExpireStaleHoldsAction::run($now);
}
```

## Action `expireWaitlistOffers`

<!-- example: action expireWaitlistOffers -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runExpireWaitlistOffers(?\Carbon\CarbonImmutable $now = null): int
{
    return \Capell\Bookings\Actions\ExpireWaitlistOffersAction::run($now);
}
```

## Action `exportPortalBookingData`

<!-- example: action exportPortalBookingData -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runExportPortalBookingData(int $siteId, \Illuminate\Database\Eloquent\Model $portalAccount): array
{
    return \Capell\Bookings\Actions\ExportPortalBookingDataAction::run($siteId, $portalAccount);
}
```

## Action `importClinicAttendanceCsv`

<!-- example: action importClinicAttendanceCsv -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runImportClinicAttendanceCsv(\Capell\Bookings\Models\BookingGroupSession $groupSession, string $csv): \Capell\Bookings\Models\BookingGroupSession
{
    return \Capell\Bookings\Actions\ImportClinicAttendanceCsvAction::run($groupSession, $csv);
}
```

## Action `issueBookingChangeProposalToken`

<!-- example: action issueBookingChangeProposalToken -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runIssueBookingChangeProposalToken(\Capell\Bookings\Models\BookingChangeProposalParty $proposalParty, ?\Carbon\CarbonImmutable $expiresAt = null): string
{
    return \Capell\Bookings\Actions\IssueBookingChangeProposalTokenAction::run($proposalParty, $expiresAt);
}
```

## Action `issueReviewParticipantUrl`

<!-- example: action issueReviewParticipantUrl -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runIssueReviewParticipantUrl(\Capell\Bookings\Models\BookingReviewParticipant $reviewParticipant, ?\Carbon\CarbonImmutable $expiresAt = null): string
{
    return \Capell\Bookings\Actions\IssueReviewParticipantUrlAction::run($reviewParticipant, $expiresAt);
}
```

## Action `joinBookingWaitlist`

<!-- example: action joinBookingWaitlist -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runJoinBookingWaitlist(string $customerName, string $customerEmail, ?int $siteId = null, ?int $serviceId = null, ?int $staffMemberId = null, ?int $locationId = null, ?int $portalAccountId = null, ?string $customerPhone = null, ?\Carbon\CarbonImmutable $preferredStartsAt = null, ?\Carbon\CarbonImmutable $preferredEndsAt = null, array $preferences = []): \Capell\Bookings\Models\BookingWaitlistEntry
{
    return \Capell\Bookings\Actions\JoinBookingWaitlistAction::run($customerName, $customerEmail, $siteId, $serviceId, $staffMemberId, $locationId, $portalAccountId, $customerPhone, $preferredStartsAt, $preferredEndsAt, $preferences);
}
```

## Action `linkBookingToPortalAccount`

<!-- example: action linkBookingToPortalAccount -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runLinkBookingToPortalAccount(\Capell\Bookings\Models\AppointmentRequest $appointmentRequest, \Illuminate\Database\Eloquent\Model $portalAccount, \Illuminate\Contracts\Auth\Authenticatable $user): \Capell\Bookings\Models\AppointmentRequest
{
    return \Capell\Bookings\Actions\LinkBookingToPortalAccountAction::run($appointmentRequest, $portalAccount, $user);
}
```

## Action `markBookingPaymentFulfilled`

<!-- example: action markBookingPaymentFulfilled -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runMarkBookingPaymentFulfilled(\Capell\Bookings\Models\AppointmentRequest $appointmentRequest, string $providerReference, int $amountPence, ?string $checkoutSessionId = null): \Capell\Bookings\Models\AppointmentRequest
{
    return \Capell\Bookings\Actions\MarkBookingPaymentFulfilledAction::run($appointmentRequest, $providerReference, $amountPence, $checkoutSessionId);
}
```

## Action `markBookingWebhookEventProcessed`

<!-- example: action markBookingWebhookEventProcessed -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runMarkBookingWebhookEventProcessed(\Capell\Bookings\Models\BookingWebhookEvent $webhookEvent, string $status = 'processed'): \Capell\Bookings\Models\BookingWebhookEvent
{
    return \Capell\Bookings\Actions\MarkBookingWebhookEventProcessedAction::run($webhookEvent, $status);
}
```

## Action `materialiseLessonSeries`

<!-- example: action materialiseLessonSeries -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runMaterialiseLessonSeries(\Capell\Bookings\Models\LessonSeries $lessonSeries, \Carbon\CarbonImmutable $through): \Illuminate\Support\Collection
{
    return \Capell\Bookings\Actions\MaterialiseLessonSeriesAction::run($lessonSeries, $through);
}
```

## Action `offerWaitlistSlot`

<!-- example: action offerWaitlistSlot -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runOfferWaitlistSlot(\Capell\Bookings\Models\BookingWaitlistEntry $entry, \Carbon\CarbonImmutable $offerExpiresAt, ?\Carbon\CarbonImmutable $offeredAt = null): \Capell\Bookings\Models\BookingWaitlistEntry
{
    return \Capell\Bookings\Actions\OfferWaitlistSlotAction::run($entry, $offerExpiresAt, $offeredAt);
}
```

## Action `optimizeDayPlan`

<!-- example: action optimizeDayPlan -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runOptimizeDayPlan(int $staffMemberId, \Carbon\CarbonImmutable $date): \Capell\Bookings\Data\DayPlanData
{
    return \Capell\Bookings\Actions\OptimizeDayPlanAction::run($staffMemberId, $date);
}
```

## Action `placeProvisionalHold`

<!-- example: action placeProvisionalHold -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runPlaceProvisionalHold(\Capell\Bookings\Data\AppointmentRequestData $appointmentRequestData, ?\Carbon\CarbonImmutable $expiresAt = null): \Capell\Bookings\Models\AppointmentRequest
{
    return \Capell\Bookings\Actions\PlaceProvisionalHoldAction::run($appointmentRequestData, $expiresAt);
}
```

## Action `proposeBookingChange`

<!-- example: action proposeBookingChange -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runProposeBookingChange(\Capell\Bookings\Models\AppointmentRequest $appointmentRequest, \Carbon\CarbonImmutable $startsAt, \Carbon\CarbonImmutable $endsAt, ?string $reason = null, ?\Carbon\CarbonImmutable $expiresAt = null): \Capell\Bookings\Models\BookingChangeProposal
{
    return \Capell\Bookings\Actions\ProposeBookingChangeAction::run($appointmentRequest, $startsAt, $endsAt, $reason, $expiresAt);
}
```

## Action `proposeScheduleOptimisation`

<!-- example: action proposeScheduleOptimisation -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runProposeScheduleOptimisation(?int $siteId = null, ?\Carbon\CarbonImmutable $from = null, ?\Carbon\CarbonImmutable $to = null): \Capell\Bookings\Models\BookingOwnerPrompt
{
    return \Capell\Bookings\Actions\ProposeScheduleOptimisationAction::run($siteId, $from, $to);
}
```

## Action `proposeTravelAdjustment`

<!-- example: action proposeTravelAdjustment -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runProposeTravelAdjustment(?\Capell\Bookings\Models\BookingLocation $origin, ?\Capell\Bookings\Models\BookingLocation $destination, int $extraMinutes, ?string $reason = null, ?\Carbon\CarbonImmutable $effectiveFrom = null, ?\Carbon\CarbonImmutable $effectiveUntil = null): \Capell\Bookings\Models\BookingTravelAdjustment
{
    return \Capell\Bookings\Actions\ProposeTravelAdjustmentAction::run($origin, $destination, $extraMinutes, $reason, $effectiveFrom, $effectiveUntil);
}
```

## Action `proposeWeatherCancellation`

<!-- example: action proposeWeatherCancellation -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runProposeWeatherCancellation(\Capell\Bookings\Models\AppointmentRequest $appointmentRequest, string $reason, ?\Carbon\CarbonImmutable $expiresAt = null): \Capell\Bookings\Models\BookingOwnerPrompt
{
    return \Capell\Bookings\Actions\ProposeWeatherCancellationAction::run($appointmentRequest, $reason, $expiresAt);
}
```

## Action `pruneBookingRetentionData`

<!-- example: action pruneBookingRetentionData -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runPruneBookingRetentionData(?\Carbon\CarbonImmutable $now = null): array
{
    return \Capell\Bookings\Actions\PruneBookingRetentionDataAction::run($now);
}
```

## Action `publishClinicToFacebook`

<!-- example: action publishClinicToFacebook -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runPublishClinicToFacebook(\Capell\Bookings\Models\BookingGroupSession $groupSession, string $copy): \Capell\Bookings\Models\BookingGroupSession
{
    return \Capell\Bookings\Actions\PublishClinicToFacebookAction::run($groupSession, $copy);
}
```

## Action `queueAppointmentReminder`

<!-- example: action queueAppointmentReminder -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runQueueAppointmentReminder(\Capell\Bookings\Models\AppointmentRequest $appointmentRequest, ?\Carbon\CarbonImmutable $sendAt = null): void
{
    \Capell\Bookings\Actions\QueueAppointmentReminderAction::run($appointmentRequest, $sendAt);
}
```

## Action `recordBookingWebhookEvent`

<!-- example: action recordBookingWebhookEvent -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runRecordBookingWebhookEvent(string $provider, string $providerEventId, string $type, array $payload = []): \Capell\Bookings\Models\BookingWebhookEvent
{
    return \Capell\Bookings\Actions\RecordBookingWebhookEventAction::run($provider, $providerEventId, $type, $payload);
}
```

## Action `recordLessonNote`

<!-- example: action recordLessonNote -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runRecordLessonNote(\Capell\Bookings\Models\AppointmentRequest $appointmentRequest, string $summary, ?string $body = null, \Capell\Bookings\Enums\LessonNoteVisibilityEnum $visibility = \Capell\Bookings\Enums\LessonNoteVisibilityEnum::Private, ?\Illuminate\Database\Eloquent\Model $portalAccount = null, ?\Carbon\CarbonImmutable $occurredAt = null): \Capell\Bookings\Models\LessonNote
{
    return \Capell\Bookings\Actions\RecordLessonNoteAction::run($appointmentRequest, $summary, $body, $visibility, $portalAccount, $occurredAt);
}
```

## Action `recordLessonSkillAssessment`

<!-- example: action recordLessonSkillAssessment -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runRecordLessonSkillAssessment(\Capell\Bookings\Models\AppointmentRequest $appointmentRequest, string $skill, \Capell\Bookings\Enums\BookingLessonSkillStatusEnum $status, ?int $confidence = null, ?string $notes = null, array $meta = []): \Capell\Bookings\Models\BookingLessonSkillAssessment
{
    return \Capell\Bookings\Actions\RecordLessonSkillAssessmentAction::run($appointmentRequest, $skill, $status, $confidence, $notes, $meta);
}
```

## Action `recordTravelObservation`

<!-- example: action recordTravelObservation -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runRecordTravelObservation(?\Capell\Bookings\Models\BookingLocation $origin, ?\Capell\Bookings\Models\BookingLocation $destination, int $durationMinutes, float $distanceMiles = 0.0, string $source = 'observed', ?\Carbon\CarbonImmutable $observedAt = null): \Capell\Bookings\Models\BookingTravelObservation
{
    return \Capell\Bookings\Actions\RecordTravelObservationAction::run($origin, $destination, $durationMinutes, $distanceMiles, $source, $observedAt);
}
```

## Action `registerGroupAttendee`

<!-- example: action registerGroupAttendee -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runRegisterGroupAttendee(\Capell\Bookings\Models\BookingGroupSession $groupSession, string $customerName, string $customerEmail, ?int $portalAccountId = null, ?string $customerPhone = null): \Capell\Bookings\Models\AppointmentRequest
{
    return \Capell\Bookings\Actions\RegisterGroupAttendeeAction::run($groupSession, $customerName, $customerEmail, $portalAccountId, $customerPhone);
}
```

## Action `remindPendingReviewParticipants`

<!-- example: action remindPendingReviewParticipants -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runRemindPendingReviewParticipants(\Capell\Bookings\Models\BookingReviewRequest $reviewRequest, ?\Carbon\CarbonImmutable $expiresAt = null): array
{
    return \Capell\Bookings\Actions\RemindPendingReviewParticipantsAction::run($reviewRequest, $expiresAt);
}
```

## Action `resolveBookingChangeProposalToken`

<!-- example: action resolveBookingChangeProposalToken -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runResolveBookingChangeProposalToken(\Capell\Bookings\Models\BookingChangeProposalParty|string $proposalParty, ?string $token = null): \Capell\Bookings\Models\BookingChangeProposalParty
{
    return \Capell\Bookings\Actions\ResolveBookingChangeProposalTokenAction::run($proposalParty, $token);
}
```

## Action `resolvePortalAccessToken`

<!-- example: action resolvePortalAccessToken -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runResolvePortalAccessToken(string $portalToken): array
{
    return \Capell\Bookings\Actions\ResolvePortalAccessTokenAction::run($portalToken);
}
```

## Action `resolveReviewParticipantToken`

<!-- example: action resolveReviewParticipantToken -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runResolveReviewParticipantToken(\Capell\Bookings\Models\BookingReviewParticipant|string $reviewParticipant, ?string $token = null): \Capell\Bookings\Models\BookingReviewParticipant
{
    return \Capell\Bookings\Actions\ResolveReviewParticipantTokenAction::run($reviewParticipant, $token);
}
```

## Action `resolveReviewRequestToken`

<!-- example: action resolveReviewRequestToken -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runResolveReviewRequestToken(string $token): \Capell\Bookings\Models\BookingReviewRequest
{
    return \Capell\Bookings\Actions\ResolveReviewRequestTokenAction::run($token);
}
```

## Action `scheduleReviewRequests`

<!-- example: action scheduleReviewRequests -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runScheduleReviewRequests(?\Carbon\CarbonImmutable $now = null): int
{
    return \Capell\Bookings\Actions\ScheduleReviewRequestsAction::run($now);
}
```

## Action `scoreBookingRisk`

<!-- example: action scoreBookingRisk -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runScoreBookingRisk(\Capell\Bookings\Models\AppointmentRequest $appointmentRequest): array
{
    return \Capell\Bookings\Actions\ScoreBookingRiskAction::run($appointmentRequest);
}
```

## Action `shouldSuppressReviewRequest`

<!-- example: action shouldSuppressReviewRequest -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runShouldSuppressReviewRequest(\Capell\Bookings\Models\AppointmentRequest $appointmentRequest): bool
{
    return \Capell\Bookings\Actions\ShouldSuppressReviewRequestAction::run($appointmentRequest);
}
```

## Action `syncFacebookAttendance`

<!-- example: action syncFacebookAttendance -->

```php
<?php
declare(strict_types=1);

namespace App\CapellExamples\Bookings;

function runSyncFacebookAttendance(\Capell\Bookings\Models\BookingGroupSession $groupSession): \Capell\Bookings\Models\BookingGroupSession
{
    return \Capell\Bookings\Actions\SyncFacebookAttendanceAction::run($groupSession);
}
```