1. Flow of the file

Q. How does a case flow through VCPMS — from receiving and entering an application, through sending out information requests (wage documents, medical records), determining eligibility, making payments, and handling appeals?

A. Each claim is a WorkItem with a state machine that drives the end-to-end workflow. The file never leaves a single tracked record — stages are just state transitions on the same VcClaim (or FrClaim) entity. Every transition writes an audit entry and can fire notifications, document generation, and background jobs, all configured declaratively per tenant.

StageWhat happensWorkItem mechanic
Receive Victim applies via VCPOnline, advocate applies via VCPAdvocate, or staff creates from paper (manual + bulk intake). File is OCR'd, classified, and attached. VcClaim created in state DraftApplicationIntake.
Enter / Intake Auto-assigned to Claim Processor via org-unit routing rule. Required fields validated. State transition triggers assignment + notification rules on WorkItemManagerConfig.
Information requests System generates outgoing documents (OutDocument): wage request letter, medical records request, LE report request. Each is sent by SMTP (or Outlook, if configured), tracked in the same claim thread, and reopened when a response is received (incoming → InDocument linked to parent). Document-generation rules fire on state change. Each request is its own linked WorkItem; overdue requests trigger SLA reminders.
Eligibility Claim enters AwardInProcess → processor reviews packet → decision. Eligibility checks run against configurable rule sets (no code changes). EligibilityCheckConfig + ValidationRule.
Award Approved claim creates an immutable Award snapshot + AwardItem breakdown (medical, funeral, lost wages, etc.). Award is not a WorkItem — it's the frozen decision record. Approval workflow lives on VcClaim.
Payment PaymentPaymentItem → optional PaymentBatch. Batch goes through approval, then issuance. Separate state machine on Payment (PendingPayment → Paid).
Appeal If denied/reduced, VcClaimAppeal is a child WorkItem with its own state machine, linked to the original claim for audit. Appeal outcome can reopen the parent claim or create an amended Award.
Receive Portal / bulk / mail Intake Auto-assigned Info Requests Wage / Medical / LE Report Eligibility Review packet Award Immutable snapshot Payment Paid Denied or reduced Appeal (VcClaimAppeal) Child WorkItem; may amend Award or reopen claim Single VcClaim WorkItem — state machine advances through every stage Documents, requests, and audit trail all live on the same record
Linear happy-path; dashed lines show the denial → appeal branch that can amend the Award or reopen the parent claim.

2. Digital "packets" — board review and payment determination

Q. Can staff assemble "packets" of digital files? For example: (1) a board-review packet with a clear set of only the necessary documents in one place (staff memo, LE report, email communication from prosecutor), without hunting through the system; and (2) a payment-determination packet with wage form, tax return, disability statement, medical records?

A. VCPMS treats a packet as a view over documents, not a physical bundle — so nothing is duplicated and the packet updates live as new docs arrive. Two packet mechanisms exist today; the new bulk-intake classification makes packet assembly dramatically faster because every document is already tagged with its type and category.

Why it works at volume. Packets are saved filters over classified documents. Before the AI classification pipeline, every packet required manual document selection. With classification, a doc tagged WageStatement automatically flows into every payment packet for that victim.

Board review packet — DeterminationDocket WorkItem

Payment determination packet — the Payment workspace

Ad-hoc packets — one-off merges

For one-off reviews ("send this package to the AG"), any WorkItem can be exported to a single consolidated PDF via the OutDocument template system. Choose a template, select which linked docs to include, the system merges them with a cover sheet.

InDocument pool (classified + routed) WageStatement MedicalRecords PoliceReport FuneralBill StaffMemo / SecureMail TaxReturn, DisabilityStmt Board Packet Filter PoliceReport + StaffMemo + SecureMail Payment Packet Filter WageStatement + Medical + DisabilityStmt + TaxReturn DeterminationDocket — live view Board members: one URL, side-by-side review Payment Workspace Processor: all supporting docs in one place Packets = saved filter + layout — no copies, always up-to-date
Packets are views over the classified InDocument pool. Adding a new doc of the matching type auto-includes it in every open packet that filters for that type.

3. Managing documents within the system

Q. How does VCPMS manage documents within the system (wage forms, medical records, etc.)?

A. Every document is an InDocument (incoming) or OutDocument (generated) — both are WorkItems, both have state machines, both get assigned and tracked exactly like a claim.

Ingestion paths

Classification & organization

Actions on a document

Storage

Outgoing documents (OutDocument)

4. Work queue management & notifications

