Имя: Пароль:
1C
 
Возраст в днях месяцах и годах - как хранить и как определить в какой промежуток попадает?
,
0 RomaH
 
naïve
09.07.19
06:57
Лаборатория - референсные значения показателей анализов от возраста пациента:

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

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

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

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

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

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

Не просто
Сахар 9 мг/л

а


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

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

Длина месяца в днях =  кол-во дней в году / 12
32 RomaH
 
naïve
09.07.19
11:56
(31) а по-моему - у тебя
каков возраст ребенка 31 августа, если он родился 1 июля этого года?
33 ice777
 
09.07.19
11:56
есть же произвольные периоды.
ну и функция, дата в периоде или нет, наваять можно.
34 ice777
 
09.07.19
11:56
(31) это среднемесячное )
35 Garykom
 
гуру
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 лунных месяцев; високосный год в некоторых лунно-солнечных календарях.
36 Garykom
 
гуру
09.07.19
11:59
(35)+ И да учти что со временем (веками но мы же надеемся что 1С не сгинет) длина года "в днях" будет меняться.
37 Garykom
 
гуру
09.07.19
12:01
Так что заводишь периодический РС и пишешь туда свои используемые в настоящее время соответствия между единицами измерения времени.

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

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

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

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

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

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