---
title: NotePreferenceConversionService
summary: API reference for NotePreferenceConversionService.
status: draft
owner: SAIF Doc Gen
last_reviewed: 2026-09-24
library: SAIF.Services
reference_type: package
---

# NotePreferenceConversionService

Implements `INotePreferenceConversionService`, a one-time migration utility that reads legacy per-user `.config` XML profile files from a directory and converts any `ClaimTasksNotes` note-default preferences (category, type, external-view) found in them into `Preference` records persisted via NHibernate. It depends on `NHibernateUnitOfWork` for persistence and `IUserProfileService` to confirm the target user is authorized (`CTNoteUpdate`, `CTNoteSupervisor`, or `CTNCENotes`) before writing a converted preference.

## Purpose
- Scans a directory for `*.config` files, treating each file name (minus extension) as a user ID.
- Parses each file's XML `Profile` elements into key/value pairs, skipping the `OnlineLogin~lastuserprofileverifydate` key.
- Extracts the `ClaimTasksNotes~category`, `ClaimTasksNotes~type`, and `ClaimTasksNotes~externalview` values and, once all three are found together, saves them as a single JSON-serialized `Preference` row for that user.
- Only writes a preference for users who currently hold note-update, note-supervisor, or NCE-notes authorization.
- Reports the number of files read and preference records added via the supplied log writers.

## Context
- Namespace: `SAIF.Services.Claims.Notes`
- Assembly/package: `SAIF.Services` (packaged inside the `SAIF.SAIFCode.Core` NuGet package)

## Public members
| Member | Signature | Purpose |
| --- | --- | --- |
| NotePreferenceConversionService(...) | `public NotePreferenceConversionService(NHibernateUnitOfWork unitOfWork, IUserProfileService userProfileService)` | Stores the unit of work and user profile service used by `ConvertNotePreferences`. |
| ConvertNotePreferences | `public bool ConvertNotePreferences(string pathName, ILogWriter controlLog, ILogWriter controlReport)` | Reads every `*.config` file directly under `pathName`, converts each file's `ClaimTasksNotes` preference triples into `Preference` rows (for authorized users only), logs read/added counts to `controlLog`, and always returns `true`. |

## Behavioral notes
- Each qualifying preference (category, type, and external-view all present) is persisted in its own `unitOfWork.Begin()`/`Commit()` transaction inside `SavePreferences`, so partial failures on one user do not roll back preferences already saved for other users.
- The `controlReport` parameter is accepted but not used in the current implementation*.
- Preference values are JSON-serialized into a single `PreferenceText` field with keys `CategoryCode`, `TypeCode`, and `ExternalView`, tagged with `UpdateUser = "CTNCONV"`.
- Users lacking `CTNoteUpdate`, `CTNoteSupervisor`, or `CTNCENotes` authorization are silently skipped — their config file is read but no preference is written for them.
- The private `GetPrefKeys` helper (which returns a `PrefKeyValues`) is present but not called from `ConvertNotePreferences`'s current logic path*, suggesting it may be leftover/unused code.

> **Note:** Statements marked with * were inferred from code structure, naming conventions, or
> contextual evidence where direct confirmation was not available in source artifacts. Statements
> marked with ** could not be confirmed; treat as unknown until verified.

## Sources
- Services/SAIF.Services/Claims/Notes/NotePreferenceConversionService.cs
