Files
claudetools/clients/valleywide/app-modernization/research/schema-analysis.md
Mike Swanson e0a117b434 client(valleywide): init app modernization project — VB6/Access stack analysis
Initial research session for VWP application modernization. Analyzed 2.7GB
application archive, mapped ~130-table Access 97 schema via binary scan,
confirmed VB6 + P-Code compilation (decompilation viable), and identified
compliance requirements (certified payroll, 3-bank positive pay).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-27 10:10:35 -07:00

161 lines
5.6 KiB
Markdown

# VWP.mdb Schema Analysis
**Source:** VWP.mdb (938MB, last written 2026-04-24, Jet 3.x / Access 97 format)
**Method:** Binary scan (Jet 3.x format cannot be opened by modern ACE/DAO drivers)
---
## Table Inventory by Domain
### Projects & Jobs
| Table | Purpose |
|---|---|
| tblPROJECT | Builders / general contractors |
| tblLOTINFO | Individual job sites / lots |
| tblPLANS | House plans / blueprints |
| tblOPTION | Plan options / upgrades |
| tblELEVATION | Architectural elevations |
| tblFINISH | Finish types |
| tblCONINFO | Contractor / contact info |
| tblProjDate | Project scheduling dates |
| tblCHANGE | Change orders |
| tblLotChange | Lot-level change orders |
| tblSZONE | Schedule zones |
| tblWORKTYPE | Work type codes |
### Work Orders & Estimating
| Table | Purpose |
|---|---|
| tblORDERS | Work orders |
| tblORDMatrl | Work order materials |
| tblTAKE | Material takeoffs (quantity estimates) |
| tblTOMATRL | Takeoff materials |
| tblLOTMATRL | Lot materials |
| tblOPTMATRL | Option materials |
| tblPLANMAT | Plan bill of materials |
| tblPOMATRL | Purchase order materials |
| tblPOPTION | Plan options (billing side) |
| tblPOptBill | Plan option billing rates |
| tblPlanBill | Plan billing rates |
| tblMEASURE | Measurement records |
### Inventory & Purchasing
| Table | Purpose |
|---|---|
| tblINVPRICE / tblINVPRC | Material price list |
| tblINVTRY | Inventory on hand |
| tblSUPPLIER | Vendor / supplier master |
| tblPOrder / tblPURCHORDR | Purchase orders |
| tblPOrdMat | PO line items |
| tblYardOrder / tblYardMemo | Yard material orders |
| tblJCVENDOR | Job cost vendor assignments |
### Crew & Payroll
| Table | Purpose |
|---|---|
| tblCREW | Employee master |
| tblCREWLIST | Crew-to-job assignments |
| tblCREWRATE | Pay rate history |
| tblHRDAILY | Daily hours entries |
| tblTIME | Time records |
| tblHOURLIST | Hour list by period |
| tblPAYHEADER | Payroll run header |
| tblPAYCREW | Per-employee payroll detail |
| tblPAYSHEET | Pay sheets |
| tblPAYROLL | Payroll summary |
| tblTOLABOR | Labor cost totals |
| tblINCODES | Earnings / deduction codes |
| tblCERTIFIED | **Certified payroll** (govt contracts) |
| tblSC_Crew | Scaffold crew assignments |
| tblScaffold | Scaffold tracking |
| tblRCREW | ? (repair crew?) |
### Accounts Receivable
| Table | Purpose |
|---|---|
| tblARMASTER | Customer master |
| tblARINVOICE | AR invoices |
| tblARTRANS | AR transactions / payments |
| ARN_InvHistoryHeader | Invoice history |
| tblCBOSalesCode | Sales / billing codes |
| tblCBOWorkType | Work type codes for billing |
| tblBPTYPE | Billing / payment type |
| tblSWARTRANS | AR variant (Southwest?) |
### Accounts Payable
| Table | Purpose |
|---|---|
| tblAPMASTER | Vendor master |
| tblAPTRANS | AP transactions |
| APH_JobDistDetail | Job cost distribution detail |
| tblJCLIST | Job cost list |
| tblJCTRANS | Job cost transactions |
| tblJOBCOST | Job cost summary |
| tblCHECKREC | Check reconciliation |
### Bank / Positive Pay
| Table | Purpose |
|---|---|
| tblPosPayVWP | Positive pay — VWP bank |
| tblPosPayCRD | Positive pay — second bank |
| tblPosPaySWI | Positive pay — third bank |
### Repair / Service
| Table | Purpose |
|---|---|
| tblREPAIR / tblREPAIRS | Repair work orders |
| tblRepList | Repair list / punch list |
### System / Config
| Table | Purpose |
|---|---|
| tblSECURITY / tblUsers | User accounts / permissions |
| tblSYSInfo | System configuration |
| tblGLAcct | General ledger chart of accounts |
| tblTCINFO | ? (TrueCommerce? Tax?) |
| tblPRGINFO | Program / config info |
---
## Key Findings
### This is a full construction ERP
Not a simple order tracker. Covers the entire plastering operation end-to-end:
- Estimating → Work Orders → Crew Scheduling → Materials → Payroll → Invoicing → Collections
### Certified Payroll (`tblCERTIFIED`)
Indicates government / prevailing wage work. Certified payroll is a legally mandated report format (federal / state). Any replacement system must preserve this or have a certified payroll module.
### Positive Pay (3 bank accounts)
Bank fraud-prevention integration — the app generates positive pay files for three different bank accounts. This is a hard integration dependency.
### Relationship names visible in binary
Entries like `tblLOTINFOtblPROJECT`, `tblPAYCREWtblCREW` etc. are Access relationship / query names — confirms foreign key structure exists in the data model.
### Scratch / temp tables (can be ignored for migration)
`tblLOTINFO000`, `tblLOTINFOCCCCCCCCCCC`, `tblPROJECT_ExportErrors`, `tblLOTINF3`, etc. — developer working copies, not production objects.
---
## Modernization Complexity: HIGH
| Factor | Impact |
|---|---|
| ~130 real tables | Large but manageable data model |
| 791 Crystal Reports | Biggest migration effort — must map each report |
| Certified payroll | Legal compliance — cannot be dropped |
| Positive pay (3 banks) | Hard file-format integration |
| Full AR/AP/Payroll | Financial accuracy requirements |
| Jet 3.x format | No modern driver can open natively — must be converted first |
| No VFP source (pending) | Business logic must be reverse-engineered |
---
## Next Steps
1. **Find VFP source** (Mike searching server) — determines if logic can be read or must be RE'd
2. **Convert MDB to readable format** — need Access 97 / older ODBC path to extract full schema with field types
3. **Sample top tables** — row counts, date ranges, key field values
4. **Audit Crystal Reports** — identify which .rpt files are active vs dead weight
5. **Interview VWP** — what are the daily workflows? What's broken or painful beyond file size?