Last active
March 12, 2024 20:45
-
-
Save Dalboz/a6b606027c5c8e819a0664afc9a0f787 to your computer and use it in GitHub Desktop.
depreciation calculation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function Calculate-Amortization { | |
param ( | |
[int]$assetNumber, | |
[double]$acquisitionCost, | |
[int]$usefulLife, | |
[string]$usefulLifeUnits, | |
[string]$depreciationStartDate, | |
[string]$capitalizationDate | |
) | |
# Convert date strings to DateTime objects | |
$depreciationStartDate = Get-Date $depreciationStartDate | |
$capitalizationDate = Get-Date $capitalizationDate | |
# Calculate annual depreciation | |
switch ($usefulLifeUnits) { | |
"months" { $annualDepreciation = $acquisitionCost / ($usefulLife / 12) } | |
"quarters" { $annualDepreciation = $acquisitionCost / ($usefulLife / 4) } | |
"days" { $annualDepreciation = $acquisitionCost / $usefulLife } | |
default { $annualDepreciation = $acquisitionCost / $usefulLife } | |
} | |
# Initialize an empty DataTable | |
$amortizationTable = New-Object System.Data.DataTable | |
$null = $amortizationTable.Columns.Add("Asset Number", [int]) | |
$null = $amortizationTable.Columns.Add("Date", [DateTime]) | |
$null = $amortizationTable.Columns.Add("Accumulated Depreciation", [double]) | |
$null = $amortizationTable.Columns.Add("Depreciation Expense", [double]) | |
$null = $amortizationTable.Columns.Add("Net Book Value", [double]) | |
$null = $amortizationTable.Columns.Add("Fiscal Year", [int]) | |
for ($period = 1; $period -le $usefulLife; $period++) { | |
# Calculate depreciation expense for the current period | |
switch ($usefulLifeUnits) { | |
"years" { $depreciationExpense = $annualDepreciation } | |
"months" { $depreciationExpense = $annualDepreciation / 12 } | |
"quarters" { $depreciationExpense = $annualDepreciation / 4 } | |
"days" { $depreciationExpense = $acquisitionCost / $usefulLife } | |
default { $depreciationExpense = $annualDepreciation } | |
} | |
# Calculate accumulated depreciation | |
$accumulatedDepreciation = $depreciationExpense * $period | |
# Calculate the date based on the useful life unit | |
switch ($usefulLifeUnits) { | |
"years" { $date = $capitalizationDate.AddYears($period - 1) } | |
"months" { $date = $capitalizationDate.AddMonths([int](365 / 12) * ($period - 1)) } | |
"quarters" { $date = $capitalizationDate.AddDays([int](365 / 4) * ($period - 1)) } | |
"days" { $date = $capitalizationDate.AddDays($period - 1) } | |
default { $date = $capitalizationDate.AddYears($period - 1) } | |
} | |
# Calculate net book value | |
$netBookValue = $acquisitionCost - $accumulatedDepreciation | |
# Calculate fiscal year | |
$fiscalYear = (1 + ($date.Month -ge 10)) + $date.Year | |
# Add row to the DataTable | |
$newRow = $amortizationTable.NewRow() | |
$newRow["Asset Number"] = $assetNumber | |
$newRow["Date"] = $date | |
$newRow["Accumulated Depreciation"] = $accumulatedDepreciation | |
$newRow["Depreciation Expense"] = $depreciationExpense | |
$newRow["Net Book Value"] = $netBookValue | |
$newRow["Fiscal Year"] = $fiscalYear | |
$null = $amortizationTable.Rows.Add($newRow) | |
} | |
return $amortizationTable | |
} | |
# Example usage | |
$assetNumber = 1 | |
$acquisitionCost = 10000.0 | |
$usefulLife = 60 | |
$usefulLifeUnits = "months" | |
$depreciationStartDate = '2021-01-01' | |
$capitalizationDate = '2021-01-01' | |
# Calculate amortization table | |
$amortizationTable = Calculate-Amortization -assetNumber $assetNumber -acquisitionCost $acquisitionCost -usefulLife $usefulLife -usefulLifeUnits $usefulLifeUnits -depreciationStartDate $depreciationStartDate -capitalizationDate $capitalizationDate | |
# Display the amortization table | |
Write-Host "`nAmortization Table:" | |
$amortizationTable | Format-Table |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from datetime import datetime, timedelta | |
import pandas as pd | |
def calculate_amortization(asset_number, acquisition_cost, useful_life, useful_life_units, depreciation_start_date, capitalization_date): | |
# Convert date strings to datetime objects | |
depreciation_start_date = datetime.strptime(depreciation_start_date, '%Y-%m-%d') | |
capitalization_date = datetime.strptime(capitalization_date, '%Y-%m-%d') | |
# Calculate annual depreciation | |
if useful_life_units == "months": | |
annual_depreciation = acquisition_cost / (useful_life / 12) | |
elif useful_life_units == "quarters": | |
annual_depreciation = acquisition_cost / (useful_life / 4) | |
elif useful_life_units == "days": | |
annual_depreciation = acquisition_cost / useful_life | |
else: | |
annual_depreciation = acquisition_cost / useful_life | |
# Initialize an empty DataFrame | |
amortization_table = pd.DataFrame(columns=['Asset Number', 'Date', 'Accumulated Depreciation', 'Depreciation Expense', 'Net Book Value', 'Fiscal Year']) | |
for period in range(1, useful_life + 1): | |
# Calculate depreciation expense for the current period | |
if useful_life_units == 'years': | |
depreciation_expense = annual_depreciation | |
elif useful_life_units == 'months': | |
depreciation_expense = annual_depreciation / 12 | |
elif useful_life_units == 'quarters': | |
depreciation_expense = annual_depreciation / 4 | |
elif useful_life_units == 'days': | |
depreciation_expense = acquisition_cost / useful_life # Adjust depreciation for 1 day useful life | |
else: | |
# Add more cases for other units if needed | |
depreciation_expense = annual_depreciation | |
# Calculate accumulated depreciation | |
accumulated_depreciation = depreciation_expense * period | |
# Calculate the date based on the useful life unit | |
if useful_life_units == 'years': | |
date = capitalization_date + timedelta(days=365 * (period - 1)) | |
elif useful_life_units == 'months': | |
date = capitalization_date + timedelta(days=int((365 / 12) * (period - 1))) | |
elif useful_life_units == 'quarters': | |
date = capitalization_date + timedelta(days=int((365 / 4) * (period - 1))) | |
elif useful_life_units == 'days': | |
date = capitalization_date + timedelta(days=period - 1) | |
else: | |
# Add more cases for other units if needed | |
date = capitalization_date + timedelta(days=365 * (period - 1)) | |
# Calculate net book value | |
net_book_value = acquisition_cost - accumulated_depreciation | |
# Calculate fiscal year | |
fiscal_year = (1 if date.month >= 10 else 0) + date.year | |
# Append values to the table | |
row_data = pd.DataFrame({ | |
'Asset Number': [asset_number], | |
'Date': [date], | |
'Accumulated Depreciation': [accumulated_depreciation], | |
'Depreciation Expense': [depreciation_expense], | |
'Net Book Value': [net_book_value], | |
'Fiscal Year': [fiscal_year] | |
}) | |
amortization_table = pd.concat([amortization_table, row_data], ignore_index=True) | |
return amortization_table | |
# Example usage | |
asset_number = 1 | |
acquisition_cost = 10000.0 | |
useful_life = 60 | |
useful_life_units = "months" | |
depreciation_start_date = '2021-01-01' | |
capitalization_date = '2021-01-01' | |
# Calculate amortization table | |
amortization_table = calculate_amortization(asset_number, acquisition_cost, useful_life, useful_life_units, depreciation_start_date, capitalization_date) | |
# Display the amortization table | |
print("\nAmortization Table:") | |
print(amortization_table) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment