Automated form 40As

Recently, I had to produce form 40A’s in order to claim military leave. As a computer scientist, I found the process to be horrific and felt compelled to share my solution. I didn’t get much help with UTAPSWEB FOR IMAs CHEAT SHEET VERSION 101210. That document is filled with unhelpful and unprofessional statements like:

Changes made to Form 40As because you were just ‘trying something’ may not be able to be resolved.

Oh, well, I Am Alone once again. I’m a hacker, famous for ‘trying something’, well here goes . . .

Should you ever find yourself in this situation, navigate to “Automated Form 40s”:


From here, I had to look at the source code to decode the buttons. The icons kinda make sense, but they are about 10px high and don’t even have mouseover text. Ok, the source can’t lie:

Based on this, I clearly wanted the


. After clicking this and waiting for the long update to happen. You can select multiple 40As:


So from here, the


button looked like the next logical step. Make sure to allow popups (nice 1990s web-practices!). The result was an unexpected:


So that doesn’t work. Let’s look at the traffic and dive into the form. First, there is no form. They are counting on a click event with js in the div header.

So the important code is clearly in there, there are single click events, double-clicks and even an attempted contextmenu override.

onclick="javascript:igtree_nodeclick(event,'ctl00MainContentUltraWebTree1');" ondblclick="javascript:igtree_dblclick(event,'ctl00MainContentUltraWebTree1');" oncontextmenu="javascript:igtree_contextmenu(event,'ctl00MainContentUltraWebTree1');" onselectstart="javascript:igtree_selectStart();"

At this point, I’m getting in too deep and just need to get 16 IDTs printed. Clicking on one at a time will take 20 minutes, so I wrote an adobe script to automatically change the dates. Did anyone else have better luck on this? I’m considering writing a new front end to all of this that scrapes the back-end. Any other developers want to help me with that?

How much do IMA reservists make?

It is not easy to quickly decipher military pay tables for us IMAs. In order to do some recent financial planning, I had to calculate my pay. I’m an O-4 with between 14 and 16 years of service. Here is what I did.


You can find the official military pay tables from the DoD comptroller but I found to have the 2015 data that I couldn’t find on the official site.

Here, I saw that based on my years of service, my drill pay is \$962.83, which is 4 IDTs, or 16 hours, so I get paid \$60.17 an hour. For 48 IDT’s (Cat A), this means I get paid

$$ \frac{\text{drill pay}}{4} \times 48 = \$11,553.6 $$

for IDTs. Drill pay is higher than basic pay. I assume this is because drill pay is burdened by all the things you don’t get as an IMA: health benefits, BAH, BAS.

Annual Tour

Now, to calculate the annual tour (AT) we use the regular military pay tables. On the first page of the scale is your monthly military pay. First, find the pay that applies to you based on your rank and time in service. If you divide that number by 30, that gives you your daily pay. Multiply that number by the number of annual tour days you are required to do (14 in my case as a reservist) and you’ll have your before-tax annual tour pay.

$$ \frac{\$\,7221.22}{30} = \$\,240.71 \; \text{daily pay} $$

then $ \$ 240.71 \times 14 = \$ 3,369.90 $, which is appears to be exactly half of what I would get if I got IDT pay for the annual tour.

All together, this means \$15,000 a year in gross income from the reserves.

How do you value the retirement benefit?

To collect on retirement benefits, you have to attain age 60, not be entitled to receive military retired pay through any other provision of law and complete at least 20 years of qualifying uniformed service. So how much would I have to invest this year to have this benefit?

Should I make it to that age, on Tuesday, August 12, 2036, I will be 60 years old (21 years from now). Here I have to make some assumptions:

  • I retire as an O-6 in 6 years from now.
  • Officer pay rises with inflation
  • Discount rate of 6{aaa01f1184b23bc5204459599a780c2efd1a71f819cd2b338cab4b7a2f8e97d4}

