Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
114 commits
Select commit Hold shift + click to select a range
0d61c12
chore: Add pytest to requirements.txt
google-labs-jules[bot] Mar 19, 2026
bcd4cf1
🧪 Add test for untestable exception block in xml-validator.py
google-labs-jules[bot] Mar 19, 2026
f56a001
🧪 Add tests for BaseConverter to verify ABC behavior
google-labs-jules[bot] Mar 19, 2026
6b4c987
🧪 Add unit tests for Data Validation module
google-labs-jules[bot] Mar 19, 2026
1e1b587
🧪 Add Error Path Tests for Date Formatting in src/data_cleaning.py
google-labs-jules[bot] Mar 19, 2026
32b2068
🔒 Fix XXE vulnerability in xml-validator
google-labs-jules[bot] Mar 19, 2026
083304d
Merge pull request #6 from daler91/fix-xxe-vulnerability-367821129734…
daler91 Mar 19, 2026
0b52d81
Merge pull request #5 from daler91/jules-testing-improvement-date-for…
daler91 Mar 19, 2026
1af67b4
Merge pull request #4 from daler91/jules-add-data-validation-tests-12…
daler91 Mar 19, 2026
383417e
Merge pull request #3 from daler91/fix-base-converter-tests-318024770…
daler91 Mar 19, 2026
71239a6
Refactor Address and Phone logic into helper methods
google-labs-jules[bot] Mar 19, 2026
325d649
Merge pull request #2 from daler91/test-xml-validator-exception-78858…
daler91 Mar 19, 2026
d7926bb
Merge branch 'master' into jules-fix-requirements-2966955879941166032
daler91 Mar 19, 2026
fffccba
Merge pull request #1 from daler91/jules-fix-requirements-29669558799…
daler91 Mar 19, 2026
05f1f00
🔒 [fix XXE vulnerability in xml-validator.py]
google-labs-jules[bot] Mar 19, 2026
3f5d45f
Add test for _calculate_demographics in TrainingConverter
google-labs-jules[bot] Mar 19, 2026
8d407f0
Merge pull request #7 from daler91/refactor/counseling-converter-help…
daler91 Mar 19, 2026
610b940
Merge pull request #9 from daler91/test-training-converter-demographi…
daler91 Mar 19, 2026
fbd820f
Add tests for clean_numeric in data_cleaning.py
google-labs-jules[bot] Mar 19, 2026
35ddd7d
🧪 Add clean_percentage tests and fix trailing % handling
google-labs-jules[bot] Mar 19, 2026
5d35d3e
Merge pull request #11 from daler91/test/clean-percentage-improvement…
daler91 Mar 19, 2026
df4dcd2
🧹 [code health] Remove unused sys import in xml-validator.py
google-labs-jules[bot] Mar 19, 2026
926dfb5
🧹 [code health improvement] Remove unused import in counseling converter
google-labs-jules[bot] Mar 19, 2026
b3963a7
Merge pull request #10 from daler91/testing-improvement-clean-numeric…
daler91 Mar 19, 2026
80fbbb9
Remove unused import `clean_percentage` in `src/data_validation.py`
google-labs-jules[bot] Mar 19, 2026
c105d93
🧹 [remove unused import truncate_counselor_notes]
google-labs-jules[bot] Mar 19, 2026
796c952
Merge branch 'master' into jules-17669605457106686770-af2673f6
daler91 Mar 19, 2026
7301378
🧹 [code health improvement] Remove unused import clean_whitespace
google-labs-jules[bot] Mar 19, 2026
46bd111
Merge pull request #8 from daler91/jules-17669605457106686770-af2673f6
daler91 Mar 19, 2026
67eec91
Merge pull request #13 from daler91/fix/remove-unused-sys-import-6964…
daler91 Mar 19, 2026
aac7793
Merge pull request #16 from daler91/fix-unused-import-training-client…
daler91 Mar 19, 2026
b769d20
Merge pull request #17 from daler91/code-health-remove-clean-whitespa…
daler91 Mar 19, 2026
f614fd0
🧹 [code health improvement] Remove unused ElementTree import in fix-s…
google-labs-jules[bot] Mar 19, 2026
ecdcf25
🧹 [code health improvement] Remove unused import clean_percentage
google-labs-jules[bot] Mar 19, 2026
4f73024
🧹 [remove unused datetime import]
google-labs-jules[bot] Mar 19, 2026
efe5a14
🧹 [code health improvement] Remove unused import standardize_state_name
google-labs-jules[bot] Mar 19, 2026
65f1218
Merge pull request #14 from daler91/fix/remove-unused-os-import-57494…
daler91 Mar 19, 2026
b0b781c
Merge pull request #20 from daler91/jules/code-health-fix-sba-xml-imp…
daler91 Mar 19, 2026
afe73a3
Merge branch 'master' into code-health-remove-unused-import-155642829…
daler91 Mar 19, 2026
844a146
Merge pull request #23 from daler91/code-health-fix-unused-imports-94…
daler91 Mar 19, 2026
d5bbb1c
Merge pull request #21 from daler91/fix/remove-unused-datetime-import…
daler91 Mar 19, 2026
d38b9ac
Merge branch 'master' into fix/remove-unused-import-clean_percentage-…
daler91 Mar 19, 2026
7d1e18a
Merge pull request #22 from daler91/code-health-remove-unused-import-…
daler91 Mar 19, 2026
48cb360
Merge pull request #15 from daler91/fix/remove-unused-import-clean_pe…
daler91 Mar 19, 2026
979356a
🧹 [code health improvement] Remove unused import validate_against_xsd
google-labs-jules[bot] Mar 19, 2026
bc59ea3
Merge pull request #26 from daler91/jules-code-health-fix-84916377361…
daler91 Mar 19, 2026
4b0f58a
Refactor main in fix-sba-xml.py
google-labs-jules[bot] Mar 19, 2026
27b0449
Merge pull request #27 from daler91/fix/refactor-main-complexity-1089…
daler91 Mar 19, 2026
be5d22d
🧹 [code health improvement] Refactor build_training_counselor_record_…
google-labs-jules[bot] Mar 19, 2026
0a40f6a
Merge pull request #28 from daler91/chore/refactor-training-counselor…
daler91 Mar 19, 2026
7d82242
SBA provided XSD and sample XMLs
daler91 Mar 19, 2026
6e9dd79
Fix element ordering and generation to strictly match SBA XML schemas
google-labs-jules[bot] Mar 19, 2026
7b54057
Merge pull request #29 from daler91/jules-fix-sba-xml-generation-1352…
daler91 Mar 19, 2026
0206d14
🧹 Refactor `generate_html_report` to reduce complexity
google-labs-jules[bot] Mar 19, 2026
c4df578
Merge pull request #30 from daler91/code-health-refactor-validation-r…
daler91 Mar 19, 2026
8dd29bf
🧹 [code health improvement] Refactor main function in xml-validator.py
google-labs-jules[bot] Mar 19, 2026
db96fbc
Merge pull request #31 from daler91/code-health/refactor-main-xml-val…
daler91 Mar 19, 2026
2158536
🧹 [Code Health] Refactor build_client_intake_section
google-labs-jules[bot] Mar 19, 2026
d6fb8d8
Merge pull request #32 from daler91/refactor-client-intake-9560018499…
daler91 Mar 19, 2026
0d3b91b
🔒 [security fix] Fix XXE vulnerabilities in XML validator
google-labs-jules[bot] Mar 19, 2026
de52845
Merge pull request #33 from daler91/jules-fix-xxe-dependency-25001621…
daler91 Mar 19, 2026
efe3bf7
🧹 [code health improvement] Standardize import logic for logging_util
google-labs-jules[bot] Mar 19, 2026
854e438
Merge pull request #34 from daler91/jules-16856079994023275020-9cc04398
daler91 Mar 19, 2026
5b98a06
Fix counter reset bug in set_current_record_id()
claude Mar 19, 2026
6971fe7
Fix HTML report rendering literal template text instead of values
claude Mar 19, 2026
5ecf8a3
Merge pull request #35 from daler91/claude/fix-counter-reset-bug-jw2O3
daler91 Mar 19, 2026
f3fb14e
Fix count_matches() using cell value instead of column name
claude Mar 19, 2026
0a164f4
Remove escape_xml() calls to fix double-escaping with ElementTree
claude Mar 19, 2026
38edebf
Fix broken bare imports in training_client_xml.py
claude Mar 19, 2026
135ed85
Return default "0" from clean_percentage() instead of raising ValueError
claude Mar 19, 2026
3a0994e
Merge pull request #36 from daler91/claude/fix-counter-reset-bug-jw2O3
daler91 Mar 19, 2026
190301a
Rename hyphenated Python files to use underscores for valid module names
claude Mar 19, 2026
3a53313
Move module docstring before imports in training_converter.py
claude Mar 19, 2026
2711047
Remove unused global ValidationTracker instance from validation_repor…
claude Mar 19, 2026
35e2927
Move validate_counseling_date() from data_cleaning to data_validation
claude Mar 19, 2026
30d8e92
Merge pull request #37 from daler91/claude/fix-python-module-names-JK0V1
daler91 Mar 19, 2026
6edb429
Add files via upload
daler91 Mar 19, 2026
c1f8cb4
Fix counseling XML output to validate against XSD schema
claude Mar 19, 2026
eee8269
Add interactive run.py for non-technical users
claude Mar 19, 2026
3bb2c35
Merge pull request #38 from daler91/claude/verify-csv-xml-conversion-…
daler91 Mar 19, 2026
0c0da2f
Add setup.bat, run.bat, and update README with Quick Start
claude Mar 19, 2026
34e1ec7
Merge pull request #39 from daler91/claude/verify-csv-xml-conversion-…
daler91 Mar 19, 2026
ea6fa07
Delete report1773953890460.csv
daler91 Mar 19, 2026
fb068ae
🧪 [testing improvement] Add tests for process_directory in xml_validator
google-labs-jules[bot] Mar 20, 2026
3e024b8
Add tests for fix_sba_xml utility.
google-labs-jules[bot] Mar 20, 2026
87c0735
🧪 [testing improvement] Add unit tests for main module
google-labs-jules[bot] Mar 20, 2026
ed31a49
Merge pull request #40 from daler91/feature/testing-improvement-proce…
daler91 Mar 20, 2026
ab7f3ea
Merge pull request #41 from daler91/fix-sba-xml-tests-114679549953397…
daler91 Mar 20, 2026
37f3299
Merge pull request #42 from daler91/test-main-coverage-improvement-11…
daler91 Mar 20, 2026
eb3f7be
🧪 [add test for validation_report.py]
google-labs-jules[bot] Mar 20, 2026
df01c4f
Merge pull request #43 from daler91/test-generate-html-report-9310266…
daler91 Mar 20, 2026
247408d
Add SBA end-system validation rules to counseling converter
claude Mar 23, 2026
0ff891c
Fix ReportableImpact validation to auto-correct VerifiedToBeInBusines…
claude Mar 23, 2026
80529b6
Merge pull request #44 from daler91/claude/fix-part3-validation-W9Ber
daler91 Mar 23, 2026
d3a3566
🧪 [testing improvement] Add tests for clean_phone_number in data_clea…
google-labs-jules[bot] Mar 25, 2026
9870044
🧪 Add testing improvement for fix_client_intake_element_order
google-labs-jules[bot] Mar 25, 2026
81d3223
Merge pull request #45 from daler91/jules-649247083745066190-2f0c23e2
daler91 Mar 25, 2026
efaed02
Merge pull request #48 from daler91/test-xml-validator-fix-element-or…
daler91 Mar 25, 2026
047f44a
Add Next.js + FastAPI web app for Railway deployment
claude Mar 30, 2026
a58b6bf
Fix CodeQL security findings: path traversal and info exposure
claude Mar 30, 2026
1162656
Fix remaining CodeQL findings: tainted paths and info exposure
claude Mar 30, 2026
0c849c0
Add realpath containment check in safe_output_path
claude Mar 30, 2026
4c51b90
Eliminate user-provided file paths from worker API
claude Mar 30, 2026
69fbf77
Add realpath containment check to get_output_path, return dict from v…
claude Mar 30, 2026
ca316d5
Inline realpath+startswith guards at every file operation site
claude Mar 30, 2026
ce6c538
Add railway.toml configs for multi-service deployment
claude Mar 30, 2026
4afa214
Fix web Dockerfile: use npm install and auto-run prisma db push
claude Mar 30, 2026
21e6b48
Fix web Dockerfile paths for repo-root build context
claude Mar 30, 2026
754b543
Skip postinstall during deps stage to avoid prisma generate failure
claude Mar 30, 2026
f65670f
Add empty public/ directory for Next.js Docker build
claude Mar 30, 2026
e8d8267
Fix prisma crash loop: use bundled prisma v6 CLI, not npx
claude Mar 31, 2026
cfccc58
Fix prisma db push: copy full node_modules for CLI dependencies
claude Mar 31, 2026
fe08c17
Fix DB migration and NextAuth UntrustedHost errors
claude Mar 31, 2026
2e41256
Fix migration: run each SQL statement separately
claude Mar 31, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 21 additions & 8 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,8 +1,21 @@
venv/
__pycache__/
*.pyc
logs/
reports/
*.log
*.csv
*.xml
venv/
__pycache__/
*.pyc
logs/
reports/
*.log
*.csv

