NoteService¶
Manages the lifecycle of audit notes attached to claims and bills — retrieval, creation, editing, deletion, and bulk inactivation — validating each write through IValidationService and persisting changes via the AuditNote domain aggregate inside IUnitOfWork transactions. It collaborates with IUserProfileService (to stamp the current user on writes), IBillQueryProvider, IAuditNoteQueryProvider, and IClaimQueryProvider, and maps data-model results to AuditNoteItem/NoteTypeCode/NoteCategory contracts via AutoMapper, whose note-related mappings it registers in its static constructor via BillMappingHelper.MapNoteService().
Purpose¶
- Retrieves audit notes for a single note, a claim, or a bill, with an option to include inactive notes.
- Determines whether a bill's most recent note activity was performed by a different user than the one specified.
- Validates and creates new audit notes for both general and bill-scoped scenarios, surfacing validation failures to callers.
- Validates and applies edits to existing audit notes.
- Validates and deletes audit notes, individually or via a bulk comma-separated ID list that marks notes inactive instead of removing them.
- Retrieves the catalog of note type and note category codes usable when authoring notes.
Context¶
- Namespace:
SAIF.Services.Claims.Bills - Assembly/package:
SAIF.Services(packaged inside theSAIF.SAIFCode.CoreNuGet package)
Public members¶
| Member | Signature | Purpose |
|---|---|---|
| NoteService(uow, uprof, val, query, noteQuery, claimQueryProvider) | NoteService(IUnitOfWork uow, IUserProfileService uprof, IValidationService val, IBillQueryProvider query, IAuditNoteQueryProvider noteQuery, IClaimQueryProvider claimQueryProvider) |
Guards against null core dependencies (unit of work, user profile service, validation service, bill/note query providers) and stores them for use by all note operations. |
| GetNote | AuditNoteItem GetNote(long noteId) |
Retrieves the audit note with the given ID and maps it to an AuditNoteItem contract. |
| GetClaimNotes | IEnumerable<AuditNoteItem> GetClaimNotes(long claimId, bool showInactiveToo) |
Retrieves all audit notes for a claim, optionally including inactive ones, mapped to AuditNoteItem contracts. |
| GetBillNotes | IEnumerable<AuditNoteItem> GetBillNotes(long claimId, long billId, bool showInactiveToo) |
Queries CbpNote records matching either the claim ID or the bill ID under the requested active/inactive filter, orders them by note-type category description then descending create date, and maps them to AuditNoteItem contracts. |
| IsBillNoteByOtherUser | bool IsBillNoteByOtherUser(long claimId, long billId, string userId, bool showInactiveToo) |
Returns true if any matching bill note's last-updating user (or creating user, if never updated) differs from userId, restricted to notes matching the requested active/inactive state. |
| GetAuditNoteTypeCodes() | IEnumerable<NoteTypeCode> GetAuditNoteTypeCodes() |
Retrieves the full set of note type codes, mapped to NoteTypeCode contracts. |
| GetAuditNoteTypeCodes(categoryCode) | IEnumerable<NoteTypeCode> GetAuditNoteTypeCodes(string categoryCode) |
Retrieves the note type codes belonging to a specific note category, mapped to NoteTypeCode contracts. |
| CreateNote | AuditNoteItem CreateNote(long billId, Note note, IMessageContainer messageContainer) |
Builds a bill-scoped NoteModifyRequest (forcing the bill note category/type constants), validates it, reports any validation errors to messageContainer, and returns the newly created note or an empty AuditNoteItem if validation failed. |
| CreateAuditNote | IValidationResult CreateAuditNote(NoteModifyRequest request) |
Validates the request and, if valid, creates the underlying AuditNote aggregate and appends the new note's ID to the validation result's Messages collection. |
| UpdateNote | AuditNoteItem UpdateNote(Note note, IMessageContainer messageContainer) |
Rebuilds a NoteModifyRequest from the existing note's current values, validates it, reports errors to messageContainer, applies the update if valid, and returns the refreshed note. |
| EditAuditNote | IValidationResult EditAuditNote(NoteModifyRequest request) |
Validates the request and, if valid, applies the update to the corresponding AuditNote aggregate. |
| GetAuditNoteCategoryCodes | IEnumerable<NoteCategory> GetAuditNoteCategoryCodes() |
Retrieves all CbpNoteCategoryCode records and maps them to NoteCategory contracts. |
| DeleteNote | void DeleteNote(long noteId) |
Deletes the AuditNote aggregate identified by noteId within a unit-of-work transaction. |
| DeleteAuditNote | IValidationResult DeleteAuditNote(NoteDeleteRequest request) |
Validates the delete request and, if valid, deletes the corresponding AuditNote aggregate within a transaction. |
| InactivateNotes | void InactivateNotes(string ids) |
Splits a comma-separated list of note IDs and, within a single transaction, marks each corresponding note inactive while stamping the current user, update date, and incrementing its update counter. |
Behavioral notes¶
- Static constructor calls
BillMappingHelper.MapNoteService()to register AutoMapper mappings for note-related types before any instance is used.* - All mutating operations (
CreateNote/CreateAuditNote,UpdateNote/EditAuditNote,DeleteNote/DeleteAuditNote,InactivateNotes) wrap their changes inunitOfWork.Begin()/unitOfWork.Commit()transactions. - Write operations validate their request via
IValidationServicebefore applying any change; validation failures are surfaced either through the suppliedIMessageContaineror the returnedIValidationResult, and no persistence occurs when validation fails. - The current-user identity used for audit stamping is obtained via
userProfileService.GetCurrentUser().UserId, upper-cased, on every create/update/inactivate path. CreateNote(billId, note, messageContainer)hardcodes the note's category/type toNoteModifyRequest.BILL_NOTE_CATEGORY/BILL_NOTE_TYPEand always setsUpdateNumberto0, marking it as a bill-note-specific creation path distinct fromCreateAuditNote.*InactivateNotesmutates note fields directly on the entities returned bynoteQueryProvider.GetAuditNote(id)rather than going through theAuditNoteaggregate used by the other write paths.*
Constraints and usage notes¶
GetBillNotes's active/inactive filter logic isx.IsActive || x.IsActive != showInactiveToo, so callers should verify the exact inclusion semantics against a specificshowInactiveToovalue before relying on it.*InactivateNotessilently skips any ID in the list for whichnoteQueryProvider.GetAuditNote(id)returnsnull.
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/Bills/NoteService.cs