InfraForge Docs

InfraNotes Payroll · v0

Welcome

Select a document from the sidebar to read it.

InfraNotes Payroll Management System

Go Version
PostgreSQL
Apache Kafka
Docker
License: MIT
Build Status
Coverage
Go Report Card

🚀 Enterprise-grade payroll processing microservice designed for modern workforce demands with seamless integration into the InfraNotes financial ecosystem.

📋 Table of Contents

🎯 Overview

The InfraNotes Payroll Management System is a comprehensive, cloud-native payroll processing platform built with Go 1.24+ and designed to handle modern workforce demands. It provides complete payroll functionality from employee onboarding to tax compliance, with deep integration into the InfraNotes financial ecosystem.

🏗️ Built for 2025 Standards

  • Modern Go Architecture: Leveraging Go 1.24+ features including structured logging, generics, and enhanced performance
  • Cloud-Native Design: Containerized with Docker, orchestrated with Kubernetes, monitored with OpenTelemetry
  • Event-Driven Integration: Kafka-based messaging for real-time financial system synchronization
  • Security-First: End-to-end encryption, PCI compliance, SOC 2 Type II standards
  • Industry Compliance: Built-in support for construction prevailing wages and IT contractor classification

✨ Key Features

💰 Core Payroll Processing

  • Multi-frequency pay schedules (weekly, bi-weekly, semi-monthly, monthly)
  • Complex compensation structures (salary, hourly, commission, bonuses, overtime)
  • Same-day and on-demand pay capabilities with instant payment integration
  • Comprehensive tax calculations supporting federal, state, and local jurisdictions
  • Benefits and deductions management with flexible scheduling

🏭 Industry-Specific Compliance

  • Construction Industry: Prevailing wage compliance, Davis-Bacon Act reporting, certified payroll
  • IT Services: Contractor vs. employee classification, 1099 processing, equity compensation
  • Multi-state Operations: Remote worker support, jurisdiction-specific tax calculations
  • Regulatory Compliance: EEO-1, VETS, ACA, OSHA recordkeeping integration

📊 Project-Based Labor Tracking

  • Real-time labor cost allocation to projects and cost centers
  • Billable vs. non-billable time classification
  • Budget impact analysis with variance reporting
  • Grant and contract labor tracking for compliance

🔗 InfraNotes Ecosystem Integration

  • Unified authentication with existing InfraNotes user management
  • Project finance synchronization for comprehensive cost tracking
  • Real-time budget updates via Kafka event streaming
  • Consolidated financial reporting across all business operations

📈 Analytics & Reporting

  • Real-time payroll dashboards with labor cost trending
  • Compliance reporting suite for regulatory requirements
  • Custom report builder with export capabilities
  • Rule-based analytics for payroll forecasting and optimization

🏛️ Architecture

┌─────────────────────────────────────────────────────────────┐
│                    InfraNotes Ecosystem                    │
├─────────────────────────────────────────────────────────────┤
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────────────┐  │
│  │ InfraNotes  │  │  Financial  │  │   Payroll Service   │  │
│  │    Core     │  │  Analytics  │  │   (This Project)    │  │
│  │             │  │   Module    │  │                     │  │
│  └─────────────┘  └─────────────┘  └─────────────────────┘  │
│         │                │                    │            │
│         └────────────────┼────────────────────┘            │
│                          │                                 │
│  ┌─────────────────────────────────────────────────────────┐  │
│  │                 Kafka Message Bus                      │  │
│  │  Topics: payroll.events, financial.sync, audit.logs   │  │
│  └─────────────────────────────────────────────────────────┘  │
│                                                             │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────────────┐  │
│  │ PostgreSQL  │  │    Redis    │  │    External APIs    │  │
│  │  (Core DB)  │  │  (Caching)  │  │  (Banks, Tax Orgs)  │  │
│  └─────────────┘  └─────────────┘  └─────────────────────┘  │
└─────────────────────────────────────────────────────────────┘

🔧 Technology Stack

Component Technology Version Purpose
Language Go 1.24+ Primary development language with modern features
Database PostgreSQL 17+ Primary data store with encryption at rest
Caching Redis 7+ Session management and performance optimization
Messaging Apache Kafka 2.8+ Event-driven ecosystem communication
Containerization Docker 20.10+ Application packaging and deployment
Orchestration Kubernetes 1.28+ Container orchestration and scaling
Monitoring OpenTelemetry 1.0+ Distributed tracing and metrics
Security Vault 1.15+ Secrets management and encryption

🚀 Quick Start