# Keep XSD files in schemas/ but ignore sample XMLs
*.xml
!schemas/*.xsd

# Next.js
apps/web/.next/
apps/web/node_modules/
apps/web/.env.local

# Data
/data/
uploads/
instance/
33 changes: 26 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,24 @@
# SBA Counseling and Training Data Conversion Tool

This utility is designed to process, clean, validate, and convert SBA (Small Business Administration) counseling and training data from CSV format into compliant XML files. It ensures the final XML adheres to the strict sequence and data requirements of the SBA NEXUS schemas for **Form 641 (Counseling)** and **Management Training Reports**.
Converts SBA counseling and training CSV data into XSD-compliant XML files.

The tool includes robust data cleaning, validation reporting, and a fixer utility for pre-existing XML files.
-----

## Quick Start (3 steps)

1. **Download** — On the GitHub page, click the green **Code** button → **Download ZIP**. Unzip the folder anywhere on your computer.

2. **Setup** (one time only) — Requires [Python](https://www.python.org/downloads/) (check **"Add Python to PATH"** during install).
- **Windows:** Double-click `setup.bat`
- **Mac/Linux:** Open a terminal in the folder and run: `pip install -r requirements.txt`

3. **Run** — Put your CSV file in the folder, then:
- **Windows:** Double-click `run.bat`
- **Mac/Linux:** Open a terminal in the folder and run: `python run.py`

The tool will walk you through selecting your CSV file, conversion type, and optional XSD validation — no typing commands needed.

Your output XML and validation reports will be saved in the `output/` and `reports/` folders.

-----

Expand All @@ -24,14 +40,17 @@ The tool includes robust data cleaning, validation reporting, and a fixer utilit
* **Validation & Reporting**:
* During conversion, it generates comprehensive validation reports in both CSV and HTML formats, detailing any issues found in the source data.
* **XML Fixer Utility**:
* Includes a standalone script (`fix-sba-xml.py`) to correct element ordering issues in existing XML files that do not conform to the schema.
* Includes a standalone script (`fix_sba_xml.py`) to correct element ordering issues in existing XML files that do not conform to the schema.

-----

## Project Structure

```
.
├── run.py # Interactive launcher (start here!)
├── run.bat # Windows double-click shortcut
├── setup.bat # Windows one-time setup
├── src/
│ ├── converters/
│ │ ├── base_converter.py # Base class for all converters
Expand All @@ -44,8 +63,8 @@ The tool includes robust data cleaning, validation reporting, and a fixer utilit
│ ├── config.py # Central configuration for field mappings, defaults, and validation rules
│ ├── validation_report.py # Module for tracking and reporting validation issues
│ ├── logging_util.py # Configures application-wide logging
│ ├── fix-sba-xml.py # Utility to fix element order in existing SBA XML files
│ └── xml-validator.py # Utility to validate XML files against an XSD
│ ├── fix_sba_xml.py # Utility to fix element order in existing SBA XML files
│ └── xml_validator.py # Utility to validate XML files against an XSD
├── tests/
│ ├── test_counseling_converter.py
│ ├── test_data_cleaning.py
Expand Down Expand Up @@ -85,10 +104,10 @@ The primary entry point for the conversion is `src/main.py`.

### Fixing an Existing XML File

If you have an XML file that fails validation due to incorrect element order, use the `fix-sba-xml.py` script:
If you have an XML file that fails validation due to incorrect element order, use the `fix_sba_xml.py` script:

```bash
python -m src.fix-sba-xml --file /path/to/your/invalid.xml --output /path/to/output/fixed.xml
python -m src.fix_sba_xml --file /path/to/your/invalid.xml --output /path/to/output/fixed.xml
```

This will re-order the elements to match the schema requirements.
Expand Down
180 changes: 180 additions & 0 deletions Sample641CouselingRecord-2-14.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,180 @@
<?xml version="1.0" encoding="UTF-8"?>
<CounselingInformation>


<CounselingRecord>
<Operation></Operation>
<PartnerClientNumber>234347</PartnerClientNumber>
<Location>
<LocationCode>786</LocationCode>
</Location>
<ClientRequest>
<ClientNamePart1>
<Last>Hanks</Last>
<First>Jerry</First>
<Middle></Middle>
</ClientNamePart1>
<Email>jomh@gmail.com</Email>
<PhonePart1><Primary>2365894123</Primary><Secondary></Secondary></PhonePart1>
<AddressPart1>
<Street1></Street1>
<Street2></Street2>
<City>Austin</City>
<State>Alabama</State>
<ZipCode>33189</ZipCode>
<Zip4Code>2344</Zip4Code>
<Country><Code>United States</Code></Country>
<PostalCode></PostalCode>
<StateOrProvince></StateOrProvince>
</AddressPart1>

<SurveyAgreement>Yes</SurveyAgreement>

<ClientSignature>
<Date>1987-12-12</Date>
<OnFile>Yes</OnFile>
</ClientSignature>
</ClientRequest>
<ClientIntake>
<Race><Code>White</Code><Code>Asian</Code><SelfDescribedRace></SelfDescribedRace></Race>
<Ethnicity>Non Hispanic or Latino</Ethnicity>
<Sex>Female</Sex>
<Disability>No</Disability>
<MilitaryStatus>Active Duty</MilitaryStatus>
<BranchOfService>Prefer not to say</BranchOfService>
<Media>
<Code>Magazine/Newspaper</Code>

<Code>Other</Code>
<Other>testmedia</Other>
</Media>
<Internet></Internet>
<CurrentlyInBusiness>Yes</CurrentlyInBusiness>
<CurrentlyExporting>Yes</CurrentlyExporting>
<CompanyName>ABC company</CompanyName>
<BusinessType>Real Estate and Rental and Leasing</BusinessType>
<BusinessOwnership>
<Female>100</Female>
</BusinessOwnership>
<ConductingBusinessOnline>No</ConductingBusinessOnline>

<ClientIntake_Certified8a>No</ClientIntake_Certified8a>
<Employee_Owned>Yes</Employee_Owned>
<TotalNumberOfEmployees>14</TotalNumberOfEmployees>
<NumberOfEmployeesInExportingBusiness>0</NumberOfEmployeesInExportingBusiness>
<ClientAnnualIncomePart2>
<GrossRevenues>0.00</GrossRevenues>
<ProfitLoss>0.00</ProfitLoss>
<ExportGrossRevenuesOrSales>5660.00</ExportGrossRevenuesOrSales>
</ClientAnnualIncomePart2>
<LegalEntity>
<Code>Other</Code>
<Other>Other Counseling</Other>
</LegalEntity>
<Rural_vs_Urban>Urban</Rural_vs_Urban>
<FIPS_Code>54346</FIPS_Code>

<CounselingSeeking>
<Code>Business Plan</Code>
<Other></Other>
</CounselingSeeking>
<ExportCountries><Code>Belgium</Code><Other></Other></ExportCountries>

</ClientIntake>
<CounselorRecord>
<PartnerSessionNumber>371786_T50267</PartnerSessionNumber>

<FundingSource>Resiliency and Recovery Demonstration Grant – CARESRRD</FundingSource>

<ClientNamePart3>
<Last>hanks</Last>
<First>tom</First>
<Middle></Middle>
</ClientNamePart3>
<Email>tomh@gmail.com</Email>
<PhonePart3><Primary>2365894123</Primary><Secondary></Secondary></PhonePart3>
<AddressPart3>
<Street1></Street1>
<Street2></Street2>
<City>Alpharetta</City>
<State>Alabama</State>
<ZipCode>95928</ZipCode>
<Zip4Code>2344</Zip4Code>
<Country><Code>United States</Code></Country>
<PostalCode></PostalCode>
<StateOrProvince></StateOrProvince>
</AddressPart3>
<VerifiedToBeInBusiness>Yes</VerifiedToBeInBusiness>
<ReportableImpact>No</ReportableImpact>
<DateOfReportableImpact></DateOfReportableImpact>
<CurrentlyExporting>No</CurrentlyExporting>
<BusinessStartDatePart3>2021-12-31</BusinessStartDatePart3>
<TotalNumberOfEmployees>18</TotalNumberOfEmployees>
<NumberOfEmployeesInExportingBusiness></NumberOfEmployeesInExportingBusiness>
<ClientAnnualIncomePart3>
<GrossRevenues>0.00</GrossRevenues>
<ProfitLoss>0.00</ProfitLoss>
<ExportGrossRevenuesOrSales>788.00</ExportGrossRevenuesOrSales>
<GrowthIndicator>Yes</GrowthIndicator>
</ClientAnnualIncomePart3>
<ResourcePartnerServiceContributed>
<SBALoanAmount>10</SBALoanAmount>
<NonSBALoanAmount>10
</NonSBALoanAmount>
<EquityCapitalReceived>10
</EquityCapitalReceived>
<SBALoanAmountTxnNmb>80
</SBALoanAmountTxnNmb>
<NonSBALoanAmountTxnNmb>80
</NonSBALoanAmountTxnNmb>
<EquityCapitalReceivedTxnNmb>80
</EquityCapitalReceivedTxnNmb>
<NumberOfContractsReceived>80
</NumberOfContractsReceived>

</ResourcePartnerServiceContributed>
<Certifications>
<Code>Service-Disabled Veteran-Owned Small Business</Code>
<Other></Other>
</Certifications>
<SBAFinancialAssistance>
<Code>Community Advantage</Code>
<Code>Other(SBIR, SBIC, 7(a) 504, etc)</Code>
<Other>Other SBA Disaster Loan for COVID-19</Other>
</SBAFinancialAssistance>
<CounselingProvided>
<Code>Tax Planning</Code>
<Other></Other>
</CounselingProvided>
<ReferredClient>
<Code>SBA Office of International Trade (OIT)</Code>
<Other></Other>
</ReferredClient>
<SessionType>Online</SessionType>
<Language>
<Code>English</Code>
<Other></Other>
</Language>
<DateCounseled>2024-01-01</DateCounseled>
<CounselorName>Paul Bozzo (FC)</CounselorName>
<CounselingHours>
<Contact>7</Contact>
<Prepare>6</Prepare>
<Travel>6</Travel>
</CounselingHours>
<CounselorNotes>Test</CounselorNotes>
<ExportCountries>
<Code>United States</Code>

<Other></Other>
</ExportCountries>
<TrainingSession>
<DateTrainingStarted>2024-09-22</DateTrainingStarted>
<PartnerTrainingNumber>PartnerTrainingNum</PartnerTrainingNumber>
<EmployeesTrained>2</EmployeesTrained>
<HoursTrained>3</HoursTrained>
</TrainingSession>
</CounselorRecord>
</CounselingRecord>

</CounselingInformation>
61 changes: 61 additions & 0 deletions Sample_Training_888-2-26-2025.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
<?xml version="1.0" encoding="UTF-8"?>
<ManagementTrainingReport xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ManagementTrainingRecord>
<PartnerTrainingNumber>93747</PartnerTrainingNumber>
<Location><LocationCode>250009</LocationCode></Location>
<FundingSource>Severe Winter Storm and Flooding (NV) – 1738</FundingSource>
<DateTrainingStarted>2023-12-12</DateTrainingStarted>
<NumberOfSessions>6</NumberOfSessions>
<TotalTrainingHours>0.1</TotalTrainingHours>
<TrainingTitle>International Sales for Small Business - Webinar</TrainingTitle>
<TrainingLocation><City>Aurora</City><State>Alabama</State><ZipCode>07501</ZipCode><Country><Code>United States</Code></Country><PostalCode></PostalCode><StateOrProvince></StateOrProvince></TrainingLocation>
<TrainingLocation><ZipCode>07501</ZipCode></TrainingLocation>
<NumberTrained>
<Total>2</Total>
<CurrentlyInBusiness>3</CurrentlyInBusiness>
<NotYetInBusiness>3</NotYetInBusiness>
<PersonWithDisabilities>5</PersonWithDisabilities>
<Female>3</Female>
<Male>4</Male>
<ActiveDuty>0</ActiveDuty>
<Veterans>0</Veterans>
<ServiceDisabledVeterans>0</ServiceDisabledVeterans>
<MemberOfReserveOrNationalGuard>0</MemberOfReserveOrNationalGuard>
<SpouseOfMilitaryMember>20</SpouseOfMilitaryMember>
<Race>
<Asian>3</Asian>
<BlackOrAfricanAmerican>3</BlackOrAfricanAmerican>
<NativeAmericanOrAlaskaNative>6</NativeAmericanOrAlaskaNative>
<NativeHawaiianOrPacificIslander>7</NativeHawaiianOrPacificIslander>
<White>5</White>
<MiddleEastern>20</MiddleEastern>
<NorthAfrican>30</NorthAfrican>
</Race>
<Ethnicity>
<HispanicOrLatinoOrigin>10</HispanicOrLatinoOrigin>
<NonHispanicOrLatinoOrigin>6</NonHispanicOrLatinoOrigin>
</Ethnicity>
</NumberTrained>
<NumberMinoritiesTrained>
<Total>6</Total>
</NumberMinoritiesTrained>
<TrainingTopic>
<Code>Technology</Code>
</TrainingTopic>
<TrainingPartners>
<Code>SBA</Code>
<Code>Other Government Agency</Code>
<Code>Educational Institution</Code>
<Code>Other</Code>
<OtherSBA>Denver SBA office</OtherSBA>
<OtherAgency>new agency1 </OtherAgency>
<Other>other partners</Other>
</TrainingPartners>
<ProgramFormat>Seminar</ProgramFormat>
<ProgramFormatType>In-person</ProgramFormatType>
<DollarAmountOfFees>100</DollarAmountOfFees>
<Language><Code>English</Code><Code>Spanish</Code></Language>
<SponsorName>test</SponsorName>
<CosponsorsName>test</CosponsorsName>
</ManagementTrainingRecord>
</ManagementTrainingReport>
24 changes: 24 additions & 0 deletions apps/web/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
FROM node:20-alpine AS deps
WORKDIR /app
COPY apps/web/package*.json ./
RUN npm install --ignore-scripts

FROM node:20-alpine AS builder
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY apps/web/ .
ENV DATABASE_URL="postgresql://placeholder:placeholder@placeholder:5432/placeholder"
RUN npx prisma generate
RUN npm run build

FROM node:20-alpine
WORKDIR /app
ENV NODE_ENV=production
COPY --from=builder /app/public ./public
COPY --from=builder /app/.next/standalone ./
COPY --from=builder /app/.next/static ./.next/static
COPY --from=builder /app/node_modules/.prisma ./node_modules/.prisma
COPY --from=builder /app/node_modules/@prisma/client ./node_modules/@prisma/client
COPY --from=builder /app/scripts ./scripts
EXPOSE 3000
CMD ["sh", "-c", "node scripts/migrate.js; node server.js"]
12 changes: 12 additions & 0 deletions apps/web/middleware.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
export { auth as middleware } from "@/lib/auth";

export const config = {
matcher: [
"/dashboard/:path*",
"/convert/:path*",
"/audit/:path*",
"/api/upload/:path*",
"/api/jobs/:path*",
"/api/audit/:path*",
],
};
6 changes: 6 additions & 0 deletions apps/web/next-env.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
/// <reference types="next" />
/// <reference types="next/image-types/global" />
import "./.next/types/routes.d.ts";

// NOTE: This file should not be edited
// see https://nextjs.org/docs/app/api-reference/config/typescript for more information.
7 changes: 7 additions & 0 deletions apps/web/next.config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import type { NextConfig } from "next";

const nextConfig: NextConfig = {
output: "standalone",
};

export default nextConfig;
Loading