Military Dity Move Calculator

Military DITY Move Calculator – Estimate Your Reimbursement :root { –primary-color: #004a99; –secondary-color: #343a40; –success-color: #28a745; –light-gray: #f8f9fa; –white: #ffffff; –border-color: #dee2e6; –shadow-color: rgba(0, 0, 0, 0.1); } body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; line-height: 1.6; color: var(–secondary-color); background-color: var(–light-gray); margin: 0; padding: 20px; display: flex; flex-direction: column; align-items: center; } .container { width: 100%; max-width: 980px; background-color: var(–white); padding: 30px; border-radius: 8px; box-shadow: 0 4px 15px var(–shadow-color); margin-bottom: 30px; } h1, h2, h3 { color: var(–primary-color); text-align: center; margin-bottom: 20px; } h1 { font-size: 2.2em; } h2 { font-size: 1.8em; border-bottom: 2px solid var(–primary-color); padding-bottom: 10px; margin-top: 30px; } h3 { font-size: 1.4em; margin-top: 25px; margin-bottom: 15px; color: var(–primary-color); } .calculator-wrapper { background-color: var(–white); padding: 30px; border-radius: 8px; box-shadow: 0 2px 10px var(–shadow-color); margin-bottom: 30px; } .input-group { margin-bottom: 20px; width: 100%; } .input-group label { display: block; margin-bottom: 8px; font-weight: bold; color: var(–primary-color); } .input-group input[type="number"], .input-group input[type="text"], .input-group select { width: calc(100% – 24px); padding: 12px; border: 1px solid var(–border-color); border-radius: 4px; font-size: 1em; box-sizing: border-box; } .input-group select { cursor: pointer; } .input-group small { display: block; margin-top: 8px; color: #6c757d; font-size: 0.9em; } .error-message { color: #dc3545; font-size: 0.9em; margin-top: 5px; height: 1.2em; } .button-group { display: flex; gap: 10px; justify-content: center; margin-top: 25px; flex-wrap: wrap; } button { padding: 12px 25px; border: none; border-radius: 5px; cursor: pointer; font-size: 1em; font-weight: bold; transition: background-color 0.3s ease, transform 0.2s ease; color: var(–white); background-color: var(–primary-color); } button:hover { background-color: #003366; transform: translateY(-1px); } button.reset-button { background-color: #6c757d; } button.reset-button:hover { background-color: #5a6268; } button.copy-button { background-color: #17a2b8; } button.copy-button:hover { background-color: #138496; } .results-container { margin-top: 30px; padding: 25px; border: 1px solid var(–border-color); border-radius: 8px; background-color: var(–light-gray); text-align: center; } .results-container h3 { margin-top: 0; margin-bottom: 20px; } .primary-result { font-size: 2.5em; font-weight: bold; color: var(–primary-color); background-color: #e0f7fa; padding: 15px 25px; border-radius: 6px; margin-bottom: 20px; display: inline-block; } .intermediate-results { margin-top: 20px; display: flex; justify-content: space-around; flex-wrap: wrap; gap: 15px; } .intermediate-result-item { text-align: center; padding: 10px 15px; background-color: var(–white); border: 1px solid var(–border-color); border-radius: 5px; flex: 1; min-width: 150px; } .intermediate-result-item strong { display: block; font-size: 1.3em; color: var(–primary-color); margin-bottom: 5px; } .intermediate-result-item small { font-size: 0.95em; color: #6c757d; } .formula-explanation { margin-top: 20px; font-size: 0.95em; color: #555; border-top: 1px dashed #ccc; padding-top: 15px; } .chart-container { margin-top: 30px; padding: 20px; background-color: var(–white); border-radius: 8px; box-shadow: 0 2px 10px var(–shadow-color); text-align: center; } .chart-container h3 { margin-top: 0; } canvas { max-width: 100%; height: auto; } table { width: 100%; border-collapse: collapse; margin-top: 20px; font-size: 0.95em; } th, td { padding: 12px; text-align: left; border-bottom: 1px solid var(–border-color); } th { background-color: var(–primary-color); color: var(–white); font-weight: bold; } td { background-color: var(–white); } tr:nth-child(even) td { background-color: var(–light-gray); } caption { caption-side: top; font-weight: bold; margin-bottom: 10px; color: var(–primary-color); text-align: left; font-size: 1.1em; } .article-content { width: 100%; max-width: 980px; background-color: var(–white); padding: 30px; border-radius: 8px; box-shadow: 0 4px 15px var(–shadow-color); margin-top: 30px; text-align: left; } .article-content p, .article-content ul, .article-content ol { margin-bottom: 15px; } .article-content ul, .article-content ol { padding-left: 25px; } .article-content li { margin-bottom: 8px; } .article-content a { color: var(–primary-color); text-decoration: none; font-weight: bold; } .article-content a:hover { text-decoration: underline; } .faq-list .faq-item { margin-bottom: 15px; border-left: 3px solid var(–primary-color); padding-left: 15px; background-color: var(–light-gray); padding-top: 10px; padding-bottom: 10px; border-radius: 4px; } .faq-list .faq-item strong { display: block; color: var(–primary-color); margin-bottom: 5px; } .related-tools { margin-top: 30px; padding: 20px; background-color: var(–light-gray); border-radius: 8px; border: 1px solid var(–border-color); } .related-tools h3 { margin-top: 0; text-align: left; border-bottom: 1px dashed var(–primary-color); padding-bottom: 8px; } .related-tools ul { list-style: none; padding-left: 0; } .related-tools li { margin-bottom: 10px; } .related-tools a { font-weight: bold; } @media (max-width: 768px) { h1 { font-size: 1.8em; } h2 { font-size: 1.5em; } h3 { font-size: 1.2em; } .container, .calculator-wrapper, .article-content { padding: 20px; } .button-group { flex-direction: column; align-items: center; } .primary-result { font-size: 2em; } .intermediate-results { flex-direction: column; align-items: center; } .intermediate-result-item { width: 80%; } }

Military DITY Move Calculator

Estimate your Personally Procured Move (PPM) reimbursement accurately.

DITY Move Reimbursement Calculator

Enter the total weight in pounds (lbs) of your belongings shipped. Exclude packing materials.
Enter the total weight in pounds (lbs) including packing materials. This is important for calculating void weight.
Enter the distance in miles (mi) from your origin to your destination.
Select the date your belongings were shipped.
Army Navy Air Force Marine Corps Coast Guard Select your branch of service.
Enter your rank or pay grade (e.g., E-5, O-3, W-2).
Yes No Indicates if this is a dependent move.
Enter the number of days you claimed Temporary Lodging Allowance (TLA) or Temporary Lodging Expense (TLE).
Enter the daily TLA/TLE rate you received in USD ($).
Enter the total amount spent on approved expenses with receipts (e.g., packing supplies, dolly rental) in USD ($).

Your Estimated DITY Move Reimbursement

$0.00
$0.00 Weight Allowance (PPM)
$0.00 Reimbursement Rate Per Pound
$0.00 TLA/TLE Reimbursement
How it's calculated:

Your DITY move reimbursement is calculated by multiplying your total shipment weight (net) by a government-determined rate per pound, adding your TLA/TLE reimbursement based on days and daily rate, and including other approved expenses with receipts. The government rate per pound is determined by the Services and changes periodically. This calculator uses estimated rates based on recent data. Void weight (Gross – Net) is also factored into the official calculation to ensure fairness.

Key Assumptions

  • Estimated Reimbursement Rate Per Pound: $X.XX
  • Void Weight Percentage: Y.Y%
  • Applicable Per Diem/TLA/TLE Rules Followed

DITY Move Reimbursement Breakdown

Visualizing your estimated reimbursement components.

Weight Allowance vs. Actual Shipped Weight

Comparing your shipped weight against potential weight allowances.

Weight Allowance Table

The following table shows the typical weight allowances based on rank and dependents. Your actual reimbursement is based on the weight you actually ship, up to the maximum allowance.

Weight Allowance Chart (LBS)
Rank / Pay Grade Without Dependents With Dependents
E-1 to E-48,00011,000
E-5 to E-69,00013,000
E-7 to E-9, W-1 to W-511,00015,000
O-1 to O-311,00015,000
O-413,00017,000
O-5 and above15,00019,000

Military DITY Move Calculator: Understanding Your Personally Procured Move (PPM) Reimbursement

What is a Military DITY Move Calculator?

A Military DITY Move Calculator, more accurately termed a Personally Procured Move (PPM) calculator, is an essential tool for service members planning or executing a Permanent Change of Station (PCS) move. Instead of relying on government-contracted movers, a PPM allows you to manage your own move, pack your belongings, and arrange transportation. The DITY Move Calculator helps estimate the reimbursement you can expect from the Department of Defense (DoD) for undertaking this responsibility. This calculation is crucial for budgeting, understanding your financial obligations, and maximizing your benefit.

Who should use it: Any active-duty service member, regardless of branch (Army, Navy, Air Force, Marines, Coast Guard), who is considering or has already executed a PPM for their PCS. It's particularly useful for those looking to offset moving costs or potentially profit from managing their move efficiently.

Common misconceptions:

  • Myth: You always make money on a DITY move. Reality: While possible, it depends heavily on efficient packing, managing expenses, and current reimbursement rates. Overestimating weight or underestimating costs can lead to less reimbursement than expected.
  • Myth: The government pays for everything. Reality: Reimbursement is based on specific allowances and rates. Expenses beyond these allowances are out-of-pocket.
  • Myth: All weight is reimbursed. Reality: Reimbursement is capped by weight allowances based on rank and dependents. You are paid for the weight you ship, up to your authorized limit.

PPM Reimbursement Formula and Mathematical Explanation

The core of the PPM reimbursement calculation involves several components designed to compensate service members for managing their own move. While the exact formulas and rates are governed by DoD regulations (like the Joint Travel Regulations – JTR), a simplified breakdown is as follows:

Primary Reimbursement Calculation:

Estimated Reimbursement = (Total Net Weight Shipped * Reimbursement Rate Per Pound) + TLA/TLE Reimbursement + Other Authorized Expenses (with receipts)

Let's break down the variables:

PPM Reimbursement Variables
Variable Meaning Unit Typical Range / Notes
Total Net Weight Shipped The actual weight of your personal property, excluding packing materials, crating, etc. Pounds (lbs) 0 – Max Weight Allowance
Total Gross Weight Shipped The actual weight of your personal property including all packing materials. Used to calculate void weight. Pounds (lbs) Generally higher than Net Weight
Void Weight Gross Weight – Net Weight. The weight of packing materials. Pounds (lbs) Non-reimbursable weight
Reimbursement Rate Per Pound A DoD-set rate that fluctuates annually and varies slightly by service. It represents the government's cost-per-pound estimate for moving services. USD ($) per Pound Estimated $0.50 – $0.80 (check current rates)
Distance of Move The one-way distance between the origin and destination points of the move. Miles (mi) Varies significantly
Max Weight Allowance The maximum weight the DoD will pay to ship, based on rank and dependency status. Pounds (lbs) 8,000 lbs (E-1/Single) to 19,000 lbs (O-5+/With Dependents)
TLA/TLE Reimbursement Reimbursement for temporary lodging expenses incurred while awaiting or vacating housing. USD ($) (TLA/TLE Rate Per Day * Number of Authorized Days)
TLA/TLE Rate Per Day The daily allowance provided for lodging, often based on location and family size. USD ($) per Day Varies significantly by location
Total TLA/TLE Days The number of days the service member is authorized to claim TLA/TLE. Days Typically 5-10 days, dependent on circumstances
Other Authorized Expenses Approved costs directly related to the PPM, such as rental trucks, dollies, packing materials, etc., for which receipts are required. USD ($) Variable, requires documentation
Departure Date Date the move commenced, used to determine applicable rates and regulations. Date N/A
Service Branch Branch of service may influence specific policies or allowance rates. Text ARMY, NAVY, USAF, USMC, USCG

Important Note: The reimbursement rate per pound is often derived from calculations involving the cost of moving a certain weight over a specific distance, factoring in void weight percentages. The DoD aims to reimburse service members close to what it would cost them to move the property via government contract, but not necessarily more. This military dity move calculator provides an estimate based on available data and typical rates.

Practical Examples (Real-World Use Cases)

Understanding the military dity move calculator is best done through examples. These scenarios illustrate how different inputs affect the estimated reimbursement.

Example 1: Junior Enlisted Move (Lower Weight, Shorter Distance)

Scenario: A junior enlisted service member (E-4) with no dependents is moving from Fort Jackson, SC to San Diego, CA. They carefully packed and shipped 7,500 lbs of belongings (net weight) and 8,000 lbs (gross weight). The distance is 2,500 miles. They stayed 5 nights in temporary lodging at a rate of $130/night and had $250 in expenses for packing supplies.

Inputs:

  • Rank: E-4
  • Dependents: No
  • Net Weight: 7,500 lbs
  • Gross Weight: 8,000 lbs
  • Distance: 2,500 miles
  • TLA/TLE Days: 5
  • TLA/TLE Rate: $130.00
  • Other Expenses: $250.00
  • Departure Date: (Assumed current year)
  • Service Branch: ARMY

Assumptions (Estimated for Calculator):

  • Reimbursement Rate Per Pound: $0.65
  • Max Weight Allowance (E-4, No Dependents): 8,000 lbs

Calculation Steps:

  1. Weight Allowance: 8,000 lbs
  2. Reimbursement based on shipped weight: 7,500 lbs * $0.65/lb = $4,875.00
  3. TLA/TLE Reimbursement: 5 days * $130.00/day = $650.00
  4. Total Reimbursement = $4,875.00 + $650.00 + $250.00 = $6,275.00

Interpretation: The service member shipped less than their maximum allowance. By managing their own move and keeping expenses reasonable, they receive reimbursement close to the estimated cost the government would have paid for movers, plus temporary lodging and supply costs. This military dity move calculator helps confirm this estimate.

Example 2: Senior Officer Move (Higher Weight, Longer Distance, With Dependents)

Scenario: A senior officer (O-5) with dependents is relocating from Norfolk, VA to Bremerton, WA. They shipped 14,000 lbs (net weight) and 15,500 lbs (gross weight). The distance is approximately 3,000 miles. They utilized 7 days of TLA at $175/night and had $700 in approved expenses (rental truck, packing materials).

Inputs:

  • Rank: O-5
  • Dependents: Yes
  • Net Weight: 14,000 lbs
  • Gross Weight: 15,500 lbs
  • Distance: 3,000 miles
  • TLA/TLE Days: 7
  • TLA/TLE Rate: $175.00
  • Other Expenses: $700.00
  • Departure Date: (Assumed current year)
  • Service Branch: NAVY

Assumptions (Estimated for Calculator):

  • Reimbursement Rate Per Pound: $0.70
  • Max Weight Allowance (O-5, With Dependents): 19,000 lbs

Calculation Steps:

  1. Weight Allowance: 19,000 lbs
  2. Reimbursement based on shipped weight: 14,000 lbs * $0.70/lb = $9,800.00
  3. TLA/TLE Reimbursement: 7 days * $175.00/day = $1,225.00
  4. Total Reimbursement = $9,800.00 + $1,225.00 + $700.00 = $11,725.00

Interpretation: Even though the officer had a higher weight allowance, they were reimbursed based on the 14,000 lbs they actually shipped. This example demonstrates that maximizing reimbursement involves shipping efficiently within your allowance. The military dity move calculator provides a clear projection based on these inputs.

How to Use This Military DITY Move Calculator

Using this **military dity move calculator** is straightforward. Follow these steps to get an accurate estimate of your potential reimbursement:

  1. Enter Total Weight (Net & Gross): Accurately weigh your belongings. The 'Net' weight is crucial for reimbursement calculation, while 'Gross' helps determine packing material weight.
  2. Input Move Distance: Provide the total one-way mileage from your origin to your destination.
  3. Select Departure Date: This helps determine the applicable reimbursement rates and regulations.
  4. Specify Service Branch & Rank: Your branch and rank/pay grade determine your maximum weight allowance.
  5. Indicate Dependent Status: This also affects your maximum weight allowance.
  6. Enter TLA/TLE Information: Input the number of days and the daily rate for temporary lodging expenses claimed.
  7. Add Other Expenses: Include the total value of all receipts for approved moving-related expenses.
  8. Click "Calculate Reimbursement": The calculator will process your inputs.

How to Read Results:

  • Primary Result (Highlighted): This is your estimated total reimbursement, combining weight-based pay, TLA/TLE, and other expenses.
  • Intermediate Values: These show your calculated weight allowance, the crucial reimbursement rate per pound used, and your TLA/TLE reimbursement amount.
  • Key Assumptions: Review the estimated reimbursement rate per pound and void weight percentage used. These are based on typical DoD figures and can vary.

Decision-Making Guidance: Compare the estimated reimbursement to your anticipated out-of-pocket moving costs. If the costs significantly exceed the estimate, a PPM might not be financially advantageous. If the estimate is higher than your costs, a PPM could provide additional funds. Always consult official DoD resources (like the JTR) and your local transportation office for definitive guidance.

Key Factors That Affect PPM Reimbursement Results

Several factors significantly influence the final reimbursement amount for a military DITY move (PPM). Understanding these can help you plan better:

  1. Actual Shipped Weight (Net): This is the primary driver of the weight-based portion of your reimbursement. Shipping more weight (up to your allowance) generally leads to higher reimbursement. Accurate weighing is paramount.
  2. Reimbursement Rate Per Pound: This rate is set by the DoD and can change annually. It's the multiplier for your net shipped weight. Higher rates mean higher reimbursement. Tracking these updates is important.
  3. Maximum Weight Allowance: You are only reimbursed for the weight you ship, but your *potential* reimbursement is capped by your allowance based on rank and dependents. Shipping significantly less than your allowance means leaving potential reimbursement on the table.
  4. Temporary Lodging Expenses (TLA/TLE): The number of authorized days and the daily rate directly impact this component. Factors like availability of government quarters and geographical location influence the daily rate.
  5. Other Authorized Expenses (with Receipts): Costs like packing materials, specialized equipment rental (dolly, hand truck), and potentially fuel (if using a personal vehicle for towing a trailer) can be reimbursed. Keep meticulous records and receipts for all approved expenses.
  6. Void Weight: While not directly calculated in this simplified tool, the DoD uses void weight (Gross Weight – Net Weight) to derive the reimbursement rate. A high void weight percentage (meaning a lot of packing material relative to goods) can effectively reduce the value of the goods per pound shipped, influencing the government's cost assessment.
  7. Distance of Move: While not a direct multiplier in the basic PPM formula, distance is a factor in how the DoD establishes its cost estimates and reimbursement rates. Longer moves are generally more expensive for the government to facilitate via contracted movers.
  8. Regulatory Changes: DoD travel regulations and PPM policies can change. Staying informed about the latest Joint Travel Regulations (JTR) is crucial for understanding entitlements and procedures.

Frequently Asked Questions (FAQ)

Q: What is the difference between DITY and PPM?

A: DITY stands for "Do It Yourself" move, which is the older term. PPM (Personally Procured Move) is the current official term used by the DoD for when service members manage their own moving of household goods.

Q: How do I get my weight tickets for a PPM?

A: You need official weight tickets from certified weigh stations. Typically, you'll need a tare weight (empty vehicle/trailer) and a full weight (loaded vehicle/trailer) for self-hauls, or a single ticket from the commercial mover/freight line for non-company moves. Ensure they are properly documented.

Q: Can I make money on a DITY/PPM move?

A: It's possible, but not guaranteed. If your actual moving costs (supplies, truck rental, TLA/TLE) are less than the government's reimbursement, you may realize a profit. However, underestimating costs or overestimating weight can lead to a net loss.

Q: What expenses are covered in a PPM?

A: Approved expenses typically include packing materials (boxes, tape, bubble wrap), rental of moving equipment (dollies, hand trucks), trailer rental fees, and authorized TLA/TLE. Always confirm with your local transportation office.

Q: Is the reimbursement rate per pound the same for all branches?

A: The base reimbursement rate is standardized across the DoD, but specific policies or interpretations might vary slightly. The calculator uses a generalized rate, but your local TMO office has the definitive numbers.

Q: What happens if I ship more than my weight allowance?

A: You will be reimbursed based on the weight you actually ship, up to your maximum authorized weight allowance. Any weight exceeding this allowance is not reimbursed.

Q: How long does it take to get PPM reimbursement?

A: Processing times can vary. After submitting all required documentation (weight tickets, receipts, DD Form 2760, etc.), reimbursement typically takes several weeks to a few months, depending on the service and base.

Q: Do I need to use specific movers or vendors for a PPM?

A: No, for a PPM, you are responsible for arranging all aspects of the move. You can rent from any reputable company, buy supplies from various retailers, and use any certified weigh station, provided the expenses are authorized and documented.

© Your Financial Planning Site. All rights reserved.

Disclaimer: This calculator provides an estimation based on available data and typical rates. It is not official financial advice. Always consult with your local Transportation Management Office (TMO) and official DoD regulations for precise entitlements.

var estimatedReimbursementRatePerPound = 0.68; // Default estimated rate, can be updated annually var estimatedVoidWeightPercentage = 15; // Default estimated void weight percentage function validateInput(id, errorId, minValue, maxValue, isRequired = true) { var inputElement = document.getElementById(id); var errorElement = document.getElementById(errorId); var value = parseFloat(inputElement.value); var isValid = true; errorElement.textContent = ""; // Clear previous error if (isRequired && (inputElement.value === null || inputElement.value.trim() === "")) { errorElement.textContent = "This field is required."; isValid = false; } else if (!isNaN(value)) { if (minValue !== null && value maxValue) { errorElement.textContent = "Value exceeds maximum limit."; isValid = false; } } else if (isRequired) { errorElement.textContent = "Please enter a valid number."; isValid = false; } return isValid; } function getRankAllowance(rank, isDependent) { var rankUpper = rank.toUpperCase().trim(); var allowance = 8000; // Default for E-1 to E-4 without dependents if (rankUpper.startsWith('E-') && !isNaN(parseInt(rankUpper.split('-')[1]))) { var grade = parseInt(rankUpper.split('-')[1]); if (grade >= 1 && grade = 5 && grade = 1 && grade <= 3) allowance = isDependent ? 15000 : 11000; else if (grade === 4) allowance = isDependent ? 17000 : 13000; else allowance = isDependent ? 19000 : 15000; // O-5 and above } else { // Fallback for unusual ranks or if not parsed, assume standard enlisted allowance allowance = isDependent ? 11000 : 8000; } // Ensure minimums are met based on common allowances if(rankUpper.startsWith('E-') && parseInt(rankUpper.split('-')[1]) <= 6) { allowance = Math.max(allowance, isDependent ? 13000 : 9000); } else if (rankUpper.startsWith('W-') || rankUpper.startsWith('O-')) { allowance = Math.max(allowance, isDependent ? 15000 : 11000); } return allowance; } function formatCurrency(amount) { return "$" + amount.toFixed(2); } function updateWeightAllowanceTable() { var rankInput = document.getElementById("rank").value; var isDependentInput = document.getElementById("isDependent").value === "true"; var allowance = getRankAllowance(rankInput, isDependentInput); var tableBody = document.getElementById("weightAllowanceTableBody"); var rows = tableBody.getElementsByTagName("tr"); for(var i = 0; i < rows.length; i++) { var cells = rows[i].getElementsByTagName("td"); var rankText = cells[0].textContent.toLowerCase(); var depAllowance = parseInt(cells[2].textContent.replace(/,/g, '')) || 0; var noDepAllowance = parseInt(cells[1].textContent.replace(/,/g, '')) || 0; if (rankText.includes("e-1 to e-4") && (rankInput.startsWith("e-1") || rankInput.startsWith("e-2") || rankInput.startsWith("e-3") || rankInput.startsWith("e-4"))) { cells[isDependentInput ? 2 : 1].style.fontWeight = "bold"; cells[isDependentInput ? 2 : 1].style.color = "var(–primary-color)"; } else if (rankText.includes("e-5 to e-6") && (rankInput.startsWith("e-5") || rankInput.startsWith("e-6"))) { cells[isDependentInput ? 2 : 1].style.fontWeight = "bold"; cells[isDependentInput ? 2 : 1].style.color = "var(–primary-color)"; } else if ((rankText.includes("e-7") || rankText.includes("e-8") || rankText.includes("e-9") || rankText.includes("w-")) && (rankInput.startsWith("e-7") || rankInput.startsWith("e-8") || rankInput.startsWith("e-9") || rankInput.startsWith("w-"))) { cells[isDependentInput ? 2 : 1].style.fontWeight = "bold"; cells[isDependentInput ? 2 : 1].style.color = "var(–primary-color)"; } else if (rankText.includes("o-1 to o-3") && (rankInput.startsWith("o-1") || rankInput.startsWith("o-2") || rankInput.startsWith("o-3"))) { cells[isDependentInput ? 2 : 1].style.fontWeight = "bold"; cells[isDependentInput ? 2 : 1].style.color = "var(–primary-color)"; } else if (rankText.includes("o-4") && rankInput.startsWith("o-4")) { cells[isDependentInput ? 2 : 1].style.fontWeight = "bold"; cells[isDependentInput ? 2 : 1].style.color = "var(–primary-color)"; } else if (rankText.includes("o-5") && rankInput.startsWith("o-5")) { cells[isDependentInput ? 2 : 1].style.fontWeight = "bold"; cells[isDependentInput ? 2 : 1].style.color = "var(–primary-color)"; } else { // Reset other rows cells[1].style.fontWeight = "normal"; cells[1].style.color = "#333"; cells[2].style.fontWeight = "normal"; cells[2].style.color = "#333"; } } } function calculateDityMove() { var isValid = true; isValid = validateInput("weightNet", "weightNetError", 0) && isValid; isValid = validateInput("weightGross", "weightGrossError", 0) && isValid; isValid = validateInput("distance", "distanceError", 0) && isValid; isValid = validateInput("departureDate", "departureDateError", null, null, true) && isValid; isValid = validateInput("rank", "rankError", null, null, true) && isValid; isValid = validateInput("totalTapsDays", "totalTapsDaysError", 0) && isValid; isValid = validateInput("tapsRate", "tapsRateError", 0) && isValid; isValid = validateInput("otherExpenseReceipts", "otherExpenseReceiptsError", 0) && isValid; if (!isValid) { document.getElementById("results-container").style.display = "none"; return; } var weightNet = parseFloat(document.getElementById("weightNet").value); var weightGross = parseFloat(document.getElementById("weightGross").value); var distance = parseFloat(document.getElementById("distance").value); var departureDate = new Date(document.getElementById("departureDate").value); var rank = document.getElementById("rank").value; var isDependent = document.getElementById("isDependent").value === "true"; var totalTapsDays = parseFloat(document.getElementById("totalTapsDays").value); var tapsRate = parseFloat(document.getElementById("tapsRate").value); var otherExpenseReceipts = parseFloat(document.getElementById("otherExpenseReceipts").value); var maxWeightAllowance = getRankAllowance(rank, isDependent); var voidWeight = weightGross – weightNet; var voidWeightPercentage = (voidWeight / weightGross) * 100; // Use estimated rate, actual rates can be looked up on military websites var reimbursementRatePerPound = estimatedReimbursementRatePerPound; // Using the global estimated rate var weightReimbursement = Math.min(weightNet, maxWeightAllowance) * reimbursementRatePerPound; var tapsReimbursement = totalTapsDays * tapsRate; var totalReimbursement = weightReimbursement + tapsReimbursement + otherExpenseReceipts; document.getElementById("primaryResult").textContent = formatCurrency(totalReimbursement); document.getElementById("weightAllowable").textContent = formatCurrency(maxWeightAllowance); document.getElementById("reimbursementRate").textContent = formatCurrency(reimbursementRatePerPound) + "/lb"; document.getElementById("tapsReimbursement").textContent = formatCurrency(tapsReimbursement); var assumptionList = document.getElementById("assumptionList"); assumptionList.innerHTML = `
  • Estimated Reimbursement Rate Per Pound: ${formatCurrency(reimbursementRatePerPound)}
  • Void Weight Percentage: ${voidWeightPercentage.toFixed(1)}%
  • Max Weight Allowance: ${maxWeightAllowance.toLocaleString()} lbs
  • Maximum Possible Weight Reimbursement: ${formatCurrency(Math.min(weightNet, maxWeightAllowance) * reimbursementRatePerPound)}
  • `; document.getElementById("results-container").style.display = "block"; updateCharts(totalReimbursement, weightReimbursement, tapsReimbursement, otherExpenseReceipts, weightNet, maxWeightAllowance); updateWeightAllowanceTable(); // Update table highlighting } function resetCalculator() { document.getElementById("weightNet").value = 5000; document.getElementById("weightGross").value = 5500; document.getElementById("distance").value = 1200; document.getElementById("departureDate").value = "2023-10-27"; document.getElementById("serviceBranch").value = "ARMY"; document.getElementById("rank").value = "E-6"; document.getElementById("isDependent").value = "true"; document.getElementById("totalTapsDays").value = 5; document.getElementById("tapsRate").value = 150.00; document.getElementById("otherExpenseReceipts").value = 300.00; document.getElementById("weightNetError").textContent = ""; document.getElementById("weightGrossError").textContent = ""; document.getElementById("distanceError").textContent = ""; document.getElementById("departureDateError").textContent = ""; document.getElementById("rankError").textContent = ""; document.getElementById("totalTapsDaysError").textContent = ""; document.getElementById("tapsRateError").textContent = ""; document.getElementById("otherExpenseReceiptsError").textContent = ""; document.getElementById("results-container").style.display = "none"; clearCharts(); } function copyResults() { var primaryResult = document.getElementById("primaryResult").textContent; var weightAllowance = document.getElementById("weightAllowable").textContent; var reimbursementRate = document.getElementById("reimbursementRate").textContent; var tapsReimbursement = document.getElementById("tapsReimbursement").textContent; var assumptions = Array.from(document.querySelectorAll("#assumptionList li")).map(li => li.textContent).join('\n'); var textToCopy = `— DITY Move Reimbursement Estimate —\n\n` + `Estimated Total Reimbursement: ${primaryResult}\n` + `Weight Allowance: ${weightAllowance}\n` + `Reimbursement Rate: ${reimbursementRate}\n` + `TLA/TLE Reimbursement: ${tapsReimbursement}\n\n` + `Assumptions:\n${assumptions}`; navigator.clipboard.writeText(textToCopy).then(function() { alert('Results copied to clipboard!'); }).catch(function(err) { console.error('Failed to copy: ', err); alert('Failed to copy results. Please copy manually.'); }); } // Charting Logic var dityChart; var weightChart; function updateCharts(total, weight, taps, other, shippedWeight, maxAllowance) { var ctxDity = document.getElementById('dityMoveChart').getContext('2d'); if (dityChart) dityChart.destroy(); dityChart = new Chart(ctxDity, { type: 'bar', data: { labels: ['Weight Reimbursement', 'TLA/TLE Reimbursement', 'Other Expenses'], datasets: [{ label: 'Estimated Reimbursement Components', data: [ parseFloat(weight.toFixed(2)), parseFloat(taps.toFixed(2)), parseFloat(other.toFixed(2)) ], backgroundColor: [ 'rgba(0, 74, 153, 0.7)', // Primary Blue 'rgba(40, 167, 69, 0.7)', // Success Green 'rgba(26, 179, 148, 0.7)' // Teal ], borderColor: [ 'rgba(0, 74, 153, 1)', 'rgba(40, 167, 69, 1)', 'rgba(26, 179, 148, 1)' ], borderWidth: 1 }] }, options: { responsive: true, maintainAspectRatio: false, scales: { y: { beginAtZero: true, ticks: { callback: function(value) { return formatCurrency(value); } } } }, plugins: { legend: { display: true, position: 'top', }, tooltip: { callbacks: { label: function(context) { var label = context.dataset.label || "; if (label) { label += ': '; } if (context.parsed.y !== null) { label += formatCurrency(context.parsed.y); } return label; } } } } } }); var ctxWeight = document.getElementById('weightChart').getContext('2d'); if (weightChart) weightChart.destroy(); weightChart = new Chart(ctxWeight, { type: 'bar', data: { labels: ['Shipped Weight', 'Max Allowance'], datasets: [{ label: 'Weight Comparison (lbs)', data: [ parseFloat(shippedWeight.toFixed(0)), parseFloat(maxAllowance.toFixed(0)) ], backgroundColor: [ 'rgba(0, 74, 153, 0.7)', // Primary Blue 'rgba(255, 193, 7, 0.7)' // Warning Yellow ], borderColor: [ 'rgba(0, 74, 153, 1)', 'rgba(255, 193, 7, 1)' ], borderWidth: 1 }] }, options: { responsive: true, maintainAspectRatio: false, scales: { y: { beginAtZero: true, ticks: { callback: function(value) { return value.toLocaleString() + ' lbs'; } } } }, plugins: { legend: { display: true, position: 'top', }, tooltip: { callbacks: { label: function(context) { var label = context.dataset.label || "; if (label) { label += ': '; } if (context.parsed.y !== null) { label += context.parsed.y.toLocaleString() + ' lbs'; } return label; } } } } } }); } function clearCharts() { if (dityChart) dityChart.destroy(); if (weightChart) weightChart.destroy(); document.getElementById('dityMoveChart').getContext('2d').clearRect(0, 0, 1, 1); // Clear canvas content document.getElementById('weightChart').getContext('2d').clearRect(0, 0, 1, 1); } // Initialize current year in footer document.getElementById('currentYear').textContent = new Date().getFullYear(); // Initial calculation on load window.onload = function() { calculateDityMove(); updateWeightAllowanceTable(); // Ensure table is highlighted on load };

    Leave a Comment