XML 56 R45.htm IDEA: XBRL DOCUMENT v3.25.2
Revenue - Disaggregation of revenue by customer type and contract type (Details) - USD ($)
$ in Thousands
3 Months Ended 6 Months Ended
Jun. 30, 2025
Jun. 30, 2024
Jun. 30, 2025
Jun. 30, 2024
Disaggregation of Revenue        
Revenue $ 1,890,745 $ 1,563,715 $ 3,538,858 $ 2,976,422
Fixed Price        
Disaggregation of Revenue        
Revenue 977,815 602,441 1,813,568 1,271,792
Unit Price        
Disaggregation of Revenue        
Revenue 584,334 552,568 1,072,415 991,029
Cost Reimbursable        
Disaggregation of Revenue        
Revenue 328,596 408,706 652,875 713,601
MSA        
Disaggregation of Revenue        
Revenue 602,989 574,366 1,092,941 1,048,436
Non-MSA        
Disaggregation of Revenue        
Revenue 1,287,756 989,349 2,445,917 1,927,986
Intersegment eliminations        
Disaggregation of Revenue        
Revenue (39,083) (30,575) (62,719) (53,370)
Intersegment eliminations | Fixed Price        
Disaggregation of Revenue        
Revenue (32,125) (30,536) (51,252) (51,485)
Intersegment eliminations | Unit Price        
Disaggregation of Revenue        
Revenue (6,444) (12) (9,906) (1,765)
Intersegment eliminations | Cost Reimbursable        
Disaggregation of Revenue        
Revenue (514) (27) (1,561) (120)
Intersegment eliminations | MSA        
Disaggregation of Revenue        
Revenue (387) (44) (928) (238)
Intersegment eliminations | Non-MSA        
Disaggregation of Revenue        
Revenue (38,696) (30,531) (61,791) (53,132)
Utilities | Operating Segment        
Disaggregation of Revenue        
Revenue 693,021 620,798 1,256,428 1,108,722
Utilities | Operating Segment | Fixed Price        
Disaggregation of Revenue        
Revenue 110,536 93,571 188,466 180,571
Utilities | Operating Segment | Unit Price        
Disaggregation of Revenue        
Revenue 443,781 387,980 788,152 685,405
Utilities | Operating Segment | Cost Reimbursable        
Disaggregation of Revenue        
Revenue 138,704 139,247 279,810 242,746
Utilities | Operating Segment | MSA        
Disaggregation of Revenue        
Revenue 539,458 496,458 991,541 877,956
Utilities | Operating Segment | Non-MSA        
Disaggregation of Revenue        
Revenue 153,563 124,340 264,887 230,766
Utilities | Intersegment eliminations        
Disaggregation of Revenue        
Revenue 39,100 30,600 62,700 53,400
Energy | Operating Segment        
Disaggregation of Revenue        
Revenue 1,236,807 973,492 2,345,149 1,921,070
Energy | Operating Segment | Fixed Price        
Disaggregation of Revenue        
Revenue 899,404 539,406 1,676,354 1,142,706
Energy | Operating Segment | Unit Price        
Disaggregation of Revenue        
Revenue 146,997 164,600 294,169 307,389
Energy | Operating Segment | Cost Reimbursable        
Disaggregation of Revenue        
Revenue 190,406 269,486 374,626 470,975
Energy | Operating Segment | MSA        
Disaggregation of Revenue        
Revenue 63,918 77,952 102,328 170,718
Energy | Operating Segment | Non-MSA        
Disaggregation of Revenue        
Revenue $ 1,172,889 $ 895,540 $ 2,242,821 $ 1,750,352