15 answers
Which edition of SFDC are you using? I've built something like this using the Process Builder and a custom Checkbox field on the Opportunity and a Validation Rule like this:
AND(
ISCHANGED(StageName),
TEXT(StageName) = "Closed Won",
Contract_Attached__c = FALSE
)
The key is that the Contract file needs to be attached via Chatter.
Using the Process Builder you can have a Chatter Feed Item kick off the Process.
Then in your Process evaluate the Feed item: Content Type, Title, or Body for the word "Contract"
If it meets those criteria the Process Builder will update the Contract Attched checkbox from FALSE to TRUE (checked)