Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
69 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
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
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
4,739 changes: 4,739 additions & 0 deletions SBA_NEXUS_Counseling-2-14.xsd

Large diffs are not rendered by default.

2,269 changes: 2,269 additions & 0 deletions SBA_NEXUS_Training-2-25-2025.xsd

Large diffs are not rendered by default.

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>
64 changes: 64 additions & 0 deletions patch_tests.diff
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
--- tests/test_data_cleaning.py
+++ tests/test_data_cleaning.py
@@ -6,7 +6,7 @@
# Add the project root to the Python path
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))

-from src.data_cleaning import format_date, standardize_state_name, map_value
+from src.data_cleaning import format_date, standardize_state_name, map_value, clean_percentage

class TestFormatDate(unittest.TestCase):

@@ -165,34 +165,29 @@
with self.subTest(value=value):
self.assertEqual(standardize_country_code(value), expected)

-if __name__ == '__main__':
- unittest.main()
-
class TestCleanPercentage(unittest.TestCase):
def test_clean_percentage_valid_strings(self):
- from src.data_cleaning import clean_percentage
self.assertEqual(clean_percentage("50"), "50")
self.assertEqual(clean_percentage("50%"), "50")
self.assertEqual(clean_percentage("0.5"), "0.5")
self.assertEqual(clean_percentage(" 0.5% "), "0.5")
self.assertEqual(clean_percentage("100"), "100")
self.assertEqual(clean_percentage("100%"), "100")

def test_clean_percentage_valid_numbers(self):
- from src.data_cleaning import clean_percentage
self.assertEqual(clean_percentage(50), "50")
self.assertEqual(clean_percentage(0.5), "0.5")
self.assertEqual(clean_percentage(100), "100")
self.assertEqual(clean_percentage(100.0), "100")
self.assertEqual(clean_percentage(0), "0")

def test_clean_percentage_empty_and_none(self):
- from src.data_cleaning import clean_percentage
self.assertEqual(clean_percentage(""), "0")
self.assertEqual(clean_percentage(None), "0")
self.assertEqual(clean_percentage(" "), "0")
self.assertEqual(clean_percentage("nan"), "0")
self.assertEqual(clean_percentage("NaN"), "0")

def test_clean_percentage_out_of_bounds(self):
- from src.data_cleaning import clean_percentage
self.assertEqual(clean_percentage("-10"), "0")
self.assertEqual(clean_percentage("-10%"), "0")
self.assertEqual(clean_percentage("-0.5"), "0")
self.assertEqual(clean_percentage("150"), "100")
self.assertEqual(clean_percentage("150%"), "100")
self.assertEqual(clean_percentage(150), "100")

def test_clean_percentage_invalid_strings(self):
- from src.data_cleaning import clean_percentage
with self.assertRaises(ValueError):
clean_percentage("abc")
with self.assertRaises(ValueError):
clean_percentage("50 percent")
with self.assertRaises(ValueError):
clean_percentage("10.5.5")
+
+if __name__ == '__main__':
+ unittest.main()
3 changes: 3 additions & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1 +1,4 @@
pandas
pytest
defusedxml
lxml
Loading