- Enhanced MT103 mapping with all fields and validation - Implemented version management system - Added structured logging with correlation IDs - Added configuration management from environment variables - Implemented FX rate service with caching and provider abstraction - Added comprehensive unit tests - Created architecture and developer documentation
6.4 KiB
6.4 KiB
Developer Guide
Getting Started
Prerequisites
- Node.js >= 18.0.0
- pnpm >= 8.0.0
Installation
# Install dependencies
pnpm install
# Build all packages
pnpm build
# Run type checking
pnpm type-check
# Run tests
pnpm test
Development
# Start development server
pnpm dev
# Build for production
pnpm build
Project Structure
Monorepo Workspaces
apps/web: React web applicationpackages/types: Shared TypeScript typespackages/utils: Shared utilitiespackages/rules-engine: Regulatory rules enginepackages/iso20022: ISO 20022 message handlingpackages/treasury: Treasury managementpackages/audit: Audit logging
Adding a New Package
- Create directory in
packages/ - Add
package.jsonwith workspace dependencies - Add
tsconfig.jsonextending root config - Update root
tsconfig.jsonreferences - Add to
pnpm-workspace.yaml
Adding a New App
- Create directory in
apps/ - Add
package.jsonwith workspace dependencies - Add
tsconfig.jsonextending root config - Update
turbo.jsonbuild pipeline
Code Style
TypeScript
- Use strict TypeScript configuration
- Prefer interfaces over types for public APIs
- Use explicit return types for exported functions
- Avoid
any- useunknownif needed
Naming Conventions
- Files: kebab-case (
transaction-store.ts) - Types/Interfaces: PascalCase (
Transaction,BrazilRegulatoryResult) - Functions: camelCase (
evaluateTransaction) - Constants: UPPER_SNAKE_CASE (
DEFAULT_CONFIG) - Classes: PascalCase (
AuditLogStore)
Code Organization
package/
├── src/
│ ├── index.ts # Public API exports
│ ├── types.ts # Type definitions (if not in @types package)
│ ├── core.ts # Core functionality
│ ├── utils.ts # Internal utilities
│ └── __tests__/ # Test files
├── package.json
└── tsconfig.json
Testing
Unit Tests
# Run all tests
pnpm test
# Run tests in watch mode
pnpm test:watch
# Run tests for specific package
cd packages/utils && pnpm test
Writing Tests
import { describe, it, expect } from 'vitest';
import { myFunction } from '../my-module';
describe('myFunction', () => {
it('should do something', () => {
const result = myFunction(input);
expect(result).toBe(expected);
});
});
Test Coverage
Target: 80%+ coverage for critical functions
Building
Build Process
- TypeScript compilation (
tsc) - Package bundling (if needed)
- Type declaration generation
Build Order
Turborepo handles build order automatically based on dependencies:
types(no dependencies)utils(depends ontypes)- Other packages (depend on
typesandutils) web(depends on all packages)
Type Safety
Internal Package Dependencies
Use workspace protocol:
{
"dependencies": {
"@brazil-swift-ops/types": "workspace:*"
}
}
Type Exports
Export types from index.ts:
export type { Transaction, BrazilRegulatoryResult } from './types';
Error Handling
Error Types
Use custom error classes from @brazil-swift-ops/utils:
ValidationError: Input validation failuresBusinessRuleError: Business rule violationsSystemError: System-level errorsExternalServiceError: External API failures
Error Logging
import { getLogger } from '@brazil-swift-ops/utils';
const logger = getLogger();
logger.error('Operation failed', error, { context });
Configuration
Environment Variables
Configuration is loaded from environment variables via @brazil-swift-ops/utils/config:
import { getConfig } from '@brazil-swift-ops/utils';
const config = getConfig();
Configuration Files
.env: Local development (not committed).env.example: Example configuration (committed)
Logging
Structured Logging
import { getLogger, generateCorrelationId } from '@brazil-swift-ops/utils';
const logger = getLogger();
const correlationId = generateCorrelationId();
logger.setCorrelationId(correlationId);
logger.info('Transaction processed', { transactionId: 'TXN-123' });
Log Levels
debug: Detailed debugging informationinfo: General informational messageswarn: Warning messageserror: Error messagesfatal: Critical errors
Version Management
Version Information
import { getVersion, getVersionString } from '@brazil-swift-ops/utils';
const version = getVersion();
console.log(getVersionString()); // "brazil-swift-ops v1.0.0"
Versioning Strategy
- Semantic versioning (MAJOR.MINOR.PATCH)
- Version in root
package.jsonis source of truth - Rule set versions tracked separately in audit logs
Contributing
Workflow
- Create feature branch
- Make changes
- Write/update tests
- Run tests and type checking
- Commit with descriptive message
- Push and create PR
Commit Messages
Format: type(scope): description
Types:
feat: New featurefix: Bug fixdocs: Documentationtest: Testsrefactor: Code refactoringchore: Maintenance
Example: feat(rules-engine): add AML structuring detection
Common Tasks
Adding a New Rule
- Create rule function in
packages/rules-engine/src/ - Add result type in
packages/types/src/regulatory.ts - Register in
packages/rules-engine/src/orchestrator.ts - Add tests in
packages/rules-engine/src/__tests__/
Adding a New ISO 20022 Message Type
- Define type in
packages/types/src/iso20022.ts - Create builder in
packages/iso20022/src/ - Add validation function
- Update exporter
- Add tests
Adding a New UI Page
- Create component in
apps/web/src/pages/ - Add route in
apps/web/src/App.tsx - Add navigation link
- Create store if needed
Troubleshooting
Build Errors
# Clean and rebuild
pnpm clean
pnpm install
pnpm build
Type Errors
# Check types
pnpm type-check
# Rebuild types package
cd packages/types && pnpm build
Test Failures
# Run tests with verbose output
pnpm test -- --reporter=verbose