So, 6 years from now O-6’s will be making a base salary of \$119,726.16. The defined benefit plan for DoD is 50{aaa01f1184b23bc5204459599a780c2efd1a71f819cd2b338cab4b7a2f8e97d4} highest salary or roughly \$60,000. In then-year dollars that would be \$71,479.65 a year. So, avoiding all fees, if I wanted to have enough cash to provide me with an annuity that paid \$71,479.65 a year in 2036, I would have to have \$1,191,327.50. So, if I wanted \$1,191,327.50 in 2036, how much would I have to save per year when I started the reserves? It is easy enough to compute the payment amount for a loan based on an interest rate and a constant payment schedule. In my case, this comes to \$20,138.61 a year that I would have to invest to get that benefit. You could see the math behind all this on wikipedia. Now, one might question the value of \$71,000 in 2036. If we experience several years of high inflation (which we will) that might not be worth much. For example, in current year dollars assuming a 4{aaa01f1184b23bc5204459599a780c2efd1a71f819cd2b338cab4b7a2f8e97d4} rate of inflation, the retirement benefit is only worth roughly \$31 thousand annually.

What about other benefits?

Now, you also have to compute the value of medical benefits, etc. Military discounts, commissary, etc, which are going to be highly dependent on the individual, but I would personally pay no more this year than $500 to get. (The medical benefits might be huge as might the post-9/11 GI bill.)

The other big benefit is career diversity and having a broader network and official connectivity to two government organizations. This alone might be the biggest benefit of the reserves if a member is very transparent and wise in how they use this opportunity.

So, in total, I would say that I make \$35,500/year in reserve benefits. What is the downside? I could be spending my reserve time on my main career which could lead to more salary in the right field. I could also be building a start-up with that time that also might pay off and doing something that might be closer to my passion. I could be investing in my faith, house, family or health. However, the fact I work for the government means that I can actually do a form of approved side work. Other jobs/consulting would be much more difficult and uncomfortable. I could certainly have much less stress if I gave this up.

Would love any thoughts, particularly those which correct errors in my thinking above.


  1. ADA568422.pdf
  2. AFI 36-2254
  3. MOAA National Guard/Reserve Retirement Benefits

Training Short Codes for USAF IMA Reservists

One of the more frustrating things about the reserves: obscure codes like those above. I find it incredible how poor reserve support is, and unnecessary obscurity shouldn’t be tolerated. For those who wonder what these codes actually mean:

Readiness Codes Full course title
DOD IA DoD IAA CyberAwareness Challenge V2.0 (ZZ133098)
FP Force Protection (ZZ133079)
HR Human Relations (ZZ133080)
SA Security Administration (ZZ133078)
FER Free Exercise of Religion Training (ZZ133109)
SP Suicide Prevention (ZZ133113)
SAPR SAPR Annual Training 2014

Need to update your training? Go to ALDS.

Busy IMA preparing for a Lt Col Board

Hello fellow IMA. My apologies to you. Life is not easy. In the civilian world, you work hard, play office politics and with a little luck you might get promoted. Not so in the reserves. Here your promotion depends heavily on your ability to decode a bunch of Air Force personnel jargon and to make a lot of non-cooperative admin types take care of someone who they really don’t see as their responsibility. I hope my story helps you out.

To start preparing for a recent board, I had to look up some basic information to answer the following:

  • When is my board?
  • How do I know if I’m eligible?
  • When is my PRF due? When does it have to be signed and where does it need to be delivered to?
  • How do I review (and potentially change my records)?


Before answering these questions I had to write my PRF. Why do IMAs write every word of their PRFs and OPRs? Because IMAs are always shafting their reserve boss because of the demands of our main job and the last thing we want to do is have someone go through the torture of the AF evaluation system when we’ve been so lame.

But nothing is easy — the only time I have to work this is while I’m flying from DC to Vegas and I’m on my Mac at 35 kft. I have a draft of last years PRF but it is in $xfdl$ format. My mac is not any mac, it is a government mac from my day job so I can’t install any software. Oh yes, this is totally doable, I’m an engineer. Bring it. So the XFDL is base64 zipped. To learn this, I connected to a free cloud based bash shell VPS (seriously cloud 9 IDE for the win) and cat the top of the xfdl and see:


so no probs here . . . because I’m on a shell with root I can use uudeview under linux to decode a xfdl into a zipped xml file and then extracted it to view in emacs. Happy to explain this in more detail if you email me at for other questions, I recommend you call the total force service center at Comm 210-565-0102.