Q. How does each staff member get notified of tasks requiring their attention — new applications being submitted, documents that were uploaded, etc.?

A. Every staff member has a My Queue — an auto-maintained filtered view of WorkItems currently assigned to them, sorted by urgency. Assignment happens three ways, and every transition triggers notifications through a single configurable system.

How work lands in a queue

  1. Automatic (rule-based) — state transitions trigger StateAssignmentRules on WorkItemManagerConfig. Example: "when a VcClaim enters ApplicationIntake, assign to any available Claim Processor I in org unit Oklahoma North."
  2. Escalation — SLA timers fire when a WorkItem sits too long in a state. Reassigns up the org-unit chain (processor → supervisor → director) with notifications.
  3. Manual — a processor can reassign to a teammate; all handoffs are audited.

How staff get notified

Four parallel channels, each optional and configured on WorkItemManagerConfig.NotificationRules:

ChannelWhenControlled by
In-app (bell icon) Real-time via SignalR. New assignment, document uploaded, message received, state change on a watched claim. User notification preferences.
Email Digest or immediate. Can embed one-click action links. SMTP (default) or Outlook Graph.
Outlook calendar Deadlines, hearing dates, payment due dates as calendar events with deep-link back to the claim. Optional Outlook Integration feature flag.
Outlook inbox (Adaptive Cards) Approve / Reject buttons directly inside email — staff can act without leaving their inbox. Optional, same Outlook feature.

What triggers notifications

Each WorkItem type declares its own notification events:

Admins add / remove notification rules per tenant via the UI — no code deploys.

Queue views for staff

Application Submitted VcClaim → ApplicationIntake Document Uploaded InDocument.Received Status Changed Payment.Approved, etc. SLA Timer Expired WorkItem stuck > N days Rules engine WorkItemManagerConfig • StateAssignmentRule • NotificationRule • DocumentGenerationRule • EscalationRule My Queue (assigned user) Personal, all WorkItem types Department Queue Org unit scope Docket Dashboard By state, due date, type Review Queue Bulk-intake exceptions In-app (SignalR) Bell icon, real-time Email (SMTP / Graph) Digest or immediate Outlook (cal + Adaptive Cards) Optional, feature flag Same rule engine routes to queues AND fires notifications — one config per tenant
A single rule engine reacts to every WorkItem event — it updates the right queues and fires the right notifications simultaneously. Admins configure per tenant without code changes.

What it looks like operationally

A brand-new application comes in → VcClaim auto-assigned to a Claim Processor → they get in-app + email notifications instantly → the claim appears at top of their My Queue → as they request wage / medical records, each outgoing OutDocument + incoming response are linked to the same claim and show as sub-tasks in their queue → when documents are sufficient, they move the claim to next state → assignment rule routes it to the next role automatically, with notifications firing again.

Zero manual "handing off" — the state machine + rules do the routing, and the notification system makes sure nobody misses anything in their lane.

5. Finding bills not for the assigned case (erroneous-bill detection)

Q. Is there a way to find bills not for the assigned case? Example: a large bulk of medical bills submitted electronically — most are for the victim, but some are for other patients. Can VCPMS identify erroneous bills?

A. Yes, in three layers — and the bulk-intake pipeline is designed exactly for this. The key principle: the AI does not trust the submitter's declared claim. It extracts patient identifiers from the document itself and cross-checks against the database.

Layer 1 — Automatic detection at routing time

When the pipeline processes each bill, the Route stage compares extracted identifier fields (victim name, DOB, SSN last-4, claim number) against the bill's intended target WorkItem — the VcClaim the submitter linked it to.

ScenarioAutomatic behavior
Extracted victim matches claim (above threshold, unique) Auto-linked → Processed.
Extracted victim mismatches claim Flagged with RequiresReviewReason = AmbiguousCandidates. Bill lands in the reviewer's Review Queue with the real candidate the lookup suggests. Reviewer sees: "submitted against VC-260042, but extracted victim name matches VC-260817."
No candidate matches anywhere RequiresReviewReason = NoCandidate. Reviewer manually links, auto-creates a draft, or rejects — depending on the rule's NoMatchBehavior.

Layer 2 — Explicit mismatch reports

For a bulk submission (say, 200 bills from a hospital billing system), the workspace shows:

Layer 3 — Cross-claim duplicate / mismatch search

Even for bills already processed, staff can search:

