Files
agenciapsilmno/src/features/agenda/utils/dbFields.js
T
Leonardo ee117eafe6 agenda Fase A: extrai utils puros pra features/agenda/utils
Decomposicao da agenda em prep pra replicar Rail/Clinica.

4 arquivos novos em src/features/agenda/utils/:
- eventoTipo.js  -> EVENTO_TIPO + normalize/derive + MAX_SESSION_MINUTES
- dbFields.js    -> pickDbFields whitelist (memoria pickdbfields_whitelist)
- timeHelpers.js -> isUuid + addMinutesToTime + isoToDecimalHour + dateToISO
- colors.js      -> pickColor (status+tipo+isOccurrence)

useMelissaAgenda.js (2863L -> 2792L): removeu definicoes locais
(83 linhas), passou a importar dos utils. Aliases _addMinutesToTime
e _dateToISO mantidos no escopo via import "as" pra nao mexer
em 70+ callsites internos.

Fase A = baseline zero-comportamental pra Rail/Clinica adotarem
os mesmos helpers. Fase B (service de billing — applyStatusDecisions,
createPackageContract, materializeAndCharge) vem em seguida.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-21 09:21:12 -03:00

35 lines
1.3 KiB
JavaScript

/*
|--------------------------------------------------------------------------
| Agência PSI — whitelist de campos do agenda_eventos
|--------------------------------------------------------------------------
| Whitelist canônica de campos aceitos na tabela agenda_eventos pra INSERT/
| UPDATE via cliente. Filtra qualquer chave não-prevista (defesa contra bug
| onde payload acidentalmente carrega field defaultado pelo banco — como
| modalidade='presencial' do bug de 2026-05-16).
|
| Memoria: project_pickdbfields_whitelist.md — antes era inline em
| useMelissaAgenda.js. Extraído na Fase A.
|--------------------------------------------------------------------------
*/
const ALLOWED_FIELDS = [
'tenant_id', 'owner_id', 'terapeuta_id', 'patient_id',
'tipo', 'status', 'titulo', 'observacoes', 'modalidade',
'inicio_em', 'fim_em', 'visibility_scope',
'mirror_of_event_id', 'mirror_source',
'determined_commitment_id', 'titulo_custom', 'extra_fields',
'recurrence_id', 'recurrence_date',
'price', 'insurance_plan_id', 'insurance_guide_number',
'insurance_value', 'insurance_plan_service_id'
];
export function pickDbFields(obj) {
const out = {};
for (const k of ALLOWED_FIELDS) {
if (obj[k] !== undefined) out[k] = obj[k];
}
return out;
}
export { ALLOWED_FIELDS };