• Mahmoud Aglan's avatar
    fix(hr): payroll posted nothing — the handler had the schema wrong three ways · 7313a539
    Mahmoud Aglan authored
    onPayrollPaid read total_gross and total_net off hr_payroll_runs and grouped
    hr_payroll_components_log by component_type. None of those columns exist:
    
      hr_payroll_runs          has gross_earnings / net_salary
      hr_payroll_components_log has `type`, not component_type
      hr_payroll_periods        has period_code, not period_name
    
    Confirmed with SHOW COLUMNS on the live database. The handler threw "Unknown
    column" on its first query, and the listener only logs, so payroll silently
    posted NOTHING — no salary expense, no employer insurance share, no withheld
    tax anywhere in the ledger.
    
    It also had the grain wrong. PayrollController dispatches hr.payroll.paid once
    PER EMPLOYEE; an hr_payroll_runs row is a single payslip, not a whole run, and
    the period lives in hr_payroll_periods. Every amount needed is on the payslip.
    
    Rewritten against the real schema:
    
      Dr Salary Expense              gross_earnings
      Dr Employer Insurance Expense  insurance_employer
      Cr Bank                        net_salary
      Cr Insurance Payable           insurance_employee + insurance_employer
      Cr Tax Payable                 tax_amount
      Cr Employee Loans              loan_deduction
      Cr Other Deductions Payable    penalty + absence + other
    
    Balances by construction: the payslip satisfies gross - total_deductions = net
    and the deduction buckets sum to total_deductions. Verified on all three live
    payslips — e.g. run 1: Dr 15,000.00 + 2,362.50 = Cr 4,402.20 + 3,748.50 +
    9,211.80 = 17,362.50.
    
    A salary-deducted loan instalment credits the employee-advances receivable
    rather than being treated as income. Penalties and absence deductions are parked
    in accrued expenses and registered as a configurable pointer, because whether
    they belong there or as a reduction of salary expense is a decision for the
    accountants, not a constant in code.
    Co-Authored-By: 's avatarClaude Opus 5 (1M context) <noreply@anthropic.com>
    7313a539
