Вход | Регистрация
 

Возраст в днях месяцах и годах - как хранить и как определить в какой промежуток попадает?

Возраст в днях месяцах и годах - как хранить и как определить в какой промежуток попадает?
Я
   RomaH
 
09.07.19 - 06:57
Лаборатория - референсные значения показателей анализов от возраста пациента:

0-4 дня
4 дня - 2 месяца
2 месяца - 2 года

нижняя граница - включая, верхняя исключая

как это привести в "машиночитаемый" вид

0-3 дня
4-59 дня
2-24 месяца

если так - то на границе 2 и 3 строки есть пересечение и выпадение - в зависимости от даты рождения и даты проведения анализа - 31 день или 28 дней в месяце
 
 
   Irbis
 
1 - 09.07.19 - 07:05
Если в годах, месяцах, днях то через разность дат и три числа. А можно в граммах, то есть днях. тогда все границы тоже должны быть в днях.
   Лодырь
 
2 - 09.07.19 - 07:05
(0) Задай этот вопрос постановщику задачи.
   RomaH
 
3 - 09.07.19 - 07:13
(1) в днях
если пациенту нет 2 лет - то норма 9.3
если есть - норма 9.0

задал 730 день для верхней границы (исключая)
попался високосный год
пациенту еще нет двух лет по календарю, программа думает что есть - показатель 9.2
   PuhUfa
 
4 - 09.07.19 - 07:18
Храни не только границу, но и в каких "единицах" она измеряется.
   Йохохо
 
5 - 09.07.19 - 07:20
(3) это уже не вывод данных, а анализ. Думаю надо делать по ТЗ
   SleepyHead
 
6 - 09.07.19 - 07:24
(2) Вы когда-нибудь с врачами работали? Я работал 4 года, получить четкий ответ просто нереально.
   Bigbro
 
7 - 09.07.19 - 07:29
(6) я работал в медицине. там есть отдел организационно-методической работы, общаться надо с ними а не с врачами. если руководитель адекватный (а это чаще всего так, ибо вся экспертиза висит на этом отделе, а это весьма ответственное дело) - можно легко обсудить все нюансы и выяснить ожидаемое поведение программы. и при високосных годах и когда день рождения пациента на 29 февраля приходится и т.п.
   Irbis
 
8 - 09.07.19 - 07:35
(3) Тут или замуж, или мороженое. Предсьтавь себе что високосный год у 1,5 годовалого пациента взяли анализ 19 февраля. 01.03 он действителен?
ТЗ по задаче должно исключить все серые зоны в любом их сочетании. В (7) правильно написали, по ТЗ общаться нужно с методологами, если потребуется экспертное мнение специалиста, они сами ему вопрос поставят и ответ выцарапают.
   Лефмихалыч
 
9 - 09.07.19 - 07:39
(0) а зачем это приводить в машиночитаемый вид? Что ты будешь птом с этой машиночитаемостью делать?
   RomaH
 
10 - 09.07.19 - 07:42
(9) автоматически помечать положительный анализ или отрицательный
   RomaH
 
11 - 09.07.19 - 07:44
(9) + вывод референсных значений в печатной форме
Не просто 
Сахар 9 мг/л

а


Сахар 9 мг/л норма - от 8 до 10 мг/л
   Йохохо
 
12 - 09.07.19 - 07:47
(10) это не та область где можно думать и пытаться сделать лучше, чем тебе написали в задании
   RomaH
 
13 - 09.07.19 - 11:29
никаких идей?
   PuhUfa
 
14 - 09.07.19 - 11:37
(11) Вы сами анализы делаете?
   palsergeich
 
15 - 09.07.19 - 11:38
(0) Самый простой способ и, скорее всего верный:
1) Перечисление ТипыГраницДат. где будут 3 значения - 3дня, 2 мес и 2 года
2) РегистрыСведений - границыОсобыхДат.
2Измерения - физлицо(Пациент) + Перечисление ТипыГраницДат Ресурс - Дата
3) При добавлении нового пациента - эти даты заполняются сразу на основании Даты рождения.
Не надо это вычисять в полете, високосные года, 28,29,30,31 - наловишь исключений, просто к дате рождения прибавляешь это и хранишь
   Garykom
 
16 - 09.07.19 - 11:39
(13) Идея простая - не надо хранить возраст, храни дату и время рождения.
   palsergeich
 
17 - 09.07.19 - 11:43
(15) Добавление месяца - это очень скользкая тема, есть несколько методологий, что такое добавить месяц.
Но скорее всего платформенный ДобавитьМесяц() - это то что тебе надо, или уточни.
   Asmody
 
18 - 09.07.19 - 11:45
(13) Самая правильная идея подробно описана в (7). Надо ходить не на форумы, а к людям, которые это все уже делают десятилетиями "на бумаге".
   palsergeich
 
