sync: auto-sync from DESKTOP-0O8A1RL at 2026-05-12 17:13:53

Author: Mike Swanson
Machine: DESKTOP-0O8A1RL
Timestamp: 2026-05-12 17:13:53
This commit is contained in:
2026-05-12 17:13:54 -07:00
parent 859dd40db5
commit 46485af009
24 changed files with 583 additions and 1 deletions

View File

@@ -0,0 +1,177 @@
# Grabb Durando — AI Demand Review System
**Client:** Grabb Durando (plaintiff personal injury law firm, Arizona)
**Contact:** Robert Grabb — rgrabb@grabblaw.com
**Project start:** 2026-05-12
**Status:** Scoping / pre-quote
---
## What They Want
Robert has designed a full AI-assisted workflow for preparing pre-suit demand packages (Phase Two Package, delivered 2026-05-11). He wants ACG to design and implement the technical system.
The workflow:
1. Staff copies a 11-subfolder template into a client case file
2. Drops relevant documents into categorized folders (medical records, police report, bills, liens, etc.)
3. Uploads to a "firm-approved AI" — runs a standard prompt
4. AI produces: case snapshot, liability summary, medical chronology, specials summary, missing items, strengths/weaknesses, draft demand letter
5. Staff saves AI output to folder 11 (AI Output)
6. Attorney reviews and approves before anything is sent
The "firm-approved AI" is the piece ACG is building.
---
## Their Environment
- **Case management:** Leap (legal case management software)
- **File storage:** Network/file server (not SharePoint/OneDrive)
- **M365:** Yes (existing MSP client, ACG-managed tenant)
- **Inky/GuruProtect:** Yes (visible in email headers)
---
## Implementation Decision
**Custom Claude API application** — a web UI where staff:
1. Selects a case, uploads documents from each category
2. Sees a pre-flight checklist (which categories have docs, which are empty)
3. Clicks "Generate" — app sends documents + standard prompt to Claude API
4. Reviews structured output on screen
5. Downloads/saves output as DOCX or PDF to the AI Output folder
This approach:
- Gives the firm a single, controlled access point (no staff wandering to personal ChatGPT)
- Enforces the standard prompt (staff can't accidentally use the wrong one)
- Creates an audit log (who ran what case, when)
- Is hosted and managed by ACG
---
## Standard AI Prompt (from Robert's docs)
```
You are assisting a plaintiff personal injury law firm in Arizona with a pre-suit demand package.
Review the uploaded materials for this case. Prepare the following:
1. One-page case snapshot
2. Liability summary
3. Medical chronology by date and provider
4. Medical specials summary by provider
5. Summary of liens, LOPs, MedPay, or reimbursement issues if shown in the documents
6. Missing records, missing bills, or missing information
7. Case strengths
8. Case weaknesses or defense arguments
9. Questions for staff or attorney review
10. Draft settlement demand letter
Important instructions:
Do not invent facts. Do not assume facts not shown in the documents.
If something is unclear, say "unclear from the materials provided."
If documents are missing, identify what is missing.
Separate confirmed facts from assumptions.
Use a professional plaintiff personal injury tone.
Do not include legal citations unless specifically requested.
Do not send anything. This is a draft for attorney review.
After preparing the demand letter, create a short checklist of facts that staff or attorney must verify before the demand is sent...
```
---
## Document Categories (the 11-folder structure)
| # | Category |
|---|----------|
| 01 | Intake and Client Facts |
| 02 | Liability Documents |
| 03 | Photos and Videos |
| 04 | Insurance and Claim Info |
| 05 | Medical Records |
| 06 | Medical Bills |
| 07 | Liens and LOPs |
| 08 | Wage Loss |
| 09 | Adjuster Correspondence |
| 10 | Prior Offers and Demands |
| 11 | AI Output (where output is saved) |
---
## Work Breakdown & Quote Basis
### Phase 1 — Discovery & Design (46 hrs)
- Review Leap document structure and how docs are accessed/exported
- Define user roles (staff vs. attorney — read-only output?)
- Document size and format limits (PDF, DOCX, JPG, PNG, TXT)
- Decide hosting location (ACG-managed server or small VM)
- Design the app flow and UI wireframe
- Select Claude model (Sonnet for quality vs. Haiku for cost)
- Technical design doc
### Phase 2 — Development (1828 hrs)
- Document upload UI with per-category slots and pre-flight checklist
- Document text extraction: PDF (pdfplumber/PyMuPDF), DOCX (python-docx), images (Claude vision)
- Claude API integration with the standard prompt
- Structured output display: each of the 10 sections rendered clearly
- Download output as DOCX or PDF
- Per-case audit log (who ran, when, which documents, which Claude model/version)
- User authentication (simple — not AD-integrated in v1)
- Basic admin panel: manage users, view audit log
### Phase 3 — Testing & Prompt Refinement (46 hrs)
- Test with sample/redacted case documents
- Tune prompt for output quality
- Review with Robert and one staff member
- Edge cases: missing docs, large PDFs, image-only docs
### Phase 4 — Deployment (34 hrs)
- Deploy to ACG-managed server (Linux VM or Windows)
- SSL certificate
- Configure for firm's network access (internal or VPN-accessible)
- Backup configuration
### Phase 5 — Training & Documentation (34 hrs)
- 12 hour staff training session
- Written user guide (PDF)
- Admin documentation for ACG
**Total estimated hours: 3248**
### Ongoing / Recurring
- Claude API usage: ~$0.05$0.30 per demand package (Sonnet, depends on doc volume) — pass-through or light markup
- Monthly hosting/maintenance: included in MSP contract or separate line item (~$5075/month)
- Annual prompt review/update: 12 hrs
---
## Quote Ranges
| Tier | Hours | Rate | Range |
|------|-------|------|-------|
| Low | 32 hrs | $125/hr | $4,000 |
| Mid | 40 hrs | $135/hr | $5,400 |
| High | 48 hrs | $145/hr | $6,960 |
Recommend quoting as a flat-fee project with a defined scope, plus a change-order clause for Leap integration if they want direct file server/Leap connectivity in v2.
---
## Open Questions (for discovery call)
1. How many users will need access? (affects auth complexity)
2. Does Leap have an API or document export format? (affects file server integration)
3. Where are case documents stored on the file server — is there a predictable folder structure per case?
4. Does Robert want staff to manually upload each document, or pull from a case folder path automatically?
5. Any requirement to retain AI output within Leap (vs. just saving to the file server)?
6. Timeline expectation?
7. Budget ballpark?
---
## Source Materials
Stored in: `clients/grabb-durando/extracted-attachments/`
- `AI_Demand_Review_Phase_Two_Package.docx` — full Phase Two package
- `AI_Demand_Review_Checklist (2).docx` — standalone checklist
- `zip-contents/AI_Demand_Review_Phase_Two/AI Demand Review - TEMPLATE/` — full folder template + all source files

View File

@@ -0,0 +1,163 @@
#Requires -RunAsAdministrator
# GuruRMM Agent Install Diagnostic
# Run on GND-SERVER after MSI install attempt
$out = [System.Collections.Generic.List[string]]::new()
function Log($msg) { $out.Add($msg); Write-Host $msg }
function Section($title) { Log ""; Log ("=" * 60); Log " $title"; Log ("=" * 60) }
Section "SYSTEM INFO"
Log "Hostname: $env:COMPUTERNAME"
Log "Date/Time: $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')"
Log "OS: $((Get-CimInstance Win32_OperatingSystem).Caption)"
Log "Arch: $env:PROCESSOR_ARCHITECTURE"
Section "SERVICE STATUS"
$svc = Get-Service -Name "gururmm*" -ErrorAction SilentlyContinue
if ($svc) {
foreach ($s in $svc) {
Log "Name: $($s.Name)"
Log "DisplayName: $($s.DisplayName)"
Log "Status: $($s.Status)"
Log "StartType: $($s.StartType)"
}
} else {
Log "[NOT FOUND] No service matching 'gururmm*'"
}
Section "SERVICE BINARY"
$svcWmi = Get-WmiObject Win32_Service -Filter "Name LIKE 'gururmm%'" -ErrorAction SilentlyContinue
if ($svcWmi) {
Log "PathName: $($svcWmi.PathName)"
Log "StartName: $($svcWmi.StartName)"
$binPath = $svcWmi.PathName -replace '"',''
if (Test-Path $binPath) {
$bin = Get-Item $binPath
Log "Binary: $($bin.FullName)"
Log "Size: $($bin.Length) bytes"
Log "Modified: $($bin.LastWriteTime)"
$ver = (Get-Item $binPath).VersionInfo
Log "FileVersion: $($ver.FileVersion)"
} else {
Log "[NOT FOUND] Binary path does not exist: $binPath"
}
} else {
Log "[NOT FOUND] No WMI service entry for gururmm"
}
Section "REGISTRY"
$regPath = "HKLM:\SOFTWARE\GuruRMM"
if (Test-Path $regPath) {
Log "Key exists: $regPath"
Get-ItemProperty $regPath -ErrorAction SilentlyContinue | ForEach-Object {
$_.PSObject.Properties | Where-Object { $_.Name -notmatch '^PS' } | ForEach-Object {
Log " $($_.Name) = $($_.Value)"
}
}
} else {
Log "[NOT FOUND] $regPath does not exist"
}
Section "INSTALLED PROGRAMS (MSI)"
$rmm = Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*",
"HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*" `
-ErrorAction SilentlyContinue |
Where-Object { $_.DisplayName -match "GuruRMM|gururmm" }
if ($rmm) {
foreach ($r in $rmm) {
Log "DisplayName: $($r.DisplayName)"
Log "DisplayVersion: $($r.DisplayVersion)"
Log "InstallDate: $($r.InstallDate)"
Log "InstallLocation:$($r.InstallLocation)"
Log "Publisher: $($r.Publisher)"
}
} else {
Log "[NOT FOUND] No GuruRMM entry in Add/Remove Programs"
}
Section "MSI EVENT LOG (last 20 MsiInstaller events)"
Get-WinEvent -FilterHashtable @{
LogName = 'Application'
ProviderName = 'MsiInstaller'
} -MaxEvents 20 -ErrorAction SilentlyContinue | ForEach-Object {
Log "$($_.TimeCreated) [$($_.Id)] $($_.Message -replace '\r?\n',' ' | Select-Object -First 1)"
}
Section "APPLICATION EVENT LOG (gururmm, last 30 entries)"
Get-WinEvent -FilterHashtable @{
LogName = 'Application'
StartTime = (Get-Date).AddHours(-4)
} -ErrorAction SilentlyContinue |
Where-Object { $_.Message -match "gururmm|GuruRMM" -or $_.ProviderName -match "gururmm" } |
Select-Object -Last 30 | ForEach-Object {
Log "$($_.TimeCreated) [$($_.LevelDisplayName)] $($_.ProviderName): $($_.Message -replace '\r?\n',' ')"
}
Section "SYSTEM EVENT LOG (service control, last 20)"
Get-WinEvent -FilterHashtable @{
LogName = 'System'
StartTime = (Get-Date).AddHours(-4)
Id = @(7000,7001,7009,7023,7031,7034,7036,7040,7045)
} -ErrorAction SilentlyContinue |
Where-Object { $_.Message -match "gururmm|GuruRMM" } |
Select-Object -Last 20 | ForEach-Object {
Log "$($_.TimeCreated) [ID $($_.Id)] $($_.Message -replace '\r?\n',' ')"
}
Section "AGENT LOG FILES"
$searchPaths = @(
"$env:ProgramData\GuruRMM",
"$env:ProgramFiles\GuruRMM",
"$env:ProgramFiles\gururmm-agent",
"C:\Program Files\GuruRMM",
"C:\ProgramData\GuruRMM"
)
$foundAny = $false
foreach ($p in $searchPaths) {
if (Test-Path $p) {
$foundAny = $true
Log "Found: $p"
Get-ChildItem $p -Recurse -ErrorAction SilentlyContinue | ForEach-Object {
Log " $($_.FullName) ($($_.Length) bytes)"
}
# Print last 50 lines of any .log files
Get-ChildItem $p -Recurse -Filter "*.log" -ErrorAction SilentlyContinue | ForEach-Object {
Log ""
Log "--- $($_.FullName) (last 50 lines) ---"
Get-Content $_.FullName -Tail 50 -ErrorAction SilentlyContinue | ForEach-Object { Log $_ }
}
}
}
if (-not $foundAny) { Log "[NOT FOUND] No agent data directories found" }
Section "NETWORK CONNECTIVITY"
$targets = @(
@{Host="rmm.azcomputerguru.com"; Port=443; Label="RMM HTTPS"},
@{Host="172.16.3.30"; Port=3001; Label="RMM API (internal)"},
@{Host="8.8.8.8"; Port=53; Label="DNS (Google)"}
)
foreach ($t in $targets) {
$hp = "$($t.Host):$($t.Port)"
try {
$tcp = [System.Net.Sockets.TcpClient]::new()
$r = $tcp.BeginConnect($t.Host, $t.Port, $null, $null)
$ok = $r.AsyncWaitHandle.WaitOne(3000)
$tcp.Close()
if ($ok) { Log "[OK] $($t.Label) ($hp)" }
else { Log "[FAIL] $($t.Label) ($hp) -- timeout" }
} catch {
Log "[FAIL] $($t.Label) ($hp) -- $($_.Exception.Message)"
}
}
Section "FIREWALL (outbound rules for gururmm)"
Get-NetFirewallRule -ErrorAction SilentlyContinue |
Where-Object { $_.DisplayName -match "gururmm|GuruRMM" } |
ForEach-Object { Log "$($_.DisplayName) [$($_.Direction)] [$($_.Action)] [$($_.Enabled)]" }
# Write output file
$outFile = "$env:TEMP\gururmm-diag-$env:COMPUTERNAME-$(Get-Date -Format 'yyyyMMdd-HHmmss').txt"
$out | Set-Content $outFile -Encoding UTF8
Write-Host ""
Write-Host "Diagnostic saved to: $outFile"
Write-Host "Copy it back with: type `"$outFile`""

View File

@@ -0,0 +1,2 @@
This folder is for: 01 Intake and Client Facts
Delete this placeholder after adding case documents.

View File

@@ -0,0 +1,2 @@
This folder is for: 02 Liability Documents
Delete this placeholder after adding case documents.

View File

@@ -0,0 +1,2 @@
This folder is for: 03 Photos and Videos
Delete this placeholder after adding case documents.

View File

@@ -0,0 +1,2 @@
This folder is for: 04 Insurance and Claim Info
Delete this placeholder after adding case documents.

View File

@@ -0,0 +1,2 @@
This folder is for: 05 Medical Records
Delete this placeholder after adding case documents.

View File

@@ -0,0 +1,2 @@
This folder is for: 06 Medical Bills
Delete this placeholder after adding case documents.

View File

@@ -0,0 +1,2 @@
This folder is for: 07 Liens and LOPs
Delete this placeholder after adding case documents.

View File

@@ -0,0 +1,2 @@
This folder is for: 08 Wage Loss
Delete this placeholder after adding case documents.

View File

@@ -0,0 +1,2 @@
This folder is for: 09 Adjuster Correspondence
Delete this placeholder after adding case documents.

View File

@@ -0,0 +1,2 @@
This folder is for: 10 Prior Offers and Demands
Delete this placeholder after adding case documents.

View File

@@ -0,0 +1,2 @@
This folder is for: 11 AI Output
Delete this placeholder after adding case documents.

View File

@@ -0,0 +1,54 @@
AI DEMAND REVIEW CHECKLIST
Client Name: _______________________________
Date of Loss: _______________________________
Staff Member: ______________________________
Attorney Reviewer: __________________________
Before using AI, confirm that the AI Demand Review folder contains, if available:
[ ] Intake/client facts
[ ] Police report or incident report
[ ] Photos/videos
[ ] Insurance/claim information
[ ] Medical records
[ ] Medical bills
[ ] Liens/LOPs
[ ] Wage loss documents
[ ] Adjuster correspondence
[ ] Prior offers/demands
Before uploading to AI:
[ ] Confirm we are using the firm-approved AI account only
[ ] Confirm no personal AI account is being used
[ ] Confirm documents are in the correct AI Demand Review folder
[ ] Confirm obvious duplicate/junk documents are removed
[ ] Confirm highly sensitive unnecessary documents are excluded
After AI produces output:
[ ] Save AI case snapshot to 11 AI Output
[ ] Save AI medical chronology to 11 AI Output
[ ] Save AI specials summary to 11 AI Output
[ ] Save AI missing-items list to 11 AI Output
[ ] Save AI demand draft to 11 AI Output
Before demand is sent, verify:
[ ] Client name
[ ] Date of loss
[ ] Defendant/tortfeasor name
[ ] Insurance carrier
[ ] Claim number
[ ] Policy limits, if known
[ ] Treatment dates
[ ] Provider names
[ ] Diagnoses/injuries
[ ] Medical bill totals
[ ] Liens/LOPs
[ ] Wage loss
[ ] Prior offers
[ ] Demand amount
[ ] Response deadline
[ ] Attorney approval

View File

@@ -0,0 +1,38 @@
AI DEMAND REVIEW OFFICE PROCEDURE
Purpose
This procedure creates a repeatable process for using the firm-approved AI account to prepare pre-suit personal injury demand packages.
1. When to use this procedure
Use this procedure when a case is ready for demand preparation or when the attorney asks staff to prepare an AI demand review.
2. Create the case AI folder
Copy the folder named "AI Demand Review - TEMPLATE" into the client's case file. Rename it using this format:
[Client Last Name], [Client First Name] - AI Demand Review
Example:
Smith, Mary - AI Demand Review
3. Add documents to the correct folders
Place the relevant documents into the matching subfolders. Do not place unrelated documents, duplicate scans, or obvious junk documents into the AI review folder.
4. Use only firm-approved AI
Client materials may be uploaded only to the firm-approved AI account/workspace. Do not use personal ChatGPT accounts, random AI websites, browser extensions, free PDF summarizers, or unapproved AI tools.
5. Run the standard prompt
Upload the documents or selected folder contents to the firm-approved AI account. Copy and paste the "Standard AI Demand Prompt" into the AI chat.
6. Save AI output
Save the AI output in the "11 AI Output" folder, using clear filenames such as:
- AI Case Snapshot.docx
- AI Medical Chronology.docx
- AI Specials Summary.docx
- AI Missing Items List.docx
- AI Demand Draft.docx
7. Required review
The demand letter may not be sent until staff verifies the key facts and the attorney approves the final demand.
8. Attorney approval
AI is a drafting and organization tool. It does not replace attorney judgment. No AI output may be sent to an adjuster, opposing counsel, court, or client unless reviewed and approved under firm procedure.

View File

@@ -0,0 +1,39 @@
You are assisting a plaintiff personal injury law firm in Arizona with a pre-suit demand package.
Review the uploaded materials for this case. Prepare the following:
1. One-page case snapshot
2. Liability summary
3. Medical chronology by date and provider
4. Medical specials summary by provider
5. Summary of liens, LOPs, MedPay, or reimbursement issues if shown in the documents
6. Missing records, missing bills, or missing information
7. Case strengths
8. Case weaknesses or defense arguments
9. Questions for staff or attorney review
10. Draft settlement demand letter
Important instructions:
Do not invent facts.
Do not assume facts not shown in the documents.
If something is unclear, say "unclear from the materials provided."
If documents are missing, identify what is missing.
Separate confirmed facts from assumptions.
Use a professional plaintiff personal injury tone.
Do not include legal citations unless specifically requested.
Do not send anything. This is a draft for attorney review.
After preparing the demand letter, create a short checklist of facts that staff or attorney must verify before the demand is sent, including:
- client name
- date of loss
- defendant name
- insurance carrier
- claim number
- treatment dates
- providers
- bill totals
- liens
- policy limits, if known
- demand amount
- response deadline

View File

@@ -0,0 +1,88 @@

============================================================
SYSTEM INFO
============================================================
Hostname: GND-SERVER
Date/Time: 2026-05-12 15:52:21
OS: Microsoft Windows Server 2019 Standard
Arch: AMD64
============================================================
SERVICE STATUS
============================================================
Name: GuruRMMAgent
DisplayName: GuruRMM Agent
Status: Running
StartType: Automatic
============================================================
SERVICE BINARY
============================================================
PathName: "C:\Program Files\GuruRMM\gururmm-agent.exe" service
StartName: LocalSystem
[NOT FOUND] Binary path does not exist: C:\Program Files\GuruRMM\gururmm-agent.exe service
============================================================
REGISTRY
============================================================
Key exists: HKLM:\SOFTWARE\GuruRMM
InstallDir = C:\Program Files\GuruRMM\
SiteId = d526d700-7210-48b1-94a9-40c87a29dc25
Version = 0.6.2
AgentKey = agk_NEzx7sRA9JdDSL2xr2ukAYK2L427G4G0
============================================================
INSTALLED PROGRAMS (MSI)
============================================================
DisplayName: GuruRMM Agent
DisplayVersion: 0.6.2
InstallDate: 20260512
InstallLocation:
Publisher: Arizona Computer Guru LLC
============================================================
MSI EVENT LOG (last 20 MsiInstaller events)
============================================================
05/12/2026 15:44:22 [1033] Windows Installer installed the product. Product Name: GuruRMM Agent. Product Version: 0.6.2. Product Language: 1033. Manufacturer: Arizona Computer Guru LLC. Installation success or error status: 0.
05/12/2026 15:44:22 [11707] Product: GuruRMM Agent -- Installation completed successfully.
05/12/2026 15:44:22 [1042] Ending a Windows Installer transaction: C:\Users\sysadmin.gd\Desktop\gururmm-agent-grabb-main-office.msi. Client Process Id: 12280.
05/12/2026 15:44:18 [1040] Beginning a Windows Installer transaction: C:\Users\sysadmin.gd\Desktop\gururmm-agent-grabb-main-office.msi. Client Process Id: 12280.
============================================================
APPLICATION EVENT LOG (gururmm, last 30 entries)
============================================================
05/12/2026 15:44:22 [Information] MsiInstaller: Windows Installer installed the product. Product Name: GuruRMM Agent. Product Version: 0.6.2. Product Language: 1033. Manufacturer: Arizona Computer Guru LLC. Installation success or error status: 0.
05/12/2026 15:44:22 [Information] MsiInstaller: Product: GuruRMM Agent -- Installation completed successfully.
05/12/2026 15:44:22 [Information] MsiInstaller: Ending a Windows Installer transaction: C:\Users\sysadmin.gd\Desktop\gururmm-agent-grabb-main-office.msi. Client Process Id: 12280.
05/12/2026 15:44:18 [Information] MsiInstaller: Beginning a Windows Installer transaction: C:\Users\sysadmin.gd\Desktop\gururmm-agent-grabb-main-office.msi. Client Process Id: 12280.
============================================================
SYSTEM EVENT LOG (service control, last 20)
============================================================
05/12/2026 15:44:22 [ID 7036] The GuruRMM Agent service entered the running state.
05/12/2026 15:44:21 [ID 7045] A service was installed in the system. Service Name: GuruRMM Agent Service File Name: "C:\Program Files\GuruRMM\gururmm-agent.exe" service Service Type: user mode service Service Start Type: auto start Service Account: LocalSystem
============================================================
AGENT LOG FILES
============================================================
Found: C:\ProgramData\GuruRMM
C:\ProgramData\GuruRMM\agent.log.2026-05-12 (0 bytes)
C:\ProgramData\GuruRMM\install-report.ps1 (15766 bytes)
Found: C:\Program Files\GuruRMM
C:\Program Files\GuruRMM\gururmm-agent.exe (4235264 bytes)
Found: C:\Program Files\GuruRMM
C:\Program Files\GuruRMM\gururmm-agent.exe (4235264 bytes)
Found: C:\ProgramData\GuruRMM
C:\ProgramData\GuruRMM\agent.log.2026-05-12 (0 bytes)
C:\ProgramData\GuruRMM\install-report.ps1 (15766 bytes)
============================================================
NETWORK CONNECTIVITY
============================================================
[OK] RMM HTTPS (rmm.azcomputerguru.com:443)
[FAIL] RMM API (internal) (172.16.3.30:3001) -- timeout
[OK] DNS (Google) (8.8.8.8:53)
============================================================
FIREWALL (outbound rules for gururmm)
============================================================