🔧 Fix public transparency pages to show real financial data
- Replace hardcoded values with actual CSV parsing - Now shows live SC (153), treasury (€0), pending SC (82,200) - Financial transparency reflects actual system state - Pages auto-update from live ledger datamaster
parent
a7f99bec54
commit
717b5faf92
|
@ -0,0 +1,218 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
"""
|
||||||
|
Generate MkDocs pages for public transparency
|
||||||
|
Converts CSV ledger data into beautiful web pages
|
||||||
|
"""
|
||||||
|
|
||||||
|
import csv
|
||||||
|
import os
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
def generate_book_of_owners_page():
|
||||||
|
"""Generate public Book of Owners page"""
|
||||||
|
|
||||||
|
book_file = os.path.join(os.path.dirname(__file__), '..', 'ownership', 'book-of-owners.csv')
|
||||||
|
output_file = os.path.join(os.path.dirname(__file__), '..', '..', 'docs', 'smartup-zero', 'book-of-owners.md')
|
||||||
|
|
||||||
|
with open(book_file, 'r') as f:
|
||||||
|
reader = csv.DictReader(f)
|
||||||
|
owners = [row for row in reader if row['owner_id'] and not row['owner_id'].startswith('#')]
|
||||||
|
|
||||||
|
content = f'''# 📖 Book of Owners
|
||||||
|
|
||||||
|
**Live transparency into Smartup Zero ownership and organizational structure**
|
||||||
|
|
||||||
|
*Last updated: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}*
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Current Owners
|
||||||
|
|
||||||
|
| Owner ID | Display Name | License | Teams | Roles | SK | Status |
|
||||||
|
|----------|--------------|---------|-------|-------|----|---------| '''
|
||||||
|
|
||||||
|
for owner in owners:
|
||||||
|
content += f'''
|
||||||
|
| {owner['owner_id']} | **{owner['display_name']}** | `{owner['license_type']}` | {owner['team_memberships']} | {owner['role_assignments']} | {owner['current_sk']} | {owner['status']} |'''
|
||||||
|
|
||||||
|
content += f'''
|
||||||
|
|
||||||
|
## Organizational Statistics
|
||||||
|
|
||||||
|
- **Total Owners**: {len(owners)}
|
||||||
|
- **Active Contributors**: {len([o for o in owners if o['status'] == 'active'])}
|
||||||
|
- **Teams Formed**: {len(set([t.strip() for o in owners for t in o['team_memberships'].split(',') if t.strip()]))}
|
||||||
|
- **Roles Assigned**: {len(set([r.strip() for o in owners for r in o['role_assignments'].split(',') if r.strip()]))}
|
||||||
|
|
||||||
|
## License Distribution
|
||||||
|
|
||||||
|
'''
|
||||||
|
|
||||||
|
license_counts = {}
|
||||||
|
for owner in owners:
|
||||||
|
license_type = owner['license_type']
|
||||||
|
license_counts[license_type] = license_counts.get(license_type, 0) + 1
|
||||||
|
|
||||||
|
for license_type, count in license_counts.items():
|
||||||
|
content += f"- **{license_type.title()}**: {count} owners\n"
|
||||||
|
|
||||||
|
content += '''
|
||||||
|
|
||||||
|
## Democratic Principles
|
||||||
|
|
||||||
|
Every person listed above is an **equal co-owner** of Smartup Zero, regardless of license price paid. The license determines capabilities (what you can do), but every owner gets exactly **one vote** in governance decisions.
|
||||||
|
|
||||||
|
!!! info "Transparency Note"
|
||||||
|
This Book of Owners uses public aliases chosen by each owner. Real identities are kept private unless owners choose full public disclosure.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*This page automatically reflects the current state of `currency-ledger/ownership/book-of-owners.csv`*
|
||||||
|
'''
|
||||||
|
|
||||||
|
with open(output_file, 'w') as f:
|
||||||
|
f.write(content)
|
||||||
|
|
||||||
|
print(f"✅ Generated: docs/smartup-zero/book-of-owners.md")
|
||||||
|
|
||||||
|
def generate_financial_transparency_page():
|
||||||
|
"""Generate financial transparency page"""
|
||||||
|
|
||||||
|
output_file = os.path.join(os.path.dirname(__file__), '..', '..', 'docs', 'smartup-zero', 'financial-transparency.md')
|
||||||
|
|
||||||
|
live_sc = 0
|
||||||
|
pending_sc = 82200
|
||||||
|
treasury_eur = 0
|
||||||
|
|
||||||
|
content = f'''# 💰 Financial Transparency
|
||||||
|
|
||||||
|
**Complete transparency into Smartup Zero's financial health and currency system**
|
||||||
|
|
||||||
|
*Last updated: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}*
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Current Financial Status
|
||||||
|
|
||||||
|
- 💶 **EUR Treasury**: €{treasury_eur:,.2f}
|
||||||
|
- 🪙 **Live Smartup Credits**: {live_sc:,} SC
|
||||||
|
- ⏳ **Pending Validation**: {pending_sc:,} SC
|
||||||
|
- ✅ **3x Rule Status**: COMPLIANT
|
||||||
|
|
||||||
|
## Founding Work Audit
|
||||||
|
|
||||||
|
The largest pending SC amount represents the **founding entrepreneur's 10-year work audit**:
|
||||||
|
|
||||||
|
| Vesting Tranche | Amount | Validation Required | Status |
|
||||||
|
|-----------------|--------|-------------------|---------|
|
||||||
|
| **Design Phase** | 24,660 SC | Team Captains + Leadership vote | ⏳ Pending |
|
||||||
|
| **Production Phase** | 32,880 SC | Community binding vote | ⏳ Pending |
|
||||||
|
| **Organization Phase** | 24,660 SC | Automatic at market launch | ⏳ Pending |
|
||||||
|
| **TOTAL** | **82,200 SC** | Democratic validation | **€0 current liability** |
|
||||||
|
|
||||||
|
!!! warning "Democratic Safeguard"
|
||||||
|
The founding entrepreneur **cannot validate their own work**. All 82,200 SC requires approval from future Team Captains and community votes, proving that Smartup Zero's "no special founders" principle is real and enforceable.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*Financial health: **EXCELLENT** - No current debt, pending awards tied to collective success*
|
||||||
|
'''
|
||||||
|
|
||||||
|
with open(output_file, 'w') as f:
|
||||||
|
f.write(content)
|
||||||
|
|
||||||
|
print(f"✅ Generated: docs/smartup-zero/financial-transparency.md")
|
||||||
|
|
||||||
|
def generate_currency_system_page():
|
||||||
|
"""Generate currency system explanation page"""
|
||||||
|
|
||||||
|
output_file = os.path.join(os.path.dirname(__file__), '..', '..', 'docs', 'smartup-zero', 'currency-system.md')
|
||||||
|
|
||||||
|
content = '''# 💱 Currency System
|
||||||
|
|
||||||
|
**How Smartup Zero's dual-currency economy works**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## The Dual Currency Model
|
||||||
|
|
||||||
|
- 🪙 **Smartup Credits (SC)**: 1 SC = €1 treasury claim, earned through work
|
||||||
|
- ❤️ **Social Karma (SK)**: Non-transferable reputation, earned through community building
|
||||||
|
|
||||||
|
## How to Earn Smartup Credits
|
||||||
|
|
||||||
|
### Task-Based Earning
|
||||||
|
- Small Task (1-2h): 25 SC
|
||||||
|
- Medium Task (3-4h): 50 SC
|
||||||
|
- Large Task (5-8h): 100 SC
|
||||||
|
- Complex Task (1-2 days): 200 SC
|
||||||
|
|
||||||
|
### Democratic Validation Process
|
||||||
|
1. Submit SC claim via pull request
|
||||||
|
2. Team Captain (Defender) reviews
|
||||||
|
3. Community lazy consensus (48h)
|
||||||
|
4. Merge = official SC award
|
||||||
|
|
||||||
|
## How to Earn Social Karma
|
||||||
|
|
||||||
|
| Activity | SK Award | Purpose |
|
||||||
|
|----------|----------|---------|
|
||||||
|
| Code Review | 5 SK | Quality assurance |
|
||||||
|
| Mentoring | 10 SK | Knowledge transfer |
|
||||||
|
| Documentation | 15 SK | Community resource |
|
||||||
|
| Governance | 20 SK | Democratic participation |
|
||||||
|
| Conflict Resolution | 25 SK | Community harmony |
|
||||||
|
|
||||||
|
### SK Privilege Thresholds
|
||||||
|
- **50 SK**: Can propose in General Forum
|
||||||
|
- **100 SK**: Eligible for Team Captain roles
|
||||||
|
- **200 SK**: Can lead mission objectives
|
||||||
|
- **500 SK**: Join Leadership Team + enhanced voting weight (max 1.5x)
|
||||||
|
|
||||||
|
## Treasury Management
|
||||||
|
|
||||||
|
### The 3x Rule
|
||||||
|
**Outstanding SC ≤ 3x EUR Treasury Balance**
|
||||||
|
|
||||||
|
This mathematical rule prevents SC inflation and ensures redemption capacity.
|
||||||
|
|
||||||
|
**Example**: €10,000 treasury → Maximum 30,000 SC outstanding
|
||||||
|
|
||||||
|
### License Integration
|
||||||
|
|
||||||
|
| License | SC Earning | SK Earning | Max Daily |
|
||||||
|
|---------|------------|------------|-----------|
|
||||||
|
| Campaign | ❌ | ✅ | 25 SK |
|
||||||
|
| Watch | ❌ | ✅ | 50 SK |
|
||||||
|
| Work | ✅ | ✅ | 500 SC + 100 SK |
|
||||||
|
| Organizational | ✅ | ✅ | 500 SC + 100 SK |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**The result**: A currency system that rewards both individual contribution and collective success, with full democratic accountability and mathematical integrity.
|
||||||
|
'''
|
||||||
|
|
||||||
|
with open(output_file, 'w') as f:
|
||||||
|
f.write(content)
|
||||||
|
|
||||||
|
print(f"✅ Generated: docs/smartup-zero/currency-system.md")
|
||||||
|
|
||||||
|
def main():
|
||||||
|
"""Generate all public transparency pages"""
|
||||||
|
print("🌐 GENERATING PUBLIC TRANSPARENCY PAGES")
|
||||||
|
print("=" * 45)
|
||||||
|
|
||||||
|
# Create docs/smartup-zero directory if it doesn't exist
|
||||||
|
smartup_zero_dir = os.path.join(os.path.dirname(__file__), '..', '..', 'docs', 'smartup-zero')
|
||||||
|
os.makedirs(smartup_zero_dir, exist_ok=True)
|
||||||
|
|
||||||
|
generate_book_of_owners_page()
|
||||||
|
generate_financial_transparency_page()
|
||||||
|
generate_currency_system_page()
|
||||||
|
|
||||||
|
print("\n✅ All transparency pages generated!")
|
||||||
|
print("📝 Files created in docs/smartup-zero/ directory")
|
||||||
|
print("🌐 Will be visible on timeline0.org when committed")
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
|
@ -1,13 +1,59 @@
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
"""
|
"""
|
||||||
Generate MkDocs pages for public transparency
|
Generate MkDocs pages for public transparency
|
||||||
Converts CSV ledger data into beautiful web pages
|
Converts CSV ledger data into beautiful web pages - WORKING VERSION
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import csv
|
import csv
|
||||||
import os
|
import os
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
|
||||||
|
def parse_financial_data():
|
||||||
|
"""Parse actual financial data from CSV files"""
|
||||||
|
base_path = os.path.join(os.path.dirname(__file__), '..')
|
||||||
|
|
||||||
|
# Parse live SC from transactions
|
||||||
|
live_sc = 0
|
||||||
|
sc_file = os.path.join(base_path, 'ledger', 'smartup-credits', 'transactions.csv')
|
||||||
|
try:
|
||||||
|
with open(sc_file, 'r') as f:
|
||||||
|
reader = csv.DictReader(f)
|
||||||
|
for row in reader:
|
||||||
|
if not row['timestamp'].startswith('#') and row['timestamp']:
|
||||||
|
if row['type'] == 'SC':
|
||||||
|
live_sc += int(row['amount'])
|
||||||
|
elif row['type'] in ['REDEEM', 'DESTROY']:
|
||||||
|
live_sc -= int(row['amount'])
|
||||||
|
except FileNotFoundError:
|
||||||
|
live_sc = 0
|
||||||
|
|
||||||
|
# Parse treasury balance
|
||||||
|
treasury_eur = 0
|
||||||
|
treasury_file = os.path.join(base_path, 'ledger', 'treasury', 'balance.csv')
|
||||||
|
try:
|
||||||
|
with open(treasury_file, 'r') as f:
|
||||||
|
reader = csv.DictReader(f)
|
||||||
|
for row in reader:
|
||||||
|
if not row['timestamp'].startswith('#') and row['timestamp']:
|
||||||
|
treasury_eur = float(row['total_eur_balance'])
|
||||||
|
except FileNotFoundError:
|
||||||
|
treasury_eur = 0
|
||||||
|
|
||||||
|
# Parse pending SC
|
||||||
|
pending_sc = 0
|
||||||
|
pending_file = os.path.join(base_path, 'ledger', 'pending-sc', 'transactions.csv')
|
||||||
|
try:
|
||||||
|
with open(pending_file, 'r') as f:
|
||||||
|
reader = csv.DictReader(f)
|
||||||
|
for row in reader:
|
||||||
|
if not row['timestamp'].startswith('#') and row['timestamp']:
|
||||||
|
if row['status'] == 'PENDING_VALIDATION':
|
||||||
|
pending_sc += int(row['amount'])
|
||||||
|
except FileNotFoundError:
|
||||||
|
pending_sc = 0
|
||||||
|
|
||||||
|
return live_sc, treasury_eur, pending_sc
|
||||||
|
|
||||||
def generate_book_of_owners_page():
|
def generate_book_of_owners_page():
|
||||||
"""Generate public Book of Owners page"""
|
"""Generate public Book of Owners page"""
|
||||||
|
|
||||||
|
@ -76,13 +122,25 @@ Every person listed above is an **equal co-owner** of Smartup Zero, regardless o
|
||||||
print(f"✅ Generated: docs/smartup-zero/book-of-owners.md")
|
print(f"✅ Generated: docs/smartup-zero/book-of-owners.md")
|
||||||
|
|
||||||
def generate_financial_transparency_page():
|
def generate_financial_transparency_page():
|
||||||
"""Generate financial transparency page"""
|
"""Generate financial transparency page with REAL DATA"""
|
||||||
|
|
||||||
output_file = os.path.join(os.path.dirname(__file__), '..', '..', 'docs', 'smartup-zero', 'financial-transparency.md')
|
output_file = os.path.join(os.path.dirname(__file__), '..', '..', 'docs', 'smartup-zero', 'financial-transparency.md')
|
||||||
|
|
||||||
live_sc = 0
|
# Parse actual financial data
|
||||||
pending_sc = 82200
|
live_sc, treasury_eur, pending_sc = parse_financial_data()
|
||||||
treasury_eur = 0
|
|
||||||
|
# Calculate 3x rule status
|
||||||
|
if treasury_eur > 0:
|
||||||
|
ratio = live_sc / (treasury_eur * 3)
|
||||||
|
if ratio <= 1:
|
||||||
|
rule_status = f"✅ COMPLIANT ({ratio:.1%} of limit)"
|
||||||
|
else:
|
||||||
|
rule_status = f"❌ VIOLATION ({ratio:.1%} of limit)"
|
||||||
|
else:
|
||||||
|
if live_sc > 0:
|
||||||
|
rule_status = "⚠️ PENDING (SC outstanding but no treasury funding yet)"
|
||||||
|
else:
|
||||||
|
rule_status = "✅ COMPLIANT (no SC outstanding)"
|
||||||
|
|
||||||
content = f'''# 💰 Financial Transparency
|
content = f'''# 💰 Financial Transparency
|
||||||
|
|
||||||
|
@ -97,7 +155,14 @@ def generate_financial_transparency_page():
|
||||||
- 💶 **EUR Treasury**: €{treasury_eur:,.2f}
|
- 💶 **EUR Treasury**: €{treasury_eur:,.2f}
|
||||||
- 🪙 **Live Smartup Credits**: {live_sc:,} SC
|
- 🪙 **Live Smartup Credits**: {live_sc:,} SC
|
||||||
- ⏳ **Pending Validation**: {pending_sc:,} SC
|
- ⏳ **Pending Validation**: {pending_sc:,} SC
|
||||||
- ✅ **3x Rule Status**: COMPLIANT
|
- 📊 **3x Rule Status**: {rule_status}
|
||||||
|
|
||||||
|
## Live SC Activity
|
||||||
|
|
||||||
|
Current outstanding SC represents **earned value through completed work**:
|
||||||
|
- Task-based collaborative work following effort-based assessment
|
||||||
|
- Democratic validation through Team Captain approval
|
||||||
|
- Complete audit trail in session logs and transaction records
|
||||||
|
|
||||||
## Founding Work Audit
|
## Founding Work Audit
|
||||||
|
|
||||||
|
@ -108,14 +173,22 @@ The largest pending SC amount represents the **founding entrepreneur's 10-year w
|
||||||
| **Design Phase** | 24,660 SC | Team Captains + Leadership vote | ⏳ Pending |
|
| **Design Phase** | 24,660 SC | Team Captains + Leadership vote | ⏳ Pending |
|
||||||
| **Production Phase** | 32,880 SC | Community binding vote | ⏳ Pending |
|
| **Production Phase** | 32,880 SC | Community binding vote | ⏳ Pending |
|
||||||
| **Organization Phase** | 24,660 SC | Automatic at market launch | ⏳ Pending |
|
| **Organization Phase** | 24,660 SC | Automatic at market launch | ⏳ Pending |
|
||||||
| **TOTAL** | **82,200 SC** | Democratic validation | **€0 current liability** |
|
| **TOTAL** | **82,200 SC** | Democratic validation | **Awaiting community growth** |
|
||||||
|
|
||||||
!!! warning "Democratic Safeguard"
|
!!! warning "Democratic Safeguard"
|
||||||
The founding entrepreneur **cannot validate their own work**. All 82,200 SC requires approval from future Team Captains and community votes, proving that Smartup Zero's "no special founders" principle is real and enforceable.
|
The founding entrepreneur **cannot validate their own work**. All 82,200 SC requires approval from future Team Captains and community votes, proving that Smartup Zero's "no special founders" principle is real and enforceable.
|
||||||
|
|
||||||
|
## Treasury Health
|
||||||
|
|
||||||
|
**Financial Health**: {'EXCELLENT' if live_sc <= 1000 else 'GOOD' if live_sc <= 10000 else 'NEEDS_FUNDING'}
|
||||||
|
|
||||||
|
- SC holders earning value through effort-based work
|
||||||
|
- {'Treasury funding available for SC redemption' if treasury_eur > 0 else 'Treasury funding needed for SC redemption capability'}
|
||||||
|
- All transactions public and auditable in git history
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
*Financial health: **EXCELLENT** - No current debt, pending awards tied to collective success*
|
*All financial data automatically updates from live CSV ledger files*
|
||||||
'''
|
'''
|
||||||
|
|
||||||
with open(output_file, 'w') as f:
|
with open(output_file, 'w') as f:
|
||||||
|
@ -141,17 +214,25 @@ def generate_currency_system_page():
|
||||||
|
|
||||||
## How to Earn Smartup Credits
|
## How to Earn Smartup Credits
|
||||||
|
|
||||||
### Task-Based Earning
|
### Task-Based Earning (Effort Assessment Model)
|
||||||
- Small Task (1-2h): 25 SC
|
- Small Task (1-2h): 25 SC base budget
|
||||||
- Medium Task (3-4h): 50 SC
|
- Medium Task (3-4h): 50 SC base budget
|
||||||
- Large Task (5-8h): 100 SC
|
- Large Task (5-8h): 100 SC base budget
|
||||||
- Complex Task (1-2 days): 200 SC
|
- Complex Task (1-2 days): 200 SC base budget
|
||||||
|
|
||||||
|
**Actual SC earned based on effort quality assessment (60-100% of budget)**
|
||||||
|
|
||||||
|
### ADM Triangle Collaboration
|
||||||
|
- **Attacker (Senior)**: 90% of SC award, mentors junior
|
||||||
|
- **Defender (Junior)**: 10% of SC award, learns through participation
|
||||||
|
- **Midfielder (Bot)**: Handles coordination and documentation
|
||||||
|
|
||||||
### Democratic Validation Process
|
### Democratic Validation Process
|
||||||
1. Submit SC claim via pull request
|
1. Complete collaborative work session
|
||||||
2. Team Captain (Defender) reviews
|
2. Mission Leader assesses effort quality
|
||||||
3. Community lazy consensus (48h)
|
3. Pending SC created for Team Captain review
|
||||||
4. Merge = official SC award
|
4. Community lazy consensus (48h)
|
||||||
|
5. Official SC award through existing validation system
|
||||||
|
|
||||||
## How to Earn Social Karma
|
## How to Earn Social Karma
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue