Prisma serializes Decimal fields (rate, latitude, longitude) as JSON strings, causing 'as num?' casts to throw in fromDocument(). The catch block in getProfessional() then returned an empty Profesional, so saving overwrote all existing data with empty strings. Also added try-catch in all patch API calls to surface errors to user instead of silently failing with a stuck loading button. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>