To capture the JSON structure for various methods of indirect management across the DOE complex the below scenarios have been developed. The preferred scenario is Scenario B.
This page represents the result of a collaboration between DOE-PM, Deltek Cobra, and DOE contractors to capture, document, and support all common scenarios. While developing these scenarios, the corresponding Deltek Cobra configurations were documented as well. As every contract and contractor is different, the exact configuration of Deltek Cobra varies significantly depending on the level at which data is reported.
Each scenario has a Cobra Input table and Output table. The input is a representation of how the data is organized within Deltek Cobra, while the output represents how it is organized in JSON.
With the exception of the DS01 column, the initial table for each scenario demonstrates how the data is recorded in Cobra. Specifically, the Cobra & DS01 columns are used to demonstrate the type of a given WBS element in Cobra vs the DS01 type field in the JSON upload. This primarily accounts for scenarios in which the Control Account column in Cobra is being used to store Work Package IDs. In these scenarios (E and F), the Cobra exporter assigns the correct Control Account values based on a lookup against the WBS.
The remaining columns note whether the data is being recorded as direct or indirect costs, or both, for each type of incremental cost. Note that as of DID v5-0-0 indirects may be reported either as a seperate EOC (as in v4-0-0 and earlier, like scenario C) or as a seperate row with is_indirect set to Y, allowing breaking out of indirects by EOC (Scenario B, DOE's preferred way to recieve data).
The output represents the JSON data structure that would be generated in this case. Note that blank fields should be omitted rather than populated with blank data.
Note: Mixing multiple scenarios below in a single upload file is not supported and will be rejected by the PARS system. Scenarios below are all supported, but your data must conform to one and only one.
Key Features:
Regarding Direct/Indirect costs, one row of data is provided per EOC with all direct/indirect BCWS/BCWP/ACWP/ETC lumped together (by period_date, WBS_ID_CA, and WBS_ID_WP combo).
Cobra | DS01 | EOC | BCWSi | BWCPi | ACWPi | ETCi |
---|---|---|---|---|---|---|
WP | WP | labor | D/I | D/I | D/I | D/I |
WP | WP | material | D/I | D/I | D/I | D/I |
WP | WP | ODC | D/I | D/I | D/I | D/I |
WP | WP | subK | D/I | D/I | D/I | D/I |
WBS_ID_CA | WBS_ID_WP | is_indirect | EOC | EVT | BCWSi | BWCPi | ACWPi | ETCi |
---|---|---|---|---|---|---|---|---|
01.01.01 | 01.01.01.01 | [1] | labor | C | $total | $total | $total | $total |
01.01.01 | 01.01.01.01 | material | C | $total | $total | $total | $total | |
01.01.01 | 01.01.01.01 | ODC | C | $total | $total | $total | $total | |
01.01.01 | 01.01.01.01 | subK | C | $total | $total | $total | $total |
Key Features:
Regarding Direct/Indirect costs, Indirect EOC data is collected in its own row with BCWS/BCWP/ACWP/ETC, unlike in scenario A.
Cobra | DS01 | EOC | BCWSi | BWCPi | ACWPi | ETCi |
---|---|---|---|---|---|---|
WP | WP | labor | D/I | D/I | D/I | D/I |
WP | WP | material | D/I | D/I | D/I | D/I |
WP | WP | ODC | D/I | D/I | D/I | D/I |
WP | WP | subK | D/I | D/I | D/I | D/I |
WP | WP | indirect | D/I | D/I | D/I | D/I |
WBS_ID_CA | WBS_ID_WP | is_indirect | EOC | EVT | BCWSi | BWCPi | ACWPi | ETCi |
---|---|---|---|---|---|---|---|---|
01.01.01 | 01.01.01.01 | [1:1] | labor | C | $total | $total | $total | $total |
01.01.01 | 01.01.01.01 | material | C | $total | $total | $total | $total | |
01.01.01 | 01.01.01.01 | ODC | C | $total | $total | $total | $total | |
01.01.01 | 01.01.01.01 | subK | C | $total | $total | $total | $total | |
01.01.01 | 01.01.01.01 | indirect | C | $total | $total | $total | $total |
Regarding Direct/Indirect costs, one row of data is provided per EOC with all with all direct/indirect BCWS/BCWP/ACWP/ETC lumped together (by period_date, WBS_ID_CA, and WBS_ID_WP combo).
Cobra | DS01 | EOC | BCWSi | BWCPi | ACWPi | ETCi |
---|---|---|---|---|---|---|
WP | WP | labor | D/I | D/I | D/I | |
WP | WP | material | D/I | D/I | D/I | |
WP | WP | ODC | D/I | D/I | D/I | |
WP | WP | subK | D/I | D/I | D/I | |
CA | CA | labor | D/I | |||
CA | CA | material | D/I | |||
CA | CA | ODC | D/I | |||
CA | CA | subK | D/I |
WBS_ID_CA | WBS_ID_WP | is_indirect | EOC | EVT | BCWSi | BWCPi | ACWPi | ETCi |
---|---|---|---|---|---|---|---|---|
01.01.01 | 01.01.01.01 | [1:2] | labor | C | $total | $total | $total | |
01.01.01 | 01.01.01.01 | material | C | $total | $total | $total | ||
01.01.01 | 01.01.01.01 | ODC | C | $total | $total | $total | ||
01.01.01 | 01.01.01.01 | subK | C | $total | $total | $total | ||
01.01.01 | [3] | subK | C | $total | ||||
01.01.01 | labor | C | $total | |||||
01.01.01 | material | C | $total | |||||
01.01.01 | ODC | C | $total |
This scenario provides the greatest detail at the lowest level.
Key Features:
Regarding Direct/Indirect costs, two rows of data should be provided for each EOC: one row with the direct BCWS/BCWP/ACWP/ETC and is_indirect = N, and one row with indirect BCWS/BCWP/ACWP/ETC and is_indirect = Y.
Cobra | DS01 | EOC | BCWSi | BWCPi | ACWPi | ETCi |
---|---|---|---|---|---|---|
WP | WP | labor | D/I | D/I | D/I | D/I |
WP | WP | material | D/I | D/I | D/I | D/I |
WP | WP | ODC | D/I | D/I | D/I | D/I |
WP | WP | subK | D/I | D/I | D/I | D/I |
WBS_ID_CA | WBS_ID_WP | is_indirect | EOC | EVT | BCWSi | BWCPi | ACWPi | ETCi |
---|---|---|---|---|---|---|---|---|
01.01.01 | 01.01.01.01 | N | labor | C | $direct only | $direct only | $direct only | $direct only |
01.01.01 | 01.01.01.01 | Y | labor | C | $indirect only | $indirect only | $indirect only | $indirect only |
01.01.01 | 01.01.01.01 | N | material | C | $direct only | $direct only | $direct only | $direct only |
01.01.01 | 01.01.01.01 | Y | material | C | $indirect only | $indirect only | $indirect only | $indirect only |
01.01.01 | 01.01.01.01 | N | ODC | C | $direct only | $direct only | $direct only | $direct only |
01.01.01 | 01.01.01.01 | Y | ODC | C | $indirect only | $indirect only | $indirect only | $indirect only |
01.01.01 | 01.01.01.01 | N | subK | C | $direct only | $direct only | $direct only | $direct only |
01.01.01 | 01.01.01.01 | Y | subK | C | $indirect only | $indirect only | $indirect only | $indirect only |
Key Features:
Regarding Direct/Indirect costs, two rows of data should be provided for each EOC at the WP level: one row with the direct BCWS/BCWP/ETC and is_indirect = N, and one row with indirect BCWS/BCWP/ETC and is_indirect = Y.
Two additional rows should be reported for each Control Account with its ACWP, one with direct ACWP and is_indirect = N, and one with indirect ACWP and is_indirect = Y.
Cobra | DS01 | EOC | BCWSi | BWCPi | ACWPi | ETCi |
---|---|---|---|---|---|---|
WP | WP | labor | D/I | D/I | D/I | |
WP | WP | material | D/I | D/I | D/I | |
WP | WP | ODC | D/I | D/I | D/I | |
WP | WP | subK | D/I | D/I | D/I | |
WP | WP | labor | D/I | |||
WP | WP | material | D/I | |||
WP | WP | ODC | D/I | |||
WP | WP | subK | D/I |
WBS_ID_CA | WBS_ID_WP | is_indirect | EOC | EVT | BCWSi | BWCPi | ACWPi | ETCi |
---|---|---|---|---|---|---|---|---|
01.01.01 | 01.01.01.01 | N | labor | C | $direct only | $direct only | $direct only | |
01.01.01 | 01.01.01.01 | Y | labor | C | $indirect only | $indirect only | $indirect only | |
01.01.01 | N | labor | $direct only | $direct only | ||||
01.01.01 | Y | labor | $indirect only | $indirect only |
(Repeat for each EOC)
Key Features:
Regarding Direct/Indirect costs, two rows of data should be provided for each EOC at the WP level: one row with the direct BCWS/BCWP/ACWP/ETC and is_indirect = N, and one row with indirect BCWS/BCWP/ETC and is_indirect = Y.
In addition, one row should be provided with indirect ACWP, is_indirect = Y, and EOC = indirect. This last row represents the entire WP's indirect actuals.
Cobra | DS01 | EOC | BCWSi | BWCPi | ACWPi | ETCi |
---|---|---|---|---|---|---|
WP | WP | labor | D/I | D/I | D/I | D/I |
WP | WP | material | D/I | D/I | D/I | D/I |
WP | WP | ODC | D/I | D/I | D/I | D/I |
WP | WP | subK | D/I | D/I | D/I | D/I |
WP | WP | indirect | I |
WBS_ID_CA | WBS_ID_WP | is_indirect | EOC | EVT | BCWSi | BWCPI | ACWPi | ETCi |
---|---|---|---|---|---|---|---|---|
01.01.01 | 01.01.01.01 | N | labor | C | $direct only | $direct only | $direct only | $direct only |
01.01.01 | 01.01.01.01 | Y | labor | C | $indirect only | $indirect only | $indirect only | |
01.01.01 | 01.01.01.01 | N | ODC | C | $direct only | $direct only | $direct only | $direct only |
01.01.01 | 01.01.01.01 | Y | ODC | C | $indirect only | $indirect only | $indirect only | |
01.01.01 | 01.01.01.01 | N | subK | C | $direct only | $direct only | $direct only | $direct only |
01.01.01 | 01.01.01.01 | Y | subK | C | $indirect only | $indirect only | $indirect only | |
01.01.01 | 01.01.01.01 | Y | indirect | C | $indirect only |
Key Features:
Scenario E covers the case at some contractors when the data imported into Cobra doesn't incude the CA mappings. In these cases, the Cobra exporter will look up and populate these values based on the WBS information.
Cobra | DS01 | EOC | BCWSi | BWCPI | ACWPi | ETCi |
---|---|---|---|---|---|---|
WP | WP | labor | D/I | D/I | D | D/I |
WP | WP | material | D/I | D/I | D | D/I |
WP | WP | ODC | D/I | D/I | D | D/I |
WP | WP | subK | D/I | D/I | D | D/I |
CA | WP | indirect | I |
WBS_ID_CA | WBS_ID_WP | is_indirect | EOC | EVT | BCWSi | BWCPI | ACWPi | ETCi |
---|---|---|---|---|---|---|---|---|
01.01.01 | 01.01.01.01 | N | labor | C | $direct only | $direct only | $direct only | $direct only |
01.01.01 | 01.01.01.01 | Y | labor | C | $indirect only | $indirect only | $indirect only | |
01.01.01 | 01.01.01.01 | N | ODC | C | $direct only | $direct only | $direct only | $direct only |
01.01.01 | 01.01.01.01 | Y | ODC | C | $indirect only | $indirect only | $indirect only | |
01.01.01 | 01.01.01.01 | N | subK | C | $direct only | $direct only | $direct only | $direct only |
01.01.01 | 01.01.01.01 | Y | subK | C | $indirect only | $indirect only | $indirect only | |
01.01.01 | 01.01.01.01 | Y | indirect | C | $indirect only |
Cobra is configured to take data in scenario E format and output it consistent with Scenario C's output, refer to that section for details.
Key Features:
Scenario F covers the case at some contractors when the data imported into Cobra doesn't incude the CA mappings. In these cases, the Cobra exporter will look up and populate these values based on the WBS information.
Scenario F output is similar to scenario C, except it records direct labor ACWP in a seperate row with EVT omitted. This allows it to still be compliant with the schema, but is functionally identical to scenario C, if slightly longer.
Cobra | DS01 | EOC | BCWSi | BWCPi | ACWPi | ETCi |
---|---|---|---|---|---|---|
WP | WP | labor | D/I | D/I | D/I | |
WP | WP | material | D/I | D/I | D/I | |
WP | WP | ODC | D/I | D/I | D/I | |
WP | WP | subK | D/I | D/I | D/I | |
CA | WP | indirect | D | I | I | |
CA | WP | labor | D | D | ||
CA | WP | material | D | D | ||
CA | WP | ODC | D | D | ||
CA | WP | subK | D | D |
WBS_ID_CA | WBS_ID_WP | is_indirect | EOC | EVT | BCWSi | BWCPI | ACWPi | ETCi |
---|---|---|---|---|---|---|---|---|
01.01.01 | 01.01.01.01 | N | labor | C | $direct only | $direct only | $direct only | |
01.01.01 | 01.01.01.01 | N | labor | $direct only | ||||
01.01.01 | 01.01.01.01 | Y | labor | C | $indirect only | $indirect only | $indirect only | |
01.01.01 | 01.01.01.01 | N | ODC | C | $direct only | $direct only | $direct only | $direct only |
01.01.01 | 01.01.01.01 | Y | ODC | C | $indirect only | $indirect only | $indirect only | |
01.01.01 | 01.01.01.01 | N | subK | C | $direct only | $direct only | $direct only | $direct only |
01.01.01 | 01.01.01.01 | Y | subK | C | $indirect only | $indirect only | $indirect only | |
01.01.01 | 01.01.01.01 | Y | indirect | C | $indirect only |
Since the is_indirect field is unused, it should be omitted entirely - note this means not including the JSON field on this data row at all, providing an empty string or NULL value is not correct. ↩︎ ↩︎ ↩︎ ↩︎
Please note that some scenarios were developed later in the process, and for clarity we've retained the original letter assignments. Scenarios G and H are variations of A and B, so are grouped with them for easier understanding.
Key Features: ↩︎
Since this data is reported at the CA level, WBS_ID_WP should be omitted from the data - note this means not including the JSON field on this data row at all, providing an empty string or NULL value is not correct. ↩︎