Prerequisites

  • Go 1.24+ installed and configured
  • Docker & Docker Compose for local development
  • Git for version control
  • Make for build automation

30-Second Setup

# Clone the repository
git clone https://github.com/StackCatalyst/infranotes-payroll.git
cd infranotes-payroll

# Start the development environment
docker compose up --build -d

# Verify the service is running
curl http://localhost:8081/health

Development Environment

# Install dependencies
go mod download

# Run database migrations
make migrate-up

# Start the development server
make dev

# Run tests
make test

# View logs
make logs

📦 Installation

Development Environment Setup

  1. Clone and Setup

    git clone https://github.com/StackCatalyst/infranotes-payroll.git
    cd infranotes-payroll
    cp .env.example .env
    
  2. Configure Environment

    # Edit .env file with your settings
    nano .env
    
  3. Start Services

    # Start all dependencies
    docker compose up -d postgres redis kafka
    
    # Run database migrations
    make migrate-up
    
    # Start the application
    make run
    

Production Deployment

# Build production image
make build-prod

# Deploy with Kubernetes
kubectl apply -f k8s/

# Or deploy with Docker Compose
docker compose -f docker-compose.prod.yml up -d

⚙️ Configuration

Environment Variables

Variable Description Default Required
PORT HTTP server port 8080 No
DB_HOST PostgreSQL host localhost Yes
DB_PORT PostgreSQL port 5432 No
DB_NAME Database name payroll_db Yes
DB_USER Database user payroll_user Yes
DB_PASSWORD Database password - Yes
REDIS_URL Redis connection URL redis://localhost:6379 No
KAFKA_BROKERS Kafka broker addresses localhost:9092 Yes
INFRANOTES_API_URL InfraNotes Core API URL - Yes
JWT_SECRET JWT signing secret - Yes
ENCRYPTION_KEY Data encryption key - Yes

Configuration Files

# config/app.yaml
server:
  port: 8080
  timeout: 30s
  
database:
  max_connections: 100
  max_idle: 10
  
kafka:
  consumer_group: "payroll-service"
  auto_offset_reset: "earliest"
  
security:
  encryption_algorithm: "AES-256-GCM"
  token_expiry: "24h"

📖 Usage

Basic Payroll Processing

// Create a new payroll run
payrollRun := &models.PayrollRun{
    PayPeriodID: 1,
    RunDate:     time.Now(),
    Status:      "draft",
}

// Process payroll for all active employees
err := payrollService.ProcessPayroll(ctx, payrollRun)
if err != nil {
    log.Error("payroll processing failed", "error", err)
    return err
}

Project Labor Allocation

// Allocate time entry to project
timeEntry := &models.TimeEntry{
    EmployeeID: 123,
    ProjectID:  456,
    Hours:      8.0,
    Date:       time.Now(),
    HourlyRate: 75.00,
}

err := timeService.AllocateToProject(ctx, timeEntry)

Tax Calculation

// Calculate taxes for employee
taxResult, err := taxService.CalculateTaxes(ctx, &TaxCalculationRequest{
    EmployeeID:   123,
    GrossPay:     5000.00,
    PayPeriod:    payPeriod,
    Deductions:   deductions,
})

📚 API Documentation

REST API Endpoints

Method Endpoint Description Auth Required
GET /health Health check No
POST /api/v1/employees Create employee Yes
GET /api/v1/employees/{id} Get employee details Yes
POST /api/v1/payroll/run Start payroll run Yes
GET /api/v1/payroll/runs List payroll runs Yes
POST /api/v1/time-entries Submit time entry Yes
GET /api/v1/reports/payroll Generate payroll reports Yes

Interactive API Documentation

  • Swagger UI: http://localhost:8081/swagger/
  • OpenAPI Spec: http://localhost:8081/api/docs/openapi.json

🛠️ Development

Project Structure

infranotes-payroll/
├── cmd/                    # Application entry points
│   ├── api/               # HTTP API server
│   ├── worker/            # Background job processor
│   └── migrator/          # Database migration utility
├── internal/              # Private application code
│   ├── config/           # Configuration management
│   ├── handlers/         # HTTP request handlers
│   ├── middleware/       # HTTP middleware
│   ├── models/           # Data models and DTOs
│   ├── repositories/     # Data access layer
│   ├── services/         # Business logic layer
│   └── kafka/            # Event streaming
├── migrations/            # Database migrations
├── tests/                # Test files
├── docs/                 # Documentation
├── scripts/              # Build and deployment scripts
├── k8s/                  # Kubernetes manifests
└── docker-compose.yml    # Development environment

