A concept datatype prescribes the structured format by which you desire the data to be represented. In simple terms, the datatype defines the type of data that the concept is intended to collect.
Any data represented numerically. There is an option to provide ranges for the numerical values, if this is appropriate. As of OpenMRS 1.9, data entry on htmlforms and Infopath forms are limited by the absolute minimum and maximum values. In the example of Serum Sodium, the absolute range of 0 (min) and 2000 (max) will prevent data entry of any value outside this range. There are no value checks for normal or critical ranges, but it is still advisable to add those values. They could be used to generate reports which should entry of values outside these ranges.
Allows answers to be only those provided, e.g. Blood type can only be A+, A-, B+, B-, AB+, AB-, O+, O-
Open ended text responses
The standard datatype for any non-query-like concepts, e.g. symptoms, diagnoses, findings, anatomy, misc, etc. Any concept which does not itself collect data.
Structured day, month, and year
Structured time response
Structured response including both the date and the time
checkbox response, e.g. yes or no queries (starting from OpenMRS v1.7, you can modify existing concept with boolean datatype to coded answers).
Best-practice for implementing OpenMRS is to never use the Boolean datatype. Any time you are thinking of creating a Boolean concept, you should create a Coded one instead, with "Yes" and "No" as answers.
Boolean answers (simple "Yes" or "No") are very often insufficient. In most cases, you also want to be able to record at least one other option ("Unknown") to distinguish between "left unchecked on purpose" and "not addressed." As an example of the importance of handling missing information properly, HL7 defines 9 different flavors of missing information. By creating your concept with the Coded datatype in the first place, it will be trivial for you to add other possible answers later, if (when) someone asks you to.
Complex numeric values possible (ie, <5, 1-10, etc.) This has not been implemented yet.