Practical workflow for the example

  1. Hospital uploads 500 bills electronically, all tagged to VcClaim VC-260042 (victim Smith).
  2. Pipeline processes each bill. For each, it extracts patient name, DOB, service date.
  3. Bills where extracted patient = Smith with matching DOB → auto-linked (majority).
  4. Bills where extracted patient ≠ Smith → flagged with AmbiguousCandidates + the lookup's actual best-match claim (if any).
  5. Processor opens the batch workspace → filters "Review Required" → sees 7 mis-assigned bills → one-click "move to VC-260817" (the real match) or reject as "wrong victim."
To make this robust, the admin should configure:
  • A routing rule for ExpenseBill with identifier keys on victimFirstName + victimLastName + DOB + claimNumber.
  • RequireUniqueMatchToAutoLink = true — prevents auto-linking when extracted fields match two victims.
  • AutoLinkScoreThreshold = 85 (or similar) — forces review for low-confidence matches.
  • NoMatchBehavior = ParkForReview — safer than auto-create for bills that need verification.

Short answer: yes, and the system is designed to assume the submitter may be wrong. Extraction + lookup + threshold-based auto-link is exactly the mechanism that catches erroneous bills in a bulk submission.

6. Duplicate incoming document detection

Q. A provider uploads the same bill twice, or a victim re-submits a document they already sent. Does VCPMS catch duplicates, and what happens?

A. Yes, on three keys:

Reviewers can merge the two InDocument records (keeps audit trail), mark the duplicate as superseding (archives the old version), or reject the newer one.

Why not auto-reject? Duplicate uploads often reflect a real workflow event — provider re-uploads a corrected bill, or the original file was lost to a scanner error. The system surfaces the duplicate but lets a human decide. Metrics track duplicate rate per source for tuning.

7. Linking one document to multiple claims / WorkItems

Q. A police report covers an incident with multiple victims; an LE report mentions several offenders. Can one InDocument be attached to multiple claims?

A. Yes. An InDocument has a primary owner (the claim or WorkItem it was first linked to) and a many-to-many relationship for cross-links.

Common uses: an incident police report spanning three sibling victims' claims; a court order naming multiple offenders; a consolidated medical-records release covering a parent + minor child.

Q. Can staff search by text that appears inside a document? Example: find every claim with a document mentioning a specific prescription drug, or every bill from a specific provider name.

A. Yes, via the OCR text stored alongside every InDocument.

9. Supported file formats, size limits, encryption

Q. What files can be uploaded, how big, and how secure is the storage?

AspectDetail
FormatsPDF, TIFF, PNG, JPG, DOCX, XLSX, plus plaintext / CSV for structured imports. Multi-page PDFs are auto-split by the pipeline if a separator page or AI boundary is detected.
Max file sizeTenant-configurable. Default 50 MB per file, 500 MB per bulk-upload batch. Large scans are chunk-uploaded with resumable sessions.
ZIP archivesSupported for bulk intake. Server-side extracts individual files and preserves filenames. Nested ZIPs not supported.
Encryption at restAll binaries stored in Azure Blob with SSE-AES-256. Database columns (OCR text, metadata) protected by Azure SQL TDE.
Encryption in transitTLS 1.2+ for all client ↔ server transfers. SAS tokens with short TTL for blob downloads.
PII redactionExtracted SSN / DOB / account numbers can be masked in preview per tenant policy. Original doc is retained unredacted for authorized roles only.
Virus scanAll uploads pass through an antivirus scan before entering the pipeline; infected files quarantine automatically with a Rejected state and audit record.

10. Document retention and archival after a claim closes

Q. What happens to documents after a claim is closed or denied? How long are they kept, and can they still be retrieved?

A. Retention is configured per tenant to match each state's record-retention law (typically 7–10 years for compensation programs).

Tenant admins set retention policies via the Admin Guide → Document Retention Policy screen. Policies can differ per document type (e.g., tax returns 7 years, ID documents 3 years after closure).

For claims whose payments draw from SourceFund entities, retention windows are also driven by the fund's FundingSourceType:

The longer of the two windows (tenant retention policy vs. funding-source retention) applies.

11. Reprocessing a document after rule changes or misclassification

Q. An admin updates a routing rule, or a reviewer realizes the AI misclassified a batch of documents. How do I re-run the pipeline without re-uploading?

A. The orchestrator supports re-entry at any stage, per-document or per-set, without re-uploading the binary.

Per-document reprocess

Per-set reprocess

Bulk reprocess from the list

Cost note. Reprocessing re-runs the Azure DI classifier and (if needed) extractor, each of which has per-call cost. Large bulk reprocess operations are rate-limited per tenant and require the Pages_BulkDocumentIntake_Reprocess permission.