waccy 0.0a1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- waccy-0.0a1/.gitignore +129 -0
- waccy-0.0a1/CODE_OF_CONDUCT.md +93 -0
- waccy-0.0a1/LICENSE +21 -0
- waccy-0.0a1/PKG-INFO +442 -0
- waccy-0.0a1/README.md +414 -0
- waccy-0.0a1/docs/0-MISSION.md +360 -0
- waccy-0.0a1/docs/1-ARCHITECTURE.md +684 -0
- waccy-0.0a1/docs/2-EXPERIENCE.md +1 -0
- waccy-0.0a1/docs/skills_models.md +106 -0
- waccy-0.0a1/main.py +6 -0
- waccy-0.0a1/pyproject.toml +108 -0
- waccy-0.0a1/scripts/publish.py +187 -0
- waccy-0.0a1/src/waccy/__init__.py +34 -0
- waccy-0.0a1/src/waccy/classification/__init__.py +12 -0
- waccy-0.0a1/src/waccy/classification/confidence.py +24 -0
- waccy-0.0a1/src/waccy/classification/engine.py +33 -0
- waccy-0.0a1/src/waccy/classification/patterns.py +22 -0
- waccy-0.0a1/src/waccy/cli.py +28 -0
- waccy-0.0a1/src/waccy/core/__init__.py +15 -0
- waccy-0.0a1/src/waccy/core/models.py +37 -0
- waccy-0.0a1/src/waccy/core/ontology.py +63 -0
- waccy-0.0a1/src/waccy/core/validation.py +15 -0
- waccy-0.0a1/src/waccy/extraction/__init__.py +14 -0
- waccy-0.0a1/src/waccy/extraction/base.py +46 -0
- waccy-0.0a1/src/waccy/extraction/mapper.py +23 -0
- waccy-0.0a1/src/waccy/extraction/registry.py +55 -0
- waccy-0.0a1/src/waccy/modeling/__init__.py +12 -0
- waccy-0.0a1/src/waccy/modeling/builder.py +48 -0
- waccy-0.0a1/src/waccy/modeling/exporters.py +22 -0
- waccy-0.0a1/src/waccy/modeling/templates.py +28 -0
- waccy-0.0a1/src/waccy/utils/__init__.py +14 -0
- waccy-0.0a1/src/waccy/utils/dates.py +28 -0
- waccy-0.0a1/src/waccy/utils/formatting.py +16 -0
- waccy-0.0a1/src/waccy/utils/validation.py +14 -0
- waccy-0.0a1/tests/__init__.py +2 -0
- waccy-0.0a1/tests/fixtures/__init__.py +2 -0
- waccy-0.0a1/tests/fixtures/sample_data.py +29 -0
- waccy-0.0a1/tests/integration/__init__.py +2 -0
- waccy-0.0a1/tests/unit/__init__.py +2 -0
- waccy-0.0a1/tests/unit/test_extraction.py +17 -0
- waccy-0.0a1/tests/unit/test_ontology.py +32 -0
- waccy-0.0a1/uv.lock +573 -0
- waccy-0.0a1/waccy-logo-NoBG.png +0 -0
- waccy-0.0a1/waccy-logo.png +0 -0
waccy-0.0a1/.gitignore
ADDED
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
# Byte-compiled / optimized / DLL files
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
|
|
6
|
+
# C extensions
|
|
7
|
+
*.so
|
|
8
|
+
|
|
9
|
+
# Distribution / packaging
|
|
10
|
+
.Python
|
|
11
|
+
build/
|
|
12
|
+
develop-eggs/
|
|
13
|
+
dist/
|
|
14
|
+
downloads/
|
|
15
|
+
eggs/
|
|
16
|
+
.eggs/
|
|
17
|
+
lib/
|
|
18
|
+
lib64/
|
|
19
|
+
parts/
|
|
20
|
+
sdist/
|
|
21
|
+
var/
|
|
22
|
+
wheels/
|
|
23
|
+
pip-wheel-metadata/
|
|
24
|
+
share/python-wheels/
|
|
25
|
+
*.egg-info/
|
|
26
|
+
.installed.cfg
|
|
27
|
+
*.egg
|
|
28
|
+
MANIFEST
|
|
29
|
+
|
|
30
|
+
# PyInstaller
|
|
31
|
+
# Usually these files are written by a python script from a template
|
|
32
|
+
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
|
33
|
+
*.manifest
|
|
34
|
+
*.spec
|
|
35
|
+
|
|
36
|
+
# Installer logs
|
|
37
|
+
pip-log.txt
|
|
38
|
+
pip-delete-this-directory.txt
|
|
39
|
+
|
|
40
|
+
# Unit test / coverage reports
|
|
41
|
+
htmlcov/
|
|
42
|
+
.tox/
|
|
43
|
+
.nox/
|
|
44
|
+
.coverage
|
|
45
|
+
.coverage.*
|
|
46
|
+
.cache
|
|
47
|
+
nosetests.xml
|
|
48
|
+
coverage.xml
|
|
49
|
+
*.cover
|
|
50
|
+
*.py,cover
|
|
51
|
+
.hypothesis/
|
|
52
|
+
.pytest_cache/
|
|
53
|
+
|
|
54
|
+
# Translations
|
|
55
|
+
*.mo
|
|
56
|
+
*.pot
|
|
57
|
+
|
|
58
|
+
# Django stuff:
|
|
59
|
+
*.log
|
|
60
|
+
local_settings.py
|
|
61
|
+
db.sqlite3
|
|
62
|
+
db.sqlite3-journal
|
|
63
|
+
|
|
64
|
+
# Flask stuff:
|
|
65
|
+
instance/
|
|
66
|
+
.webassets-cache
|
|
67
|
+
|
|
68
|
+
# Scrapy stuff:
|
|
69
|
+
.scrapy
|
|
70
|
+
|
|
71
|
+
# Sphinx documentation
|
|
72
|
+
docs/_build/
|
|
73
|
+
|
|
74
|
+
# PyBuilder
|
|
75
|
+
target/
|
|
76
|
+
|
|
77
|
+
# Jupyter Notebook
|
|
78
|
+
.ipynb_checkpoints
|
|
79
|
+
|
|
80
|
+
# IPython
|
|
81
|
+
profile_default/
|
|
82
|
+
ipython_config.py
|
|
83
|
+
|
|
84
|
+
# pyenv
|
|
85
|
+
.python-version
|
|
86
|
+
|
|
87
|
+
# pipenv
|
|
88
|
+
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
|
89
|
+
# However, in case of collaboration, if having platform-specific dependencies or dependencies
|
|
90
|
+
# having no cross-platform support, pipenv may install dependencies that don't work, or not
|
|
91
|
+
# install all needed dependencies.
|
|
92
|
+
#Pipfile.lock
|
|
93
|
+
|
|
94
|
+
# PEP 582; used by e.g. github.com/David-OConnor/pyflow
|
|
95
|
+
__pypackages__/
|
|
96
|
+
|
|
97
|
+
# Celery stuff
|
|
98
|
+
celerybeat-schedule
|
|
99
|
+
celerybeat.pid
|
|
100
|
+
|
|
101
|
+
# SageMath parsed files
|
|
102
|
+
*.sage.py
|
|
103
|
+
|
|
104
|
+
# Environments
|
|
105
|
+
.env
|
|
106
|
+
.venv
|
|
107
|
+
env/
|
|
108
|
+
venv/
|
|
109
|
+
ENV/
|
|
110
|
+
env.bak/
|
|
111
|
+
venv.bak/
|
|
112
|
+
|
|
113
|
+
# Spyder project settings
|
|
114
|
+
.spyderproject
|
|
115
|
+
.spyproject
|
|
116
|
+
|
|
117
|
+
# Rope project settings
|
|
118
|
+
.ropeproject
|
|
119
|
+
|
|
120
|
+
# mkdocs documentation
|
|
121
|
+
/site
|
|
122
|
+
|
|
123
|
+
# mypy
|
|
124
|
+
.mypy_cache/
|
|
125
|
+
.dmypy.json
|
|
126
|
+
dmypy.json
|
|
127
|
+
|
|
128
|
+
# Pyre type checker
|
|
129
|
+
.pyre/
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
|
|
2
|
+
# WACCY Code of Conduct
|
|
3
|
+
|
|
4
|
+
Adapted from Contributor Covenant 3.0 Code of Conduct
|
|
5
|
+
|
|
6
|
+
## Our Pledge
|
|
7
|
+
|
|
8
|
+
We pledge to make our community welcoming, safe, and equitable for all.
|
|
9
|
+
|
|
10
|
+
We are committed to fostering an environment that respects and promotes the dignity, rights, and contributions of all individuals, regardless of characteristics including race, ethnicity, caste, color, age, physical characteristics, neurodiversity, disability, sex or gender, gender identity or expression, sexual orientation, language, philosophy or religion, national or social origin, socio-economic position, level of education, or other status. The same privileges of participation are extended to everyone who participates in good faith and in accordance with this Covenant.
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
## Encouraged Behaviors
|
|
14
|
+
|
|
15
|
+
While acknowledging differences in social norms, we all strive to meet our community's expectations for positive behavior. We also understand that our words and actions may be interpreted differently than we intend based on culture, background, or native language.
|
|
16
|
+
|
|
17
|
+
With these considerations in mind, we agree to behave mindfully toward each other and act in ways that center our shared values, including:
|
|
18
|
+
|
|
19
|
+
1. Respecting the **purpose of our community**, our activities, and our ways of gathering.
|
|
20
|
+
2. Engaging **kindly and honestly** with others.
|
|
21
|
+
3. Respecting **different viewpoints** and experiences.
|
|
22
|
+
4. **Taking responsibility** for our actions and contributions.
|
|
23
|
+
5. Gracefully giving and accepting **constructive feedback**.
|
|
24
|
+
6. Committing to **repairing harm** when it occurs.
|
|
25
|
+
7. Behaving in other ways that promote and sustain the **well-being of our community**.
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
## Restricted Behaviors
|
|
29
|
+
|
|
30
|
+
We agree to restrict the following behaviors in our community. Instances, threats, and promotion of these behaviors are violations of this Code of Conduct.
|
|
31
|
+
|
|
32
|
+
1. **Harassment.** Violating explicitly expressed boundaries or engaging in unnecessary personal attention after any clear request to stop.
|
|
33
|
+
2. **Character attacks.** Making insulting, demeaning, or pejorative comments directed at a community member or group of people.
|
|
34
|
+
3. **Stereotyping or discrimination.** Characterizing anyone’s personality or behavior on the basis of immutable identities or traits.
|
|
35
|
+
4. **Sexualization.** Behaving in a way that would generally be considered inappropriately intimate in the context or purpose of the community.
|
|
36
|
+
5. **Violating confidentiality**. Sharing or acting on someone's personal or private information without their permission.
|
|
37
|
+
6. **Endangerment.** Causing, encouraging, or threatening violence or other harm toward any person or group.
|
|
38
|
+
7. Behaving in other ways that **threaten the well-being** of our community.
|
|
39
|
+
|
|
40
|
+
### Other Restrictions
|
|
41
|
+
|
|
42
|
+
1. **Misleading identity.** Impersonating someone else for any reason, or pretending to be someone else to evade enforcement actions.
|
|
43
|
+
2. **Failing to credit sources.** Not properly crediting the sources of content you contribute.
|
|
44
|
+
3. **Promotional materials**. Sharing marketing or other commercial content in a way that is outside the norms of the community.
|
|
45
|
+
4. **Irresponsible communication.** Failing to responsibly present content which includes, links or describes any other restricted behaviors.
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
## Reporting an Issue
|
|
49
|
+
|
|
50
|
+
Tensions can occur between community members even when they are trying their best to collaborate. Not every conflict represents a code of conduct violation, and this Code of Conduct reinforces encouraged behaviors and norms that can help avoid conflicts and minimize harm.
|
|
51
|
+
|
|
52
|
+
When an incident does occur, it is important to report it promptly. To report a possible violation, please use the contact methods available on the project's GitHub repository.
|
|
53
|
+
|
|
54
|
+
Community Moderators take reports of violations seriously and will make every effort to respond in a timely manner. They will investigate all reports of code of conduct violations, reviewing messages, logs, and recordings, or interviewing witnesses and other participants. Community Moderators will keep investigation and enforcement actions as transparent as possible while prioritizing safety and confidentiality. In order to honor these values, enforcement actions are carried out in private with the involved parties, but communicating to the whole community may be part of a mutually agreed upon resolution.
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
## Addressing and Repairing Harm
|
|
58
|
+
|
|
59
|
+
If an investigation by the Community Moderators finds that this Code of Conduct has been violated, the following enforcement ladder may be used to determine how best to repair harm, based on the incident's impact on the individuals involved and the community as a whole. Depending on the severity of a violation, lower rungs on the ladder may be skipped.
|
|
60
|
+
|
|
61
|
+
1) Warning
|
|
62
|
+
1) Event: A violation involving a single incident or series of incidents.
|
|
63
|
+
2) Consequence: A private, written warning from the Community Moderators.
|
|
64
|
+
3) Repair: Examples of repair include a private written apology, acknowledgement of responsibility, and seeking clarification on expectations.
|
|
65
|
+
2) Temporarily Limited Activities
|
|
66
|
+
1) Event: A repeated incidence of a violation that previously resulted in a warning, or the first incidence of a more serious violation.
|
|
67
|
+
2) Consequence: A private, written warning with a time-limited cooldown period designed to underscore the seriousness of the situation and give the community members involved time to process the incident. The cooldown period may be limited to particular communication channels or interactions with particular community members.
|
|
68
|
+
3) Repair: Examples of repair may include making an apology, using the cooldown period to reflect on actions and impact, and being thoughtful about re-entering community spaces after the period is over.
|
|
69
|
+
3) Temporary Suspension
|
|
70
|
+
1) Event: A pattern of repeated violation which the Community Moderators have tried to address with warnings, or a single serious violation.
|
|
71
|
+
2) Consequence: A private written warning with conditions for return from suspension. In general, temporary suspensions give the person being suspended time to reflect upon their behavior and possible corrective actions.
|
|
72
|
+
3) Repair: Examples of repair include respecting the spirit of the suspension, meeting the specified conditions for return, and being thoughtful about how to reintegrate with the community when the suspension is lifted.
|
|
73
|
+
4) Permanent Ban
|
|
74
|
+
1) Event: A pattern of repeated code of conduct violations that other steps on the ladder have failed to resolve, or a violation so serious that the Community Moderators determine there is no way to keep the community safe with this person as a member.
|
|
75
|
+
2) Consequence: Access to all community spaces, tools, and communication channels is removed. In general, permanent bans should be rarely used, should have strong reasoning behind them, and should only be resorted to if working through other remedies has failed to change the behavior.
|
|
76
|
+
3) Repair: There is no possible repair in cases of this severity.
|
|
77
|
+
|
|
78
|
+
This enforcement ladder is intended as a guideline. It does not limit the ability of Community Managers to use their discretion and judgment, in keeping with the best interests of our community.
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
## Scope
|
|
82
|
+
|
|
83
|
+
This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public or other spaces. Examples of representing our community include using an official email address, posting via an official social media account, or acting as an appointed representative at an online or offline event.
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
## Attribution
|
|
87
|
+
|
|
88
|
+
This Code of Conduct is adapted from the Contributor Covenant, version 3.0, permanently available at [https://www.contributor-covenant.org/version/3/0/](https://www.contributor-covenant.org/version/3/0/).
|
|
89
|
+
|
|
90
|
+
Contributor Covenant is stewarded by the Organization for Ethical Source and licensed under CC BY-SA 4.0. To view a copy of this license, visit [https://creativecommons.org/licenses/by-sa/4.0/](https://creativecommons.org/licenses/by-sa/4.0/)
|
|
91
|
+
|
|
92
|
+
For answers to common questions about Contributor Covenant, see the FAQ at [https://www.contributor-covenant.org/faq](https://www.contributor-covenant.org/faq). Translations are provided at [https://www.contributor-covenant.org/translations](https://www.contributor-covenant.org/translations). Additional enforcement and community guideline resources can be found at [https://www.contributor-covenant.org/resources](https://www.contributor-covenant.org/resources). The enforcement ladder was inspired by the work of [Mozilla’s code of conduct team](https://github.com/mozilla/inclusion).
|
|
93
|
+
|
waccy-0.0a1/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 David Spencer
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
waccy-0.0a1/PKG-INFO
ADDED
|
@@ -0,0 +1,442 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: waccy
|
|
3
|
+
Version: 0.0a1
|
|
4
|
+
Summary: Intelligent financial modeling platform for small businesses
|
|
5
|
+
Project-URL: Homepage, https://github.com/DecisionNerd/waccy
|
|
6
|
+
Project-URL: Repository, https://github.com/DecisionNerd/waccy
|
|
7
|
+
Project-URL: Issues, https://github.com/DecisionNerd/waccy/issues
|
|
8
|
+
Project-URL: Documentation, https://github.com/DecisionNerd/waccy#readme
|
|
9
|
+
Author: WACCY Contributors
|
|
10
|
+
License: MIT
|
|
11
|
+
License-File: LICENSE
|
|
12
|
+
Keywords: accounting,finance,financial-modeling,valuation
|
|
13
|
+
Classifier: Development Status :: 3 - Alpha
|
|
14
|
+
Classifier: Intended Audience :: Financial and Insurance Industry
|
|
15
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
17
|
+
Classifier: Topic :: Office/Business :: Financial
|
|
18
|
+
Requires-Python: >=3.13
|
|
19
|
+
Requires-Dist: numpy>=2.3.5
|
|
20
|
+
Requires-Dist: pandera>=0.27.0
|
|
21
|
+
Requires-Dist: polars>=1.36.1
|
|
22
|
+
Requires-Dist: pydantic>=2.12.5
|
|
23
|
+
Provides-Extra: edgar
|
|
24
|
+
Requires-Dist: waccy-edgar>=0.1.0; extra == 'edgar'
|
|
25
|
+
Provides-Extra: quickbooks
|
|
26
|
+
Requires-Dist: waccy-quickbooks>=0.1.0; extra == 'quickbooks'
|
|
27
|
+
Description-Content-Type: text/markdown
|
|
28
|
+
|
|
29
|
+
# WACCY
|
|
30
|
+
|
|
31
|
+
**Intelligent Financial Modeling Platform for Small Businesses**
|
|
32
|
+
|
|
33
|
+
[](https://opensource.org/licenses/MIT)
|
|
34
|
+
[](https://www.python.org/downloads/)
|
|
35
|
+
[](https://github.com/astral-sh/ruff)
|
|
36
|
+
|
|
37
|
+
<div align="center">
|
|
38
|
+
<img src="waccy-logo-NoBG.png" alt="WACCY Logo" width="400"/>
|
|
39
|
+
</div>
|
|
40
|
+
|
|
41
|
+
WACCY is an intelligent financial modeling platform designed to automatically extract, parse, classify, and synthesize business data from diverse sources to generate sophisticated, production-grade financial models and operating analyses. **The platform's primary focus is on small businesses—from sole proprietorships to growing companies—that struggle with messy, incomplete, and poorly-maintained financial records.**
|
|
42
|
+
|
|
43
|
+
Unlike large enterprises with dedicated accounting teams, small businesses often have inconsistent record-keeping, ambiguous account classifications, incomplete data, and limited financial infrastructure. WACCY transforms this raw, often chaotic business data into comprehensive, auditable, and decision-ready financial models that adhere to institutional-quality standards.
|
|
44
|
+
|
|
45
|
+
## 🚀 Quick Start
|
|
46
|
+
|
|
47
|
+
### Installation
|
|
48
|
+
|
|
49
|
+
WACCY uses `uv`, the modern Python package manager. Install the core platform:
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
# Install uv if you haven't already
|
|
53
|
+
curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
54
|
+
|
|
55
|
+
# Install WACCY core platform
|
|
56
|
+
uv pip install waccy
|
|
57
|
+
|
|
58
|
+
# Install with core extensions (QuickBooks Online and SEC EDGAR)
|
|
59
|
+
uv pip install "waccy[quickbooks,edgar]"
|
|
60
|
+
|
|
61
|
+
# Or install individual extensions
|
|
62
|
+
uv pip install waccy-quickbooks
|
|
63
|
+
uv pip install waccy-edgar
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### Basic Usage
|
|
67
|
+
|
|
68
|
+
```python
|
|
69
|
+
from waccy.extraction import ExtractorRegistry
|
|
70
|
+
from waccy.modeling import ModelBuilder
|
|
71
|
+
|
|
72
|
+
# Discover available extractors
|
|
73
|
+
registry = ExtractorRegistry()
|
|
74
|
+
available_sources = registry.list_extractors()
|
|
75
|
+
print(f"Available data sources: {available_sources}")
|
|
76
|
+
|
|
77
|
+
# Extract data from QuickBooks Online
|
|
78
|
+
quickbooks_extractor = registry.get_extractor("quickbooks")
|
|
79
|
+
extracted_data = quickbooks_extractor().extract({
|
|
80
|
+
"company_id": "your_company_id",
|
|
81
|
+
"date_range": ("2023-01-01", "2024-12-31")
|
|
82
|
+
})
|
|
83
|
+
|
|
84
|
+
# Build a 3-statement financial model
|
|
85
|
+
builder = ModelBuilder()
|
|
86
|
+
model = builder.build_three_statement_model(
|
|
87
|
+
extracted_data=extracted_data,
|
|
88
|
+
forecast_periods=12
|
|
89
|
+
)
|
|
90
|
+
|
|
91
|
+
# Export to Google Sheets
|
|
92
|
+
builder.export_to_sheets(model, output_path="financial_model.xlsx")
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
## 📋 Core Features
|
|
96
|
+
|
|
97
|
+
### 🤖 **AI-Powered Data Extraction & Classification**
|
|
98
|
+
|
|
99
|
+
* **Intelligent Account Mapping**: LLM-enhanced classification for ambiguous account names and inconsistent categorizations
|
|
100
|
+
* **Missing Data Inference**: Patterns learned from high-quality sources (EDGAR filings) to infer missing information
|
|
101
|
+
* **Causal Chain Recognition**: Understands how financial events cascade through statements
|
|
102
|
+
* **Terminology Normalization**: Maps equivalent concepts across different naming conventions
|
|
103
|
+
* **Confidence Scoring**: Every classification includes a confidence score for quality assessment
|
|
104
|
+
|
|
105
|
+
### 🏗️ **Standardized Financial Ontology**
|
|
106
|
+
|
|
107
|
+
* **WACCY Standard Chart of Accounts**: Comprehensive, standardized classification ontology
|
|
108
|
+
* **Universal Mapping**: All data sources map to the same standard accounts for consistency
|
|
109
|
+
* **Industry Templates**: Pre-configured extensions for SaaS, manufacturing, retail, real estate, and more
|
|
110
|
+
* **Quality Quantification**: Standardized ontology enables measurement of data quality and model reliability
|
|
111
|
+
|
|
112
|
+
### 📊 **Institutional-Quality Financial Models**
|
|
113
|
+
|
|
114
|
+
* **3-Statement Integrated Models**: Income statement, balance sheet, and cash flow with full balancing
|
|
115
|
+
* **DCF Valuation Models**: Detailed free cash flow construction, terminal value analysis, WACC calculation
|
|
116
|
+
* **Trading Comparables**: Peer company analysis with multiple calculation and benchmarking
|
|
117
|
+
* **Transaction Comparables**: Precedent M&A transaction analysis
|
|
118
|
+
* **LBO Models**: Leveraged buyout analysis with returns calculation and debt schedules
|
|
119
|
+
* **M&A Models**: Accretion/dilution analysis with purchase accounting
|
|
120
|
+
* **Specialized Models**: SaaS cohort models, REIT models, project finance, cap tables, and more
|
|
121
|
+
|
|
122
|
+
### 🔌 **Modular Extension Architecture**
|
|
123
|
+
|
|
124
|
+
* **Core Platform**: Focused core with QuickBooks Online and SEC EDGAR as primary data sources
|
|
125
|
+
* **Extensible Design**: Community-developed extension packages for additional data sources
|
|
126
|
+
* **Entry Point Discovery**: Automatic discovery of extensions via Python entry points
|
|
127
|
+
* **Simple Installation**: Install only the extensions you need
|
|
128
|
+
|
|
129
|
+
### 📈 **Advanced Forecasting & Analysis**
|
|
130
|
+
|
|
131
|
+
* **Driver-Based Forecasting**: Revenue builds from price × volume, units × ARPU, cohort models
|
|
132
|
+
* **Working Capital Modeling**: DSO, DIO, DPO analysis with seasonality adjustments
|
|
133
|
+
* **Debt & Interest Modeling**: Revolver mechanics, amortization schedules, cash sweep waterfalls
|
|
134
|
+
* **Tax Modeling**: Effective tax rates, DTAs/DTLs, NOL utilization tracking
|
|
135
|
+
* **Sensitivity Analysis**: Comprehensive scenario modeling and tornado charts
|
|
136
|
+
|
|
137
|
+
### ✅ **Data Quality & Validation**
|
|
138
|
+
|
|
139
|
+
* **Pandera Validation**: Schema-based validation for extracted data
|
|
140
|
+
* **Mapping Confidence Scores**: Quantify the reliability of account mappings
|
|
141
|
+
* **Reconciliation Checks**: Cross-referencing between sources and balance checks
|
|
142
|
+
* **Audit Trails**: Every data point traceable to source with full provenance
|
|
143
|
+
|
|
144
|
+
### 📝 **Professional Model Outputs**
|
|
145
|
+
|
|
146
|
+
* **Google Sheets Export**: Production-ready spreadsheet models with proper formatting
|
|
147
|
+
* **Professional Architecture**: Modular tab structures, consistent time axis, clear sign conventions
|
|
148
|
+
* **Color Conventions**: Inputs in blue, calculations in black, outputs in green
|
|
149
|
+
* **Balance Checks**: Built-in reconciliation tables and error flags
|
|
150
|
+
* **Scenario Tooling**: Data tables for sensitivity analysis, scenario toggles, goal seek integration
|
|
151
|
+
|
|
152
|
+
## 🔄 Complete Workflow
|
|
153
|
+
|
|
154
|
+
```python
|
|
155
|
+
from waccy.extraction import ExtractorRegistry
|
|
156
|
+
from waccy.classification import ClassificationEngine
|
|
157
|
+
from waccy.modeling import ModelBuilder
|
|
158
|
+
from waccy.core.ontology import StandardChartOfAccounts
|
|
159
|
+
|
|
160
|
+
# 1. Extract data from QuickBooks Online (handles messy, incomplete records)
|
|
161
|
+
registry = ExtractorRegistry()
|
|
162
|
+
extractor = registry.get_extractor("quickbooks")()
|
|
163
|
+
credentials = {
|
|
164
|
+
"client_id": "your_client_id",
|
|
165
|
+
"client_secret": "your_client_secret",
|
|
166
|
+
"access_token": "your_access_token"
|
|
167
|
+
}
|
|
168
|
+
extractor.authenticate(credentials)
|
|
169
|
+
|
|
170
|
+
extracted_data = extractor.extract({
|
|
171
|
+
"company_id": "123456789",
|
|
172
|
+
"date_range": ("2022-01-01", "2024-12-31"),
|
|
173
|
+
"include_transactions": True
|
|
174
|
+
})
|
|
175
|
+
|
|
176
|
+
# 2. Classify and map to standard accounts (with LLM enhancement for ambiguity)
|
|
177
|
+
ontology = StandardChartOfAccounts()
|
|
178
|
+
classification_engine = ClassificationEngine()
|
|
179
|
+
|
|
180
|
+
for account in extracted_data.accounts:
|
|
181
|
+
mapped_account, confidence = classification_engine.classify_account(
|
|
182
|
+
source_account_name=account.name,
|
|
183
|
+
transaction_patterns=account.transaction_history,
|
|
184
|
+
context={"company_type": "SaaS", "industry": "Software"}
|
|
185
|
+
)
|
|
186
|
+
print(f"Mapped '{account.name}' to '{mapped_account.name}' (confidence: {confidence:.2f})")
|
|
187
|
+
|
|
188
|
+
# 3. Build 3-statement integrated model
|
|
189
|
+
builder = ModelBuilder()
|
|
190
|
+
model = builder.build_three_statement_model(
|
|
191
|
+
extracted_data=extracted_data,
|
|
192
|
+
forecast_periods=24
|
|
193
|
+
)
|
|
194
|
+
|
|
195
|
+
# 4. Generate DCF valuation
|
|
196
|
+
dcf_model = builder.build_dcf_model(
|
|
197
|
+
three_statement_model=model,
|
|
198
|
+
wacc=0.10,
|
|
199
|
+
terminal_growth_rate=0.03,
|
|
200
|
+
exit_multiple=12.0
|
|
201
|
+
)
|
|
202
|
+
|
|
203
|
+
# 5. Export to Google Sheets
|
|
204
|
+
builder.export_to_sheets(model, output_path="financial_model.xlsx")
|
|
205
|
+
builder.export_to_sheets(dcf_model, output_path="dcf_valuation.xlsx")
|
|
206
|
+
|
|
207
|
+
# 6. Generate quality report
|
|
208
|
+
quality_report = extracted_data.generate_quality_report()
|
|
209
|
+
print(f"Data completeness: {quality_report.completeness:.2%}")
|
|
210
|
+
print(f"Average mapping confidence: {quality_report.avg_confidence:.2f}")
|
|
211
|
+
print(f"Issues flagged: {len(quality_report.issues)}")
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
## 📊 Example Output
|
|
215
|
+
|
|
216
|
+
### Standardized Account Mapping
|
|
217
|
+
|
|
218
|
+
**Source Account**: `"Sales Revenue"` (QuickBooks)
|
|
219
|
+
**Mapped To**: `Revenue - Product Sales` (WACCY Standard)
|
|
220
|
+
**Confidence**: 0.95
|
|
221
|
+
**Validation**: ✅ Transaction patterns match revenue recognition
|
|
222
|
+
|
|
223
|
+
### 3-Statement Model Structure
|
|
224
|
+
|
|
225
|
+
```
|
|
226
|
+
Financial Model.xlsx
|
|
227
|
+
├── Assumptions
|
|
228
|
+
│ ├── Revenue Drivers
|
|
229
|
+
│ ├── Cost Assumptions
|
|
230
|
+
│ └── Working Capital
|
|
231
|
+
├── Income Statement
|
|
232
|
+
│ ├── Historical (3 years)
|
|
233
|
+
│ └── Forecast (2 years)
|
|
234
|
+
├── Balance Sheet
|
|
235
|
+
│ ├── Assets (Current & Non-Current)
|
|
236
|
+
│ ├── Liabilities (Current & Non-Current)
|
|
237
|
+
│ └── Equity
|
|
238
|
+
├── Cash Flow Statement
|
|
239
|
+
│ ├── Operating Activities
|
|
240
|
+
│ ├── Investing Activities
|
|
241
|
+
│ └── Financing Activities
|
|
242
|
+
├── Supporting Schedules
|
|
243
|
+
│ ├── Working Capital Detail
|
|
244
|
+
│ ├── Debt Schedule
|
|
245
|
+
│ └── Depreciation
|
|
246
|
+
└── Checks & Reconciliations
|
|
247
|
+
├── Balance Checks
|
|
248
|
+
└── Quality Metrics
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
## 🔗 Core Data Sources
|
|
252
|
+
|
|
253
|
+
### QuickBooks Online (QBO)
|
|
254
|
+
|
|
255
|
+
**Primary Data Source** - The accounting system most commonly used by small businesses.
|
|
256
|
+
|
|
257
|
+
* Direct API integration for chart of accounts, general ledger, and financial statements
|
|
258
|
+
* Intelligent handling of ambiguous, inconsistently-named accounts
|
|
259
|
+
* Transaction-level detail extraction
|
|
260
|
+
* Vendor and customer data integration
|
|
261
|
+
* Skeptical treatment of source classifications with validation
|
|
262
|
+
|
|
263
|
+
### SEC EDGAR
|
|
264
|
+
|
|
265
|
+
**Pattern Learning & Reference Data** - High-quality financial data for learning and benchmarking.
|
|
266
|
+
|
|
267
|
+
* Automated parsing of 10-K, 10-Q, 8-K filings
|
|
268
|
+
* Proxy statement and registration statement processing
|
|
269
|
+
* Pattern extraction for proper financial classification
|
|
270
|
+
* Learning causal chains from professional financial reports
|
|
271
|
+
* Application of learned patterns to small business data
|
|
272
|
+
|
|
273
|
+
### Extension Packages
|
|
274
|
+
|
|
275
|
+
Additional data sources available as modular extensions:
|
|
276
|
+
|
|
277
|
+
* `waccy-google` - Google Drive and Gmail integration
|
|
278
|
+
* `waccy-xero` - Xero accounting system
|
|
279
|
+
* `waccy-sage` - Sage accounting platform
|
|
280
|
+
* `waccy-stripe` - Payment processor data
|
|
281
|
+
* `waccy-salesforce` - CRM and sales pipeline data
|
|
282
|
+
|
|
283
|
+
## 📁 Project Structure
|
|
284
|
+
|
|
285
|
+
```
|
|
286
|
+
waccy/
|
|
287
|
+
├── src/
|
|
288
|
+
│ └── waccy/
|
|
289
|
+
│ ├── core/
|
|
290
|
+
│ │ ├── ontology.py # Standardized chart of accounts
|
|
291
|
+
│ │ ├── models.py # Core data models (Pydantic)
|
|
292
|
+
│ │ └── validation.py # Data validation (Pandera)
|
|
293
|
+
│ ├── extraction/
|
|
294
|
+
│ │ ├── base.py # Abstract base classes
|
|
295
|
+
│ │ ├── registry.py # Extension registry
|
|
296
|
+
│ │ └── mapper.py # Mapping to standard ontology
|
|
297
|
+
│ ├── classification/
|
|
298
|
+
│ │ ├── engine.py # LLM-enhanced classification
|
|
299
|
+
│ │ ├── patterns.py # Pattern matching from EDGAR
|
|
300
|
+
│ │ └── confidence.py # Confidence scoring
|
|
301
|
+
│ ├── modeling/
|
|
302
|
+
│ │ ├── builder.py # Model construction
|
|
303
|
+
│ │ ├── templates.py # Model templates
|
|
304
|
+
│ │ └── exporters.py # Google Sheets export
|
|
305
|
+
│ └── utils/
|
|
306
|
+
│ ├── dates.py
|
|
307
|
+
│ ├── formatting.py
|
|
308
|
+
│ └── validation.py
|
|
309
|
+
├── tests/
|
|
310
|
+
│ ├── unit/
|
|
311
|
+
│ ├── integration/
|
|
312
|
+
│ └── fixtures/
|
|
313
|
+
├── docs/
|
|
314
|
+
│ ├── 0-MISSION.md
|
|
315
|
+
│ ├── 1-ARCHITECTURE.md
|
|
316
|
+
│ ├── 2-EXPERIENCE.md
|
|
317
|
+
│ └── skills_models.md
|
|
318
|
+
└── pyproject.toml
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
## 🧪 Testing
|
|
322
|
+
|
|
323
|
+
```bash
|
|
324
|
+
# Install development dependencies
|
|
325
|
+
uv sync --dev
|
|
326
|
+
|
|
327
|
+
# Run all tests
|
|
328
|
+
uv run pytest
|
|
329
|
+
|
|
330
|
+
# Run with coverage
|
|
331
|
+
uv run pytest --cov=waccy --cov-report=html
|
|
332
|
+
|
|
333
|
+
# Run specific test suites
|
|
334
|
+
uv run pytest tests/unit/
|
|
335
|
+
uv run pytest tests/integration/
|
|
336
|
+
|
|
337
|
+
# Format and lint with ruff
|
|
338
|
+
uv run ruff format
|
|
339
|
+
uv run ruff check --fix
|
|
340
|
+
|
|
341
|
+
# Type checking with mypy
|
|
342
|
+
uv run mypy src/waccy
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
## 📚 Documentation
|
|
346
|
+
|
|
347
|
+
* **[Mission Statement](docs/0-MISSION.md)** - Project goals, philosophy, and roadmap
|
|
348
|
+
* **[Architecture](docs/1-ARCHITECTURE.md)** - Technical architecture and design principles
|
|
349
|
+
* **[Experience Guide](docs/2-EXPERIENCE.md)** - User experience and workflows
|
|
350
|
+
* **[Skills & Models](docs/skills_models.md)** - Financial modeling capabilities
|
|
351
|
+
|
|
352
|
+
## 🏛️ Design Principles
|
|
353
|
+
|
|
354
|
+
1. **Simplicity and Focus**: Core platform maintains a simple, focused design with essential data sources (QBO and EDGAR)
|
|
355
|
+
|
|
356
|
+
2. **Standardized Ontology First**: All financial data maps to a standardized WACCY chart of accounts, ensuring consistency and comparability
|
|
357
|
+
|
|
358
|
+
3. **Modular Extensibility**: New data sources and model types added as separate packages that conform to core interfaces
|
|
359
|
+
|
|
360
|
+
4. **Accuracy First**: Deterministic functions preferred over probabilistic models. LLMs used for parsing and classification, not financial calculations
|
|
361
|
+
|
|
362
|
+
5. **Transparency and Auditability**: Every data point traceable to source, every calculation explainable, every assumption documented
|
|
363
|
+
|
|
364
|
+
6. **Professional Standards**: Models adhere to institutional-quality standards for architecture, formatting, and presentation
|
|
365
|
+
|
|
366
|
+
7. **Quality Quantification**: Standardized ontology enables measurement and reporting of data quality and model output reliability
|
|
367
|
+
|
|
368
|
+
8. **Small Business Focus**: Designed primarily for small businesses—from sole proprietorships to growing companies—handling messy, incomplete data
|
|
369
|
+
|
|
370
|
+
## 🤝 Contributing
|
|
371
|
+
|
|
372
|
+
We welcome contributions! WACCY is built for the small business community, and we'd love your help making financial modeling more accessible.
|
|
373
|
+
|
|
374
|
+
### Getting Started
|
|
375
|
+
|
|
376
|
+
1. **Fork the repository** on GitHub
|
|
377
|
+
2. **Create a feature branch** for your contribution
|
|
378
|
+
3. **Set up development environment**:
|
|
379
|
+
```bash
|
|
380
|
+
git clone https://github.com/your-username/waccy.git
|
|
381
|
+
cd waccy
|
|
382
|
+
uv sync --dev
|
|
383
|
+
```
|
|
384
|
+
4. **Make your changes** following our coding standards:
|
|
385
|
+
- Use `ruff` for formatting and linting
|
|
386
|
+
- Add type hints with `mypy` compliance
|
|
387
|
+
- Write tests for new functionality
|
|
388
|
+
- Update documentation as needed
|
|
389
|
+
5. **Run tests and linting**:
|
|
390
|
+
```bash
|
|
391
|
+
uv run pytest
|
|
392
|
+
uv run ruff check
|
|
393
|
+
uv run mypy src/
|
|
394
|
+
```
|
|
395
|
+
6. **Submit a pull request** with a clear description of your changes
|
|
396
|
+
|
|
397
|
+
### Creating Extensions
|
|
398
|
+
|
|
399
|
+
Want to add a new data source? Create an extension package:
|
|
400
|
+
|
|
401
|
+
1. Create a new package: `waccy-yourdatasource`
|
|
402
|
+
2. Implement the `Extractor` interface from `waccy.extraction.base`
|
|
403
|
+
3. Register your extension via entry points
|
|
404
|
+
4. Follow the [Extension Development Guide](docs/1-ARCHITECTURE.md#extension-development-guide)
|
|
405
|
+
|
|
406
|
+
See our [Architecture Documentation](docs/1-ARCHITECTURE.md) for detailed extension development guidelines.
|
|
407
|
+
|
|
408
|
+
### Code of Conduct
|
|
409
|
+
|
|
410
|
+
Please read and follow our [Code of Conduct](CODE_OF_CONDUCT.md) to ensure a welcoming environment for all contributors.
|
|
411
|
+
|
|
412
|
+
## 📈 Project Status
|
|
413
|
+
|
|
414
|
+
* **Phase 1**: 📋 Planned - Core foundation and 3-statement models
|
|
415
|
+
* **Phase 2**: 📋 Planned - Public market data and pattern learning (EDGAR)
|
|
416
|
+
* **Phase 3**: 📋 Planned - Advanced valuation models (DCF, M&A, LBO)
|
|
417
|
+
* **Phase 4**: 📋 Planned - Specialized model types (SaaS, REIT, project finance)
|
|
418
|
+
* **Phase 5**: 📋 Planned - Advanced analysis and decision support
|
|
419
|
+
|
|
420
|
+
**Current Status**: Early development - Architecture and core platform design
|
|
421
|
+
**Python Version**: 3.13+
|
|
422
|
+
**Package Manager**: [uv](https://github.com/astral-sh/uv)
|
|
423
|
+
**CI/CD**: GitHub Actions (coming soon)
|
|
424
|
+
|
|
425
|
+
## 📄 License
|
|
426
|
+
|
|
427
|
+
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
|
|
428
|
+
|
|
429
|
+
## 🙏 Acknowledgments
|
|
430
|
+
|
|
431
|
+
* **Small Business Community** - Built for entrepreneurs and small business owners who need professional financial modeling
|
|
432
|
+
* **Financial Modeling Community** - Inspired by institutional-quality modeling standards
|
|
433
|
+
* **Open Source Tools**:
|
|
434
|
+
* [uv](https://github.com/astral-sh/uv) - Modern Python package manager
|
|
435
|
+
* [ruff](https://github.com/astral-sh/ruff) - Fast Python linter and formatter
|
|
436
|
+
* [Pydantic](https://github.com/pydantic/pydantic) - Data validation framework
|
|
437
|
+
* [Polars](https://github.com/pola-rs/polars) - High-performance data manipulation
|
|
438
|
+
* [Pandera](https://github.com/pandera-dev/pandera) - Statistical data validation
|
|
439
|
+
|
|
440
|
+
---
|
|
441
|
+
|
|
442
|
+
**Made with 🤪 for small businesses that deserve institutional-quality financial modeling**
|