feat: schedule page UX improvements + CDT combo price skip

- Move Select Procedures above Check Eligibility in appointment right-click menu
- Show 3 blank service lines by default when opening Select Procedures with no saved procedures
- Fix serviceLines not being preserved when API returns empty procedures list
- CDT combo buttons no longer auto-fill price (only fill codes); user maps price via Map Price button
- Overlap detection in schedule: shorten earlier appointment display span when a later one starts within its range
- Procedures dialog: replace single manual-add row with 3 pre-filled blank rows grid + Add Line / Save Lines buttons

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
ff
2026-05-30 19:37:12 -04:00
co-authored by Claude Sonnet 4.6
parent 70f36fc13c
commit 4bf8cb1a94
4 changed files with 139 additions and 97 deletions
@@ -33,6 +33,7 @@ export type ApplyOptions = {
lineDate?: string;
clearTrailing?: boolean;
replaceAll?: boolean;
skipPrice?: boolean;
};
/* ----------------------------- Helpers ----------------------------- */
@@ -329,9 +330,8 @@ export function applyComboToForm<T extends ClaimFormLike>(
// Make sure we have enough rows for the whole combo
ensureCapacity(next.serviceLines, insertAt + preset.codes.length, lineDate);
// Age on the specific line date we will set
const age = ageOnDate(patientDOB, lineDate);
const map = getCodeMap(insuranceSiteKey);
const age = options.skipPrice ? 0 : ageOnDate(patientDOB, lineDate);
const map = options.skipPrice ? CODE_MAP : getCodeMap(insuranceSiteKey);
for (let j = 0; j < preset.codes.length; j++) {
const i = insertAt + j;
@@ -340,7 +340,9 @@ export function applyComboToForm<T extends ClaimFormLike>(
const codeRaw = preset.codes[j];
if (!codeRaw) continue;
const code = normalizeCode(codeRaw);
const price = getPriceForCodeWithAgeFromMap(map, code, age);
const price = options.skipPrice
? new Decimal(0)
: getPriceForCodeWithAgeFromMap(map, code, age);
const original = next.serviceLines[i];