Skip to content

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.Index redirects to Entry/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.pushState and replaceState, and a popstate event 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, with claimbillentry.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.js and claimbillentry.entry.provider.js loaded as page scripts in Views/Entry/Index.cshtml.
  • The view serializes EntryViewModel into a kendo.observable view 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 beforeunload handler 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 calls getNextQueueBill to 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 from claimbillentry.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
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