Bill entry¶
Bill entry is the application's landing screen and its main working screen. The user keys a medical bill: the bill header and claim number, billing provider, diagnoses, procedures, service lines and notes. The user then saves the bill, submits it, sends or pends it to a mail id, or discards it. One full view hosts all of this, and the page loads every bill into the same view through AJAX calls, so the user stays on Entry/Index while moving between bills. After a bill is submitted, discarded or sent or pended, the outcome depends on the Auto feed checkbox: when it is checked, the screen stays on Bill entry and loads the next bill from the queue, and when it is not checked, the browser moves to the Inbox screen.
Route¶
| Controller | Action | Verb | URL | Parameters | View | Layout |
|---|---|---|---|---|---|---|
EntryController |
Index |
GET | /ClaimBillEntry/Entry/Index/{id} |
id bound to the bill parameter through [Bind(Prefix = "id")]; optional |
Views/Entry/Index.cshtml |
~/Views/Shared/_Bootstrap3.cshtml |
The default route {controller}/{action}/{id} is the only route that reaches this action; the application also reaches it from / through the Home.Index redirect.
Access¶
| Requirement | Declared on | Effect |
|---|---|---|
[SaifAuthorize(Roles = "CBPEnterBill")] |
EntryController |
Only users in the CBPEnterBill role can open the screen or call its Entry/* actions. |
IsAuthorized("CBEDiscardBill") |
EntryController.Index |
Sets CanDiscardBill on the view model; the Discard button is hidden when the user lacks the permission. |
IsConflictClaim then IsAuthorized("ConflictClaim") |
EntryController.GetBill |
A bill on a conflict claim is refused with "You are not authorized to view claim" unless the user holds ConflictClaim. |
CheckSecurity returns HasConflictAccess |
BaseController |
Applies conflict-claim access to the web-context claim. |
The grid, lookup and validation actions that this screen calls live on controllers with no [SaifAuthorize] attribute; they require only an authenticated Windows user. See Tech debt.
Entry conditions¶
- The user opens
/;Home.Indexredirects toEntry/Index(see Screen catalog). - The user follows a link from the layout top menu or side menu for menu category
CLBLE; the menu entries themselves are defined outside this repository.** - The user double-clicks a row on Inbox or opens a result on Search, which navigates to
/ClaimBillEntry/Entry/Index/{billId}. - The user opens a bill URL directly, or uses the browser back and forward buttons; the screen keeps the URL in step with the loaded bill through
history.pushStateandreplaceState, and apopstateevent reloads the bill. - The user changes the claim in the layout web context control, which calls
Home/Navigate.*
Fields¶
| Field | Binds to | Control | Purpose | Validation |
|---|---|---|---|---|
| Update number | Worker.UpdateNumber |
Hidden | Concurrency number* | None |
| Bill # | Worker.Id |
Read-only text | Displays the bill id | None |
| SAIF claim number | Worker.SaifClaimNumber |
Text box | Identifies the claim; a change loads the worker through GET Entry/GetWorkerInformation/{id} |
maxlength 7; client-side |
| Mail room received date | Worker.MailRoomReceivedDate |
Kendo DatePicker | Date the bill was received | None declared |
| Bill type | Worker.BillTypeCode |
Dropdown | Drives which other fields are enabled through the disabledwhen attribute |
None declared |
| Type of bill | Worker.UbBillTypeCode |
Text box | Institutional type-of-bill code | Numeric pattern, maximum 4 characters, "Invalid type of bill. Must be numeric."; client-side |
| Admit type | Worker.CBPAdmissionTypeCode |
Text box | Admission type code | Pattern 1, 2, 3, 4, 5 or 9, "Invalid Admit Type. Must be 1-5 or 9."; client-side |
| Statement from and thru | Worker.StatementFromDate, Worker.StatementThruDate |
Kendo DatePicker | Statement period | None declared |
| Admission and discharge | Worker.AdmissionDate, Worker.DischargeDate |
Kendo DatePicker | Inpatient dates | None declared |
| Billing provider TIN | Worker.ProviderTaxId |
Text box with lookup icon | Opens the billing provider lookup; a change calls GET Provider/ValidateProviderTin |
Remote validation; client-side call |
| Billing provider location | Worker.ProviderLocationId |
Hidden | Selected billing provider location | None |
| Patient reference number | Worker.PatientReferenceNumber |
Text box | Provider's patient reference | maxlength 20; client-side |
| Total bill amount | Worker.BillTotalAmount |
Kendo NumericTextBox (currency) | Bill total keyed by the user | Compared with the services total on submit; see BR-SCR-004 |
| PPS DRG | DrgCode |
Text box | Diagnosis-related group code | maxlength 3; client-side |
| Services total | Worker.ServicesTotal |
Kendo NumericTextBox | Sum of charged services; always disabled and refreshed from GetChargedServicesTotal |
Read-only |
| Auto feed | AutoFeed |
Kendo CheckBox | When checked, the next bill is pulled from the queue, and after a successful submit, discard or send or pend the screen loads the next queue bill instead of navigating to the Inbox | None |
The diagnosis, procedure, service and note rows are edited in grids; see Dialogs and partials.
No DataAnnotations validation attributes exist on the live view models. Field checks are the client-side HTML patterns above, the server-side action checks in Business rules, and FluentValidation validators from the bill validator assembly that the composition root registers.
Operations¶
| Operation | Trigger | Request | Description | Delegates to |
|---|---|---|---|---|
| New bill | Button js-bo-NewBill (Alt+B), after a confirm prompt |
GET Entry/GetNewBill |
Returns an empty bill from the bill entry service for the user to key.* | Key and submit a bill |
| Open bill | Route id or history navigation | GET Entry/GetBill/{id} |
Loads an existing bill; refuses statuses other than Pending, Entered, Audited or Suspended and checks conflict-claim access. | Open a bill from the inbox |
| Next bill from queue | AutoFeed checked |
GET Entry/GetBillFromQueue |
Pulls the next claim bill from the queue. | Key and submit a bill |
| Save bill | Button SaveBill (Alt+S) |
POST Entry/SaveBill |
Saves the bill through the bill entry service. | Key and submit a bill |
| Submit bill | Button SubmitBill (Alt+U) |
POST Entry/SubmitBill |
Submits the bill and sets status ENT when no errors are returned. |
Key and submit a bill |
| Send or pend bill | Button SendPendBill (Alt+P), which opens the Send/Pend modal |
POST Entry/SendPendBill |
Sends or pends the bill to the mail id keyed in the modal and stores it in Session SendPendMailId. |
Send or pend a bill |
| Discard bill | Button DiscardBill (Alt+C), after a confirm prompt |
POST Entry/DiscardBill |
Sets the bill status to DIS. |
Discard a bill |
| View document | Button ViewDocument (Alt+V) |
— | Client-side only; calls launchOnBase(documentUrl) from the OnBase enabler script to open the claim document. |
— |
| Load worker | Worker.SaifClaimNumber change |
GET Entry/GetWorkerInformation/{id} |
Resolves the claim id from the claim number and returns the worker information. | Key and submit a bill |
| Default send or pend mail id | Send/Pend modal opens | GET Entry/GetSendPendMailId |
Returns the Session SendPendMailId value, or the current user id when none is stored. |
Send or pend a bill |
The Delegates to column links each server operation to the application workflow page that documents its steps, including the shared bill, claim and security service calls the controller makes. The View document row is the only screen-local handler, because it runs entirely in the browser. The internal steps of the consumed package services were not traced; those workflow pages mark that boundary explicitly. The dependencies page lists the packages involved.
Dialogs and partials¶
| Name | Opens as | Returned by | Purpose |
|---|---|---|---|
_Worker |
Inline Html.Partial |
Rendered by Views/Entry/Index.cshtml |
Toolbar buttons and bill header fields. |
_DiagnosesAndProcedures |
Inline Html.Partial |
Rendered by Views/Entry/Index.cshtml |
Hosts the diagnoses grid, the DRG code and the procedure grid. |
_DiagnosesGrid |
Kendo Grid (in-cell batch edit) | Rendered by _DiagnosesAndProcedures |
Diagnosis rows; toolbar Add Diagnosis (Alt+G); editor template DiagnosisTypeEditor. |
_ProcedureGrid |
Kendo Grid (in-cell batch edit) | Rendered by _DiagnosesAndProcedures |
Procedure rows; editor templates ProcedureDateTemplate and ProcedureTypeEditor. |
_Services |
Inline Html.Partial |
Rendered by Views/Entry/Index.cshtml |
Services total, the service grid, the HTML preview area and the Add service window. |
_ServiceGrid |
Kendo Grid (popup edit) | Rendered by _Services |
Service rows; toolbar Add Service (Alt+R); popup template _EditService, window "Edit Service"; page sizes 25, 50, 75 and 100. |
Add service window (#AddServiceModal with _AddService) |
Kendo Window with an Ajax form | Rendered by _Services |
Posts to ServiceGrid/EditingPopup_Create; buttons Cancel, Save and Close, Save and Add Another. |
_ServiceForm |
Shared form partial | Used by _AddService and _EditService |
Prescription and service dates, charge amount, prescribing provider dropdown and the embedded _ServicePeekGrid. |
_ServicePeekGrid |
Kendo Grid | Rendered by _ServiceForm |
Read-only peek of existing service lines. |
_NotesGrid |
Kendo Grid (popup edit) | Rendered by Views/Entry/Index.cshtml |
Note rows; popup template _EditNote, window "Add/Edit Note"; edit and delete only when canEditNote; toolbar Add Note (Alt+N). |
_EditNote |
Popup editor template | Used by _NotesGrid |
NoteText (maximum 600 characters) and IsActive. |
Send/Pend modal (#sendPendModal) |
Bootstrap modal | Rendered by Views/Entry/Index.cshtml |
SendPendMailId text box (maximum 7 characters); form action Entry/SendPendBill. |
Billing provider lookup (#providerLookupKendoModal) |
Kendo Window with _ProviderLocationGrid |
Rendered by Views/Entry/Index.cshtml |
Reads Provider/GetBillingProviders; choosing a provider prompts, saves the bill and refreshes the rendering providers. |
Rendering provider lookup (#renderingProviderLookupKendoModal) |
Kendo Window with _RenderingProviderGrid |
Rendered by Views/Entry/Index.cshtml |
Reads Provider/GetRenderingProviders; shows an Expired column. |
A toolbar link, Inactivate notes, posts the selected notes to NoteGrid/InactivateNotes.
The form contentForm targets Entry/Index, but no POST Index action exists, so the form is a client-side container only and the server never receives it.* The source at ClaimBillEntry/Views/Entry/EditorTemplates/_AddService.cshtml:6 carries a comment reading, in full: "Do not remove this form tag" followed by three literal periods and then "not sure why but it's needed" — the developer's own uncertainty about why the tag is required.
AJAX and grid actions¶
| Request | Kind | Called by | Returns |
|---|---|---|---|
GET Entry/GetBillFromQueue |
AJAX JSON | AutoFeed handler in ClaimBillEntry.entry.js |
Bill view model |
GET Entry/GetBill/{id} |
AJAX JSON | Route id load and history navigation | Bill view model or an error |
GET Entry/GetNewBill |
AJAX JSON | New bill button | Empty bill view model |
POST Entry/SaveBill |
AJAX JSON | Save button | Saved bill and messages |
POST Entry/SubmitBill |
AJAX JSON | Submit button | Bill and messages |
POST Entry/SendPendBill |
AJAX JSON | Send/Pend modal | Result and messages |
POST Entry/DiscardBill |
AJAX JSON | Discard button | Result |
GET Entry/GetWorkerInformation/{id} |
AJAX JSON | Claim number change | Worker view model |
ANY Entry/GetSendPendMailId |
AJAX JSON | Send/Pend modal open | Mail id string |
ANY Provider/GetBillingProviders |
Grid read | Billing provider lookup grid | DataSourceResult (cached 45 s) |
ANY Provider/GetRenderingProviders |
Grid read | Rendering provider lookup grid | DataSourceResult (cached 45 s) |
GET Provider/ValidateProviderTin |
AJAX JSON | Provider TIN change | Validation result (cached 10 s) |
POST NoteGrid/EditingPopup_Create |
Grid create | Notes grid | DataSourceResult |
ANY NoteGrid/EditingPopup_Read |
Grid read | Notes grid | DataSourceResult |
POST NoteGrid/EditingPopup_Update |
Grid update | Notes grid | DataSourceResult |
POST NoteGrid/EditingPopup_Destroy |
Grid destroy | Notes grid | DataSourceResult |
ANY NoteGrid/InactivateNotes |
AJAX | Inactivate notes link | Result |
POST DiagnosisGrid/EditingCustom_Create |
Grid create | Diagnoses grid | DataSourceResult |
ANY DiagnosisGrid/EditingCustom_Read |
Grid read | Diagnoses grid | DataSourceResult |
POST DiagnosisGrid/EditingCustom_Update |
Grid update | Diagnoses grid | DataSourceResult |
POST DiagnosisGrid/EditingCustom_Destroy |
Grid destroy | Diagnoses grid | DataSourceResult |
GET DiagnosisGrid/ValidateDiagnosisCode |
AJAX JSON | Diagnosis code cell change (dots stripped) | Validation result |
GET DiagnosisGrid/ClearDiagnosesCodes |
AJAX (deletes data) | Clear diagnoses in claimbillentry.entry.diagnosis.js |
Result |
POST ProcedureGrid/EditingCustom_Create |
Grid create | Procedure grid | DataSourceResult |
ANY ProcedureGrid/EditingCustom_Read |
Grid read | Procedure grid | DataSourceResult |
POST ProcedureGrid/EditingCustom_Update |
Grid update | Procedure grid | DataSourceResult |
POST ProcedureGrid/EditingCustom_Destroy |
Grid destroy | Procedure grid | DataSourceResult |
GET ProcedureGrid/ValidateProcedureCode |
AJAX JSON | Procedure code cell change | Validation result |
GET ProcedureGrid/ClearProcedureCodes |
AJAX (deletes data) | Clear procedures in claimbillentry.entry.procedure.js |
Result |
POST ServiceGrid/EditingPopup_Create |
Ajax form and grid create | Add service window | DataSourceResult |
ANY ServiceGrid/EditingPopup_Read |
Grid read | Services grid | DataSourceResult |
POST ServiceGrid/EditingPopup_Update |
Grid update | Edit service popup | DataSourceResult |
POST ServiceGrid/EditingPopup_Destroy |
Grid destroy | Services grid | DataSourceResult |
ANY ServiceGrid/ServicePeek_Read |
Grid read | Service peek grid | DataSourceResult |
GET ServiceGrid/GetPrescribingProviderCodes |
Dropdown read | Prescribing provider dropdown in _ServiceForm |
Code list (cached 300 s) |
GET ServiceGrid/ValidateServiceCode |
AJAX JSON | Service code entry in claimbillentry.entry.service.validator.js |
Validation result |
ANY ServiceGrid/GetChargedServicesTotal |
AJAX JSON | Refresh after service changes in claimbillentry.entry.service.js |
Total amount |
Two further actions, Entry/GetDefaultAssignedToId and Provider/ShowProviderGrid, have no caller on this screen and are documented as unattributed endpoints on the hosted endpoints page.**
Client-side behavior¶
- Script module:
ClaimBillEntry/js/ClaimBillEntry.entry.js, withclaimbillentry.entry.service.js,claimbillentry.entry.service.validator.js,claimbillentry.entry.worker.js,claimbillentry.entry.note.js,claimbillentry.entry.diagnosis.js,claimbillentry.entry.procedure.js,claimbillentry.entry.sendpend.jsandclaimbillentry.entry.provider.jsloaded as page scripts inViews/Entry/Index.cshtml. - The view serializes
EntryViewModelinto akendo.observableview model that the script binds to the page. - Kendo widgets: DatePicker, NumericTextBox, CheckBox, Grid (in-cell and popup editing) and Window.
- Keyboard shortcuts: Alt+B new bill, Alt+S save, Alt+U submit, Alt+P send or pend, Alt+C discard, Alt+V view document, Alt+G add diagnosis, Alt+R add service, Alt+N add note.
- A
beforeunloadhandler warns "Leaving this page before saving will cause your changes to be lost." when the model is dirty. - After a successful submit, discard or send or pend, the script checks the Auto feed checkbox (
#js-bo-AutoFeed). When it is checked, the script stays on the screen and callsgetNextQueueBillto load the next queue bill (the Send/Pend modal is hidden first). When it is not checked, the script navigates to the hard-coded URL/ClaimBillEntry/Inbox/Index(ClaimBillEntry/js/ClaimBillEntry.entry.js:212-220,255-263,ClaimBillEntry/js/claimbillentry.entry.sendpend.js:109-113). - Messages use toastr through
claimbillentry.message.js; confirm dialogs and Kendo window helpers come fromclaimbillentry.utils.js.
Business rules¶
| Rule ID | Rule | Enforcement | Source |
|---|---|---|---|
| BR-SCR-001 | Only Pending, Entered, Audited or Suspended bills may be opened. | Action check | ClaimBillEntry/Controllers/EntryController.cs:88-90 |
| BR-SCR-002 | A bill on a conflict claim is refused unless the user holds ConflictClaim. |
Action check | ClaimBillEntry/Controllers/EntryController.cs:91-93, :224-239 |
| BR-SCR-003 | Submit requires at least one service line. | Client script | ClaimBillEntry/js/ClaimBillEntry.entry.js:195 |
| BR-SCR-004 | The user must confirm when Total Bill Amount differs from Services Total. | Client script | ClaimBillEntry/js/ClaimBillEntry.entry.js:206 |
| BR-SCR-005 | Bill status is set to ENT only when SubmitBill returns no errors. |
Action check | ClaimBillEntry/Controllers/EntryController.cs:122-127 |
| BR-SCR-006 | Discard needs the CBEDiscardBill permission, but only the button visibility enforces it; the DiscardBill action does not check. |
View model flag and client script | ClaimBillEntry/Controllers/EntryController.cs:65, :159-167, :209, ClaimBillEntry/js/ClaimBillEntry.entry.js:364-365 |
| BR-SCR-007 | Type of bill must be numeric and at most 4 characters. | Client HTML pattern | ClaimBillEntry/Views/Entry/_Worker.cshtml:64-73 |
| BR-SCR-008 | Admit type must be 1, 2, 3, 4, 5 or 9. | Client HTML pattern | ClaimBillEntry/Views/Entry/_Worker.cshtml:76-85 |
| BR-SCR-009 | The user is warned before leaving the page with unsaved changes. | Client script | ClaimBillEntry/js/ClaimBillEntry.entry.js:2, :36-47 |
| BR-SCR-010 | Procedure type P maps to Principal and every other code maps to Other. |
AutoMapper configuration | ClaimBillEntry/Classes/AutoMapperBootStrapper.cs:67-75 |
Navigation¶
| Target | Trigger | Parameters |
|---|---|---|
| Inbox | Bill submitted, discarded, or sent or pended, with Auto feed unchecked | None; the script navigates to /ClaimBillEntry/Inbox/Index |
| Bill entry (this screen) | Next bill from queue, open bill or new bill, or a successful submit, discard or send or pend with Auto feed checked | Bill id in the URL, kept in step with history.pushState |
| OnBase document viewer (external) | View document button | documentUrl from the loaded Worker view model; no configuration key holding this URL was found in the analyzed source** |
| Send/Pend modal, billing provider lookup, rendering provider lookup, Add service window, Edit service popup, Add/Edit note popup | Toolbar buttons and lookup icons | None; these open in place, see Dialogs and partials |
Screen flow diagram¶
The diagram shows the Bill entry screen, the screens it exchanges navigation with, and the dialogs it opens in place.
flowchart TD
Entry["Bill entry<br>Entry/Index/{id}"] -->|"submit, discard, send or pend<br>(Auto feed unchecked)"| Inbox["Inbox<br>Inbox/Index"]
Entry -->|"submit, discard, send or pend<br>(Auto feed checked)"| Entry
Entry -->|"Alt+P"| SendPend["Send/Pend modal"]
Entry -->|"TIN lookup icon"| BillProv["Billing provider lookup"]
Entry -->|"rendering provider"| RendProv["Rendering provider lookup"]
Entry -->|"Alt+R"| AddSvc["Add service window"]
Entry -->|"edit service row"| EditSvc["Edit service popup"]
Entry -->|"Alt+N"| Note["Add/Edit note popup"]
Entry -->|"Alt+V"| OnBase["OnBase document viewer"]
Inbox -->|"row double-click"| Entry
Search["Search<br>Search/Index"] -->|"open result"| Entry
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¶
- ClaimBillEntry/Controllers/EntryController.cs
- ClaimBillEntry/Controllers/BaseController.cs
- ClaimBillEntry/Controllers/HomeController.cs
- ClaimBillEntry/Controllers/ProviderController.cs
- ClaimBillEntry/Controllers/NoteGridController.cs
- ClaimBillEntry/Controllers/DiagnosisGridController.cs
- ClaimBillEntry/Controllers/ProcedureGridController.cs
- ClaimBillEntry/Controllers/ServiceGridController.cs
- ClaimBillEntry/Views/Entry/Index.cshtml
- ClaimBillEntry/Views/Entry/_Worker.cshtml
- ClaimBillEntry/Views/Entry/_DiagnosesAndProcedures.cshtml
- ClaimBillEntry/Views/Entry/_DiagnosesGrid.cshtml
- ClaimBillEntry/Views/Entry/_ProcedureGrid.cshtml
- ClaimBillEntry/Views/Entry/_Services.cshtml
- ClaimBillEntry/Views/Entry/_ServiceGrid.cshtml
- ClaimBillEntry/Views/Entry/EditorTemplates/_AddService.cshtml
- ClaimBillEntry/Views/Entry/EditorTemplates/_ServiceForm.cshtml
- ClaimBillEntry/Views/Entry/_ServicePeekGrid.cshtml
- ClaimBillEntry/Views/Entry/_NotesGrid.cshtml
- ClaimBillEntry/Views/Entry/EditorTemplates/_EditNote.cshtml
- ClaimBillEntry/Views/Provider/_ProviderLocationGrid.cshtml
- ClaimBillEntry/Views/Provider/_RenderingProviderGrid.cshtml
- ClaimBillEntry/Views/Shared/_Bootstrap3.cshtml
- ClaimBillEntry/ViewModels/Entry/EntryViewModel.cs
- ClaimBillEntry/ViewModels/Entry/WorkerViewModel.cs
- ClaimBillEntry/Classes/AutoMapperBootStrapper.cs
- ClaimBillEntry/js/ClaimBillEntry.entry.js
- ClaimBillEntry/js/claimbillentry.entry.service.js
- ClaimBillEntry/js/claimbillentry.entry.service.validator.js
- ClaimBillEntry/js/claimbillentry.entry.worker.js
- ClaimBillEntry/js/claimbillentry.entry.note.js
- ClaimBillEntry/js/claimbillentry.entry.diagnosis.js
- ClaimBillEntry/js/claimbillentry.entry.procedure.js
- ClaimBillEntry/js/claimbillentry.entry.sendpend.js
- ClaimBillEntry/js/claimbillentry.entry.provider.js
- ClaimBillEntry/js/claimbillentry.message.js
- ClaimBillEntry/js/claimbillentry.utils.js
- ClaimBillEntry/App_Start/RouteConfig.cs
- SAIF.DependencyMaps.Web.ClaimBillEntry/DependencyMap.cs