uudeview my_prf.xfdl
mv UNKNOWN.001 my_prf.gz
gunzip my_prf.gz
cat my_prf

What do non-hacker IMAs do? Ok so I can parse XML easily enough to get the following from here.

The document to make sure you have in your hip pocket is AFI 36-2406 OFFICER AND ENLISTED EVALUATION SYSTEMS. It is probably the worst written document possible for quickly finding what you need, but it is the guide for how this is all supposed to work.

When is my board?

According to ARPCM 15-17 CY16 ResAF Board Schedule my board meets on 13-18 Jun. I found this via myPers or

It provides this excellent summary table:

Screen Shot 2016-03-01 at 7.14.06 PM

How do I know if I’m eligible?

The most helpful document was the ARPCM_16-02 CY16 USAFR Lt Col Convening Notice, which I dug around on MyPers to get. From this document I found out that I would need a date of rank for a Lieutenant Colonel Mandatory Participating Reserve (PR) board to be less than 30 Sep 10. I can see that my DOR is 29 APR 2010 and that fits in the window of the oldest and youngest members for the board:


When is my PRF due? When does it have to be signed and where does it need to be delivered to?

From 36-2406, I know then that an eligible officer’s senior rater completes the PRF no earlier than 60 days prior to the CSB: which for me is Thursday, April 14, 2016.

From the table above, I see this confirmed that my senior rater (the USD(P)) has to sign the document between 14 Apr 16 and 29 Apr 16 and I get the completed document by 14 May 16. I can’t find how the PRF gets to the board, but I’m just going to bug the unit admin until I can confirm the document is in.

How do I review (and potentially change my records)?

Check your records on PRDA. So I was missing two OPRs and an MSM. Wow. The key here was working my network and finding the (amazing) admin at ARPC/DPT who had direct access to the records database and was able to update it for me before the board.

Defense Acquisition Certification

Here is a post that I hope is helpful to others out there who can be paralyzed from taking action to getting professional acquisition certifications. What is the official name and background of this program? The official name is the Acquisition Professional Development Program. The Acquisition Professional Development Program (APDP) promotes the development and sustainment of a professional acquisition workforce in the Air Force. It is DoD wide. You need it because certain jobs will require you to have it. Good acquisition organizations take this seriously, because it is an easy way to weed folks out from future jobs.

Where are the best places for information? Here are the links I found useful:

  • AF acquisition careers You can find an overview of the program and the useful sites here.
  • What are the requirements for each level?Follow the guidelines for your discipline here:
  • How do I know what level I am? Go to Acquisition Career Management System but you might need to go to (afpc secure ) first. The purpose is to go to My Civilian APDP Record and
  • Where do I sign up for courses?here
  • What is the continuous learning requirement? 80 points over two years.

What is the road ahead for me? I have a level 3 certification due date of 2014-06-03. My acquistion position is “ACQUISITION POSITION NOTCRITICAL OR DEVELOPMENTAL” and my position title is that I am a “GENERAL ENGINEER”.

What classes have I completed? 2013-11-05 SYS 101 GRADUATED 2012-08-24 CON 115 GRADUATED 2012-07-25 PMT 251 GRADUATED 2012-06-28 SAM 101 GRADUATED 2003-08-01 TST 101 GRADUATED 2003-04-18 ACQ 201B GRADUATED 2003-02-21 ACQ 201A GRADUATED 2001-12-28 ACQ 101 GRADUATED Latest continuous learning points are from: 2012-08-24 34.0 CON 115. How can I get more continous learning points? (It looks like there is a whole web site on this. I’m going to focus on getting the courses done for L2 SPRDE-SYSTEMS ENGINEER, and hope that gets me more than enough CL points.)

Continuous Learning Status My status is “CURRENT”. My last suspense was 2012-07-25 (for what?) POINTS TO DATE: 34 (what does this mean?) SUSPENSE: 2014-07-25 (this requires attention — what does that mean)

Current plan? I need to take the following: * Log 103 * Sys 101 (just as a pre-req) * Sys 202 * Sys 203 * CLE 003

