| | | | | | | | | | | | | | | | | | | | | |
<?xml version="1.0" encoding="windows-1252"?> |
<FilingSummary> |
| <Version> 3.19.3 </Version> |
| <ProcessingTime/> |
| <ReportFormat> html </ReportFormat> |
| <ContextCount> 118 </ContextCount> |
| <ElementCount> 346 </ElementCount> |
| <EntityCount> 1 </EntityCount> |
| <FootnotesReported> true </FootnotesReported> |
| <SegmentCount> 35 </SegmentCount> |
| <ScenarioCount> 0 </ScenarioCount> |
| <TuplesReported> false </TuplesReported> |
| <UnitCount> 4 </UnitCount> |
| <MyReports> |
| | <Report instance="nwpx-20190930.xml"> |
| | | <IsDefault> false </IsDefault> |
| | | <HasEmbeddedReports> false </HasEmbeddedReports> |
| | | <HtmlFileName> R1.htm </HtmlFileName> |
| | | <LongName> 000 - Document - Document And Entity Information </LongName> |
| | | <ReportType> Sheet </ReportType> |
| | | <Role> http://www.nwpipe.com/20190930/role/statement-document-and-entity-information </Role> |
| | | <ShortName> Document And Entity Information </ShortName> |
| | | <MenuCategory> Cover </MenuCategory> |
| | | <Position> 1 </Position> |
| | | </Report> |
| | <Report instance="nwpx-20190930.xml"> |
| | | <IsDefault> false </IsDefault> |
| | | <HasEmbeddedReports> false </HasEmbeddedReports> |
| | | <HtmlFileName> R2.htm </HtmlFileName> |
| | | <LongName> 001 - Statement - Condensed Consolidated Statements of Operations (Unaudited) </LongName> |
| | | <ReportType> Sheet </ReportType> |
| | | <Role> http://www.nwpipe.com/20190930/role/statement-condensed-consolidated-statements-of-operations-unaudited </Role> |
| | | <ShortName> Condensed Consolidated Statements of Operations (Unaudited) </ShortName> |
| | | <MenuCategory> Statements </MenuCategory> |
| | | <Position> 2 </Position> |
| | | </Report> |
| | <Report instance="nwpx-20190930.xml"> |
| | | <IsDefault> false </IsDefault> |
| | | <HasEmbeddedReports> false </HasEmbeddedReports> |
| | | <HtmlFileName> R3.htm </HtmlFileName> |
| | | <LongName> 002 - Statement - Condensed Consolidated Statements of Comprehensive Income (Unaudited) </LongName> |
| | | <ReportType> Sheet </ReportType> |
| | | <Role> http://www.nwpipe.com/20190930/role/statement-condensed-consolidated-statements-of-comprehensive-income-unaudited </Role> |
| | | <ShortName> Condensed Consolidated Statements of Comprehensive Income (Unaudited) </ShortName> |
| | | <MenuCategory> Statements </MenuCategory> |
| | | <Position> 3 </Position> |
| | | </Report> |
| | <Report instance="nwpx-20190930.xml"> |
| | | <IsDefault> false </IsDefault> |
| | | <HasEmbeddedReports> false </HasEmbeddedReports> |
| | | <HtmlFileName> R4.htm </HtmlFileName> |
| | | <LongName> 003 - Statement - Condensed Consolidated Balance Sheets (Current Period Unaudited) </LongName> |
| | | <ReportType> Sheet </ReportType> |
| | | <Role> http://www.nwpipe.com/20190930/role/statement-condensed-consolidated-balance-sheets-current-period-unaudited </Role> |
| | | <ShortName> Condensed Consolidated Balance Sheets (Current Period Unaudited) </ShortName> |
| | | <MenuCategory> Statements </MenuCategory> |
| | | <Position> 4 </Position> |
| | | </Report> |
| | <Report instance="nwpx-20190930.xml"> |
| | | <IsDefault> false </IsDefault> |
| | | <HasEmbeddedReports> false </HasEmbeddedReports> |
| | | <HtmlFileName> R5.htm </HtmlFileName> |
| | | <LongName> 004 - Statement - Condensed Consolidated Balance Sheets (Current Period Unaudited) (Parentheticals) </LongName> |
| | | <ReportType> Sheet </ReportType> |
| | | <Role> http://www.nwpipe.com/20190930/role/statement-condensed-consolidated-balance-sheets-current-period-unaudited-parentheticals </Role> |
| | | <ShortName> Condensed Consolidated Balance Sheets (Current Period Unaudited) (Parentheticals) </ShortName> |
| | | <MenuCategory> Statements </MenuCategory> |
| | | <Position> 5 </Position> |
| | | </Report> |
| | <Report instance="nwpx-20190930.xml"> |
| | | <IsDefault> false </IsDefault> |
| | | <HasEmbeddedReports> false </HasEmbeddedReports> |
| | | <HtmlFileName> R6.htm </HtmlFileName> |
| | | <LongName> 005 - Statement - Condensed Consolidated Statements of Stockholders' Equity (Unaudited) </LongName> |
| | | <ReportType> Sheet </ReportType> |
| | | <Role> http://www.nwpipe.com/20190930/role/statement-condensed-consolidated-statements-of-stockholders-equity-unaudited </Role> |
| | | <ShortName> Condensed Consolidated Statements of Stockholders' Equity (Unaudited) </ShortName> |
| | | <MenuCategory> Statements </MenuCategory> |
| | | <Position> 6 </Position> |
| | | </Report> |
| | <Report instance="nwpx-20190930.xml"> |
| | | <IsDefault> false </IsDefault> |
| | | <HasEmbeddedReports> false </HasEmbeddedReports> |
| | | <HtmlFileName> R7.htm </HtmlFileName> |
| | | <LongName> 006 - Statement - Condensed Consolidated Statements of Stockholders' Equity (Unaudited) (Parentheticals) </LongName> |
| | | <ReportType> Sheet </ReportType> |
| | | <Role> http://www.nwpipe.com/20190930/role/statement-condensed-consolidated-statements-of-stockholders-equity-unaudited-parentheticals </Role> |
| | | <ShortName> Condensed Consolidated Statements of Stockholders' Equity (Unaudited) (Parentheticals) </ShortName> |
| | | <MenuCategory> Statements </MenuCategory> |
| | | <Position> 7 </Position> |
| | | </Report> |
| | <Report instance="nwpx-20190930.xml"> |
| | | <IsDefault> false </IsDefault> |
| | | <HasEmbeddedReports> false </HasEmbeddedReports> |
| | | <HtmlFileName> R8.htm </HtmlFileName> |
| | | <LongName> 007 - Statement - Condensed Consolidated Statements of Cash Flows (Unaudited) </LongName> |
| | | <ReportType> Sheet </ReportType> |
| | | <Role> http://www.nwpipe.com/20190930/role/statement-condensed-consolidated-statements-of-cash-flows-unaudited </Role> |
| | | <ShortName> Condensed Consolidated Statements of Cash Flows (Unaudited) </ShortName> |
| | | <MenuCategory> Statements </MenuCategory> |
| | | <Position> 8 </Position> |
| | | </Report> |
| | <Report instance="nwpx-20190930.xml"> |
| | | <IsDefault> false </IsDefault> |
| | | <HasEmbeddedReports> false </HasEmbeddedReports> |
| | | <HtmlFileName> R9.htm </HtmlFileName> |
| | | <LongName> 008 - Disclosure - Note 1 - Basis of Presentation </LongName> |
| | | <ReportType> Sheet </ReportType> |
| | | <Role> http://www.nwpipe.com/20190930/role/statement-note-1-basis-of-presentation </Role> |
| | | <ShortName> Note 1 - Basis of Presentation </ShortName> |
| | | <MenuCategory> Notes </MenuCategory> |
| | | <Position> 9 </Position> |
| | | </Report> |
| | <Report instance="nwpx-20190930.xml"> |
| | | <IsDefault> false </IsDefault> |
| | | <HasEmbeddedReports> false </HasEmbeddedReports> |
| | | <HtmlFileName> R10.htm </HtmlFileName> |
| | | <LongName> 009 - Disclosure - Note 2 - Business Combination </LongName> |
| | | <ReportType> Sheet </ReportType> |
| | | <Role> http://www.nwpipe.com/20190930/role/statement-note-2-business-combination </Role> |
| | | <ShortName> Note 2 - Business Combination </ShortName> |
| | | <MenuCategory> Notes </MenuCategory> |
| | | <Position> 10 </Position> |
| | | </Report> |
| | <Report instance="nwpx-20190930.xml"> |
| | | <IsDefault> false </IsDefault> |
| | | <HasEmbeddedReports> false </HasEmbeddedReports> |
| | | <HtmlFileName> R11.htm </HtmlFileName> |
| | | <LongName> 010 - Disclosure - Note 3 - Discontinued Operations </LongName> |
| | | <ReportType> Sheet </ReportType> |
| | | <Role> http://www.nwpipe.com/20190930/role/statement-note-3-discontinued-operations </Role> |
| | | <ShortName> Note 3 - Discontinued Operations </ShortName> |
| | | <MenuCategory> Notes </MenuCategory> |
| | | <Position> 11 </Position> |
| | | </Report> |
| | <Report instance="nwpx-20190930.xml"> |
| | | <IsDefault> false </IsDefault> |
| | | <HasEmbeddedReports> false </HasEmbeddedReports> |
| | | <HtmlFileName> R12.htm </HtmlFileName> |
| | | <LongName> 011 - Disclosure - Note 4 - Inventories </LongName> |
| | | <ReportType> Sheet </ReportType> |
| | | <Role> http://www.nwpipe.com/20190930/role/statement-note-4-inventories </Role> |
| | | <ShortName> Note 4 - Inventories </ShortName> |
| | | <MenuCategory> Notes </MenuCategory> |
| | | <Position> 12 </Position> |
| | | </Report> |
| | <Report instance="nwpx-20190930.xml"> |
| | | <IsDefault> false </IsDefault> |
| | | <HasEmbeddedReports> false </HasEmbeddedReports> |
| | | <HtmlFileName> R13.htm </HtmlFileName> |
| | | <LongName> 012 - Disclosure - Note 5 - Leases </LongName> |
| | | <ReportType> Sheet </ReportType> |
| | | <Role> http://www.nwpipe.com/20190930/role/statement-note-5-leases </Role> |
| | | <ShortName> Note 5 - Leases </ShortName> |
| | | <MenuCategory> Notes </MenuCategory> |
| | | <Position> 13 </Position> |
| | | </Report> |
| | <Report instance="nwpx-20190930.xml"> |
| | | <IsDefault> false </IsDefault> |
| | | <HasEmbeddedReports> false </HasEmbeddedReports> |
| | | <HtmlFileName> R14.htm </HtmlFileName> |
| | | <LongName> 013 - Disclosure - Note 6 - Fair Value Measurements </LongName> |
| | | <ReportType> Sheet </ReportType> |
| | | <Role> http://www.nwpipe.com/20190930/role/statement-note-6-fair-value-measurements </Role> |
| | | <ShortName> Note 6 - Fair Value Measurements </ShortName> |
| | | <MenuCategory> Notes </MenuCategory> |
| | | <Position> 14 </Position> |
| | | </Report> |
| | <Report instance="nwpx-20190930.xml"> |
| | | <IsDefault> false </IsDefault> |
| | | <HasEmbeddedReports> false </HasEmbeddedReports> |
| | | <HtmlFileName> R15.htm </HtmlFileName> |
| | | <LongName> 014 - Disclosure - Note 7 - Share-based Compensation </LongName> |
| | | <ReportType> Sheet </ReportType> |
| | | <Role> http://www.nwpipe.com/20190930/role/statement-note-7-sharebased-compensation </Role> |
| | | <ShortName> Note 7 - Share-based Compensation </ShortName> |
| | | <MenuCategory> Notes </MenuCategory> |
| | | <Position> 15 </Position> |
| | | </Report> |
| | <Report instance="nwpx-20190930.xml"> |
| | | <IsDefault> false </IsDefault> |
| | | <HasEmbeddedReports> false </HasEmbeddedReports> |
| | | <HtmlFileName> R16.htm </HtmlFileName> |
| | | <LongName> 015 - Disclosure - Note 8 - Shareholder Rights Plan </LongName> |
| | | <ReportType> Sheet </ReportType> |
| | | <Role> http://www.nwpipe.com/20190930/role/statement-note-8-shareholder-rights-plan </Role> |
| | | <ShortName> Note 8 - Shareholder Rights Plan </ShortName> |
| | | <MenuCategory> Notes </MenuCategory> |
| | | <Position> 16 </Position> |
| | | </Report> |
| | <Report instance="nwpx-20190930.xml"> |
| | | <IsDefault> false </IsDefault> |
| | | <HasEmbeddedReports> false </HasEmbeddedReports> |
| | | <HtmlFileName> R17.htm </HtmlFileName> |
| | | <LongName> 016 - Disclosure - Note 9 - Commitments and Contingencies </LongName> |
| | | <ReportType> Sheet </ReportType> |
| | | <Role> http://www.nwpipe.com/20190930/role/statement-note-9-commitments-and-contingencies </Role> |
| | | <ShortName> Note 9 - Commitments and Contingencies </ShortName> |
| | | <MenuCategory> Notes </MenuCategory> |
| | | <Position> 17 </Position> |
| | | </Report> |
| | <Report instance="nwpx-20190930.xml"> |
| | | <IsDefault> false </IsDefault> |
| | | <HasEmbeddedReports> false </HasEmbeddedReports> |
| | | <HtmlFileName> R18.htm </HtmlFileName> |
| | | <LongName> 017 - Disclosure - Note 10 - Revenue </LongName> |
| | | <ReportType> Sheet </ReportType> |
| | | <Role> http://www.nwpipe.com/20190930/role/statement-note-10-revenue </Role> |
| | | <ShortName> Note 10 - Revenue </ShortName> |
| | | <MenuCategory> Notes </MenuCategory> |
| | | <Position> 18 </Position> |
| | | </Report> |
| | <Report instance="nwpx-20190930.xml"> |
| | | <IsDefault> false </IsDefault> |
| | | <HasEmbeddedReports> false </HasEmbeddedReports> |
| | | <HtmlFileName> R19.htm </HtmlFileName> |
| | | <LongName> 018 - Disclosure - Note 11 - Income Taxes </LongName> |
| | | <ReportType> Sheet </ReportType> |
| | | <Role> http://www.nwpipe.com/20190930/role/statement-note-11-income-taxes </Role> |
| | | <ShortName> Note 11 - Income Taxes </ShortName> |
| | | <MenuCategory> Notes </MenuCategory> |
| | | <Position> 19 </Position> |
| | | </Report> |
| | <Report instance="nwpx-20190930.xml"> |
| | | <IsDefault> false </IsDefault> |
| | | <HasEmbeddedReports> false </HasEmbeddedReports> |
| | | <HtmlFileName> R20.htm </HtmlFileName> |
| | | <LongName> 019 - Disclosure - Note 12 - Accumulated Other Comprehensive Loss </LongName> |
| | | <ReportType> Sheet </ReportType> |
| | | <Role> http://www.nwpipe.com/20190930/role/statement-note-12-accumulated-other-comprehensive-loss </Role> |
| | | <ShortName> Note 12 - Accumulated Other Comprehensive Loss </ShortName> |
| | | <MenuCategory> Notes </MenuCategory> |
| | | <Position> 20 </Position> |
| | | </Report> |
| | <Report instance="nwpx-20190930.xml"> |
| | | <IsDefault> false </IsDefault> |
| | | <HasEmbeddedReports> false </HasEmbeddedReports> |
| | | <HtmlFileName> R21.htm </HtmlFileName> |
| | | <LongName> 020 - Disclosure - Note 13 - Net Income Per Share </LongName> |
| | | <ReportType> Sheet </ReportType> |
| | | <Role> http://www.nwpipe.com/20190930/role/statement-note-13-net-income-per-share </Role> |
| | | <ShortName> Note 13 - Net Income Per Share </ShortName> |
| | | <MenuCategory> Notes </MenuCategory> |
| | | <Position> 21 </Position> |
| | | </Report> |
| | <Report instance="nwpx-20190930.xml"> |
| | | <IsDefault> false </IsDefault> |
| | | <HasEmbeddedReports> false </HasEmbeddedReports> |
| | | <HtmlFileName> R22.htm </HtmlFileName> |
| | | <LongName> 021 - Disclosure - Note 14 - Recent Accounting and Reporting Developments </LongName> |
| | | <ReportType> Sheet </ReportType> |
| | | <Role> http://www.nwpipe.com/20190930/role/statement-note-14-recent-accounting-and-reporting-developments </Role> |
| | | <ShortName> Note 14 - Recent Accounting and Reporting Developments </ShortName> |
| | | <MenuCategory> Notes </MenuCategory> |
| | | <Position> 22 </Position> |
| | | </Report> |
| | <Report instance="nwpx-20190930.xml"> |
| | | <IsDefault> false </IsDefault> |
| | | <HasEmbeddedReports> false </HasEmbeddedReports> |
| | | <HtmlFileName> R23.htm </HtmlFileName> |
| | | <LongName> 022 - Disclosure - Note 15 - Restructuring </LongName> |
| | | <ReportType> Sheet </ReportType> |
| | | <Role> http://www.nwpipe.com/20190930/role/statement-note-15-restructuring- </Role> |
| | | <ShortName> Note 15 - Restructuring </ShortName> |
| | | <MenuCategory> Notes </MenuCategory> |
| | | <Position> 23 </Position> |
| | | </Report> |
| | <Report instance="nwpx-20190930.xml"> |
| | | <IsDefault> false </IsDefault> |
| | | <HasEmbeddedReports> false </HasEmbeddedReports> |
| | | <HtmlFileName> R24.htm </HtmlFileName> |
| | | <LongName> 023 - Disclosure - Note 2 - Business Combination (Tables) </LongName> |
| | | <ReportType> Sheet </ReportType> |
| | | <Role> http://www.nwpipe.com/20190930/role/statement-note-2-business-combination-tables </Role> |
| | | <ShortName> Note 2 - Business Combination (Tables) </ShortName> |
| | | <MenuCategory> Tables </MenuCategory> |
| | | <ParentRole> http://www.nwpipe.com/20190930/role/statement-note-2-business-combination </ParentRole> |
| | | <Position> 24 </Position> |
| | | </Report> |
| | <Report instance="nwpx-20190930.xml"> |
| | | <IsDefault> false </IsDefault> |
| | | <HasEmbeddedReports> false </HasEmbeddedReports> |
| | | <HtmlFileName> R25.htm </HtmlFileName> |
| | | <LongName> 024 - Disclosure - Note 4 - Inventories (Tables) </LongName> |
| | | <ReportType> Sheet </ReportType> |
| | | <Role> http://www.nwpipe.com/20190930/role/statement-note-4-inventories-tables </Role> |
| | | <ShortName> Note 4 - Inventories (Tables) </ShortName> |
| | | <MenuCategory> Tables </MenuCategory> |
| | | <ParentRole> http://www.nwpipe.com/20190930/role/statement-note-4-inventories </ParentRole> |
| | | <Position> 25 </Position> |
| | | </Report> |
| | <Report instance="nwpx-20190930.xml"> |
| | | <IsDefault> false </IsDefault> |
| | | <HasEmbeddedReports> false </HasEmbeddedReports> |
| | | <HtmlFileName> R26.htm </HtmlFileName> |
| | | <LongName> 025 - Disclosure - Note 5 - Leases (Tables) </LongName> |
| | | <ReportType> Sheet </ReportType> |
| | | <Role> http://www.nwpipe.com/20190930/role/statement-note-5-leases-tables </Role> |
| | | <ShortName> Note 5 - Leases (Tables) </ShortName> |
| | | <MenuCategory> Tables </MenuCategory> |
| | | <ParentRole> http://www.nwpipe.com/20190930/role/statement-note-5-leases </ParentRole> |
| | | <Position> 26 </Position> |
| | | </Report> |
| | <Report instance="nwpx-20190930.xml"> |
| | | <IsDefault> false </IsDefault> |
| | | <HasEmbeddedReports> false </HasEmbeddedReports> |
| | | <HtmlFileName> R27.htm </HtmlFileName> |
| | | <LongName> 026 - Disclosure - Note 6 - Fair Value Measurements (Tables) </LongName> |
| | | <ReportType> Sheet </ReportType> |
| | | <Role> http://www.nwpipe.com/20190930/role/statement-note-6-fair-value-measurements-tables </Role> |
| | | <ShortName> Note 6 - Fair Value Measurements (Tables) </ShortName> |
| | | <MenuCategory> Tables </MenuCategory> |
| | | <ParentRole> http://www.nwpipe.com/20190930/role/statement-note-6-fair-value-measurements </ParentRole> |
| | | <Position> 27 </Position> |
| | | </Report> |
| | <Report instance="nwpx-20190930.xml"> |
| | | <IsDefault> false </IsDefault> |
| | | <HasEmbeddedReports> false </HasEmbeddedReports> |
| | | <HtmlFileName> R28.htm </HtmlFileName> |
| | | <LongName> 027 - Disclosure - Note 7 - Share-based Compensation (Tables) </LongName> |
| | | <ReportType> Sheet </ReportType> |
| | | <Role> http://www.nwpipe.com/20190930/role/statement-note-7-sharebased-compensation-tables </Role> |
| | | <ShortName> Note 7 - Share-based Compensation (Tables) </ShortName> |
| | | <MenuCategory> Tables </MenuCategory> |
| | | <ParentRole> http://www.nwpipe.com/20190930/role/statement-note-7-sharebased-compensation </ParentRole> |
| | | <Position> 28 </Position> |
| | | </Report> |
| | <Report instance="nwpx-20190930.xml"> |
| | | <IsDefault> false </IsDefault> |
| | | <HasEmbeddedReports> false </HasEmbeddedReports> |
| | | <HtmlFileName> R29.htm </HtmlFileName> |
| | | <LongName> 028 - Disclosure - Note 12 - Accumulated Other Comprehensive Loss (Tables) </LongName> |
| | | <ReportType> Sheet </ReportType> |
| | | <Role> http://www.nwpipe.com/20190930/role/statement-note-12-accumulated-other-comprehensive-loss-tables </Role> |
| | | <ShortName> Note 12 - Accumulated Other Comprehensive Loss (Tables) </ShortName> |
| | | <MenuCategory> Tables </MenuCategory> |
| | | <ParentRole> http://www.nwpipe.com/20190930/role/statement-note-12-accumulated-other-comprehensive-loss </ParentRole> |
| | | <Position> 29 </Position> |
| | | </Report> |
| | <Report instance="nwpx-20190930.xml"> |
| | | <IsDefault> false </IsDefault> |
| | | <HasEmbeddedReports> false </HasEmbeddedReports> |
| | | <HtmlFileName> R30.htm </HtmlFileName> |
| | | <LongName> 029 - Disclosure - Note 13 - Net Income Per Share (Tables) </LongName> |
| | | <ReportType> Sheet </ReportType> |
| | | <Role> http://www.nwpipe.com/20190930/role/statement-note-13-net-income-per-share-tables </Role> |
| | | <ShortName> Note 13 - Net Income Per Share (Tables) </ShortName> |
| | | <MenuCategory> Tables </MenuCategory> |
| | | <ParentRole> http://www.nwpipe.com/20190930/role/statement-note-13-net-income-per-share </ParentRole> |
| | | <Position> 30 </Position> |
| | | </Report> |
| | <Report instance="nwpx-20190930.xml"> |
| | | <IsDefault> false </IsDefault> |
| | | <HasEmbeddedReports> false </HasEmbeddedReports> |
| | | <HtmlFileName> R31.htm </HtmlFileName> |
| | | <LongName> 030 - Disclosure - Note 1 - Basis of Presentation (Details Textual) </LongName> |
| | | <ReportType> Sheet </ReportType> |
| | | <Role> http://www.nwpipe.com/20190930/role/statement-note-1-basis-of-presentation-details-textual </Role> |
| | | <ShortName> Note 1 - Basis of Presentation (Details Textual) </ShortName> |
| | | <MenuCategory> Details </MenuCategory> |
| | | <ParentRole> http://www.nwpipe.com/20190930/role/statement-note-1-basis-of-presentation </ParentRole> |
| | | <Position> 31 </Position> |
| | | </Report> |
| | <Report instance="nwpx-20190930.xml"> |
| | | <IsDefault> false </IsDefault> |
| | | <HasEmbeddedReports> false </HasEmbeddedReports> |
| | | <HtmlFileName> R32.htm </HtmlFileName> |
| | | <LongName> 031 - Disclosure - Note 2 - Business Combination (Details Textual) </LongName> |
| | | <ReportType> Sheet </ReportType> |
| | | <Role> http://www.nwpipe.com/20190930/role/statement-note-2-business-combination-details-textual </Role> |
| | | <ShortName> Note 2 - Business Combination (Details Textual) </ShortName> |
| | | <MenuCategory> Details </MenuCategory> |
| | | <ParentRole> http://www.nwpipe.com/20190930/role/statement-note-2-business-combination-tables </ParentRole> |
| | | <Position> 32 </Position> |
| | | </Report> |
| | <Report instance="nwpx-20190930.xml"> |
| | | <IsDefault> false </IsDefault> |
| | | <HasEmbeddedReports> false </HasEmbeddedReports> |
| | | <HtmlFileName> R33.htm </HtmlFileName> |
| | | <LongName> 032 - Disclosure - Note 2 - Business Combination - Assets Acquired and Liabilities Assumed (Details) </LongName> |
| | | <ReportType> Sheet </ReportType> |
| | | <Role> http://www.nwpipe.com/20190930/role/statement-note-2-business-combination-assets-acquired-and-liabilities-assumed-details </Role> |
| | | <ShortName> Note 2 - Business Combination - Assets Acquired and Liabilities Assumed (Details) </ShortName> |
| | | <MenuCategory> Details </MenuCategory> |
| | | <Position> 33 </Position> |
| | | </Report> |
| | <Report instance="nwpx-20190930.xml"> |
| | | <IsDefault> false </IsDefault> |
| | | <HasEmbeddedReports> false </HasEmbeddedReports> |
| | | <HtmlFileName> R34.htm </HtmlFileName> |
| | | <LongName> 033 - Disclosure - Note 2 - Business Combination - Pro Forma Summary (Details) </LongName> |
| | | <ReportType> Sheet </ReportType> |
| | | <Role> http://www.nwpipe.com/20190930/role/statement-note-2-business-combination-pro-forma-summary-details </Role> |
| | | <ShortName> Note 2 - Business Combination - Pro Forma Summary (Details) </ShortName> |
| | | <MenuCategory> Details </MenuCategory> |
| | | <Position> 34 </Position> |
| | | </Report> |
| | <Report instance="nwpx-20190930.xml"> |
| | | <IsDefault> false </IsDefault> |
| | | <HasEmbeddedReports> false </HasEmbeddedReports> |
| | | <HtmlFileName> R35.htm </HtmlFileName> |
| | | <LongName> 034 - Disclosure - Note 3 - Discontinued Operations (Details Textual) </LongName> |
| | | <ReportType> Sheet </ReportType> |
| | | <Role> http://www.nwpipe.com/20190930/role/statement-note-3-discontinued-operations-details-textual </Role> |
| | | <ShortName> Note 3 - Discontinued Operations (Details Textual) </ShortName> |
| | | <MenuCategory> Details </MenuCategory> |
| | | <ParentRole> http://www.nwpipe.com/20190930/role/statement-note-3-discontinued-operations </ParentRole> |
| | | <Position> 35 </Position> |
| | | </Report> |
| | <Report instance="nwpx-20190930.xml"> |
| | | <IsDefault> false </IsDefault> |
| | | <HasEmbeddedReports> false </HasEmbeddedReports> |
| | | <HtmlFileName> R36.htm </HtmlFileName> |
| | | <LongName> 035 - Disclosure - Note 4 - Inventories - Components of Inventories (Details) </LongName> |
| | | <ReportType> Sheet </ReportType> |
| | | <Role> http://www.nwpipe.com/20190930/role/statement-note-4-inventories-components-of-inventories-details </Role> |
| | | <ShortName> Note 4 - Inventories - Components of Inventories (Details) </ShortName> |
| | | <MenuCategory> Details </MenuCategory> |
| | | <Position> 36 </Position> |
| | | </Report> |
| | <Report instance="nwpx-20190930.xml"> |
| | | <IsDefault> false </IsDefault> |
| | | <HasEmbeddedReports> false </HasEmbeddedReports> |
| | | <HtmlFileName> R37.htm </HtmlFileName> |
| | | <LongName> 036 - Disclosure - Note 5 - Leases (Details Textual) </LongName> |
| | | <ReportType> Sheet </ReportType> |
| | | <Role> http://www.nwpipe.com/20190930/role/statement-note-5-leases-details-textual </Role> |
| | | <ShortName> Note 5 - Leases (Details Textual) </ShortName> |
| | | <MenuCategory> Details </MenuCategory> |
| | | <ParentRole> http://www.nwpipe.com/20190930/role/statement-note-5-leases-tables </ParentRole> |
| | | <Position> 37 </Position> |
| | | </Report> |
| | <Report instance="nwpx-20190930.xml"> |
| | | <IsDefault> false </IsDefault> |
| | | <HasEmbeddedReports> false </HasEmbeddedReports> |
| | | <HtmlFileName> R38.htm </HtmlFileName> |
| | | <LongName> 037 - Disclosure - Note 5 - Leases - Lease Cost (Details) </LongName> |
| | | <ReportType> Sheet </ReportType> |
| | | <Role> http://www.nwpipe.com/20190930/role/statement-note-5-leases-lease-cost-details </Role> |
| | | <ShortName> Note 5 - Leases - Lease Cost (Details) </ShortName> |
| | | <MenuCategory> Details </MenuCategory> |
| | | <Position> 38 </Position> |
| | | </Report> |
| | <Report instance="nwpx-20190930.xml"> |
| | | <IsDefault> false </IsDefault> |
| | | <HasEmbeddedReports> false </HasEmbeddedReports> |
| | | <HtmlFileName> R39.htm </HtmlFileName> |
| | | <LongName> 038 - Disclosure - Note 5 - Leases - Future Maturities of Lease Liabilities (Details) </LongName> |
| | | <ReportType> Sheet </ReportType> |
| | | <Role> http://www.nwpipe.com/20190930/role/statement-note-5-leases-future-maturities-of-lease-liabilities-details </Role> |
| | | <ShortName> Note 5 - Leases - Future Maturities of Lease Liabilities (Details) </ShortName> |
| | | <MenuCategory> Details </MenuCategory> |
| | | <Position> 39 </Position> |
| | | </Report> |
| | <Report instance="nwpx-20190930.xml"> |
| | | <IsDefault> false </IsDefault> |
| | | <HasEmbeddedReports> false </HasEmbeddedReports> |
| | | <HtmlFileName> R40.htm </HtmlFileName> |
| | | <LongName> 039 - Disclosure - Note 5 - Leases - Lease Terms and Discount Rates for Lease Liabilities (Details) </LongName> |
| | | <ReportType> Sheet </ReportType> |
| | | <Role> http://www.nwpipe.com/20190930/role/statement-note-5-leases-lease-terms-and-discount-rates-for-lease-liabilities-details </Role> |
| | | <ShortName> Note 5 - Leases - Lease Terms and Discount Rates for Lease Liabilities (Details) </ShortName> |
| | | <MenuCategory> Details </MenuCategory> |
| | | <Position> 40 </Position> |
| | | </Report> |
| | <Report instance="nwpx-20190930.xml"> |
| | | <IsDefault> false </IsDefault> |
| | | <HasEmbeddedReports> false </HasEmbeddedReports> |
| | | <HtmlFileName> R41.htm </HtmlFileName> |
| | | <LongName> 040 - Disclosure - Note 5 - Leases - Other Information Related to Operating and Finance Leases (Details) </LongName> |
| | | <ReportType> Sheet </ReportType> |
| | | <Role> http://www.nwpipe.com/20190930/role/statement-note-5-leases-other-information-related-to-operating-and-finance-leases-details </Role> |
| | | <ShortName> Note 5 - Leases - Other Information Related to Operating and Finance Leases (Details) </ShortName> |
| | | <MenuCategory> Details </MenuCategory> |
| | | <Position> 41 </Position> |
| | | </Report> |
| | <Report instance="nwpx-20190930.xml"> |
| | | <IsDefault> false </IsDefault> |
| | | <HasEmbeddedReports> false </HasEmbeddedReports> |
| | | <HtmlFileName> R42.htm </HtmlFileName> |
| | | <LongName> 041 - Disclosure - Note 6 - Fair Value Measurements - Assets and Liabilities Measured at Fair Value on Recurring Basis (Details) </LongName> |
| | | <ReportType> Sheet </ReportType> |
| | | <Role> http://www.nwpipe.com/20190930/role/statement-note-6-fair-value-measurements-assets-and-liabilities-measured-at-fair-value-on-recurring-basis-details </Role> |
| | | <ShortName> Note 6 - Fair Value Measurements - Assets and Liabilities Measured at Fair Value on Recurring Basis (Details) </ShortName> |
| | | <MenuCategory> Details </MenuCategory> |
| | | <Position> 42 </Position> |
| | | </Report> |
| | <Report instance="nwpx-20190930.xml"> |
| | | <IsDefault> false </IsDefault> |
| | | <HasEmbeddedReports> false </HasEmbeddedReports> |
| | | <HtmlFileName> R43.htm </HtmlFileName> |
| | | <LongName> 042 - Disclosure - Note 7 - Share-based Compensation (Details Textual) </LongName> |
| | | <ReportType> Sheet </ReportType> |
| | | <Role> http://www.nwpipe.com/20190930/role/statement-note-7-sharebased-compensation-details-textual </Role> |
| | | <ShortName> Note 7 - Share-based Compensation (Details Textual) </ShortName> |
| | | <MenuCategory> Details </MenuCategory> |
| | | <ParentRole> http://www.nwpipe.com/20190930/role/statement-note-7-sharebased-compensation-tables </ParentRole> |
| | | <Position> 43 </Position> |
| | | </Report> |
| | <Report instance="nwpx-20190930.xml"> |
| | | <IsDefault> false </IsDefault> |
| | | <HasEmbeddedReports> false </HasEmbeddedReports> |
| | | <HtmlFileName> R44.htm </HtmlFileName> |
| | | <LongName> 043 - Disclosure - Note 7 - Share-based Compensation - Share-based Compensation Expense (Details) </LongName> |
| | | <ReportType> Sheet </ReportType> |
| | | <Role> http://www.nwpipe.com/20190930/role/statement-note-7-sharebased-compensation-sharebased-compensation-expense-details </Role> |
| | | <ShortName> Note 7 - Share-based Compensation - Share-based Compensation Expense (Details) </ShortName> |
| | | <MenuCategory> Details </MenuCategory> |
| | | <Position> 44 </Position> |
| | | </Report> |
| | <Report instance="nwpx-20190930.xml"> |
| | | <IsDefault> false </IsDefault> |
| | | <HasEmbeddedReports> false </HasEmbeddedReports> |
| | | <HtmlFileName> R45.htm </HtmlFileName> |
| | | <LongName> 044 - Disclosure - Note 7 - Share-based Compensation - Stock Option Activity (Details) </LongName> |
| | | <ReportType> Sheet </ReportType> |
| | | <Role> http://www.nwpipe.com/20190930/role/statement-note-7-sharebased-compensation-stock-option-activity-details </Role> |
| | | <ShortName> Note 7 - Share-based Compensation - Stock Option Activity (Details) </ShortName> |
| | | <MenuCategory> Details </MenuCategory> |
| | | <Position> 45 </Position> |
| | | </Report> |
| | <Report instance="nwpx-20190930.xml"> |
| | | <IsDefault> false </IsDefault> |
| | | <HasEmbeddedReports> false </HasEmbeddedReports> |
| | | <HtmlFileName> R46.htm </HtmlFileName> |
| | | <LongName> 045 - Disclosure - Note 7 - Share-based Compensation - RSU and PSA Activity (Details) </LongName> |
| | | <ReportType> Sheet </ReportType> |
| | | <Role> http://www.nwpipe.com/20190930/role/statement-note-7-sharebased-compensation-rsu-and-psa-activity-details </Role> |
| | | <ShortName> Note 7 - Share-based Compensation - RSU and PSA Activity (Details) </ShortName> |
| | | <MenuCategory> Details </MenuCategory> |
| | | <Position> 46 </Position> |
| | | </Report> |
| | <Report instance="nwpx-20190930.xml"> |
| | | <IsDefault> false </IsDefault> |
| | | <HasEmbeddedReports> false </HasEmbeddedReports> |
| | | <HtmlFileName> R47.htm </HtmlFileName> |
| | | <LongName> 046 - Disclosure - Note 8 - Shareholder Rights Plan (Details Textual) </LongName> |
| | | <ReportType> Sheet </ReportType> |
| | | <Role> http://www.nwpipe.com/20190930/role/statement-note-8-shareholder-rights-plan-details-textual </Role> |
| | | <ShortName> Note 8 - Shareholder Rights Plan (Details Textual) </ShortName> |
| | | <MenuCategory> Details </MenuCategory> |
| | | <ParentRole> http://www.nwpipe.com/20190930/role/statement-note-8-shareholder-rights-plan </ParentRole> |
| | | <Position> 47 </Position> |
| | | </Report> |
| | <Report instance="nwpx-20190930.xml"> |
| | | <IsDefault> false </IsDefault> |
| | | <HasEmbeddedReports> false </HasEmbeddedReports> |
| | | <HtmlFileName> R48.htm </HtmlFileName> |
| | | <LongName> 047 - Disclosure - Note 9 - Commitments and Contingencies (Details Textual) </LongName> |
| | | <ReportType> Sheet </ReportType> |
| | | <Role> http://www.nwpipe.com/20190930/role/statement-note-9-commitments-and-contingencies-details-textual </Role> |
| | | <ShortName> Note 9 - Commitments and Contingencies (Details Textual) </ShortName> |
| | | <MenuCategory> Details </MenuCategory> |
| | | <ParentRole> http://www.nwpipe.com/20190930/role/statement-note-9-commitments-and-contingencies </ParentRole> |
| | | <Position> 48 </Position> |
| | | </Report> |
| | <Report instance="nwpx-20190930.xml"> |
| | | <IsDefault> false </IsDefault> |
| | | <HasEmbeddedReports> false </HasEmbeddedReports> |
| | | <HtmlFileName> R49.htm </HtmlFileName> |
| | | <LongName> 048 - Disclosure - Note 10 - Revenue 1 (Details Textual) </LongName> |
| | | <ReportType> Sheet </ReportType> |
| | | <Role> http://www.nwpipe.com/20190930/role/statement-note-10-revenue-1-details-textual </Role> |
| | | <ShortName> Note 10 - Revenue 1 (Details Textual) </ShortName> |
| | | <MenuCategory> Details </MenuCategory> |
| | | <ParentRole> http://www.nwpipe.com/20190930/role/statement-note-10-revenue </ParentRole> |
| | | <Position> 49 </Position> |
| | | </Report> |
| | <Report instance="nwpx-20190930.xml"> |
| | | <IsDefault> false </IsDefault> |
| | | <HasEmbeddedReports> false </HasEmbeddedReports> |
| | | <HtmlFileName> R50.htm </HtmlFileName> |
| | | <LongName> 049 - Disclosure - Note 10 - Revenue 2 (Details Textual) </LongName> |
| | | <ReportType> Sheet </ReportType> |
| | | <Role> http://www.nwpipe.com/20190930/role/statement-note-10-revenue-2-details-textual </Role> |
| | | <ShortName> Note 10 - Revenue 2 (Details Textual) </ShortName> |
| | | <MenuCategory> Details </MenuCategory> |
| | | <ParentRole> http://www.nwpipe.com/20190930/role/statement-note-10-revenue </ParentRole> |
| | | <Position> 50 </Position> |
| | | </Report> |
| | <Report instance="nwpx-20190930.xml"> |
| | | <IsDefault> false </IsDefault> |
| | | <HasEmbeddedReports> false </HasEmbeddedReports> |
| | | <HtmlFileName> R51.htm </HtmlFileName> |
| | | <LongName> 050 - Disclosure - Note 11 - Income Taxes (Details Textual) </LongName> |
| | | <ReportType> Sheet </ReportType> |
| | | <Role> http://www.nwpipe.com/20190930/role/statement-note-11-income-taxes-details-textual </Role> |
| | | <ShortName> Note 11 - Income Taxes (Details Textual) </ShortName> |
| | | <MenuCategory> Details </MenuCategory> |
| | | <ParentRole> http://www.nwpipe.com/20190930/role/statement-note-11-income-taxes </ParentRole> |
| | | <Position> 51 </Position> |
| | | </Report> |
| | <Report instance="nwpx-20190930.xml"> |
| | | <IsDefault> false </IsDefault> |
| | | <HasEmbeddedReports> false </HasEmbeddedReports> |
| | | <HtmlFileName> R52.htm </HtmlFileName> |
| | | <LongName> 051 - Disclosure - Note 12 - Accumulated Other Comprehensive Loss - Components of Accumulated Other Comprehensive Loss (Details) </LongName> |
| | | <ReportType> Sheet </ReportType> |
| | | <Role> http://www.nwpipe.com/20190930/role/statement-note-12-accumulated-other-comprehensive-loss-components-of-accumulated-other-comprehensive-loss-details </Role> |
| | | <ShortName> Note 12 - Accumulated Other Comprehensive Loss - Components of Accumulated Other Comprehensive Loss (Details) </ShortName> |
| | | <MenuCategory> Details </MenuCategory> |
| | | <Position> 52 </Position> |
| | | </Report> |
| | <Report instance="nwpx-20190930.xml"> |
| | | <IsDefault> false </IsDefault> |
| | | <HasEmbeddedReports> false </HasEmbeddedReports> |
| | | <HtmlFileName> R53.htm </HtmlFileName> |
| | | <LongName> 052 - Disclosure - Note 12 - Accumulated Other Comprehensive Loss - Reclassification of Accumulated Other Comprehensive Loss (Details) </LongName> |
| | | <ReportType> Sheet </ReportType> |
| | | <Role> http://www.nwpipe.com/20190930/role/statement-note-12-accumulated-other-comprehensive-loss-reclassification-of-accumulated-other-comprehensive-loss-details </Role> |
| | | <ShortName> Note 12 - Accumulated Other Comprehensive Loss - Reclassification of Accumulated Other Comprehensive Loss (Details) </ShortName> |
| | | <MenuCategory> Details </MenuCategory> |
| | | <Position> 53 </Position> |
| | | </Report> |
| | <Report instance="nwpx-20190930.xml"> |
| | | <IsDefault> false </IsDefault> |
| | | <HasEmbeddedReports> false </HasEmbeddedReports> |
| | | <HtmlFileName> R54.htm </HtmlFileName> |
| | | <LongName> 053 - Disclosure - Note 13 - Net Income Per Share (Details Textual) </LongName> |
| | | <ReportType> Sheet </ReportType> |
| | | <Role> http://www.nwpipe.com/20190930/role/statement-note-13-net-income-per-share-details-textual </Role> |
| | | <ShortName> Note 13 - Net Income Per Share (Details Textual) </ShortName> |
| | | <MenuCategory> Details </MenuCategory> |
| | | <ParentRole> http://www.nwpipe.com/20190930/role/statement-note-13-net-income-per-share-tables </ParentRole> |
| | | <Position> 54 </Position> |
| | | </Report> |
| | <Report instance="nwpx-20190930.xml"> |
| | | <IsDefault> false </IsDefault> |
| | | <HasEmbeddedReports> false </HasEmbeddedReports> |
| | | <HtmlFileName> R55.htm </HtmlFileName> |
| | | <LongName> 054 - Disclosure - Note 13 - Net Income Per Share - Net Loss Per Basic and Diluted Weighted Average Common Shares Outstanding (Details) </LongName> |
| | | <ReportType> Sheet </ReportType> |
| | | <Role> http://www.nwpipe.com/20190930/role/statement-note-13-net-income-per-share-net-loss-per-basic-and-diluted-weighted-average-common-shares-outstanding-details </Role> |
| | | <ShortName> Note 13 - Net Income Per Share - Net Loss Per Basic and Diluted Weighted Average Common Shares Outstanding (Details) </ShortName> |
| | | <MenuCategory> Details </MenuCategory> |
| | | <Position> 55 </Position> |
| | | </Report> |
| | <Report instance="nwpx-20190930.xml"> |
| | | <IsDefault> false </IsDefault> |
| | | <HasEmbeddedReports> false </HasEmbeddedReports> |
| | | <HtmlFileName> R56.htm </HtmlFileName> |
| | | <LongName> 055 - Disclosure - Note 14 - Recent Accounting and Reporting Developments (Details Textual) </LongName> |
| | | <ReportType> Sheet </ReportType> |
| | | <Role> http://www.nwpipe.com/20190930/role/statement-note-14-recent-accounting-and-reporting-developments-details-textual </Role> |
| | | <ShortName> Note 14 - Recent Accounting and Reporting Developments (Details Textual) </ShortName> |
| | | <MenuCategory> Details </MenuCategory> |
| | | <Position> 56 </Position> |
| | | </Report> |
| | <Report instance="nwpx-20190930.xml"> |
| | | <IsDefault> false </IsDefault> |
| | | <HasEmbeddedReports> false </HasEmbeddedReports> |
| | | <HtmlFileName> R57.htm </HtmlFileName> |
| | | <LongName> 056 - Disclosure - Note 15 - Restructuring (Details Textual) </LongName> |
| | | <ReportType> Sheet </ReportType> |
| | | <Role> http://www.nwpipe.com/20190930/role/statement-note-15-restructuring-details-textual </Role> |
| | | <ShortName> Note 15 - Restructuring (Details Textual) </ShortName> |
| | | <MenuCategory> Details </MenuCategory> |
| | | <ParentRole> http://www.nwpipe.com/20190930/role/statement-note-15-restructuring- </ParentRole> |
| | | <Position> 57 </Position> |
| | | </Report> |
| | <Report> |
| | | <IsDefault> false </IsDefault> |
| | | <HasEmbeddedReports> false </HasEmbeddedReports> |
| | | <LongName> All Reports </LongName> |
| | | <ReportType> Book </ReportType> |
| | | <ShortName> All Reports </ShortName> |
| | | </Report> |
| | </MyReports> |
| <InputFiles> |
| | <File> nwpx-20190930.xml </File> |
| | <File> nwpx-20190930.xsd </File> |
| | <File> nwpx-20190930_cal.xml </File> |
| | <File> nwpx-20190930_def.xml </File> |
| | <File> nwpx-20190930_lab.xml </File> |
| | <File> nwpx-20190930_pre.xml </File> |
| | </InputFiles> |
| <SupplementalFiles/> |
| <BaseTaxonomies> |
| | <BaseTaxonomy> http://fasb.org/srt/2019-01-31 </BaseTaxonomy> |
| | <BaseTaxonomy> http://xbrl.sec.gov/dei/2019-01-31 </BaseTaxonomy> |
| | <BaseTaxonomy> http://fasb.org/us-gaap/2019-01-31 </BaseTaxonomy> |
| | </BaseTaxonomies> |
| <HasPresentationLinkbase> true </HasPresentationLinkbase> |
| <HasCalculationLinkbase> true </HasCalculationLinkbase> |
| </FilingSummary> |