GET /services/professional returns all statuses including cancelled.
After unblocking (self_booked → cancelled), _isOccupied matched the
cancelled service because it only excluded selfBooked.
Exclude cancelled and denied from _isOccupied so unblocked slots
correctly revert to Disponible.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>