Welcome TIMOTHY - here is a summary of your progress toward earning 80 Continuous Learning points (CLPs) every 24 months:

The Personnel System shows that you are in an Acquisition Coded position, and you are required to earn 80 CL points within 24 months.

 Currently, your CL suspense date is:     7/25/2014
ACQNow CL points earned this period:     34
Points needed:                                    46

 If you do not have any upcoming CL events scheduled, you might consider the following methods of earning points to help you meet the goal:
- a DAU Web based course (click here)
- a DAU Continuous Learning Module (click here)
- an AFIT Module (click here)

What/where is a list of different types of certification levels you can get?

  • Contracting
  • Systems Engineering
  • Financial Management
  • Program Management
  • Information Technology
  • Logistics
  • Scientific Research and Development
  • Test and Evaluation
  • Production, Manufacturing & Quality Assurance

So I need to get certified in Systems Engineering

Level 1 (Done)

  • Acq 101 (done)
  • Sys 101 (done)
  • CLE 001
  • CLM 017

Level 2

  • ACQ 201 A/B (done)
  • LOG 103 (20 CLP) (working now)
  • SYS 202 (9 CLP) (done)
  • SYS 203 (36 CLP)
  • CLE 003

  • 2 Year Experience, BS

Level 3

  • SYS 302
  • CLE 012
  • CLE 068
  • CLL 008

  • 4 year experience

IMA equations

Here are some of the questions I had when starting as an IMA.

How do you schedule IDTs?

You have to be on a .mil domain or else you need to use arrows-r.


Who pays?

IDTs and the 2-week annual tour are centrally funded.

What are my work requirements?

I am cat A with 48 paid IDTs and 2 week tour is required and my R/R Date is Aug-4.

This is a nice briefing AFD-120503-056.pdf.

What is the R/R date?

12 consecutive months in which an active Guard or Reserve member is required to earn a minimum of 50 points (including membership) for a satisfactory year of federal service.

This defines a “good year”.

key reference:{aaa01f1184b23bc5204459599a780c2efd1a71f819cd2b338cab4b7a2f8e97d4}2036-2254V1.pdf

What is form 40A?

How do OPRs work? Where do you find them?

In work.

-At the end of each training day, write bullet statements on the back of your orders or 40A describing your accomplishments. Provide your supervisor with a copy for your record. This will become input for the OPR/EPR.

-Accomplishments in your civilian profession may be used for an OPR, IF they are pertinent to military skills and leadership

Who do you ask for help and what will you get from them?

Ask the BIMMA or the senior reservist

How much civilian leave do you get?

15 days

Wind speed calculation

I want to know the impact of wind on endurance.

So we have something like this:

This gives us 8 cases of wind direction:

From this we can infer that going to the center from one of the 8 directions.

So an overall flight path would look like this:

If each grid cell is a distance (s) in size, each time a diagonal transition is made the distance would be (sqrt{2} s). As an aircraft enters each cell, they encounter the wind-star as shown above with the expected value of the wind facing one of the eight possible directions. In general, if (W) is the wind velocity in direction (alpha), from grid direction (g in [1,8]) we have to find the expected value for the wind in direction (cos(alpha_{g,w})), by integrating over all values of (w).

V_{g,w} = sum_{1..12} cos(alpha_{g,w_{i}}) dot P_i

With these bins:

h3. Wind Directions ( w_{i} )
|Wind Direction|Angle|

h3. Grid Direction (g)
|Grid Direction||

UTAPS: Mark an IDT as complete

UTAPS is terrible software. I wasted a half hour today going through the source code to figure out how to mark an IDT as complete.

I have no idea how folks who don’t understand web codes can navigate this system.

Why not include a button? Really?

Buyback military years

h2. Should I even buy the years? what if we use the 13K for something really special? the cashflow is way out there.

