Zyntem Fiscalization - Developer Onboarding Guide
Version: 1.1 Last Updated: 2026-03-15 Estimated Completion Time: 2-3 hours
Welcome to Fiscalization by Zyntem! 🎉
This guide will walk you through everything you need to become a productive member of the Fiscalization by Zyntem development team. By the end of this onboarding, you'll have:
✅ Development environment fully configured ✅ Understanding of testing practices ✅ Knowledge of deployment procedures ✅ Access to all necessary tools and documentation
Before You Start:
- Ensure you have admin access to your machine (required for tool installation)
- Have your GCP account credentials ready (or coordinate with team lead)
- Set aside 2-3 hours for uninterrupted setup
Onboarding Roadmap
graph TD
A[Start: Read This Guide] --> B[Phase 1: Environment Setup - 1h]
B --> C[Phase 2: Understand Testing - 30min]
C --> D[Phase 3: Learn CI/CD - 20min]
D --> E[Phase 4: Deployment Knowledge - 30min]
E --> F[Phase 5: First Contribution - Variable]
F --> G[Complete: You're Ready! 🚀]
Phase 1: Environment Setup (1 hour)
Step 1.1: Read Prerequisites
Action: Read SETUP.md
Focus On:
- Required tools and versions
- OS-specific installation instructions
- GCP prerequisites
Time: 10 minutes
Step 1.2: Install Development Tools
Follow: SETUP.md - Installation Instructions
Your Operating System:
- macOS (recommended: use Homebrew)
- Linux (Ubuntu/Debian)
- Windows (use WSL2)
Tools to Install:
# Checklist (verify each):
[ ] Go 1.24+
[ ] Node.js 20+
[ ] Docker and Docker Compose v2+
[ ] golang-migrate CLI
[ ] Git 2.30+
[ ] make
[ ] jq
[ ] curl
Commands for macOS (Quick Reference):
# Install core tools
brew install go node git jq
brew install golang-migrate
# Install Docker Desktop
open -a Docker
# Verify
go version # Should be 1.24+
node --version # Should be 20+
migrate -version # golang-migrate CLI
docker --version # Docker with Compose v2
Time: 20-30 minutes (depending on download speeds)
Checkpoint: ✅ All tools installed? If not, see SETUP.md - Troubleshooting
Step 1.3: Setup GCP Access
Follow: SETUP.md - GCP Prerequisites
Steps:
-
Create GCP Account (if you don't have one)
- Visit https://cloud.google.com/
- Use company email or personal account
- Enable billing (free tier available)
-
Create Development Project
gcloud auth login
gcloud projects create zyntem-dev-YOUR_NAME --name="Fiscalization Dev - Your Name"
gcloud config set project zyntem-dev-YOUR_NAME -
Enable Required APIs
gcloud services enable \
run.googleapis.com \
sqladmin.googleapis.com \
secretmanager.googleapis.com \
storage.googleapis.com -
Create Service Account
gcloud iam service-accounts create zyntem-dev \
--display-name="Fiscalization Development"
# Grant roles (see SETUP.md for full commands) -
Download Credentials
mkdir -p ~/.gcp
gcloud iam service-accounts keys create ~/.gcp/zyntem-dev-key.json \
--iam-account=zyntem-dev@zyntem-dev-YOUR_NAME.iam.gserviceaccount.com
echo 'export GOOGLE_APPLICATION_CREDENTIALS=~/.gcp/zyntem-dev-key.json' >> ~/.bashrc
source ~/.bashrc
Time: 15-20 minutes
Checkpoint: ✅ Can you run gcloud projects list and see your project?
Step 1.4: Validate Environment
Action: Run environment validation
# Clone repository (if not already done)
git clone https://github.com/zyntem/fiscalization.git
cd fiscalization
# Run validation script
./scripts/validate-environment.sh
Expected Output:
✓ Go detected (1.24+)
✓ Node.js detected (20+)
✓ Docker detected
✓ Git detected
✓ make detected
✓ jq detected
✓ curl detected
All prerequisites met! ✓
You are ready to start development.
If Validation Fails:
- Review error messages carefully
- Check SETUP.md - Troubleshooting
- Reach out to team lead if stuck
Time: 5 minutes
Checkpoint: ✅ Validation script passes?
Step 1.5: Start Local Services
Action: Start Docker Compose stack
# Start all services (PostgreSQL, Redis)
docker-compose up -d
# Verify services are running
docker-compose ps
# Check PostgreSQL is accessible
psql -h localhost -p 5432 -U fiscalization -d fiscalization_dev
# Password: dev_password (see docker-compose.yml)
# Check Redis is accessible
redis-cli -h localhost -p 6379 ping
# Expected: PONG
Time: 5 minutes
Checkpoint: ✅ PostgreSQL and Redis running?
Phase 2: Understand Testing (30 minutes)
Step 2.1: Read Testing Guide
Action: Read TESTING.md
Focus On:
- Test categories (unit, integration, E2E)
- Go testing with testify
- TypeScript testing with Vitest
- Code coverage requirements (80% Go, 75% TypeScript)
Time: 15 minutes
Key Takeaways:
- ✅ Epic 1 stories focus on unit tests only
- ✅ Integration tests begin in Epic 2
- ✅ Use Arrange-Act-Assert pattern
- ✅ Test behavior, not implementation
- ✅ Table-driven tests for multiple scenarios
Step 2.2: Explore Test Examples
Action: Review example tests
# Go test examples (once Story 1.0b is complete)
cat internal/testutil/example_test.go
# TypeScript test examples
cat tests/example.test.ts
# Run tests (after Story 1.0b)
make test
# Generate coverage report
make test-coverage
open coverage.html
Time: 10 minutes
Checkpoint: ✅ Understand how to write and run tests?
Step 2.3: Testing Quick Reference
Commands to Bookmark:
# Run all tests
make test
# Run Go tests only
go test ./...
# Run TypeScript tests only
npm test
# Watch mode (re-run on changes)
make test-watch
# Generate coverage
make test-coverage
# Run specific test
go test -run TestTransactionService_Create ./internal/service
Time: 5 minutes
Phase 3: Learn CI/CD (20 minutes)
Step 3.1: Understand Pipeline
Action: Read CI-CD.md
Focus On:
- Pipeline architecture (Lint → Test → Build → Deploy)
- Workload Identity Federation (keyless GCP auth)
- How deployments trigger automatically
- Local testing before push
Time: 10 minutes
Key Takeaways:
- ✅ Every push to
maintriggers deployment to dev - ✅ Pull requests run tests but don't deploy
- ✅ Pipeline takes ~20 minutes (main) or ~15 minutes (PRs)
- ✅ Can run same checks locally:
make test && make lint
Step 3.2: Test Local CI Checks
Action: Run CI checks locally
# Lint (Go — same as CI gate)
cd apps/core-api && gofmt -l . | (! grep .)
# Build
cd apps/core-api && go build ./...
# Test (requires test DB)
cd apps/core-api && go test ./... -count=1
# Conformance
make conformance-check
Time: 5 minutes
Checkpoint: ✅ Can you run CI checks locally without errors?
Step 3.3: Review Pipeline Status
Action: Check GitHub Actions
- Visit: https://github.com/zyntem/fiscalization/actions
- Review recent workflow runs
- Click on a failed run (if any) to see logs
- Understand how to debug CI failures
Time: 5 minutes
Phase 4: Deployment Knowledge (30 minutes)
Step 4.1: Understand Deployment Strategy
Action: Read DEPLOYMENT.md
Focus On:
- Blue-green deployment with gradual traffic shifting
- Health check requirements
- Rollback procedures (automatic and manual)
- Database migration best practices
Time: 15 minutes
Key Takeaways:
- ✅ Deployments use blue-green strategy (zero downtime)
- ✅ Traffic shifts gradually: 10% → 50% → 100%
- ✅ Automatic rollback if error rate > 5% or P99 latency > 2s
- ✅ Manual rollback takes < 30 seconds
Step 4.2: Review Deployment Checklist
Action: Skim DEPLOYMENT-CHECKLIST.md
Note: You won't deploy on Day 1, but familiarize yourself with:
- Pre-deployment checks
- Monitoring during deployment
- Post-deployment verification
Time: 5 minutes
Step 4.3: Explore Operational Runbook
Action: Skim RUNBOOK.md
Bookmark Sections:
- System Architecture (overview of all services)
- Common Issues (troubleshooting guide)
- Emergency Procedures (rollback, database restore)
Time: 10 minutes
Checkpoint: ✅ Know where to look when issues arise?
Phase 4b: Billing & Licensing (10 minutes)
Billing (Stripe)
The platform uses Stripe for subscription management. Relevant env vars:
STRIPE_SECRET_KEY=sk_test_...
STRIPE_WEBHOOK_SECRET=whsec_...
STRIPE_PRICE_ID_MONTHLY=price_...
STRIPE_PRICE_ID_ANNUAL=price_...
Webhooks are handled in apps/core-api/internal/stripe/. See .env.example for all Stripe variables.
License Enforcement
The management plane enforces per-tier limits on agents and merchants:
| Tier | Agents | Merchants | Grace Period |
|---|---|---|---|
| Trial | 1 | 5 | 7 days |
| Starter | 5 | 50 | 30 days |
| Professional | 25 | 500 | 30 days |
| Enterprise | Unlimited | Unlimited | 90 days |
Core-API reports merchant counts to the management plane via heartbeat.
Rate Limiting
All API endpoints are rate-limited by tier:
| Tier | Requests/min | Burst |
|---|---|---|
| Sandbox | 100 | 200 |
| Starter | 1,000 | 2,000 |
| Growth | 5,000 | 10,000 |
| Enterprise | 20,000 | 40,000 |
Rate limit headers (X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset) are included on all responses.
Phase 5: First Contribution (Variable Time)
Step 5.1: Find a Good First Issue
Action: Pick a starter task
Options:
-
Documentation Improvement (Low risk, great for learning)
- Fix typos in docs
- Add examples to TESTING.md
- Improve troubleshooting sections
-
Test Writing (After Story 1.0b)
- Add test cases to existing functions
- Improve test coverage in specific package
- Write table-driven tests for validation functions
-
Small Feature (After Epic 1 completion)
- Add validation rule for new country
- Implement helper function
- Add new API endpoint (with tests)
Find Issues:
- GitHub Issues tagged
good-first-issue - Ask team lead for recommendations
- Review current sprint backlog
Time: Variable
Step 5.2: Development Workflow
Typical Workflow:
-
Create Branch
git checkout -b feature/your-feature-name -
Make Changes
# Edit code
# Write tests (TDD: test first!) -
Run Tests Locally
make test
make lint -
Commit & Push
git add .
git commit -m "feat: add feature X
- Implemented feature X
- Added unit tests with 85% coverage
- Updated documentation"
git push origin feature/your-feature-name -
Create Pull Request
- Visit GitHub
- Create PR from your branch to
main - Fill out PR template
- Request review from team lead
-
Address Review Comments
- Make requested changes
- Push updates to same branch
- PR updates automatically
-
Merge
- Once approved, merge PR
- Delete branch
- CI/CD deploys to dev automatically
Step 5.3: Code Review Checklist
Before Requesting Review:
- All tests pass locally:
make test - Linting passes:
make lint - Code coverage ≥ 80%:
make test-coverage - Documentation updated (if needed)
- Commit messages follow convention
- PR description explains what/why/how
Onboarding Checklist
Track your progress through onboarding:
Phase 1: Environment Setup ✅
- Read SETUP.md
- Installed all development tools
- Setup GCP account and project
- Created service account and downloaded credentials
- Validation script passes
- Local services (PostgreSQL, Redis) running
Phase 2: Testing ✅
- Read TESTING.md
- Reviewed test examples
- Ran tests locally
- Understand coverage requirements
Phase 3: CI/CD ✅
- Read CI-CD.md
- Understand pipeline flow
- Ran CI checks locally
- Reviewed GitHub Actions
Phase 4: Deployment ✅
- Read DEPLOYMENT.md
- Reviewed DEPLOYMENT-CHECKLIST.md
- Skimmed RUNBOOK.md
- Bookmarked operational docs
Phase 5: First Contribution ✅
- Found a good first issue
- Created feature branch
- Made changes with tests
- Created pull request
- Merged to main
Quick Reference Card
Essential Commands:
# Start services
docker-compose up -d
# Run tests
make test
# Run specific test
go test -run TestName ./path/to/package
# Lint code
make lint
# Generate coverage
make test-coverage
# Build services
make build
# Deploy (via CI/CD)
git push origin main
Essential URLs:
- GitHub: https://github.com/zyntem/fiscalization
- GCP Console: https://console.cloud.google.com
- CI/CD Pipelines: https://github.com/zyntem/fiscalization/actions
- Dev Environment: https://core-api-dev-zyntem.run.app
Documentation Index:
- SETUP.md - Environment setup
- TESTING.md - Testing guide
- CI-CD.md - CI/CD pipeline
- DEPLOYMENT.md - Deployment procedures
- DEPLOYMENT-CHECKLIST.md - Deployment checklist
- RUNBOOK.md - Operational runbook
Common Onboarding Questions
Q: How long until I can contribute code?
A: You can start contributing after Phase 2 (testing knowledge). Most developers make their first PR within 3-4 hours of starting onboarding.
Timeline:
- Day 1: Environment setup, read docs, small documentation fixes
- Day 2-3: Write tests, fix bugs, small features
- Week 2: Comfortable with full development workflow
- Week 4: Autonomous contributor
Q: Who do I ask for help?
A:
- First: Check documentation (SETUP.md, TESTING.md, etc.)
- Second: Search GitHub Issues for similar problems
- Third: Ask in Slack #zyntem-dev
- Fourth: DM team lead directly
Don't hesitate to ask! Everyone was new once.
Q: What if I break something?
A:
- Dev environment: Can't break anything permanent. Rollback is instant.
- Tests: CI/CD blocks bad code from merging
- Database: Migrations are backward-compatible and reversible
Remember: We have safeguards. It's hard to break things permanently.
Q: How do I stay updated on project changes?
A:
- Watch repository: GitHub → Watch → Custom → Select notifications
- Read PRs: Review recent merged PRs weekly
- Attend standups: Daily team sync (if applicable)
- Check Slack: #fiscalization-announcements channel
Q: What's the coding style?
A:
- Go: Follow Effective Go +
gofmtformatting (CI blocks unformatted code) - TypeScript: ESLint + Prettier (enforced in CI)
- Commit messages: Conventional Commits (
feat:,fix:,docs:, etc.) - Tests required: 50% coverage minimum per module
Key principles:
- Write tests first (TDD)
- Keep functions small (<50 lines)
- Comment complex logic
- Update docs with code changes
Troubleshooting Onboarding Issues
Issue: Validation Script Fails
Symptom: ./scripts/validate-environment.sh reports missing tools
Solution:
- Check which tool is missing
- Re-run installation commands for that tool
- Verify PATH is set correctly:
echo $PATH - Restart terminal and try again
Issue: Docker Services Won't Start
Symptom: docker-compose up fails or services crash
Solution:
# Check Docker Desktop is running
open -a Docker
# Check ports aren't in use
lsof -i :5432 # PostgreSQL
lsof -i :6379 # Redis
# Reset Docker Compose
docker-compose down -v
docker-compose up -d
Issue: GCP Authentication Errors
Symptom: ERROR: (gcloud.auth.login) ...
Solution:
# Re-authenticate
gcloud auth login
gcloud auth application-default login
# Verify credentials
gcloud auth list
echo $GOOGLE_APPLICATION_CREDENTIALS
# Check service account key exists
ls -la ~/.gcp/zyntem-dev-key.json
Issue: Tests Fail Locally
Symptom: make test fails but unclear why
Solution:
# Run tests with verbose output
go test -v ./...
# Run specific failing test
go test -run TestName -v ./path/to/package
# Check test database is running
docker-compose ps postgres
# Check environment variables
env | grep DATABASE_URL
Next Steps After Onboarding
Once you've completed all phases:
Week 1 Goals
- Make first documentation PR
- Write tests for existing code
- Fix a small bug
- Review teammate's PR
Week 2 Goals
- Implement small feature (with tests)
- Participate in code review
- Deploy to dev environment
- Contribute to planning discussion
Month 1 Goals
- Complete Epic 1 story (or equivalent)
- Mentor new developer through onboarding
- Propose improvement to codebase
- Present work in team demo
Feedback & Improvements
This onboarding guide is a living document. Help us improve it!
Found an issue?
- Create GitHub Issue with label
onboarding - Or directly propose PR to improve this doc
Suggestions for improvement?
- What was confusing?
- What took longer than expected?
- What would have helped you?
Contact:
- Team Lead: javier.sanchez@zyntem.com
- Slack: #zyntem-dev
Welcome to the Team! 🚀
You've completed onboarding! Here's what you've accomplished:
✅ Development environment fully configured ✅ Understand testing practices and requirements ✅ Know how CI/CD pipeline works ✅ Familiar with deployment procedures ✅ Know where to find help and documentation
You're ready to contribute!
Remember:
- Ask questions early and often
- Tests are not optional
- Documentation matters
- Code review is for learning
- Have fun building! 🎉
Onboarding Completed By: ___________________
Date: ___________
Time Taken: _______ hours
Notes:
(Any feedback or observations from your onboarding experience)
__________________________________________________
__________________________________________________
__________________________________________________
Additional Resources
Learning Resources:
Fiscalization-Specific:
- Architecture Overview
- PRD - Product requirements
- API Documentation (Epic 5)
External Services:
Version History:
- 2026-03-15: Added billing/licensing/rate limiting section, updated country support (v1.1)
- 2025-10-29: Initial version (v1.0)