Development Workflow

# Set up pre-commit hooks
make setup-hooks

# Run the development server with hot reload
make dev

# Run linting and formatting
make lint
make fmt

# Run tests with coverage
make test-coverage

# Generate documentation
make docs

# Build for production
make build

Code Standards

  • Go 1.24+ Features: Utilize structured logging, generics, and modern patterns
  • Error Handling: Use wrapped errors with context for debugging
  • Testing: Maintain >90% test coverage with unit and integration tests
  • Documentation: Document all public APIs and complex business logic
  • Security: Follow OWASP guidelines and conduct regular security reviews

🧪 Testing

Running Tests

# Run all tests
make test

# Run tests with coverage
make test-coverage

# Run integration tests
make test-integration

# Run performance tests
make test-performance

# Run security tests
make test-security

Test Categories

  • Unit Tests: Fast, isolated tests for individual components
  • Integration Tests: End-to-end tests with database and external services
  • Performance Tests: Load testing for payroll processing scenarios
  • Security Tests: Vulnerability scanning and penetration testing
  • Compliance Tests: Regulatory requirement validation

Test Data

# Load test data
make seed-test-data

# Clean test database
make clean-test-db

# Generate mock data
make generate-mocks

🚀 Deployment

Docker Deployment

# Build production image
docker build -t infranotes-payroll:latest .

# Run with Docker Compose
docker compose -f docker-compose.prod.yml up -d

Kubernetes Deployment

# Deploy to Kubernetes
kubectl apply -f k8s/namespace.yaml
kubectl apply -f k8s/configmap.yaml
kubectl apply -f k8s/secret.yaml
kubectl apply -f k8s/deployment.yaml
kubectl apply -f k8s/service.yaml
kubectl apply -f k8s/ingress.yaml

# Verify deployment
kubectl get pods -n payroll
kubectl logs -f deployment/payroll-api -n payroll

Environment Configuration

  • Development: Local development with Docker Compose
  • Staging: Kubernetes cluster with reduced resources
  • Production: High-availability Kubernetes with auto-scaling

🔗 Integration

InfraNotes Core Integration

// Configure InfraNotes API client
infraNotesClient := infranotes.NewClient(&infranotes.Config{
    BaseURL:    os.Getenv("INFRANOTES_API_URL"),
    APIKey:     os.Getenv("INFRANOTES_API_KEY"),
    Timeout:    30 * time.Second,
    RetryCount: 3,
})

// Sync employee data
employee, err := infraNotesClient.Users.GetByID(ctx, userID)
if err != nil {
    return fmt.Errorf("failed to fetch user: %w", err)
}

Kafka Event Integration

// Publish payroll completion event
event := &PayrollEvent{
    Type:        "payroll.completed",
    PayrollRunID: run.ID,
    EmployeeCount: len(employees),
    TotalAmount:  run.TotalNetPay,
    Timestamp:   time.Now(),
}

err := kafkaProducer.Publish(ctx, "payroll.events", event)

External API Integration

  • Banking APIs: ACH file generation and direct deposit processing
  • Tax Agencies: Electronic filing and compliance reporting
  • Payment Processors: Same-day pay and instant payment services
  • Time Tracking Systems: Import time and attendance data

🤝 Contributing

We welcome contributions to the InfraNotes Payroll Management System! Please see our Contributing Guide for details.

Development Process

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

Code Review Guidelines

  • All code must pass CI/CD checks
  • Maintain or improve test coverage
  • Follow Go coding standards and project conventions
  • Include documentation for new features
  • Security review required for sensitive changes

🔐 Security

Security Measures

  • Encryption: AES-256 encryption for PII and financial data
  • Authentication: JWT-based authentication with MFA support
  • Authorization: Role-based access control (RBAC)
  • Audit Logging: Comprehensive audit trails for compliance
  • Vulnerability Scanning: Automated security testing in CI/CD

Reporting Security Issues

Please report security vulnerabilities to security@infraforge.com. Do not open public issues for security vulnerabilities.

Compliance

  • SOC 2 Type II compliance for data security
  • PCI DSS compliance for payment data handling
  • GDPR compliance for data privacy
  • CCPA compliance for California residents

📄 License

This project is licensed under the MIT License - see the LICENSE file for details.

📞 Support

Documentation

Community Support

Commercial Support

For enterprise support, consulting, or custom development:


Built with ❤️ by the InfraNotes Engineering Team

WebsiteDocumentationBlogTwitter