1 36 7836.4409
2 37 8692.4214
3 38 9592.7079
4 39 10539.1884
5 40 11533.8243
6 41 12578.6531
7 42 13675.7911
8 43 14827.4367
9 44 16035.8728
10 45 17303.4704
11 46 18632.6915
12 47 20026.0928
13 48 21486.3287
14 49 23016.1553
15 50 24618.4338
16 51 26296.1345
17 52 28052.3406
18 53 29890.2526
19 54 31813.1921
20 55 33824.6069
21 56 35928.0746
22 57 38127.3083
23 58 40426.1607
24 59 42828.6297
25 60 45338.8632
26 61 47961.165
27 62 50700
28 63 53560
29 64 56545.97
30 65 59662.89

If you’ve spent time in on active duty with an honorable discharge (i.e. you have a DD-214) and you then join the civil service, it is possible to pay for your military years and receive credit for FERS.

* What are the various deadlines?

There is a two-year interest free period that begins on your date of hire. However, since the interest is added on an annual basis, if the deposit amount is paid in full prior to three years of your hire date the deposit is interest.

* Can I collect my civilian and reserve retirements? (Retirement: You must waive your military retired pay in order to receive credit for military service in a civilian annuity, unless your military retirement is based on)

employee. The deposit can be made in one single payment, multiple payments, or through payroll deductions, normally for as little as $25-$50

There are two reasons to do this:
* You could retire sooner, or
* Your can increase your retirement annuity

Here are the rules:
* The deposit must be paid in full while you are a federal employee
* that you must have at least five years of creditable civilian service and be covered under the CSRS or FERS retirement system on the date of retirement

All the details are here: “”:

Here is the math. The deposit amount is 3{aaa01f1184b23bc5204459599a780c2efd1a71f819cd2b338cab4b7a2f8e97d4} of military base pay for FERS employees.

There are three steps to make this happen:

Obtain your total estimated military earnings by sending form RI20-97 and a copy of your DD214 to your respective military pay representative. The military payroll office will send you a short letter or form indicating your total estimated earnings during your military service.

Complete a SF-3108 or SF-2803 This form requires a statement on the form concerning military deposits, which is not available on the on-line version. Obtain the edited form from your HR office. HR will forward the documents to your civilian payroll office. Your payroll office will bill you directly.

Make the deposit to your civilian payroll office. You can pay the deposit in one lump sum, a series of payments, or sign up for payroll deductions, normally for as little as $50 per pay period. The deposit must be paid in full while you are employed and cannot be made after you retire.
Step 4: When the deposit is complete, your payroll office will send you a letter that the deposit is paid in full. Keep this document for your permanent retirement records and send a copy to your HR office. Payroll will not usually notify your HR office of the deposit, so it is very important that you retain a copy of this letter until you