19 - 09.07.19 - 11:45
(17)
0-3 дня
4-59 дня 
60 дней-24 месяца 
Как правило это так, но лучше уточнить у постановщика
   palsergeich
 
20 - 09.07.19 - 11:45
(18) Угу
   RomaH
 
21 - 09.07.19 - 11:49
(18) мозг такая странная штука - он понимает что возраст попадает в период описанный фразой "от 40 дней до 2 месяцев"
а вот как машине это объяснить
   RomaH
 
22 - 09.07.19 - 11:50
(15) есть способ проще и 100% верный
   Garykom
 
23 - 09.07.19 - 11:50
(21) Сначала объясни машине из скольких дней состоит 1 месяц.
   RomaH
 
24 - 09.07.19 - 11:51
(23) зачем? машине надо объяснить только каков возраст человека на определенную дату
это мы умеем
   Garykom
 
25 - 09.07.19 - 11:52
(24) ОК перефразирую.

Кто попадет в интервал "от 60 дней до 2 месяцев" ?
   RomaH
 
26 - 09.07.19 - 11:52
периоды возрастов - непрерывны
верхняя граница не нужна
   RomaH
 
27 - 09.07.19 - 11:53
(25) у того у кого возраст будет >= 60 дней, но меньше 2 месяцев
   RomaH
 
28 - 09.07.19 - 11:53
(25) прикинь
   Sayan_mi
 
29 - 09.07.19 - 11:53
По моему проще по верхней границе и разнице дат
< 4 дн иначе (разница в днях)
< 2 мес иначе (разница в месяцах)
< 2 лет …. (разница в годах)
   RomaH
 
30 - 09.07.19 - 11:54
(25) например родившиеся 1 июля и сдавшие анализ 31 августа
 
 
   Garykom
 
31 - 09.07.19 - 11:55
(30) У тебя странное представление о единицах измерения времени.

Длина месяца в днях =  кол-во дней в году / 12
   RomaH
 
32 - 09.07.19 - 11:56
(31) а по-моему - у тебя
каков возраст ребенка 31 августа, если он родился 1 июля этого года?
   ice777
 
33 - 09.07.19 - 11:56
есть же произвольные периоды.
ну и функция, дата в периоде или нет, наваять можно.
   ice777
 
34 - 09.07.19 - 11:56
(31) это среднемесячное )
   Garykom
 
35 - 09.07.19 - 11:57
(31)+ Для длины года "в днях" выбираю любое подходящее, причем большинство не целые:

Продолжительность:
346,620047 дня — драконический год, промежуток времени, по истечении которого Солнце возвращается к тому же узлу лунной орбиты.
353, 354 или 355 дней — продолжительность невисокосных лет в некоторых лунно-солнечных календарях.
354,37 дней — лунный год, 12 лунных месяцев; средняя длина года в лунных календарях.
365 дней — невисокосный год во многих солнечных календарях; 31 536 000 с.
365,242199 дня — средний тропический год (усреднённый по всем точкам эклиптики промежуток времени, в течение которого Солнце возвращается в прежнюю позицию относительно эклиптики и земного экватора) на эпоху 2000 года.
365,24220 дня — средний тропический год на эпоху 1900,0.
365,24222 дня — средняя продолжительность года в новоюлианском календаре.
365,24(24) дня — средняя продолжительность года в иранском календаре, разработанном Омаром Хайамом.
365,2424 дня — средний интервал между двумя весенними равноденствиями на эпоху 2000 года.
365,2425 дня (точно) — средняя продолжительность года в григорианском календаре.
365,25 дня (точно) — юлианский год, средняя продолжительность года в юлианском календаре; равен точно 31 557 600 с.
365,2564 дня — сидерический (звёздный) год; период обращения Земли вокруг Солнца относительно неподвижных звёзд.
365,259641 дня — аномалистический год, промежуток времени между двумя последовательными прохождениями Земли через перигелий.
366 дней — високосный год во многих солнечных календарях; 31 622 400 с.
383, 384 или 385 дней — продолжительность високосного года в некоторых лунно-солнечных календарях.
383,9 дня — 13 лунных месяцев; високосный год в некоторых лунно-солнечных календарях.
   Garykom
 
36 - 09.07.19 - 11:59
(35)+ И да учти что со временем (веками но мы же надеемся что 1С не сгинет) длина года "в днях" будет меняться.
   Garykom
 
37 - 09.07.19 - 12:01
Так что заводишь периодический РС и пишешь туда свои используемые в настоящее время соответствия между единицами измерения времени.

А в базе хранишь только дату+время и промежутки в секундах например.
   RomaH
 
