ee117eafe6
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>
35 lines
1.3 KiB
JavaScript
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 };
|