classdef PaymentPlanner  0
               obj.year_of_departure = 2011 + years_from_now;
{aaa01f1184b23bc5204459599a780c2efd1a71f819cd2b338cab4b7a2f8e97d4}           how many years are we looking at total?
            obj.n                       = PaymentPlanner.years_out+1;
{aaa01f1184b23bc5204459599a780c2efd1a71f819cd2b338cab4b7a2f8e97d4}           which years are we looking at?
            obj.years                   = (2011:(2011+PaymentPlanner.years_out))';
{aaa01f1184b23bc5204459599a780c2efd1a71f819cd2b338cab4b7a2f8e97d4}           what are the years of the experiment?
            obj.tv_each_year            = obj.years;
{aaa01f1184b23bc5204459599a780c2efd1a71f819cd2b338cab4b7a2f8e97d4}           what age are you each year?
            obj.tv_age                  = obj.years-(ones(obj.n,1)*1976);
{aaa01f1184b23bc5204459599a780c2efd1a71f819cd2b338cab4b7a2f8e97d4}           what is your age when you leave service?
            obj.year_of_62              = obj.years(obj.tv_age == 62);
            obj.age_at_departure        = obj.year_of_departure-obj.birthday(1);
{aaa01f1184b23bc5204459599a780c2efd1a71f819cd2b338cab4b7a2f8e97d4}           what is the inflation-adjusted salary in each year?
            obj.tv_salary               = obj.increase_with_inflation(obj.starting_salary)';
{aaa01f1184b23bc5204459599a780c2efd1a71f819cd2b338cab4b7a2f8e97d4}           what is the inflation-adjusted salary at exit
            obj.departing_salary_TY     = obj.tv_salary(obj.years == obj.year_of_departure);
{aaa01f1184b23bc5204459599a780c2efd1a71f819cd2b338cab4b7a2f8e97d4}           how much cash on hand each year?
            obj.tv_cash_on_hand_TY      = obj.increase_with_inflation(obj.amt_years_buyback)';
{aaa01f1184b23bc5204459599a780c2efd1a71f819cd2b338cab4b7a2f8e97d4}           how many years in federal service?
            obj.total_time_in_service   = obj.year_of_departure - PaymentPlanner.year_started_service;
{aaa01f1184b23bc5204459599a780c2efd1a71f819cd2b338cab4b7a2f8e97d4}           how much cash would the government return?
            obj.payout                  = calculate_payout(obj);
{aaa01f1184b23bc5204459599a780c2efd1a71f819cd2b338cab4b7a2f8e97d4}           what is the yearly payment available in 2011 dollars?
            obj.yearly_payment_BY       = obj.present_value(obj.get_retirement_BY, obj.year_of_62 - obj.year_of_departure);

        function compare_30_year_coa(obj)
           for i = 1:30
               obj.year_of_departure = 2011 + i;
               obj.age_at_departure  = obj.year_of_departure-obj.birthday(1);
               obj.total_time_in_service   = obj.year_of_departure - PaymentPlanner.year_started_service;
               obj.yearly_payment_BY       = obj.present_value(obj.get_retirement_BY, obj.year_of_62 - obj.year_of_departure);
               disp([num2str(i) '|' num2str(obj.age_at_departure) '|' num2str(obj.yearly_payment_BY)]);
               A(i) = obj.yearly_payment_BY;

        function out = present_value(obj, x, years)
            out = x/((1+obj.inflation_rate)^years);

        function out = increase_with_inflation(obj,x)
            out = x*((1+obj.inflation_rate).^(1:obj.n));

        function display_output(obj)
            disp(['At age ' num2str(obj.age_at_departure) ' you would depart with a base year salary of ' num2str(obj.starting_salary) ]);
            disp(['You would get ' num2str(obj.yearly_payment_BY) ' (BY11) going forward at age 62.']);

        function payout = calculate_payout(obj)
            idx                         = find(obj.tv_age == 62);
            count_to_the_top            = length(obj.tv_payout_TY(idx:end));
            retirement_starting_salary  = obj.get_retirement_TY;
            obj.tv_payout_TY(idx:end)   = retirement_starting_salary*(1+obj.inflation_rate).^(1:count_to_the_top);
            payout                      = sum(obj.tv_payout_TY);

        function yearly_payment = get_retirement_TY(obj)
            yearly_payment      = (obj.total_time_in_service/100)*obj.departing_salary_TY;

        function yearly_payment = get_retirement_BY(obj)
            yearly_payment      = (obj.total_time_in_service/100)*obj.starting_salary;

        function obj = value_at_age_62(obj)



h2. What are the steps?

Do I fall under: Uniformed Services Employment and Reemployment Rights Act (USERRA)?
No because no civilian service was interrupted.
How much do I pay?
For periods of service performed during 1999 the deposit equals 3.25{aaa01f1184b23bc5204459599a780c2efd1a71f819cd2b338cab4b7a2f8e97d4}; and during 2000 the deposit equals 3.40{aaa01f1184b23bc5204459599a780c2efd1a71f819cd2b338cab4b7a2f8e97d4}. After 31 Dec 00 the deposit returns to 3{aaa01f1184b23bc5204459599a780c2efd1a71f819cd2b338cab4b7a2f8e97d4} of your military base pay.
For periods of service performed during 1999 the deposit equals 3.25{aaa01f1184b23bc5204459599a780c2efd1a71f819cd2b338cab4b7a2f8e97d4}; and during 2000 the deposit equals 3.40{aaa01f1184b23bc5204459599a780c2efd1a71f819cd2b338cab4b7a2f8e97d4}. After 31 Dec 00 the deposit returns to 3{aaa01f1184b23bc5204459599a780c2efd1a71f819cd2b338cab4b7a2f8e97d4} of your military base pay.
So, for example, I joined in 07/04/1999 and departed in 08/05/2009
What is the process