Name
Last commit
Last update
..
data Loading commit data...
Phase_02_001_seed_default_roles.php Loading commit data...
Phase_02_002_seed_super_admin.php Loading commit data...
Phase_03_001_seed_branches.php Loading commit data...
Phase_03_002_seed_governorates.php Loading commit data...
Phase_03_003_seed_countries.php Loading commit data...
Phase_03_004_seed_qualifications.php Loading commit data...
Phase_05_001_import_departments_and_titles.php Loading commit data...
Phase_05_001_seed_all_business_rules.php Loading commit data...
Phase_05_002_import_employees_from_registry.php Loading commit data...
Phase_05_002_seed_pricing_configs.php Loading commit data...
Phase_05_003_seed_performance_criteria.php Loading commit data...
Phase_05_003_seed_service_catalog.php Loading commit data...
Phase_05_004_import_work_schedules.php Loading commit data...
Phase_05_005_seed_shift_definitions.php Loading commit data...
Phase_06_001_seed_field_types.php Loading commit data...
Phase_06_002_seed_form_schemas.php Loading commit data...
Phase_07_001_seed_workflow_definitions.php Loading commit data...
Phase_100_001_seed_board_offer_tiers.php Loading commit data...
Phase_100_001_seed_revenue_posting_engine.php Loading commit data...
Phase_100_002_grant_revenue_mapping_permissions.php Loading commit data...
Phase_100_002_seed_sheraton_offers_2026.php Loading commit data...
Phase_101_001_provision_employee_accounts.php Loading commit data...
Phase_101_001_seed_full_cycle_accounts.php Loading commit data...
Phase_101_002_seed_full_cycle_streams.php Loading commit data...
Phase_102_001_rebuild_balance_caches.php Loading commit data...
Phase_102_002_seed_payroll_deduction_pointers.php Loading commit data...
Phase_105_001_fix_role_access_gaps.php Loading commit data...
Phase_11_001_seed_payment_methods.php Loading commit data...
Phase_15_001_seed_sms_templates.php Loading commit data...
Phase_15_002_seed_report_definitions.php Loading commit data...
Phase_16_001_seed_branding_config.php Loading commit data...
Phase_17_001_seed_sport_disciplines.php Loading commit data...
Phase_17_002_seed_facilities.php Loading commit data...
Phase_17_003_seed_sports_business_rules.php Loading commit data...
Phase_17_004_seed_sports_service_catalog.php Loading commit data...
Phase_18_001_seed_academies_and_levels.php Loading commit data...
Phase_19_001_seed_player_form_schemas.php Loading commit data...
Phase_19_002_seed_sports_report_definitions.php Loading commit data...
Phase_19_003_seed_sports_sms_templates.php Loading commit data...
Phase_22_001_seed_activity_pricing.php Loading commit data...
Phase_25_001_seed_inventory_categories.php Loading commit data...
Phase_25_002_seed_inventory_business_rules.php Loading commit data...
Phase_25_003_seed_default_warehouses.php Loading commit data...
Phase_28_001_seed_hr_workflow_definitions.php Loading commit data...
Phase_28_002_seed_hr_leave_types.php Loading commit data...
Phase_28_003_seed_hr_system_config.php Loading commit data...
Phase_28_004_seed_hr_salary_structure.php Loading commit data...
Phase_28_005_seed_hr_holidays.php Loading commit data...
Phase_28_006_seed_hr_work_schedules.php Loading commit data...
Phase_28_007_seed_hr_sms_templates.php Loading commit data...
Phase_33_001_seed_chart_of_accounts.php Loading commit data...
Phase_33_020_seed_journal_types.php Loading commit data...
Phase_34_001_seed_procurement_workflow_definitions.php Loading commit data...
Phase_34_002_seed_procurement_config.php Loading commit data...
Phase_36_001_seed_expanded_chart_of_accounts.php Loading commit data...
Phase_36_002_seed_fiscal_year.php Loading commit data...
Phase_36_003_seed_sync_gl_from_existing_data.php Loading commit data...
Phase_38_001_seed_cashier_permissions.php Loading commit data...
Phase_39_001_seed_form_session_rules.php Loading commit data...
Phase_39_001_seed_support_permissions.php Loading commit data...
Phase_40_001_seed_master_document_compliance.php Loading commit data...
Phase_41_001_seed_unification_rules.php Loading commit data...
Phase_41_002_seed_complete_service_catalog.php Loading commit data...
Phase_42_001_seed_egyptian_chart_of_accounts.php Loading commit data...
Phase_43_001_seed_full_chart_of_accounts.php Loading commit data...
Phase_44_001_seed_trial_balance_2024_2025.php Loading commit data...
Phase_45_001_seed_complete_accounting_data.php Loading commit data...
Phase_46_001_seed_subscription_rates_and_prices.php Loading commit data...
Phase_50_001_seed_alert_rules.php Loading commit data...
Phase_52_001_seed_facility_pricing_rules.php Loading commit data...
Phase_56_001_seed_movement_types.php Loading commit data...
Phase_63_012_seed_notification_triggers.php Loading commit data...
Phase_64_001_seed_seasonal_pricing_rules.php Loading commit data...
Phase_70_001_seed_swimming_pool.php Loading commit data...
Phase_70_002_seed_pool_grid_zones.php Loading commit data...
Phase_70_003_seed_full_sports_activity.php Loading commit data...
Phase_71_001_seed_expanded_roles.php Loading commit data...
Phase_71_002_seed_permission_dependencies.php Loading commit data...
Phase_72_001_seed_treasuries.php Loading commit data...
Phase_72_002_seed_treasury_permissions.php Loading commit data...
Phase_73_001_seed_locker_and_referral_permissions.php Loading commit data...
Phase_75_001_seed_updated_roles.php Loading commit data...
Phase_80_001_seed_all_academy_pricing.php Loading commit data...
Phase_80_002_seed_additional_disciplines.php Loading commit data...
Phase_86_001_populate_program_pricing_from_groups.php Loading commit data...
Phase_88_001_seed_tournament_bot_players.php Loading commit data...
Phase_95_001_seed_rental_vat_rule.php Loading commit data...
Phase_96_001_seed_rental_bank_rate_rule.php Loading commit data...
Phase_96_002_seed_pool_lane_pricing.php Loading commit data...
Phase_96_003_seed_swimming_academy_programs.php Loading commit data...
Phase_96_004_seed_swimming_teams_programs.php Loading commit data...
Phase_99_003_seed_regulatory_discounts.php Loading commit data...