38 - 09.07.19 - 12:01
(35) так мы сейчас перейдем к пересмотру "догм" - и по имеющимся точкам построим функцию для расчета "правильной" нормы на любой момент времени

что было-бы правильнее, на мой взгляд, ... но от меня требуют соблюдать "догмы" - заказчик не готов к революции
   Garykom
 
39 - 09.07.19 - 12:02
И да в сутках количество секунд оно тоже меняется ))
   RomaH
 
40 - 09.07.19 - 12:04
ладно - решение простое
хранить нижнюю границу
0 дней
4 дня
15 дней
2 месяца
6 месяцев 
2 года
18 лет

считаем возраст в трех измерениях
и находим максимальную границу которая меньше полученного возраста
   Garykom
 
41 - 09.07.19 - 12:04
(38) Ну так выясни требуемые догмы и запиши их в свой РС (37)
   Garykom
 
42 - 09.07.19 - 12:05
Прочитать
https://ru.wikipedia.org/wiki/Единицы_измерения_времени

Хранить время в https://ru.wikipedia.org/wiki/Секунда
"Секунда — время, равное 9 192 631 770 периодам излучения, соответствующего переходу между двумя сверхтонкими уровнями основного состояния атома цезия-133."
   Fish
 
43 - 09.07.19 - 12:06
А что за лаборатория можно узнать? Чтобы случайно туда не обратиться :))
   Garykom
 
44 - 09.07.19 - 12:07
(42)+ И надеяться что с СТО (от Эйнштейна) столкнуться не придется )) А то задолбаешься поправки вводить в свой РС дополнительно )))
   PuhUfa
 
45 - 09.07.19 - 12:08
(32) >> каков возраст ребенка 31 августа, если он родился 1 июля этого года?
В днях или месяцах? Не зря в поликлиниках спрашивают возраст "в полных лет", "полных месяцах".

Заведи тип границы, день/месяц/год. И если у тебя тип границы день, но считай для проверки вхождения возраст в днях, если тип "месяц", то в месяцах.
А вообще это похоже на изобретение велосипеда.
Вот я сижу смотрю сейчас у себя приходящие xml с анализами и в них:

<Test TestID="TSH">
<Value>2.1791</Value>
<NormalValue>0.3500 - 4.9400</NormalValue>
<NormalValueMin>0.3500</NormalValueMin>
<NormalValueMax>4.9400</NormalValueMax>
<ValueDate>2019-07-09</ValueDate>

или 
<Tests><Test TestID="FIBRYNOGEN">
<Value>2.14</Value>
<NormalValue>2.00 - 4.00</NormalValue>
<NormalValueMin>2.00</NormalValueMin>
<NormalValueMax>4.00</NormalValueMax>
<ValueDate>2019-07-07</ValueDate>

все блин давно посчитано за нас -(((
   RomaH
 
46 - 09.07.19 - 12:11
(45) ну так - что бы пришло правильное <NormalValue>2.00 - 4.00</NormalValue>

должна быть правильная таблица соответствий входящих параметров этим нормам
я ж не говорю, что я решаю совсем новую задачу - это давно изобретенный велосипед
   RomaH
 
47 - 09.07.19 - 12:12
(45) ну так сколько ребенку полных месяцев 31 августа?
   kzot
 
48 - 09.07.19 - 12:12
Вроде как ЗУП стаж сотрудников давно считать изволит в количестве месяцев и дней, смотрите на рс "НакопленныеСтажиФизическихЛиц" и не изобретайте.
   RomaH
 
49 - 09.07.19 - 12:13
(48) очередной писатель
   PuhUfa
 
50 - 09.07.19 - 12:15
(47) один
   Лодырь
 
51 - 09.07.19 - 12:18
(47) Задумайтесь над вопросом, с чего бы нормативы показателей детей проживших одинаковое количество дней должны отличаться? Потом все же идите к постановщику задачи.
   Лефмихалыч
 
52 - 09.07.19 - 12:24
(13) надо опираться на количество ПОЛНЫХ лет, а всю эту полюбень с августами и сентябрями из головы выкинуть.
С днями и месяцами такая же петрушка. Високосные нахрен тоже выкинуть из рассмотрения. от одного дня ничего не меняется.
   RomaH
 
53 - 09.07.19 - 12:27
(52) да что ж такое-то
ты рассказываешь как "правильно" посчитать возраст имея дату рождения и дату расчета? - их есть у меня

вопрос был - как хранить интервалы в которые этот возраст может входить
   Йохохо
 
54 - 09.07.19 - 12:30
0001.01.01 00:00:00
   Лефмихалыч
 
55 - 09.07.19 - 18:39
(53) в целых числах в данном случае
   Garykom
 
56 - 09.07.19 - 18:54
(53) В секундах храни и не выделывайся уже.


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.